Appunti di programmazione su Arduino: variabili

Una variabile è un modo per nominare e memorizzare un valore numerico per un successivo utilizzo da parte del programma.
Come suggerisce il loro nome, le variabili sono numeri che possono essere cambiati continuamente rispetto alle costanti il cui valore non cambia mai. Una variabile deve essere dichiarata ed eventualmente si assegna il valore che si vuole conservare.
Il codice che segue dichiara una variabile denominata inputVariable a cui poi viene assegnato il valore presente sul pin analogico di ingresso n. 2

int inputVariable = 0;         // si dichiara una variabile a cui
                               // è assegnato il valore 0
inputVariable = analogRead(2); // imposta la variabile al valore
                               // presente sul pin analogico 2

inputVariable è la variabile.
Nella prima riga viene dichiarato che inputVariable conterrà un int, dove int è l’abbreviazione di numero intero. La seconda riga imposta la variabile al valore presente sul pin analogico 2, ciò permetterà di rendere disponibile il valore del pin 2 in altre parti del codice.

Una volta che una variabile è stata assegnata, o ri-assegnata, è possibile leggerne il valore per vedere se soddisfa a determinate condizioni, oppure è possibile utilizzare direttamente il suo valore.

Nell’esempio che segue sono illustrati tre operazioni utili con le variabili: se la condizione “inputVariable inferiore a 100” risulta vera, viene assegnato a inputVariable il valore 100 e poi viene impostato un ritardo (delay) di valore pari alla quantità memorizzata in inputVariable che ora vale 100.

if (inputVariable < 100) // verifica se la viariabile è
                         // minore di 100
{
  inputVariable = 100;   // se vero viene assegnato 100
}
  delay(inputVariable);  // usa la variabile per
                         // impostare il ritardo

Nota: alle variabili bisognerebbe dare un nome descrittivo (che ne spiega il significato) in modo che il codice sia più leggibile. I nomi di variabili come tiltSensor o pushButton aiutano il programmatore e chiunque legga il codice, a capire cosa rappresentano le variabili. I nomi delle variabili, come var o value, non rendono leggibile il codice e le usiamo solo come esempio.
Ad una variabile possiamo assegnare una qualsiasi parola che non sia già una delle parole chiave nel linguaggio Arduino.

Dichiarazione delle variabili

Tutte le variabili devono essere dichiarate prima di poter essere utilizzate. Dichiarare una variabile significa:

  • definire il tipo del valore che può assumere: int, long, float, ecc…
  • assegnare un nome
  • e opzionalmente assegnargli un valore iniziale

queste operazioni vengono fatte una volta sola nel programma, ma il valore della variabile può essere modificato in qualsiasi momento usando l’aritmetica o utilizzando delle assegnazioni.

Nell’esempio che segue viene dichiarato che inputVariable è un int, (tipo intero) e che il suo valore iniziale è uguale a zero. Questo è chiamata assegnazione semplice.

int inputVariable = 0;

Una variabile può essere dichiarata in posizioni diverse all’interno di un programma e in funzione della posizione in cui viene definita determina quali parti del programma possono utilizzarla.

Visibilità (o portata o scope) di una variabile

Una variabile può essere dichiarata

  • all’inizio del programma prima di void setup();
  • a livello locale all’interno di funzioni;
  • e talvolta, all’interno di un blocco di istruzioni ad esempio all’interno di un ciclo

La posizione in cui viene dichiarata la variabile determina la sua visibilità all’interno del programma e la capacità, da parte di alcune parti del programma, di utilizzarla. Una variabile globale è una variabile che può essere vista e utilizzata da ogni funzione del programma e in ogni istruzione del programma.

Una variabile per essere globale deve essere dichiarata all’inizio del programma, prima della funzione setup().

Una variabile è detta locale quando è definita all’interno di una funzione o come parte di un ciclo, essa è visibile e può essere utilizzato solo all’interno della funzione in cui è stata dichiarata. E’ quindi possibile avere due o più variabili con lo stesso nome in diverse parti dello stesso programma che contengono valori diversi.
Garantire che solo una funzione ha accesso alle sue variabili semplifica il programma e riduce il rischio di errori di programmazione.

L’esempio che segue mostra come dichiarare diversi tipi di variabili e dimostra la visibilità di ogni variabile.

int value;   // 'value' è visibile da ogni funzione

void setup()
{
   // non è necessario nessun setup
}

void loop()
{
   for (int i=0; i=0; i<20;) // 'i' è visibile solamente all'interno del ciclo for
   {
     i++;
   }
   float f;                  // 'f' è visibile solo all'interno di loop
}

