Archivi tag: coding

I miei corsi per Tecnica della Scuola: creare un kit di robotica educativa a basso costo – 3′ edizione

Terza edizione del richiestissimo corso sulla realizzazione di kit robotici a basso costo per la didattica.
Su richiesta degli utenti in questa nuova edizione aggiungerò nuove proposte in cui mostrerò come con micro:bit è possibile realizzare robot seguilinea. Fornirò inoltre nuove proposte per la scuola primaria di primo grado e molto altro.

Come sempre tutti i kit didattici che fornirò saranno corredati di:

  • progetti grafici da realizzare a scelta con cartone o stampa 3D
  • programmi di funzionamento e schede didattiche da utilizzare in classe

Quindi fornirò istruzioni e documentazione per i kit mostrati nelle edizioni precedenti e i nuovi sviluppati in questi ultimi mesi.

Nel caso abbiate richieste specifiche sulla realizzazione di un vostro progetto non esitate a contattarmi, sarò ben lieto di aiutarvi.

Saranno svolti 3 incontri in webinar di 2 ore ciascuno, per un totale di 6 ore

  • Martedì 8 febbraio 2022 – Dalle 17.00 alle 19.00
  • Martedì 15 febbraio 2022 – Dalle 17.00 alle 19.00
  • Martedì 22 febbraio 2022 – Dalle 17.00 alle 19.00

Presentazione del corso

Mediante una metodologia laboratoriale, si forniranno competenze digitali finalizzate alla realizzazione di robot didattici a bassissimo costo permettendo al docente si strutturare un percorso di base per avvicinare gli studenti ai principi della programmazione e della robotica.
Il corso si sviluppa in 3 moduli e permetterà di costruire un robot partendo da zero.

  1. Il primo modulo introduce all’uso di BBC micro:bit ed alla programmazione con Blocks Editor, un tool grafico che semplifica l’utilizzo della scheda elettronica che controllerà il robot;
  2. Il secondo modulo introduce all’utilizzo modellazione 3D con TinkerCAD che permetterà di stampare in 3D le proprie creazioni, oppure generare i progetti necessari per realizzare i robot con compensato o cartone;
  3. Il terzo modulo mette insieme le due competenze consentendo la costruzione ed il controllo del proprio robot didattico.

Per maggiori informazioni sulle modalità di iscrizione e sui contenuti del corso seguite il link.

Buon lavoro 🙂

Attività STEAM con Scratch 3

Il corso guida a sviluppare in autonomia un percorso laboratoriale con attività Steam di Coding basato su Scratch 3 secondo modalità attive e inclusive attraverso la realizzazione di giochi interattivi, esperimenti scientifici sfruttando le nuove funzionalità di interfacciamento con dispositivi elettronici specificatamente pensati per la didattica, di facile utilizzo, che possono essere inseriti nelle discipline STEAM (Scienze, Tecnologia, Ingegneria, Arte e Design, Matematica).

Scratch è uno degli strumenti più interessanti per sviluppare attività di Coding, è un linguaggio di programmazione a blocchi, gratuito, che insegna a studenti di ogni età le basi della programmazione in una modalità creativa dando spazio ad immaginazione attraverso la produzione di programmi con forte contenuto interattivo. In Scratch l’utente si troverà ad assegnare funzionalità ad oggetti grafici mediante la realizzazione di programmi costituiti da blocchi grafici funzionali tra essi connessi ed i programmi agiscono su elementi grafici disegnati dall’utente oppure su dispositivi hardware connessi al computer e comandati attraverso Scratch 3.

Si analizzeranno in modo specifico istruzioni per manipolare applicativi e hardware esterno con cui gli studenti potranno programmare dispositivi fisici come BBC micro:bit, Lego Mindstorms EV3, Lego WeDo 2.0, Makey Makey, ma anche servizi web come come Google Traduttore.
Verranno forniti indicazioni per realizzare attività di scienze e matematica, ma anche realizzazione di giochi interattivi che interagiscono con il mondo reale, realizzazione di sperimentazioni in realtà aumentata e costruzione di attività per studenti con necessità specifiche.

Verranno fornite schede di lavoro, immediatamente spendibile in classe, che guideranno il docente alla sviluppo di esercitazioni con possibilità di personalizzazione in funzione delle esigenze didattiche.
L’intero processo di formazione sarà supportato da una piattaforma di formazione on-line appositamente predisposta, a cui saranno iscritti tutti i partecipanti al corso. In questo modo potranno essere rese disponibili risorse, schede di lavoro e lezioni.

