система полива на arduino

Система полива на arduino

Датчик уровня влажности почвы и автоматический полив на Arduino

Хотели бы вы, чтобы ваши растения сообщали о том, что их надо полить? Или просто держали вас в курсе уровня влажности почвы? В этой статье мы рассмотрим проект автоматизированного полива с использованием датчика уровня влажности почвы:

Обзор датчика уровня влажности почвы

Подобные датчики подключаются достаточно просто. Два из трех коннекторов - это питание (VCC) и земля (GND). При использовании датчик желательно периодически отключать от источника питания, чтобы избежать возможного окисления. Третий выход - сигнал (sig), с которого мы и будем снимать показания. Два контакта датчика работают по принципу переменного резистора - чем больше влаги в почве, тем лучше контакты проводят электричество, падает сопротивление, сигнал на контакте SIG растет. Аналоговые значения могут отличаться в зависимости от напряжения питания и разрешающей способности ваших аналоговых пинов микроконтроллера.

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

Второй вариант более гибкий:

Ну и конечно можно напрямую запаять контакты на датчик.

Если вы планируете использовать датчик за пределами квартиры, стоит дополнительно задуматься о защите контактов от грязи и прямого попадания солнечных лучей. Возможно, стоит подумать о корпусе или нанесении защитного покрытия непосредственно на контакты датчика уровня влажности и проводники (смотрите на рисунок ниже).

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

Проблема недолговечности датчика уровня влажности почвы

Один из недостатков датчиков подобного типа - недолговечность их чувствительных элементов. К примеру, компания Sparkfun решает эту проблему, используя дополнительное покрытие (Electroless Nickel Immersion Gold). Второй вариант продления срока действия сенсора - подавать на него питание непосредственно при снятии показаний. При использовании Arduino, все ограничивается подачей сигнала HIGH на пин, к которому подключен датчик. Если вы хотите запитать датчик большим напряжением чем предоставляет Arduino, всегда можно использовать дополнительный транзистор.

Контроль уровня влажности почвы - пример проекта

В приведенном ниже проекте использованы датчик уровня влажности, аналог платы Arduino - RedBoard и LCD дисплей, на котором выводятся данные про уровень влажности почвы.

В приведенном ниже проекте использованы датчик уровня влажности, аналог платы Arduino - RedBoard и LCD дисплей, на котором выводятся данные про уровень влажности почвы.

Датчик уровня влажности почвы компании SparkFun:

Красный проводник (VCC) подключается к 5 В на Arduino, черный - к земле (GND), зеленый - сигнал - к аналоговому пину 0 (A0). Если вы используете другой аналоговый пин на Arduino, не забудьте внести соответствующие изменения в скетч для микроконтроллера, представленный ниже.

LCD дисплей подключен к 5 В, земле и цифровому пину 2 (также можно изменить и внести изменения в код) для обмена данными с микроконтроллером по серийному протоколу связи.

Стоит отметить, что если вы хотите продлить срок службы вашего сенсора, можно подключить его питание к цифровому пину и питать его только при считывании данных, а после - отключать. Если запитывать датчик постоянно, его чувствительные элементы вскоре начнут ржаветь. Чем больше влажность почвы, тем быстрее будет проходить коррозия. Еще один вариант – нанести гипс на датчик. В результате влага будет поступать, но коррозия значительно замедляется.

Программа для Arduino

Скетч достаточно простой. Для передачи данных на LCD дисплей вам необходимо подключить библиотеку Software Serial library. Если у вас в ее нет, скачать можно здесь: Arduino GitHub

Дополнительные пояснения приведены в комментариях к коду:

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