Per le lezioni precedenti consultare la sezione Appunti di programmazione che trovate nella pagina Arduino di questo sito.

Cambiamo interfaccia ad Ubuntu – da Unity a Gnome

Transizione completa! A scuola tutto funziona su Ubuntu 11.10, tranne che per una decina di pc su cui sono costretto, per ora, ad utilizzare Windows XP.

L’installazione di Ubuntu 11.10 mi sta creando qualche piccolo problemino di lentezza sui computer più datati e con poca memoria. Per migliorare le prestazioni ho deciso di modificare l’interfaccia passando da Unity a Gnome.

L’operazione è abbastanza semplice, questa la procedura:

01. aprite il terminale, se desiderate usate la scorciatoia da tastiera ctrl+alt+t

02. digitate: sudo apt-get install gnome-session-fallback

03. inserire la password amministratore

04. al termine dell’installazione andate nel menù di Ubuntu e andate su Termina sessione

05. all’avvio fate click sull’icona dell’ingranaggio e scegliete come gestore grafico gnome classic

06. entrate con la vostra user e la vostra password e Ubuntu apparirà con l’interfaccia Gnome Classic.

Play With Arduino

Credo che voi come me abbiate incontrato durante la vostra vita insegnanti o amici che vi hanno donato un’idea o un modo di operare che vi ha arricchito intellettualmente e migliorato la vostra vita lavorativa. Io ne ho molti e tra questi sicuramente l’amico Alessandro Rodella (Alex per gli amici) è l’esempio per me di creatività tecnica/elettronica. Alessandro è un software engineer in una grande azienda che produce software di Borsa per l’Italia e per mercati borsistici esteri, a lui si deve la direzione di importantissimi progetti. Con lui condivido la stessa passione per l’elettronica e fin da bambini ci portiamo dentro la voglia di smontare dispositivi elettronici per scoprirne il funzionamento. Una delle ultime passioni di Alex è Arduino con cui sta realizzando apparati interessantissimi, in questo ultimo periodo si sta occupando di domotica e finalmente ha deciso di incomiciare a pubblicare i suoi esperimenti.

Per l’occasione ha realizzato un sito: Play With Arduino

e vi assicuro, è un bel giocare!

Le soluzioni che Alex sta pensando hanno, secondo me, valenza industriale ed il primo dei tutorial, suddiviso in tre parti ne è un esempio: un termostato GSM.

Il termostato è stato ultimato e messo in funzione oggi, inutile dirvi che funziona perfettamente!

Certamente una bella esperienza che potrò realizzare con i miei allievi.

Su Play With Arduino troverete nelle prossime settimane altri interessantissimi progetti non mancate di visitare il sito… stay tuned.

Robot Pet Therapy: costruiamo un drawdio


Recentemente mi è capitato di partecipare ad una riunione presso il Dipartimento di Informatica di Torino, in merito alle possibili soluzioni elettroniche/informatiche in campo educativo per un progetto legato ad alcune attività presso un museo di Torino. Poiché l’invito mi è arrivato improvviso e visto che recentemente sono entrato a far parte del CTS di Torino, ho pensato di illustrare brevemente il mio tentativo di recupero adottato tempo fa con un allievo con un profilo autistico utilizzando “l’elettronica creativa”

Ho mostrato due dispositivi:

  • un drawdio realizzato con un NE555
  • un secondo di cui ve ne parlerò tra qualche giorno in quanto in fase di miglioramento da parte di alcuni miei allievi.

Le due sperimentazioni fanno parte del progetto di Robot Pet Therapy

Drawdio

La parola Drawdio deriva dall’unione delle due parole:

  • (to) Draw: disegnare
  • Audio

è un dispositivo in grado di produrre suono mentre si disegna ed il suono emesso è funzione della quantità di grafite presente sul foglio.
Oltre ad emettere suono mentre si disegna e possibile realizzare varianti del dispositivo per suonare con l’acqua oppure “sentire” i diversi suoni emessi da diversi materiali, in realtà ciò che percepiamo e la variaione di resistenza che sussiste tra gli elettrodi e il materiale.
Il dispositivo ha degli impieghi interessantissimi soprattutto in un contesto educativo.

Prima di continuare vi invito a vedere i filmati che seguono:

Il sito di riferimento è: http://web.media.mit.edu/~silver/drawdio/ su cui trovate esempi e se desiderate anche un PCB per la realizzazione del circuito stampato, io ho utilizzato una basetta millefori e in cira 30 minuti ho saldato e realizzato il primo prototipo mostrato in questo articolo.

Come spesso ho avuto modo di affermare gli attegiamenti di protobullissmo in una classe creano scarso legame tra gli allievi e spesso mi è capitato di vivere in classi in cui si formano fazioni e forti rivalità.
Per spezzare questo attegiamento diseducativo tempo fa, con l’aiuto di un allievo diversamente abile abbiamo realizzare un drawdio che ha risolto alcuni problemi, il rendere “suono” i disegni ha incuriosito immediatamente e coinvolto l’intera classe e l’allievo diversamente abile è diventato “protagonista” inoltre. Ho anche sfruttato il dispositivo per creare una catena umana “resistiva” che suonava tutta insieme, questa semplice azione stranamente a incominciato ad aggregare il gruppo classe.
Stringere la mano, toccare la punta del naso o il braccio del compagno di classe per emettere un suono e qualcosa che tocca la sfera personale, ma credo che abbia fatto nascere in loro la consapevolezza di essere individui essenziali per emettere suono e quindi appartenenti ad un gruppo che crea.

Ma come funziona e come si realizza un drawdio?

Schema elettrico e componenti:

Schema di montaggio:

Se non vi occupate di elettronica non è importante capire tutto, potete limitarvi ad acquistare i componenti e saldarli insieme seguendo lo schema elettrico indicato sopra.

Per chi volesse saperne di più questa è la spiegazione.

Per poter emettere il suono durante il disegno bisogna collegare due elettrodi uno alla mina della matita ed uno sulla struttura della matita, toccando con un dito la traccia della matita e con l’altra mano tocchiamo la struttura della matita viene inserita tra i due contatti una resistenza elettrica che varia in funzione della distanza tra il dito sulla traccia e lo spessore della traccia, la variazine di resistenza viene utilizzata per variare la frequenza della nota emessa dal dispositivo.

Affinchè si possa produrre il suono la traccia sul foglio non deve avere interruzioni.

Il circuito elettrico non è altro che un generatore di nota modulabile in frequenza realizzato con un NE555 in configurazione astabile dove però e stata modificata la rete di temporizzazione tra il piedino 7 (discharge) e il 2 e il 6 (trigger e threshold) inserendo la resistenza variabile costituita dalla la matita e dal tratto di grafite.
Non mi dilungherò sul funzionamento interno dell’NE555, (probabilmente lo farò più avanti) è sufficiente per questa spiegazione ricordare che la frequenza del segnale rettangolare dipende dalle resistenze R2, R3 secondo la seguente formula:

[pmath size=16]f=1.44/C3*(R2+2*R3)[/pmath]

Impugnando la matita e collegandola come indicato nello schema (CORPO, PUNTA) e toccando con un dito dell’altra mano la traccia disegnata sul foglio viene inserita una resistenza variabile in serie alla resistenza R3, ciò consente di far dipendere la frequenza del segnale emesso dal tocco del nostro dito e dalla posizione della matita e dallo spessore della matita, infatti maggiore spessore della grafite equivale a minore resistenza, minore spessore della grafite equivale a maggiore resistenza.
L’uscita (pin 3) è collegata ad un piccolo altoparlante da 8 Ohm mediante un condensatore di disaccoppiamento che ha la funzione di bloccare la componente continua nel caso in cui l’oscillatore si fermi.
Quindi disegnando con la matita udiremo un suono che varia di tonalità, suono che si interromperà non appena solleviamo la matita.
Nel circuito ho aggiunto un LED per visualizzare l’accensione del circuito.

Lo specchi magico

Il Magic Mirror, sviluppato da: The New York Times Research & Development Lab e Alexis Lloyd è stato da poco selezionato dal Time tra le 50 migliori invenzioni del 2011. E’ sicuramente un bel gadget che sostituisce il vostro smartphone in quei pochi momenti in cui non potete usarlo.

A prima vista, lo specchio appare come un normale superficie riflettente, però è anche in grado di fornire notizie e dettagli meteo mentre vi lavate i denti o vi pettinate. Lo specchio è dotato di TV Philips con un Kinect di Microsoft che consente di accedere a ogni tipo di informazione, guardando il proprio riflesso. Potrete così ad esempio controllare il vostro calendario giornaliero e feed rss preferiti e visualizzare tutti i tipi di statistiche che riguardano la vostra salute, compresi grafici del sonno e la vostra attività motoria.

Reveal Project – Personal Data Mirror from NYT R&D on Vimeo.