Projeto CatWater – Homúnculo

Projeto CatWater

Dois de nossos gatos (Sophia e Dexter, mãe e filho, respectivamente) se acostumaram a beber água na torneira do tanque da área externa. Para tanto, eles costumavam subir e “pedir” (miar) para que abríssemos a torneira. Como não estamos em casa o tempo todo para abrir a água para eles, resolvi fazer colocar uma válvula solenoide controlada por um Arduino ligado a um sensor ultrassônico, para que a torneira libere a água quando alguém ou algo estiver na frente do sensor. Esta é a motivação para o projeto CatWater.

Os componentes utilizados no projeto foram:

  • Arduino Nano
  • Válvula Solenoide 12V de 1/2″
  • Módulo Relé 5V
  • Sensor Ultrassônico HC-SR04
  • UBEC (Opcional)
  • Mini Breadboard 140 pontos (Opcional)
  • Fonte 12V 1A
  • Jumpers e/ou fios para conectar tudo

A mini breadboard é opcional pois você pode querer conectar os componentes de outra maneira (soldando diretamente no Arduino ou fazendo uma placa de circuito impresso). No caso do UBEC, eu preferi utilizá-lo porque já queimei um Arduino Nano ao conectá-lo com 12V. Caso você utilize um Arduino que suporte os 12V, sem problemas. Caso contrário, recomendo usar um UBEC ou outro tipo de regulador para baixar a tensão para 5V.

Vejamos na imagem abaixo como ficou tudo conectado:

As conexões do sensor e do módulo são:

Dispositivo Pino Arduino
Sensor HC-SR04 VCC 5V
Sensor HC-SR04 TRIG D3
Sensor HC-SR04 ECHO D4
Sensor HC-SR04 GND GND
Módulo Relé VCC 5V
Módulo Relé GND GND
Módulo Relé S D5

Além disso, da fonte de 12V, o positivo e o negativo entram no UBEC e deste saem para os pinos VIN e GND do Arduino. Ainda da fonte de 12V, qualquer um dos pólos vai para o borne COMMON (C) do relé, e sai do NC (Normally Closed) para uma das pernas da válvula solenoide. E o outro pólo vai direto para a outra perna do solenoide. Ou seja, o relé fica responsável por fechar o circuito no solenoide.

Feito isso, é só fazer o envio do código abaixo para o seu Arduino Nano, usando o Arduino IDE ou outro ambiente de sua preferência:

#define trigPin1 3
#define echoPin1 4
#define relayPin 5
#define DISTANCE 55

void setup() {
  Serial.begin(9600);

  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  pinMode(relayPin, OUTPUT);

  delay(2000);
}

void loop()
{
  int distance1 = getDistanceinCM(trigPin1, echoPin1);
 
  Serial.print("Distancia: ");
  Serial.print(distance1);
  Serial.println("cm");
 
  if ((distance1>-1) && (distance1   {
    digitalWrite(relayPin, HIGH);
    delay(3000);
  }
  else
  {
    digitalWrite(relayPin, LOW);
  }

  delay(800);
}

int getDistanceinCM(int trigPin, int echoPin)
{
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

  //Serial.print("Distance:");
  //Serial.println(distance);

  if (distance >= 200 || distance <= 0)
  {
    distance = -1;
  }

  return distance;
}

Agora, algumas observações sobre o código. A função getDistanceinCM() você achará na net em vários exemplos de utilização do sensor ultrassônico. Ela é responsável por fornecer a distância em centímetros do objeto mais próximo em frente ao sensor. Estes sensores tem um limite, é claro, e no código também há um limite de 200cm (a maioria deles não chega nesta distância). Portanto, a função retornará -1 quando não conseguir calcular a distância ou esta for maior que 200cm. Isso também é importante devido a uma possível inconsistência nos valores lidos (seja por algum tipo de interferência ou pela baixa qualidade do sensor).

A distância que fará com que o relé seja ativado, fazendo assim com que a válvula solenoide seja ativada, é definida pelo define DISTANCE, onde no meu caso este valor de 55 ficou satisfatório. Você precisará ajustar este valor de acordo com a distância do seu sensor para onde ele estará apontado, então faça testes.

Uma vez detectada um objeto mais próximo que 55cm a água permanecerá ligada por 3 segundos, e depois após 800ms será verificado novamente e a água será ligada novamente por 3 segundos e assim por diante. Isso pode ser modificado para, por exemplo, ligar e desligar quase imediatamente (levando em consideração os 800ms), mas achei melhor assim para evitar o liga/desliga constante do relé e da válvula no caso do bichano ficar se mexendo e o sensor não o detectar o tempo todo.

No meu caso, mesmo com essa distância de 55cm, uma vez ou outra, provavelmente por algum tipo de interferência ele detecta algo a mais de 1 metro  de distância (mas lê algum valor menor ou igual a 55) e ativa o relé. Ainda preciso trabalhar nisso… Talvez uma dupla verificação antes de acionar o relé seja interessante…

Bom, feito tudo isso, devidamente ajustado e testado, basta arrumar uma caixinha ou algo que sirva para guardar tudo e deixar apenas o sensor ultrassônico para fora. No meu caso, por exemplo, estou usando uma carcaça de um NVR e uma tampa de inseticida… rsrsrsrs, mas pretendo mudar isso, em breve.  As “crianças” já aprenderam que agora é só subir no tanque que a água é liberada, então estou contente com o resultado. E abaixo é possível ver a Sophia usando a “torneira automática”:

5 thoughts on “Projeto CatWater

  1. Boa tarde.
    Seu projeto ficou muito legal.
    Sou leigo no assunto, como ficaria o código para eu usar 2 sensores unltrassonicos com modulo rele duplo?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »