Visualizzazione post con etichetta seriale. Mostra tutti i post
Visualizzazione post con etichetta seriale. Mostra tutti i post

lunedì 12 gennaio 2015

Si ricomincia!

Eccomi quà, di nuovo in forma!
E' riiniziata la scuola, sono passate le vacanze di natale...
Approposito... Buon anno!

Di recente mi sono messo a partecipare un po' alle discussioni sul forum di arduino nella sezione italiana e indovinate un po'... Il mio codice che avevo lasciato tempo fa è servito! :D

In realtà l'ho modificato un po' perchè serviva solo per il seriale, niente LCD, quindi l'ho ridotto e migliorato!

Tutto quà. Non è molto diverso e l'ho commentato il più possibile!
Alla prossima!

lunedì 23 giugno 2014

Altri arrivi!

Proseguendo il precedente post..

Avevo richiesto dei campioni dalla Linear che sono estremamente piccoli e non credo che dalla foto si vedano nemmeno, ma sono lunghi circa 3mm...
 E infine sono arrivati dei jumper aggiuntivi, qualche resistenza e un convertitore USB -> TTL che sfortunatamente non è compatibile con Windows 8...

Beh, cercherò un modo per utilizzarlo, ma d'ora in avanti comprerò solo quelli che contengono l' FT232RL che è il "vecchio amico" dell'Arduino AKA Arduino duemilanove/diecimila

mercoledì 4 giugno 2014

SSD1306: Realtà!

Finalmente funziona!
Che bello! Dopo una giornata intera di ricerche sono riuscito a trovare una specie di datasheet per il mio OLED da 128 x 64 pixel che ha i collegamenti fatti per vari tipi di connessioni...

Il venditore da cui l'ho acquistato non ha ancora risposto alla mia mail per la richiesta del datasheet della scheda, ma ormai non serve più!

Se vi serve, ecco lo schema; per sicurezza ho salvato l'immagine e ve la lascio quà:

Per il resto, se vi interessa, la libreria che sto usando è quella di Adafruit, ma credo la cambierò perchè è ESTREMAMENTE grande: su un UNO di circa 32 mila bytes me ne occupa 20 (mila)!

Sono anche riuscito a far funzionare gli NRF24L01+ e da qualche primo test con la famigerata (e perfetta, anche se un po' grande) libreria di Maniacbug (RF24) ho capito che ho acquistato i moduli giusti: sono velocissimi!

Nel frattempo, mentre cerco di far funzionare il modulo per l'audio, la stampante 3D si dà da fare!

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!