Saranno svolti 4 incontri in webinar di 2 ore ciascuno, per un totale di 8 ore

  • Lunedì 6 dicembre 2021 – Dalle 17.00 alle 19.00
  • Martedì 7 dicembre 2021 – Dalle 17.00 alle 19.00
  • Lunedì 13 dicembre 2021 – Dalle 17.00 alle 19.00
  • Martedì 14 dicembre 2021 – Dalle 17.00 alle 19.00

Per maggiori informazioni sui contenuti del corso e iscrizione seguire il LINK.

Vi aspetto al mio corso 🙂

Creare un kit robotico educativo a basso costo – 2′ edizione


Dopo il successo della prima edizione sono felice di annunciarvi che questa settimana proporrò la seconda edizione del corso: Creare un kit robotico educativo a basso costo. Mostrerò nuovi robot realizzati in cartone controllati da BBC micro:bit. Darò inoltre indicazione su effettuare il controllo con Arduino e Raspberry Pi.

Come in ogni corso che svolgo verranno forniti sorgenti grafici per la realizzazione dei robot e schede didattiche di programmazione che potranno essere utilizzate in classe con gli studenti.

Presentazione del corso:

Mediante una metodologia laboratoriale, si forniranno competenze digitali finalizzate alla realizzazione di robot didattici a bassissimo costo permettendo al docente si strutturare un percorso di base per avvicinare gli studenti ai principi della programmazione e della robotica.
Il corso si sviluppa in 3 moduli e permetterà di costruire un robot partendo da zero.

  1. Il primo modulo introduce all’uso di BBC micro:bit ed alla programmazione con Blocks Editor, un tool grafico che semplifica l’utilizzo della scheda
    elettronica che controllerà il robot;
  2. Il secondo modulo introduce all’utilizzo modellazione 3D con TinkerCAD che permetterà di stampare in 3D le proprie creazioni, oppure generare i
    progetti necessari per realizzare i robot con compensato o cartone;
  3. Il terzo modulo mette insieme le due competenze consentendo la costruzione ed il controllo del proprio robot didattico.

Saranno svolti 3 incontri in webinar di 2 ore ciascuno, per un totale di 6 ore

  • Venerdì 19 novembre 2021 – Dalle 17.00 alle 19.00
  • Lunedì 29 novembre 2021 – Dalle 17.00 alle 19.00
  • Martedì 30 novembre 2021 – Dalle 17.00 alle 19.00

Per maggiori informazioni sui contenuti del corso e modalità di iscrizione seguire il link allegato.

Arduino – misurare tensioni superiori a 5V dc utilizzando un partitore di tensione

Nella precedente lezione abbiamo visto come misurare una tensione non superiore ai 5V dc, vedremo ora come realizzare un semplice circuito che permette mediante un partitore di tensione la misurazione di tensioni fino a 9 Volt. Dimensionando opportunamente le resistenze di partizione potremo effettuare misure per tensioni elettriche superiori.

Precisazione importante

Gli esempi riportati in questa e nella precedente lezione ed inoltre la gran parte degli esempio classici che trovate online, sono pensati per far comprendere il funzionamento del convertitore A/D, ma è opportuno fare alcune considerazioni sulla precisione di lettura, ovvero degli errori commessi dal convertitore A/D e sull’imprecisione delle tensioni di riferimento usate dal microcontrollore per fornirvi la misura. Questo sarà argomento di una prossima lezione e vedremo come ridurre l’errore di misura.

Per rendere semplice la realizzazione utilizzeremo la batteria da 9V, ma se intendete avere dei limiti di misura diversi e superiori a 9V dovrete apportare modifiche ai valori dei componenti, ma le formule esposte restano le medesime.

Prima di procedere con la realizzazione pratica è essenziale comprendere come dimensionare le resistenze del partitore, inoltre è essenziale che la tensione sul pin analogico A0 non superi il valore di 5V. Per effettuare il dimensionamento del circuito fissiamo la massima tensione misurabile Vmis_max  a 9V e imponiamo il valore di uno dei due resistori, ad esempio R1 in modo da poter ricavare il valore di R2.

Vi ricordo inoltre che sarebbe opportuno, una volta fissate le resistenze, fare qualche considerazione sulla corrente massima entrante in A0 in modo che non venga superato il valore di 40 mA corrente massima di I/O sui pin analogici e digitali di Arduino Uno R3, ma come le resistenze che sono state scelte non correremo alcun rischio, però esporrò ugualmente il calcolo.

Nello schema che segue Vmis rappresenta la tensione da misurare, Vadc la tensione sul pin A0. I è la corrente totale che circola nel circuito.

Sappiamo che la tensione Vadc ai capi di R2 non dovrà superare i 5V. Le tensioni su R1 ed R2 saranno:

(a) VR1 = R1*I
(b) VR2 = R2*I

Pertanto la tensione Vmis sarà

(c) Vmis = VR1 + VR2 = R1*I+R2*I = (R1+R2)*I

da cui ricaviamo:

(d) I = Vmis /(R1+R2)

Sostituendo I in (a) e (b) avremo:

(e) VR1 = R1*I = R1 * Vmis /(R1+R2)
(f) VR2 = R2*I = R2 * Vmis /(R1+R2)

Per il calcolo di R2 consideriamo la formula (f) sostituendo i valori fissati, Vmis_max e R1, ricordando che VR2 è la tensioni in A0, cioè Vadc:

⇒ VR2 =  R2 * Vmis /(R1+R2)

⇒ R2 /(R1+R2)  = VR2/Vmis_max

⇒ R2 /(R1+R2)  = 5/9

⇒ R2 /(R1+R2)  = 0,56

⇒ R2  = 0,56*R1 + 0,56*R2

⇒ R2*(1-0,56) = 0,56*R1

⇒ R2 = 0,56 *R1/0,44

⇒ R2 = 0,56 * 27 * 103/0,44 = 34,363 * 103 = 34,363 Kohm

Scelgo come valore commerciale prossimo (e che dispongo nel mie scorte) il valore di 33 Kohm, quindi:

  • R1 = 27 Kohm
  • R2 = 33 Kohm

Per quanto riguarda la corrente entrante in A0, utilizziamo la formula (b):

VR2 = R2*I

I = VR2/R2

I = 5V/33000 Ω = 0,00015 A = 0,15 mA

ben al di sotto del valore massimo del valore accettabile su un pin I/O di Arduino che è di 40mA.

Schema di collegamento

Programmazione

Sviluppiamo il codice necessario per la lettura della tensione e partendo dal primo sketch della lezione precedente modifichiamone alcune parti, nei commenti la spiegazione delle varie parti.

Nel codice bisognerà tenere in conto che la tensione su A0 è data dal calcolo della partizione di tensione, pertanto sapendo che Vmis = Vadc, dalla forma (f) abbiamo:

⇒ VR2 = R2*I = R2 * Vmis /(R1+R2)

⇒ VR2 = Vadc = R2 * Vmis /(R1+R2)

⇒ Vmis = Vadc * (R1+R2)/R2

Che sarà la formula che ci consentirà di rilevare la misura.

// Prof. Maffucci Michele
// Esempio 01: Misura una tensione di 9V con Arduino
// utilizzando variabili di tipo float
// Data: 03.10.2021

// tensione di riferimento massima misurabile
const float tensioneDiRiferimento = 5.0;

float R1 = 27000.0; // 27 Kohm
float R2 = 33000.0; // 33 Kohm

float volt_adc = 0.0;
float volt_mis = 0.0;

void setup() {
  Serial.begin(9600);
  //analogReference(DEFAULT);
}
void loop() {
  // legge il valore su A0 (su R2), cioè la tensione Vadc e lo trasforma
  // in un valore numerico tra 0 e 1023
  
  int valoreLetto = analogRead(A0);

  // Tensione in ingresso ad A0, cioè la tensione Vadc
  // calcolo della proporzione
  // volt:tensioneDiRiferimento = valoreLetto:1023.0
  // da cui si ricava la formula che segue
  
  volt_adc = (valoreLetto/1023.0) * tensioneDiRiferimento;

  //Stampa del valore letto dall'ADC
  Serial.print("Valore ADC = ");
  Serial.println(valoreLetto);
  
  // calcolo della tensione di ingresso Vmis

  volt_mis = volt_adc*(R1+R2)/R2;

  // stampa sulla Serial Monitor la tensione misurata
  Serial.print("Tensione di ingresso = ");
  Serial.println(volt_mis);
  Serial.println(" ");

  delay(1000);
}

Esercizi per i miei studenti

Esercizio 1
Dimensionare il Circuito per misurare una tensione massima di 12V

Esercizio 2
Realizzare uno sketch Arduino che permette di dimensionare il circuito prendendo in  input, attraverso la Serial Monitor il valore massimo misurabile ed il valore di R1 e restituisce il valore di R2 calcolato.

