Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

RecyClock

Più che la descrizione del progetto, quella che segue è la cronaca di questa eccitante giornata.

Certamente avremmo preferito un epilogo diverso, ma è universalmente noto che la legge di Murphy è spietatamente infallibile...

L'approccio

Partiamo dall'inizio: cosa fare avendo tra le mani una scheda Arduino, qualche strumento elettronico, breadboard, saldatori ed un ammasso semi-informe di "ciarpame" elettronico?

Beh, anzitutto modificare una delle premesse: immaginare e supporre che ciò che avevamo davanti non fosse "ciarpame" inutilizzabile, ma che la maggior parte del materiale fosse ancora funzionante!

Dall'ammasso abbiamo estratto:

  • un lettore CD della seconda metà degli anni '90
  • una stampante ad aghi all'incirca dello stesso periodo
  • un piccolo monitor per la videosorveglianza, probabilmente risalente ai primi anni '90

Inizialmente del lettore CD pensavamo di riusare il display, ma, oltre ad essere un display a fluorescenza, non abbiamo trovato nessun datasheet nè del display (probabilmente un componente custom) nè del controller, per cui abbiamo abbandonato questa strada.

Poi ci siamo detti: abbiamo una stampante ad aghi che dovrebbe essere ancora di quelle compatibili ESC/P2 che ha sia la classica interfaccia Centronics, sia, soprattutto, una seriale RS232, "pilotabilissima" da Arduino.

La stampante avremmo potuto usarla sia per stampare qualcosa all'ora impostata, sia per "fare rumore" con i motori e/o la testina, sia per usare il carrello della testina per muovere una ventola a cui collegare meccanicamente qualcosa per produrre un suono.

Ci siamo quindi procurati il cavo per la 220V dal Fablab e… perfetto, la stampante funziona! Ma quanto ci sarebbe costato in temini di tempo pilotarla correttamente? Forse troppo, per cui abbiamo valutato una terza opzione: il monitor.

Anche in questo caso la prima cosa da verificare era il corretto funzionamento: luminosità e contrasto al massimo, spina inserita e… funziona!

Al volo abbiamo assemblato il partitore resistivo per il collegamento all'Arduino, scaricato la libreria TVout e lanciato uno sketch demo: quando un cubo rotante è apparso sullo schermo abbiamo capito che avremmo seguito questa strada!

Dal lettore CD abbiamo poi recuperato l'alimentatore ed una piccola pulsantiera resistor ladder, e dall'ammasso alcune ventole.

Le specifiche

La nostra sveglia avrebbe quindi avuto le seguenti caratteristiche:

  • RTC come da requisiti, ma con in più una batteria di backup al litio (3V, ancora carica) recuperata dall'ammasso (in particolare da una scheda RAM di una fotocopiatrice… allora le memorie flash sostanzialmente non esistevano o era troppo costoso usarle per queste applicazioni, oltre a non avere la capienza che hanno oggi)
  • display su monitor (eventualmente acceso da Arduino all'ora impostata tramite un relè che avevamo recuperato dall'ammasso) per la visualizzazione dell'ora, di eventuali messaggi (l'oroscopo del giorno…) e l'impostazione della sveglia
  • interfaccia utente composta dal suddetto monitor e da una pulsantiera recuperata
  • dispositivo sonoro basato su una ventola con una linguetta di plastica che, urtando contro le palette, produce rumore (come le carte da gioco attaccate alla forcella di una bicicletta fanno rumore urtando contro i raggi), pilotata in PWM da Arduino per tentare di generare almeno qualche nota.

Del riuso e del riciclaggio

Il passo successivo è stata la valutazione di cosa potevamo riusare in termini di codice:

  • la libreria per la gestione del chip RTC, indicata tra i requisiti
  • la libreria TVout
  • uno sketch di esempio per l'utilizzo di una tastiera resistor ladder completo di debounce (già utilizzato in passato da uno di noi)
  • uno sketch per la visualizzazione tramite TVout di un quadrante di orologio con lancette sul monitor... ma cercando velocemente su Internet non abbiamo trovato nulla che potesse adattarsi allo scopo

Per cui ci siamo suddivisi il lavoro in questo modo:

  • sviluppo dello sketch per la visualizzazione del quadrante con le lancette
  • sviluppo dello sketch per l'interazione con il chip RTC ed adeguamento del codice per la lettura del tastierino numerico
  • montaggio meccanico della ventola e della linguetta di plastica all'interno del case del lettore CD; montaggio meccanico di tutti i circuiti all'interno del case
  • assemblaggio dei circuiti per l'uso della batteria di backup e del driver per la ventola e sviluppo di un piccolo sketch per la generazione di una "melodia" (si fa per dire…)

Backup e suono

Verificando il datasheet del PCF8563 ci siamo accorti che questo chip non ha un ingresso dedicato per la batteria di backup, ma in compenso ha un range molto esteso della tensione di alimentazione, per cui abbiamo realizzato questo semplicissimo circuito:

...inserire immagine con schema circuito di backup...

