Поиск

Рекомендовать

Календарь

Ноябрь 2018
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  

Кто на сайте?

Сейчас на сайте находятся:
 2 гостей 

Счетчик

Сегодня11
Вчера37
За эту неделю187
За этот месяц92
Всего104851
Главная Автоматика Контроллеры Arduino Arduino поливает огород (Часть 2)
Баннер

Arduino поливает огород (Часть 2)

Тестирование Arduino в программе VBB3Как я обещал в предыдущей статье, размещаю исходный код программы и видео работы программы в эмуляторе VBB3 - Virtual Bread Board. Для начала сделаю некоторые пояснения. Я разделил огород на 3 зоны полива. Размер и количество зон сложилось из того, как часто надо поливать определенное место, производительность насоса и расход воды распылителями. То есть если у Вас большой участок, об'ем полива равномерный, и производительность насоса больше чем расход воды распылителями, Вы можете обойтись одной зоной. У меня же производительность установленного насоса не большая, поэтому я решил сделать 3 зоны. На одной из зон устанавливается датчик влажности почвы, и дополнительно потребуется датчик температуры наружного воздуха, для того, чтоб полив не включался в холодную погоду.

Теперь небольшое отступление. Забор воды будет браться из гидроаккумулятора, установленного в погребе. Поэтому и нужно подобрать производительность насоса и расход воды распылителями, чтобы вода в гидроаккумуляторе не успевала закончиться. Предвижу возражения, что поливать нужно теплой водой. С этим никто не спорит, поэтому возможен следующий вариант, для которого конечно нужно будет переделать программу:

  1. Наполняется большой бак для полива. Уровень воды в баке контролируется программой.
  2. В программу устанавливаем еще один датчик, который будет следить за темперарурой воды в баке.
  3. Полив будет включиться при условии: а) Земля сухая. б) Вода в баке теплая. в) Температура воздуха подходит для полива.  

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

Вернемся к программе. В тексте программы сейчас прописано время полива 5 секунд. Для тех, кто не смотрел видео, поясню, что такое время стоит просто для удобного просмотра в тестере. При настоящей работе, Вы сами проставите время полива для каждого участка. Время выставляется в секундах. Поэтому, например чтобы систепа производила полив одной зоны в течении 20 минут, умножаем 20*60, и получаем 1200 секунд. Для другой зоны 25 минут - 25*60 = 1500 секунд. Система включается на полив при показаниях датчиков, тебующих полива, и выключается только после полив свех трех зон. 

Теперь о датчиках. При установке реального датчика, нужно будет изменить условия включения (заменить число 500 в программе) на реальные показания датчика при котором должен влючаться полив. Сейчас в программе такие настройки: если показания датчика температуры больше 500, считаем что на улице тепло, иначе - холодно, поливать нельзя. Если показания датчика влажности меньше 500, значит нужно поливать, если больше 500 - полив не требуется, замля мокрая.

И наконец текст программы. (К сожалению программа тестер не воспринимает кирилицу. Поэтому при копировании исходника, удалите все рускоязычные комментарии в программе)

 

 
class AnalogInput extends com.muvium.compatibility.arduino.Arduino{//Automatically Added VBB Framework Code - do not remove
  /*
  Created by Alexandr Dolgickiy
  Modified 28 Dec 2012
  http://dom-313.ru
  */
 
  //Объявляем номера контактов для датчиков
  int sensorPin_temp = 0;   // Датчик температуры 
  int sensorPin_vlaj = 1;   // Датчик влажности  
  // Номера контактов для исполнительных устройств  
  int ledPin_1 = 11;  // Зона полива 1    
  int ledPin_2 = 12;  // Зона полива 2        
  int ledPin_3 = 13;  // Зона полива 3         
 
  // Переменные храниения показаний датчиков
  int sensorValue_temp = 0;  
  int sensorValue_vlaj = 0; 
 
  // Флаги влючения полива по зонам
  int Poliv1=0;
  int Poliv2=0;  
  int Poliv3=0;
 
  //Время полива зон (в секундах)
  int TimePoliv1=5;   // Зона 1
  int TimePoliv2=5;  // Зона 2  
  int TimePoliv3=5;  // Зона 3  
 
  int TempVar;
 
  void setup() {
    // Инициализаия выводов для входа
    pinMode(sensorPin_temp, INPUT); 
    pinMode(sensorPin_vlaj, INPUT); 
 
    // Инициализаия выводов для выхода
    pinMode(ledPin_1, OUTPUT);  
    pinMode(ledPin_2, OUTPUT);    
    pinMode(ledPin_3, OUTPUT);
    // Для вывода сообщений при отладке. В дальнейшем закоментировать
    Serial.begin(9600);      
  }
 
  void loop() {
    // Читаем показания датчиков
    sensorValue_temp = analogRead(sensorPin_temp);   
    sensorValue_vlaj = analogRead(sensorPin_vlaj);  
 
    // Показываем показания датчиков. В дальнейшем закоментировать
    Serial.println("Temp - "+sensorValue_temp);
    Serial.println("Vlaj - "+sensorValue_vlaj);
 
    // Условие: Если подходящаая температура и влажность или уже идет полив
    if ((sensorValue_temp>500 &amp;&amp; sensorValue_vlaj<500) || (Poliv1==1 || Poliv2==1 || Poliv3==1)) {
      // Условие: Если подходящаая температура и влажность и нет полива, то включаем первую зону.
      if (Poliv1 == 0 &amp;&amp; Poliv2 == 0 &amp;&amp; Poliv3 == 0) {Poliv1 = 1; TempVar = 0;}
 
      // Если идет полив зоны 1
      if (Poliv1 == 1) {
        if (TempVar < TimePoliv1) {
          digitalWrite(ledPin_1, HIGH);   // Открыта подача воды
          TempVar = TempVar + 1;    // Увеличиваем счетчик на 1 секунду
        } else {
          Poliv1 = 0;      // Отключаем полив зоны 1
          Poliv2 = 1;      // Включаем полив следующей зоны
          TempVar = 0;      // Сбрасываем счетчик времени полива
          digitalWrite(ledPin_1, LOW);  // Отключаем полив зоны 1
        }
      }
 
      // Если идет полив зоны 2
      if (Poliv2 == 1) {
        if (TempVar < TimePoliv2) {
          digitalWrite(ledPin_2, HIGH);   // Открыта подача воды 
          TempVar = TempVar + 1;    // Увеличиваем счетчик на 1 секунду
        } else {
          Poliv2 = 0;      // Отключаем полив зоны 2
          Poliv3 = 1;      // Включаем полив следующей зоны
          TempVar = 0;      // Сбрасываем счетчик времени полива
          digitalWrite(ledPin_2, LOW);  // Отключаем полив зоны 2
        }
      }      
 
      // Если идет полив зоны 3
      if (Poliv3 == 1) {
        if (TempVar < TimePoliv3) {
          digitalWrite(ledPin_3, HIGH);   // Открыта подача воды 
          TempVar = TempVar + 1;    // Увеличиваем счетчик на 1 секунду
        } else {
          Poliv3 = 0;      // Отключаем полив зоны 3
          TempVar = 0;      // Сбрасываем счетчик времени полива
          digitalWrite(ledPin_3, LOW);  // Отключаем полив зоны 3
        }
      }      
 
    }
 
 
    delay(1000); // пауза 1 секунда                 
  }
}
 
 

 

 

Скачать полностью архив программы можно здесь

На этом пока все. После сборки самой схемы, отладки и тестирования, я обязательно продолжу эту тему. Свои вопросы Вы можете оставлять в комментариях к статье.

Вложения:
Скачать файл (AnalogInput.rar)Архив программы для VBB3[ ]3 Kb
 

Комментарии  

 
+1 #4 Administrator 16.12.2014 15:11
К теме от датчиках влажности: лучший вариант - угольные электроды от использованных батареек. Они лишены главного недостатка - не окисляются.
Цитировать
 
 
0 #3 Илья 28.11.2013 14:03
Почитал, посмотрел. Сказать практически нечего. Я в восхищении! Мне такая штука НУ ОЧЕНЬ КАК нужна. Единственно, как справедливо заметил Артем, могут возникнуть проблемы с датчиком влажности почвы. Подозреваю что такой датчик придется делать самому. С нетерпением ждем практического воплощения Александр.
Цитировать
 
 
0 #2 Administrator 14.08.2013 05:43
Артем, здравствуй! К сожелению пока не могу тебе ничего подсказать, так как все лето занимаюсь строительством, и с Arduino заниматься некогда. Программу я написал и протестировал виртуально, до сборки самой схемы по вышеуказанной причине руки пока не дошли. Осенью, после завершения строительства обязательно продолжу эту тему, так как она является основной для моего проекта. Все результаты обязательно опубликую на сайте.
Цитировать
 
 
+2 #1 Артем 13.08.2013 22:38
Александр, здравствуйте. Какие датчики влажности Вы используете?
Дело в том, что собираю похожую систему, и столкнулся с проблемой при использовании датчиков влажности почвы (конкретно с такой моделью http://www.elecfreaks.com/3162.html). Показания сильно скачут, удается их стабилизировать если уплотнить вокруг землю. Но ведь растениям нужна более-менее рыхлая почва. Может поделитесь мыслями по этому поводу.
P.S. Можно конечно сгладить показания, но насколько они станут достоверными...
Цитировать
 

Добавить комментарий


Защитный код
Обновить