Tabla de contenido:

Construya un mejor botón de encendido de Raspberry Pi: 4 pasos
Construya un mejor botón de encendido de Raspberry Pi: 4 pasos

Video: Construya un mejor botón de encendido de Raspberry Pi: 4 pasos

Video: Construya un mejor botón de encendido de Raspberry Pi: 4 pasos
Video: Como poner un interruptor para encender y apagar la Raspberry en Recalbox 2024, Mes de julio
Anonim
Image
Image

Es muy fácil hacer un botón de apagado o apagado de Raspberry. Hay muchos proyectos de este tipo en la web y algunos aquí en Instructables, pero ninguno de ellos (que puedo ver) le dice cuándo su Pi ha terminado de apagarse y, por lo tanto, es seguro desconectar la energía. De hecho, ni siquiera reconocen que se ha visto la pulsación del botón.

También hay proyectos para reiniciar una Pi que se ha apagado, pero tampoco te brindan ningún comentario visual.

Pero, ¿quién necesita un botón así? Si eres un poco nerd como yo, o incluso simplemente un aspirante a nerd, siempre puedes iniciar sesión en tu Pi localmente o en la red y escribir sudo shutdown -h ahora. Pero si está creando un proyecto para usuarios no técnicos, eso simplemente no funcionará. Es cierto que casi siempre puede salirse con la suya simplemente tirando del cable de alimentación, pero tenga en cuenta que ¡dije que casi siempre! La suerte de todos se acaba tarde o temprano. Se me murió una tarjeta SD la semana pasada, aunque nunca sabré si realmente se debió a una pérdida abrupta de energía.

En mi caso, necesitaba agregar un botón de encendido a un Pi que usamos como secuenciador midi para grabar y reproducir himnos y canciones en la iglesia, para cuando no tenemos un pianista en vivo disponible. Siempre puedo escribir el comando de apagado, pero necesito deshabilitarlo para cuando no esté allí.

Mi intención aquí no es darte un producto terminado, completo con un estuche bellamente impreso en 3D, como tantos otros Instructables. Todo el mundo tendrá un uso diferente para él o querrá incorporarlo en su propio proyecto. Más bien, lo configuraré con la tecnología que puede agregar a su proyecto, ya sea un centro de medios, un dispositivo de IoT o cualquier otra cosa.

(En el video, lo estoy demostrando con un Pi Zero v1.2 y un monitor que hice con una pantalla de computadora portátil reutilizada y un controlador del Lejano Oriente).

Paso 1: el diseño

Cómo funciona
Cómo funciona

Esto es lo que hará mi botón de encendido por ti:

  • Cuando el Pi está funcionando, un LED se enciende continuamente. Si se apaga manualmente, el LED se apaga solo cuando es seguro desconectar la alimentación.
  • Mientras está en funcionamiento, si presiona el botón durante al menos un segundo, se inicia un apagado y el LED parpadea durante un cuarto de segundo cada segundo hasta que sea seguro desconectar la alimentación.
  • Desde un estado de apagado (si no se ha quitado la energía), al presionar el botón se inicia el arranque y el LED parpadea durante un cuarto de segundo cada segundo hasta que se inicia. (Puede que tarde un poco más en ejecutarse todos los servicios, como ssh y vnc).

Los componentes son muy económicos. Todo lo que necesitas es:

  • ATTiny85 (chip compatible con Arduino)
  • 3 resistencias: 2 x 330Ω y 1 x 10kΩ
  • 1 LED: sugiero verde o azul, pero es su elección
  • protoboard y cables de puente, o tablilla, o como quieras construirlo.

Paso 2: cómo funciona

Al igual que con todos los botones de encendido de Pi, este coloca un pin GPIO en un estado bajo para indicar una solicitud de apagado a un programa auxiliar que se ejecuta en Pi. Usé GPIO4 (pin 7) pero puedes usar cualquier otro pin.

La única forma de saber que un Pi ha completado el apagado es observando el pin 8 de TxD, que luego baja. Esto depende de que la consola serie esté habilitada, que es la predeterminada. De hecho, TxD subirá y bajará regularmente mientras se usa como consola en serie, pero nunca bajará por más de alrededor de 30 ms a la vez, incluso a la velocidad en baudios común más lenta. Todavía se puede usar para una consola en serie, ya que simplemente lo miramos pasivamente.

Para reiniciar, necesitamos bajar brevemente SCL1 (pin 5). Este pin es utilizado por cualquier dispositivo I2C (incluida mi interfaz midi), pero después de iniciar el arranque lo dejamos solo.

La mayor parte de la complejidad está en el boceto de Arduino que cargamos en el ATTiny85. Esto implementa una "máquina de estado", una forma muy útil y poderosa de codificar cualquier problema que pueda ser representado por una serie de "estados". Una lavadora funciona de la misma manera. Los estados representan las etapas del ciclo de lavado, y cada uno define lo que debe estar haciendo la máquina en ese punto (motores o bombas para funcionar, válvulas para abrir o cerrar) y qué entradas de sensor (temperatura, nivel de agua, temporizadores) determinar cuándo pasar al siguiente estado y qué próximo estado elegir.

El boceto a mano es mi primer borrador de un diagrama de estado, que muestra todas las transiciones de estado. Esto es solo para mostrarle cómo puede planificar inicialmente sus estados y transiciones de estado; puede que no sea completamente exacto como lo era antes de comenzar a depurar.

En nuestro caso, tenemos 6 estados que llamé APAGADO, SOLICITUD DE ARRANQUE, ARRANQUE, EN EJECUCIÓN, SOLICITUD DE APAGADO y APAGADO. (Después de APAGAR, vuelve a APAGAR.) Estos se identifican mediante comentarios en el esquema y, para cada uno, los comentarios adicionales indican lo que debería estar haciendo y qué eventos lo moverán a otro estado.

El programa de ayuda que se ejecuta en Pi es un poco más complicado que para la mayoría de los botones de apagado. Responde a un pulso largo y bajo en el pin GPIO iniciando un apagado, pero también responde a un pulso corto por sí solo bajando brevemente el pin GPIO. Así es como el ATTiny85 puede saber que se está ejecutando y, por lo tanto, puede pasar del estado de ARRANQUE al EN EJECUCIÓN.

Paso 3: creación de un prototipo de demostración

Construyendo un prototipo de demostración
Construyendo un prototipo de demostración
Construyendo un prototipo de demostración
Construyendo un prototipo de demostración
Construyendo un prototipo de demostración
Construyendo un prototipo de demostración

Para fines de demostración, puede crear un prototipo en una placa de pruebas sin soldadura como se muestra, pero también le he dado el esquema para que pueda elaborar su propio diseño utilizando una placa de separación o una PCB personalizada, tal vez como parte de un proyecto más amplio.

Paso 4: Programación del ATTiny85

El boceto de Arduino y el programa de ayuda se adjuntan a este paso. En su carpeta de bocetos de Arduino, cree una carpeta llamada PiPwr y copie el archivo PiPwr.ino en ella. Al iniciar el IDE de Arduino, ahora lo encontrará en su cuaderno de bocetos.

Hay varias formas de programar un ATTiny85. Si el suyo tiene un cargador de arranque instalado, puede usar una placa de desarrollo ATTiny85 que cuesta solo unas pocas libras. Esto se conecta a su PC a través de un puerto USB. Usé un Hidiot que es esencialmente el mismo pero con un área de prototipos.

En el IDE de Arduino en Archivo - Preferencias, agregue

digistump.com/package_digistump_index.json

a las URL del administrador de tableros adicionales.

En Herramientas - Tablero, ahora debería ver una serie de opciones de Digispark. Seleccione Digispark (predeterminado: 16,5 MHz).

Si su ATTiny85 no tiene un gestor de arranque (o no lo sabe), puede obtener un programador AVR ISP por unas pocas libras. O puede usar un Arduino Uno o un Pro Mini o Nano más barato como programador. Busque en Google "arduino as isp attiny85" (sin las comillas) para obtener instrucciones.

Si desea modificar el boceto, lo encontrará completamente comentado y, con suerte, fácil de seguir. Para depurar es mucho más fácil usar un Arduino Pro Mini o Nano. Descomente el serial.begin () en Configuración y las declaraciones de impresión en loop () para ver los pasos que sigue usando el monitor serial. Hay definiciones de pines alternativas en la fuente, comentadas, para Uno, Pro Mini o Nano.

En su Raspberry Pi, copie el archivo shutdown_helper.py en la carpeta / etc / local / bin y configúrelo como ejecutable con el comando

sudo chmod + x /usr/local/bin/shutdown_helper.py

Ahora edite el archivo /etc/rc.local con su editor favorito. (Deberá hacerlo como root). Antes de la última línea (salida 0) inserte la línea

nohup /usr/local/bin/shutdown_helper.py &

Reinicie y el programa auxiliar se iniciará automáticamente.

Recomendado: