Terza lezione in cui aggiungo alcuni esempi che suggeriscono alcune azioni di gioco che gli allievi del gruppo di lavoro dell’attività di PCTO: Arduino GamePad potranno sfruttare per la realizzazione del loro.
Esempio 1
Controllo dello spostamento del carattere:
destra/sinistra mediante i pulsanti: RIGHT e LEFT sul display
su/giù mediante i pulsanti UP/DOWN
Per realizzare queste azioni riprendiamo quanto realizzato nella lezione precedente aggiungendo all’ultimo sketch il controllo della pressione del pulsante UP o DOWN in cui viene controllato se l’analogRead sul A0 restituisce un valore comprese tra:
Controllo UP
(val >= 50 && val <= 150)
Controllo DOWN
(val >= 150 && val <= 300)
Lo spostamento del carattere dalla prima alla seconda riga deve essere fatta cancellando prima l’intero schermo, poi posizionando il carattere con il metodo setCursor() a cui si passa la variabile globale “contatorePosizioneColonna” che viene modificata di volta in volta alla pressione dei pulsanti RIGHT e LEFT. La selezione della riga avviene passando il valore 0 che identifica la prima riga e il valore 1 per la seconda riga.
In questo secondo esempio viene aggiunta una semplice matrice di cinque “X” che identificano degli ostacoli che devono essere superati. Nell’esempio esposto però gli ostacoli possono essere superati, lascio quindi a voi la realizzazione dello sketch che consente il blocco dell’avanzamento nel caso in cui ci si scontra con l’ostacolo.
// Attesa di un'istante per percepire il movimento del carattere
101
delay(velocita);
102
}
103
}
104
105
voidstampaOstacoli() {
106
lcd.setCursor(2, 0);
107
lcd.print("X");
108
lcd.setCursor(5, 1);
109
lcd.print("X");
110
lcd.setCursor(7, 1);
111
lcd.print("X");
112
lcd.setCursor(9, 0);
113
lcd.print("X");
114
lcd.setCursor(12, 0);
115
lcd.print("X");
116
}
Esercizio 1
Utilizzando l’esempio 2 esposto sopra, aggiungere la funzionalità che blocca l’avanzamento del carattere “*” nel caso in cui ci si scontra con l’ostacolo.
Esercizio 2
Definire tre matrici di ostacoli diversi e fare in modo che ad ogni avvio di Arduino la scelta della matrice venga fatta in modo casuale.
Esercizio 3
Aggiungere la funzionalità che permette di modificare la matrice degli ostacoli se si raggiunge l’ultima colonna a destra.
Esercizio 4
Definire tre scenari diversi costituiti da tre matrici ostacoli diversi. La navigazione può avvenire solamente all’interno di questi tre scenari. La partenza del carattere “*” avviene dalla colonna 0 del secondo scenario, il movimento dovrà essere il seguente:
partendo dalla colonna 0 del secondo scenario, la pressione del pulsante LEFT porta allo scenario 1 e il carattere “*” viene posizionato nella colonna 15 del display;
se si è nel secondo scenario in colonna 15, la pressione del pulsante RIGHT conduce alla colonna 0 del 3′ scenario;
la pressione del pulsante LEFT in colonna 0 del primo scenario non permette nessun cambiamento di scenario
la pressione del pulsante RIGHT in colonna 15 del terzo scenario non permette nessun cambiamento di scenario
Domanda dello studente: “Prof. il progetto per controllare il robot sta diventando lunghissimo e anche se commento ogni parte e cerco di creare funzioni specifiche per ogni azione, leggere modificare il codice diventa un lavoro che porta via molto tempo, come posso fare?”
utilizzare la funzione specifica che trovate nell’IDE di Arduino “Nuova scheda” o “New Tab” in inglese a destra della finestra.
Supponiamo di aver creato un nuovo sketch vuoto a cui assegniamo un nome, nel mio esempio “ilMioBlink.ino”, come sapete il file verrà inserito in una cartella che avrà lo stesso nome dello sketch principale:
Selezionare “New Tab” a destra della finestra dell’IDE:
noterete che la selezione di questa voce di menù aprirà in basso alla finestra dell’IDE un’area evidenziata in giallo in cui dovrete inserire il nome del file.
Inserirò a titolo di esempio il nome: “impostazioni”.
Verrà immediatamente aggiunta una nuova tab:
Appena salvate il progetto, il simbolo a fianco del nome scompare ed il nuovo file “impostazioni” verrà automaticamente inserito nella stessa cartella dello sketch principale.
Il salvataggio del progetto salva automaticamente tutte le variazioni fatte nei file allegati al progetto.
Si tenga presente che la lettura (esecuzione) dei file aggiunti avverrà in ordine alfabetico, pertanto se vengono usate variabili globali all’interno di uno dei file, queste potranno essere viste solamente dai file che seguono nell’ordine alfabetico, pertanto buona regola è inserire tutte le variabili globali nel progetto principale (quello che reca lo stesso nome della cartella di progetto).
Quindi si potrebbe pensare di strutturare un lungo progetto in questo modo:
tutte le variabili globali nello sketch principale;
impostazioni di setup() in un secondo file;
loop() nello sketch principale in cui sono incluse le chiamate alle funzioni esterne principali;
file con tutte le funzioni. Se le funzioni sono lunghe e complesse si potrebbe pensare di separarle in altri file.
Esempio
Come esempio consideriamo il semplicissimo sketch che permette di far lampeggiare ripetutamente due LED e dividiamolo in due parti:
Il file principale, ilMioBlink.ino avrà al suo interno variabili globali e loop(), mentre il file impostazioni avrà al suo interno solo il setup():
Bene!
Per i miei studenti, da questo momento in poi per rendere più veloce e semplice la correzione dei vostri lavori è obbligatorio suddividere sketch di grandi dimensioni in più file i vostri lavori 🙂
Sono felice di comunicarvi che svolgerò nel mese di aprile con Tecnica della Scuola il corso: Laboratori Steam con Arduino.
Sono più di 10 anni che utilizzo questa stupenda scheda, stupenda soprattutto perché mi ha permesso di recuperare negli anni molti ragazzi demotivati o con carenze di carattere logico matematico e tali mancanze pregiudicavano inevitabilmente la comprensione di argomenti che insegno: elettronica, informatica, sistemi elettronici.
Arduino nasce come scheda elettronica fatta per NON elettronici, una scheda che doveva servire prevalentemente per prototipare e quindi permettere a chiunque di superare lo scoglio della complessità elettronica ed informatica, almeno nella prima fase di apprendimento, per produrre un prodotto da utilizzare in diversi ambiti: design, medico, umanistico, ecc…
Successivamente si è constatato che l’uso di Arduino a scuola, in moltissime attività laboratoriali, risultava estremamente utile. Soprattutto nel mio caso Arduino ha permesso di trovare un ausilio didattico in grado di catalizzare interesse e passione da parte anche di chi aveva scarse competenze matematiche.
Quando l’azione didattica veniva condotta con precisione, l’uso di Arduino ha permesso di far comprendere allo studente che, se è relativamente facile realizzare progetti con forte interazione con il mondo reale, ancora più interessanti potevano diventare quegli stessi progetti se le competenze nelle discipline STEAM fossero state maggiori.
Con l’attività pratica basata su Arduino si fornisce un motivo in più per sopportare e superare l’insuccesso scolastico, sviluppando progetti pratici il cui funzionamento dipenderà dall’impegno e dallo studio, quindi lo studente, in modo evidente vede in Arduino l’oggetto che permette la materializzazione della propria competenza, cosa che non mi stancherò mai di dire e che più volte ho scritto su queste pagine. Se io studente conosco la fisica e la chimica probabilmente saprò gestire progetti che hanno a che fare con l’IoT, la fisiologia umana , le arti, l’economia e molto altro.
Come dico nella presentazione del corso:
Le attività laboratoriali di “fabbricazione digitale” che fanno uso di Arduino, favoriscono lo sviluppo delle competenze metacognitive e relazionali, potenziamento del pensiero logico, della capacità di astrazione e di problem solving.
ed aggiungo: la percezione che imparare è bello.
Quindi l’uso di Arduino diventa il pretesto per mettere in atto processi di analisi e autoanalisi e di messa in pratica di conoscenze e abilità.
Questa è ciò che ho visto e continuo a vedere durante le attività di laboratorio.
Ma è possibile che Arduino, una semplice scheda elettronica, possa fare tutto ciò?
Sì ne sono assolutamente convinto, l’evidenza si ha quando si vive il laboratorio ogni giorno, si percepisce negli studenti la sensazione che è bello imparare, perché imparare mi fornisce un immediato riscontro fisico di ciò che so e ciò che mi serve per far diventare “ancor più bello” il mio progetto.
Non si pensi assolutamente che Arduino è fatto per pochi addetti, non è l’oggetto che manipola solo l’insegnante di elettronica, è l’oggetto che usa l’insegnate di musica per far costruire strumenti musicali, è lo strumento che usa l’insegnate di arte per mostrare come creare installazioni di arte cinetica, è lo strumento che usano gli insegnanti di materie umanistiche quando vogliono sperimentare azioni di educazione civica in cui gli allievi devono progettare un ausilio per la disabilità per un loro compagno di classe, ma Arduino è anche lo strumento utilizzato costruire strumenti per comprendere i cambiamenti climatici.
Vorrei con questo corso farvi percepire come è semplice costruire progetti didattici laboratoriali trasversali, che coinvolgono tutte le discipline.
Spero di vedermi al mio corso, il primo di una serie di corsi a carattere assolutamente laboratoriale che svolgerò nei prossimi mesi con Tecnica della Scuola.
Non mi resta quindi che lasciarvi al programma del corso e sperare che insieme, durante le attività a distanza, si possano sviluppare oggetti fisici utili per voi.
E’ necessario disporre della scheda Arduino?
E’ consigliato, ma sarà possibile seguire assolutamente il corso anche se non si dispone della scheda, ma il mio consiglio è quello di mettere mani subito sugli oggetti fisici in modo che si assimilino più velocemente le nozioni di base. Vi fornirò tutte le indicazioni e i dettagli tecnici per sapere dove e cosa acquistare per cominciare il proprio percorso di apprendimento e impostare le lezioni laboratoriali per i vostri studenti.
Presentazione
LABORATORI STEAM CON ARDUINO
Come fare coding, tinkering e making a scuola
Come realizzare laboratori Steam utilizzando Arduino, una delle più affermate tecnologie open-source e open-hardware che sempre di più si sta affermando a scuola. Un corso per conoscere e approfondire le opportunità della robotica educativa e del coding. Il corso, combinando diverse tecnologie innovative, avrà un approccio assolutamente laboratoriale e fornirà tecniche ed idee per supportare l’apprendimento degli studenti favorendo in loro anche lo sviluppo dell’espressione personale e della creatività. Verranno mostrati esempi realmente sperimentati in classe in cui si evidenzieranno gli aspetti legati all’interdisciplinarietà e all’inclusione che hanno trovato largo impiego nella quotidianità scolastica.
Particolare attenzione verrà posta anche all’attività di sperimentazione pratica con Arduino in modalità di didattica digitale integrata utilizzando simulatori online e non solo.
L’intero corso è pensato per tutti gli insegnati, non è necessario in alcun modo avere competenze di elettronica o informatica e la proposta formativa è disegnata su un percorso testato da anni indirizzato a persone non tecniche in particolar modo ad insegnanti e studenti.
Cos’è Arduino:
Arduino è un hardware, una scheda elettronica di facilissimo utilizzo, e di basso costo
Arduino è un’ambiente di programmazione che permetterà di realizzare programmi che verranno poi eseguiti sulla scheda elettronica per la realizzazione molteplici progetti che potranno avere una forte interazione con il mondo reale;
Arduino è un sito ed una comunità online che condivide risorse e progetti utilissimi in campo didattico, soprattutto nelle attività che rientrano all’interno dell’insegnamento delle STEAM (Science, Technology, Engineering, Arts, Mathematics).
Perché usare Arduino nella didattica laboratoriale.
Il costo contenuto;
le dimensioni ridotte;
la semplicità di utilizzo;
la possibilità di sviluppare una vasta gamma di attività possibili data dalla notevole modularità della scheda;
una comunità di appassionati molto attiva tra cui moltissimi docenti.
L’uso di Arduino diventa un pretesto per mettere in atto processi di analisi e autoanalisi e di messa in pratica di conoscenze e abilità. Le attività laboratoriali di “fabbricazione digitale” che fanno uso di Arduino, favoriscono lo sviluppo delle competenze metacognitive e relazionali, potenziamento del pensiero logico, della capacità di astrazione e di problem solving.
Inoltre, uno degli ambiti che maggiormente viene svolto a livello laboratoriale è quello della robotica educativa. Durante il corso verranno forniti esempi e percorsi didattici completi immediatamente utilizzabili in classe, volti alla realizzazione di attività laboratoriali per la costruzione di robot didattici basati su piattaforma Arduino in cui verranno presi in considerazione le seguenti azioni:
come si pensa e si progetta in gruppo;
come si progetta un robot didattico;
come si realizza un robot con materiali riciclati;
come si programma il robot;
Durante il corso verranno forniti anche consigli sulle dotazioni tecniche necessarie per iniziare ad utilizzare questa piattaforma:
cosa comprare;
dove comprare;
come imparare ad utilizzare in modo semplice Arduino;
come avviare un laboratorio di STEAM in cui si fa uso di Arduino.
Saranno svolti 4 incontri in webinar di 2 ore ciascuno, per un totale di 8 ore.
Pubblico la seconda lezione per il gruppo di lavoro della mia classe terza Automazione che sta operando con lo shield LCD1602 Keypad Shield della Keyestudio, suggerendo alcuni sketch che potranno poi essere riutilizzati e modificati opportunamente per realizzare alcune dinamiche di gioco.
Per chi volesse cimentarsi in queste sperimentazioni ricordo che non è essenziale possedere LCD1602 Keypad Shield della Keyestudio, il tutto può essere ottenuto anche mediante un normale display, a questo dovrete aggiungere i 6 pulsanti che potranno essere connessi o al pin A0, secondo la rete resistiva che potete riprodurre guardando gli schemi elettrici della shield oppure gestendo il tutto collegando i pulsanti a dei pin digitali.
Esempio 01
Il primo degli sketch, molto semplice, permette di far rimbalzare avanti e indietro un carattere. Per questo esempio sono state utilizzate le funzioni: scrollDisplayRight() e scrollDisplayLeft() ciascuna inclusa in un ciclo for, il primo muove il carattere “*” verso destra di 16 posizioni, tante quante sono le colonne del display ed il secondo muoverà il carattere da sinistra verso destra.
// Attesa di un'istante per percepire il movimento del carattere
44
delay(velocita);
45
}
46
}
Esercizio 1
Realizzare le medesime funzionalità dell’esempio 1, quando il carattere giunge nell’ultima colonna a destra, scende nella riga sottostante e ripercorre il tragitto verso sinistra, giunto alla prima colonna a sinistra risale sulla prima riga e si sposta nuovamente verso destra. Far ripetere in loop questa sequenza.
Esempio 02
Nell’esempio che segue vengono utilizzati i pulsanti RIGHT e LEFT del display per spostare verso destra o verso sinistra di un passo il carattere “*”.
L’identificazione del pulsante premuto avviene controllando il valore numerico restituito dall’analogRead() così come spiegato nella lezione 1.
Le due istruzioni if hanno come condizione il controllo del valore analogico, che indicherà il pulsante premuto il tutto è posto in AND con la posizione attuale (la colonna) del carattere, colonna memorizzata nella variabile “contatorePosizioneColonna” che nello spostamento verso destra dovrà essere incrementata e nello spostamento verso sinistra dovrà essere decrementata.
Realizzare le stesse funzionalità dell’esempio 2 ed aggiungere la possibilità di selezionare il carattere da movimentare, mediante un menù iniziale in cui potrà essere fatta la selezione secondo lo schema di seguito indicato:
Pulsante SELECT: @
Pulsante DOWN : X
Pulsante UP : #
La selezione del carattere avviene una sola volta all’avvio del programma.
Esercizio 3
Eseguire le stesse funzionalità dell’esercizio 3 con la possibilità di visualizzare il menù di scelta carattere in qualsiasi momento, così da permettere la selezione del carattere da movimentare. Scegliere liberamente il pulsante da premere per visualizzare il menù.
Esempio 3
Nell’esempio che segue si mostra come movimentare da destra a sinistra due caratteri: da destra a sinistra “>” e da sinistra verso destra “<“. In questo esempio viene utilizzata il metodo setCursor() che permette di posizionare ad una colonna e riga specifica il cursore.
// Spostamento di una posizione verso sinistra del cursore
48
lcd.setCursor(contatorePosizioneColonna, 0);
49
// Stampa del carattere: >
50
lcd.print("<");
51
// Attesa di un'istante per percepire il movimento del carattere
52
delay(velocita);
53
}
54
}
Esercizio 4
All’interno del ciclo for, prima di posizionare e stampare il carattere, viene cancellato il display con il metodo clear(), sapresti indicare il motivo di questa scelta? Ci sono altri modi per ottenere il medesimo comportamento (movimento)?
Per la realizzazione della lezione sull’uso del PIR HC-SR501 pubblicato alcuni giorni fa, per lavorare agevolmente con il sensore ho creato un semplice supporto che poi ho stampato in più copie per le sperimentazioni di laboratorio di Sistemi a scuola. Non appena ho pubblicato il post ho ricevuto alcune mail da parte di colleghi e studenti che mi hanno chiesto i sorgenti grafici del supporto.
Potete prelevare i file per la stampa 3D direttamente dalla mia pagina su Thingiverse: PIR HC-SR501 support