La programmazione di Arduino con S4A è un software libero sviluppato dallo Smalltalk Programming Group del Citilab di Barcellona che amplia l ambiente di sviluppo di Scratch con nuovi blocchi che permettono di programmare un oggetto virtuale Arduino al fine di gestire i sensori e gli attuatori connessi alla scheda reale. Un firmware apposito installato sulla scheda Arduino permette a S4A, attraverso il protocollo Picoboard, di inviare ogni 75 ms comandi agli attuatori, di ricevere lo stato dei sensori e di far girare fino a 4 servomotori. I passi per installare correttamente S4A sono i seguenti: 1. Scaricare dall indirizzo http://seaside.citilab.eu/scratch/downloads il software s4a e il firmware necessario per la comunicazione con la scheda Arduino 2. Installare S4A 3. Dopo aver collegato la scheda alla porta USB, aprire l ambiente di sviluppo di Arduino e impostare il modello della scheda (es. Arduino Uno dal menu Tools Board) e la seriale corrispondente alla porta USB alla quale è collegato Arduino (menu Tools Serial Port) 4. Aprire il file che contiene il firmware e eseguire l upload su Arduino. Il file che contiene il firmware deve essere contenuto in una cartella con lo stesso nome (es. S4AFirmware12.pde deve essere contenuto nella cartella S4AFirmware12); chiudere l IDE di Arduino. 5. Aprire S4A; se il firmware è stato caricato correttamente, accanto allo sprite Arduino 1 compare lo Scratch Board Watcher che visualizza i valori che vengono letti sugli ingressi analogici e digitali A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 1 -
Blocchi per l interazione con Arduino S4A ripropone esattamente l ambiente di Scratch; la differenza è nella categoria di blocchi Movimento, all interno della quale sono stati inseriti i seguenti blocchi che permettono l interazione con Arduino: testa il valore numerico dei sensori collegati ai 6 ingressi analogici (Analog1 pin A0 Analog6 pin A5) testa lo stato (true/false) di un pulsante collegato a uno dei due ingressi digitali corrispondenti ai pin 2 (Digital1) e 3 (Digital2) imposta a 1 le uscite digitali corrispondenti ai pin 10, 11 o 13 imposta a 0 le uscite digitali corrispondenti ai pin 10, 11 o 13 imposta un valore numerico compreso tra 0 e 255 sulle uscite corrispondenti ai pin 5, 6 o 9 aziona i servomotori collegati alle uscite 4, 7, 8 o 12 in senso orario o antiorario spegne i servomotori collegati alle uscite 4, 7, 8 o 12 gestione dei servomotore collegati alle uscite digitali 8 e 12 accende / spegne tutti i servomotori collegati mostra / nasconde lo sprite Arduino 1 sullo stage muove lo sprite Arduino 1 nel punto indicato dalle coordinate Per inviare comandi alla scheda, occorre scrivere uno o più script associati allo sprite Arduino che si trova in S4A; lo Scratch Board Watcher (che può essere nascosto) visualizza lo stato dei 6 ingressi analogici e degli ingressi digitali corrispondenti ai pin 2 e 3 (Digital1 e Digital2). Nel caso in cui non ci sia un sensore collegato a un ingresso, il valore rilevato sarà fluttuante nel caso degli ingressi analogici e FALSE nel caso degli ingressi digitali. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 2 -
Tinker Kit Arduino Sensor Shield Il Sensor Shield v.2 permette di connettere i SENSORI e ATTUATORI TinkerKit direttamente alla scheda Arduino, senza ricorrere all'uso della breadboard. Ha 12 connettori TinkerKit a 3 pin su due file. Quelli marcati da I0 a I5 sono Ingressi Analogici. Sul lato superiore quelli marcati da O0 a O5 sono Uscite Analogiche connesse alle uscite PWM della scheda (é possibile però utilizzare queste uscite come uscite digitali, sulle quali è possibile impostare un valore HIGH o LOW) secondo il seguente schema: Pin Arduino Uscita sul Sensor Shield 11 O0 10 O1 9 O2 6 O3 5 O4 3 O5 Descrizione del Modulo: un led verde segnala che lo shield é correttamente alimentato, ed un bottone da 6mm permette di resettare la scheda. La presa TWI 4 pin permette alla scheda di comunicare con qualunque tipo di dispositivo che supporti il protocollo I2C attraverso la libreria Wire di Arduino. 5V e GND sono presenti sulla presa, insieme a SDA (I4) e SCL (I5). Su ogni scheda Arduino il bus I2C utilizza gli ingressi analogici 4 e 5; usare la connessione TWI preclude l'utilizzo dei connettori I4 e I5 presenti sullo shield. La presa SERIAL da 4 pin permette alla scheda di comunicare con altri dispositivi che supportino la comunicazione serial. 5V e GND sono presenti sulla presa, insieme a TX ed RX. Nota Bene: se si stanno mandando o ricevendo dati da o verso un computer la connessione seriale non funzionerà nei confronti di altri dispositivi. Sensori I sensori hanno il connettore in output che deve essere connesso ai connettori in input del TinkerKit Shield. TinkerKit PushButton Il Pushbutton Module è il sensore più semplice che ci sia. Percepisce la pressione effettuata sul suo cappuccio circolare. Output: questo modulo restituisce 5 V quando il bottone è premuto e 0 V quando non lo è. Tenendo premuto il bottone si chiude il circuito. Se connesso ad un A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 3 -
input di Arduino che usa il TinkerKit Shield, a bottone premuto il valore dovrebbe essere 1023, rilasciandolo verrà restituito 0. Descrizione del Modulo: questo modulo dispone di: un bottone di 12mm, un connettore TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato e un LED giallo che si accende solo quando si preme il bottone. TinkerKit LDR Sensor LDR (Fotoresistenza) è un resistore variabile; la resistenza varia a seconda della luce percepita dal sensore. Output: questo modulo restituisce 5V quando il sensore non riceve luce (il circuito è aperto) e 0V quando viene esposto alla luce (il circuito è chiuso). Se connesso ad un input di Arduino che usa il TinkerKit Shield, i valori dovrebbero essere tra 0 e 1023. Descrizione del Modulo: questo modulo dispone di: un Light Dependent Resistor, un amplificatore di segnale, un connettore TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità varia a seconda della quantità di luce a cui è esposto il sensore. TinkerKit Tilt Sensor Il Tilt Sensor riesce a percepire una rotazione di 180 sull'asse orizzontale. Output: questo modulo dispone di due contatti ed una piccola sfera di metallo. Quando il sensore si trova nella posizione corretta la sfera collega i due contatti, chiudendo il circuito. Quando il sensore è inclinato, la sfera si muove ed il circuito si apre. Nella posizione corretta il modulo restituisce 5V mentre ne restituisce 0V significa che é stato capovolto. Se connesso ad un input di Arduino che usa il TinkerKit Shield, il valore corrispondente alla posizione corretta sarà 1023 mentre dovrebbe essere 0 quando è inclinato. Descrizione del Modulo: questo modulo dispone di: un Tilt Sensor, un amplificatore di segnale, un connettore TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo che si illumina quando si stabilisce la connessione (il sensore è dritto). TinkerKit Thermistor Module Il Termistore è un resistore la cui resistenza varia significativamente, più che per i resistori standard, a seconda della temperatura. Output: il segnale restituito da questo modulo raggiunge i 5V quando la temperatura aumenta. Se la temperatura diminuisce si avvicina a 0V. Se connesso ad un input di Arduino che usa il TinkerKit Shield, i valori dovrebbero variare tra 0 e 1023 (NB: qualsiasi cambiamento dei valori sarà molto lento) Descrizione del Modulo: Questo modulo consta di: un termistore, un amplificatore di segnale, un connettore TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità dipende dalla temperatura. TinkerKit 2/3 Axis Accelerometer Un Accelerometro è un dispositivo in grado di misurare l accelerazione. È molto comune nel campo dell elettronica di consumo (dispositivi elettronici portatili e videogames) in quanto permette di rilevare il movimento. Output: questo modulo restituisce da 0 a 5V su ciascuno dei suoi due canali quando varia la forza G (quando cioè è in movimento). A 0G sugli assi X o Y corrisponde approssimativamente un valore di 2.5V. Se connesso ad un input di A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 4 -
Arduino attraverso il TinkerKit Shield il valore restituito dal modulo in movimento potrà variare tra 0 a 1023. Descrizione del Modulo: sul retro del modulo si trovano 2 amplificatori di segnale ed un LED verde che segnala che il modulo è correttamente alimentato. Il modulo è basato sul LIS344AL di ST Microelectronics, ed è un accelerometro a tre assi. È possibile ottenere informazioni riguardanti il terzo asse (Z) saldando un filo sul pin marcato "Z". TinkerKit Hall Sensor Un Sensore di Hall fa si che il voltaggio restituito dipenda dai campi magnetici da lui rilevati. Può essere utilizzato per rilevare la distanza da un magnete vicino. Un Sensore di Hall può inoltre essere utilizzato per rilevare i campi magnetici indotti in un filo o in una bobina. Input: questo modulo restituisce 5V quando un campo magnetico (per esempio un corpo umano) si trova nei pressi del sensore e 0 quando non c è nulla nelle vicinanze. Se connesso ad un input di Arduino che usa il TinkerKit Shield i valori variano tra 0 (nessuna presenza) e 1023. Descrizione del Modulo: un magnete al neodimio è montato su un scheda TinkerKit. Sul retro del modulo si trovano: un amplificatore di segnale, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità dipende dai valori di output del modulo. NB: sulla superficie del sensore vi sono alcuni contatti elettrici esposti: per questo motivo, al fine di evitare un corto circuito, è bene evitare di toccare la scheda con oggetti metallici. TinkerKit Rotary Potentiometer Un Potenziometro è un comune resistore variabile: muovendo la manopola il voltaggio varia da 0 a 5V, valore che viene restituito dal pin centrale del potenziometro. Output: Questo modulo restituisce 0 o 5v a seconda della posizione della manopola/levetta (0 ad un estremo, 5V all estremo opposto). Se connesso ad un input di Arduino che usa il TinkerKit Shield, i valori dovrebbero essere tra 0 e 1023. Descrizione del Modulo: questo modulo consta di: un potenziometro lineare da 4,7 KOhm, un amplificatore di segnale, un connettore standard TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità cambia a seconda della posizione del potenziometro. TinkerKit Linear Potentiometer Un Potenziometro è un comune resistore variabile: muovendo lo slider il voltaggio varia da 0 a 5V, valore che viene restituito dal pin centrale del potenziometro. Output: Questo modulo restituisce da 0 a 5v a seconda della posizione dello slider (0 ad un estremo, 5V all estremo opposto). Se connesso ad un input di Arduino che usa il TinkerKit Shield, i valori dovrebbero essere tra 0 e 1023. Descrizione del Modulo: questo modulo dispone di: un potenziometro lineare da 4,7 KOhm, un amplificatore di segnale, un connettore TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità cambia a seconda della posizione del potenziometro. Il Touch Sensor è sensibile al tocco. TinkerKit Touch Sensor Input: questo modulo normalmente restituisce 0V ma, se toccato, restituisce 5V. Quando è connesso ad un input di Arduino attreaverso il TinkerKit Shield, restituirà "0" se non toccato, "1023" se toccato. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 5 -
Decsrizione del Modulo: sul retro del modulo si trovano un amplificatore di segnale, un condensatore, un QT 100A single touch, un LED verde che segnala che il modulo è correttamente alimentato ed un LED giallo la cui luminosità dipende dai valori di output del modulo. Questo dispositivo esegue un autocalibrazione quando viene acceso, per questo motivo se qualcuno dovesse toccare la superficie dell interruttore durante l accensione lo stesso non funzionerebbe. Per resettarlo consigliamo di interrompere l'alimentazione assicurandosi che nessuno lo tocchi durante l accensione. TinkerKit Joystick Il Modulo Joystick è simile ai joystick dei videogiochi: consiste in due potenziometri montati a formare un angolo di 90 gradi, collegati ad una barra centrata da due molle. Output: questo modulo restituisce approssimativamente 2.5 volt a entrambi gli output quando si trova nella posizione di riposo. Il movimento della barra permette di variare la restituzione da 0 a 5V a seconda della direzione. Se connesso ad un input di Arduino che usa il TinkerKit Shield il valore corrispondente alla posizione di riposo dovrebbe essere 512 (sono però possibili piccole variazioni dovute alla leggera imprecisione della molla e del meccanismo); muovendo il joystick i valori variano da 0 a 1023 a seconda della posizione. Descrizione del Modulo: questo modulo dispone di: due potenziometri lineari da 4,7 KOhm, due amplificatori di segnale, due connettori TinkerKit a 3 pin, un LED verde che segnala che il modulo è correttamente alimentato e due LED gialli la cui luminosità dipende dai valori di output del modulo. Attuatori Gli attuatori hanno il connettore in input che deve essere connesso ai connettori in output del TinkerKit Shield. TinkerKit Led 5 e 10 mm Il LED non é altro che il più semplice degli attuatori e si accende quando alimentato da un pin di Arduino. Input: Arduino ha un uscita massima di 40mA per pin, abbastanza per accendere un LED attraverso le funzioni digitalwrite() e analogwrite() Descrizione del Modulo: questo modulo consta di: un LED da 5mm o da 10 mm, il connettore TinkerKit da 3 pin, un LED verde che segnala se il modulo é correttamente alimentato ed un piccolo LED giallo che mostra la quantità di elettricità che illumina il LED verde in quel momento. La resistenza a bordo protegge il LED dai 5V di Arduino. TinkerKit Power LED Il Power LED é un attuatore attraverso il quale 5 LED ultra-luminosi sono controllati da un pin di Arduino. Input: Arduino ha un uscita massima di 40mA per pin: abbastanza per accendere un LED attraverso le funzioni digitalwrite() e analogwrite() Descrizione del Modulo: Questo modulo consta di: AWT801-S LEDs della Seoul Semi Conductor, il connettore TinkerKit da 3 pin, un LED verde che segnala se il modulo é correttamente alimentato ed un piccolo LED giallo che mostra la quantità di elettricità che illumina il LED rosso in quel momento. La resistenza a bordo protegge il LED dai 5V di Arduino TinkerKit Modulo Relay Un relé é un interruttore comandato elettronicamente che permette di aprire o chiudere un circuito con voltaggi e correnti più alte di quelle che Arduino può A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 6 -
gestire. Non c'é connessione tra il circuito a basso voltaggio di Arduino e quello del circuito che viene controllato. Warning: sconsigliamo l'utilizzo di questo modulo per il pilotaggio di circuiti superiori ai 24V senza la supervisione di un esperto. Input: il relè è un semplice interruttore meccanico on/off. Si attiva quando l input raggiunge i 5V e si disattiva quando l input è 0V. Può essere controllato attraverso la funzione digitalwrite() di Arduino. Il modulo fornisce tre connessioni denominate COM, NC e NO. NC sta per NORMALMENTE CHIUSO. Ciò significa che quando il relè non riceve segnale (LOW o 0V da Arduino), il circuito connesso è aperto; se invece vengono applicati 5V o definito il pin HIGH, il circuito connesso è chiuso. NO sta per NORMALMENTE APERTO, e funziona al contrario: se si applicano 5V il circuito è aperto mentre viene chiuso con 0V. I relè possono sostituire gli interruttori manuali. Rimuovete i cavi dell'interruttore e inseriteli nei morsetti COM e NO. Quando il relè è attivato il circuito è chiuso e la corrente può raggiungere il dispositivo che si sta controllando. Descrizione del Modulo: questo modulo dispone di: un relé a 250V e 10A montato su una scheda TinkerKit da due unità, del connettore TinkerKit a 3 pin, di un amplificatore di segnale, un LED verde che segnala se il modulo é correttamente alimentato ed un piccolo LED giallo che si accende quando il relé é attivo. TinkerKit Modulo Mosfet Questo modulo permette di controllare quantità di corrente più alte di quelle che Arduino può gestire, usando un transistor di potenza. Diversamente da un relé meccanico, il Mosfet può essere pilotato ad alte velocità, perfetto quindi per essere controllato dal PWM di Arduino. Output: Questo modulo permette di controllare dispositivi operanti ad un massimo di 24V DC con un pin di Arduino. Per connettere il modulo, collegate l'alimentazione del vostro dispositivo (max 24V) ai morsetti marcati con V+ e GND. Connettete il dispositvo che volete controllare ai morsetti M+ ed M-. Fate attenzione alla polarità del vostro circuito: potrebbe danneggiare il dispositivo se invertita. Descrizione del Modulo: questo modulo é composto da: un IRF520 transistor MOSFET di potenza, un diodo di protezione, il connettore TinkerKit a 3 pin, un amplificatore di segnale, un LED verde che segnala se il modulo é correttamente alimentato ed un piccolo LED giallo che mostra la quantità di elettricità che sta passando attraverso il transistor. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 7 -
Esercitazioni S4A con il TinkerKit 01. Blinking I led vanno collegati alle uscite O0 e O1 del Sensor Shield. Blink di un led collegato a O0 Blink di due led collegati a O0 e O1 Blink a intermittenza di due led collegati a O0 e O1 con visualizzazione su monitor dello stato dei led Blink a frequenza variabile di un led collegato a O0 Invio di SOS luminoso: tre punti, tre linee, tre punti 02. Accensione di un led con un pulsante Il pulsante deve essere collegato a I0, il led a O0. Quando il pulsante viene premuto il led si accende, quando viene rilasciato il led si spegne. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 8 -
03. Interruttore A differenza dell esercizio precedente, il pulsante si comporta come un interruttore; pertanto, ad ogni pressione del pulsante il led cambia stato. Come nell esercizio 1, può essere aggiunto uno sprite che replica sul monitor il funzionamento del led. 04. Conteggio in binario Due led collegati a O0 e O1 rappresentano rispettivamente il bit meno significativo e il bit più significativo di un numero binario. Il conteggio avanza quando si preme il pulsante collegato a I0; quando arriva a 3, si riparte da 0. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 9 -
05. Lampione Simula il funzionamento di un lampione. Il sensore di luce collegato a I0 determina in modo inversamente proporzionale la luminosità del led collegato a O2, che corrisponde al pin 9 (uscita PWM che simula un uscita analogica). 06. Movimento di una pallina con un joystick La pallina viene fatta muovere dai movimenti del joystick collegato a I0 e I1. La direzione (alto-basso-destrasinistra) viene recepita dallo sprite che corrisponde alla pallina dal valore della variabile condivisa dir. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 10 -
07. Pacman semplice Videogioco Pacman semplificato: con il joystick si muove lo sprite Pacman che deve toccare lo sprite Bersaglio, nel qual caso viene totalizzato un punto. Lo sprite Bersaglio cambia posizione ogni 4 secondi oppure quando viene toccato dallo sprite Pacman; il gioco finisce quando vengono raggiunti i 10 punti. All interno dello sfondo finale vengono visualizzati i secondi impiegati per raggiungere i 10 punti. Scirpt dello Stage Sfondo Sfondo dello stage Sfondo fine dello stage Script dello sprite Pacman Script dello sprite Bersaglio A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 11 -
08. Space invaders Videogioco che consiste nel muovere un astronave sul lato inferiore dello schermo cercando di colpire con dei razzi un bersaglio che si muove dall alto verso il basso. Il gioco termina quando si colpiscono 10 bersagli. L astronave viene mossa da uno slider collegato a I1 e il razzo viene sparato con il pulsante collegato a I0. Script dello sprite Arduino Stage Script dello sprite Astronave Script dello sprite Razzo Script dello sprite che fa comparire la scritta Hai vinto Script dello sprite Bersaglio A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 12 -
Esempi di esercitazioni con la breadboard 01. Lampeggio di un led Il circuito comprende un led con l anodo collegato al pin digitale 13 attraverso una resistenza da 220 Ω e il catodo collegato a massa: il led potrebbe essere collegato direttamente a Arduino perché il pin 13 è protetto internamente da una resistenza. Il lampeggio del led si ottiene con uno script associato allo sprite Arduino1, che consiste in un ciclo che termina quando si preme la barra spaziatrice; all interno del ciclo si imposta a 1 l uscita digitale 13, si attende mezzo secondo, si imposta a 0 l uscita digitale 13 e si attende nuovamente per mezzo secondo. 02-03. Accensione di un led con un pulsante Il circuito comprende un led collegato al pin 13 e un pulsante. Un pin del pulsante viene collegato a massa tramite una resistenza da 10 KΩ, il pin opposto al pin 2 di Arduino e il pin adiacente a 5V; la pressione del tasto viene testata con il blocco Sensor Digital 1 pressed?. Nella prima versione del programma, quando il pulsante è premuto il led si accende e quando viene rilasciato il led si spegne; in sostanza lo stato del pulsante determina l impostazione del valore del pin 13 a 1 o a 0. L attesa di 100 millisecondi realizza la funzione antirimbalzo del pulsante. Nella seconda versione, ogni volta che si preme il pulsante si determina il cambiamento dello stato del led. Per ottenere questo comportamento, si utilizzano 3 variabili: pushstate, che memorizza lo stato del pulsante (premuto o rilasciato), ledstate, che memorizza lo stato del led (acceso o spento) e oldstate, che viene inizializzata all inizio di ogni ciclo e che memorizza lo stato del pulsante al ciclo precedente. Viene testato lo stato del pulsante e viene effettuato un test per capire se lo stato del pulsante è variato rispetto al ciclo precedente; se è variato e nel caso in cui sia stato premuto il pulsante (e non rilasciato), allora se il led era acceso viene spento e, viceversa, se era spento allora viene acceso. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 13 -
04. Accensione di un led RGB con un pulsante Il circuito comprende un led RGB a catodo comune: il catodo viene collegato a massa e gli anodi che corrispondono ai colori blu, verde e rosso sono collegati rispettivamente, attraverso una resistenza di pull-up da 220 Ω, alle uscite digitali 13, 11 e 10. Un pin del pulsante viene collegato a massa tramite una resistenza da 10 KΩ, il pin opposto al pin 2 di Arduino e il pin adiacente a 5V; la pressione del tasto viene testata con il blocco Sensor Digital 1 pressed?. Il codice associato allo sprite Arduino1 viene eseguito quando si fa clic sulla bandiera verde. Inizialmente si impostano a 0 le uscite digitali 13, 11 e 10 in modo da spegnere il led RGB. Si entra in un ciclo che termina quando si preme la barra spaziatrice all interno del quale ad ogni pressione del tasto si imposta a 0 un uscita digitale collegata al led e si imposta a 1 un altra uscita: in questo modo, ad ogni pressione del tasto il led cambia colore. I due blocchi attendi fino a quando consecutivi hanno lo scopo di gestire correttamente la pressione del tasto: non si esce dalla seconda attesa finchè il tasto non viene rilasciato. Circuito con 3 led Le tre esercitazioni seguenti utilizzano il circuito riportato in figura: le uscite digitali 13, 11 e 10 sono collegate rispettivamente all anodo dei led verde, giallo e rosso attraverso una resistenza di pull up da 220 Ω; il catodo dei tre led è collegato all ingresso Gnd di Arduino. 05. Semaforo Il circuito riproduce il ciclo di funzionamento di un semaforo contemporaneamente sullo stage e sui led del circuito. Quando si fa clic sullo sprite Go, i tre sprite colorati sullo stage e i tre led sul circuito lampeggiano contemporaneamente per tre volte; dopo questa fase iniziale, il semaforo ripete all infinito il ciclo di funzionamento rosso verde giallo e verde. Gli sprite utilizzati e il codice collegato sono i seguenti: Sprite Avvio : quando si fa clic sullo sprite Avvio, viene inviato per tre volte un messaggio accendi a tutti gli sprite; dopo due secondi entra nel ciclo infinito di funzionamento del semaforo che consiste nell invio in sequenza a tutti gli sprite dei messaggi rosso, verde e A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 14 -
giallo. Il blocco invia a tutti e attendi invia un messaggio e attende che tutti gli script degli altri sprite collegati alla ricezione del messaggio siano terminati prima di eseguire il blocco successivo Sprite Rosso : quando riceve il messaggio spegni nasconde lo sprite e attende mezzo secondo, mentre quando riceve il messaggio accendi mostra lo sprite e attende mezzo secondo. Quando riceve il messaggio rosso mostra lo sprite per 4 secondi e poi lo nasconde. Sprite Verde : quando riceve il messaggio spegni nasconde lo sprite e attende mezzo secondo, mentre quando riceve il messaggio accendi mostra lo sprite e attende mezzo secondo. Quando riceve il messaggio verde mostra lo sprite per 4 secondi e poi lo nasconde; il messaggio spegniverde serve a nascondere lo sprite contemporaneamente allo sprite Giallo. Sprite Giallo : quando riceve il messaggio spegni nasconde lo sprite e attende mezzo secondo, mentre quando riceve il messaggio accendi mostra lo sprite e attende mezzo secondo. Quando riceve il messaggio giallo mostra lo sprite per 2 secondi e in seguito nasconde lo sprite, dopo aver inviato il messaggio spegniverde per nascondere contemporaneamente lo sprite Verde. Sprite Arduino1 : gli script associati ai messaggi che lo sprite riceve eseguono le seguenti azioni: spegni : imposta al valore logico 0 le uscite digitali 13, 11 e 10 collegate rispettivamente ai led verde, giallo e rosso. rosso : imposta a 1 l uscita 10 (led rosso), attende 4 secondi e poi imposta a 0 l uscita 10. verde : imposta a 1 l uscita 13 (led verde) e attende 4 secondi senza poi impostare a 0 l uscita 13 (il verde deve rimanere accesso contemporaneamente al giallo). giallo : imposta a 1 l uscita 11 (led giallo), attende 2 secondi, invia il messaggio spegniverde e poi imposta a 0 l uscita 11. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 15 -
06. Accensione in sequenza di tre led L esecuzione inizia facendo clic sulla bandiera verde: sullo stage compaiono i tre sprite Rosso, Giallo e Verde. La sequenza di accensione dei led viene determinata facendo clic sugli sprite corrispondenti; quando si vuole riprodurre sul circuito costruito sulla breadboard e contemporaneamente sullo stage la sequenza data in input, è sufficiente fare clic sullo sprite Vai. La sequenza di accensione dei led viene memorizzata in una variabile di tipo lista. Gli sprite utilizzati e il codice collegato sono i seguenti: Sprite Gatto : quando si fa clic sulla bandiera verde, cancella i dati eventualmente memorizzati nella variabile di tipo lista led e visualizza un testo che invita a procedere all input della sequenza. Quando riceve il messaggio fine visualizza sullo stage un messaggio che indica che la sequenza è stata riprodotta sui led e ferma l esecuzione. Sprite Arduino1 : quando si fa clic sulla bandiera verde, nasconde lo sprite Arduino1 e imposta a 0 le uscite digitali collegate ai led. Gli script associati ai messaggi che lo sprite può ricevere verdeled, gialloled e rossoled - impostano al valore logico 1 le uscite digitali collegate rispettivamente ai led verde, giallo e rosso, attendono 1 secondo e poi impostano le uscite a 0. Sprite Giallo, Rosso e Verde : quando si fa clic su uno dei tre sprite, viene inserito all ultimo posto della variabile di tipo lista led il nome dello sprite. Gli script associati ai messaggi che lo sprite può ricevere eseguono le seguenti azioni: spegni : nasconde lo sprite accendi : mostra lo sprite <nome sprite> : mostra lo sprite <nome sprite> per 1 secondo, lo nasconde e invia un messaggio allo sprite Arduino1 per accendere il led corrispondente. Sprite Vai : quando si fa clic sulla bandiera verde nasconde lo sprite e, quando riceve il messaggio accendi, lo sprite viene mostrato. Quando si fa clic sullo sprite, esamina tutti i valori caricati nella variabile led e per ogni valore trovato invia a tutti gli sprite il messaggio corrispondente ( rosso, giallo o verde ). A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 16 -
07. Conversione in binario di un numero compreso tra 0 e 7 Il programma esegue la conversione in binario di un numero compreso tra 0 a 7. Il numero binario viene visualizzato con le 3 cifre binarie presenti sullo stage e contemporaneamente con l impostazione dei 3 led corrispondenti ognuno a un bit. Anche in questo caso viene utilizzata una variabile di tipo lista di tre elementi che conterrà i tre bit del numero in binario. Sprite Gatto : quando si fa clic sulla bandiera verde, richiede in input un numero compreso tra 0 e 7. Nel caso in cui il valore in input risulti errato, visualizza una segnalazione di errore e richiede nuovamente il numero. Quando il numero è corretto, cancella l eventuale contenuto della variabile di tipo lista e entra nel ciclo che implementa l algoritmo della conversione di un numero da base 10 a base 2: partendo dall elemento di indice 3 della variabile di tipo lista bit, vengono memorizzati successivamente i resti delle divisioni successive per 2 fino a quando il risultato della divisione non è uguale a 0. Un ulteriore ciclo imposta a 0 gli eventuali bit rimanenti; a questo punto viene inviato un messaggio accendi a tutti gli sprite. Sprite Arduino1 : quando si fa clic sulla bandiera verde, nasconde lo sprite e imposta al livello logico 0 le uscite digitali 13, 11 e 10 provocando lo spegnimento dei tre led. Alla ricezione del messaggio accendi, esamina ogni elemento della variabile di tipo lista bit e, se trova un elemento uguale a 1, imposta a 1 l uscita collegata al led di peso corrispondente provocandone l accensione. Sprite Bit2, Bit1 e Bit0 : quando si fa clic sulla bandiera verde, nasconde lo sprite. Alla ricezione del messaggio accendi, ognuno di questi sprite esamina l elemento corrispondente della variabile di tipo lista bit: se trova l elemento uguale a 0 imposta il costume dello sprite a 0, in caso contrario lo imposta a 1. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 17 -
Analog1 che corrisponde all ingresso A0. 08. Space invaders Il circuito comprende anche un pulsante, un pin del quale viene collegato a massa tramite una resistenza da 10 KΩ, il pin opposto al pin 2 di Arduino e il pin adiacente a 5V; la pressione del tasto viene testata con il blocco Sensor Digital 1 pressed?. Questa esercitazione realizza un semplice gioco ispirato al celeberrimo Space invaders: da una navicella che si muove in senso orizzontale vengono sparati dei razzi che devono colpire oggetti che cadono dall alto dello stage. Quando vengono colpiti 10 oggetti il gioco termina e viene visualizzato il tempo impiegato. Il circuito connesso a Arduino comprende uno slider (o in alternativa un potenziometro), che serve per muovere la navicella sullo stage, con i piedini collegati rispettivamente a 5V, all ingresso analogico A0 e a massa; il movimento del cursore fa variare la tensione che viene convertita in un valore numerico compreso tra 0 e 255 e letta da S4A attraverso il sensore N.B.: quando il razzo viene sparato, il pulsante deve essere mantenuto premuto fino al raggiungimento del bersaglio; non appena il pulsante viene rilasciato, il razzo sparisce. Gli sprite utilizzati e il codice collegato sono i seguenti: Sprite Arduino1 : quando si fa clic sulla bandiera verde, lo sprite viene nascosto. Il ciclo che costituisce il codice collegato allo sprite testa alternativamente l ingresso analogico collegato allo slider (Analog1) e quello digitale collegato al pulsante (Digital1); quando viene raggiunto un punteggio pari a 10, si esce dal ciclo. il valore (compreso tra 0 e 1023) letto dall ingresso collegato allo slider viene caricato nella variabile pz visibile da tutti gli sprite e, se è stato premuto il pulsante (test sull ingresso Digital1), viene inviato a tutti gli sprite il messaggio spara. Sprite Astronave : le variabili time e punti devono essere impostate nella modalità di visualizzazione grande. Quando si fa clic sulla bandiera verde, viene fatto partire il cronometro il cui valore viene assegnato alla variabile time, viene azzerata la variabile punti e entrambe vengono visualizzate. Nel ciclo seguente, che termina quando i punti sono pari a 10, si gestisce lo spostamento dello sprite adattando il valore letto attraverso l ingresso analogico collegato al potenziometro (compreso tra 0 e 1023) all intervallo - 255..+255 che rappresenta i valori sull asse x dello stage; ad ogni ciclo la variabile time viene riassegnata al cronometro. Quando viene raggiunto un punteggio uguale a 10, viene nascosto lo sprite e inviato un messaggio fine a tutti gli altri sprite. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 18 -
Sprite Razzo : quando si fa clic sulla bandiera verde lo sprite viene nascosto con l effetto fantasma. Alla ricezione del messaggio spara lo sprite viene posizionato immediatamente sopra la navicella, viene fatto ricomparire e viene fatto scivolare in verticale finchè esce dallo stage; alla fine dello spostamento, lo sprite viene nuovamente nascosto. Alla ricezione del messaggio fine, lo sprite viene nascosto. Sprite Bersaglio : quando si fa clic sulla bandiera verde, viene impostata un attesa di 3 secondi. Nel ciclo che termina quando il punteggio raggiunge 10, lo sprite viene nascosto con l effetto fantasma e viene posizionato in modo casuale sulla parte superiore dello stage. La posizione verticale dello sprite viene decrementata di 1 fino a quando non si raggiunge la parte inferiore o non si tocca lo sprite Razzo. Lo sprite viene nascosto e, se la posizione verticale del bersaglio è superiore al valore -120 definito come bordo inferiore dello stage, il punteggio viene incrementato. Sprite Fine : quando si fa clic sulla bandiera verde, lo sprite viene nascosto. Quando viene ricevuto il messaggio fine, lo sprite ricompare e viene mostrata la scritta Hai vinto!. A cura del prof. Vaschetto Francesco - IIS Vallauri Fossano (CN) francesco.vaschetto@vallauri.edu - 19 -