Aquí está mi comedero para gatos de bajo coste, automático y "inteligente".
Características:
- Alimenta a tu gato dos veces al día.
- Entregar solo la ración "recomendada".
- detectar que tu gato está comiendo y recibir una notificación en tu teléfono.
- ver a tu gato comiendo.
Especificaciones:
- Contenedor de croquetas para gatos de alta capacidad (~ 1 mes)
- Sistema anti-interferencias.
- Sistema anti hormigas.
- Sistema anti-desbordamiento.
Precio: menos de 40€ (sí, claro... ve al archivo BoM)
Resumen
En 2017 publiqué elprimera iteración de este proyecto. Y desde entonces, el comedero para gatos ha estado funcionando diariamente. La mecánica sigue siendo la misma y ha demostrado su fiabilidad a lo largo de los años.
¡El software ha cambiado, comenzando por usar IA (un fracaso en aquel entonces), luego usando un teléfono inteligente viejo como cámara web. Y ahora usando una solución mucho más compacta y barata!
Aquí es cómo se veía en 2017:
Desafortunadamente, Chicha (mi gato en el video) murió el año pasado y no estará ahí para otro video hoy...
Lecciones aprendidas.
Aquí están las lecciones aprendidas durante 8 años de operaciones diarias:
- Las hormigas aman los juguetes para gatos... Cuando el plato está en el suelo, al día siguiente estará lleno de hormigas. Así que el plato debe "flotar" en el aire.
- El gato es un cazador, siempre prefiere ardillas, pájaros o ratones a los gatitos. Si le das la misma cantidad de comida, al día siguiente el plato se desbordará (¡y alimentará a las hormigas!)
- Los kibbles son como un "juego de Tetris en 3D", tienden a caer de forma intrincada y bloquear el comedero. Una función anti-atasco fiable es imprescindible.
- Los comedero de alta capacidad son imprescindibles para tomarse unas vacaciones de un mes, por ejemplo... Pero también es necesario detectar que el comedero está vacío.
- ¡La notificación de que tu gato está comiendo es divertida, pero solo debería ocurrir cuando tu gato está comiendo y no cuando alguien está frente al plato!
- Ver a tu gato comiendo es una característica inteligente, no es realmente obligatorio, ¡pero es muy divertido!
Veremos cómo se han abordado estas preocupaciones.
Diseño mecánico.
El diseño mecánico se basa en una tolva piramidal que está dejando caer los croquetas en una gran sinfín de tornillo de gusano.
El tornillo de gusano es accionado por un servo RC de 360° y dos engranajes.
Un servo de 360° permite una rotación continua en ambas direcciones, CW o CCW.
¡Y usa unos pocos tornillos para fijar la cubierta y mantener los engranajes en su lugar!
Antijamming:
Para evitar bloquear el engranaje de gusano, el movimiento es controlado en ambas direcciones por software (echa un vistazo al primer video). Esto "agitará" los croquetas y ayudará a que caigan del hopper al engranaje de gusano.
Para evitar bloquear el engranaje helicoidal en "movimiento hacia adelante", se pega un labio de goma en la tolva en su lado frontal. Este labio blando absorberá todas las restricciones y, junto con el movimiento de ida y vuelta, evitará cualquier atasco. ¡Créanme, funciona!
Como puedes ver en esta foto, se inserta un tubo de PVC alrededor del engranaje de gusano y se corta una ranura en la parte superior del mismo para permitir que los croquetas caigan en el engranaje de gusano.
El PVC es perfecto para permitir un movimiento sin fricción en la tubería. Es fuerte, muy suave y naturalmente brillante (casi "engrasado").
Pesando el plato.
¡Pesar el plato es una idea que resuelve muchas de las preocupaciones explicadas anteriormente!
- El plato "flotará" sobre el suelo, evitando que las hormigas coman los croquetas.
- Cuando el gato está comiendo, el peso del plato disminuye. Es una forma elegante de detectar el evento de "gato comiendo".
- Cuando los croquetas están cayendo, podemos medir la ración exacta que queremos entregar al gato y detener el movimiento de la tornilla de gusano.
- Si el plato no está vacío, solo lo llenamos hasta la ración exacta, evitando el "desbordamiento".
- Si los croquetas no caen, es una situación de atasco o de tolva vacía. Se puede enviar una notificación a tu teléfono inteligente.
- Finalmente, el plato verde del video se encuentra por encima del impreso en 3D. Puedes retirarlo fácilmente para lavarlo y mantenerlo limpio.
¡Así que se agrega una célula de carga debajo de la tolva, que actúa como una báscula de cocina!
Montaje de paredes exteriores.
Finalmente, como se muestra en la imagen, se agregan paredes de madera alrededor de la tolva. Están fijadas juntas utilizando pies impresos en 3D y tornillos de madera de 5 mm. Las dimensiones para cortar el contrachapado de 18 mm se proporcionan en el paquete de piezas impresas en 3D (archivos .dxf).
Aquí hay una vista explotada: el ensamblaje de todas estas piezas es bastante fácil y sencillo.
Como puedes ver, se perforan agujeros en la pared delantera para acomodar la cámara y el detector de movimiento (sensor de IR).
Imprimiendo el comedero para gatos.
La mayoría de las piezas se imprimen con filamento PLA.
¡El más grande es el hopper! Sin embargo, se puede imprimir directamente en mi impresora Prusa i3 Mk2 sin ningún soporte.
El tornillo debe ser lo más fuerte y lo más suave posible. Por estas razones, se imprime con filamento ABS.
Para mantenerlo más fuerte y evitar soportes, el tornillo se imprime cortado en dos mitades horizontalmente. Luego se pega con acetona. Y también se alisa con acetona (verAquí cómo hacerlo.)
¡Imprimir todas las otras partes es sencillo y tampoco necesita ningún soporte!
El engranaje grande también se imprime en ABS y luego se atornilla y se pega al sinfín.
Tenga en cuenta que imprimir ABS no es del todo fácil y requiere que su impresora se encuentre dentro de una carcasa para evitar deformaciones. VeaEste enlace para hacer uno sencillo.¡
La cubierta también se imprime en PLA, se corta en 4 partes para adaptarse a mi Prusa i3 mk2.S, y luego las partes se pegan con epoxi en una superficie plana.
Para imprimir todas las piezas: Abra los archivos .3mf, cambie el filamento si lo desea (PETG puede ser una buena opción si no tiene ABS o PLA), si es necesario, cambie el diámetro de la boquilla (yo uso una de 0,6 mm, es más rápido imprimir piezas) y ¡imprima!
Cuando todo esto esté hecho, tu comedero para gatos estará casi terminado... ¡Bueno, aún faltan algunas cosas electrónicas!
Electrónica.
Esquemas.
Micro controlador.
El corazón del sistema es unMicrocontrolador Ai-Thinker ESP32-CAM.. Es un microcontrolador de doble núcleo de 32 bits barato pero potente que puedes programar fácilmente conIDE de Arduino.
¡Este MCU tiene una pequeña cámara de 2xMPixels OV2640 que será perfecta para monitorear a nuestro gato!
Unos pocos pines de E
¡He usado la mayoría de ellos!
- IO12 y IO13 para controlar el controlador de la célula de carga HX711.
- IO15 para controlar el servo RC.
- IO12 para obtener la señal del sensor PIR.
- IO1, IO2 e IO0 para flashear el firmware.
- IO14 para configurar el WiFi y cargar la calibración de la celda.
sensores utilizados
Servo 360°:
Un servo de 360° permite una rotación continua en ambas direcciones, CW o CCW. La señal PWM solo permite controlar la dirección y velocidad de la rotación (no la posición).
Estos servos son fáciles de conseguir:Servo en Aliexpress.
Sus dimensiones son estándar: 40.8*20.2*28.5mm.
Se necesita un modelo con engranajes metálicos y un torque > 10kg.cm. El engranaje de tornillo puede aplicar mucha fuerza a los croquetas cuando se produce un atasco...
Sensor PIR.
El MCU dormirá la mayor parte del tiempo ahorrando energía.
Será despertado por un sensor infrarrojo a través de una señal de interrupción.
El modelo que he elegido es el más barato:HC-SR501
El radomo blanco se puede quitar, de modo que el sensor encajará en la parte impresa en 3D y podrá ver al gato desde el interior de la pared frontal.
Siempre que algo pase por delante del comedero, la salida del sensor PIR pasará a "alto" y despertará el ESP32.
Celda de carga.
La célula de carga medirá el peso de la comida.
He elegido una célula de carga de 1 kg. Este dispositivo necesita un amplificador HX711 para adaptar su valor.
La conexión entre la célula de carga y el amplificador sigue este esquema:
Programando el ESP32-CAM.
Desafortunadamente, este MCU no está equipado con un adaptador USB a serie a bordo. Necesitaremos usar uno externo para programar nuestro catFeeder.
Existen muchas soluciones. Yo he elegido esta:CP2102 USB a serie.
Veremos más adelante cómo usarlo.
PCB
He diseñado una PCB agradable y compacta que permite acomodar el ESP32 y conectar todos los sensores.
¡Mi primera versión no usó una PCB, todo estaba "cableado en el aire"! Varios usuarios me pidieron que construyera uno. ¡Ya está hecho y es mucho más fácil de ensamblar, debo admitirlo!
El PCB fue amablemente patrocinado por PCBWay y, como de costumbre, es de excelente calidad.
Puedes ordenarlo aquí:Proyecto compartido de PCBWay.. ¡Es barato, se entrega muy rápido y tiene un aspecto muy profesional!
Y si eres nuevo en PCBWay, por favor usa este enlace afiliado:https://pcbway.com/g/o35z4O
Esta PCB expone todos los conectores nativos para los diversos módulos utilizados. ¡Es muy, muy fácil soldar!
Solo el conector USB es "difícil" de soldar, pero no es necesario (ver más abajo).
La lista completa de materiales está disponible en la sección de "archivos" de este sitio.
Consideraciones de poder.
La placa utiliza una fuente de alimentación de 5V DC para el ESP32 y todos los sensores. El servo también es alimentado a 5V y puede consumir 1 o más amperios de corriente. Por lo tanto, puedes alimentar el sistema con un cargador de teléfono inteligente, siempre que pueda suministrar más de 1A. (2A es una opción perfecta).
Puedes conectar los 5V directamente al conector USB (PW) o a los pines de cabecera (PW1) de la PCB.
Software: firmware ESP32.
El firmware para el catFeeder está disponible enMis páginas de Github.
Allí encontrarás todo lo necesario para compilar y configurar tu catFeeder.
Instalación de Arduino.
Necesitarás instalar Aduino IDE:https://www.arduino.cc/en/software
Luego, deberías añadir una referencia a tu placa ESP32. Simplemente abre las preferencias y añade este enlace a los "URLs adicionales del Administrador de placas":https://espressif.github.io/arduino-esp32/package_esp32_index.json
Luego, deberías ver tu placa ESP32 en el menú del Administrador de placas.
Instalación de librerías.
Necesitarás instalar algunas bibliotecas antes de compilar tu CatFeeder... La mayoría de ellas se instalan a través del Administrador de Bibliotecas.
Ticker.Utilizado para el control del servo.
WifiManager.para configurar tus credenciales de WiFi.
Tiempo.Para la sincronización de tiempo NTP.
Encodificación de URL.para la notificación de WhatsApp.
¡Habiendo hecho todo esto, deberías poder compilar tu comedero para gatos sin ningún error!
Descomprime elProyecto de GitHub.y ábrelo en el IDE.
Deberías ver 5 archivos abiertos.
Solo he modificado el .ino. Los otros 4 son archivos originales delRepositorio de AI-Thinker.¡Puede que sean versiones "antiguas", pero funcionan con mi placa!
Puedes intentar compilarlo, debería funcionar, pero tenemos que adentrarnos en el código fuente para hacer algunos cambios en los parámetros.
Y todavía tengo que explicar cómo flashear el firmware...
Flasheando el firmware.
Conecta tu dongle USB a serie a tu comedero para gatos. No olvides puentear el jumper JP1. Esto forzará a GIO0 a tierra y permitirá que el ESP32 arranque en modo cargador de arranque.
No conecte los 5V ni los +3.3V en el dongle (¡pero, por supuesto, conéctelo al puerto USB de su PC!). En su lugar, conecte los +5V en su placa y ahora haga clic en el botón de compilar. Unos segundos después, el firmware se cargará.
¡Retira el puente en JP1 y reinicia el ESP32 (o desconecta y reconecta el +5V). Tu alimentador de gatos arrancará!
Configurando el wifi.
Para configurar el wifi, simplemente siga este procedimiento:
He utilizado elBiblioteca WifiManager de ESP32Capacidades para introducir credenciales de wifi en la placa ESP32.
Así que si arrancas la placa (o la reinicializas con el botón de reinicio)mientras toca el panel táctil "CAL50" en la PCB,Luego, el ESP32 expone un punto de acceso WiFi llamado "JP eCatfeeder" al que puedes conectar cualquier teléfono inteligente (o PC).
Conectarse a él abrirá automáticamente una ventana de configuración.
¡Haz clic en el botón "Configurar Wifi" para elegir una red wifi existente para la que tengas las credenciales e introdúcelas! ESP32 reiniciará y se conectará a tu router.
¡Tu placa ESP32 ahora está configurada para funcionar con wifi y querrás monitorear a tu gato y recibir notificaciones!
Si no tienes wifi, no hay problema, ¡tu comedero para gatos seguirá funcionando, pero sin las "funciones inteligentes"!
Notificaciones de WhatsApp.
¡Tu gato puede enviarte notificaciones de WhatsApp!
Es fácil... Usé el servicio CallMeBot para enviar notificaciones de texto a mi teléfono.
Vaya alPágina de callMeBot.y sigue las instrucciones usando WhatsApp en tu teléfono.
Recibirás un mensaje con la clave de la API.
Una vez que hayas permitido que CallMeBot te envíe notificaciones, entonces tienes que configurar tu número de teléfono y tu clave API en el código fuente (línea 145).
//Bot de llamadas de WhatsApp:https://www.callmebot.com/blog/free-api-whatsapp-messages/
// +código de país internacional + número de teléfono
// Francia +33, ejemplo: +36010100101
String phoneNumber = "+TU_TELÉFONO";
String apiKey = "TU_APIkey";
¡Ahora puedes compilar de nuevo tu código y deberías poder recibir mensajes de tu gato!
Calibración de la ración diaria.
Como cualquier báscula, tu comedero para gatos debe ser calibrado:
- La tara debe hacerse con un plato vacío en la báscula. Por lo tanto, ejecute el alimentador de gatos, deje que se inicie y antes de que entre en hibernación (40 segundos), toque el panel táctil CAL50 en la PCB durante 4 segundos (más de 3 segundos y menos de 6 segundos). ¡Es tan simple como esto!
- La ración diaria debe calibrarse después de que se haya realizado la tara. Deje caer los croquetas que desee en el plato, ejecute el comedero para gatos, deje que arranque y presione el panel táctil CAL50 durante 7 segundos (más de 6 segundos).
Por cada una de estas acciones, recibirás una notificación de WhatsApp para confirmar las calibraciones.
Las horas de alimentación están fijadas en el código, pero puedes cambiarlas fácilmente (línea 255/256).
FeedHour1 = preferences.getInt("FeedHour1", 7);
FeedHour2 = preferences.getInt("FeedHour2", 20);
¡De hecho, alimento a mi gato a las 7 de la mañana y a las 20 de la noche! Esto significa que el comedero para gatos sincronizará su reloj con la hora NTP (¡mira el código, lo encontrarás!)
También puedes notar que calibré mi comedero con una ración de 50g. Pero como el peso nunca se muestra, puedes poner la ración que quieras, la calibración funcionará igual de bien incluso cuando diga que 80g es 50g :-)
Ver a tu gato cuando come.
Si estás aquí, al final de esta larga descripción, entonces quieres ser recompensado y ver a tu gato comiendo.
¿Cómo funciona?
1)El sensor PIR detecta algo y arranca tu ESP32.
¡Esto se hace con 2 líneas de código!
Defines una máscara de bits para tu GPIO:
#define PIR_PIN_BITMASK 0x4 // 2^2 (el exponente es el número de GPIO) en hexadecimal.
y habilitas interrupciones externas para despertar el ESP32 del modo de suspensión profunda cuando este GPIO pasa a "alto".
esp_sleep_enable_ext1_wakeup(PIR_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH); //este será el código para entrar en sueño profundo y despertar cuando el pin GPIO2 esté alto.
2)El ESP32 ahora se ha iniciado y entra en la rutina de configuración.
3)Por lo tanto, pesas el plato.Justo después del tiempo de arranque, en la rutina de configuración.
Peso promedio = Obtener peso bruto();
Peso promedio = CalibZero - Peso promedio;
Peso promedio = Peso promedio * 50.0 / Calib;
Peso en tiempo real = Peso promedio;
4)Tú haces lo mismo repetitivamente dentro de la rutina del bucle.
Y si detectas una variación de peso, entonces tu gato (¡o el del vecino!) está comiendo.
si ((abs(PesoPromedio - PesoEnTiempoReal) > 10.0) && (SendEating == true)) // si el peso ha cambiado más de 10g, entonces el gato está comiendo {
SendAlarm = verdadero;
Desorden = "El gato está comiendo. Transmisión en vivo aquí \n\"http://";
Mess += IpAddress2String(WiFi.localIP());
Mess += ":81/stream\"";
SendEating = false; // ¡limpia la bandera para enviar solo una notificación! }
Peso en tiempo real = Peso promedio; // y actualiza el peso en tiempo real.
5)El alimentador de gatos enviará una notificación.(solo una vez)
6) Y si sigues la URL.Tendrás acceso a la transmisión en vivo de tu gato.:
Como dije, Chicha, mi gato ha muerto, así que filmé la primera foto que encontré en internet (¡y la difuminé un poco para evitar problemas de derechos de autor!)... ¡Perdón, Joseph!
Tenga en cuenta que la URL es local. Si desea ver a su gato desde Internet en cualquier parte del mundo, entonces tendré que aplicar "Reenvío de puertos."En tu router wifi para exponer esta dirección fuera de tu casa. (Es fácil, pero depende de tu router, así que no voy a explicar esto aquí!)
7) Finalmente, al final del bucle,ESP32 entrará en hibernación profunda.Si no estás conectado a la transmisión en vivo (tiempo límite de 50 segundos) y si nada se está moviendo frente al sensor PIR.
¡El ESP32 se despertará ya sea con el sensor PIR o a las horas exactas elegidas para alimentar a tu gato!
si ((millis() - Timeout) > 50000) //si más de 40 segundos sin conexión, entonces duerme {
#if defined DEBUG_OUT
Serial.println("Conexión con tiempo límite --> detener ahora");
#endif
doStop = 1; //forzar la parada }
si ((doStop == 1) y (digitalRead(PIR_PIN) == LOW)) {
float hourDec = hour() + float(minute()) / 60. + float(second()) / 3600.;
float timeToSleepDec;
si (hourDec > FeedHour2) timeToSleepDec = 24 + FeedHour1 - hourDec;
De lo contrario, si (hourDec < FeedHour1), timeToSleepDec será igual a FeedHour1 - hourDec;
De lo contrario, timeToSleepDec = FeedHour2 - hourDec;
Serial.print("dormirá (hora) : ");
Serial.println(timeToSleepDec);
tiempoParaDormir = 3600 * tiempoParaDormirDec;
Serial.print("dormirá (segundos) : ");
Serial.println(timeToSleep);
esp_sleep_enable_timer_wakeup(timeToSleep * uS_TO_S_FACTOR); //permite que el temporizador entre en modo de sueño profundo.
Serial.println("Ahora voy a dormir");
retraso(200);
esp_deep_sleep_start(); //entrar en modo de sueño profundo si el sensor PIR está apagado y se ha producido un tiempo de inactividad.
}
Tags
Source du modèle
