Пример использования датчика уровня воды в проекте на Arduino

Рассмотрим подключение датчика уровня воды к Arduino. Создадим проект звуковой сигнализации затопления помещения. При погружении датчика в воду, сигнализация издает три вида звуковых сигналов (небольшое затопление, средний уровень, критический уровень), соответствуюший трем уровням воды. Для воспроизведения звуковых можно к цифровому выводу подключить пьезоизлучатель — электроакустическое устройства воспроизведения звука. Но при этом звук получается очень тихий. Чтобы получить громкость более приличного уровня, к цифровому выводу Arduino динамик, но не напрямую, а через транзистор.

Для проекта нам понадобятся следующие детали:

  • Плата Arduino Uno
  • Датчик уровня воды
  • Динамик 8 Ом
  • Резистор 500 Ом
  • Транзистор КТ503е
  • Соединительные провода

Соберем схему проекта

Создадим новый скетч и внесем в него следующие строчки

// контакт подключения аналогового выхода датчика
int aPin=A0;
// контакт  подключения вывода реле
int soundPin=11;
// частота звукового сигнала
int freq[3]={587,466,293};
// переменная для сохранения значения датчика
int avalue=0;
// значение уровней
int levels[3]={600,500,400};
// текущий уровень
int level=0;

void setup() {
  // инициализация последовательного порта
  Serial.begin(9600);
  // настройка выводов индикации светодиодов
  // в режим OUTPUT
  pinMode(soundPin,OUTPUT);
}

void loop() {
  // получение значения с аналогового вывода датчика
  avalue=analogRead(aPin);
  // вывод значения в монитор последовательного порта Arduino
  Serial.print("avalue=");Serial.println(avalue);
  // вывод звука различной частоты для разных уровней погружения
  if (avalue > levels[0]) {
    tone(soundPin,freq[0],2000);
  } else if (avalue>levels[1]) {
    tone(soundPin,freq[1],2000);
  } else if(avalue>levels[2]) {
    tone(soundPin,freq[2],2000);
  } else {
    noTone(soundPin);
  }
  // пауза перед следующим получением значения 1000 мс
  delay(1000);
}

Аналоговый вывод датчика подключен к аналоговому входу Arduino, который представляет собой аналого-цифровой преобразователь (АЦП) с разрешением 10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: > 400 – минимальное погружение; > 500 – средний уровень погружения; > 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.