mercoledì 30 dicembre 2015

Scratch e Arduino - Progetto #4: Il potenziometro

In questo progetto vediamo come effettuare una lettura del valore di un potenziometro ed in generale di un pin analogico di arduino.




Obiettivi del progetto

Visualizzare sullo schermo una barra di progresso proporzionale al grado di rotazione di un potenziometro.

Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard

Potenziometro



Fili Maschio-Maschio




Il Potenziometro

Un potenziometro e' un componente elettronico che puo' essere descritto brevemente come una resistenza variabile o meglio come un partitore di tensione.  Per chi volesse una descrizione piu' dettagliata di cos'e' e come funziona un potenziometro puo' leggere qui






Ha tipicamente 3 piedini che vanno collegati al pin GND, al pin 5V e ad un pin analogico di arduino come illustrato in figura.
In questo modo sul pidino centrale e' presente una tensione proporzionale alla tensione di alimentazione (5V) in base al grado di rotazione del potenziometro.

Quando il potenziometro e' ruotato tutto a sinistra sul piedino centrale ci sono 0 volt.
Qaundo il potenziometro e' ruotato tutto a destra sul piedino centrale ci sono 5 volt.
Quando il potenziometro e' ruotato in una posizione intermedia sul piedino centrale c'e' una tensione tra 0 e 5 volt.




Circuito e collegamenti

Qui lo schema dei collegamenti da realizzare. Ho usato il software Fritzing per rappresentare gli schemi di collegamento.





E qui la realizzazione su breadboard del circuito













Il circuito e' molto semplice.
Guardando il potenziometro di fronte collega:

  • Il pin GND di arduino al piedino di sinistra del potenziometro
  • Il pin 5V di arduino al piedino di destra del potenziometro. 
  • Il pin A0 di arduino al piedino centrale del potenziometro.


In questo modo il valore di tensione sul piedino centrale del potenziometro e' presente sul pidino analogico A0 di arduino. COn il programma scratch andremo a leggere questo valore che variera' tra 0 (potenziometro tutto a sinistra) e 100 (potenziometro tutto a destra).

Programma Scratch

Adesso che il circuito e' completo, passiamo alla parte software.
In sostanza dobbiamo leggere il valore del pin analogico A0 e visualizzare una barra di lunghezza proporzionale a tale valore (0-100)

Codice base


Crea questo script in Scratch usando il mouse





Adesso vediamo cosa fa il programma scratch descrivendo i vari blocchetti dall'alto al basso:




Per prima cosa crea un nuovo sprite facendo click sull'icona del pennello. Ci serve solo uno sprite vuoto per il nostro programma



Adesso crea un nuovo blocco chiamato disegna Barra. Fai click su opzioni e poi su Aggiungi un parametro numerico. Chiama il parametro %. In questo modo abbiamo creato un blocco vuoto che accetta in ingresso un parametro %.
Adesso aggiungi i blocchetti al blocco Disegna Barra come in figura. Questo blocco ci serve per disegnare una barra di progresso con lunghezza proporzionale al valore in ingresso %.
La prima operazione pulisci pulisce lo schermo
Se il valore % e' uguale a 0 non facciamo nulla (una barra di valore 0).
Se al contrario il valore % e' maggiore di 0 allora iniziamo tirando su la penna. Poi impostiamo il colore della penna e la sua dimensione (50). Adesso spostiamo la penna alle coordinate x=-150 e y=0. Adesso che abbiamo posizionato la penna la abbassiamo (penna giu'). In fine disegniamo la barra spostando la penna a destra (cambia x di) di un valore uguale a tre volte il valore %. Questa e' un modo semplice per disegnare una barra proporzionale ad un valore.
Successivamente passeremo il valore letto dal potenziometro a questo blocco. In questo modo disegneremo una barra di lunghezza uguale al valore letto dal potenziometro

Adesso crea il programma principale come in figura


Quando si preme la bandierina verde il programma inizia impostando il Pin analogico 0. Di fatto questo dice a scratch che dobbiamo effettuare una lettura dal pin analogico 0 (A0) di arduino


Crea una variabile di nome valore.
All'interno di un ciclo infinito (per sempre) assegna alla variabile valore il numero che ci restituisce il comando leggi potenziometro. In questo modo la variabile valore contiene la percentuale di rotazione del potenziometro (0-100).
Siccome la lettura del potenziometro restituisce un valore tra 0 e 1023, divido per 10 in modo da ottenere un valore tra 0 e circa 100.
Adesso chiama il blocco Disegna Barra passandogli come parametro la variabile valore. Questo in effetto disegna sullo schermo una barra proporzionale al valore della variabile valore. Adesso il ciclo ricomincia leggendo il valore del potenziometro e cosi' via all'infinito. Se ruoti il potenziometro una nuova barra della lunghezza giusta viene disegnata sullo schermo.


Come vedete il programma e' molto semplice, ma allo stesso tempo ci permette di imparare come leggere il valore di un pin analogico(potenziometro) ed eseguire una logica per disegnare una barra su schermo.

Queste operazioni per quanto basilari sono utilissime in moltissimi progetti Arduino.

In questo progetto hai anche appreso come creare un blocco di operazioni (funzione, routine) con un parametro d'ingresso. Cio'  sara' utile in moltissimi altri progetti arduino.

Una volta fatto click sulla bandierina verde il programma inizia leggendo il valore dal potenziometro e visualizzando la barra di progresso su schermo.










Complimenti!!! Adesso possiamo leggere il valore di una misura analogica (temperatura, presisone, ...) tramite arduino.











lunedì 28 dicembre 2015

Scratch e Arduino - Progetto #3: Il pulsante

Nei primi due progetti abbiamo acceso dei led tramite una scrittura di un valore su un pin digitale di arduino.In questo terzo progetto vediamo come effettuare una lettura digitale dello stato di un pulsante ed in generale di un pin digitale di arduino.

Obiettivi del progetto

Far accendere un led in conseguenza della pressione di un pulsante.

Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard

Pulsante per breadboard



1x Led

1x Resistenze da 220 ohm 



1x Resistenza da 100 Kohm


Fili Maschio-Maschio




Circuito e collegamenti

Qui lo schema dei collegamenti da realizzare. Ho usato il software Fritzing per rappresentare gli schemi di collegamento.






E qui la realizzazione su breadboard del circuito















Il circuito e' composto da due parti

  • connessioni per accensione led (come nei progetti precedenti)
  • connessioni per lettura stato pulsante

Come si vede il led e' collegato al piedino digitale 3 di arduino.
Come si vede il pulsante quando premuto collega i due piedini (normalmente un pulsante da breadboard ne ha 4, ma sono collegati a due a due) comportandosi cosi' come un filo. Questo ci permette di interrompere o di chiudere il circuito.

Un piedino del pulsante e' collegato al pin di arduino  +5V tramite il filo arancione. Il secondo piedino e' collegato al piedino GND di arduino tramite una resistenza (100 Kohm). Un capo della resistenza e' collegato al piedino 8 di arduino tramite un filo blue. Questo ci serve per permettere ad arduino di leggere lo stato del pulsante.

Questa resistenza si chiama resistenza di pull-down (per chi e' interessatu qui piu' dettagli) e ci serve per far leggere ad arduino uno stato logico LOW quando il pulsante e' rilasciato o non premuto.

Come si vede nel caso che il pulsante non sia premuto il pin 8 di arduino e' collegato tramite il filo blu alla resistenza che e' collegata tramite il filo nero a GND. Quindi il pin 8 e' effettivamente collegato a GND (LOW).

Al contrario quando il pulsante viene premuto i due piedini vengono cortocircuitati e quindi ai capi del filo blue ci sono +5V (HIGH) provenienti da arduino tramite il filo arancione.

In questo modo in funzione della pressione o rilascio del pulsante sul piedino 8 di arduino ci saranno +5V (HIGH) o GND (LOW). Non ci resta che leggere il valore del piedino 8 tramite il software per rilevare lo stato del pulsante.


Programma Scratch

Adesso che il circuito e' completo, passiamo alla parte software.
In sostanza dobbiamo accendere e spegnere i led in funzione dello stato del pulsante.

Codice base


Crea questo script in Scratch usando il mouse






Adesso vediamo cosa fa il programma scratch descrivendo i vari blocchetti dall'alto al basso:





Come nel primo esercizio connettiamo il ledA al pin digitale numero 3 di arduino. Siccome abbiamo associato un led al pin 3, scratch capisce che questo pin deve essere impostato come un'uscita (OUTPUT) e quindi scrivere un valore (HIGH/LOW)




In maniera simile, assiciamo il pulsanteA al pin digitale 8 di arduino.  Siccome abbiamo associato un pulsant al pin 8, scratch capisce che questo pin deve essere impostato come un ingresso (INPUT) e quindi leggere un valore (HIGH/LOW)

Questo e' il blocco principale che e' all'interno di un ciclo per sempre. Per prima cosa verifichiamo se il pulsante A e' stato premuto? Se si allora impostiamo il ledA a acceso di fatto accendento il led. Se no allora spegniamo il led (imposta led A a spento)


Come vedete il programma e' molto semplice, ma allo stesso tempo ci permette di imparare come leggere il valore di un pin digitale (pulsante) ed eseguire una logica per impostare il valore di un altro pin digitale (led).
Queste operazioni per quanto basilari sono utilissime in moltissimi progetti Arduino.

In questo progetto hai anche appreso l'utilizzo del costrutto condizionale (se - allora - altrimenti) che sara' utile in moltissimi altri progetti arduino.

Una volta fatto click sulla bandierina verde il programma inizia controllando lo stato del pulsante periodicamente ed accendendo o spegnendo il led di conseguenza.







Complimenti!!! Adesso possiamo pilotare arduino tramite la pressione di un pulsante!!!











sabato 26 dicembre 2015

Scratch e Arduino - Progetto #2: Led effetto supercar

Quando ero ragazzino era molto popolare una mitica serie TV chiamata Supercar. L'auto tra le mille funzionalita' aveva anche un bellissimo effetto di luci sul davanti (ben visibile qui )

Proviamo adesso a realizzare qualcosa di simile (anche se non esattamente uguale) con Arduino.

Nel post precedente (leggilo qui) abbiamo imparato come far lampeggiare un led con Arduino, quindi adesso che sappiamo tutto cio' di cui abbiamo bisogno proviamo a fare l'effetto supercar :)


Obiettivi del progetto

Far accendere una serie di led con Arduino in modo da creare l'effetto supercar


Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard

4x Led

4x Resistenze da 220 ohm 

Fili Maschio-Maschio




Circuito e collegamenti

Qui lo schema dei collegamenti da realizzare. Ho usato il software Fritzing per rappresentare gli schemi di collegamento.




E qui la realizzazione su breadboard del circuito








Il circuito e' semplice ed e' molto simile a quello del progetto #1.
In pratica si devono collegare i 4 led alla stessa maniera del progetto #1.

