
Tabla de contenido:
- Paso 1: Reúna las piezas
- Paso 2: configura Raspberry Pi sin monitor o teclado
- Paso 3: Instale Wiring Pi, Apache y PHP
- Paso 4: sitio web
- Paso 5: imagen del sitio web
- Paso 6: Control remoto del servidor web
- Paso 7: conecte el circuito a la Raspberry Pi
- Paso 8: crear un servicio de inicio
- Paso 9: conecte la Raspberry Pi al garaje
- Paso 10: conecte Raspberry Pi a SECO-LARM
- Paso 11: envíe una alerta si la puerta está abierta cuando debería estar cerrada
- Paso 12: Pon tu Raspberry Pi en el libro secreto
- Paso 13: Apéndice: Referencias
- Paso 14: Apéndice: Actualizaciones
- Paso 15: Apéndice: Solución de problemas
2025 Autor: John Day | [email protected]. Última modificación: 2025-06-01 06:09

Creé este instructable en 2014. Mucho ha cambiado desde entonces. En 2021, actualicé el abre-puertas de garaje inteligente aquí.
Use una Raspberry Pi y un teléfono inteligente para abrir, cerrar y monitorear una puerta de garaje. La apertura y el cierre de la puerta se asegura mediante el uso de certificados autofirmados instalados en los teléfonos móviles de la familia. Si la puerta del garaje está abierta cuando no debería, envíe un mensaje de texto (SMS) a un teléfono celular.
La puerta del garaje ha estado en uso continuo desde finales de 2014. A lo largo de los años, he intentado mantener actualizados los cambios. Hay un apéndice que describe los cambios en el instructable.
Los objetivos de este proyecto son:
- Haga mi primer instructable: no tenía intención de publicar esto, pero he recibido muchas solicitudes
- Abra una puerta de garaje con un control remoto estándar
- Abra una puerta de garaje con el abridor de garaje con timbre montado en la pared
- Abra una puerta de garaje con un SmartPhone
- Controle el estado de la puerta del garaje de forma remota a través de un teléfono celular o computadora portátil (¿está abierta o cerrada?)
- Enviar un mensaje de texto a mi teléfono celular si la puerta está abierta cuando debería estar cerrada
- Mantenga la puerta del garaje segura (por ejemplo, en caso de pérdida de energía, la puerta no debe abrirse)
- No permita que nadie más en la red abra la puerta (certificado SSL autofirmado bidireccional)
- Use WiFi en lugar de una conexión por cable
- Usa una Raspberry Pi 3
La base para esta implementación del abre-puertas de garaje se derivó del Instructable: Raspberry Pi Garage Door Opener de quartarian. Originalmente, usé una Raspberry Pi modelo B +, luego me mudé a una Raspberry Pi 2 modelo B, y ahora usa una Raspberry Pi 3.
Usé una MacBook para comunicarme con la Raspberry Pi, pero se puede usar cualquier computadora.
No hay una razón convincente para construir este dispositivo, pero fue divertido. Es más rentable comprar uno. Se puede comprar un dispositivo similar por alrededor de $ 130 USD.
- Maestro de elevación 828LM
- Chamberlain MyQ $ 129
- Puerta GoGo $ 179
- Artesano $ 100
Notas:
- El texto encerrado entre espadas, como este ♣ reemplazar-esto ♣ debe reemplazarse con un valor real
- El texto azul subrayado de Arduino es un enlace. En este caso, es un enlace a una versión arduino de un abridor de puerta de garaje.
- Intenté acreditar todas las fuentes utilizadas. Mis disculpas por cualquier omisión. La mayor parte de este documento se basa en el trabajo de otras personas.
- $ indica un comando ejecutado en una ventana de terminal en la MacBook y generalmente se está ejecutando en la Raspberry Pi
Paso 1: Reúna las piezas
Compra o recolecta repuestos y herramientas (precios en USD).
- Raspberry Pi 3 Modelo B Newark Element14 $ 35
- Adaptador de corriente USB 5.2V 2.5A de Amazon $ 9.99
- Cable micro USB a USB de 6 pies desde Amazon $ 7.99
- Caja de Amazon $ 6.99
- SanDisk Ultra 16 GB microSDHC Class 10 con adaptador (SDSQUAN-016G-G4A) de Amazon $ 8.99
- Módulo de protección de relé SunFounder de 2 canales y 5 V para Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6.79
- 3 cables de puente hembra-hembra. Comprado en Fry's por $ 4,95.
- DNS dinámico $ 40 por año por 30 nombres (dyn.com)
- 1 unidad 18 pies cúbicos en. Caja de tomacorrientes y interruptor de pared pesada de trabajo antiguo, $ 3.12
- Placa de pared blanca Ultra Pro Single Brush, $ 7.88
- SECO-LARM SM 226L, Sensor de puerta de garaje, el precio varía ampliamente, $ 9.99 en Amazon con envío gratis
- 50 pies de cable de termostato sólido, Home Depot o Lowe's, ~ $ 20
Mi total: ~ $ 172.00
Tenía las siguientes piezas, herramientas y servicios:
- Cable Ethernet CAT5
- Alambre de calibre pequeño, 6 pies de largo
- Destornillador Phillips
- Pinzas de punta de aguja
- Cortadores de caja
- Destornillador de cabeza plana para joyeros, necesario para aflojar los tornillos del relé
- MacBook (se puede utilizar una PC)
- AT&T GigaPower (se puede utilizar cualquier proveedor de servicios de Internet)
Paso 2: configura Raspberry Pi sin monitor o teclado

Todos los proyectos de Raspberry Pi requieren algún tipo de configuración. Me gusta usar el mismo conjunto de instrucciones y, cuando es necesario, tengo un lugar para actualizar esas instrucciones.
Configure Raspberry Pi usando el siguiente instructable:
Configurar Raspberry Pi sin monitor o teclado
El instructable anterior incluye pasos opcionales en el apéndice. Asegúrese de realizar el paso:
Agregar certificados del lado del cliente a los servidores web
Apagar Raspberry Pi
$ sudo shutdown -h 0
Una vez apagado, elimine
- Cable de ethernet
- Cable serial USB
Estos ya no serán necesarios. Use wifi, ssh y una ventana de terminal en el Mac Book para ejecutar comandos en la Raspberry Pi.
Desenchufe la energía y vuelva a enchufarla, y la Raspberry Pi debería reiniciarse.
Paso 3: Instale Wiring Pi, Apache y PHP
Instalar Wiring Pi
Abra una ventana de terminal en el Mac Book. Inicie sesión en Raspberry Pi, luego descargue, compile e instale Wiring Pi. Este software permite el control de los pines GPIO. Aquí hay una guía paso a paso:
wiringpi.com/download-and-install/
Aquí hay una versión condensada de las instrucciones:
$ ssh pi @ ♣ frambuesa-pi-ip ♣
contraseña: ♣ contraseña ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd cableadoPi $ git pull origin $./build
Ejecute el comando gpio para verificar la instalación:
$ gpio -v
gpio versión: 2.29 Copyright (c) 2012-2015 Gordon Henderson Este es un software gratuito SIN NINGUNA GARANTÍA. Para obtener detalles, escriba: gpio -warranty Raspberry Pi Detalles: Tipo: Modelo 2, Revisión: 1.1, Memoria: 1024 MB, Fabricante: Sony [OV] El árbol de dispositivos está habilitado. Esta Raspberry Pi admite acceso GPIO a nivel de usuario. -> Consulte la página de manual para obtener más detalles $ gpio readall + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + ------ + --------- + ----- + ----- + | BCM | wPi | Nombre | Modo | V | Físico | V | Modo | Nombre | wPi | BCM | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | | | 3,3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | FUERA | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3,3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | BCM | wPi | Nombre | Modo | V | Físico | V | Modo | Nombre | wPi | BCM | + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + --- --- + --------- + ----- + ----- +
Los comandos anteriores deberían darle cierta confianza en que el cableado de Pi está funcionando bien.
Instalar Apache y PHP
Ejecute los siguientes comandos:
$ cd..
$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5
Para verificar que el servidor web funcione, abra un navegador y en el cuadro URL ingrese:
♣ frambuesa-pi-ip ♣
El sitio web predeterminado de Apache responde con "¡Funciona!"
Paso 4: sitio web
Abra una ventana de terminal en el Mac Book. Inicie sesión en Raspberry Pi, luego elimine el archivo index.html predeterminado, cambie los permisos en el directorio del sitio web y edite un archivo llamado index.php.
$ ssh pi @ ♣ frambuesa-pi-ip ♣
contraseña: ♣ contraseña ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root / var / www $ sudo nano /var/www/index.php
E ingrese el siguiente código:
Abridor de garaje
Automatización del hogar |
---|
Abridor de puerta de garage | Manual del abre-puertas de garaje | cerrado 1 | abierto 0 |
CTRL-o y ENTER para escribir el archivo y CTRL-x para salir del editor.
Cambiar permisos en el archivo
$ sudo chmod 664 /var/www/index.php
Paso 5: imagen del sitio web


