- Componentes necessários
- Diagrama de circuito
- Programação ESP8266 NodeMCU para sistema de irrigação automática
A maioria dos fazendeiros usa grandes porções de terras agrícolas e torna-se muito difícil alcançar e rastrear cada canto das grandes terras. Às vezes, existe a possibilidade de borrifos de água desiguais. Isso resulta em safras de má qualidade, o que leva ainda mais a perdas financeiras. Neste cenário, o sistema de irrigação inteligente usando a tecnologia IoT mais recente é útil e facilita a agricultura.
O Sistema de irrigação inteligente possui amplo escopo para automatizar todo o sistema de irrigação. Aqui, estamos construindo um sistema de irrigação baseado em IoT usando o módulo ESP8266 NodeMCU e o sensor DHT11. Ele não apenas irrigará automaticamente a água com base no nível de umidade do solo, mas também enviará os dados para o servidor ThingSpeak para controlar as condições do terreno. O sistema consistirá em uma bomba de água que será usada para borrifar água na terra dependendo das condições ambientais da terra, como umidade, temperatura e umidade.
Anteriormente, construímos um sistema de irrigação automática semelhante, que envia alertas no celular, mas não na nuvem IoT. Além disso, o alarme de chuva e o circuito detector de umidade do solo também podem ser úteis na construção de um sistema de irrigação inteligente.
Antes de começar, é importante notar que as diferentes culturas requerem diferentes Umidade do Solo, Temperatura e Condição de Umidade. Portanto, neste tutorial, estamos usando uma cultura que exigirá uma umidade do solo de cerca de 50-55%. Assim, quando o solo perde a umidade para menos de 50%, a motobomba liga automaticamente para borrifar a água e continua a borrifar a água até que a umidade suba para 55% e depois disso a bomba será desligada. Os dados do sensor serão enviados ao ThingSpeak Server em intervalo de tempo definido para que possam ser monitorados de qualquer lugar do mundo.
Componentes necessários
- NodeMCU ESP8266
- Módulo Sensor de Umidade do Solo
- Módulo de bomba de água
- Módulo de Relé
- DHT11
- Fios de conexão
Você pode comprar todos os componentes necessários para este projeto.
Diagrama de circuito
O diagrama do circuito para este sistema de irrigação inteligente IoT é fornecido abaixo:
Programação ESP8266 NodeMCU para sistema de irrigação automática
Para programar o módulo ESP8266 NodeMCU, apenas a biblioteca de sensores DHT11 é usada como biblioteca externa. O sensor de umidade fornece uma saída analógica que pode ser lida através do pino analógico A0 do ESP8266 NodeMCU. Como o NodeMCU não pode fornecer tensão de saída superior a 3,3 V de seu GPIO, estamos usando um módulo de relé para acionar a bomba de motor de 5 V. Além disso, o sensor de umidade e o sensor DHT11 são alimentados por uma fonte de alimentação externa de 5V.
O código completo com um vídeo de trabalho é fornecido no final deste tutorial, aqui estamos explicando o programa para entender o fluxo de trabalho do projeto.
Comece incluindo a biblioteca necessária.
#incluir
Como estamos usando o servidor ThingSpeak, a chave API é necessária para nos comunicarmos com o servidor. Para saber como podemos obter a chave API do ThingSpeak, você pode visitar o artigo anterior sobre Monitoramento de Temperatura e Umidade ao Vivo no ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
A próxima etapa é escrever as credenciais de Wi-Fi, como SSID e senha.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Defina o pino do sensor DHT onde o DHT está conectado e escolha o tipo de DHT.
# define DHTPIN D3 DHT dht (DHTPIN, DHT11);
A saída do sensor de umidade é conectada ao Pino A0 do ESP8266 NodeMCU. E o pino do motor é conectado ao D0 do NodeMCU.
const int umidadePin = A0; const int motorPin = D0;
Estaremos usando a função millis () para enviar os dados após cada intervalo de tempo definido aqui é de 10 segundos. O delay () é evitado, pois ele para o programa por um atraso definido onde o microcontrolador não pode fazer outras tarefas. Saiba mais sobre a diferença entre delay () e millis () aqui.
intervalo longo sem sinal = 10000; sem sinal long previousMillis = 0;
Defina o pino do motor como saída e desligue o motor inicialmente. Inicie a leitura do sensor DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // mantenha o motor desligado inicialmente dht.begin ();
Tente conectar o Wi-Fi com o SSID e a senha fornecidos e espere que o Wi-Fi seja conectado e, se estiver conectado, vá para as próximas etapas.
WiFi.begin (SSID, aprovação); enquanto (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi conectado"); }
Defina a hora atual de início do programa e salve-a em uma variável para comparar com o tempo decorrido.
currentMillis longo sem sinal = millis ();
Leia os dados de temperatura e umidade e salve-os em variáveis.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Se o DHT estiver conectado e o NodeMCU ESP8266 for capaz de ler as leituras, prossiga para a próxima etapa ou volte a partir daqui para verificar novamente.
if (isnan (h) - isnan (t)) { Serial.println ("Falha ao ler do sensor DHT!"); Retorna; }
Leia a leitura de umidade do sensor e imprima a leitura.
umidadePercentagem = (100,00 - ((analogRead (umidadePin) / 1023,00) * 100,00)); Serial.print ("Umidade do solo é ="); Serial.print (umidadePercentage); Serial.println ("%");
Se a leitura de umidade estiver entre a faixa de umidade do solo exigida, mantenha a bomba desligada ou, se for além da umidade exigida, ligue a bomba.
if ( umidadePercentage <50) { digitalWrite (motorPin, HIGH); } if ( umidadePercentage > 50 && moistPercentage <55) { digitalWrite (motorPin, HIGH); } if ( umidadePercentage > 56) { digitalWrite (motorPin, LOW); }
Agora, a cada 10 segundos, chame a função sendThingspeak () para enviar os dados de umidade, temperatura e umidade para o servidor ThingSpeak.
if ((sem sinal longo) (currentMillis - previousMillis)> = intervalo) { sendThingspeak (); anteriorMillis = millis (); client.stop (); }
Na função sendThingspeak () , verificamos se o sistema está conectado ao servidor e, em caso afirmativo, preparamos uma string onde a umidade, temperatura e leitura de umidade são gravadas e essa string será enviada ao servidor ThingSpeak junto com a chave API e o endereço do servidor.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (umidadePercentage); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Finalmente, os dados são enviados para o servidor ThingSpeak usando a função client.print () que contém a chave API, o endereço do servidor e a string preparada na etapa anterior.
client.print ("POST / atualizar HTTP / 1.1 \ n"); client.print ("Host: api.thingspeak.com \ n"); client.print ("Conexão: fechar \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Finalmente, é assim que os dados aparecem no ThingSpeak Dashboard
Esta última etapa conclui o tutorial completo sobre o Sistema de Irrigação Inteligente baseado em IoT. Observe que é importante desligar o motor quando a umidade do solo atingir o nível necessário após borrifar com água. Você pode fazer um sistema mais inteligente que pode conter diferentes controles para diferentes culturas.
Se você enfrentar qualquer problema ao fazer este projeto, comente abaixo ou entre em nossos fóruns para perguntas mais relevantes e suas respostas.
Encontre o programa completo e o vídeo de demonstração para este projeto abaixo.