In questo caso abbiamo 4 led (l'effetto viene meglio con piu' led, ma per praticita' fermiamoci a 4).
Disponiamo in una fila orizzontale i 4 led con il pidino + (anodo) verso destra.
Colleghhiamo una resistenza da 220 ohm all'anodo di ciascun led. In questo caso per praticita' dispongo la resistnza in verticale a cavallo della scanalatura centrale della breadboard.

Collego un filo nero (puoi usare anche un altro colore non e' cosi' importante per il momento) ad ogni piedino - (catodo) di ciascun led. L'altra estremita' di ciascun filo nero la collego nella linea orizzontale piu' in basso della breadboard (come da schema).

Adesso collego un filo rosso (puoi usare anche un altro colore non e' cosi' importante per il momento) ad ogni piedino della resistenza da 200 ohm, L'altra estremita' del filo rosso la collego ad un piedino digitale di Arduino. Come da schema il primo filo rosso lo collego al pidino 2, il secondo filo al piedino 3, il terzo filo al piedino 4 e infine il quarto filo al piedino 5 di Arduino (vedi foto circuito).

Per finire collego sempre con un filo nero, la linea orizzontale piu' bassa della breadboard al pidino GND di arduino. In questo modo abbiamo collegato tutti i catodi dei led a GND.


Programma Scratch

Adesso che il circuito e' completo, passiamo alla parte software.
In sostanza dobbiamo accendere e spegnere i led in sequenza in modo da realizzare l'effetto supercar.

Creeremo il programma in due modi: il primo piu' semplice senza cicli, il secondo piu' ottimizzato per ridurre ilo numero di istruzioni in cui useremo dei cicli e delle variabili.

Codice base


Crea questo script in Scratch usando il mouse





Adesso vediamo cosa fa il programma scratch descrivendo i vari blocchetti dall'alto al basso:




Questo e' l'inizio del programma. In particolare diciamo a scratch di iniziare ad eseguire il programma quando facciamo click con il mouse sulla bandierina verde





Come nel progetto #1, diciamo a scratch di collegare il ledA al pin 2 di arduino, il ledB al pin 3, il ledC al pin 4 e infine il ledD al pin 5. Cio' coincide esattamente con i collegamenti elettrici che abbiamo effettuato prima.

Spegniamo tutti i led quando il programma inizia per evitare effetti visivi indesiderati.

Questo blocco dice a scratch di aspettare per 1 secondo prima di eseguire il comando successivo. (questo blocco e' opzionale, puoi provare a rimuoverlo e vedere cosa succede)

questo e' un che in programmazione si chiama ciclo. Piu' imparticolare questo e' un ciclo infinito. Cio' significa che tutte le istruzioni o comandi che sono contenuti al suo interno vengono ripetuti per esempre dal primo all'ultimo, e poi dinuovo dall'inizio

Questo e' il blocco principale del codice che viene ripetuto per sempre in quanto e' all'interno del ciclo per sempre. Ma vediamo in dettaglio come funziona.
Accendiamo il ledA (quello piu' a destra di tutti)
Aspettiamo 1 secondo
Adesso spegniamo il ledA (quindi il ledA rimane acceso per 1 secondo) e allo stesso tempo accendiamo il LedB
Aspettiamo 1 secondo
Adesso spegniamo il ledB (quindi il ledB rimane acceso per 1 secondo) e allo stesso tempo accendiamo il LedC
Aspettiamo per 1 secondo
Adesso spegniamo il ledC  e allo stesso tempo accendiamo il LedD
Aspettiamo per 1 secondo (a questo punto abbiamo acceso in sequenza i led da destra verso sinistra, ora dobbiamo ornare indietro)
Aspettiamo per 1 secondo
Adesso spegniamo il ledD e allo stesso tempo accendiamo il LedC (in effetti stiamo tornando indietro)
Aspettiamo per 1 secondo
Adesso spegniamo il ledC e allo stesso tempo accendiamo il LedB
Aspettiamo per 1 secondo
Adesso spegniamo il ledB e allo stesso tempo accendiamo il LedA

A questo punto la sequenza e' completa, abbiamo accesso tutti i led uno per uno da destra a sinistra e poi da sinistra a destra



Quindi una volta fatto click sulla bandierina verde il programma inizia collegando i ledA,B,C, D  ai pin 2,3,4,5 di arduino.
Poi inizia un ciclo infinito che accende il led in sequenza da destra verso sinistra e viceversa andando cosi' a creare l'effetto visivo desiderato






Complimenti!!! come detto all'inizio avete realizzato l'effetto supercar!! :)


Codice con variabile


Nel codice precedente abbiamo fatto in modo che ogni led rimanga acceso per 1 secondo.
Se volessimo ora rendere l'effetto piu' veloce o lento dovremmo cambiare il valore 1 in tutti i blocchi Attendi 1 secondo. Ce ne sono 7 e sarebbe tedioso.

Allora introduciamo nel programma una variabile e chiamiamola ritardo






Crea questo script in Scratch usando il mouse





Come si vede lo script e' molto simile a quello precedente. Ci sono solo due differenze




Il blocco porta ritardo a 0.2 assegna un valore alla variabile ritardo. Nel nostro caso siccome vogliamo che l'effetto supercar sia piu' veloce assegniamo un valore minore di 1 (0.2)



Il blocco Attendi 1 secondo viene modificato come in figura di fatto mantenendo il led acceso per un periodo pari al valore contenuto nella variabile ritardo



Quindi in questo modo rendendo variabile il tempo di accensione del led possiamo variare facilmente la velocita' dell'effetto supercar!!





Codice con cicli


Crea questo script in Scratch usando il mouse





Adesso vediamo cosa fa il programma scratch descrivendo i vari blocchetti dall'alto al basso:




Inizializziamo una nuova variabile chiamata pin al valore 2. Avrei potuto usare direttamente porta in a 2 ma per qualche oscuro motivo non funziona. Provando ho visto che inizializzandolo a 0 e poi cambiando il valore a 2 funziona correttamente.

Come nel programma precedente all'inizio del programma spegniamo tutti i led per evitare effetti indesiderati. Questa volta creiamo un ciclo che viene ripetuto 4 volte (1 volta per ogni led). All'inizio del ciclo la variabile pin vale 2. La prima istruzione dento il ciclo imposta il pin pin a spento. Siccome la variabile pin vale 2 questo comando effettivamente imposta il pin 2 a spento. La seconda istruzione del ciclo incrementa il valore della variabile pin di 1. Quindi ora pin vale 3. Adesso la prima iterazione del ciclo si e' conclusa ed il ciclo inizia da capo. Quindi ora il pin 3 viene spento. La viaribile pin viene adesso portata a 4 ed il ciclo ricomincia spegnendo il pin 4. Cosi' via per 4 volte di fatto spegnendo il pin 2,3,4 e 5

Come nel programma precedente dobbiamo accendere i led da destra a sinistra e poi da sinistra a destra, Iniziamo con un primo ciclo che accende i led da destra a sinistra.All'inizio del ciclo la variabile pin ha valore 2 (primo led a destra). Ripetiamo il ciclo per 4 volte, una volta per ogni led. Nella prima iterazione del ciclo accendiamo il led 2 (pin=2) e spegniamo il led 1( pin = pin -1 ; pin = 2-1=1). In realta' al pin 1 non abbiamo collegato nulla quindi non succede nulla. A questo punto ci spostiamo a sinistra di un led incrementando la variabile pin di 1 e potandola a 3. Adesso attendiamo un periodo pari al valore della variabile ritardo. Adesso il ciclo ricomincia dall'inizio. Adesso accendiamo il led 3(pin=3) e spegniamo il led 2(pin = pin - 1; pin = 3-1 = 2). Incrementiamo il valore di pin di 1 (4) e attendiamo il tempo prestabilito. Poi il ciclo ricomincia accendendo il led 4 e spegnendo il led 3 (4-1). Cosi' via per 4 volte di fatto accendendo e spegnendo tutti i led da destra a sinistra nella sequenza corretta. 

Al termine del ciclo precedente la variabile pin ha valore pare a 6. Quindi prima di iniziare il ciclo di ritorno (quello che accende i led da sinistra a destra) impostiamo la variabile pin a 5. Nella prima iterazione del ciclo spegniamo il led 5 (pin =5) e accendiamo il led 4 (pin = pin -1; pin=5-1 = 4). Adesso il valore della variabile pin viene decrementato di 1 diventando uguale a 4. Adesso attendiamo il riratdo prestabilito. La prima iterazione del ciclo si e' conclusa e comincia dall'inizio. Adesso spegniamo il led 4 (pin = 4) e accendiamo il led 3 (pin = 4-1 = 3). Decrementiamo dinuovo pin a 3. Quando il ciclo ricomincia spegniamo il led 3 e accendiamo il led 2. Il ciclo si ripete per 4 volte accendendo e spegnendo i led da sinistra a destra nella giusta sequenza.

Questo e' il ciclo principale che viene eseguito per sempre. Quando il ciclo che accende i led da destra a sinistra finisce inizia il ciclo che accende i led da sinistra a destra. A questo punto il ciclo principale ricomincia facendo accendere dinuovo i led da destra a sinistra. 



Complimenti!!!! Hai implementato l'effetto super car usando quano appreso nel post #1 ed inoltre hai imparato cosa sono e come si usano le variabili e i cicli. Inoltre hai anche imparato come si incrementa e decrementa una variabile.