Introduction: Greenhouse Automation (Tutorial Is Under Construction)
(English)
The main idea of this project is to make the automation of a greenhouse and send its data to the cloud through the wireless communication using the ESP8266 Module. It will monitor the Temperature and Humidity of the Greenhouse using the DHT11 thermohigrometer module. And will measure the soil humidity using the YL-69 module when the humidity is below 20% a water pump will be turned on and then the soil will become wet and after the humidity reach 20% or more again the water pump will be turned off.
All the data is send to the cloud, ThingSpeak, there are four charts:
- Temperature (°C);
- Air Humidity (%);
- Soil Humidity (%);
- Water Pump Status (1 - On, 0 - Off).
(Portuguese)
A ideia principal deste projeto é de fazer a automação de uma estufa de plantas e mandar seus dados para a nuvem através da comunicação sem fio utilizando o Módulo ESP8266. Serão monitoradas a Temperatura e Umidade da Estufa utilizando o Módulo Termohigrômetro DHT11. E será medida a umidade do solo utilizando o módulo YL-69, quando a umidade do solo chegar abaixo de 20% uma bomba será ligada e irá bombear água pro solo o tornando úmido e após a umidade chegar a 20% ou mais a bomba d'água será desligada.
Todos os dados são enviados para a nuvem, ThingSpeak, onde há quatro gráficos:
- Temperatura (°C);
- Umidade do Ar (%);
- Umidade do Solo (%);
- Estado da Bomba D'água (1 - Ligado, 0 - Desligado).
The URL for the collected Data is showed below:
https://thingspeak.com/channels/394430
Step 1: Circuit Assembly (Montagem Do Circuito)
(English)
The first step is to separate the material that will be used:
- Arduino Uno;
- Protoboard;
- Soil Moisture Module (YL-69);
- Temperature and Humidity Module (DHT11);
- ESP8266 Module;
- Wires (many of them);
- 3.3 Volts Power Supply;
- Water pump;
- 3x 1KOhm Resistors;
- 1x 10KOhm Resistor.
The circuit assembly can be seen in the image of this step, please note that it is necessary to mount a voltage divider so that the ESP8266 is powered and there is no risk of the module being damaged.
(Portuguese)
O primeiro passo é separar o que será utilizado:
- Arduino Uno;
- Protoboard;
- Módulo Medidor de Umidade do Solo (YL-69);
- Módulo Medidor de Temperatura e Umidade (DHT11);
- Módulo ESP8266;
- Fios (muitos deles);
- Fonte de Alimentação de 3,3 Volts;
- Bomba D'água;
- 3x Resistores de 1KOhm;
- 1x Resistor de 10KOhm;
A montagem do circuito pode ser vista na imagem deste passo, observe que é necessário realizar um divisor de tensão para que o ESP8266 seja alimentado para que não corra risco do módulo estrague.
Step 2: Code (Código)
(English)
In this step, the code will be shown. The comments are in Portuguese.
(Portuguese)
Neste passo o código será exibido. Os comentário estão em Português.
//##################
// Área de Includes
//##################
//Include da Biblioteca Software Serial (Definir Pinos Digitais do Arduino como TX e RX)
#include <SoftwareSerial.h>
//Include da Biblioteca DHT (Sensor de Umidade e Temperatura)
#include <DHT.h>
//================
// Área de Defines
//================
// Definindo onde os Pinos do Sensor de Umidade e Temperatura serão Ligados
#define DHTPIN 7 // Define o Pino 7 como o Receptor dos dados do sensor de Temperatura e Umidade
#define DHTTYPE DHT11
DHT sensorUT(DHTPIN, DHTTYPE);
int estado_bomba = 0;
// Definindo os Pinos RX e TX do Arduino RX = Pino 2, TX = Pino 3 - Conectar o RX do Arduino ao TX do ESP8266 e vice-versa
SoftwareSerial ESP8266 = SoftwareSerial(2,3);
//==========================
// Área de Variáveis Globais
//==========================
String apiKey = "Your API Key"; // String para armazenar a chave API de Escrita no Canal
String ssid = "Your SSID"; // SSID da Rede Wireless
String password = "Your SSID PASSWORD"; //Senha da Rede Wireless
//================
// Área de Funções
//================
// Envia dados para o ThingSpeak
void escreveThingSpeak(float temperatura, float umidadeAr, int umidadeSolo, int estadoBomba){
String comandosESP8266 = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80"; //Inicializar comunicação TCP com o ThingSpeak na Porta 80
ESP8266.println(comandosESP8266);
if(ESP8266.find("Error")){
Serial.println("AT+CIPSTART error"); // Se for encontrado algum erro na resposta do ESP8266 escrever na serial do Arduino
return false;
}
String getStr = "GET /update?api_key="; // Cria a String que enviará os dados para o ThingSpeak através do Comando GET
getStr += apiKey;
getStr +="&field1=";
getStr += String(temperatura);
getStr +="&field2=";
getStr += String(umidadeAr);
getStr +="&field3=";
getStr += String(umidadeSolo);
getStr +="&field4=";
getStr += String(estadoBomba);
getStr += "\r\n\r\n";
//Envia o tamanho dos dados que serão enviados ao ESP8266 e prepara ele para receber o comando de envio GET
comandosESP8266 = "AT+CIPSEND=";
comandosESP8266 += String(getStr.length());
ESP8266.println(comandosESP8266);
delay(50);
//Caso encontre o caractere > singifica que está no prompt para receber o comando GET
if(ESP8266.find(">")){
ESP8266.print(getStr);
}else{
ESP8266.println("AT+CIPCLOSE");
}
}
//=========================
// Área de Setup do Arduino
//=========================
void setup() {
Serial.begin(9600); //Inicializa a Comunicação Serial com o Arduino em 9600 baud
ESP8266.begin(19200); sensorUT.begin(); //Inicializa o Sensor de Umidade e Temperatura ESP8266.println("AT+CWMODE=1"); //Configura o Módulo ESP8266 como Cliente ESP8266.println("AT+CWJAP=\""+ssid+"\",\""+password+"\""); //Configura conecta o ESP8266 à rede Wireless }
//=================
// Área de Comandos
//=================
void loop(){
float temperatura_medida = sensorUT.readTemperature(); //Lê o valor da Temperatura no Sensor float umidade_ar_medida = sensorUT.readHumidity(); //Lê o valor da Umidade no Sensor float umidade_solo_medida = (float)(1024 - analogRead(A0))/(float)680*100; //Lê o valor da umidade do Solo e transforma em porcentagem
if(umidade_solo_medida <= 20){
estado_bomba = 1;
digitalWrite(9, HIGH);
}else{
estado_bomba = 0;
digitalWrite(9, LOW);
}
//Caso o sensor de Umidade e Temperatura não apresente nenhum valor informar ao Programador na Console da porta Serial
if (isnan(temperatura_medida) || isnan(umidade_ar_medida)){
Serial.println("Failed to read from DHT");
}else{
escreveThingSpeak(temperatura_medida,umidade_ar_medida,umidade_solo_medida, estado_bomba);
//Escreve valores para o ThingSpeak
}
// Delay necessário entre capturas de amostra do ThingSpeak
delay(15000);
}
Step 3: Configuring ThingSpeak (Configurando O ThingSpeak)
(English)
You will have to register and sign in to ThingSpeak to start to send data into it.
After registration and Sign in, you have to create a channel (you can choose if it will be public and private, or only private, you can edit this in the Share Tab). You will have to create/enable the fields you wish to use and get your Write API Key to put into your code and start to send data to ThingSpeak.
This step is very simple.
(Portuguese)
Você terá que se registrar e fazer login no ThingSpeak para começar a enviar dados para ele.
Após o registro e Iniciar sessão, você deve criar um canal (você pode escolher se ele será público e privado, ou apenas privado, você pode editar isso na guia Compartilhar). Você terá que criar / habilitar os campos que deseja usar e obter sua chave de API de escrita para colocar em seu código e começar a enviar dados para o ThingSpeak.
Este passo é muito simples.