La lezione 12 vuole segnare una sorta di spartiacque tra quanto visto finora e quanto vedremo in seguito.

Oggi ci confronteremo con alcuni limiti della versione ScratchGPIO, cercando di trovare delle soluzioni.

Vedremo alcuni comandi nuovi ed impareremo ad installare la versione Scratch2GPIO (che aggiunge poco a quanto visto finora ma…..

Nelle successive lezioni impareremo ad utilizzare il sensore ad ultrasuoni, i motori, fino al sensore di gas e impareremo qualcosa in più su alcuni componenti elettronici.

Ribadisco che la mia intenzione non è quella di insegnare la programmazione (pur interessante) ma di svolgere attività ad ampio respiro e che tocchino la matematica, la fisica, le Scienze in generale.

 

Iniziamo!

  1. Temperatura e sensore di temperatura

Il software ScratchGPIO in sostanza è un client che si interfaccia con Python. L’autore ha creato delle apposite funzioni su Python che sono state poi convertite nei broadcast che abbiamo visto nelle lezioni precedenti. Volendo è possibile trovare su github il codice modificabile ed aggiungere ulteriori comandi a vostro piacimento https://github.com/cymplecy/scratch_gpio

Tra i comandi interessanti vi è quello che permette di leggere la temperatura sia del Pc Raspberry sia da un sensore esterno.

Il comando per leggere la temperatura del processore è gettempcpu, esso creerà subito una variabile all’interno dei sensori.

Leggere la temperatura interna può essere interessante sia per vedere una possibile correlazione tra processi , uso della memoria e temperatura (se utilizzo dei dissipatori, cosa accade?), sia per costruire l’algoritmo che converte la temperatura interna nelle opportune scale di misura.

E’ possibile anche leggere la temperatura da un sensore esterno , anche se solo se si utilizza il modello ds180 oppure il ds18b20 (anche noto come sondino, che mostro nella foto sottostante) allora funziona correttamente.

Il comando da utilizzare è broadcast gettemp, che creerà una apposita variabile nel comando sensori che sarà la temperatura + il pin dove è posto il sensore stesso. (NB se usiamo il linguaggio italiano il comando broadcast corrisponde al blocco invia a tutti…)

Consiglio di porre il sensore sul pin7, anche se in automatico gettemp trova su quale pin è posto il sensore.

Lo schema di collegamento è il seguente:

dove anche una resistenza da 10kOhm va bene.

Con un sensore di temperatura si apre un mondo da indagare.

Potremmo studiare la curva di riscaldamento o raffreddamento di un corpo oppure la variazione di temperature in reazioni chimiche o ancora studiare la relazione che esiste (se esiste) tra temperatura e colore di una lampada, oppure wattaggio o tipo di lampada (se al neon , alogena etc.) o anche realizzare un pannello solare a temperatura controllata…..

 

2 Il sensore di luminosità (fotoresistenza)

Una fotoresistenza è un componente elettronico la cui resistenza varia in relazione all’intensità luminosa incidente.

Qui inizia un problema non di poco conto. I pin di Raspberry sono digitali, sostanzialmente leggo 0 oppure 1. La lettura di una fotoresistenza richiede invece un pin analogico.

In questa lezione non vedremo come rendere analogici i pin digitali utilizzando un componente esterno , ma piuttosto lo costruiremo noi e partendo dalla fisica.

Seguitemi!!!

Quando avevo 12 anni rimasi affascinato da un componente elettrico detto condensatore (o capacità)

Per farvi capire meglio di cosa si tratta pensiamo ad una molla (elastico), man mano che allunghiamo o accorciamo una molla, essa immagazzinerà energia , energia che viene rilasciata se lasciamo il dito che la tiene allungata o compressa . Un elastico è quindi un accumulatore di energia.

Pensiamo ora ad un piano inclinato e facciamo cadere una pallina lungo esso. L’energia (energia cinetica) con cui arriverà a terra la pallina dipende dall’altezza da cui viene lasciata cadere, si usa anche dire che ad una altezza h la pallina avrà una sua energia immagazzinata detta potenziale.

Anche una pallina su  un piano inclinato  può essere vista come un accumulatore di energia, che viene liberata sotto forma di velocità, un piano inclinato è un “accumulatore di energia di tipo cinetico (velocità)”.

In natura troviamo molti fenomeni in cui incontriamo accumulatori, ma anche tanti dove l’energia viene dissipata. E’ il caso dell’attrito oppure della stessa resistenza.

Una resistenza è un dissipatore di energia.

Nel caso dell’elettronica i fenomeni sono connessi a forze elettriche e le energie in gioco sono quindi di tipo elettrico.

L’energia elettrica per unità di carica (come dire la massa di un corpo per unità di volume= densità) prende il nome di potenziale (i famosi volt). Noi tendiamo a confondere l’energia con il potenziale, è vero sono strettamente legati ma concettualmente differenti.

Immaginiamo di prendere due lamine metalliche e di caricare una ad un potenziale 200 (per analogia 200 potrebbe essere l’altezza del piano) e l’altra ad un ptenziale 80 (per analogia 80 potrebbe essere l’altezza da terra della base del piano inclinato). Abbiamo creato una differenza di potenziale di 120 (Volt) , in sostanza è come se avessimo realizzato un piano inclinato con un dislivello di 120 (metri) oppure avessimo compresso una molla di 120 (metri centimetri fate voi).

Il sistema elettrico così ottenuto si chiama condensatore.  Esso è un accumulatore di energia , e si riempie di cariche elettriche.

Perchè ci torna utile per il nostro sensore di luminosità? (le foto che seguono sono prese da https://www.raspberrypi.org/learning/physical-computing-with-python/ldr/ dove è possibile trovare anche una interessante spiegazione teorica ed alcuni codici di programmazione).

Ritorniamo ai pin analogici e digitali.

Un pin digitale leggerà tutti i segnali sopra 1.8V come alti, 1, e i restanti come bassi o 0.

Un pin analogico leggerà tutti i valori intermedi tra 0 e 3,3V (massima tensione su un pin di raspberry):

ponendo ai capi del condensatore una differenza di potenziale esso inizierà a “caricarsi” , ma se mettiamo in serie ad esso una resistenza lo farà più lentamente,. all’aumentare della resistenza (è il noto circuito RC).

Poniamo in serie ad un condensatore (io ho usato uno da 10microFarad) una fotoresistenza.

Il circuito di collegamento per Raspberry è il seguente:

In sostanza la carica e la scarica del condensatore dipenderanno dalla resistenza e quindi dalla intensità di luce incidente. La differenza di potenziale tra terra e GPIO4 varierà in base alla luce incidente, abbiamo così reso analogico un pin digitale.

Domanda stimolo:

Cosa cambia (al valore letto sul pin) se vario la capacità in particolare se la aumento o la diminuisco?

Purtroppo sebbene numerosi tentativi, non sono riuscito a far leggere il valore tra 0 e 1 con ScratchGPIO, perchè segna o sempre 0 oppure 1….provate voi, ma intanto vi lascio il codice Python:

  from gpiozero import LightSensor, Buzzer

  ldr = LightSensor(4)  # 4 è il gpio4 ma potete cambiare il numero in base al vostro Pin o GPIO
  while True:
      print(ldr.value)

Scopriremo in una successiva lezione come utilizzare componenti elettroniche per rendere analogici i pin, però questo è stato un pretesto per parlare di Scienze, anche se non siamo riusciti a farlo con Scratch e per questo l’attività è consigliabile per la scuola secondaria.

 

Uno spunto progettuale?

provate a convertire in suono il valore letto dalla fotoresistenza, potrete realizzare un sistema di comunicazione con la luce…..

 

3 Installare Scratch 2 su Raspberry

Su segnalazione di Antonio Mancuso http://mancusoa74.blogspot.it/2017/07/s2pi-programmare-raspberry-pi-usando.html che mi ha invitato ad installare Scratch 2 su raspberry, riporto la procedura per installare Scratch2GPIO, sicuramente più completa ed in linea con quella che sto utilizzando nelle mie leizoni.

Per l’installazione cliccare da terminale:

sudo apt-get install scratch2

poi

wget https://git.io/vQsDn -O isgh8dev.sh

e poi

sudo bash isgh8dev.sh

 

a questo punto ci troviamo sul Desktop le icone della versione Scratch 2.

Apriamo ScratchGPIO 8DevPlus  che tante estensioni

Cliccare su add extensions in More block e spuntare raspberry

 

A questo punto ci siete…

 

La sorgente è su github

https://github.com/cymplecy/Scratch2GPIO

 

Parleremo in altre lezioni di Scratch Client e di soluzioni per poter interfacciare o modificare Scratch a nostro piacimento.

Note a margine

Intro

Il RPi (Raspberry Pi) ha la capacità di eseguire una serie di funzioni elettriche elettroniche, come la lettura di dati digitali da un interruttore a pulsante elettrico, il controllo di un motore a corrente continua e LED lampeggianti. L’unica funzione elettronica che non è in grado di fare è la lettura di segnali elettrici e dati da un dispositivo analogico. Sebbene il RPi abbia una moltitudine di strutture GPIO, HDMI, jack audio, LCD e connettori per fotocamere, non è in grado di leggere i segnali analogici perché manca un circuito ADC ( analogico-digitale ). Il cablaggio di un ADC al RPi è abbastanza facile da fare, ma c’è un’altra tecnica che può essere utilizzata per leggere segnali elettrici analogici o dati: qui si impara a leggere i segnali elettrici da un dispositivo analogico con un RPi utilizzando un circuito RC.

 

Figura 1 . I componenti elettronici, il circuito e l’hardware richiesti per la costruzione del circuito di interfaccia del dispositivo analogico

 

Elenco delle parti del progetto

 

Lettura di dati analogici

Come accennato brevemente nell’introduzione, il RPi non è in grado di leggere segnali analogici elettrici o dati. Il motivo per cui non è in grado di leggere tali segnali o dati è perché il microcontrollore BCM (Broadcom) di RPi non dispone di un circuito ADC incorporato nel suo substrato di silicio. Due metodi alternativi che permettono al RPi di leggere i segnali analogici elettrici sono quello di collegare un IC ADC esterno (il MCP3008 ) o utilizzare un semplice circuito di carica e scarica. In questo progetto, si  è utilizzato  un circuito di carica-scarica per leggere i segnali analogici elettrici. Il circuito di carica-scarico consente di leggere i dati continui da parte del RPi utilizzando una tecnica di risposta a passo. La tecnica di risposta a passo funziona osservando come un circuito RC (resistore-condensatore) risponde ad una commutazione di impulso elettrico da una transizione di segnale da basso a alto entro un determinato intervallo di tempo. Il comportamento di risposta elettrica del circuito RC è basato sulla carica e scarica del condensatore che riceve un impulso elettrico o un segnale di fase. La Figura 2 mostra un modello di circuito elettrico di un circuito RC di base. Il segnale a passo applicato e la risposta di carica-scarico del circuito sono mostrati nelle figure della forma d’onda della Figura 3. 

 

 

Figura 2.  Un circuito RC di base utilizzato nella tecnica Step Response. NOTA: R2 è il dispositivo analogico che fornisce i valori del segnale continuo per il circuito.

 

 

 

Figura 3.   Il segnale di impulso di ingresso passo [blu: V (1) (V)] e la risposta di carica-scarico del circuito RC [V (3) (V)]

 

Inoltre, come mostrato in Figura 3, il segnale di impulso di ingresso a passo viene applicato al circuito RC per 5 ms (millisecondi). Durante questo tempo il condensatore (C1) viene caricato attraverso le resistenze R1 e R2. Una volta che il condensatore è completamente caricato, al bordo di caduta del segnale di impulso passo il condensatore scarica attraverso la resistenza R3. Il tempo di scarica è impostato per 1 ms. Questo caricamento e scarico del condensatore può essere eseguito utilizzando il codice Python implementato su un RPI. Poiché si verifica questo ciclo continuo di caricamento e scarico, viene utilizzato un contatore software Python per fornire un valore continuo equivalente dei dati del dispositivo analogico da leggere da RPi. Il valore del contatore software viene costantemente aggiornato e visualizzato in base al codice di applicazione principale in fase di ciclo continuamente. Le figure 4 e 5 mostrano i circuiti di ricarica e di scarico cablati ai perni GPIO 18 e 23 di RPi.

 

Figura 4.   Interfaccia del circuito di caricamento del condensatore RPi C1.

 

 

 

Figura 5.  Interfaccia del circuito di scarico del condensatore RPi C1.

 

Con una conoscenza di base di come leggere i segnali analogici elettrici oi dati utilizzando la tecnica di risposta a passi sotto le nostre cinghie, costruiamo un circuito di interfaccia analogica del dispositivo RPi!

 

   Codice di simulazione Micro-Cap

 

Costruire un circuito di interfaccia periferiche analogiche RPi

Con i componenti elettronici ottenuti dall’Elenco parti del progetto, è ora possibile collegare il circuito di interfaccia dispositivo analogico RPi. Seguendo le posizioni dei componenti mostrate in Figura 6, collegare il circuito di interfaccia dispositivo analogico RPi su un alimentatore senza saldatura. Come riferimento di cablaggio aggiuntivo, ho incluso uno schema elettrico del circuito di interfaccia.

 

Figura 6. Diagramma di collegamento dell’interfaccia dispositivo analogico.

 

Figura 7 . Schema schematico del circuito analogico del dispositivo.

 

 

 

Figura 8 . Il circuito integrato di interfaccia dispositivo montato costruito su un alimentatore senza saldatura.

Prima di passare alla fase di prova del circuito di interfaccia dispositivo analogico, verificare gli errori di cablaggio. Se non si dispone di errori di cablaggio, carichiamo un codice Python per controllare il circuito di interfaccia dispositivo analogico al RPi.

 

 

 

 

Se siete interessati alla carica e scarica di un condensatore, guardate la mia lezione , fatta con Arduino:

Carica e scarica di un condensatore con Arduino: un percorso didattico di programmazione e fisica

Vai alla barra degli strumenti