Obtenga un abre-puertas de garaje remoto de alta resolución de la web. Modifique la imagen como desee con el pincel de Mac. En la imagen de arriba, se usó un abridor de garaje Genie de alta resolución, se agregó un logotipo de raspberry pi y se eliminó el LED.
Una imagen es el fondo (remote-background.jpg) y la otra es la imagen activa (remote-press.jpg).
El plan era que al presionar un botón, en lugar de hacer parpadear el LED, la frambuesa parpadearía. Simplifiqué el sitio web.
Copie las imágenes en la raspberry pi:
$ scp *-j.webp
contraseña: ♣ contraseña ♣
El sitio web tiene un solo botón. Para verificar, abra un navegador e ingrese ♣ raspberry-pi-ip ♣. En lugar del sitio web predeterminado de Apache, que dice "¡Funciona!", Debería aparecer el botón. Presiónelo.
Paso 6: Control remoto del servidor web
Para facilitar el acceso al abre-puertas de garaje desde una ubicación remota, utilizo un nombre DNS dinámico. Porque no me gusta recordar direcciones IP.
Con esta función, ingreso ♣ nombre de host dinámico ♣.getmyip.com en el campo URL de un navegador. Nota: La IP de los enrutadores domésticos puede cambiar sin previo aviso, pero esto rara vez ocurre. Elegí usar DynDNS. Deberá conocer la dirección IP pública de su enrutador.
IP del enrutador U-Verse: ♣ uverse-public-ip ♣
Puede ver sus nombres de host y los detalles de su cuenta DynDNS Pro. A continuación, se ofrecen algunos consejos para comenzar:
-
Cree su nombre de host de DNS dinámico (1 de 30):
- ♣ nombre de host dinámico ♣
- Clave de actualización: ♣ dynamic-ip-Updater-key ♣
-
Instale un cliente de actualización para asegurarse de que su nombre de host siempre apunte a la dirección IP correcta.
- Descargar e instalar en MacBook
- Las direcciones IP de AT&T U-verse rara vez cambian, por lo que el actualizador anterior se puede ejecutar siempre que cambie
-
Sigue las direcciones:
- Añadir cuenta
- Ingrese el nombre de usuario y la contraseña: ♣ nombre-de-usuario-ip-dinámico ♣ ♣ contraseña-ip-dinámica ♣
- Seleccionar nombre de host
- Haga clic en Configurar hosts seleccionados
- El anfitrión debería activarse
-
Configure su red para permitir el acceso a su dispositivo desde Internet. Puede utilizar nuestro Dyn Wizard para obtener instrucciones generales sobre cómo hacer esto, utilizar recursos como PortForward.com o ponerse en contacto con el fabricante del dispositivo para obtener ayuda.
- AT&T U-verse
- Reenvío de puertos para 3801HGV de 2 cables: este es el enrutador AT&T U-Verse que tengo. Consulte Actualizaciones en un Apéndice para saber cómo reenviar puertos en el enrutador AT&T U-verse 5268ac.
- Abra el navegador y vaya a ♣ raspberry-pi-ip ♣
- Contraseña: ♣ contraseña ♣
- Ajustes
-
Cortafuegos
- Elija ♣ raspberry-pi-hostname ♣
-
Servidores
- Puerto del servidor web 80
- Servidor HTTPS - puerto 443
- Agregar
- Ahorrar
Una vez hecho esto, el servidor web funcionará desde Internet. Para verificar, ingrese ♣ nombre de host dinámico ♣ y debería ver el botón de apertura de la puerta del garaje.
Paso 7: conecte el circuito a la Raspberry Pi