// В скетче считываются данные с датчика и отображается уровень влажности почвы // Для работы с дисплеем используется библиотека softwareserial library #include // Подключите пин для обмена данными с использованием LCD дисплея по серийному протоколу RX к цифровому пину 2 Arduino SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (не используется) // Тут мы настраиваем некоторые константы. // Настройка констант зависит от условий внешней среды, в которой используется датчик int thresholdUp = 400; int thresholdDown = 250; // Настраиваем пин A0 на Arduino для работы с датчиком: int sensorPin = A0; void setup(){ mySerial.begin(9600); // устанавливаем скорость обмена данными на 9600 baud delay(500); // ждем пока дисплей прогрузится } void loop(){ // Здесь мы объявляем строку, в которой хранятся данные для отображения // на жидкокристаллическом дисплее. Значения будут изменяться // в зависимости от уровня влажности почвы String DisplayWords; // В переменной sensorValue хранится аналоговое значение датчика с пина А0 int sensorValue; sensorValue = analogRead(sensorPin); // перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254); mySerial.write(128); // очистка дисплея: mySerial.write(" "); mySerial.write(" "); // перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254); mySerial.write(128); // запись необходимой информации на дисплей: mySerial.write("Water Level: "); mySerial.print(sensorValue); //Использование.print вместо .write для значений // Теперь мы проведем проверку уровня влажности по сравнению с заданными нами предварительно числовыми константами. // Если значение меньше thresholdDown, отображаем слова: // "Dry, Water it!" if (sensorValue <= thresholdDown){ // перемещение курсора к началу второй строки дисплея: mySerial.write(254); mySerial.write(192); DisplayWords = "Dry, Water it!"; mySerial.print(DisplayWords); // Если значение не ниже thresholdDown надо провести проверку, не будет // ли оно больше нашего thresholdUp и, если, больше, // отобразить надпись "Wet, Leave it!": } else if (sensorValue >= thresholdUp){ // перемещение курсора к началу второй строки дисплея: mySerial.write(254); mySerial

// В скетче считываются данные с датчика и отображается уровень влажности почвы

// Для работы с дисплеем используется библиотека softwareserial library

// Подключите пин для обмена данными с использованием LCD дисплея по серийному протоколу RX к цифровому пину 2 Arduino

SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (не используется)

// Тут мы настраиваем некоторые константы.

// Настройка констант зависит от условий внешней среды, в которой используется датчик

int thresholdUp = 400;

int thresholdDown = 250;

// Настраиваем пин A0 на Arduino для работы с датчиком:

int sensorPin = A0;

mySerial.begin(9600); // устанавливаем скорость обмена данными на 9600 baud

delay(500); // ждем пока дисплей прогрузится

// Здесь мы объявляем строку, в которой хранятся данные для отображения

// на жидкокристаллическом дисплее. Значения будут изменяться

// в зависимости от уровня влажности почвы

String DisplayWords;

// В переменной sensorValue хранится аналоговое значение датчика с пина А0

sensorValue = analogRead(sensorPin);

// перемещение курсора к началу первой строки LCD дисплея:

mySerial.write(254);

mySerial.write(128);

// очистка дисплея:

mySerial.write(" ");

mySerial.write(" ");

// перемещение курсора к началу первой строки LCD дисплея:

mySerial.write(254);

mySerial.write(128);

// запись необходимой информации на дисплей:

mySerial.write("Water Level: ");

mySerial.print(sensorValue); //Использование.print вместо .write для значений

// Теперь мы проведем проверку уровня влажности по сравнению с заданными нами предварительно числовыми константами.

// Если значение меньше thresholdDown, отображаем слова:

// "Dry, Water it!"

if (sensorValue <= thresholdDown){

// перемещение курсора к началу второй строки дисплея:

mySerial.write(254);

mySerial.write(192);

DisplayWords = "Dry, Water it!";

mySerial.print(DisplayWords);

// Если значение не ниже thresholdDown надо провести проверку, не будет

// ли оно больше нашего thresholdUp и, если, больше,

// отобразить надпись "Wet, Leave it!":

} else if (sensorValue >= thresholdUp){

// перемещение курсора к началу второй строки дисплея:

mySerial.write(254);

Source: http://arduino-diy.com/arduino-datchik-urovnya-vlazhnosti-pochvy-i-avtomaticheskiy-poliv

Искать тут:автоматический полив hunter

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed