sabato 25 febbraio 2017

Scratch e Arduino - Progetto #6: Tastierino 4x4

Alcuni mesi fa' ho acquistato un  modulo keypad 4x4 come questo [disponibile qui]



Obiettivi del progetto

Interfacciare Arduino con il tastierino e leggere la pressione dei tasi con Scratch ed eseguire un azione.







Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard





Keypad 4x4



4x Resistenza da 10K ohm 





Fili Maschio-Maschio
e Machio-Femmina




Il tastierino 4x4

Per comprendere al meglio l'uso del tastierino 4x4 si consiglia di leggere ed imparare ad usare un singolo pulsante come descritto in questo articolo Scratch e Arduino - Progetto #3: Il pulsante





Come si vede da questa figura un tastierino 4x4 e' composto da 16 pulsanti organizzati a matrice.
Come detto prima per capirne il funzionamento e' necessario capire il funzionamento di un singolo pulsante.

La matrice e' organizzata il righe e colonne. Piu' precisamente ogni riga collega 4 pulsati ed ogni colonna collega 4 pulsanti.
Quando un pulsante viene premuto (il circuito si chiude) ed il valore presenta sulla sua riga (esempio R1) si puo' leggere sulla colonna relativa al pulsante premuto (esempio C1)






Come si vede dall'animazione, solo per esempio,  quando si preme il pulsante 1 il valore di R1 si legge su C1 e quando si preme il pulsante 5 il valore di R2 si legge su C2.


Comprendere questo modo di funzionamento e' molto importante quando scriveremo il programma Scratch.


Circuito e collegamenti

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






Partendo da sinistra i primi 4 fili (blu,giallo,blu,arancio) rappresentazo le 4 righe (R1-R4).
I successivi 4 fili (marrone,nero,marrone,nero) rappresentano le 4 colonne (C1-C4)

Come spigato nell'articolo relativo al pulsante, le 4 resistenze sono quelle che si chiamano resistenze di pull-up e servono a leggere correttamente il valore dei pulsanti.

I fili vanno collegati in questo modo:

  • blu (R1) -> pin 11
  • giallo (R2) -> pin 10
  • blu (R3) -> pin 9
  • arancio (R4) -> pin 8
  • marrone (C1) -> prima resistenza di pull-up
  • nero (C2) -> seconda resistenza di pull-up
  • marrone (C3) -> terza resistenza di pull-up
  • nero (C4) -> quarta resistenza di pull-up







Ora tra un piedino di ogni resistenza ed il filo che viene dal tastierino bisogna collegare un filo verso arduino, nel seguente modo:


  • arancio (C1) -> pin 7
  • rosso (C2) -> pin 6
  • marrone (C3) -> pin 5
  • nero (C4) -> pin 4








E qui la realizzazione su breadboard del circuito









Programma Scratch

Questo e' il programma principale





Come si vede il programma principale e' piuttosto semplice. Piu' in dettaglio una volta che il programma e' avviato si procede con l'inizializzazione del tastierino e dei pin di arduino.

Piu' in dettaglio i pin associati alle righr (11,10,9,8) sono impostato come pin di OUTPUT, mentre i pin associati alle colonne (7,6,5,4) come pin di INPUT






Dopo l'inizializzazione inizia un ciclo infinito che effettua ciclicamente la scansione di ogni singola riga e per ogni riga di tutte le colonne.
Le righe sono scansionate da 4 funzioni chiamate scansione_R1,scansione_R2,scansione_R3 e scansione_R4.
Mentre le colonen sono scansionate da un unica funzione chiamata scansione_Colonne che prende il numero di riga come parametro in ingresso.

Vediamo in dettaglio questi blocchi







Quando la funzione scansione_Rx viene invocata dal ciclo principale imposta una variabile chiamata ROW ad valore corrente di riga.
A questo punto imposta in modo opportuno i valori delle varie righe in modo da garantire sempre che una sola riga ha valore 0 (Livello logico BASSO-LOW) e tutte le altre hanno valore 1 (Livello logico ALTO-HIGH).
A questo punto si legge in sequenza il livello logico di ogni colonna e memeorizzo il risultato in una variabile apposita (V1-V4).

A questo punto dopo aver letto i valori delle 4 collonne per una data riga, li processiamo e' facciamo dire a Scratch il numero corrispondente al tasto che abbiamo premuto





Qusta funzione riceve in ingresso il numero di riga per cui i valori delle colonne sono stati letti.
La funzione inizia calcolando il numero del primo tasto della riga ricevuta in input con la seguente formula:


  • (numero riga -1) * 4 
Quindi quando numero riga = 1, la variabile tasto1 viene impostata a 0 e cosi' via

Nota: in informatica si parte "sempre" a contare da zero.
Nota2:  non so se ci hai mai pensato, ma questo spiega perche' l'anno 2000 e' nel 21mo secolo :) L'informatica aiuta a capire anche i piccoli/grandi problemi e quesiti della vita quotidiana :)

A questo punto si verifica il valore di ogni colonna (V1-V4) precedentemente letto. Solo 1 sara' a 0 in coincidenza del tasto premuto.
Quindi Scratch dira' (dire) "Hai Premuto (tasto1 + numero colonna)


A questo punto si riparte con la scansione della riga successiva e cosi' via ripartendo dalla prima quando si e' arrivati alla quarta.

Nota: per i piu' curiosi, questo e' il principio in cui funziona anche la tastiera di un PC

Ora vediamo il programma in funzione






Complimenti!!!
Con questo progetto hai imparato a ricevere l'input di una tastiera in Scratch e lo puoi utilizzare in mille modi diversi.


Idee

Questo progetto puo' essere esteso con progetti precedenti presenti su questo blog, per esempio:



Non abbiate timore di sperimentare. Uno scrittore Inglese dice:

"Piú impari, meno temi"
(Julian Barnes)