Visualizzazione post con etichetta scratch. Mostra tutti i post
Visualizzazione post con etichetta scratch. Mostra tutti i post

mercoledì 26 luglio 2017

s2pi - Programmare Raspberry Pi usando Scratch 2.0

Raspberry Pi e' una serie di computer su singola scheda dalle dimensioni e costo molto contenuti che e' stato venduto in milioni di esemplari in tutto il mondo.

Nel corso degli anni si e' passati dal primo Raspberry Pi al Raspberry Pi3 a 64 bit e all'ultimo Raspberry Pi Zero Wireless dalle dimensioni veramente impressionanti.






Il Raspberry Pi e' un computer completo con processore ARM ed espone una serie di pin digitali GPIO per poter pilotare circuiti esterni o per leggere dei lavori digitali da sensori esterni.

In questo contesto, con le dovute semplificazioni, possiamo vedere il Raspberry Pi come una versione evoluta e piu' versatile di Arduino.

Infatti al contrario di Arduino, che e' una scheda basata su un microcontrollore, Raspberry Pi e' un computer a tutti gli effetti su cui gira un  sistema operativo (tipicamente Linux, ma anche Windows e  Android).

Per le sue caratteristiche tecniche e di costo il Raspberry Pi e' generalmente diretto al mercato hobby ed educational e risulta perfetto per i giovani che sono alle prime armi e vogliono sperimentare ed imparare l'elettronica e la programmazione


Programmazione

Il Raspberry Pi puo' essere programmato in moltissimi modi diversi ed utilizzando praticamente qualsiasi linguaggio.

Python


Visto il suo vasto utilizzo nel mondo degli hobby e della didattica il Raspberry Pi permette di essere programmato in maniera semplicissima usando il linguaggio Python

Esistono molti moduli Python che permettono di avere accesso ai GPIO (detti anche piedini)




L'utilizzo e la programmazione di Raspberry Pi in Python permette di creare un'enormita' di progetti con complessita' variabile dal piu' semplice (accensione di un Led) ai piu' complessi (gestione domotica di un'abitazione).

Ritengo molto valido, e suggerisco l'uso di Python per la programmazione di Raspberry Pi a tutti coloro che vogliono imparare e si avvicinano al mondo dell'elettronica e della programmazione per la prima volta. Qualsiasi studente dalle medie inferiori in avanti  puo' avere accesso ad un mondo vastissimo di possibilita' per imparare ed apprendere.




Scratch 1.4


Uno dei sistemi operativi piu' utilizzati su Raspberry Pi e' Raspbian.

Raspbian fornisce gia' installato il famoso ambiente di programmazione visuale Scratch sviluppato al MIT.






La presenza di Scratch e la possibilita' con esso di programmare il Raspberry Pi rende questa piattaforma facilmente accessibile ai meno esperti ed ai piu' piccoli (studenti della scuola primaria)
Scratch, come Python, permette di accedere ai piedini di GPIO e di programmare la logica di semplici circuiti

Per una serie di ragioni tecniche, che qui non tratto, la versione di Scratch disponibile su Raspberry Pi e' la 1.4, cioe' la piu' datata.

Scratch 2.0


La versione piu' nuova di Scratch la 2.0 non e' disponibile (o facilemente disponibile) su Raspberry Pi. 



Questo non e' un grande problema, ma in certi ambienti dove lo studente ha seguito un ciclo di apprendimento basato su Scratch 2.0 si troverebbe disorientato al passaggio a Scratch 1.4.

Al fine di rendere piu' agevole l'introduzione di Raspberry Pi questo post tratta e spiega come utilizzare Scratch 2.0 per programmare il Raspberry Pi eliminando cosi' la necessita' di imparare l'ambiente 1.4 e rendendo l'esperienza didattica piu' semplice per lo studente.


s2pi





s2pi o Scratch to Pi permette la programmazione di Rapsberry Pi usando Scratch 2.0 off-line editor installato sul proprio PC.

In questo modo e' possibile programmare una scheda Raspberry Pi sia che sia fissa che sia mobile (magari a bordo di un Robot).

La programmazione avviene dal proprio PC tramite l'ambiente Scratch 2.0 off-line.

La scheda Raspberry Pi puo' essere locata in qualsiasi luogo locale o remoto. Non deve essere fisicamente collegata al computer. Questo fornisce una grande flessibilita' e permette di utilizzare Raspberry Pi e Scratch in diversi contesti e progetti.


Il pacchetto s2pi e' disponibile su github per chiunque ed e' composto dai seguenti elementi:

  • un'applicazione helper chiamata s2pi.py
  • un'estensione per Scratch chiamata s2pi.s2e che mette a disposizione una serie di blocchi di facile utilizzo 
  • un semplice script per Windows chiamato s2pi-redirect.bat  che permette di far comunicare Scratch con Raspberry Pi
  • un programma Scratch di esempio per verificare che l'installazione di s2pi sia perfettamente funzionante

Installazione


L'installazione e' semplice ed accessibile a tutti coloro che hanno una conoscenza di base.
Per i piu' piccoli, in caso di problemi,  suggerisco di chiedere aiuto ad un adulto.

L'installazione prevede una serie di passaggi sia sul proprio PC (Windows in questo post) sia sul proprio Raspberry Pi

PC

Passo #1

Scaricare il seguente zip file [https://github.com/mancusoa74/s2pi/archive/master.zip]


Passo #2

Scompattarlo in una cartella (C:\Users\<nome utente>). Una directory di nome s2pi-master viene creata nella cartella prescelta (C:\Users\<nome utente>\s2pi-master)

Passo #3

Eseguire come amministratore il seguente file C:\Users\<nome utente>\s2pi-master\s2pi-master\Windows\s2pi-redirect.bat
Raspberry Pi



Passo #4

Inserire l'indirizzo IP del Raspberry Pi che si vuole programmare





Questo passo crea una regola di port forwarding che permette di reindirizzare tutto il traffico generato da Scratch (estensione s2pi) verso l'applicazione helper che gira su Raspberry Pi

Nota:
Il Servizio windows IP Helper deve essere attivo per un corretto funzionamento

Passo #5

Aprire Scratch 2 e caricare l'estensione s2pi tenendo premuto il tasto SHIFT e aprendo il menu File



Selezionare la voce: Import experimental HTTP extensions

e selezionare l'estensione s2pi in 

C:\Users\<nome utente>\s2pi-master\s2pi-master\Scratch_Extension\s2pi.s2e


Passo #6

Verificare che l'estensione sia stata caricata correttamente. 





A questo punto e' normale che il pallino che indicato lo stato dell'estensione s2pi sia rosso in quanto l'applicazione helper su Raspberry pi non e' ancora stata installata


Nota:
I passi elencati per l'installazione vanno eseguiti una sola volta ad eccezione del passo #5 che deve essere eseguito ogni volta che si carica l'ambiente Scratch 2 in quanto Scratch non prevede nessun meccanismo per caricare le estensioni in maniera automatica


Raspberry Pi


Passo #1

Scaricare il seguente zip file [https://github.com/mancusoa74/s2pi/archive/master.zip] con il seguente comando


wget https://github.com/mancusoa74/s2pi/archive/master.zip




Passo #2

Scompattarlo nella cartella home (/home/pi) Una directory di nome s2pi-master viene creata nella cartella home

unzip master.zip


Passo #3

Installare le dipendenze in caso non siano gia state installate.

Eseguire i seguenti comandi:


sudo apt-get install python-pip
sudo pip install flask
sudo pip install colorlog
sudo pip install gpiozero


Passo #4

Eseguire l'applicazione helper s2pi


cd /home/pi/s2pi-master
./start_s2pi.sh




A questo punto l'applicazione helper s2ai e' in attesa di ricevere le chiamate da Scratch

Se tutti i passi sono stati eseguiti correttamente ora in Scratch lo stato dell'estensione s2pi e' passato da pallino rosso a pallino verde, indicando che Scratch e Raspberry Pi possono comunicare correttamente






Nota:
I passi elencati per l'installazione vanno eseguiti una sola volta ad eccezione del passo #4 che va eseguito ogni volta che si vuole far partire l'applicazione helper su Raspberry Pi


Conclusioni

In questo posto ho messo a disposizione di chiunque un semplice metodo per poter programmare il Raspberry Pi usando Scratch 2 dal proprio PC.

Questo permette a chiunque alle prime armi di sperimentare ed imparare divertendosi.

Sono come sempre ben accetti suggerimenti costruttivi atti a migliorare quanto qui descritto




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)




lunedì 31 ottobre 2016

Modulo Digital Tube - Display 7 Segmenti

In qusto post spiego come programmare il modulo Digital Tube Display Module TM1637 con Arduino e Scratch







Questo modulo e' composto da 4 display a 7 segmenti pilotati dal driver TM1637 (qui il datasheet) monato sul retro del modulo



Il chip TM1637 ha anche la capacita' di leggere gli scan code di un tastierino 4x4, ma non viene trattato in questo post.

Piedinatura

Il modulo ha 4 piedini

    • VCC: piedino di alimentazione +5V
    • GND: piedino di massa
    • CLK: piedino di clock
    • DIO: piedino di scambio dati seriali tra Arduino ed il TM1637

Come si vede tolti i due piedinio di alimentazione, il modulo si programma con un semplice protocollo seriali a due fili (CLK e DIO).


Programmazione

Qui una breve descrizione (volutamente non completa) sul come programare il modulo. Tutti i dettagli sono contenuti nel datasheet

Leggendo il datasheet (chiunque vuole smanettare con Arduino e i vari componenti elettronici deve imparare a leggere un datasheet :) ) si capisce che il modulo puo' essere programmato con due modalita' differenti di indirizzamento (autoincrementale, fissa)  (in questo post ne usiamo solo quella fissa).




Questa figura ci spiega come programmare il display. Piu' precisamente bisogna inviare al modulo 3 comandi ed il dato da visualizzare sul display a 7 segmenti. I tre comandi sono definiti come:

  • Data command settings: comando di impostazioni
  • Address command settings: comnado di impostazione indirizzo
  • Display and control command settings: comando di impostazioni display


Nel datasheet e' definito il formato di ogni singolo comando (ometto ulteriori dettagli dato il target di questo post)

In conclusione per far visualizzare una cifra sul display bisogna inviare questi comandi (valore esadecimale del byte di comando):

  • 0x40: write data to display:  diciamo al modulo che vogliamo scrivere una cifra su un  display a 7 segmenti
  • 0xC0: indirizzo (0 - 3 siccome ci sono 4 display) del display che vogliamo usare 
  • 0x88: impostazione della luminosita'


Circuito

Vediamo ora come collegare il modulo Digital Tube ad Arduino





  • piedino VCC: va collegato al piedino 5V di Arduino
  • piedino GND: va collegato al piedino GND di Arduino
  • piedino CLK: va collegato al pin 7 di Arduino
  • piedino DIO: va collegato al pin 6 di Arduino

I piedini CLK e DIO possono essere collegati a qualsiasi pin digitale di Arduino, ma questo post usa il 6 ed il 7.






Codice Scratch

Ok ora che abbiamo capito come programmare e collegare il modulo digital tube ad Arduino vediamo il codice Scratch di prova




Il codice implementa il protocollo seriale descritto nel datasheet. 

Il blocco creaFont  e' usato per definire una tabella di mapping tra i valori numerici da 0 - 9 ed il relativo valore numerico da passare al modulo.

In altre parole i 7 segmenti sono pilotati dal vaore di un bit all'interno di un byte. Quindi andando a mettere a 0 o a 1 specifici bit si dice al modulo di accendere o spegnere il display.
In questo modo si possono far visualizzare al display le 10 cifre ed anche altri caratteri



I segmenti dal A a G, sono rappresentati in questo modo in uun byte (A = LSB)

0gfedcba

Quindi per esempio la cifra 1 si visualizza accendendo il segment b ed il segmento c e spegnendo tutti gli altri segmenti.

Quindi scrivendo in binario otteniamo 00000110 che  in deciamale e' 6.

I blocchi sequenzaStart e sequenzaStop sono usati per impostare particolari sequenze di valori sui piedini CLK e DIO in modo da rispettare ed implementare il protocollo descritto.

Il blocco scriviByte accetta un valore in ingresso ed ha il compito di inviare il byte passato in ingresso (bit per bit) al modulo

Il blocco displayCifra accetta due valore in ingresso:
  • l'indirizzo [0-3] del display da usare (cifra)
  • il valore numerico [0-9] da visualizzare (valore)




Infine nel blocco principale (main) impostiam i valori dei 3 comandi necessari per progammare il modulo.
Dopo creaiamo la tabella dei font ed impostiamo la luminosita' (da 0 - a 7).
Assegniamo i pin di CLK e DIO ai pin di Arduino (6 e 7) e li impostiamo come Output.

A questo punto possiamo chiamare il blocco displayCifra per far apparire sul display selezionato la cifra voluta

Buon divertimento e sperimentate a visualizzare altri caratteri.






domenica 23 ottobre 2016

Modulo Matrice 64 Led con MAX7219 - Programmazione

In questi due post Modulo Matrice 64 Led con MAX7219 - Assemblaggio  e precedenti Modulo Matrice 64 Led con MAX7219 - Test iniziale abbiamo saldato ed assemblato il modulo matrice 8x8 led con MAX7219 e lo abbiamo testato con un programma in Scratch.





In questo post vediamo come programmarlo per visualizzare una figura sulla matrice.

Codice Scratch



Il codice Scratchper programmare la matrice led si basa sul codice utilizzato per testare la matrice spiegato nel post precedente.

Vengono aggiunti alcuni blocchi utili.

Conversone da Esadecimale a Decimale



Questo blocco accetta in input un valore esadecimale (in base 16) e lo converte in decimale (base 10)


Invesrione di un byte


Questo blocco dato un valore in byte ne calcola il valore decimale invertendo a specchio tutti i suoi bit.

Per esempio se il valore in input e' 123 il risultato fornito dal blocco sara' 222.

Se scriviamo i numeri in binario risulta tutto piu' chiaro

123 -> 01111011
222 -> 11011110

Come vedete se invertitr i bit del numero 123 si ottiene il numero 222.

I due blocchi introdotti sopra sono utili per programmare la matrice con una figura arbitraria.

Accensione di una linea della matrice



Questo blocco sfrutta il blocco scriviComando per accendere i led di una specifica riga (riga) della matrice in base al valore (data) fornito


Editor per Matrice a Led

Su Internet e' disponibile un editor web per la matrice 8x8 usata in questo post.




Questo ottimo sito permette di disegnare il bitmap 8x8 che si vuole visualizzare sulla matrice.
La cosa piu' bella e' che fornisce moltissime immagini (font, numeri ed iconi) gia' disegnate, quindi ideale per una prova veloce.

Una volta terminato di editare il bitmap della matrice, il sito visualizza una porzione di codice C che rappresenta il bitmap stesso.

Inoltre rappresenta tutto il bitmap con un singolo numero a 64 bit rappresentato in formato esadecimale.

Per esempio il bitmap in figura e' rappresentato con questo codice: 10387cfe7c381000

Il nostro codice Scratch usa questo codice esadecinmale per visualizzare il bitmap sulla matrice andando a programmare l'accensione o lo spegnimento di ogni singolo led della matrice.

Programma Principale



L'unico input da fornire e' il codice prese dal sito Editor per Matrice (10387cfe7c381000) ed assegnarlo alla variabile matrice, come si vede nel secondo blocco in figura.

Dopo di cio', allo stesso modo del programma di test, si inizializzano i GPIO e si inizializza la matrice.

Ora il modo in cui il bitmap e' rappresentato nel codice esadecimale non e' direttamente utilizzabile dal mio programma, ma deve prima essere manipolato.

In dettaglio in un ciclo che viene ripetuto 8 volte si leggono due cifre alla volta (8x2) del codice esadecimale e si convertono in decimale.

Il valore nibble1+nibble2 e' il valore decimale di due cifre esadecimali del codice complessivo.

Questo valore viene passato al blocco invertiByte che come visto prima ne inverte i bit a specchio.

A questo punto il valore ottenuto e' quello corretto per essere programmato e visualizzato dalla matrice. Cio' avviene andando a scrivere tale valore all'indirizzo della riga tramite il blocco accendiRiga.

Al termine del ciclo tutte le 8 righe della matrice sono programmate e il bitmap rappresentato dal codice esadecimale a 64 bit e' visualizzato sulla matrice


Nota

Ho notato che la programmazione del modulo e' abbastanza lenta e richiede circa 22 secondi.
Questo non e' dovuto ad un malfunzionamento di Arduino o del modulo, ma ad una caratteristica del software Firmata che gira su Arduino.

Ma dopotutto questo post serve per imparare. Se poi si vuole usare il modulo in modo piu' serio realizaando delle animazioni si usa il codice Arduino e non Scratch, ma questo viene trattato in decide di post su Internet.

Buon divertimento e buona sperimentazione.