domingo, 4 de setembro de 2016

IRRIGAÇÃO ARDUÍNO (ELETRÓLISE)

 Caso você não tenha acessado o material anterior, ele pode ser visualizado por este link.

 Dando sequência ao assunto sobre irrigação iremos falar sobre hidrólise, este fenômeno ocorre toda vez em que se alimenta o sensor quando ele está  em contato com o solo úmido, ocasionando em corrosão do mesmo. Uma forma para reduzir esta corrosão do sensor é liga-lo somente em horários pré definidos para a leitura de dados, usando para isso um relógio de tempo real (RTC), este componente funciona como o relógio do computador, mesmo que a alimentação do Arduíno seja desligada o horário permanece gravado. O Arduíno ira verificar se a hora atual é a mesma da programação, caso seja irá realizar a irrigação das plantas.
 Será necessário colocar um horário para ligar o sensor e um horário para desligar o sensor, caso a umidade esteja abaixo da necessária a válvula solenoide irá ser acionada e efetuará a irrigação, caso a umidade esteja acima, a válvula continuará desligada mesmo com o sensor ligado.    



Funcionamento



O Arduíno irá verificar a hora, caso seja a hora pré programada a porta 7 irá ser acionada, ligando o sensor.
 O sensor sendo ligado ele verificará se à umidade é maior que 700 através da porta analógica A0, caso seja o solenoide que está ligado ao pino 13 continuará desligado, no entanto se a umidade for menor que 700 o pino 13 irá acionar a solenoide e as plantas serão irrigadas.
 O vídeo abaixo tem mais informações sobre a montagem.






 Uma das formas de ligação do RTC é vista no desenho abaixo, o Arduíno utilizado tem duas portas especificas para os pinos SCL e SDA.



Fonte: http://blog.filipeflop.com/wp-content/uploads/2014/06/Circuito_DS1307_Serial_Monitor1-630x287.png


 Para se utilizar o RTC é necessário a utilização de uma biblioteca que pode ser baixada neste link.


 O código fonte está disponibilizado logo abaixo, recomendamos acompanhar à matéria anterior neste link.


#include <Wire.h>
#include "RTClib.h"
int umidade;
RTC_DS1307 rtc;

void setup () {
pinMode(13,OUTPUT);
pinMode(7,OUTPUT);

digitalWrite(13,LOW);// Desliga o solenóide
   digitalWrite(7,LOW); // Desliga o sensor

 
    Serial.begin(9600);
 
   #ifdef AVR
      Wire.begin();
      #else
      Wire1.begin();
      #endif

  rtc.begin();


  if (! rtc.isrunning()) {
     Serial.println("RTC is NOT running!");
     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
 
   ///Serial.print("inicializaçao");
        }
  }

void loop () {

 umidade = analogRead(A0);
 
   DateTime now = rtc.now();
 
    Serial.print(now.hour()); // Mostra a hora
    Serial.print(":");        // mostra separação da hora
    Serial.println(now.minute(),DEC);//mostra os minutos
  //Serial.println(now.year(), DEC); // Mostra anos

 Serial.println(umidade); //Mostra o valor da umidade

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
       
          //Verifica se está no horário do acionamento

if (( now.hour()==(23)and ( now.minute()==(28)))){


  Serial.println("Ligado");


    digitalWrite(7,HIGH); // Liga pino 7 para acionar o sensor

     if (umidade > 700){  //Se a umidade for maior que 700 desliga o solenoide
   
      digitalWrite(13,LOW);// Desliga o pino 13 do solenoide
   
      }

  else{
    digitalWrite(13,HIGH);  //Caso o valor esteja abaixo de 700 liga o pino 13 do solenoide
 
  }}

              //Desliga a acionamento na parte da manha

if (( now.hour()==(23)and ( now.minute()>=(29)))){

  Serial.println("Desligado");
    digitalWrite(7,LOW);  //Desliga o pino 7
    digitalWrite(13,LOW); //Desliga pino 13
 
}


   
   delay(1000);


   }

Abaixo podemos ver o esquema de ligação completo, a alimentação da válvula solenoide esta separada do Arduíno, nota, a foi utilizado uma bateria nesse esquema, mas a válvula pode funcionar na rede elétrica ( 127V) também.





Caso tenha dificuldades em fazer o modulo relé você pode encontrar mais informações nesse vídeo.




A figura abaixo mostra o esquema de ligação utilizando um módulo relé comercial encontrado a venda na internet, um detalhe ao utilizar estes tipos de módulos é a inversão nas linhas onde aciona o relé, onde for LOW deve se utilizar HIGH e vise versa.

    digitalWrite(13,HIGH);   Passa a ser digitalWrite(13,LOW);
    digitalWrite(13,LOW);    Passa a ser digitalWrite(13,HIGH);






Obrigado.

24 comentários:

  1. Bom dia hora que ,mostra no serial monitor não mesma que horário real e o sensor mesmo na em solo úmido não desliga. Você teria algum esquema de ligação pois o pino 7 voçe diz que o sensor porém o sensor não ligado pino A0 como você descreve no loop

    ResponderExcluir
    Respostas
    1. 06
      Olá! Obrigado por acompanhar nossos conteúdos.
      O sensor só é desligado na hora programada independente se o solo estiver úmido ou não, no caso se estiver úmido o solenóide do pino 13 vai ser desligado, o sensor no pino 7 irá aguardar até a hora programada. Como exemplo:
      Nosso sensor foi ligado as 19:00 a umidade estava baixa e o solenóide acionou, digamos que as 19:20 o solo estava úmido, o solenóide vai desligar e o sensor continua ligado até às 19:30 horário programado para desligar o sensor no pino 7.

      Ficou mais claro?

      Qualquer coisa pode perguntar,

      Obrigado

      Excluir
  2. boa noite ,ficou claro mais porque no loop voçe colocou umidade = analogRead(A0); essa minha duvida voçe disse que sensor vai no pino 7 correto ? E PORQUE TEM ESSA LINHA umidade = analogRead(A0);????

    ResponderExcluir
    Respostas
    1. Olá!

      umidade=analogRead(A0); quer dizer que a variável umidade vai receber os dados do sensor de umidade.

      O pino 7 vai ligar ou desligar o sensor

      note, o sensor necessita de 3 fios, um gnd, um que envia os dados e o outro o positivo que em nosso caso está ligado no pino 7.

      Excluir
  3. Boa tarde obrigado por tirar minha duvida parabéns pelo projeto.

    ResponderExcluir
  4. Entendi o positivo do sensor voçe ligou no pino 7 do arduino isso ? Ou que envia dados do pino D0 do sensor no pino 7 do arduino.

    ResponderExcluir
  5. desculpa pino A0 sensor vai na entrada analógica A0 isso ??

    ResponderExcluir
  6. Parabéns pelo trabalho, me ajudou muito em meu projeto.

    Abraço!

    ResponderExcluir
    Respostas
    1. Olá Renato!

      Obrigado!

      Fico feliz que tenha ajudado, no que pudermos ajudar estaremos a disposição.

      Obrigado

      Att.

      Equipe projeto básico

      Excluir
  7. Cara, meu RTC não funciona de jeito nenhum. Ele fica dando 165:165. Meu RTC é parecido com esse:

    https://www.dx.com/pt/p/rtc-v1-1-ds1307-real-time-clock-module-w-i2c-works-with-official-arduino-boards-316101?tc=BRL&ta=BR&gclid=Cj0KCQjw6rXeBRD3ARIsAD9ni9DL2gSdsweu4hlbtm9TLAFeLipGLlRfUhl-T-Kp0yprBK2x7H1a3JgaAvx-EALw_wcB#.W86ePFVKjIU

    ResponderExcluir
    Respostas
    1. Olá!

      Verifica se não inverteu o scl e o sda.

      Excluir
    2. Cara, era a placa RTC que estava ruim mesmo... Você sabe como redefinir a hora do RTC? Porque não estou conseguindo ajustar a hora. Grande abraço e obrigado pela dica.

      Excluir
  8. Olá Igor!

    Ele pega a hora do PC.

    Da alguma mensagem de erro?

    ResponderExcluir
  9. Amigo fiz todo procedimento funciona, porém ao programar a hora de ligar e desligar ele inicia por exemplo sensor no solo seco aciona a valvula porem se o solo não umedecer em 1 minuto a valvula so vai desligar na hora programada independente do solo ficar umido ou não, acredito que seja algo haver com o codigo.

    ResponderExcluir
    Respostas
    1. Olá amigo.

      Obrigado por acompanhar nossos conteúdos.

      O código está correto, utilizei o tempo de 1 minuto para exemplificar, mas vc pode usar outros tempos de acordo com sua necessidade.


      (( now.hour()==(23)and ( now.minute()==(28)))){

      Nessa linha vc coloca o início


      if (( now.hour()==(23)and ( now.minute()>=(29)))){

      Nessa linha o horário de terminar.

      Vc pode colocar o intervalo que quiser.

      Espero ter ajudado.

      Qualquer dúvida pode perguntar.

      Compartilhe esse material para ajudar nosso canal.

      YouTube

      www.youtube.com/c/projetobasicos

      Facebook


      www.facebook.com/projetobasico100

      Excluir
  10. Teria como vc me enviar o codigo por email

    ResponderExcluir
  11. Desculpa amigo o que estou tentando dizer é que programo a hora inicio e a hora final porem o comando para acionar a valvula so funciona por 1 minuto o sensor continua marcando na variável A0 porem apos 1 minuto a vavula aciona mais si tiver ligada continua ligada até o final do horario programado

    ResponderExcluir
  12. Estou usando o relé comercial e já fiz as alterações:

    digitalWrite(13,HIGH); Passa a ser digitalWrite(13,LOW);
    digitalWrite(13,LOW); Passa a ser digitalWrite(13,HIGH);

    ResponderExcluir
    Respostas
    1. Bacana.

      Me manda o código para eu dar uma olhada, pode ser aqui ou para meu e-mail.

      projetobasico100@gmail.com

      Excluir
  13. Amigo,

    Valeu pela disposição em ajudar, mas já consegui resolver o meu problema ajustando o codigo as minhas necessidades e uma ótima solução.

    obrigado
    abraço

    ResponderExcluir
  14. Primeiramente gostaria de te agradecer pela iniciativa de ajudar e compartilha um pouco do seu amplo conhecimento. Em segundo lugar gostaria de saber se ha possibilidade de me enviar o codigo completo pelo email; vanderleycorretor@gmail.com, vai me ser de grande serventia. forte abraço.

    ResponderExcluir