- Material Necessário
- Diagrama de circuito
- Modelo de comedouro para animais de estimação impresso em 3D
- Módulo RTC DS3231
- Código e Explicação
- Funcionamento do comedouro automático para animais de estimação
Hoje estamos construindo um Alimentador Automático para Animais de Estimação baseado em Arduino, que pode servir comida automaticamente para o seu animal de estimação na hora certa. Possui um Módulo DS3231 RTC (Real Time Clock), que permite acertar a hora e a data em que a comida deve ser dada ao seu animal. Assim, ao configurar o horário de acordo com o horário de alimentação do seu animal, o dispositivo deixa cair ou encher a tigela de comida automaticamente.
Neste circuito, estamos usando um LCD 16 * 2 para exibir a hora usando o Módulo RTC DS3231 com Arduino UNO. Além disso, um servo motor é usado para girar os recipientes para fornecer a comida e o teclado de matriz 4 * 4 para configurar manualmente o tempo para alimentar o animal de estimação. Você pode definir o ângulo de rotação e a duração da abertura do recipiente de acordo com a quantidade de alimento que deseja servir ao seu animal de estimação. A quantidade de alimento também pode depender do seu animal de estimação, seja ele um cão, gato ou pássaro.
Material Necessário
- Arduino UNO
- Teclado de matriz 4 * 4
- 16 * 2 LCD
- Botão de apertar
- Servo motor
- Resistor
- Fios de conexão
- Tábua de pão
Diagrama de circuito
Neste alimentador de gatos baseado em Arduino, para obter hora e data, usamos o módulo RTC (Real Time Clock). Usamos o teclado de matriz 4 * 4 para definir o tempo de alimentação do animal de estimação manualmente com a ajuda do LCD 16x2. O servo motor gira o recipiente e solta o alimento no tempo definido pelo usuário. O LCD é usado para exibir a data e a hora. O trabalho completo pode ser encontrado no Vídeo fornecido no final.
Modelo de comedouro para animais de estimação impresso em 3D
Projetamos este contêiner Arduino Pet Feeder usando a impressora 3D. Você também pode imprimir o mesmo design baixando os arquivos aqui. O material usado para imprimir este modelo é PLA. Possui quatro partes, conforme mostrado na imagem abaixo:
Monte as quatro partes e conecte o Servo Motor conforme mostrado na imagem abaixo:
Se você é novo na impressão 3D, aqui está o guia inicial. Você pode baixar os arquivos STL para este alimentador de animais aqui.
Módulo RTC DS3231
DS3231 é um módulo RTC (Real Time Clock). É usado para manter a data e a hora da maioria dos projetos de Eletrônica. Este módulo tem sua própria fonte de alimentação de célula tipo moeda, usando a qual ele mantém a data e a hora mesmo quando a alimentação principal é removida ou o MCU passou por um hard reset. Assim, uma vez que definimos a data e a hora neste módulo, ele manterá o controle sempre. Em nosso circuito, estamos utilizando o DS3231 para alimentar o pet de acordo com o horário, configurado pelo dono do Pet, como um alarme. À medida que o relógio atinge a hora definida, ele aciona o servo motor para abrir a porta do recipiente e a comida cai na tigela de comida do animal de estimação.
Nota: Ao usar este módulo pela primeira vez, você deve definir a data e a hora. Você também pode usar RTC IC DS1307 para ler a hora com o Arduino.
Código e Explicação
O código Arduino completo do Automatics Pet Feeder é fornecido no final.
O Arduino tem bibliotecas padrão para usar o servo motor e LCD 16 * 2 com ele. Mas para usar o Módulo DS3231 RTC e o teclado de matriz 4 * 4 com o Arduino, você deve baixar e instalar as bibliotecas. O link de download para ambas as bibliotecas é fornecido abaixo:
- Biblioteca do Módulo DS3231 RTC (Real Time Clock)
- Biblioteca de teclado de matriz 4 * 4
No código a seguir, estamos definindo bibliotecas, “#include
#incluir
No código abaixo, estamos definindo o mapa de teclado para o teclado de matriz 4 * 4 e atribuindo os pinos do Arduino para as linhas e colunas do teclado.
char keys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {2, 3, 4, 5}; byte colPins = {6, 7, 8, 9};
Aqui, estamos criando o teclado usando o comando abaixo no código.
Teclado kpd = Teclado (makeKeymap (teclas), rowPins, colPins, ROWS, COLS);
Atribuição de pinos Arduino A4 e A5 para conexão com os pinos SCL e SDA do DS3231. Além disso, atribuindo pinos ao LCD e inicializando o servo motor.
DS3231 rtc (A4, A5); Servo servo_test; // inicializa um objeto servo para o servo LiquidCrystal lcd conectado (A0, A1, A2, 11, 12, 13); // Cria um objeto LC. Parâmetros: (rs, ativar, d4, d5, d6, d7)
No código a seguir, estamos declarando t1 a t6, chave e array r, e o feed.
int t1, t2, t3, t4, t5, t6; feed booleano = verdadeiro; chave char; int r;
No código abaixo, estamos configurando todos os componentes para o início. Como neste código “servo_test.attach (10);” Servo está ligado ao 10 th pino do Arduino. Definindo A0, A1 e A2 como o pino de saída e inicializando o módulo LCD e RTC.
void setup () {servo_test.attach (10); // conecta o pino de sinal do servo ao pino 9 do arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Agora, como o loop está funcionando é a parte importante de entender. Sempre que o botão é pressionado, ele vai alto significa 1, que pode ser lido por “buttonPress = digitalRead (A3)” . Agora ele vai dentro da instrução 'if' e chama a função 'setFeedingTime' . Em seguida, ele compara o tempo real e o tempo inserido pelo usuário. Se a condição for verdadeira, o que significa que o tempo real e o tempo inserido são os mesmos, o servo motor gira a um ângulo de 100 graus e após 0,4 segundos de atraso ele volta à sua posição inicial.
loop void () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Hora:"); String t = ""; t = rtc.getTimeStr (); t1 = t.charAt (0) -48; t2 = t.charAt (1) -48; t3 = t.charAt (3) -48; t4 = t.charAt (4) -48; t5 = t.charAt (6) -48; t6 = t.charAt (7) -48; lcd.print (rtc.getTimeStr ()); lcd.setCursor (0,1); lcd.print ("Data:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // comando para girar o servo para o ângulo especificado delay (400); servo_test.write (55); feed = false; }}
No código de função void setFeedingTime () , após pressionar o botão, podemos inserir o tempo de alimentação do animal de estimação, então temos que pressionar 'D' para economizar esse tempo. Quando o tempo economizado coincide com o tempo real, o servo começa a girar.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Definir tempo de alimentação"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (chave! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (chave); r = chave-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } atraso (500); } if (chave == 'D') {chave = 0; pausa; }}}
Funcionamento do comedouro automático para animais de estimação
Depois de fazer o upload do código para o Arduino Uno, a hora e a data serão exibidas no LCD 16 * 2. Quando você pressiona o botão, ele pergunta o tempo de alimentação do animal de estimação e você deve inserir o tempo usando o teclado de matriz 4 * 4. O display mostrará a hora inserida e conforme você pressiona 'D', ele economiza o tempo. Quando o tempo real e o tempo inserido coincidem, ele gira o servo motor de sua posição inicial 55⁰ a 100⁰ e, após um atraso, retorna novamente à sua posição inicial. Portanto, o servo motor é conectado ao portão do Recipiente de Alimentos e, à medida que ele se move, o portão se abre e alguma quantidade de alimento cai na tigela ou prato. Após um atraso de 0,4 segundos, o servo motor gira novamente e fecha o portão. Todo o processo é concluído em alguns segundos. É assim que seu animal de estimação obtém a comida automaticamente no momento que você inseriu.
Altere o tempo e o grau de acordo com a comida