venerdì 30 maggio 2014

E' ora di rispolverare il codice!

Funziona!
Mi ricordo che quando lo portai a scuola i miei compagni mi chiesero se era una bomba... io gli risposi (ovviamente) di no, ma che quella l'avrei portata la settimana successiva.
Anche se poi non l'ho fatto... ma la tentazione era forte
NOTA: il codice è stato aggiornato. Se vuoi vedere la versione a cui si riferisce questo post vai quì

Iniziamo ad osservare il codice.
All'inizio, come è solito fare includo le librerie che uso; in questo caso solo la liquid crystal è necessaria.
L'LCD si trova collegato sui pin 7, 8, 9, 10, 11, 12.
Con delle variabili indichiamo i pin dei sensori analogici, con mis indico un numero di cicli dopo il quale aggiorniamo i valori delle letture (così da non aggiornare troppo spesso l'LCD che altrimenti diventa illeggibile)
vrif è una variabile che utilizziamo per indicare il voltaggio di riferimento (1.1 V è perfetto perchè molto preciso). Più avanti vedremo dove è stato impostato il valore esterno.
Se vi chiedete a cosa serve un array di byte, vi consiglio di andarvi a vedere la libreria Liquid Crystal; è molto utile per creare caratteri che non esistono. Un tool online per disegnare questi caratteri su schermi con "quadretti" da 5*7 pixel o 5*8 è su questo sito. Mi è stata molto utile varie volte. (il segno del grado non esiste infatti!)
Vedremo più avanti come stampare un carattere creato da noi sull'LCD.

Passiamo al setup.
Il pin 13, dato che a me dà fastidio tenerlo sempre acceso, lo spengo fin dall'inizio del setup.
Ecco: analogReference(INTERNAL); serve per impostare il tipo di riferimento per il voltaggio analogico interno. Vi sono vari valori che possiamo impostare:
  • DEFAULT: viene impostato il valore di base: 5V per le schede arduino a 5V e 3.3 per quelle a 3.3V
  • INTERNAL: è una riferimento interna, equivalente a 1.1V sull' ATmega168 o ATmega328 (Arduino UNO e MICRO) and 2.56V sull' ATmega8. Non si può utilizzare questo parametro su un arduino MEGA (ATmega2560 o 1280)
  • INTERNAL1V1: riferimento a 1.1V SOLO per il MEGA
  • INTERNAL2V56: riferimento a 2.56V SOLO per il MEGA
  • EXTERNAL: il voltaggio applicato al pin AREF ( solo da 0 a 5V ) è utilizzato come riferimento. 
 Bisogna fare attenzione, come è scritto sulla pagina della funzione, dato che:
  1. Dopo aver cambiato il riferimento i primi valori restituiti da analogRead() potrebbero essere "sporchi"
  2. Se colleghiamo il pin AREF a un voltaggio di riferimento e poi non impostiamo l'analog reference ( prima di utilizzare analogRead() ) o passiamo per il pin un voltaggio superiore a 5 volt o inferiore a 0 volt, manderemo in corto l'AREF e il riferimento interno attivo, danneggiando irreparabilmente il vostro processore.
Inoltre dobbiamo fare attenzione che, dato che all'interno il pin AREF è collegato al processore attraverso una resistenza da 32K, il voltaggio che verrà utilizzato come riferimento sarà leggermente più basso. Ecco un calcolo di esempio:
Se applichiamo 2.5V all'AREF, 2.5 * 32 / (32 + 5) = ~2.2V che il processore riceverà.

Continuando
A questo punto finiamo la funzione setup stampando alcune cose a schermo in seriale (dopo aver utilizzato Serial.begin(baudrate) ) e sull'LCD (indicando la dimensione, prima delle colonne, 20, e poi delle righe, 4).

Il void loop()

Innanzitutto incrementiamo il contatore delle misurazioni ( mis++ ) e poi aggiungiamo alle attuali letture salvate nelle variabili media1 e media2 i valori conversi in gradi Celsius attraverso l'utilissima funzione readTemp() che accetta come parametro il valore del pin analogico che si vuole analizzare.

Analizziamo quindi la funzione: 
il calcolo è semplice: moltiplichiamo 100 per il valore di riferimento e per una lettura analogica del sensore. Il tutto poi è diviso per 1024, il valore massimo + 1 leggibile da un processore dell'UNO (il DUE può dare il doppio della precisione, 2048 - 1 valori. -1 per includere lo 0)

Se abbiamo effettuato 5 letture, dividiamo i valori per 5 per effettuare la media; dopodichè li stampiamo sull'LCD e in Seriale se  è collegato.

Non dimentichiamo di resettare mis e le medie dei valori.

Tutto quà, non era neanche troppo lungo :)

Spero che vi sia interessato; non sapete quanto tempo mi ci è voluto per ridocumentare tutto x)
Il codice che lascio quà sopra è utilizzabile da chiunque; basta che non sia per opere commerciali, che per definirlo proprio abbiate apportato modifiche grosse allo sketch e che lo condividiate in rete con gli stessi termini.

Alla prossima con un nuovo progetto!

Il termometro "tascabile"


L'estate scorsa avevo in mente un piccolo progetto per una specie di condizionatore, utilizzando una cella di peltier (è una piccola cella che se viene alimentata da una parte diventa bollente e dall'altra freddissima) e un sensore di temperatura della Texas Instruments, molto noto con il nome di LM35.
Il tutto controllato da Arduino (ovviamente)

Quei piccoli sensori, che assomigliano ad un transistor BC337 o B331 di quelli piccoli e neri, sono leggermente costosi e, dato che qua ad Asti c'è un solo negozio che fornisce vari componenti di elettronica (ma non moltissimi) e i prezzi sono leggermente alti, ho tentato di richiedere qualche campione gratuito dalla gentilissima TI che in una settimana dal Nevada ha spedito fin qua 6 LM35...
Vi consiglio di provare a richiedere qualche campione, sono molto gentili e non si fanno molte domande (eccetto se i componenti sono indicati come "ad uso militare"; in quel caso non ve li danno se non avete un'azienda), quindi è un ottimo modo per avere qualche integrato o componente gratis...

Iniziamo parlando del sensore

E' piuttosto semplice: ha 3 pin; uno è per l'alimentazione a 5V DC, quello centrale è per l'output analogico che indica la temperatura da circa 5° C fino a 150° (non mi fiderei moltissimo a metterlo in formo però), l'ultimo è da collegare alla terra.
Quindi l'output che può dare è da circa 0V fino a 5.

Ne ho utilizzati due per poter avere una misurazione più accurata, ma non è il momento giusto per parlarne.

 Vicino ho anche aggiunto uno schermo LCD 20 x 4 per poter avere varie informazioni sulle letture.
Da solo l'LCD si mangia 6 pin digitali, senza contare i cavi aggiuntivi per poterlo alimentare e per regolare correttamente il contrasto e la luminosità. Due pin analogici sono stati usati per leggere il voltaggio del pin centrale dei due LM35.
Nel prossimo post vedremo il programma!

Iniziamo!

Oggi sono andato finalmente ap rendere Mario Kart 8 dal Gamestop...
Che divertimento! Il gioco fin da subito si presenta veloce e molto bello, anche graficamente

Non sono quì però per parlare di Nintendo (o forse sì?) ma per inziare un nuovo blog che cercherò di aggiornare il più possibile per tenere aggiornato chi si interessa di elettronica, Arduino, stampanti 3D, giochi, su quello che sto facendo e sui miei progetti o di quelli con su cui sto lavorando insieme degli amici.

Presto le prime informazioni su qualche progettino che avevo fatto un po' di tempo fa, per iniziare!