Esercizio 3
Realizzare le medesime funzionalità dell’esercizio 2, ma il valore restituito di R2 deve essere sia quello calcolato che quello commerciale immediatamente superiore o inferiore al valore calcolato.

Buon Coding a tutti 🙂

Raspberry Pi Pico – controllare lo stato di un pin digitale

Propongo in questa breve lezione due esempi di base sull’uso del Raspberry Pi Pico: identificare lo stato di un pulsante e realizzazione di un interruttore mediante un pulsante.

Per questo esempio utilizzeremo il pin 14 a cui connetteremo un pin del pulsante, così come rappresentato nell’immagine che segue. Come sapete molti dei pulsanti disponibili nei kit elettronici sono costituiti da 4 pin, connessi frontalmente a due a due.
Proseguiamo connettendo il secondo pin del pulsante al positivo sulla breadboard (3,3V). Ricordiamoci inoltre la connessione del 3,3V del PiPico al positivo della breadboard.

E’ molto importante ricordare che una simile connessione del pulsante con il PiPico potrebbe causare problemi di cortocircuito alla pressione del pulsante, perché non presente una resistore di PULL-UP o di PULL-DOWN fisico. Per evitare di utilizzare un resistore, attiviamo la resistenza di PULL-DOWN sul pin 14, ATTENZIONE ricordate di fare questa operazione altrimenti rischiate di distruggere irrimediabilmente  il vostro microcontrollore.

Aprite l’editor Thonny e digitate il seguente programma:

# Prof. Maffucci Michele
# Controllo dello stato sul pin 14 (una sola volta)
# 18.09.2021

# libreria che permette di utilizzare MicroPython con il RaspyMicro
import machine

# creazione dell'oggetto pulsante che include il pin 14 impostato come input
# su cui viene attivata il resistore di PULL-DOWN
pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

# la lettura del pulante viene fatta usando l'API machine
# usando la funzione value

print(button.value())

Salvate il programma sulla vostra scheda, assegnate ad esempio il nome pulsante1.py
Se mandate in esecuzione il programma lo stato del pin verrà mostrato immediatamente sulla Shell una sola volta.

Se non premete il pulsante verrà mostrato sulla Shell il valore logico 0 in quanto abbiamo utilizzato una resistenza di PULL-DOWN, nel momento in cui, all’avvio premete il pulsante lo stato logico visualizzato sulla Shell sarà 1.

Per leggere lo stato del pulsante in modo continuo bisognerà aggiungere un loop all’interno del programma che segue che chiameremo pulsante2.py

# Prof. Maffucci Michele
# Controllo dello stato sul pin 14 (in modo continuo)
# 18.09.2021

# libreria che permette di utilizzare MicroPython con il RaspyMicro
import machine

# per la gestione del tempo
import utime

# creazione dell'oggetto pulsante che include il pin 14 impostato come input
# su cui viene attivata il resistore di PULL-DOWN
pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

# la lettura del pulante viene fatta usando l'API machine
# usando la funzione value

# while True definisce un loop infinito al cui interno
# troviamo il controllo dello stato del pulsante
while True:
    # se la condizione è vera viene stampato
    # il messaggio mediante la print
    # e fermato il programma per 1 secondi
    if pulsante.value() == 1:
        print("Hai premuto il pulsante")
        utime.sleep(1)

Premete sul pulsante di Run nell’IDE, vedrete che fino a quando non premete il pulsante non accade nulla. Non appena il pulsante viene premuto viene stampata sulla Shell la strina “Hai premuto il pulsante”.

Attenzione che senza la brevissima pausa di 1 secondo verrebbe stampato continuamente il messaggio “Hai premuto il pulsante”.

Vedrete quindi la stampa del messaggio ogni secondo. Se mantenete premuto il pulsante per un tempo superiore a 1 secondi verrà stampato nuovamente il messaggio e ciò si ripeterà ogni secondo fino a quando non rilasciamo il pulsante.

Vediamo ora un programma che, oltre ad inviare un messaggio sulla Shell, accende un LED esterno connesso al pin 15 ogni volta che premiamo il pulsante, chiamiamo il programma pulsante3.py.

# Prof. Maffucci Michele
# Controllo dello stato sul pin 14 (in modo continuo)
# eaccensione di un led alla pressione del pulsante
# 18.09.2021

# libreria che permette di utilizzare MicroPython con il RaspyMicro
import machine

# per la gestione del tempo
import utime

# creazione dell'oggetto pulsante che include il pin 14 impostato come input
# su cui viene attivata il resistore di PULL-DOWN
pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

