ATXPi: sistema de alimentación estilo ATX para Raspberry Pi (I)

Muy buenas!

Hoy os voy a introducir el proyecto que actualmente tengo entre manos y que será parte importante del gran NESPi, que también introduje en mi blog hace ya unos meses. ATXPi, como su nombre “casi” indica, se trata de un sistema de “gestión de la alimentación” para Raspberry Pi (ojo! no se trata de un sistema de alimentación!), basado en el funcionamiento de una fuente AXT que utilizamos a diario para nuestros PC de sobremesa.

La idea surgió de la necesidad de poder controlar de forma segura la manera en que la Raspberry Pi se inicia y se apaga. Sucede que, como bien sabréis, siempre la encendemos directamente enchufando el cable micro usb, y la apagamos tirando del mismo. Y suerte si la has apagado correctamente… Seguro que a mas de uno os habrá pasado lo de que te quedas con la sd corrupta tras algún apagado a toda prisa…

Mi decisión final por la que me he decido a llevar a cabo este proyecto es, como os comentaba, el poder incorporarlo a mi proyecto NESPi, para poder gestionar su funcionamiento de una manera mas cómoda y real, algo parecido a un pc…

Si estáis metidos en este mundillo, quizá conozcáis otros proyectos de este estilo ya existentes en el mercado, como por ejemplo Pi Suppply (https://www.pi-supply.com/product/pi-supply-raspberry-pi-power-switch).

PiSupply

PiSupply – La competencia (-:

Cuando me puse manos a la obra miré a ver si alguien lo había intentado antes, y ciertamente, me sorprendió mucho encontrar este que os comento, ya que cubre exactamente todos los casos que yo había pensado, y de una manera muy parecida. Pensé en un principio en hacer los temporizadores mediante transistores y condensador de descarga, tal y como ellos hacen. También pensé en que la salida se haría mediante relé… Qué curioso, también como ellos hacen… Finalmente, decidí que me lo iba a comprar, para qué inventar la rueda! Pero… no, luego se me fuero ocurriendo mas funcionalidades, que este ya no cubría. Así que me retraje y finalmente decidí que lo iba a montar yo. Y si, he hecho cálculos, y me sale a cuenta. Usaré un Arduino Nano para el proyecto!!! Este va a ser, pr lo tanto, mi primero proyecto en el que Raspi y Arduino van a convivir y comunicarse continuamente.

El proyecto, a muy grandes rasgos

En esta primera parte, os explicaré un poco el funcionamiento de base del sistema ATXPi, sin entrar en detalles del proyecto ni componentes. Os puedo decir que ya tengo una versión preliminar del montaje, pero no lo voy a presentar, por encontrarse en una versión mas que beta.

Prototipo ATXPi

Prototipo ATXPi

Como podéis observar, está basado en el arduino y una salida con un led rgb y un par de relés. El led rgb me va a permitir mostrar en todo momento el estado del sistema con un solo componente… Luego, el par de relés (ojo, ahora mismo son relés porque se trata de un prototipo, pero tengo que pensar a ver qué sistema de interrupción utilizo…), está destinado a la alimentación de la Raspberry Pi y al control de los ventiladores de la NESPi…

Fujo de funcionamiento

El sistema, que cuenta con un pulsador de power, uno de reset y un led de estado, ofrece las siguientes funcionalidades:

  • Al enchufar el sistema, el led indicador aparecerá en rojo indicando un estado de reposo y apagado
  • Puesta en marcha mediante el pulsador de power, el led indicador se encenderá de color azul
  • En el momento del encendido, se le aplica la alimentación a la Raspberry Pi a través del relé de alimentación
  • El sistema, en este momento, se encuentra encendido y a la espera de que la Raspberry Pi le indique que finalmente ha arrancado
    • Este funcionamiento lo vamos a conseguir ejecutando un software en la pi que en el momento del arranque le envíe una señal al arduino para indicarle que ha arrancado correctamente
    • En el caso de que el tiempo de arranque de la pi exceda un tiempo determinado, el sistema lo detectará como error en el arranque, y lo indicará mediante el led rgb en color naranja. En este momento se nos permitirá, bien esperar a que la pi arranque finalmente o, si pulsamos el botón de power nuevamente, apagar de nuevo el sistema, pasando a estar en el estado inical de reposo (primer punto)
  • En el momento en que la Raspberry Pi le indique al sistema que ha arrancado correctamente, este pasará a estar en estado arrancado, y se mostrará el led en color verde. En este estado, podemos trabajar normalmente con la Raspberry Pi, y el sistema se encuentra en un estado estable, como lo estaría una vez que se enchufa el cable micro usb a la pi
  • Estando en el estado de encendido, si pulsamos el botón de reset, se procederá a enviar a la Raspberry Pi una señal de reset controlado, de modo que sea ella quien decida lo que debe hacer. Para mi proyecto lo que haremos será reiniciarla por software y esperar a que se reinicie. Este estado es un tanto especial, y también contará con un sistema de temporización en el que se espera que arranque nuevamente. En el caso de que se sobrepase dicho tiempo, volveríamos a estar en un estado de error en el arranque, y el funcionamiento seria idéntico al ya mencionado. En caso contrario, nos encontraríamos de nuevo en el estado estable de arrancado
  • Estando en el modo encendido, podemos proceder al apagado del sistema de varias maneras, tal y como lo haría un sistema ATX (en ambos casos se indica el estado mediante el encendido del led en color azul):
    • Apagado por software, en el que la Pi se apagará de manera segura (sudo halt, por ejemplo) y le indica al sistema que se ha apagado, momento en el cuál, éste lo que hará será esperar un tiempo prudente para asegurar que todo ha ido bien, y posteriormente pasará a estar de nuevo en el estado inicial
    • Apagado mediante el botón de power, que al ser pulsado, se le indicará a la Raspberry Pi que debe ser apagada de forma segura. Una vez mas, y como sucede en el punto anterior, cuando el sistema detecte que la pi se ha apagado, procederá a esperar un tiempo prudencial y posteriormente, a pasar a estado apagado
  • Finalmente, si decidimos que se debe apagar el sistema de manera abrupta (ro recomendable, a no ser que sea estrictamente necesario), podemos hacer uso del botón power que, al ser pulsado durante un cierto tiempo (unos 3 segundos, por ejemplo), el sistema se apagará súbitamente, cerrando el circuito de alimentación y haciendo que la pi se apague del mismo modo. Esto sería algo como quitar el cable de alimentación de manera abrupta, con la consiguiente posibilidad de pérdida de datos, etc… El sistema pasará a estar en estado apagado y el led rojo lo indicará como tal

Conclusión

Todo este funcionamiento lo gestiona única y exclusivamente Arduino. Y con ello, lo que conseguimos, es poder tener un sistema solderless y modular. Es decir, podremos montarlo fácilmente en nuestra NESPi, sin necesidad de hacer uso de placas de circuito impreso ni otros componentes. Es la gran ventaja de poder utilizar un microcontrolador figital que haga toda la faena… Es mas, podremos hacernos con módulos de montaje para Arduino, de esos que estan tan de moda por internet, y hacer que interactúen de manera que sean ellos los que conformen el core del sistema.

Como véis, mi idea es hacerlo lo mas sencillo posible. Un Arduino Nano es muy barato, sobre todo si lo compramos clónico, que sirve igualmente bien. Luego, los relés, el led rgb y los 4 cables que nos harán falta no costarán mucho mas. Una vez montado todo el sistema, seguramente quedará bien distribuido y sin problemas generados por componentes externos ni analógicos, que incorporen ruido o problemas al sistema.

En la próxima entrega hablaremos del funcionamiento y os ofreceré el sketch de Arduino para que podáis probarlo vosotros mismos, si es que os parece interesante, claro…

Gracias por leerme.

 

Jordi

Share

4 comentarios

    • Hola!

      Gracias por tu interés. Desgraciadamente lo tuve que dejar aparcado, porque no tengo tiempo para ninguno de mis proyectos… Espero poder retormarlo en breve.

      Si tienes mas interés o dudas, podemos comentarlo y te explico toda la idea…

    • Hola de nuevo Quim, échale un vistazo a mi scketch de Arduino y me dices. Es el que quería presentar en mi segunda entrega, pero voy muy apurado de tiempo…

      https://github.com/jormc/arduino

      Si lo pruebas me dices qué te ha parecido, por favor. Ojo! Porque no es una versión final ni mucho menos estable, solo son las pruebas que he ido haciendo hasta ahora…

      Gracias por tu interés!

  1. Una cosilla, creo que modificando el script original de apagado de raspbian despues del punto de desmontaje del disco, particion o lo que sea aun tiene capacidad de comunicacion por estar cargado en memoria, con lo que podria enviar la señal a arduino para lanzar el temporizador de corte de corriente despues de haber desmontado el disco el tiempo que necesita es minimo y sigue siendo un apagado seguro.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *