lunedì 8 aprile 2013

Raspberry-Pi ed il telecomando - Parte 2

Una volta collegato il sensore infrarossi alla nostra Raspberry-pi, occorre installare i driver necessari per farlo funzionare: LIRC
Nel caso stiate configurando un media-center per mezzo di "raspbmc" il driver è già disponibile bisogna solo attivarlo all'avvio, aprendo come root /etc/modules e aggiungendo alla fine la seguente riga di testo:
lirc_rpi
dopo il riavvio sarà possibile (sempre da console) memorizzare i tasti del nostro telecomando preferito lanciando l'applicazione irrecord mediante il comando:
irrecord -d /dev/lirc0 mioTelecomando.conf
L'applicazione, ci chiederà dapprima il nome del telecomando (marca e modello), successivamente di premere e rilasciare alcuni tasti a caso e poi passerà alla fase ciclica di memorizzazione dei vari tasti del telecomando (più facile a farsi che a dirsi!). Ci verrà chiesto il nome del tasto che stiamo per premere e poi ci chiederà di premerlo, dando invio si termina la fase di memorizzazione.
I nomi dei tasti bisogna sceglierli da una lista ottenibile digitando il comando:
irrecord --list-namespace
L'elenco è lungo qui di seguito solo una parte...

KEY_0
KEY_102ND
KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_A
KEY_AB
KEY_ADDRESSBOOK
KEY_AGAIN
KEY_ALTERASE
KEY_ANGLE
KEY_APOSTROPHE
KEY_ARCHIVE
KEY_AUDIO
KEY_AUX
KEY_B
KEY_BACK
KEY_BACKSLASH
KEY_BACKSPACE
KEY_BASSBOOST
KEY_BATTERY
KEY_BLUE
KEY_BLUETOOTH
KEY_BOOKMARKS
KEY_BREAK
KEY_BRIGHTNESS_CYCLE
KEY_BRIGHTNESSDOWN
...

 Se, per esempio, volessi memorizzare il tasto di accensione dovrò specificare il nome: KEY_POWER, per il tasto '1': KEY_1, etc...

I dati acquisiti vengono salvati nel file di configurazione (testuale) che abbiamo specificato come parametro (in questo caso: "mioTelecomando.conf"); se volessimo utilizzare tale telecomando come telecomando di default, occorrerebbe copiare (con i diritti di super utente) il file appena creato nella cartella: "/etc/lirc/" e salvato con il nome: "lircd.conf".

A questo punto è l'applicazione che utilizziamo che si farà carico di gestire il verificarsi di eventi legati alla ricezione del segnale relativo ad un pulsante del telecomando; XBMC, per esempio, funziona senza problemi! :-)













È anche possibile usare il driver LIRC appena configurato e un diodo ad infrarossi per trasmettere; in questo modo Raspberry-Pi verrebbe usato come un telecomando per controllare le nostre apparecchiature in maniera automatica e/o via internet.... ma questa è un'altra storia....


venerdì 5 aprile 2013

Raspberry-Pi ed il telecomando - Parte 1

È passato un po' di tempo dall'ultimo post ed intanto ho cominciato ad usare anche un altra "schedina" (sempre formato carta di credito) per svolgere compiti più sofisticati: Raspberry-Pi.


 Raspberry-pi è un mini PC in cui costo, dimensioni e consumi sono ridottissimi: le dimensioni sono confrontabili con quelle di una carta di credito, i consumi confrontabili con quelli di un cellulare e il prezzo va dai 25 ai 40 euro a seconda del modello e del venditore.

  Le prestazioni sono sufficienti per riprodurre video e audio in Full-HD attraverso l'uscita HDMI integrata che permette di collegarlo ad un normale TV di ultima generazione.

  Per avviare il sistema operativo non si utilizza un hard-disk ma una scheda SD, come quelle utilizzabili in moltissime macchine fotografiche. 
Raspberry-Pi viene venduta senza un contenitore esterno ma da una rapida ricerca con google si scopre che in giro c'è chi ne costruisce e ne vende per ogni gusto (io, per esempio, ne ho presa una trasparente e una nera).
 Uno degli utilizzi più popolari del Raspberry è quello che lo vede collegato ad una TV la riproduzione di filmati, foto e musica direttamente dal nostro PC; tale media-center (RaspBMC) è controllabile, oltre che attraverso tastiera e mouse, anche attraverso una interfaccia web o dallo smartphone (per mezzo di un'apposita applicazione).

Per poter utilizzare un qualsiasi telecomando a infrarossi con il media-center è sufficiente procurarsi un un cavo come quello in foto (del tipo usato per collegare il lettore CD alla scheda audio del PC)


e un sensore ad infrarossi del tipo TSOP4838 oppure TSOP31238 che è quello che alla fine ho usato in queste foto.


Ad uno dei due capi del cavo, estrarre i connettori dall'involucro in plastica usando un oggetto appuntito e sollevando la linguetta come in figura e collegare i tre connettori ai pin del connettore GPIO del Raspberry-pi, utilizzeremo i pin:
  • pin 1 - 3.3Volt (rosso)
  • pin 6 - GND (nero)
  • pin 12 - GPIO18 (bianco)


e, dall'altro capo del cavo, riposizioniamo i connettori affinché siano nell'ordine congruo alla piedinatura del sensore; poi inseriamo il sensore nel connettore (eventualmente accorciando i piedini)


 A questo punto non rimane che rifinire il lavoro forando l'involucro del Raspberry-Pi e permettere al cavo di fuoriuscire.
Ho collocato il mediacenter dietro una vecchia TV per mezzo del velcro adesivo, ho collegato una chiavetta USB per il collegamento WiFi.
prossimamente vedremo come configurare un qualsiasi telecomando per funzionare con la nostra "scatoletta"...




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!
;-)