🥚 Ponedero Inteligente de Registro Genealógico¶
Proyecto de hardware abierto — Trazabilidad del huevo desde la puesta¶
Cada huevo sabe de qué gallina viene. Sin tintas, sin marcas, sin intervención humana. Un ESP32, una antena RFID, una celda de carga. La genealogía se construye sola.
Versión 1.0 · Mayo 2026
1. Resumen¶
El Ponedero Inteligente es un dispositivo de hardware abierto que registra automáticamente qué gallina ha puesto cada huevo, sin necesidad de observación humana ni marcaje físico del huevo. Forma parte del proyecto Gallinero de El Salto y está diseñado para integrarse en los tractores modulares del sistema avícola.
Cada unidad de ponedero inteligente es autónoma y replicable: se instala en la zona de descanso de un tractor, monitoriza los nidales con sensores RFID y peso, y asigna cada huevo a la gallina ponedora mediante correlación temporal. Los datos se transmiten vía MQTT a farmOS, donde se construye automáticamente el pedigrí.
La unidad está pensada para funcionar en modo isla: si pierde conexión WiFi, almacena los eventos en buffer local y los sincroniza al reconectar.
2. Hardware y Componentes¶
2.1 Placa base¶
| Componente | Especificación | Notas |
|---|---|---|
| Microcontrolador | ESP32-WROOM-32E | WiFi 802.11 b/g/n, Bluetooth 4.2, 4 MB flash |
| Lector RFID | RDM6300 (125 kHz) o PN532 (13.56 MHz) | Conectado vía UART o SPI. Rango de lectura: 5-10 cm |
| Celda de carga | HX711 + celda de 1 kg | Precisión ~1 g. Detecta incrementos de peso >30 g (huevo) |
| Antena RFID | Bobina de cobre esmaltado 0.2 mm, ~30 vueltas | Montada en el marco de entrada al nidal |
| Alimentación | 5V DC vía microUSB o bornes | Puede compartir fuente con el ESP32 del tractor |
| Carcasa | Caja estanca IP65 | Protegida del polvo del gallinero y salpicaduras |
2.2 Esquema de conexiones¶
ESP32
├── GPIO16 (RX2) → RDM6300 TX (lectura RFID)
├── GPIO21 (SDA) → HX711 DATA (celda de carga)
├── GPIO22 (SCL) → HX711 SCK
├── GPIO5 → LED indicador de evento
├── 5V → Alimentación RDM6300 + HX711
└── GND → Masa común
2.3 Ubicación en el tractor¶
El ESP32 del ponedero se sitúa junto a los nidales en la zona de descanso del tractor. La antena RFID se enrolla en el marco de entrada a cada nidal — cuando la gallina atraviesa el umbral para poner, su anilla RFID es leída automáticamente. La celda de carga HX711 se coloca bajo la base del nidal.
Zona de descanso del tractor
├── Perchas elevadas
├── Nidal 1
│ ├── Antena RFID en marco de entrada
│ └── Celda de carga HX711 bajo la base
├── Nidal 2
│ ├── Antena RFID en marco de entrada
│ └── Celda de carga HX711 bajo la base
├── Nidal 3
│ ├── Antena RFID en marco de entrada
│ └── Celda de carga HX711 bajo la base
└── ESP32 + HX711 + RDM6300 (caja estanca)
3. Funcionamiento¶
3.1 Flujo de detección¶
sequenceDiagram
participant Gallina as 🐔 Gallina con RFID
participant Antena as 📡 Antena RFID (nidal)
participant ESP32 as 🔌 ESP32
participant MQTT as 📶 Mosquitto MQTT
participant NodeRED as ⚙️ Node-RED
participant farmOS as 📋 farmOS
Gallina->>Antena: Entra al nidal
Antena->>ESP32: Lectura RFID: ID_ANILLA
ESP32->>MQTT: gallinero/{raza}/gallina/{id}/ponedero/entrada
Note over ESP32: Inicia temporizador<br/>Espera 10-30 min
Gallina->>Antena: Sale del nidal
ESP32->>ESP32: ¿Hubo incremento de peso >30 g?
alt Huevo detectado
ESP32->>MQTT: gallinero/{raza}/gallina/{id}/ponedero/puesta
ESP32->>MQTT: peso_nidal: +62g
NodeRED->>farmOS: POST /api/log/egg_harvest<br/>{gallina_id, peso, timestamp}
Note over farmOS: Huevo asignado a gallina<br/>Pedigrí actualizado
else Sin huevo
ESP32->>MQTT: gallinero/{raza}/gallina/{id}/ponedero/visita
Note over ESP32: Inspección sin puesta
end
3.2 Lógica de asignación huevo → gallina¶
- La gallina entra al nidal. La antena RFID lee su anilla. El ESP32 publica evento de entrada y arranca un temporizador.
- Mientras la gallina está dentro, la celda de carga HX711 monitoriza el peso del nidal cada 5 segundos (media móvil de 3 lecturas para filtrar movimiento).
- Cuando la gallina sale (la antena RFID deja de detectar la anilla por más de 30 segundos), el ESP32 evalúa:
- ¿El peso del nidal aumentó más de 30 gramos desde la entrada de la gallina?
- Si es así: huevo asignado a esa gallina.
- Si no: fue una visita sin puesta.
- El umbral es configurable por tractor según la raza alojada: 30 g para razas enanas (Flor de Almendro), 50 g para razas estándar.
- El huevo se numera digitalmente en farmOS. No se marca físicamente (se vende como huevo ecológico sin tintas). La trazabilidad es lógica: timestamp + ID gallina + ID tractor.
3.3 Modo isla¶
Si el ESP32 pierde conectividad WiFi con Mosquitto:
- Los eventos se almacenan en un buffer circular en SPIFFS (sistema de archivos flash del ESP32)
- Capacidad: ~200 eventos (aproximadamente 3-4 días de puesta normal)
- Al reconectar, el ESP32 vacía el buffer publicando los eventos en orden cronológico con el timestamp original
- Un LED parpadea en naranja cuando hay datos pendientes de sincronizar
4. Registro Genealógico Automático¶
4.1 Pedigrí sin intervención humana¶
Gracias a la arquitectura de tractores del Gallinero, cada tractor tiene un único gallo activo como reproductor. Esto significa que:
- Cada huevo fecundado tiene padre conocido (el gallo del tractor)
- Cada huevo tiene madre conocida (la gallina que lo puso, identificada por RFID)
- El pedigrí se construye automáticamente sin necesidad de observación ni pruebas genéticas
4.2 Datos registrados por huevo¶
| Campo | Origen |
|---|---|
| ID del huevo | Generado por farmOS (autonumérico) |
| ID de la gallina madre | RFID + asignación automática |
| Raza de la madre | Ficha de la gallina en farmOS |
| Tractor | Configuración del ESP32 (fija por instalación) |
| ID del gallo padre | Registro del tractor en farmOS (un único gallo por tractor) |
| Fecha y hora de puesta | Timestamp del evento MQTT |
| Peso del huevo | Celda de carga HX711 |
4.3 Trazabilidad pública (QR)¶
Los huevos se venden con un código QR que enlaza a una página pública con:
- Raza de la gallina ponedora
- Fecha de puesta del lote
- Tractor y parcela de origen
- Certificación ecológica de El Salto
- Datos de la raza (origen, estado de conservación)
Datos NO publicados (anonimización): - ID individual de la gallina (protección del patrimonio genético) - ID del gallo padre (línea genética reservada) - Ubicación exacta del tractor (redondeo a 0.01°)
5. Integración con
SmallCountry¶
5.1 Servicios que usa¶
| Recurso | Para qué |
|---|---|
| ESP32 + RFID | Controlador del ponedero, lectura RFID, conexión MQTT |
| Mosquitto | Bus MQTT para eventos de puesta |
| Node-RED | Procesamiento de eventos RFID + lógica de asignación |
| farmOS | Registro genealógico, fichas de gallinas, pedigrí |
| Grafana | Dashboard de puesta por gallina, raza, tractor |
| n8n | Pipeline: registro → trazabilidad QR → tienda |
| ntfy | Alertas: ausencia de puesta prolongada, huevo sin asignar |
5.2 Roles implicados¶
| Rol | Función |
|---|---|
| Fauno — Ganadería | Supervisión del ponedero, recogida de huevos |
| Argos — Observabilidad | Configuración de alertas, dashboards |
Para el administrador
Datos del servicio¶
| Dispositivo | ESP32 + RDM6300 + HX711 × N (uno por tractor) |
| Red | vmbr3 (IoT finca), solo MQTT a Mosquitto |
| Tier | B — Importante |
| Impacto | 🟡 Caída = un tractor sin registro automático de puesta |
Firmware¶
PlatformIO + Arduino framework
├── WiFi Manager (conexión a red IoT vmbr3)
├── MQTT client (Mosquitto, topic raíz configurable)
├── RFID reader (UART, polling 500 ms)
├── HX711 load cell (lectura cada 5 s, media móvil 3 muestras)
├── Buffer SPIFFS para modo isla (~200 eventos)
├── Watchdog hardware (reinicio si se cuelga)
└── LED de estado (verde=ok, naranja=pendiente sync, rojo=error)
Firmware versionado en Forgejo y desplegado OTA vía PlatformIO.
Healthcheck¶
# Verificar que el ESP32 publica en MQTT
mosquitto_sub -t 'gallinero/+/ponedero/status' -C 1
# Verificar asignaciones en farmOS
curl -s https://farm.elsalto.sc/api/farm/log/egg_harvest \
| jq '.data | length'
Problemas comunes¶
| Síntoma | Causa probable | Solución |
|---|---|---|
| Huevos sin asignar | RFID no detectó entrada al nidal | Revisar antena del nidal. Posible gallina sin anilla |
| Falsos positivos de puesta | Vibración o movimiento del nidal | Ajustar umbral de peso (>30g → >45g). El umbral es configurable por tractor según la raza alojada: 30 g para razas enanas (Flor de Almendro), 50 g para razas estándar |
| ESP32 no transmite | Sin WiFi o sin alimentación | Verificar fuente 5V, cobertura WiFi en el tractor |
| Buffer SPIFFS lleno | Modo isla prolongado >4 días | Conectar WiFi, forzar sincronización |
6. Hoja de Ruta¶
Fase 1 — Prototipo funcional¶
- [ ] Montar prototipo en breadboard: ESP32 + RDM6300 + HX711 + celda de carga
- [ ] Desarrollar firmware base: lectura RFID, pesaje, lógica de asignación
- [ ] Probar con anilla RFID de prueba (simular paso de gallina y puesta)
- [ ] Publicar eventos MQTT y verificar en Node-RED
Fase 2 — Integración con tractor real¶
- [ ] Construir 1-2 unidades para instalar en los tractores de prueba
- [ ] Anillar gallinas reales con RFID
- [ ] Validar asignación huevo → gallina durante 2 semanas de puesta real
- [ ] Conectar con farmOS y verificar pedigrí automático
Fase 3 — Escala y publicación¶
- [ ] Construir unidades para todos los tractores (10 en total)
- [ ] Publicar esquemas, firmware y lista de componentes en Forgejo (open hardware)
- [ ] Escribir guía de construcción para otros criadores
7. Construye el Tuyo¶
Lista de materiales¶
| Componente | Cantidad | Coste aprox. (€) |
|---|---|---|
| ESP32-WROOM-32E Dev Board | 1 | 5 |
| RDM6300 + antena | 1 | 3 |
| Módulo HX711 | 1 | 2 |
| Celda de carga 1 kg | 1 | 3 |
| Anilla RFID pasiva 125 kHz | 15 (para las gallinas) | 0.30/ud |
| Cable cobre esmaltado 0.2 mm | 2 m (bobina antena nidal) | 1 |
| Caja estanca IP65 | 1 | 4 |
| Regulador 5V + cables | 1 | 2 |
| Total por unidad | ~25 € |
Firmware¶
Repositorio en Forgejo: firmware/ponedero-inteligente/. Escrito en C++ con PlatformIO y Arduino framework. Incluye:
main.cpp— bucle principal, tareas FreeRTOSrfid.cpp/rfid.h— driver RDM6300 vía UARThx711.cpp/hx711.h— driver celda de carga con media móvilmqtt.cpp/mqtt.h— cliente MQTT con reconexión automáticabuffer.cpp/buffer.h— buffer circular en SPIFFS para modo islasecrets.example.h— plantilla de configuración WiFi/MQTT
Próximo paso: Montar el prototipo, probar con una anilla RFID y ver el primer huevo asignado automáticamente en farmOS.