Visualizzazione post con etichetta kids. Mostra tutti i post
Visualizzazione post con etichetta kids. 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




mercoledì 6 gennaio 2016

Scratch e Arduino - Progetto #5: Il led a luce variabile

In questo progetto vediamo come accendere un led con un'intensita' di luce variabile. Piu' in generale vediamo come pilotare un pin "analogico" o PWM di arduino.




Obiettivi del progetto

Accendere un led con un'intensita' di luce variabile impostata da un potenziometro.


Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard

Led

Resistenza da 220 ohm 

Potenziometro


Fili Maschio-Maschio




Come abbiamo visto nel progetto del led un pin digitale puo' assumere solo due valori

  • ON/HIGH/ACCESO o 100
  • OFF/LOW/SPENTO o 0

Tuttavia ci sono dei casi in cui vogliamo far assumere ad un pin digitale valori diversi da ON/OFF. Per esempio per accendere un led con un'intensita' di luce tra il massimo (tutto acceso = ON) e il minimo (tutto spento = OFF). In questo caso sul pidino che controlla il led dobbiamo passare valori differenti da ON e OFF.

Per far questo si usa una tecnica di modulazione chiamata PWM (Pulse With Modulation).
In questo modo possiamo far assumere al pin digitale di arduino un qualsiasi valore compreso tra 0 (OFF) e 100 (ON).
Ad ogni valore corrisponde un'intesita' di luce del led diversa.

Potete trovare una descrizione del concetto di PWM qui

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. E' l'unione dei circuiti gia' realizzati per il led e per il potenziometro.

Abbiamo collegato il pin numero 9 di arduino, tramite il filo arancione, ad uno dei piedini della resistenza. L'altro piedino della resistenza e' collegato sul piedino positivo del led (anodo). Il piedino negativo del led (catodo) e' collegato indirettamente, tramite il filo nero, al pin GND (massa) di arduino (tramite la breadboard).

Abbiamo anche collegato il piedino centrale del potenziometro al pin analogico A0.

In questo modo quando ruoteremo il potenziometro la tensione sul piedino A0 variera' tra un valore di 0 e 100.
Useremo poi questo programma per accendere il led con una luce proporzionale a tale valore.




Programma Scratch

Crea questo script in Scratch usando il mouse







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





Imposta il Pin Analogio A0 come ingresso per legegre i valori del poteniometro ad esso collegato




Impostiamo il Pin 9 con uscita PWM.
 In questo caso possiamo solo usare i pin 3,5,6,9,10,11 o comunque quelli contrassegnati  con un tilde (~). Questi sono pin digitali speciali sui quali e' possibile impostare un valore qualsiasi tra 0 e 255 usando la tecnica PWM


Questo e' il ciclo principlae che viene eseguito per sempre. All'inizio devi creare una variabile chiamata luminosita. iniziamo il ciclo impostando il valore della variabile luminosita con il valore restituito dalla lettura del potenziometro (valore pin analogico (A) 0). A questo punto portiamo la luminosita' del ledA al valore contenuto nella variabile luminosita che ha sua volta e' il valore letto dal potenziometro. In questo modo al variare della posizione del potenziometro varia la luminosita' del ledA.
Notare che siccome il valore analogico assume valori tra 0 e 1023 sia necessario dividere il valore per 4 per portarlonel range 0 - 255


In questo modo abbiamo creato un programma che ha un input (il potenziometro) ed un output (il la luminosita' del led). Li abbiamo correlati tramite il software.

Faccio notare che questo circuito puo' essere implementato anche senza l'uso di Arduino, ma lo scopo e' di far comprendere l'uso dei pin PWM di arduino.






Complimenti!!! Con questo progetto hai imparato ad utilizzare i pin digitali ed analogici di Arduino in input e output.
Queste nozioni ti saranno utili in qualsiasi progetto arduino.










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.