SMPS – Sono Molto PericoloSi

L’acronimo SMPS, in Inglese, significa: “Switched-Mode Power Supply” e non: “Sono Molto PericoloSi”… Però sono veramente molto pericolosi ! Chiunque volesse cimentarsi nell’autocostruzione o nella riparazione di tali dispositivi, dovrà fare MOLTA attenzione, per non finire FULMINATO !

Le nostre case, ormai, sono disseminate di alimentatori SMPS; ogni telefono o smartphone ne ha uno, come pure ogni notebook, PC, televisore, sistema di illuminazione a LED e chi più ne ha, più ne metta. Un alimentatore SMPS di qualità, progettato bene e costruito con componenti affidabili, è robusto e sicuro, ma molto spesso i costruttori “senza brand” e “low cost” producono circuiti semplificati e con componenti di seconda scelta, con il risultato che un giorno andate ad inserire l’alimentatore nella presa di corrente e quello fa un suono secco e produce una nuvoletta di fumo nero. Questo, se vi va bene… perché ci sono finali peggiori.

Se vi viene voglia di riparare un alimentatore SMPS per il telefonino o comunque un modello di bassa potenza (max 10W), dovete per prima cosa attrezzarvi con un minimo di circuiteria di sicurezza per isolarvi dalla rete elettrica di casa a 220V. I contratti di casa da 2.5KW o 4KW portano sulle vostre prese di corrente una potenza capace di “friggervi” in pochi secondi, quindi… non siate incoscienti e prendete le dovute precauzioni. Non cercate di riparare o comunque di mettere le mani in alimentatori da più di 10W (per esempio, non provateci con gli alimentatori dei notebook) perché al salire della potenza, crescono anche le necessità di sicurezza e di una strumentazione professionale. Per dispositivi di potenza, rivolgetevi a laboratori attrezzati ed a tecnici che abbiano maturato un’esperienza pluriennale nel settore.

Protezione dalla linea 220V con due trasformatori

Protezione per linea 220V con due trasformatori

AVVISO : se volete fare esperimenti e collegare circuiti alla rete elettrica a 220V, lo fate a vostra discrezione e sotto la vostra responsabilità. L’attività in sé è rischiosa e comporta gravi pericoli, tra i quali anche il pericolo di vita. Ho dato risalto a questo avviso, scrivendolo in rosso, per mettere in guardia chiunque volesse replicare gli esperimenti descritti in questo articolo.

Per isolarsi dalla rete elettrica a 220V e disporre comunque di una sorgente di tensione alternata a 220V – 50Hz, la cosa più semplice da fare è quella di collegare tra loro due trasformatori identici attraverso gli avvolgimenti secondari. Io ho utilizzato due alimentatori in alternata, cioè privi di raddrizzatore, provvisti di prese secondarie (24V-18V-15V-12V-9V) perché in questo modo posso creare tensioni in uscita un po’ più alte o un po’ più basse di 220V, a seconda di come posiziono il selettore del trasformatore “primario” e di quello “secondario”. Lo schema elettrico qui sotto chiarirà meglio il concetto.

protect220v-schI selettori select #1 e #2 sono mostrati come se fossero solo con 2 posizioni, mentre ne hanno 5 nella realtà, ma per la nostra applicazione useremo solo le quattro combinazioni possibili con i due selettori mostrati in figura. Nella foto del prototipo circuitale mostrata sopra, si vede il tester che misura 213 Vca sul connettore denominato “220V protetta”; tale valore si ottiene mettendo i selettori #1 e #2 entrambi sulla posizione 24V e collegando il connettore denominato “Linea 220V 50Hz” alla presa di corrente.

Perché ci sono tanti alimentatori SMPS ?

Le ragioni sono di tipo economico e di ingombro. Un alimentatore standard, non switched-mode, è molto semplice (vedi schema)

Alimentatore standard, non regolato

Alimentatore standard, non regolato

In pratica c’è il trasformatore, un ponte raddrizzatore e un condensatore di livellamento. Il circuito è molto semplice e sarebbe anche poco costoso se non fosse per il trasformatore. L’efficienza dei trasformatori, infatti, aumenta con l’aumentare della frequenza. Un trasformatore fatto per funzionare a 50Hz ha bisogno di un notevole “pacco ferromagnetico” per trasferire la potenza dal primario al secondario. Però, purtroppo, la frequenza della linea elettrica a 220V è proprio di 50Hz… Allora come si fa ad usare dei trasformatori più piccoli per ottenere la stessa potenza ? Si realizza uno switched-mode ! In pratica si raddrizza la 220V (diodo e condensatore ad alto voltaggio) e con la tensione continua ottenuta si alimenta un oscillatore ad alta tensione con un’alta frequenza. Poi si utilizza questa alta frequenza in un trasformatore appositamente creato, che sarà molto più piccolo perché alle alte frequenze il pacco ferromagnetico si riduce moltissimo. Alla fine, sul secondario di questo piccolo trasformatore, metteremo di nuovo un raddrizzatore ed un condensatore di livellamento e così otterremo la bassa tensione livellata (ma non ancora stabilizzata).

Abbiamo detto che all’aumentare della frequenza, migliora l’efficienza dei trasformatori. Si è assistito, in questi anni, a un aumentare costante delle frequenze degli alimentatori switched-mode. Ricordo i primissimi che avevano oscillatori a circa 30 KHz, poi si è passati a 50, poi a 100, poi a 300 KHz e ultimamente si è andati oltre 1 MHz ! C’è però un limite, imposto soprattutto dalla irradiazione di frequenze “spurie” di questi circuiti. Gli oscillatori, infatti, sono ad onda rettangolare e con un duty-cycle (pieno/vuoto) variabile in funzione del carico d’uscita. Questo significa che un oscillatore ad oltre 1 MHz crea moltissime armoniche a frequenze tre, cinque, sette, nove (eccetera) volte superiori alla frequenza fondamentale. Un’onda quadra, quindi con un duty-cycle del 50%, genera una terza armonica con 1/3 della potenza della fondamentale, una quinta armonica con 1/5 della potenza, una settima con 1/7 e così via. Un’onda rettangolare (duty-cycle diverso dal 50%) ha sempre una gran quantità di armoniche, ma queste hanno una distribuzione di potenza differente. Se pensiamo che le variazioni di carico modificano continuamente il duty-cycle dell’oscillatore, ci rendiamo conto di quanto sia importante il problema delle emissioni di frequenze spurie. Un trasformatore ben costruito, comunque, tiene gran parte del campo elettromagnetico all’interno del proprio nucleo, ma più si sale di frequenza e più è facile andare a disturbare vari tipi di apparecchi radio.

Vediamo com’è fatto un tipico alimentatore SMPS di bassa potenza. Praticamente ogni caricabatterie per smartphone gli somiglia parecchio !

Un classico alimentatore SMPS di bassa potenza

Un classico alimentatore SMPS di bassa potenza

La sezione 1 è costituita dal circuito raddrizzatore / livellatore che trasforma l’alternata a 110/220V in una continua ad alta tensione che verrà usata per alimentare l’oscillatore ad alta frequenza. La sezione 2 è l’oscillatore ad alta frequenza che ha come carico il primario del trasformatore. La sezione 3 è il raddrizzatore / livellatore a bassa tensione, collegato al secondario del trasformatore. La sezione 4 è l’elemento che permette la stabilizzazione della tensione di uscita. In pratica è la “retroazione” o “feedback” per l’oscillatore. Per tenere isolata la parte a bassa tensione da quella ad alta tensione, si usa un fotoaccoppiatore. Il diodo zener costituisce l’elemento stabilizzatore ed agisce facendo accendere il led del fotoaccoppiatore quando la tensione d’uscita supera quella di zener (più la caduta del diodo led). Il transistor del fotoaccoppiatore modifica di conseguenza il funzionamento dell’oscillatore ad alta frequenza producendo così una bassa tensione costante al variare del carico. Questa è una semplificazione del funzionamento dell’alimentatore SMPS. Ci sono molte altre cose da conoscere sull’argomento e consiglio a chi volesse imparare davvero per bene di leggere i numerosi datasheets degli integrati più recenti per comprendere a fondo la teoria di questi circuiti e tutti i trucchi per ottimizzarne le prestazioni. Per fare pratica, ci sono anche delle “evaluation board” vendute da fornitori on-line di materiale elettronico. In alternativa, si può smontare il caricabatterie di un telefono e si troverà qualcosa di molto simile al circuito mostrato nella figura. Mi raccomando, siate prudenti. Questi circuiti sono pericolosi ! Se ci lasciate la pelle, non mandate da me i vostri eredi a lamentarsi della vostra prematura dipartita. Io vi ho avvisati !

Un esempio pratico

Qualche tempo fa vidi su un “noto negozio on-line” uno stock di 5 alimentatori SMPS di vecchio modello. Costavano veramente poco ed erano di produzione marcata STMicroelectronics, quindi di ottima qualità. Decisi di comprarli perché volevo utilizzarli per realizzare degli alimentatori da 9V per alcuni miei prototipi. Nella foto qui sotto vedete l’etichetta che era presente sul contenitore, ed il circuito interno dalla parte saldature e da quella dei componenti.

Caricabatterie di vecchia produzione, ma di buona qualità

Caricabatterie di vecchia produzione, ma di buona qualità

Come si vede dalla figura, all’interno c’era un secondo circuito, dotato perfino di un microcontrollore ST6. La ragione per questa “complicazione” è che qualche anno fa si tendeva a mettere il circuito di ricarica delle batterie all’interno degli alimentatori, anziché nei telefoni. Poi c’è stata una normativa europea che ha imposto a tutti i costruttori di mettere in commercio alimentatori compatibili fra loro e così i circuiti di ricarica si sono “spostati” all’interno dei telefoni. Oltre a questo, mentre prima la tendenza era quella di fare telefoni sempre più piccoli (quindi con pochissimo spazio all’interno per i circuiti), ora i telefoni stanno diventando sempre più grandi (praticamente sono dei tablet) e quindi di spazio all’interno ce n’è parecchio, almeno sul piano orizzontale.

Una volta data un’occhiata al circuito, ho visto che potevo eliminare completamente il microcontrollore e diversi altri componenti. Riducendo tutto all’osso, praticamente arrivando molto vicino allo schema presentato precedentemente, il risultato è stato questo:

Il circuito dopo l'eliminazione del "superfluo"

Il circuito dopo l’eliminazione del “superfluo”

Notate in basso nella foto il diodo Zener usato come stabilizzatore. Il valore di Zener è di 8.2V e in questo modo ho ottenuto una tensione di uscita (a vuoto) corrispondente a 8.2V + 1.5V di caduta attraverso il led del fotoaccoppiatore, per un totale di 9.7V , Volevo un alimentatore da 9V con tolleranza del +/- 10% e l’ho ottenuto. Di sotto la foto del tester che misura la tensione a vuoto. Per il momento è tutto…

La prova pratica: collegato alla linea (attraverso il circuito di sicurezza) e al tester

La prova pratica; il circuito è collegato alla linea 220V (attraverso il circuito di sicurezza) e al tester

Interfacciare il modulo ESP-01 con una porta USB

Ho di recente realizzato un progetto basato sul dispositivo ESP8266. Quando ho cominciato a lavorare sul dispositivo, ho acquistato un modulino ESP-01 su un “noto negozio on-line” e poi, per fare le prime prove, ho pensato di collegare il modulino ad una porta USB del notebook, in modo da scrivere qualche programma di test. Ho quindi realizzato questo circuitino di prova:

Il circuito montato

Il circuito montato

Questo circuito è costituito da tre blocchi, due dei quali sono l’interfaccia USB-TTL e l’ESP-01, mentre il terzo elemento è autocostruito. Ecco i tre blocchi:

I tre moduli del circuito

I tre moduli del circuito

A sinistra vediamo il circuitino autocostruito, al centro l’interfaccia USB-TTL e a destra il modulo WiFi ESP8266. Il circuito autocostruito è montato molto “alla svelta” come si evince dalle foto (fronte e retro):

il circuito autocostruito, fronte e retro

il circuito autocostruito, fronte e retro

Lo schema del circuito è questo (disegnato a mano, spero sia comprensibile) :

Schema elettrico del circuito e del collegamento dei moduli

Schema elettrico del circuito e del collegamento dei moduli

Nota: nel mio prototipo non c’è più spazio nemmeno per uno spillo, ma se ve ne costruite uno un po’ meno “compatto”, aggiungete una resistenza da 1K in serie al pulsante di reset dal lato Gnd, così pure sul jumper “re-flash”, sempre verso Gnd. Questo servirà a proteggere i segnali di I/O qualora nel modulo ESP-01 sia stata caricata una versione di firmware diversa da quella “base”, magari con i pin GPIO16 o GPIO0 non impostati come ingressi.

Sul modulo USB-TTL che ho usato io, ci sono solo 4 pin, che sono Vout, Txd, Rxd e Gnd, ma ci sono altri moduli che hanno più collegamenti. Quelli che servono, sono Gnd, Txd, Rxd e un quarto pin che porta la V_Usb, cioè il 5V preso dalla porta USB. Sul mio modulo c’è un jumper per scegliere se portare sul pin di uscita la tensione di 5V dalla presa USB oppure la 3.3V ricavata da un regolatore interno del chip. La tensione di 3.3V andrebbe bene, ma la corrente fornita dal regolatore interno è insufficiente, così useremo la 5V e creeremo la 3.3V con un regolatore LM1117-3.3, che è in grado di fornire al modulo ESP-01 i 3.3V e la corrente necessaria per funzionare. Il ponticello chiamato: “re-flash jumper” serve per fare l’update / upgrade del firmware contenuto nel modulo ESP-01, mentre il pulsante di reset serve… a resettare il modulo WiFi.

Esperimenti su USB OTG

Ho acquistato dei connettori plug micro USB per fare degli esperimenti. Sto costruendo un dispositivo che sfrutta un phablet (phone-tablet) con lo schermo da 6.5 pollici e sistema operativo Android, come interfaccia utente per un sistema di controllo luci casalingo. Ho collegato una interfaccia USB-Serial al cavetto in dotazione al phablet (quello che ha un plug microUSB e un receptacle USB-A) ed ho scritto un programma di prova (perfettamente funzionante) che mi permetteva di colloquiare tramite la porta seriale disponibile, col resto del mio apparato. Bene, però non è pratico avere il phablet con il cavetto adattatore, l’interfaccia USB-Serial e lo spinottino di alimentazione collegati. Ho pensato: adesso aggiungo al mio circuito un chip di convertitore USB-Serial della FTDI e faccio un cavetto che parta direttamente dalla scheda e finisca nel phablet, nel receptacle microUSB presente. Sarebbe bello, ho pensato, sfruttare lo stesso cavo ANCHE per alimentare il phablet e ricaricare la sua batteria. Con questa idea in testa, sono andato a leggere un po’ di documentazione sulla USB OTG ed ho trovato che oltre ai soliti 4 segnali, ce n’è un quinto. Questo segnale viene definito ID ed ha molteplici funzioni. Quella di base è semplice: se viene messo a GND, “avvisa” il dispositivo che deve comportarsi come un USB HOST e deve anche generare la tensione di 5V tipica di un dispositivo di questo tipo. Si noti che ormai praticamente tutti i dispositivi tablet, smartphone, phablet funzionano con una batteria da 3.7V (che in full charge è a 4.2V) e che quindi è necessario, all’interno del dispositivo, un regolatore step-up in grado di portare la tensione della batteria un pochino più in alto, per raggiungere i fatidici 5V. Questo step-up, ho scoperto a mie spese, ha una corrente limitata e qualche volta non è protetto (maledizione). Per cui, se provate a collegare, per esempio, un motorino elettrico ai contatti positivo e negativo del connettore USB, il telefono …si guasta 🙁 Nello specifico, il mio Samsung Nexus non voleva più saperne di spegnersi. Premevo il pulsantino di lato, si spegneva per tre secondi e poi si riaccendeva da solo. Certe volte passava più tempo, ma alla fine si riaccendeva da solo. Essendo fuori garanzia, ho costruito un connettorino microUSB con una resistenza, che prende il livello di una delle linee di dati e lo riporta sul pin di alimentazione. Così il telefono “vede” di nuovo una situazione regolare sul connettore microUSB e funziona come prima. La scocciatura è che ho sempre questo piccolo plug attaccato alla base del telefono. Un amico mi ha chiesto: “ma che cos’è che hai attaccato lì sotto ?”. Ed io ho mantito dicendo che si trattava di un dispositivo per diminuire l’influenza delle microonde sul mio cervello. Tornando al regolatore step-up presente nel dispositivo, sono andato a cercare quale fosse la corrente tipica disponibile e ho trovato su un solo documento un riferimento ad un’applicazione con Imax = 8mA. Leggendo le varie opzioni dei costruttori di chip con funzione di USB OTG, ho notato che il pin ID è collegato anche a dei comparatori interni, quindi non è solo un pin di on/off, ma fornisce al controller diversi possibili “stati” in funzione della tensione presente. Ora, dato che internamente c’è una resistenza di pull-up (verso il positivo), la tensione presente sul pin ID dipende dalla resistenza verso GND che mettiamo sul nostro circuito esterno. Tolta la resistenza da zero Ohm (che è quella vista in precedenza), ci sono altri valori tipici (e precisi) che permettono di “avvisare” il controller di come deve comportarsi il circuito. Addirittura, in un modello di chip, è possibile collegare una tastiera a questo singolo pin ! Ogni tasto viene decodificato in base al valore di resistenza che mette a GND. I valori “standard” per le funzioni più importanti dovrebbero essere 36.5K / 68K /120.4KOhm.
Quello che interessa a me è di poter “dire” al phablet che deve comportarsi da HOST, cioè deve “vedere” la mia interfaccia USB-Serial e utilizzarla come accessorio USB, ma che NON deve generare il 5V con lo step-up, perché il 5V lo voglio fornire io dall’esterno per ricaricare il phablet. Quindi, ho costruito un cavetto e mi sono messo a fare delle prove.

Il primo cavo costruito per le prove

Il primo cavo costruito per le prove

Per prima cosa, ho cercato la piedinatura di un connettore plug microUSB e l’ho trovata subito in internet. Ho costruito il cavetto e non funzionava in nessun modo. Per forza… gli schemi che avevo trovato su internet erano SBAGLIATI ! Ho preso un multimetro e dei fili molto sottili ed ho fatto delle misure in Ohm. Trovata la giusta piedinatura, ho proseguito nell’esperimento. Nella foto sotto potete vedere il mio connettore con i piedini giusti.

Il secondo cavo., quello usato nel prototipo completo

Il secondo cavo., quello usato nel prototipo completo

Poi sono andato avanti per vedere come raggiungere il mio obbiettivo. Secondo la documentazione, il dispositivo dovrebbe fare quello che ho scritto prima se “vede” una resistenza da 36.5KOhm. Non ho questo valore tra le mie resistenze e quindi ho usato una 33K con in serie un trimmer multigiri da 5K. Ho misurato il valore preciso di 36.5KOhm ed ho collegato il circuito, ma niente, non faceva quello che mi aspettavo.
Ho deciso, allora, di usare un trimmer da 100KOhm, senza resistenza in serie, e sono partito da zero salendo poi di un pochino per volta. Arrivato tra 3.9K e 4.7K il phablet, improvvisamente, si è messo a fare quello che volevo. Come l’ho capito ? Avevo un voltmetro messo sui pin Vbus (Vcc, il +5V della USB) e GND. Con la resistenza di zero Ohm sul pin ID, si vede il tester che segna immediatamente 5V (lo step-up interno è stato attivato) salendo verso i 3KOhm il 5V è scomparso, quindi lo step-up doveva essere stato disattivato. Ora c’era da vedere se il phablet riconoscesse l’accessorio USB, perché mi servono entrambe le cose. Lo riconosceva. Ho provato ad aumentare ancora il valore di resistenza e sono arrivato a circa 6KOhm e a questo punto l’interfaccia USB-Serial non veniva più riconosciuta. Allora ho messo sul mio circuito una resistenza da 4.7K e via.
Attenzione, su un altro dispositivo (di marca diversa) la cosa non funziona. Ho notato che queste “regole” sulla USB OTG vengono, come dire, “interpretrate” dai vari costruttori secondo le proprie esigenze. Comunque, il metodo rimane valido. Si costruisce il cavetto e si provano le resistenze tipiche per ottenere la tal funzione. Se la tensione di 5V scompare e un dispositivo accessorio USB (ovviamente alimentato esternamente) viene correttamente riconosciuto, allora si può ricaricare il telefono / tablet attraverso i pin Vbus (VCC) e GND del connettore microUSB.

Ricordo a chi volesse provare, che un errore significa bruciare il circuito interno, quindi se leggendo queste righe vi è venuta voglia di provare e così facendo rompete il vostro dispositivo (o quello di un imprudente amico che ve l’ha prestato), non venitevi a lamentare con me. Vi metto in guardia: IL DISPOSITIVO SI PUO’ ROMPERE, SE SBAGLIATE QUALCOSA.

Bene, chiudo qui. Il mio phablet mostra il segno di ricarica ( e si ricarica ! ) e contemporaneamente “vede” il circuito esterno come un accessorio USB. Quindi, dal mio circuito al phablet c’è solo un piccolo cavo, che da una parte ha un connettore a vaschetta (tipo IDC) e dall’altro un plug microUSB. Job done.

“Pedrone” Part #4 – drive it using web browser and WiFi

This is the last step. “Pedrone” is now complete. Please, remember that this is just a toy, you can’t use it to discover any sort of life on Mars ! I wrote a small Android application that acts like a mini web-server receiving commands from a standard web browser. I realized a demo video, capturing the screen while driving Pedrone with my web browser (SeaMonkey). Here it is:


pedrone3 di robotop

The Android application is relatively simple. It receives commands as “get” requests and, depending on the parameters, outputs the sound sequence to communicate with the microcontroller. Acting this way, the Pedrone executes the requested movement. After moving, the application takes a picture of the new situation (position) and gives the answer to the browser, that is still waiting. The process is a little bit slow, ‘cause the full path for the command is: 1) you click a “button” on the navigation map on the browser 2) an internet request is sent to the mini webserver 3) the webserver executes the command and send a sound sequence to the microcontroller 4) the microcontroller decodes the command and runs the motors for half second (short move) or one second (long move) 5) the application takes a picture 6) the application sends back an answer to web browser, changing the name of the image to force the browser to reload (no-cache) 7) the browser sends a new “get” to download the updated image. A screenshot of the Android application is here:

Screenshot of the Android App Pedrone-Rx3 (click to enlarge)

Screenshot of the Android App Pedrone-Rx3 (click to enlarge)

If you want, you can freely download and install this App from the Google Play Store.

For the mechanical part, I used the Lego Technic (my “children” have given me when they left university) with addition of some small screws and strong glue to create the adapters from Servo-motors to wheels and from structure to Servo-motors. In the following picture you can see how it was realized.

Three different views of "Pedrone" (click to enlarge)

Three different views of “Pedrone” (click to enlarge)…

The microcontroller circuit is not changed, look at Part #2 for complete schematics. The firmware has some changes. You can download the C source and the compiled HEX packaged in a zip file from the link : pedrone3x.zip ; the password to unzip is : eficara. Remember to set the correct fuses configuration when burning the micro. You can read such configuration in the first lines of the C source file. Here is the full C source list.

Finally, note that you can drive the “Pedrone” on your local net using a PC / Tablet / Smartphone connected on the same WiFi subnet, but you can also control it from everywhere in the world if you set your modem / router with the following rules:
1) force the router to assign a fixed IP to the MAC address of the WiFi interface of the smartphone you use as “receiver”, es: assign local IP 192.168.1.6 to MAC address 11:22:33:AA:BB:CC; this way the “Pedrone” smartphone will have every time the same IP on your local network.
2) modify the router’s firewall rules to accept incoming connections to port 8080, redirecting the requests to the IP assigned to the “receiver” (192.168.1.6 in the example)
3) get a free account on some Dynamic Dns service, as no-ip or dyndns or others and set the relative username and password in the router’s Dynamic Dns settings.
After this, you can reach “Pedrone” from everywhere in the world (if there is an internet connection !) with a standard web browser, writing the address http://my-assigned-dynamic-ip.com:8080 in the navigation bar.

Historical notes:
The idea for this project was born in August 2009, when I was in France for a sabbatic time and my smartphone was equipped with WM6. I realized a circuit and a couple of applications to test the motor driving using DTMF tones. After that, I published a video on YouTube describing the general concept. After some months I removed the video ‘cause Google acquired YouTube. I think that too much power in the hands of a single subject is very dangerous, but now that all the world is fulfilled by Android devices, it’s impossible to stop the “Masters of Universe”… Anyway, the original video is now stored on “DailyMotion”. If you want, take a look here:


dtmf_remote di robotop

“Pedrone” Part #3 – 16 commands using sound protocol

This is the third step. The previous version of the firmware was able to recognize three tones and the demo used a single tone for a unique operation. Now, I used a “protocol” to send multiple tones and create 16 possible commands. I used Audacity, a fantastic sound editor, to create the sound sequences. Here is an example:

The sound file for command 1011

The sound file for command 1011

A “command” is composed by a “start” tone (1200Hz) and four bits starting from the most significative. The “ones” are 1600Hz, while the “zeroes” are 800Hz. In the picture is represented the code 1011. A full “transmission” is always 500mS. Every sound has 50mS duration, followed by 50mS pause. For sound file output, I used the format “ogg” because is compatible with Android and iOS smartphones.

To test the firmware, I wrote a small application on Android smartphone. This is a screenshot of the application running:

Screenshot of Pedrone-Rx2 application

Screenshot of Pedrone-Rx2 application

The three buttons in the middle are just for compatibility with the old version of the firmware, while the cursors at the right and at the left are the controls for the motors. There are five positions for each motor : Fast Forward, Slow Forward, Stop, Slow Backward, Fast Backward. So, at this moment, I used only 10 of the 16 commands available. The App was not published on Play Store because is just for testing purposes, but if you want, you can download it and install from this link: Pedrone-rx2.apk .

The schematic of electronic circuit has not been modified, while the firmware has been improved. If you want to load the C source and the HEX file to burn the micro, both of them are packaged in a zip file that can be downloaded from this link : Pedrone3.zip (use password eficara to unzip) . Here is the full list of the C source file ; the hex comes from compilation with IAR V5.50.0. To burn the micro, use the fuses configuration that is described in the first lines of the C source.

“Pedrone” Part #2 – connecting to smartphone

After the Part #1, with the Servo Motors control program, now I connected a smartphone to the circuit. The software on the phone (in the next future) will do all the Internet job, receiving commands and sending pictures. Anyway, a connection is needed to control the hardware (motors) for moving “Pedrone” via web commands. A very simple solution is to use the headphone jack and send some tones to activate the motors. As first option, I decided for one DTMF tone decoder, but after some considerations, like the absence of noise on direct connection, I decided to use single tones. The hardware is very simple (stereo version is shown, but you just need one channel) :

Particular of the schematic (click to enlarge)

Particular of the schematic (click to enlarge)

