lunedì 13 febbraio 2012

tra "breadboard" e "sensor-shield".

Quando si ha a che fare con sensori ed attuatori, prima o poi bisogna fare i conti con problematiche legate in maniera particolare all'elettronica.
La classica situazione di sviluppo hardware/software prevede l'utilizzo di una basetta sperimentale chiamata più comunemente "breadboard" (per maggiori informazioni: http://it.wikipedia.org/wiki/Breadboard ed anche http://www.peduto.it/UsoBreadBoard/uso_breadboard.htm). Tale oggetto permette di realizzare dei circuiti di prova, inserendo i componenti all'interno di opportuni fori, senza effettuare saldature; tali circuiti possono essere collegati con la scheda Arduino sempre per mezzo di spezzoni di filo rigido come in figura:

Su tali schede è possibile realizzare qualsivoglia circuito collegando, se necessario anche più breadboard assieme.

Se la vostra passione è l'elettronica e desiderate anche un editor grafico consiglio di usare Fritzing (http://fritzing.org/) un software open source che permette, in maniera molto intuitiva, di disegnare, catalogare e ottenere la lista dei componenti dei nostri circuiti (purtroppo non è un simulatore):


Tuttavia esistono degli shield, ossia una schede che si connettono (agganciandosi) con la nostra scheda arduino, che ci permettono di disporre di una serie di sensori ed attuatori in cui sono state già risolte a livello di circuito le problematiche relative alla gestione elettronica del dispositivo (pre-amplificazione, rejiezione del modo comune, etc...).
Io ho scelto di utilizzare il sensor shield di tinkerkit (http://store.arduino.cc/it/index.php?main_page=product_info&cPath=16&products_id=89&language=it)


Eccola dopo averla agganciata al mio arduino:

Tale scheda dispone di tutta una serie di sensori ed attuatori già pronti all'uso, basta solo scegliere a quale porta collegarli e scrivere il codice necessario e il gioco è fatto!... Insomma, l'ideale per chi vuole iniziare a fare da subito qualcosa di interessante.

Per il momento è tutto, non voglio mettere troppa carne al fuoco, la prossima volta vedremo un altro esempio pratico.

A presto.






venerdì 3 febbraio 2012

Dal 'blinking' al 'fading'

La volta scorsa abbiamo visto come fare lampeggiare (blinking) un led con arduino, acceso/spento (1/0) sono il fondamento della logica "binaria" o "digitale"; una uscita digitale può generare solo questi due livelli che nel caso di arduino corrispondono alle tensioni +3.3V e 0V (per approfondimenti sulle "famiglie logiche" e i vari livelli di tensioni vedere: http://it.wikipedia.org/wiki/Famiglia_logica ).

  Fornendo al led delle tensioni intermedie via via crescenti: 0V, 0.1V, 0.2V,... o decrescenti (3.3V, 3.2V, 3.1V,...) è possibile creare un effetto di accensione e spegnimento più "morbido" (fading).
  Per fare questo è necessario però utilizzare una uscita ANALOGICA, ossia capace di gestire i diversi livelli di tensione e non solo il livello logico di '1' (+3.3Volt) e di '0' (0 Volt).
  Arduino dispone di un certo numero di porte digitali che si possono comportare anche come uscite analogiche (utilizzando un sistema chiamato Pulse Width Modulation - http://it.wikipedia.org/wiki/Pulse-width_modulation) e sono identificate sulla scheda con la scritta: PWM oppure abbreviato con il simbolo '~'. Sulla mia scheda (arduino UNO) tali PIN sono: 3,5,6,9,10,11 per cui potrei decidere se usare tali porte come analogiche o digitali.

Utilizziamo questa volta un altro esempio già pronto nel menù del nostro ambiente di sviluppo: File->Examples->1.Basics->Fade


 Il codice che apparirà nell'editor è quello riportato qui sotto (ho numerato le righe così è più semplice indicarle quando le spiego):




  1. /*
  2.  Fade
  3.  
  4.  This example shows how to fade an LED on pin 9
  5.  using the analogWrite() function.
  6.  
  7.  This example code is in the public domain.
  8.  
  9.  */
  10. int brightness = 0;    // how bright the LED is
  11. int fadeAmount = 5;    // how many points to fade the LED by

  12. void setup()  { 
  13.   // declare pin 9 to be an output:
  14.   pinMode(9, OUTPUT);

  15. void loop()  { 
  16.   // set the brightness of pin 9:
  17.   analogWrite(9, brightness);    

  18.   // change the brightness for next time through the loop:
  19.   brightness = brightness + fadeAmount;

  20.   // reverse the direction of the fading at the ends of the fade: 
  21.   if (brightness == 0 || brightness == 255) {
  22.     fadeAmount = -fadeAmount ; 
  23.   }     
  24.   // wait for 30 milliseconds to see the dimming effect    
  25.   delay(30);                            
  26. }


nelle righe 10 e 11 vengono definite due variabili di tipo intero (due "contenitori" di numeri interi ognuno con un nome), brightness conterrà inizialmente il valore '0', mentre fadeAmount è stata inizializzata a 5.


   Nelle righe da 13 a 16 è definita la sezione (forse sarebbe più preciso chiamarla "funzione" ma lo vedremo la prossima volta) setup in cui viene impostato il pin 9 come uscita (nella riga 15)

   Successivamente, dalla 18 alla 31 è definita la funzione loop dove viene descritto il comportamento ciclico che la nostra scheda dovrà avere.
In particolare alla riga 20 troviamo una istruzione per "scrivere" un valore analogico sul PIN numero 9, il valore che verrà scritto inizialmente è il contenuto della variabile brightness ossia '0'.
   Alla riga 23 il valore di brightness contenuto viene cambiato incrementandolo della quantità fadeAmount che vale 5.
   Successivamente (righe 26-28) viene controllato se il valore della variabile che abbiamo appena modificato sia uguale al limite inferiore (0) o superiore (255) nel caso in cui si sia raggiunto uno dei due limiti la quantità di incremento (fadeAmount) viene cambiata di segno e quindi: nei primi cicli fadeAmount è +5, quando brightness raggiunge il valore di 255 fadeAmount
cambia di segno e diventa -5 e ogni volta che verrà eseguita la riga 23 toglierà 5 al valore di brightness fino a portarlo a '0' e a questo punto cambierà di nuovo di segno, e così via...
   Tra un ciclo e un altro è posta una pausa di 30 millisecondi alla riga 30.

Collegamento del DIODO-LED
Questa volta, poiché i fori della "massa" (GND) e del polo positivo (numero 9) sono relativamente distanti occorrerà piegare in maniera opportuna i piedini del componente...
 E infine potrà essere infilato nei fori adatti (mi raccomando, per vedere il LED accendersi la polarità dovrà essere rispettata)
A questo punto è possibile collegare la scheda al PC tramite il cavo USB e fare l'upload del programma su arduino.


È possibile fare un upload oltre che attraverso il pulsante sull'editor , visto la scorsa volta, anche attraverso il menù come in figura:


oppure utilizzando la scorciatoia: Ctrl+U.

A questo punto il nostro led si accende e si spegne in maniera più "soft" mostrandoci le varie intensità luminose...

A presto.

mercoledì 1 febbraio 2012

Cominciamo - YAAB! (Yet Another Arduino Blog!)

Si, lo so cosa starete pensando: non ce n'erano già abbastanza di blog, forum, tutorial e siti su arduino?
In realtà questo è un diario di bordo sull'esperienza che sto facendo su arduino.
Ma a chi può importare?
Di sicuro a me e a qualche mio amico dell'associazione SLAG (www.slag.it) e forse a qualche curioso che potrebbe trovare utili le esperienze altrui.... Quindi... cominciamo! :)

DA PREMETTERE CHE NON MI RITENGO RESPONSABILE PER I DANNI A PERSONE O COSE CHE POTRESTE PROVOCARE ATTRAVERSO UN USO IMPROPRIO DELLA SCHEDA ANCHE SE DERIVANTE DA UNA ERRATA INTERPRETAZIONE DELLE ISTRUZIONI RIPORTATE A SEGUIRE.

Il sito di riferimento per ARDUINO è: http://www.arduino.cc/ lì trovate i link per l'acquisto di una delle versioni della scheda arduino, io ho acquistato "ARDUINO UNO" e con poco più di 25€ mi è arrivato uno scatolotto dalle dimensioni di una scatola di fiammiferi:

aperta la scatola ecco finalmente il mio arduino, la garanzia e alcuni adesivi...


La scheda si alimenta direttamente dalla porta USB del PC o da un alimentatore esterno (non incluso) con connettore cilindrico...

Sulla scheda sono presenti dei connettori (INPUT e OUTPUT) sia analogici che digitali che è possibile controllare con estrema facilità; vedremo più avanti come fare.

L'ambiente di sviluppo è disponibile tra le applicazioni installabili da Ubuntu Software Center....

Una volta installato il programma si avvia facilmente dal menu delle applicazioni e ha un aspetto del genere:

Primo esempio: far lampeggiare un led
Un led, per i "profani" dell'elettronica, è assimilabile ad una lampadina che si accende solo se si rispetta una polarità precisa: il '-' collegato su un piedino chiamato 'anodo' e il '+' su un piedino chiamato 'catodo' (per ulteriori approfondimenti: http://it.wikipedia.org/wiki/LED). Questo sarà il primo componente che interfacceremo con la nostra scheda!
Utilizziamo, tanto per cominciare, un programmino di esempio che troviamo già tra quelli disponibili attraverso il menù dell'ambiente di sviluppo -> File -> Examples -> 1.Basic -> Blink.


Il programma verrà caricato nell'editor integrato a quel punto dobbiamo essere sicuri che il programmi si interfacci correttamente con la scheda attraverso la porta seriale USB, controlliamo (ed eventualmente impostiamola) attraverso il menu dell'IDE (ambiente di sviluppo integrato): -> Tools -> Serial Port ->... (nel mio caso: /dev/ttyACM0)

Solo due parole sul codice
Si compone di due sezioni principali: setup e loop; setup viene eseguito all'inizio, quando l'applicazione parte; loop verrà eseguito in continuazione...
I commenti:
  • su più righe sono compresi tra: /* e tra: */
  • su una sola riga sono preceduti da: //  e terminano alla fine della riga
In questo esempio, nella sezione di setup viene impostato il PIN13 come output.

Nella sezione di loop, attraverso l'istruzione:
  digitalWrite(13, HIGH); 
si imposta il valore "alto" (HIGH) sul pin 13, provocando l'accensione del LED

l'istruzione seguente: 
  dealy (1000);
attende 1000ms (ossia 1 secondo) prima di continuare con le righe seguenti;

Le istruzioni successive... bhè... indovinate voi a cosa servano!!!... ;-P



Colleghiamo il led
Sul connettore DIGITAL abbiamo i "PIN" su cui viaggiano i segnali "+" mentre la polarità negativa è comune a tutti i PIN e viene prelevata da GND (i miei colleghi ingegneri e periti elettronici perdonino la mia terminologia svilente della materia, ma preferisco che anche i 'profani' riescano a seguire...).
Colleghiamo il led inserendo i suoi piedini come nella foto (se non si dovessero rispettare le opportune polarità, non succede nulla: il led non si accenderà).


Diamo fuoco alle polveri
Per eseguire il programma sulla scheda dobbiamo eseguire una "upload" per mezzo dell'apposito pulsante sull'interfaccia di sviluppo.

A questo punto, se tutto è filato liscio, il led dovrebbe lampeggiare. Da notare che da questo momento in avanti, ogni qual volta arduino verrà acceso (alimentato via USB o da alimentatore indipendente), eseguirà sempre il codice che è stato caricato l'ultima volta.

Conclusione
Il miglior modo per imparare è facendo. Ora che siete riusciti a fare qualcosa con arduino, per imparare di più, non resta che capire meglio quello che avete fatto attraverso l'esame del codice e provando ad effettuare piccole variazioni come passare da una attesa di 1000 millisecondi ad una più breve di 100 millisecondi...

BUON DIVERTIMENTO!
;-)