Pi-Rex – Un HAT-ATX per RasperryPi4

Un HAT disegnato per RaspberryPi la cui funzione principale e’ di poter utilizzare un normale alimentatore ATX

Il RaspberryPi e’ una SBC (single board computer) con una discreta potenza. Processore e Ram sono in grado di svolgere compiti importanti. I pregi del RaspberryPi sono diversi, per prima cosa consuma poco, e’ un computer con uscite ed ingrassi tipici di un computer (video audio ed usb per esempio) e poi… ci si possono collegare molti altri componenti, anche un po’ “esotici” come sensori ambientali vari e piccoli display.

Spesso mi trovavo con un alimentatore per il RaspberryPi, uno per disco USB collegato (2 dischi = altri 2 alimentatori) e se veniva pilotato qualcosa di strano come una striscia a led, serviva un alimentatore anche per quello.

Da qui l’idea di creare una board da collegare al RaspberryPi e fargli gestire tutta l’alimentazione. L’ATX e’ un alimentatore pratico, ha tutte le tensioni che servono belle pulite. Inoltre, visto che e’ pensato per PC standard ha tanta ma tanta potenza a disposizione oltre che facilmente reperibile a basso costo! (Usati quasi te li regalano).

Ho da prima sviluppato l’idea dell’hardware con Kicad.

Quella che trovate qui sotto e’ la versione di prova (0.1). Per la stampa del PCB mi sono affidato a www.pcbway.com che ha prezzi ottimi e spedizioni economiche. Inoltre KiCad ha un plugin di esportazione sul loro sito per me perfetto..

Le caratteristiche che ho voluto sono le seguenti:

  • Alimentazione di tutti gli apparati (compreso il RaspberryPi) connessi attraverso un alimentatore standard ATX da pc.
  • Accensione e spegnimento COMPLETO (no sospensioni) attraverso un unico pulsante. Funzione inizialmente implementata con un integrato FlipFlop e un NAND Gate. In pratica:
    • RPI Spento: Pressione breve -> Accensione
    • RPI Acceso: Pressione breve -> Richiesta di reboot/spegnimento al sistema (pin dedicato)
    • RPI Acceso: Pressione lunga -> Spegnimento BRUTALE togliendo completamente l’alimentazione
  • Gestione di piu’ ventole in standard PWM (4pin) per poter gestire la temperatura al meglio all’interno delle realizzazione dove viene impiegata
  • Esposizione di tutte le possibili interfacce di comunicazione
    • SPI
    • UART
    • I2C ( 2 canali possibili per gestire piu’ sensori uguali)
    • Pin del RaspberryPi inutilizzati
  • Controllo di un carico importante (220V) per apparati subordinati al RPI (RELE’)
  • Gestione di una striscia a LED RGB 5050 di alemno 3metri (ho un piccolo rack da illuminare 🙂 )
  • Beep! A chi non piace una cosa che possa fare BEEP!

Il tutto completato con connessioni che si possano portare esternamente su di un case.

Alimentare cosi il mio RaspberryPi mi potrebbe permettere di collegare una quantità infinita di apparati esterni, cosa normalmente non possibile se non con numerosi alimentatori dedicati, cavi e ciabatte ecc ecc.

L’esempio piu’ pratico e’ collegare 4 Hard Disk rotazionali di recupero utilizzando un bridge usb unico (tipo QUESTO).

Ok, me ne sono accorto pure io, il throughput non e’ il massimo su quel coso… ma funziona (con un piccolo escamotage software) e esistono ancora scenari in cui la velocità assoluta non e’ indispensabile (cavolo… stai usando un RPI, accontentati!).

Purtroppo, dopo aver ricevuto la prima stampa delle schede mi sono reso conto di alcuni errori che richiedevano interventi di una certa rilevanza per funzionare cosi ho cambiato approccio.

Sono passato da una logica di gestione “analogica” ad un ESP32-s3-devkitc e ora il sistema e’ molto piu’ completo.

L’ESP32 e’ sempre alimentato dell’ATX anche quando questo e’ spento perche’ infatti una delle linee 5V dell’ATX e’ sempre attiva. All’ESP32 ho delegato alcune funzioni:

  • Interfaccia WEB
  • Connessione UART con il RaspberryPi
  • Display (SPI o I2C)
  • RTC (I2C)
  • 2 Sensori temperatura (one wire)
  • 2 Ventole 3 PIN 12V (quindi comandabili in velocita’ con il PWM e potenti)
  • Buzzer
  • Strisce Led RGB
  • RTC (Real Time Clock)
  • Controllo per scheda standard a 4 RELE’
  • 3 Pulsanti fisici

Sono poi passato dai componenti classici a quelli SMD, la riduzione delle dimensioni mi ha permesso di estendere ancora le funzioni della scheda.

Ora la scheda espone le funzioni del RaspberryPi pilotando direttamente :

  • 2 Ventole 3 PIN 5V (sempre pilotabili in PWM ma meno potenti)
  • 2 Sensori temperatura (one wire)
  • Connettore I2C

Questa e’ stata stampata da www.jlcpcb.com e , a parte qualche errore dovuto all’inesperienza, sorprendentemente FUNZIONA!

Dopo l’hardware e’ servito il software, qui mi e’ venuto in aiuto google con Antigravity che mi ha aiutato a sviluppare velocemente le funzioni che volevo.

La scheda ha una gestione intelligente delle tensioni dell’ATX, timer programmabili quasi per tutto e comunicazione bidirezionale con il raspberry grazie ad uno script.

Il progetto, sia hardware che software, sara’ disponibile su github appena avro’ risolto tutti gli errori

Torna in alto