Para el código proporcionado (paso 4 y 6), utilicé el pin 7 de GPIO. Es una coincidencia que GPIO 7 sea el mismo que el pin 7. del cableadoPi. En el código PHP, se utilizan números de pin de cableado Pi y NO números de pin GPIO. Puede usar el que desee, pero asegúrese de cambiar el código.
Intenté usar un cable trenzado, pero el relé no se sostiene bien en un cable trenzado. El alambre macizo es mejor.
En mi primer intento, creé tres cables de conexión (hembra a macho).
- Utilice tres cables de puente hembra a hembra
-
Corta tres pedazos de alambre sólido a aproximadamente 1 pulgada.
Pele 1/4 de pulgada en ambos extremos del cable sólido
- Inserte un cable sólido en un cable de puente hembra.
Aquí hay una mejor manera de crear cables de conexión (hembra a macho):
- Utilice solo alambre macizo
- Corta tres trozos de alambre macizo de 4 pulgadas
- Pele 1/4 de pulgada en ambos extremos del cable sólido
- Utilice clavijas de conexión hembra
-
Deslice una clavija de conexión hembra en un extremo del cable sólido y engarce
La clavija hembra no debe soltarse, soldar si es necesario
- Deslice el protector contra tirones sobre la clavija de conexión hembra o cubra la clavija con cinta de electricista
-
Conecte el relé al pi como se muestra en el diagrama:
- Conecte el extremo hembra del cable al pin Raspberry Pi.
- Inserte un cable sólido en el relé.
Paso 8: crear un servicio de inicio
La mayoría de los relés, incluido el adquirido, funcionan así:
- Cuando la señal está encendida, el circuito permanece apagado.
- Cuando la señal está APAGADA, entonces el circuito está encendido.
Si la Raspberry Pi pierde energía, el relé tiene un mecanismo de seguridad que mantiene el circuito APAGADO.
Podría ocurrir un problema cuando la Rapberry Pi y el relé recuperan la energía, pero antes de que la Raspberry Pi haya terminado de arrancar para encender la señal, lo cual es necesario para mantener el circuito apagado. ¡Podrías despertarte por la mañana con tu garaje abierto y potencialmente algunos nuevos amigos!
Sin embargo, el relé no se inicializa realmente hasta que el modo de pin GPIO se establece a través de este comando: gpio mode 7 out. Además, si el pin GPIO está en ON (gpio write 7 1) antes de configurar el modo GPIO, el relé permanecerá apagado una vez inicializado.
Para que esta inicialización se ejecute en el arranque y no se despierte con nuevos amigos, use el siguiente script de inicio.
$ ssh pi @ ♣ frambuesa-pi-ip ♣
$ sudo nano /etc/init.d/garagerelay
Luego pega este script:
#! / bin / bash
# /etc/init.d/garagerelay # Realizar funciones específicas cuando se lo solicite el caso del sistema "$ 1" en inicio) echo "Relé de arranque" # Activar 7 que mantiene el relé apagado / usr / local / bin / gpio write 7 1 #Inicie el modo Gpio / usr / local / bin / gpio 7 out;; stop) echo "Deteniendo gpio";; *) echo "Uso: /etc/init.d/garagerelay {start | stop}" exit 1;; esac salida 0
Para guardar: CTRL-o, ENTER
Para salir de nano, CTRL-x
Haga que el archivo sea ejecutable:
$ sudo chmod + x /etc/init.d/garagerelay
Ahora dile a tu pi que ejecute este script en el arranque:
$ sudo update-rc.d -f garagerelay start 4
(Nota: puede ignorar con seguridad la advertencia "faltan etiquetas LSB").
Asegúrese de que la secuencia de comandos de inicio se esté ejecutando
$ sudo reiniciar
Abra un navegador y haga clic en el abridor. El relé debería hacer clic.
Paso 9: conecte la Raspberry Pi al garaje

Cuando mueva la Raspberry Pi, asegúrese de ejecutar:
$ shutdown -h 0
Es posible que desee apagar la energía del garaje. Entonces, el abridor del timbre no te electrocuta:). La verdadera razón es que cada vez que cortocircuita los cables, la puerta subirá y bajará.
Quite los tornillos de pared del abridor tipo timbre, que fija el timbre a la pared.
Haz un agujero desde el garaje detrás del abridor del timbre hasta el interior de la casa. En Texas, la Raspberry Pi no debería estar en el garaje, la variación de temperatura en el garaje está fuera de las especificaciones de funcionamiento de la Raspberry Pi.
Pase los cables del relé a través del orificio (use una percha).
Afloje ambos tornillos en la parte trasera del abridor de timbre.
Pele ambos extremos de los cables del relé: 1) aproximadamente 1/8”de pulgada del lado del relé y aproximadamente ½” de pulgada del lado del timbre. Doble el lado del cable del timbre de la puerta en medio bucle lo suficientemente grande como para encajar alrededor del tornillo de la parte trasera.
Conecte un cable de relé a cada tornillo en la parte trasera del timbre y apriete el tornillo. Las conexiones son como se muestra en la imagen. Dado que el relé aísla el circuito, la dirección ni siquiera importa qué relé está conectado a qué tornillo.
Paso 10: conecte Raspberry Pi a SECO-LARM


Antes de terminar el código, mi familia y yo estábamos de vacaciones y abrí mi navegador. La última vista de mi navegador fue el abridor de la puerta del garaje: la página se actualizó y la puerta del garaje se abrió. Unos días después, un vecino llamó y preguntó si la puerta del garaje debía estar abierta. Afortunadamente, pude cerrarlo a 500 millas de distancia.
Este error me obligó a cambiar el código para que esto no suceda y agregar un sensor y el estado de la puerta del garaje al sitio web.
Este es un enlace al instructivo original para agregar un sensor. Sin embargo, dado todo lo que ya se ha completado, la instalación del sensor se puede simplificar enormemente y, en lugar de usar Python, agregar un par de líneas de código a index.php.
Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:516 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\es.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 516