Puerta automática del gallinero al amanecer y atardecer
Un actuador lineal de 12 V abre el gallinero al amanecer y lo cierra después del atardecer, calculado para tu ubicación exacta.
Los depredadores atacan al anochecer. Este proyecto calcula el amanecer y el atardecer cada día con la librería astral y mueve un actuador lineal con un puente H de dos relés, con un interruptor magnético que confirma que la puerta cerró.
Asegúrate de que la puerta no pueda atrapar a un animal: usa un actuador de fuerza moderada, una puerta liviana y un camino despejado. Revisa el gallinero a mano hasta que confíes en el sistema.
Video tutorial

Video de El campesino electrónico (Cotarejo), insertado desde YouTube. Los pasos escritos abajo son nuestros y coinciden con la lista de piezas.
Pasos de la misión
Construye la puerta
Una puerta corrediza vertical en un riel, conectada a un actuador lineal de 12 V con finales de carrera integrados.
Conecta el puente H
Dos relés invierten la polaridad del actuador: uno para abrir y otro para cerrar. Nunca actives ambos; el código lo impide.
Agrega el interruptor magnético
Móntalo para que el imán lo toque solo cuando la puerta está totalmente cerrada.
Instala astral
Instala astral con pip en un entorno virtual y pon tu latitud, longitud y zona horaria.
Alerta si falla
Si el interruptor no confirma el cierre un minuto después del comando, envía una notificación al teléfono.
Código
import datetime, time
from zoneinfo import ZoneInfo
from astral import LocationInfo
from astral.sun import sun
from gpiozero import OutputDevice, Button
TZ = ZoneInfo("America/New_York")
home = LocationInfo("Coop", "US", "America/New_York", 27.27, -80.35) # set your own lat/lon
up = OutputDevice(17, active_high=False); down = OutputDevice(27, active_high=False)
closed = Button(22)
def move(relay, other, secs=25):
other.off(); time.sleep(0.2); relay.on(); time.sleep(secs); relay.off()
while True:
now = datetime.datetime.now(TZ)
s = sun(home.observer, date=now.date(), tzinfo=TZ)
should_open = s["sunrise"] <= now < s["sunset"] + datetime.timedelta(minutes=30)
if should_open and closed.is_pressed:
move(up, down)
elif not should_open and not closed.is_pressed:
move(down, up)
time.sleep(60)Code comments are in English, like most libraries and docs — a good habit for makers.
Preguntas
¿Puedo usar un microcontrolador?
Sí: un ESP32 con reloj de tiempo real y una tabla de amaneceres funciona muy bien y consume mucho menos, algo importante con energía solar.