This circuit is a mixer of Left and Right audio channels coming from the headphones jack of the smartphone, followed by protection resistor and diodes to safely connect to the ICP1 pin of the micro ATmega48. The ICP1 is the input capture pin of Timer 1 (TMR1). I used such peripheral to measure the period of incoming frequency. There are three frequencies: the first is considered as “start” signal and the other two as “0” and “1”. The protocol isn’t still implemented (will follow soon). At this moment, the test program just recognizes the frequencies and does a programmed action for anyone of them. The frequencies are 800Hz, 1200Hz end 1600Hz. All the tones have 50 mS duration. The complete schematic (including the servo motors outputs) is in the following picture

The complete schematic (a PDF version is in the downloadable project's zip file) - click to enlarge

The complete schematic (a PDF version is in the downloadable project’s zip file) – click to enlarge

If you are interested in the C source list and in the hex file to burn into the micro, you can download both of them (plus the schematic PDF), from this link: Pedrone2.zip
(password for zipped file: eficara)

There is a small video to show the program running. The application for Android smartphone has not been published on Play Store, because it’s just for testing purposes, but if you want you can download the apk directly from this link: Pedrone-rx.apk.


Pedrone part 2 – connecting to smartphone di robotop

Here is the C source list for the test program (compiled with IAR V5.50.0).

“Pedrone” Part #1 – Trimming stop point on modified servo

I am going to build my new “Pedrone” (Pedestrian Drone), a device that can be remotely controlled by smartphone, running at home. I did the same in 1998, now it’s time to make one better. In the picture below, you can see the old model. The internet server was set on the home PC and the data exchange with the rover was done by means of 866 MHz transceivers using half-duplex packets communication. The “camera” was a GameBoy gadget modified for the purpose, giving a fantastic 128*128 pixels gray scale image at every command received from the Internet.

My first Rover, built in 1998, controllable via a standard browser on the Internet.

My first Rover, built in 1998, controllable via a standard browser on the Internet  (click to enlarge)

For the new model, I decided to use a couple of cheap Servo-Motors, purchased on ebay at VERY low price. The servo motors have a good torque and so are very efficient. The second advantage of servo motors is that they just require a single microcontroller output to be driven in both directions. Obviously, a servo motor has to be modified, because its purpose is to move in the arc of 180° (someone more, some other less). I want a continue rotation to drive a wheel in both directions, plus a stop condition. I have written a small test program on Atmel ATmega48 microcontroller to generate a waveform to control the motor, then I have modified the servo substituting the feedback potentiometer with a couple of smd fixed resistors, both of the same value. Connecting the servo to the microcontroller, I had a problem: no one of the values that can be set in pulse width gave a real STOP condition. One value gave slow rotation clockwise, one other slow rotation counterclockwise. This problem can happen if the center tap of the two resistor is not exactly the median point, or because the pulse width is not exactly 1.5 mS or for the combination of the two things. Actually, my solution for controlling 2 motors with a single 8 bit timer (TMR0) using two output compare registers (OCR0A and OCR0B) gives me a step factor of 64 uS on a full range of 256 * 64 uS (the total repetition time is 16.384 mS, that’s inside the specs for servo-motors). The classical 1.5 mS center point can’t be set, cause 1500uS / 64uS is not an integer value (23.4375) and then we have to decide if the center point is 23 (*64uS = 1.472mS) or 24 (*64uS = 1.536mS). In any case the stop position depends upon the feedback supplied to the motor controller by the potentiometer (in our modified servo, the couple of SMD resistors with the same value).  To solve the problem, I decided to use an external multiturn trimmer (in place of the smd resistors) to trim the correct stop point. In the picture below you can see that I connected three wires on the pads where the potentiometer was originally soldered.

Servo circuit. Internal potentiometer has been disconnected

Servo circuit. Internal potentiometer has been disconnected (click to enlarge)

I modified the slot in the plastic cover to have enough space to go out with the 3 additional gray wires, then I soldered a multiturn trimmer to set the stop point. Note that the internal potentiometer was 5KOhm, but I used a 10KOhm trimmer without problems. Anyway, the best solution is to measure the resistance of the original potentiomenter and then buy a 10 turns linear trimmer of such value.

The 10 turn trimmer soldered on gray wires

The 10 turns trimmer soldered on grey wires (click to enlarge)

Finally, I used a biadhesive tape to fix the trimmer on the case of the servo-motor.

Trimmer fixed on the Servo-motor case

Trimmer fixed on the servo-motor case (click to enlarge)

Alternative version: using 2KOhm trimmer, a couple of resistors and a filtering capacitor makes easier setting the stop point.

Modified circuit (1KOhm resistors used, but 1.5K is better) - click to enlarge

Modified circuit (1KOhm resistors used, but 1.5K is better) – click to enlarge

Well, after connecting the servo to the microcontroller prototype board (using a default pulse width for stop position), I rotated the trimmer near its middle position, finding the exact point for motor stop. Actually, with my microcontroller’s test program, the stop point is at value 22, while the full speed in one direction is 15 or 30 in the other.

Driving two modified servos di robotop

My prototype board (the one visible in the video) has this schematic:

Schematic diagram of the prototype (click to enlarge)

Schematic diagram of the prototype (click to enlarge)

The C source file, the HEX object to burn the micro and the schematic in PDF format can be downloaded in the zip file EF190Pedrone.zip (when you unzip it, give password: eficara). Here is the C source listing compiled with IAR V5.50.0.

Constant Current 300mA Led drive with a battery charger

Li-ion battery chargers use the CC/CV algorithm. CC means Constant Current and CV is Constant Voltage. When a battery is under charge, the device supplies a constant current until a threshold voltage is reached (typical 4.2V), then applies a Constant Voltage. When the charging current drops below the 10% of the set value, the battery is disconnected (float). I tried to use a battery charger to light a white led at 300mA constant current. The trick is that the led (obviously) does not recharge, so the charger remains continuously in CC mode, with the current set as programmed.

The prototype working with a power white led

The prototype lights a power white led (click to enlarge)

I built the circuit on a proto board, using a self made adapter for the smd IC TP4056. Note that this IC has a metal pad on the bottom side, for thermal dissipation. I soldered a wire under the chip before placing it onto the adapter. The schematic is very simple:

Hand-made schematic. The IC accepts max 8V in input. I used 6.2V supply (click to enlarge)

Hand-made schematic. The IC accepts from 4 to 8V as input. I used a 6Volts battery for the test (click to enlarge)

Detail of the prototype board :

The prototype. Note the wire that comes out from the bottom side of the IC (click to enlarge)

The prototype. Note the wire that comes out from the bottom side of the IC and the metallic stripe used for thermal dissipation (click to enlarge)

Now it’s time to test. I used a trimmer for setting the value of charging current. For 300mA the value must be 4K Ohm. If you don’t want to use a trimmer, such non-standard value can be obtained paralleling two resistors: 10K and 6.8K (the result is 4.04K). The image below shows the current measured with a multimeter.

Led ON, driven with 300mA current (click to enlarge)

Led ON, driven with 300mA current (click to enlarge)

Note the 1N5819 diode at the charger output. This is important. The white led I used has a typical Forward Voltage of 3.42 Volts and if you connect it directly to the BAT signal of the IC (pin 5) the charge does not start. You will have a current that is the 10% of your settings, so about 30mA. The IC “starts” if there is a voltage near 3.7V ; the diode 1N5819 has about 0.35V voltage drop at 300mA, so 3.42V of led plus 0.35V of diode makes 3.77V and the circuit start “charging” at 300mA. I also tested one commercial board I purchased some time ago on ebay. I just modified the charge set resistor and added the diode at the output. Please note that if you set higher currents, the IC will be hot. I don’t recommend current values higher than 300mA, without any thermal dissipation. This IC is not made to be a led driver. For professional results, use one made for that purpose.

test with a commercial board (click to enlarge)

test with a commercial board (click to enlarge)

Here is a table for values of resistor to set a specific current and the position of such resistor on the circuit.

Change the circled resistor to modify the charging current (click to enlarge)

Change the circled resistor to modify the charging current (click to enlarge)

Single 3.7V Li-ion cell battery back-up for Raspberry Pi

 I have a small application continuously running on Raspberry Pi board. Sometimes, in my country, we have (short time) mains power failures. In such situation, my Raspberry board, powered by the wall adapter, turns off immediatly, without any attention for open files, transmissions in act, etcetera. This is really a problem. I decided to use some materials purchased in the past on ebay to realize a small power back-up unit, using a single Li-ion cell. First of all, you need for a battery charger circuit, to maintain the back-up battery fully charged. The battery is 3.7V typical, and 4.2V when fully charged, but the Raspberry Pi board wants 5V supply, so we need for a Step-Up circuit. As third element, we need for a switch that disconnects the load from battery when mains supply is present, ‘cause the charger can’t see the real battery level if you connect a load while charging. I suggest to read this document released from Microchip: AN1149.

circuit-view

The prototype (click to enlarge)

The charger can be easily found on ebay searching for “1A Li-ion battery charger”. It’s based on well known chip named TP4056. In the picture there is a circle indicating Rchg. The component circled is the charge resistor. The value of such resistor sets the charging current. In the original circuit, the value of Rchg was 1K2 (smd mark 122) that sets 1A charge current. I removed such resistor and placed a new one with value 3K3 (smd mark 332). With this resistor, the charging current will be about 370 mA. I don’t want to charge the battery at higher rate for two reasons: the first is the capacity of the cell (I used a small one), the second is that the wall adapter MUST have enough current to drive the charger AND the Raspberry Pi board. In the next picture you can see three different situations:

Charge / discharge steps (click to enlarge)

Charge / discharge steps (click to enlarge)

Starting from the left, you can see the circuit connected to the wall adapter and the battery charging (red led ON), then the battery fully charged (blue led ON), then the wall adapter has been removed (both leds OFF). Note that the multimeter measures 5.13V in all cases.

The step-up module can be found with a search on ebay, looking for step-up regulator with variable voltage (mine is based on recent XL6009 chip). The XL6009 regulator is rated for Vin_min = 5V, but I tested that works with 3.5V. For best operative conditions, look for a step-up module that mounts an LM2577S-ADJ chip, that is rated for Vin_min = 3.5V. Note that you must trim the variable resistor to have 5V output. Please, connect a 1K resistor as load to the output when setting the Vout, ‘cause there is a capacitor that remains charged when you turn the trimmer decreasing the output voltage. After setting, remove the load resistor.

The switch element cannot be purchased on ebay (sorry) and you must build it by yourself. I started from the circuit proposed in the Microchip’s application note and just modified something. For the P-channel mosfet, I used a free sample received from NXP: the PMV48XP. This SOT23 mosfet is very small (look at the picture “The SWITCH”), but it’s really powerful. I used two 1N5819 Schottky diodes (not one) to reduce the voltage drop and increase the current. The circuit is very simple:

The Switch (click to enlarge)

And finally, look at the next picture. The circuit is connected to my Raspberry Pi board. In the animation you can see that the board doesn’t turn off when the wall adapter is disconnected. The time of back-up depends from the capacity of the cell that you use. Remember that the current drawn from the battery (when wall adaptor is disconnected) is the nominal current of the Raspberry Pi board multiplied for the efficiency of the step-up in converting from Vbat  to 5V.

Conenctin and disconnecting the wall adapter (click to enlarge and animate)

Connecting and disconnecting the wall adapter (click to enlarge and animate)

Test report
Test conditions: battery fully charged, Raspberry Pi running Raspbian Wheezy and connected to HDMI monitor and to USB interface for RF keyboard and mouse. No other applications running, just the desktop and the default services. I disconnected the wall adapter exactly at 17:17 .
Test results: the battery discharged from 4.2V to 3.7V (about 20% of residual charge) at 18:18, so in about 1 hour.

Please, note that a 3.7V cell must never be fully discharged. If the cell goes below 2.2V, it will probably not recharge anymore. If the cell is “protected”, probably has an electronic switch that disconnects the battery itself from the load when such limit is reached, but if it is a “pure” cell, you must avoid the undervoltage condition.

Questions and answers:

Email – 06/03/2016 – 15:26 from Max:

I am using the same TP4056 charger as you, just with a 240mah lipo battery (with built in protection circuit)
I want to do more or less that you are describing, but power outages are very rare where i live. will it potentially harm the battery that it will be kept fully charged all the time?

The charging IC “disconnects” or “floats” the battery at the end of the CC/CV cycle, so when 4.2V is reached and the current flowing into the battery is less than C/10, where C is the current programmed via the R_chrg resistor. If you use 240 mA battery, modify the standard R_chrg on your TP4056 charger circuit in order to set the charge current to about 120 mA (battery C/2).

I am still very new to selecting more advanced components, but will i be able to use an AO3401 mosfet (http://www.aosmd.com/pdfs/datasheet/AO3401.pdf) instead of your example?
I can see that the GATE voltage is rated at +-12v which is the same as the PMV48XP, but the AO3401 is rated at 30v/4A and i dont really know what other characteristics is important to selecting the right mosfet?

I looked at the AO3401 datasheet and it seems to be right for this use.

Also, this might seem a bit stupid, but i dont understand why you use 2 diodes. Is the reason that they both have a inner resistance and putting them in parallel basically halves this resistance? Could you just have selected another diode ? And since i am using a small 240mah battery should i still use two diodes? (i see that the AN1149 document mentions a lower voltage as a positive, so i am guessing that low drop is always good here)

You are right, I used two low-drop Schottky diodes to obtain a “very-low-drop” diode. If you have a “natural born” very-low-drop diode, you can use just one.

Spread your meteo sensor data over the internet

I published on the Italian Magazine for Electronics “CQ Elettronica” (issue N.485 September 2007) an article about my project based on Atmel ATtiny2313 microcontroller that converts the RF data stream (OOK modulation at 433 MHz) received from Oregon Scientific meteo sensor model THGR228NF (look at this link for more details).  This device was also revised by Hack-a-day in September 2007.

Recently, I created an Android App to display the received data on a tablet or a smartphone, using an USB-Serial interface to connect the receiver to the device. You can find the App on my page on Google Play Store and more informations at this link.

After the first version, I created a new one that uses a PIR sensor (Passive InfraRed) to swap the screen from a flip-clock to the meteo data screen when a person passes near the box. This is the prototype:

App in funzione su tablet 800x480 scala=1

Prototype running on 800 x 480 display 6.5″ Phablet

Well, after that I had the idea to publish my webcam on the Internet, superimposing over the picture (taken every 20 minutes) the meteo data received from the Oregon Scientific meteo sensor. This will enhance the picture with useful meteo data. Here is an example of what you can see clicking my webcam link :

webpic

click to reload actual view

As you can see, at the bottom of the image there are two information lines. Such lines are created by a PHP script that I stored on the server. The first line is the date and time of the picture, while the second is the date and time of the meteo informations (sent every 10 minutes), together with the temperature and humidity at the specific time.

The picture sent by the webcam hasn’t any information, being the camera a very simple device (look below how simple is..)

very home made webcam (click to enlarge)

very home made webcam (click to enlarge)

The bridge from the meteo receiver to the second line of picture is a new App written for an old 7″ tablet, running Android 2.2. This App does what the previous did, but every 10 minutes sends an HTTP GET request to a specific PHP script that I saved on the server. This GET request is formatted with a simple crypting and contains the temperature and humidity read from the sensor. The PHP script on the server receives the meteo data and creates a file with such infos. When the user clicks the link of my webcam, the PHP script loads the picture received from the webcam and the meteo data received from the tablet and creates on-the-fly the image you receive on your browser. Obviously, the tablet running the App connects to the Internet thru the home modem / router that acts as a WiFi hotspot.

I haven’t published this App on Google Play ‘cause I decided to use, as communication port, the internal ttyS0 of the tablet. Such communication port was present in almost all the first models of tablets, but was used by the system for the “console” service. I modified the init.rc file of my rooted tablet (running Uberoid image) in order to disable the console service on that port, so I connected my RX-Met1 receiver directly to ttyS0 without any USB-Serial interface. This approach is too “specialistic” and therefore isn’t idoneous to the Play Store distribution. I just added a small video to show how I arranged the old tablet in a box with the receiver and the PIR sensor… (Dailymotion video)


MeteoRx22 di robotop

This way of sending sensor data over the Internet can be easily achieved with new low-cost modules, like ESP8266 that gives you the power of WiFi at very low price, with extreme easy of use.