Ricarica controllata da smartphone

Update 21 Lug 2022 – Translated into English https://hackaday.io/project/186439-smartphone-controlled-charging

Ho uno smartphone datato che uso esclusivamente come hot-spot per la mia rete wifi privata. Questo significa che dovrei lasciare il telefono sempre collegato al suo caricatore, ma ciò non mi piace. Ho deciso così di aggiungere un circuito che automaticamente connetta il caricabatteria quando il livello di carica scende sotto il 30% e invece lo disconnetta quando la carica supera il 70%. Ecco una foto del dispositivo in funzione:

Il circuito è collegato, come si vede nella foto, all’uscita audio del telefono. Perché? Il motivo è semplice. Ho programmato un’App per Android che gira “in background”, cioè anche quando non appare su video. Ogni 3 minuti l’App esegue un “service” che consiste, semplicemente, nella lettura del livello di carica della batteria e della condizione di “plugged” (in carica). Se il livello è inferiore al 30% e lo stato operativo è – non in carica –  allora esegue un file audio con il tono telefonico DTMF relativo alla cifra “4” che avvia la carica; se invece il livello è superiore al 70% e lo stato operativo è – in carica – allora il tono DTMF che viene riprodotto è quello della cifra “8”  che interrompe la carica in corso.

Vediamo lo schema elettrico, diviso in sezioni; la prima parte è il circuito che si interfaccia con l’uscita jack audio del telefono:

Ho comprato un paio di jack 3.5mm 4 poli con i fili cablati e uscita USB-A. Una volta smontato, ho visto che il plug USB conteneva un piccolo CS con alcuni componenti, quindi ho tagliato i fili e ho collegato un connettore, come si vede nella figura. I colori scritti sullo schema corrispondono al mio jack, ma NON è detto che siano gli stessi di un altro spinotto. Verificate con un tester la corrispondenza dei 4 contatti. Questo circuito miscela i due canali destro-sinistro e amplifica il segnale. Le resistenze da 120 Ohm all’ingresso servono per caricare l’uscita dello smartphone. Senza di esse, il telefono non si accorge di avere un circuito collegato. A onor del vero, in uno smartphone A5000 (anno 2011) è sufficiente che sia inserito un jack qualsiasi per attivare l’uscita audio. Bene, vedete che l’uscita del circuito si collega, tramite un condensatore, al successivo modulo di decodifica del tono DTMF. Eccolo qui sotto:

L’integrato UM9204 è molto comune (e molto vecchio) e l’ho recuperato da un circuito presentato su di una mia vecchia pagina. Il funzionamento è semplice: il segnale audio presente sul pin 7 (dtmf in) viene analizzato e se corrisponde a uno dei toni DTMF usati in telefonia (mix di coppie di frequenze ben precise) la linea DV (data valid) viene portata a livello alto e sulle linee D1..D8 compare la combinazione in binario relativa alla cifra. Nota: lo “0” viene fuori come dieci (1010 binario). Ora, noi useremo le linee DV, D8 e D4 per il nostro scopo. Ovviamente, la linea D8 non sarà alta solo quando è presente il tono relativo alla cifra “8”, ma anche per il “9” e lo “0”, così come la linea D4 sarà alta con le cifre “4”, “5”, “6” e “7”, ma per questa applicazione non c’è problema.

Il tono DTMF emesso dal telefono dura circa 200mS (i files .ogg li ho generati con Audacity, un ottimo software open-source per il trattamento di files audio) e quindi i segnali DV, D8 e D4 sono temporanei, mentre a noi serve un segnale di comando stabile, sia per la condizione di acceso che per quella di spento. Allora, ci serve un flip-flop e lo realizziamo con la più classica delle porte logiche: il NAND. Ecco il circuito:

Un classico Flip-Flop set/reset. La sezione a destra è il flip-flop vero e proprio, quella a sinistra ci serve perché il set-reset ha bisogno di un livello basso per attivarsi e invece D8 e D4 vanno a livello alto, così come DV. Quindi, la sezione a sinistra si comporta così: sul pin 11 e sul pin 3 in condizioni di stasi abbiamo livello alto e l’uscita – drive in – è in uno stato stabile (può essere alto o basso, dipende dalla condizione precedente). Nel momento in cui il decodificatore dtmf riceve un tono “4”, le linee DV e D4 diventano alte e ci restano per 200mS circa. L’uscita 11 del primo NAND va a livello basso e di conseguenza l’uscita 8 va a livello alto (driver acceso) E CI RIMANE, grazie all’altro NAND che commuta il pin 6 a livello basso. La cosa opposta accade se viene rilevato il tono “8”. In questo caso saranno DV e D8 ad andare alti e di conseguenza il pin 3 andrà basso, facendo commutare il flip-flop, per cui l’uscita – drive in – andrà bassa (driver spento). In un flip-flop set/reset non è ammissibile che entrambe le linee set (pin 10) e reset (pin 4) vadano basse contemporaneamente! Se succede, il risultato sarà che l’uscita – drive in – andrà alta, ma la condizione non sarà stabile, lo diventerà solo quando le linee set/reset torneranno allo stato alto, ma non è detto che l’uscita (pin 8) resti alta, potrebbe diventare bassa in funzione di quale segnale si è disattivato per primo.

Ora che abbiamo la nostra macchina quasi completa, ci serve il driver che porterà l’alimentazione a 5V verso un connettore USB dove inseriremo il cavo di ricarica del telefono. Ecco lo schema:

Il mosfet è in package 8 pin smd, per cui ho dovuto usare un adattatore. Come al solito, i miei circuiti sono ottimizzati per funzionare con i componenti che ho a disposizione nel mio piccolo laboratorio mobile. Avevo solo i B3942, così ho usato quelli. Il funzionamento è elementare: quando il segnale – drive in – diventa alto, i 5V dell’alimentatore esterno finiscono sul connettore USB, andando a ricaricare il telefono. Se il segnale – drive in – è basso, il 5V viene scollegato e quindi il telefono non si ricarica più. Ho messo anche un led rosso per avere un’indicazione della fase di carica. Una nota per i ponticelli J1, J2 e J3. Leggendo le specifiche USB, su ogni carica batterie si dovrebbe mettere un chip in grado di negoziare la corrente di ricarica. In pratica, questo esiste su pochissimi apparecchi, ma ci sono due modalità che dovrebbero funzionare anche senza scambio di dati su USB. La prima è chiudere il ponticello J1 (e solo lui!) mettendo in corto (con una piccola resistenza) le linee dati D- e D+. In questo modo si attiva la modalità “charger”, cioè dammi tutta la corrente che puoi. Chiudendo invece J2 e J3 (non J1) metteremo a GND le linee D+ e D- indipendentemente l’una dall’altra con resistenze da 15K. In questo modo dovrebbe attivarsi la modalità di ricarica base, con assorbimento max di 100mA.

Dimentico qualcosa ? Ah sì! Per funzionare, questo circuito deve essere controllato da un’App… Ecco qui uno screenshot:

Il pannello è minimale: vediamo 4 pulsanti e un checkbox. Per iniziare, tocchiamo “service start” e il checkbox diventerà “checked” il che significa che anche chiudendo l’applicazione, il servizio continuerà a girare in background e verificherà lo stato della batteria. A che serve il “service stop”? Dato che il servizio in background gira sempre, se vogliamo veramente chiudere l’App, dobbiamo disabilitare il servizio o quello, ogni tre minuti, ripartirà. Gli altri due pulsanti “test ON” e “test OFF” servono per pilotare manualmente il circuito collegato. In pratica (dopo aver fatto lo start service) il tasto ON farà il suono DTMF della cifra “4” e il tasto OFF quello della cifra “8”. Questo è utile per settare il giusto volume per l’audio multimediale. Infatti, sul circuito non c’è una regolazione di volume e quindi dovrete farla sul telefono. Iniziate da volume al 50% e verificate che ON e OFF funzionino bene. Salite di volume di un po’ e verificate ancora; smettete quando, aumentando il volume, il circuito non funziona più (probabilmente distorce). A questo punto, fate la media tra il volume minimo e quello massimo ai quali si aveva un funzionamento corretto e piazzatevi lì. Dovrebbe essere la posizione più affidabile.

Troverete il file zip da scaricare sulla pagina dei downloads. A presto…