Ардуино парник

2 Список необходимых компонентов

Все ссылки даны в ознакомительных целях.Arduino UNO ( микроконтроллер)ESP8266-01 (коммуникационный модуль) DHT22 (датчик относительной влажности воздуха) DS18B20 (1-Wire цифровой датчик температуры, используется для измерения температуры почвы)YL-69 LM393 (Датчик влажности почвы)LDR (датчик освещенности) 2 x светодиоды (красный и зеленый)1 x 2-х канальное релейный модуль DC 5V Relay 5V DC насос — $3.

14 Завершение программы андроид

Теперь надо подключить все сенсоры, как показано на схеме.

Идеальным решением было бы собирать и тестировать проект по частям.

В следующей последовательности:1. Установить и протестировать все сенсоры2. Установить и минимально сконфигурировать ESP-013. Изменить установку ESP-01 для финальной конфигурации и протестировать4. Сконфигурировать ThingSpeak Status Channel5. Установить ThingSpeak код на Arduino и проверить статус сенсоров на облаке6.

Разработать первую версию программы на андроид для проверки статусных сообщений от сенсоров7. Установить исполнительные устройства8. Сконфигурировать ThingSpeak Actuators channels9. Установить и протестировать на Arduino код для исполнительных устройств10. Сделать вторую версию программы на андроид для всего устройства в сборе.

4 Подключение сенсоров

// DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 on pin D5 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
int soilTemp = 0;

//DHT
#include "DHT.h"
#include <stdlib.h>
int pinoDHT = 11;
int tipoDHT =  DHT22;
DHT dht(pinoDHT, tipoDHT); 
int airTemp = 0;
int airHum = 0;

// LDR (Light)
#define ldrPIN 1
int light = 0;

// Soil humidity
#define soilHumPIN 0
int soilHum = 0;
void setup()
{
  Serial.begin(9600); 
  DS18B20.begin();
  dht.begin();
}

void loop()
{
  readSensors();
  displaySensors();
  delay (10000);
}
/********* Read Sensors value *************/
void readSensors(void)
{
  airTemp = dht.readTemperature();
  airHum = dht.readHumidity();

  DS18B20.requestTemperatures(); 
  soilTemp = DS18B20.getTempCByIndex(0); // Sensor 0 will capture Soil Temp in Celcius
  
  soilHum = map(analogRead(soilHumPIN), 1023, 0, 0, 100);             
 
  light = map(analogRead(ldrPIN), 1023, 0, 0, 100); //LDRDark:0  ==> light 100%  

}

/********* Display Sensors value *************/
void displaySensors(void)
{
  Serial.print ("airTemp  (oC): ");
  Serial.println (airTemp);
  Serial.print ("airHum    (%): ");
  Serial.println (airHum);
  Serial.print ("soilTemp (oC): ");
  Serial.println (soilTemp);
  Serial.print ("soilHum   (%): ");
  Serial.println (soilHum);
  Serial.print ("light     (%): ");
  Serial.println (light);
  Serial.println ("");
}

На фото видно как выводятся данные на экран.

Предлагаем ознакомиться:  Чем удобрять теплицу осенью - Всё про теплицы

Сначала надо создать пользовательский интерфейс. На картинке показаны основные видимые и невидимые элементы.

После этого надо создать блоки. Пункты меню соответствуют номерам скриншотов.

1 Переменные состояния, которые должны быть объявленные как глобальные

2 Каждые две секунды (зависит от Clock1) вызывается процедура «readArduino»

Процедура возвращает значение переменных которые должны будут отобразится на экране. При этом значение состояния (0 и 1) для исполнительных устройств преобразуются в «ВКЛ» и «ВЫКЛ» для лучшего восприятия.

Эти значения (Status) будут отображаться в соответствующих «Ярлыках»

В предыдущей части была простая программа, которая «читала» данные из канала и выводила их на экран. Теперь надо сделать, чтобы программа «писала» команды в Actuator Channal, так чтобы эти команды могли быть прочитаны контроллером и лампа с насосом соответственно отрабатывали.

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

Нажимая кнопки в приложении можно видеть результат в Serial Monitor.

4 ESP8266-01 базовая конфигурация

Самый быстрый способ «пообщаться» с модулем это АТ команды. В модуль уже встроен процессор АТ команд. По умолчанию модуль идет с заводскими настройками 115200 бод, надо выставить в настройках 9600 бод.

Во-первых, надо подключить модуль, как показано на фото

( Обратите внимание, что вывод Тх модуля ESP-01 подключен к выводу Тх UNO, так же как и выводы Rx подключены друг к другу. Позже это подключение будет изменено ).

Затем подключите UNO к компьютеру, откройте IDE и загрузите пример, который находится File> Examples> 01.Basics> BareMinimum. Это пустой код, для того, чтобы не было конфликтов между ESP-01 и UNO. Этот код залили в Ardunio до того, как подключить к нему ESP-01, для того чтобы быть точно уверенными, что Ardunio не будет использовать выводы Тх и Rx для чего-то еще.

