Датчик уровня воды: различия между версиями

Материал из MIK32 микроконтроллер
мНет описания правки
Нет описания правки
Строка 34: Строка 34:


Соберем схему.
Соберем схему.
 
  // контакт подключения аналогового выхода датчика
  // Подключаем необходимые библиотеки
<code>int aPin=A0;
#include <OneWire.h>
// контакт  подключения вывода реле
#include <DallasTemperature.h>
int soundPin=11;
 
// частота звукового сигнала
// Шину данных подключаем к выводу №2 Arduino
int freq[3]={587,466,293};
#define ONE_WIRE_BUS 2
// переменная для сохранения значения датчика
 
int avalue=0;
// Создаём экземпляр класса для нашей шины и ссылку на него
// значение уровней
OneWire oneWire(ONE_WIRE_BUS);
int levels[3]={600,500,400};
DallasTemperature sensors(&oneWire);
// текущий уровень
 
int level=0;</code>
// ФУНКЦИЯ ПРЕДУСТАНОВОК
void setup(void)
<code>void setup()</code> 
{
<code>{
  Serial.begin(9600); // Инициализация серийного порта
  // инициализация последовательного порта
  sensors.begin(); // Инициализация шины
  Serial.begin(9600);
}
  // настройка выводов индикации светодиодов
 
  // в режим OUTPUT
// ОСНОВНОЙ ЦИКЛ
  pinMode(soundPin,OUTPUT);
void loop(void)
  }
{
Serial.print("Reading Temperature...");
void loop()
// Подаём команду на чтение
  {
sensors.requestTemperatures();
  // получение значения с аналогового вывода датчика
Serial.println("Read");
  avalue=analogRead(aPin);
Serial.print("Sensor Temperature 1: ");
  // вывод значения в монитор последовательного порта Arduino
// Отображаем значение температуры
  Serial.print("avalue=");Serial.println(avalue);
Serial.print(sensors.getTempCByIndex(0));
  // вывод звука различной частоты для разных уровней погружения
}
  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);
}</code>
Аналоговый вывод датчика подключен к аналоговому входу Arduino,  который представляет собой  аналого-цифровой преобразователь (АЦП) с разрешением  10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: > 400 – минимальное погружение; > 500 – средний уровень погружения; > 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.
Аналоговый вывод датчика подключен к аналоговому входу Arduino,  который представляет собой  аналого-цифровой преобразователь (АЦП) с разрешением  10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: > 400 – минимальное погружение; > 500 – средний уровень погружения; > 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.

Версия от 19:36, 31 мая 2021

Датчик уровня воды

Датчик уровня воды предназначен для определения уровня воды в различных емкостях, где недоступен визуальный контроль, с целью предупреждения перенаполнения емкости водой через критическую отметку.

Конструкции датчиков уровня воды могут быть различными – поплавковые, погруженные, врезные. Данный датчик воды – погруженный. Чем больше погружение датчика в воду, тем меньше сопротивление между двумя соседними проводами. Датчик имеет три контакта для подключения к контроллеру.

  • + – питание датчика;
  • - – земля;
  • S - аналоговое значение.

На вывод S подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик имеет красный светодиод, сигнализирующих о наличие поступающего на датчик питания.


Технические характеристики

  • Напряжение питания: 3.3-5 В;
  • Ток потребления 20 мА;
  • Выход: аналоговый;
  • Зона обнаружения: 16×30 мм;
  • Размеры: 62×20×8 мм;
  • Рабочая температура: 10 – 30 °С.

Пример кода

Схема с датчиком уровня воды

Рассмотрим подключение датчика уровня воды к 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 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.