#pin 15 dichiarato come OUTPUT
ledEsterno = machine.Pin(15, machine.Pin.OUT)

# while True definisce un loop infinito al cui interno
# troviamo il controllo dello stato del pulsante
while True:
    # se la condizione è vera viene stampato
    # il messaggio mediante la print
    # e fermato il programma per 1 secondi
    if pulsante.value() == 1:
        ledEsterno.value(1)    # imposta il livello logico 1 sul pin 15
        print("Hai premuto il pulsante")
        utime.sleep(0.5)       # imposta una pausa di mezzo secondo
        ledEsterno.value(0)    # imposta il livello logico 0 sul pin 15

Vediamo ora come realizzare un programma che realizza la funzione di un interruttore, cioè il mantenimento dello stato al rilascio del pulsante. Chiamiamo il programma interruttore1.py. Il circuito è il medesimo dell’esempio al passo precedente.

# Prof. Maffucci Michele
# realizzazione di un interruttore 
# mediante pulsante connesso al Pin 14 con antirimbalzo software
# con accensione di un LED connesso al pin 15
# 18.09.2021

# libreria che permette di utilizzare MicroPython con il RaspyMicro
import machine

# per la gestione del tempo
import utime

# creazione dell'oggetto pulsante che include il pin 14 impostato come input
# su cui viene attivata il resistore di PULL-DOWN
pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

#pin 15 dichiarato come OUTPUT
ledEsterno = machine.Pin(15, machine.Pin.OUT)

# val usato per conservare lo stato del pulsante
val = 0

# vecchio_val per conservare lo stato del pulsante al passo precedente
vecchio_val = 0

# ricorda lo stato in cui si trova il LED,
# stato = 0 led spento, stato = 1 led acceso
stato = 0

# while True definisce un loop infinito al cui interno
# troviamo il controllo dello stato del pulsante
while True:
    val = pulsante.value()                   # legge il valore del pulsante e lo conserva
    if (val == 1) and (vecchio_val == 0):    # controlla se è accaduto qualcosa
        stato = 1 - stato
        utime.sleep(0.15)	             # attesa di 15 millisecondi
    vecchio_val = val;
    if (stato == 1):
        ledEsterno.value(1)    # imposta il livello logico 1 sul pin 15
    else:
        ledEsterno.value(0)    # imposta il livello logico 0 sul pin 15

Modifichiamo ora il programma precedente inviando sulla Shell il messaggio che indica lo stato del LED, chiamiamo il programma interruttire2.py. Il circuito è il medesimo dell’esempio al passo precedente.

# Prof. Maffucci Michele
# realizzazione di un interruttore 
# mediante pulsante connesso al Pin 14 con antirimbalzo software
# con accensione di un LED connesso al pin 15
# e stampa dello stato del LED sulla Shell
# 18.09.2021

# libreria che permette di utilizzare MicroPython con il RaspyMicro
import machine

# per la gestione del tempo
import utime

# creazione dell'oggetto pulsante che include il pin 14 impostato come input
# su cui viene attivata il resistore di PULL-DOWN
pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

#pin 15 dichiarato come OUTPUT
ledEsterno = machine.Pin(15, machine.Pin.OUT)

# val usato per conservare lo stato del pulsante
val = 0

# vecchio_val per conservare lo stato del pulsante al passo precedente
vecchio_val = 0

# ricorda lo stato in cui si trova il LED,
# stato = 0 led spento, stato = 1 led acceso
stato = 0

# stampare una sola volta il messaggio 'LED acceso' o 'LED spento' sulla Shell
abilitaMessaggio = 0

# while True definisce un loop infinito al cui interno
# troviamo il controllo dello stato del pulsante
while True:
    val = pulsante.value()                    # legge il valore del pulsante e lo conserva
    if (val == 1) and (vecchio_val == 0):     # controlla se è accaduto qualcosa
        stato = 1 - stato
        utime.sleep(0.15)		      # attesa di 15 millisecondi
    vecchio_val = val;
    if (stato == 1) and (abilitaMessaggio == 0):
        ledEsterno.value(1)                   # imposta il livello logico 1 sul pin 15
        abilitaMessaggio = 1
        print("LED acceso")                   # stampa il messaggio
        utime.sleep(1)
    elif (stato == 0) and (abilitaMessaggio == 1):
        ledEsterno.value(0)                   # imposta il livello logico 0 sul pin 15
        abilitaMessaggio = 0
        print("LED spento")                   # stampa il messaggio
        utime.sleep(1)

Buon Coding a tutti 🙂