In sostanza, quando Arduino è alimentata, la corrente viene prelevata attraverso D1 e D2 è interdetto, mentre quando Arduino è spenta D2 entra in conduzione e D1 impedisce alla batteria di alimentare anche Arduino. Con Arduino spenta la tensione misurata sul chip è di 2,4V. Naturalmente anche i due diodi sono stati recuperati.

Poi ci siamo occupati della ventola: abbiamo trovato solo ventole a 24V, per cui avevamo due possibilità

  • alimentarle comunque a 5V sperando un una copia sufficiente
  • recuperare un alimentatore e costruire un driver di potenza

Abbiamo comunque provato la ventola a 5V, ma "ad occhio" non sembrava essere sufficientemente potente, per cui siamo partiti alla ricerca di un alimentatore: abbiamo recuperato quello del lettore CD, ma con un po' di lavoro.

Misurando i secondari (due) solo uno erogava a vuoto una tensione apparentemente sufficiente di 17V. Per evitare di assemblare al volo un ponte di diodi o di usare semplicemente una tensione raddrizzata, abbiamo "recuperato" una sezione di raddrizzamento/filtro dalla piastra del lettore CD in questo modo:

  • abbiamo individuato i contatti di ingresso al ponte e, riutilizzando il connettore esistente, abbiamo modificato le connessioni verso il trasformatore in modo da usare il secondario corretto
  • abbiamo preferito sostituire il condensatore elettrolitico da 3300uF in quanto i 25V di targa non ci sembravano sufficienti (ne abbiamo recuperato uno della stessa capacità, ma da 35V, da un'altra scheda di alimentazione)
  • abbiamo tagliato le piste a valle del condensatore in modo da non alimentare il resto del vecchio circuito del lettore CD

Dando tensione abbiamo misurato ai capi del condensatore 30V a vuoto (meno male che l'abbiamo sostituito…) e circa 17V con la ventola collegata: abbiamo deciso che il compromesso raggiunto era ragionevole e siamo passati alla realizzazione del driver per la ventola.

Tra le ventole disponibili (tre) abbiamo scelto le più grandi (due) ed in particolare (essendo della stessa marca, modello simile) quella che assobiva di più ipotizzando una coppia erogata più elevata: avendo un alimentatore dedicato ce lo potevamo permettere.

Trovare per il driver un mosfet di potenza pilotabile direttamente a livello logico poteva essere un'impresa in materiale così datato, ma con un pizzico di fortuna abbiamo invece trovato subito un BJT NPN di potenza (2SC3832) che, analizzando il datasheet, andava bene, ma proprio al pelo: con un beta minimo garantito di 10 non si riescono a fare miracoli, ma sfruttando le capacità di erogazione in corrente delle porte di Arduino e sfruttando il fatto che dovevamo pilotare un carico di circa 150mA, con una resistenza di base di 220Ohm potevamo risolvere il problema senza dover realizzare un darlington, ed in effetti il tutto ha funzionato abbastanza bene.

...inserire immagine con schema circuito driver...

Modificando al volo uno degli sketch di esempio di Arduino abbiamo poi messo a punto la melodia (4 note…).

Il case

Riutilizzare l'involucro vuoto del lettore CD è stata la scelta più logica.

Sfruttando l'opportunità di avere due ventole meccanicamente identiche, il lavoro di posizionamento della ventola all'interno del case e della linguetta per la produzione del rumore ha proceduto in parallelo rispetto alla costruzione di alimentatore e driver e test elettrico generale.

Abbiamo montato la linguetta in plastica sulla ventola tramite una sottile linguetta di metallo (entrambe rigorosamente recuperate) in modo da poter regolare agevolmente la forza esercitata sulle palette.

Successivamente, recuperando alcuni distanziatori plastici per circuiti stampati, è stata montata la scheda dell'alimentatore all'interno del case.

Con il case avanzato dallo smembramento di una stampante inkjet abbiamo realizzato velocemente un guscio completamente chiuso al cui interno abbiamo montato il trasformatore: mai sottovalutare i rischi connessi all'uso della tensione di rete!!! Il case è stato tagliato a misura in modo da rientrare comodamente all'interno del case del lettore CD una volta chiuso, ed in modo da contenere agevolmente il trasformatore.

Sfruttando poi alcuni fori presenti sull'aletta del transistor di potenza, quest'ultimo è stato montato sulla ventola in modo da sfruttarne il flusso d'aria (in realtà non ce n'era bisogno, ma faceva un po' di scena…).

Al fondo del case, su un lato, abbiamo poi montato un ulteriore pannellino di plastica recuperato, in modo da mantenere la scheda Arduino isolata dal metallo.

RTC e pulsantiera

Montaggio del chip su breadboard, importazione della libreria e sviluppo di un primo sketch minimale di prova, upload e… non funziona… cominciamo bene… Per fortuna troviamo in tempi rapidi il problema: il più classico degli errori, l'inversione delle linee di clock e dati del bus I2C.

Ripristinato il collegamento corretto procediamo con ulteriori test di impostazione e lettura dell'ora: tutto OK! Colleghiamo quindi il circuito con la batteria di backup, impostiamo l'ora, spegniamo Arduino, riaccendiamo e "magicamente" l'ora è stata mantenuta.

Bene, dopo aver definito la modalità di interazione dell'utente, procediamo con l'adeguamento del codice per la lettura della pulsantiera alle necessità della nostra interfaccia, poi facciamo un primo test con la pulsantiera collegata… niente: i valori letti in dall'ingresso analogico erano sempre e solo o 0 o 1023…

Mmmmm, vediamo un po' come è fatta sta pulsantiera: sicuramente tutti i pulsanti hanno un lato che è collegato insieme, quindi quella è per forza l'uscita, poi c'è la scala dei resistori collegati in serie, ma ad occhio alcune cose non tornano; potevamo tracciare su carta lo schema, ma un po' di tempo ci sarebbe voluto, per cui abbiamo deciso di procedere in modo più empirico.

Ohmetro alla mano, abbiamo misurato la resistenza tra l'uscita e ciascuno degli altri due cavi: vedendo come cambiava la resistenza abbiamo supposto che non avessimo tra le mani un partitore completo, per cui abbiamo aggiunto un resistore esterno di pull-up e, ricollegato il tutto… bingo, ciascun pulsante aveva il suo bel valore distinto: non restava che adeguare il codice dell'interfaccia ai valori letti ed il gioco era fatto.

Il display

Dapprima abbiamo fatto una veloce valutazione delle capacità della libreria TVout: abbiamo provato vari font (scegliendo poi il più grande disponibile) e le primitive grafiche.

Abbiamo poi iniziato a definire la dimensione del quadrante ed a sviluppare il codice per il tracciamento delle lancette. In più, in seguito ad un'osservazione di Davide, ci siamo assicurati che fosse possibile visualizzare contemporaneamente grafica e testo in modo da realizzare il quadrante con le sole lancette e, al di sotto, l'orario in formato numerico, iniziando a scrivere il valore dei secondi corrispondente alla posizione della lancetta sul quadrante.

Una volta messo a punto il funzionamento della lancetta dei secondi abbiamo iniziato ad integrare il codice per la gestione di RTC e tastierino, ma...

I 90 minuti di Murphy

Domenica 17 giugno 2012, ore 15:30, due ore al termine della competizione, temperatura 35°C, umidità 87%. In questo scenario pre-estivo fa il suo ingresso in scena il quinto membro della squadra: Murphy!

… upload terminato, occhi puntati sul monitor e… schermo bianco e desolatamente vuoto!

Fino a quel punto avevamo usato due Arduino UNO diverse con due PC diversi per avanzare in parallelo con lo sviluppo del codice, e ci eravamo già posti il problema della capienza una volta che avessimo unito il tutto, quindi la prima ipotesi è stata: "L'Arduino UNO non è sufficiente, ci serve una Mega".

Abbiamo recuperato una prima scheda; il proprietario ci ha però avvertito che probabilmente non funzionava, infatti dopo 10 minuti stava andando arrosto, per cui ne abbiamo recuperata un'altra funzionante.

Le svariate prove non hanno portato a nessun risultato, per cui alla fine abbiamo ipotizzato una qualche incompatibilità tra la libreria TVout e quella per la gestione del RTC; una conferma indiretta l'abbiamo avuta nel momento in cui abbiamo eliminato temporaneamente il codice per la comunicazione con l'RTC: da quel momento anche la Mega ha iniziato a pilotare correttamente il monitor.

Era anche possibile che ci fosse qualche problema dovuto al modo in cui inizializzavamo il tutto, ma a 30 minuti dalla fine non c'era più tempo per fare altri tentativi: dovevamo prendere una decisione!

L'epilogo

Cosa fare? Dopo una breve discussione la cosa più logica da fare ci è sembrata quella di dimostrare il funzionamento di quanto avevamo fatto fino a quel momento, per cui:

  • una Arduino UNO che pilota il monitor facendo avanzare la lancetta dei secondi e stampandone il valore
  • un'altra Arduino UNO collegata al RTC che, allo scadere delle 17:30, pilotasse la ventola per generare la melodia (ignorando quindi la possibilità di impostare l'orario da tastierino, non avendo il feedback visivo)

Abbiamo quindi rifatto l'upload del codice con il TVout su una Arduino UNO, abbiamo integrato il codice per la generazione della melodia nello sketch dell'altra Arduino UNO, impostato il controllo dell'ora, avviato l'upload e…

Nel frattempo Murphy, che alle 17:00 si era assentato per un'impellente necessità personale, ricompare sulla scena.

… nulla: c'è qualche incompatibilità tra il driver di quel PC e quella scheda Arduino UNO che in precedenza era stata programmata con l'altro PC.

Mentre decidevamo il da farsi, una voce mediata da un gracchiante megafono urlava: "Fine della prova, posate i saldatori, che le sveglie suonino!"

Il resto è storia…

Una sola domanda resta alla fine di questa esperienza: ma chi l'ha fatto entrare in squadra sto Murphy?


Note a margine

…inserire le altre foto…