Предлагаем ознакомиться:  Какая валюта в Грузии курс к рублю и доллару

Теперь надо изменить скорость передачи данных в модуле ESP-01. Для этого в IDE дайте команду

AT   CIOBAUD = 9600

AT UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

На пример 9600 baud / 8 data bits / 1 stop bits and none parity and flow control

AT   UART_DEF = 9600,8,1,0,0

Теперь измените скорость передачи данных в настройках IDE на 9600 и отправьте команду АТ, должен придти ответ ОК.Далее надо переключить модуль в режим STA для того, чтобы он мог подключиться к точке доступа вашей сети.

AT   CWMODE = 1

Чтобы модуль подключился к сети введите команду AT CWJAP = «network_name», «network_name_1», где network_name – имя вашей сети, а network_name_1 – пароль к вашей сети (пароль и имя сети должны быть в кавычах)Если вы видите ответ WIFI CONNECTED WIFI GOT IP, значит соединение установлено. Проверьте IP адрес командой

AT   CIFSR

Адрес, который появится в вашем мониторе, вы можете использовать в дальнейшем. Как только вы сконфигурировали модуль, можете подключать его окончательно, но для этого надо изменить его схему включения, как показано на рисунке.

• ESP-01 RX (Yellow) —> UNO Pin D7• ESP-01 TX (Orange) —> UNO Pin D6• ESP-01 Ch-Pd (Brown) —> Vcc (3.3V)• ESP-01 Reset (Blue) —> UNO Pin D8• ESP-01 Vcc (Red) —> 3.3V• ESP-01 Gnd (Black) —> UNO GND

Обратите внимание, что библиотека Software Serial использует вывод UNO Pin D7 как TX и соединяется он с выводом ESP-01 RX, а UNO Pin D6 как RX, соединенный с ESP-01 TX.

Введите не большой код, для того, чтобы проверить правильность подключения и настройки модуля ESP-01

#include <SoftwareSerial.h>   
SoftwareSerial esp8266(6,7);  //Rx ==> Pin 6; TX ==> Pin7 

#define speed8266 9600 

void setup() 
{
  esp8266.begin (speed8266); 
  Serial.begin(speed8266);
  Serial.println("ESP8266 Setup test - use AT coomands");
}

void loop() 
{
  while(esp8266.available())
  {
    Serial.write(esp8266.read());
  }
  while(Serial.available())
  {
    esp8266.write(Serial.read());
  }
}

Теперь несколько АТ команд. Смотрите за результатами в Serial Monitor.

Предлагаем ознакомиться:  Как сделать из ленты цветок

* AT =====> ESP8266 returns OK* AT RST =====> ESP8266 restart and returns OK* AT GMR =====> ESP8266 returns AT Version; SDK version; id; OK* AT CWMODE{q} => ESP8266 returns mode type* AT CWLAP ===> ESP8266 returns close access points* AT CIFSR ===> ESP8266 returns designided IP

11 конфигурирование канала исполнительных устройств (Actuators Channels)

Channel ID 375598 ==> LED Red (Pump)

◦ Field1 = 0 ==> Pump OFF

◦ Field1 = 1 ==> Pump ON

2. Channel ID 375599 ==> LED Green (Lamp)

◦ Field1 = 0 ==> Lamp OFF

◦ Field1 = 1 ==> Lamp ON

11 загрузка и тестирование кода исполнительных устройств в Ardunio.

Когда мы отправляли данные в облако, то мы «писали» эти данные в канал статуса (Status Channel) ThingSpeak., «передавая» (выгружая) эти данные. Теперь мы должны «прочитать» данные из канала исполнительных устройств (Actuator Channel), «принимая» (загружая) эти данные.

Для этого необходимо отправить строку GET и эта процедура состоит из 3 этапов. «Start cmd»

AT CIPSTART="TCP","184.106.153.149",80

Длина строки

AT CIPSEND=36

И сама строка GET

GET /channels/375598/fields/1/last

Каналы будут «читаться» раз в 10 секунд

После отправки GET мы должны принять ответ от ThingSpeak. Ответ должен быть либо 0, либо 1, для каждого из каналов. Если будут какие-то другие значения, то их просто игнорируем.

Основное различие между этой частью и предыдущей только в функции readThingSpeak(String channelID)Ниже приведен код который выполняет описаные действия.

15 Финальная сборка

https://www.youtube.com/watch{q}v=oUIHR4_OT1Y

На данном этапе есть полностью завершенное андроид приложение, полностью собранная «железная» часть, но нет кода в контроллере, который бы постоянно читал данные и отправлял команды на облако. Надо просто объединить все фрагменты кода, написанного ранее.В конечно коде есть дополнительные опции проверки (на пример если ESP-01 зависнет).

Загрузка ...
Adblock detector