💥 как подключить датчик воды к ардуино
Содержание:
- Подключение датчика уровня воды с Arduino
- Исходный код программы
- Базовый пример определения уровня воды
- Когда может пригодиться?
- Принцип работы датчика расхода воды
- Пример для Espruino
- Исходный код программы (скетча)
- Работа схемы
- Датчик расстояния в проектах Arduino
- Калибровка
- Особенности и разновидности современных температурных датчиков
- Как подключить датчик воды к Ардуино
- Датчик мутности (Turbidity Sensor)
Подключение датчика уровня воды с Arduino
Давайте подключим датчик уровня воды к Arduino.
Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод +(VCC) на модуле к выводу 5V на Arduino, а вывод -(GND) модуля к выводу GND Arduino.
Однако одной из широко известных проблем с этими датчиками является их короткий срок службы при воздействии влажной среды. При постоянной подаче питания на зонд скорость коррозии значительно увеличивается.
Чтобы преодолеть эту проблему, мы рекомендуем не подавать питание на датчик постоянно, а включать его только тогда, когда вы снимаете показания.
Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем высокий или низкий логический уровень, когда это необходимо. Итак, давайте подключим вывод VCC модуля к цифровому выводу 7 Arduino.
Наконец, подключите вывод S (Signal) к выводу A0 аналого-цифрового преобразователя Arduino.
Схема соединений показана на следующем рисунке.
Рисунок 4 – Схема подключения датчика уровня воды к Arduino
Исходный код программы
В коде программы автоматического индикатора уровня воды нам первым делом необходимо инициализировать все контакты Arduino, которые мы будем использовать для подключения внешних устройств: реле, ЖК дисплей, буззер (звонок) и т.д.
Затем мы инициализируем все устройства, задействованные в проекте.
После этого инициализируем модуль ультразвукового датчика и считаем время между передачей и приемом ультразвуковой волны с помощью функции pulseIn(pin). Затем произведем вычисления и покажем результат на экране ЖК дисплея.
Потом запишем условия, позволяющие проверить полна или пуста цистерна с водой и в зависимости от результатов проверки этих условий произведем соответствующие действия.
Далее представлен полный текст программы.
Arduino
#include <LiquidCrystal.h>
#define trigger 10
#define echo 11
#define motor 8
#define buzzer 12
LiquidCrystal lcd(7,6,5,4,3,2);
float time=0,distance=0;
int temp=0;
void setup()
{
lcd.begin(16,2);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.print(» Water Level «);
lcd.setCursor(0,1);
lcd.print(» Indicator «);
delay(2000);
}
void loop()
{
lcd.clear();
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
lcd.clear();
lcd.print(«Water Space In «);
lcd.setCursor(0,1);
lcd.print(«Tank is: «);
lcd.print(distance);
lcd.print(«Cm»);
delay(2000);
if(distance<12 && temp==0)
{
digitalWrite(motor, LOW);
digitalWrite(buzzer, HIGH);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(2000);
digitalWrite(buzzer, LOW);
delay(3000);
temp=1;
}
else if(distance<12 && temp==1)
{
digitalWrite(motor, LOW);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(5000);
}
else if(distance>30)
{
digitalWrite(motor, HIGH);
lcd.clear();
lcd.print(«LOW Water Level»);
lcd.setCursor(0,1);
lcd.print(«Motor Turned ON»);
delay(5000);
temp=0;
}
}
1 |
#include <LiquidCrystal.h> #define trigger 10 LiquidCrystallcd(7,6,5,4,3,2); floattime=,distance=; inttemp=; voidsetup() { lcd.begin(16,2); pinMode(trigger,OUTPUT); pinMode(echo,INPUT); pinMode(motor,OUTPUT); pinMode(buzzer,OUTPUT); lcd.print(» Water Level «); lcd.setCursor(,1); lcd.print(» Indicator «); delay(2000); } voidloop() { lcd.clear(); digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*34020000; lcd.clear(); lcd.print(«Water Space In «); lcd.setCursor(,1); lcd.print(«Tank is: «); lcd.print(distance); lcd.print(«Cm»); delay(2000); if(distance<12&&temp==) { digitalWrite(motor,LOW); digitalWrite(buzzer,HIGH); lcd.clear(); lcd.print(«Water Tank Full «); lcd.setCursor(,1); lcd.print(«Motor Turned OFF»); delay(2000); digitalWrite(buzzer,LOW); delay(3000); temp=1; } elseif(distance<12&&temp==1) { digitalWrite(motor,LOW); lcd.clear(); lcd.print(«Water Tank Full «); lcd.setCursor(,1); lcd.print(«Motor Turned OFF»); delay(5000); } elseif(distance>30) { digitalWrite(motor,HIGH); lcd.clear(); lcd.print(«LOW Water Level»); lcd.setCursor(,1); lcd.print(«Motor Turned ON»); delay(5000); temp=; } } |
Базовый пример определения уровня воды
После того, как схема будет собрана, загрузите в Arduino следующий скетч.
Как только скетч будет загружен, откройте окно монитора последовательного порта, чтобы увидеть вывод Arduino. Вы должны увидеть значение 0, когда датчик ничего не касается. Чтобы увидеть, как определяется вода, вы можете взять стакан воды и медленно погрузить в него датчик.
Рисунок 5 – Вывод показаний датчика уровня воды
Датчик не рассчитан на полное погружение, поэтому соблюдайте осторожность при эксперименте, чтобы с водой соприкасались только открытые дорожки на печатной плате
Объяснение
Скетч начинается с объявления выводов Arduino, к которым подключены выводы датчика + (VCC) и S (сигнал).
Далее мы определяем переменную , в которой хранится текущее значение уровня воды.
Теперь в функции мы сначала настраиваем вывод для питания датчика как выход, а затем устанавливаем на нем низкий логический уровень, чтобы изначально питание на датчик не подавалось. А также настраиваем последовательную связь с компьютером.
В функции мы периодически вызываем функцию с интервалом в одну секунду и выводим возвращаемое значение.
Функция используется для получения текущего уровня воды. Она включает датчик, ждет 10 миллисекунд, считывает аналоговое значение с датчика, выключает датчик и затем возвращает аналоговое значение.
Когда может пригодиться?
Представим ситуацию, когда у вас на дачном участке есть душ, основу которого составляет бак с водой, который наполняется либо через насос либо дождевой водой.
Часто узнать количество воды в резервуаре может быть утомительной задачей. Обычно вы поднимаетесь по лестнице и проверяете уровень вручную или вы услышите что вода переполняется сверху.
В наши дни появилось много разных электронных индикаторов уровня воды, но они часто имеют высокую цену и обычно сложны в установке. Большинство доступных систем используют электроды или поплавковые переключатели, которые могут быть головной болью в долгосрочной перспективе.
Мы решим эту задачу с совершенно другим подходом к знанию уровня воды — с использованием ультразвукового модуля и Ардуино. Преимущество этого метода заключается в том, что он бесконтактный, поэтому такие проблемы, как коррозия электродов, не будут влиять на эту систему. Кроме того, этот индикатор уровня воды Arduino намного проще устанавливать, чем обычные системы.
Принцип работы датчика расхода воды
Чтобы объяснить, как работает поток воды, давайте откроем крышку и посмотрим.
Все компоненты YF-402
Принцип работы датчика расхода воды довольно простой. Основными компонентами являются датчик Холла, колесо
турбины и магнит. Вода поступает через входное отверстие и выходит через выходное отверстие. Водяной поток
заставлял колесо вращаться, и магнит на колесе вращался вместе с ним. Вращение магнитного поля запускает датчик
Холла, который выдает прямоугольные волны высокого и низкого уровня (импульс).
На каждый оборот колеса объем протекающей воды составляет определенное количество, как и количество выходных
прямоугольных волн. Следовательно, мы можем рассчитать расход воды, посчитав количество прямоугольных волн
(импульсов).
Пример для Espruino
В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например, Iskra JS.
Схема устройства
- Подключите измерительный щуп к датчику солей.
-
Соедините датчик солей с подключённым щупом к аналоговому пину платформы Iskra JS. Для коммуникации понадобятся соединительные провода «мама-папа».Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.С Troyka Slot Shield провода не понадобятся вовсе.
- Опустите измерительный щуп в воду.
Исходный код
Прошейте платформу Iskra JS скриптом приведённым ниже.
- troyka-tds-sensor-example-espruino-read-data.js
-
// выводим показания датчика на пине A0 каждые 100 мс setInterval(function() { var valueSensor = analogRead(A0) * 100; print('Value sensor: ', Math.round(valueSensor), '%'); }, 100);
После загрузки скрипта, в консоль будут выводиться текущие показания примиссей воды в .
Исходный код программы (скетча)
Arduino
/*
YF‐ S201 Water Flow Sensor
Water Flow Sensor output processed to read in litres/hour
Adaptation Courtesy: hobbytronics.co.uk
*/
volatile int flow_frequency; // с помощью этой переменной мы будем подсчитывать импульсы от датчика расходы воды
// Calculated litres/hour
float vol = 0.0,l_minute;
unsigned char flowsensor = 2; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 9);
void flow () // функция обработки прерывания
{
flow_frequency++;
}
void setup()
{
pinMode(flowsensor, INPUT);
digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up
Serial.begin(9600);
lcd.begin(16, 2);
attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Setup Interrupt
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Water Flow Meter»);
lcd.setCursor(0,1);
lcd.print(«Circuit Digest»);
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
// каждую секунду рассчитываем и выводим на экран ЖК дисплея скорость потока воды в литрах в минуту
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // Updates cloopTime
if(flow_frequency != 0){
// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
l_minute = (flow_frequency / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Rate: «);
lcd.print(l_minute);
lcd.print(» L/M»);
l_minute = l_minute/60;
lcd.setCursor(0,1);
vol = vol +l_minute;
lcd.print(«Vol:»);
lcd.print(vol);
lcd.print(» L»);
flow_frequency = 0; // сбрасываем счетчик
Serial.print(l_minute, DEC); // Print litres/hour
Serial.println(» L/Sec»);
}
else {
Serial.println(» flow rate = 0 «);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Rate: «);
lcd.print( flow_frequency );
lcd.print(» L/M»);
lcd.setCursor(0,1);
lcd.print(«Vol:»);
lcd.print(vol);
lcd.print(» L»);
}
}
}
1 |
/* volatileintflow_frequency;// с помощью этой переменной мы будем подсчитывать импульсы от датчика расходы воды // Calculated litres/hour floatvol=0.0,l_minute; unsignedcharflowsensor=2;// Sensor Input unsignedlongcurrentTime; unsignedlongcloopTime; #include <LiquidCrystal.h> LiquidCrystallcd(12,11,5,4,3,9); voidflow()// функция обработки прерывания { flow_frequency++; } voidsetup() { pinMode(flowsensor,INPUT); digitalWrite(flowsensor,HIGH);// Optional Internal Pull-Up Serial.begin(9600); lcd.begin(16,2); attachInterrupt(digitalPinToInterrupt(flowsensor),flow,RISING);// Setup Interrupt lcd.clear(); lcd.setCursor(,); lcd.print(«Water Flow Meter»); lcd.setCursor(,1); lcd.print(«Circuit Digest»); currentTime=millis(); cloopTime=currentTime; } voidloop() { currentTime=millis(); // каждую секунду рассчитываем и выводим на экран ЖК дисплея скорость потока воды в литрах в минуту if(currentTime>=(cloopTime+1000)) { cloopTime=currentTime;// Updates cloopTime if(flow_frequency!=){ // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min. l_minute=(flow_frequency7.5);// (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour lcd.clear(); lcd.setCursor(,); lcd.print(«Rate: «); lcd.print(l_minute); lcd.print(» L/M»); l_minute=l_minute60; lcd.setCursor(,1); vol=vol+l_minute; lcd.print(«Vol:»); lcd.print(vol); lcd.print(» L»); flow_frequency=;// сбрасываем счетчик Serial.print(l_minute,DEC);// Print litres/hour Serial.println(» L/Sec»); } else{ Serial.println(» flow rate = 0 «); lcd.clear(); lcd.setCursor(,); lcd.print(«Rate: «); lcd.print(flow_frequency); lcd.print(» L/M»); lcd.setCursor(,1); lcd.print(«Vol:»); lcd.print(vol); lcd.print(» L»); } } } |
Работа схемы
Схема автоматического дозатора воды на основе платы Arduino Uno представлена на следующем рисунке.
Соленоидный клапан, используемый в нашем проекте, питается от 12V и имеет максимальный потребляемый ток 1.2A, а в обычном режиме он потребляет ток примерно 700mA. То есть чтобы держать клапан в открытом состоянии необходима сила тока примерно 700mA. Как мы знаем, плата Arduino не может на своих выходах обеспечить такой ток, поэтому нам необходима отдельная цепь для включения и выключения соленоидного клапана.
Для этой цели мы использовали в нашем проекте MOSFET транзистор IRF540N с N-каналом. Он имеет три вывода: затвор, исток и сток. Как видно из представленной схемы, положительный контакт соленоида запитывается от контакта Vin платы Arduino. Поскольку для питания платы Arduino мы используем адаптер на 12V, поэтому на ее контакте 12V мы можем использовать 12V для питания соленоида. Отрицательный контакт соленоида подключен к земле через исток и сток MOSFET транзистора. То есть питание на соленоид будет подаваться только тогда, когда MOSFET транзистор находится в открытом состоянии.
Соответственно, затвор MOSFET транзистора используется для его переключения между открытым и закрытым состоянием. Когда на затвор будет подаваться напряжение высокого уровня (логическая 1) транзистор будет открываться, а когда логический 0 – транзистор будет закрываться. Затвор транзистора подключен к контакту платы 12 Arduino через резистор на 1 кОм, который служит для ограничения протекающего тока, а к земле схемы затвор транзистора подключен через резистор 1 кОм.
Ультразвуковой датчик запитывается от контакта 3,3В платы Arduino. Его контакты Echo и Trigger подключены к контактам 8 и 9 платы Arduino соответственно.
Как видите, схема достаточно проста, поэтому ее легко можно собрать на макетной плате. Конструкция проекта после ее сборки на макетной плате будет иметь примерно следующий вид:
Датчик расстояния в проектах Arduino
Способность ультразвукового датчика определять расстояние до объекта основано на принципе сонара – посылая пучок ультразвука, и получая его отражение с задержкой, устройство определяет наличие объектов и расстояние до них. Ультразвуковые сигналы, генерируемые приемником, отражаясь от препятствия, возвращаются к нему через определенный промежуток времени. Именно этот временной интервал становится характеристикой помогающей определить расстояние до объекта.
Описание датчика HC SR04
Датчик расстояния Ардуино является прибором бесконтактного типа, и обеспечивает высокоточное измерение и стабильность. Диапазон дальности его измерения составляет от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия. В комплект модуля с HC SR04 arduino также входят ресивер и трансмиттер.
Ультразвуковой дальномер HC SR04 имеет такие технические параметры:
- Питающее напряжение 5В;
- Рабочий параметр силы т ока – 15 мА;
- Сила тока в пассивном состоянии -6 с.
Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):
- Контакт питания положительного типа – +5В;
- Trig (Т) – выход сигнала входа;
- Echo (R) – вывод сигнала выхода;
- GND – вывод «Земля».
Схема взаимодействия с Arduino
Для получения данных, необходимо выполнить такую последовательность действий:
- Подать на выход Trig импульс длительностью 10 микросек;
- В ультразвуковом дальномере hc sr04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
- Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;
- На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.
При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.
Подключение HC SR04 к Arduino
Выполнить подключение ультразвукового датчика расстояния к плате Arduino достаточно просто. Схема подключения показана на рисунке.
Контакт земли подключаем к выводу GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:
Библиотека для работы с HC SR04
Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет проблем с пинговыми доступами и добавляет некоторые новые функции.
К особенностям библиотеки можно отнести:
- Возможность работы с различными ультразвуковыми датчиками;
- Может работать с датчиком расстояния всего через один пин;
- Отсутствие отставания на 1 секунду при отсутствии пинга эха;
- Для простой коррекции ошибок есть встроенный цифровой фильтр;
- Максимально точный расчет расстояния.
Скачать бибилотеку NewPing можно здесь
Точность измерения расстояния датчиком HC SR04
Точность датчика зависит от нескольких факторов:
- температуры и влажности воздуха;
- расстояния до объекта;
- расположения относительно датчика (согласно диаграммы излучения);
- качества исполнения элементов модуля датчика.
В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, испуская волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.
Фактор расстояния до объекта важен, т.к. растет вероятность отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.
Также для повышения точности надо правильно направить датчик: сделать так, чтобы предмет был в рамках конуса диаграммы направленности. Проще говоря, “глазки” HC-SR04 должны смотреть прямо на предмет.
Для уменьшения ошибок и погрешности измерений обычно выполняются следующие действия:
- усредняются значения (несколько раз замеряем, убираем всплески, потом находим среднее);
- с помощью датчиков (например, DHT11 или DHT22) определяется температура и вносятся поправочные коэффициенты;
- датчик устанавливается на серводвигатель, с помощью которого мы “поворачиваем голову”, перемещая диаграмму направленности влево или вправо.
Калибровка
Чтобы получать от датчика уровня воды точные показания, рекомендуется сначала откалибровать его для конкретного типа воды, которую вы планируете контролировать.
Как вы знаете, чистая вода не проводит электрический ток. На самом деле, проводящей ее делают минералы и примеси. Таким образом, ваш датчик может быть более или менее чувствителен в зависимости от типа используемой воды.
Прежде чем вы начнете отслеживать данные или запускать обработчиков каких-либо событий, вы должны увидеть, какие показания вы на самом деле получаете от вашего датчика.
Используя приведенный выше скетч, отметьте на то, какие значения выдает ваш датчик, когда он полностью сухой, когда он частично погружен в воду, и когда он полностью погружен в воду.
Например, используя ту же схему, что и выше, вы увидите в мониторе последовательного порта значения, близкие к следующим:
- когда датчик сухой: 0;
- когда он частично погружен в воду: ~420;
- когда он полностью погружен: ~520.
Рисунок 6 – Калибровка датчика уровня воды
Этот тест может потребовать несколько проб и ошибок. Как только вы получите хороший контроль над этими показаниями, вы сможете использовать их в качестве пороговых значений, если намерены инициировать какое-либо действие. В следующем примере мы собираемся сделать именно это.
Особенности и разновидности современных температурных датчиков
Конкретизированный вывод по целесообразности использования определенного приспособления может дать только профессионал в данном вопросе.
К примеру, по функционалу различают следующие термодатчики:
- Существует вариант с подключением двух датчиков, которые в совокупности контролируют работу системы в двухстороннем режиме. Первый определяет температуру в помещении, а второй – внутри системы. Особенностью такой конструкции является повышенная экономичность и безопасность. Различные модификации позволяют настроить автоматическую систему активации подогрева, защиту от детей и т.д.
- У топовых производителей появилась такая возможность, как установка датчика теплого пола с сигнализацией. О любых нарушениях и неполадках в работе системы владелец узнает без задержек, что значительно ускорит процесс устранения сбоев и станет дополнительной системой защиты (подробнее: «Как выбрать и установить термодатчик для теплого пола»).
- Популярность набирают датчики с системой контроля предельных температур. Они настраиваются заранее на диапазон рабочих температур и активируют систему подогрева, если пол остывает ниже определенного значения, либо отключают в обратном случае. Обычно монтируются такие датчики в гофрированную трубку между линиями подачи энергоносителя в систему, что делает их защищенными от внешнего воздействия.
- Если монтаж датчика теплого пола производится вне системы, то устройство находится в полной безопасности. Рекомендуется устанавливать их в таких местах комнат, куда не имеют доступа активные воздушные массы, прямые солнечные лучи и т.д. Только при полной защищенности устройства от различных внешних раздражителей можно быть уверенным в точности данных, которые датчик передает система. Соответственно и четкость функционирования системы зависит от того, насколько хорошо отлажен и защищен датчик.
- Также существуют датчики со встроенным термостатом, как ручным, так и электронным.
Как подключить датчик воды к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- датчик воды;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа» и «папа-мама».
Схема подключения датчика воды к Ардуино
Перед тем как, подключить датчик протечки воды к плате Ардуино, следует написать скетч. Откройте программу Arduino IDE и вы увидите скетч, где уже прописаны процедуры и . Для начала зададим переменную с помощью оператора . Переменную мы будем использовать для хранения данных в памяти и присваивания ей значения, получаемого с датчика воды.
Перейдите в Панель меню — Инструменты — Монитор порта
В процедуре void setup() мы прописываем режим работы аналогового порта, как вход — команда и подключаем монитор порта с помощью . Далее в процедуре void loop() получаем значение с аналогового порта с помощью команды и передаем значение на монитор порта Arduino IDE и ставим паузу для нашего удобства.
Скетч для датчика воды (water sensor)
int water; // присваиваем имя для значений с аналогового входа A0 void setup() { pinMode(A0, INPUT); // к входу A0 подключим датчик (англ. «intput») Serial.begin(9600); // подключаем монитор порта } void loop() { water = analogRead(A0); // переменная "water" находится в интервале от 0 до 1023 Serial.println(water); // выводим значение датчика на монитор delay(1000); // задержка в одну секунду }
Пояснения к коду:
- в первой строчке мы присвоили переменной int имя для хранения значений c входа A0, значения могут принимать только целое число.
После загрузки скетча вы сможете получить данные с датчика на мониторе порта. Для этого перейдите в Arduino IDE в Панель меню — Инструменты — Монитор порта. Или используйте для открытия сочетание клавиш Ctrl + Shift + M. После того, как мы узнали показания датчика при его увлажнении, мы можем добавить в скетч функцию автоматического включения светодиода при превышении какого-либо значения.
Скетч для датчика воды и светодиода Ардуино
int water; // присваиваем имя для значений с аналогового входа A0 void setup() // процедура setup { pinMode(12, OUTPUT); // пин 12 со светодиодом будет выходом (англ. «output») pinMode(A0, INPUT); // к входу A0 подключим датчик (англ. «intput») Serial.begin(9600); // подключаем монитор порта } void loop() // процедура loop { water = analogRead(A0); // переменная "water" находится в интервале от 0 до 1023 if (water > 100) { digitalWrite(12, HIGH); } // включаем светодиод if (water < 100) { digitalWrite(12, LOW); } // выключаем светодиод Serial.println(water); // выводим значение датчика на монитор delay(1000); // задержка в одну секунду }
Пояснения к коду:
- условный оператор if позволяет определить действие при истинном условии;
- в процедуре void loop с помощью оператора if включаем светодиод при значении и выключаем светодиод при значении .
Датчик мутности (Turbidity Sensor)
Внешний вид типового датчика мутности показан на следующем рисунке.
Как вы можете видеть из рисунка, модуль датчика мутности содержит 3 основные части: водонепроницаемый корпус, схема управления и соединительные провода. Измерительный датчик состоит из передатчика и приемника.
Из представленного рисунка видно, что в данном модуле используется инфракрасный диод в качестве источника света и инфракрасный приемник в качестве детектора света. Секция управления состоит из операционного усилителя и компонентов, которые усиливают обнаруженный сигнал света.
Датчик может быть подключен к модулю с помощью разъема JST XH типа. Он содержит три контакта: VCC (напряжение питания 5 В), ground (общий провод, земля), и output (выход). На выходной контакт модуля подается сигнал, пропорциональный интенсивности принятого светового сигнала.
Технические характеристики датчика мутности:
- рабочее напряжение: 5VDC (5 В постоянного тока);
- ток: 30mA (MAX);
- диапазон рабочих температур: от -30 ° C до 80 ° C.
- совместим с Arduino, Raspberry Pi, AVR, PIC и т.д.