Encenent LEDS amb Scratch+Raspberry Pi

Encenent LEDS amb Scratch+Raspberry Pi

La darrera actualització del sistema operatiu Raspbian per Raspberry Pi inclou la versió offline de Scratch 2.0 amb la que, a més de totes les funcionalitats d’aquesta eina (a la que podem accedir també a la versió en línia amb el navegador Chromium inclòs a Raspbian), podem interactuar amb el món físic a través dels pins GPIO de

M’interessa i l’he probat. Aquest és el resultat de la meva recerca, amb la RasPi connectada remotament amb el meu ordinador amb VNC:

L’accés a Scratch 2 es realitza des de l’escriptori, desplegant el menú “Programació“.
Un cop dins, cal afegir la llibreria Pi GPIO des del menú “Més Blocs“.
Un cop afegida l’extensió, dins d’aquest menú apareixen dos blocs: el primer permet definir l’estat de les sortides i el segon llegir l’estat de les entrades.

Pins GPIO. Esquema de connexions

Scratch utilitza la numeració de pins BCM (Broadcom SOC channel), que segueix un ordre que no té cap sentit per als humans. Qualsevol dels pins GPIO taronges en la imatge-xuleta de sota es pot utilitzar com entrada o sortida. [+ sobre els pins GPIO]

Per la meva recerca he utilitzat:
3 LEDs (connectats als pins físics 7 (GPIO.4), 36 (GPIO.16) i 38 (GPIO.20) i a un pin GND a través d’una resistència de 100 Ω*)
1 mòdul botó, connectat al pin 11 (GPIO.17), a un pin GND i alimentat per un pin 3V3*
1 brunzidor actiu, connectat al pin 40 (GPIO.21)

* Els pins GPIO proporcionen 3.3 V i no toleren tensions de 5V.

Proba1. Encesa intermitent de tres LEDs

Per no embolicar-me, he creat un bloc condicions inicials on he definit com a variables els números BCM corresponents al pin de connexió de cada LED.
Per encendre els LEDs només cal definir les sortides GPIO corresponents en high, i per apagar-los, en low. Aixó ho he fet als blocs personalitzats encén i apaga.
El paràmetre “temps” a la definició del bloc blink permet definir la freqüència d’intermitència quan es crida a la seva execució. En aquest cas 0,5 s.

Proba2. Senyal sonor en funció d’un sensor digital

Al programa anterior he afegit un brunzidor actiu que s’activa en prémer un polsador.
 Si utilitzem un sensor digital com el polsador, cal començar configurant el pin com entrada …
 … i definir el què volem que passi segons aquesta entrada sigui alta o baixa. El mòdul que he utilitzat funciona amb lògica inversa: el senyal d’entrada és alt quan no està premut i baix en prémer-ho).

Al vídeo es pot veure el resultat d’aquest programa. He aprofitat per afegir interacció amb l’escenari i el personatge de Scratch:

https://youtu.be/PXGkMUwF_Vw

Proba3. Control de la intensitat d’il·luminació

Tot i que el projecte Scratch GPIO està evolucionant, de moment amb els dos blocs de la llibreria Pi GPIO no podem, entre d’altres, generar senyals PWM (polsos), necessaris per controlar la intensitat d’il·luminació d’un LED.
Per ampliar possibilitats podem instal·lar l’extensió s2-pi, que conté un bloc que permet definir el valor PWM d’una sortida digital (entre 0 i 255), i un altre que permet definir la freqüència de vibració d’un brunzidor passiu.

s2_pi

El següent programa simula una espelma LED: assigna a un LED un valor aleatori de senyal PWM (luminositat) durant un temps també aleatori només quan un polsador està premut (senyal d’entrada 0 en el meu cas):

Provab. + coses … amb Scratch 1.4

De moment les funcionalitats més avançades d’ús dels GPIO amb Scracth estan desenvolupades a la versió 1.4 de Scracth (accés des del menú Programació amb la icona Scratch), que utilitza el protocol de sensors remots i consisteix en la definició de missatges que contenen instruccions en Python.

Scratch14

Segons la documentació oficial, podem inclús controlar motors i interactuar amb sensors analògics, inclús amb sensors d’ultrasons.
Aquesta és la meva prova per encendre tres LEDs intermitentment en prèmer un polsador: