Archivi categoria: arduino

Le slide delle prime due lezioni del corso: Alfabeto di Arduino

Come già annunciato negli scorsi giorni, oggi pomeriggio alle 15 presso la sede dell’IIS Galilei Ferrari di via Gaidano 126, parte il corso: Alfabeto di Arduino di cui sarò relatore per 5 lezioni nelle prossime settimane.

Il corso è indirizzato ad insegnanti della scuola superiore, ma i contenuti ben si adattano a tutti coloro che avessero necessità di avere nozioni di base all’uso di Arduino. Nei prossimi giorni pubblicherò anche le successive slide.

Le slide della prima lezione sono generiche e danno nozioni di base di elettrotecnica e sono di supporto alle successive lezioni.

Vi allego la breve presentazione con le slide.

Grazie.

Alfabeto di arduino

Il seguente corso intende fornire le competenze di base per la realizzazione di lezioni di didattica delle robotica nella scuola secondaria di secondo grado.

Il corso ben si adatta a tutti i maker, studenti ed adulti, che per passione nell’elettronica necessitano di un’introduzione all’uso di Arduino.

Il docente che intendesse sviluppare un percorso didattico in cui si desidera realizzare dispositivi elettronici in grado di interfacciarsi col mondo fisico, potrà utilizzare queste lezioni come base per implementare moduli didattici aggiuntivi, pertanto questo corso è da intendersi come il mio personale tentativo di strutturare un percorso iniziale e modellabile a seconda del tipo di indirizzo della scuola. Chi vorrà potrà effettuare miglioramenti su quanto da me scritto.

Il percorso scelto è un estratto delle lezioni svolte durante i miei corsi di elettronica, sistemi ed impianti elettrici.

Nelle slide vi sono cenni teorici di elettrotecnica che non sostituiscono in alcun modo il libro di testo, ma vogliono essere un primo passo per condurre il lettore ad un approfondimento su testi specializzati.

Il corso è basato sulla piattaforma Open Source e Open Hardware Arduino e fa uso dell’Arduino starter kit.

Questa scelta non implica l’adozione di queste slide in corsi che non fanno uso di questo kit, ma è semplicemente una scelta organizzativa per lo svolgimento di questo corso di formazione.

Alle proposte incluse nel kit ho aggiunto ulteriori sperimentazioni. Tutti i componenti possono essere acquistati separatamente.

Ulteriori approfondimenti e risorse a questo corso possono essere trovate sul mio sito personale al seguente link:

https://www.maffucci.it/area-studenti/arduino/

Nella sezione dedicata ad Arduino, sul mio sito personale, oltre ad ulteriori lezioni, di cui queste slide ne sono una sintesi, è possibile consultare un manuale di programmazione, in cui vengono dettagliate le istruzioni. Per rendere pratico l’utilizzo del manuale ne è stata realizzata anche una versione portable per dispositivi mobili iOS e Android, maggiori informazioni possono essere trovate seguendo il link: http://wp.me/p4kwmk-23g

Utilizzare Sublime Text 3 Editor come IDE Arduino

Per il prossimo corso su Arduino che partirà giovedì prossimo (13/03/14), mi sono trovato nella necessità di realizzare diversi sketch didattici e per aumentare la velocità di produzione ho utilizzato un IDE diverso da quello standard di Arduino che mi ha permesso ad esempio la sostituzione immediata su tutto il listato di nomi di variabili o effettuare ricerche in modo più veloce o definire la modalità di copia ed incolla su tutto il codice.

Da qualche tempo uso Sublime Text 3, un editor multipiattaforma molto comodo per programmare che già uso qualche tempo e che mi era stato segnalato dal mio ex studente Antonio T.

L’editor non è gratuito, ma dopo averlo provato per un po’ di tempo lo acquisterò a breve.

Sul sito di riferimento trovate tutte le caratteristiche, no sto a dettagliarle tutte tra le molte vi segnalo: auto completamento, modalità distraction free, split editing, multiselezione su tutto il codice utile quando volete ad esempio rinominare il nome di una variabile all’interno di tutto il codice.

00

Per poter procedere bisogna prima di ogni cosa installare l’IDE standard di Arduino, il passo successivo è quello di installare Sublime Text 3 per la propria piattaforma

Tutti i passi e le informazioni per l’installazione per ogni piattaforma le trovate seguendo il link.

Di seguito, per mio utilizzo come tutorial per successive installazioni ho realizzato una serie di schermate che seguono le indicazioni del sito di riferimento.
Continua a leggere

Nei prossimi giorni due corsi di formazione su Arduino

ArduinoUno_R3_smallPrendono avvio i corsi destinati ai docenti del biennio e del triennio delle Istituzioni Scolastiche della Rete Robotica.
La programmazione delle attività formative per l’a.s. 2013/2014 prevede l’utilizzo della scheda Arduino funzionale alla programmazione, implementazione e sviluppo della robotica mobile, oggetto del Protocollo tra Rete Robotica e Telecom.

Dal prossimo 13 marzo 2014 partiranno due corsi, condotti rispettivamente dal Dirigente Scolastico Emerito Ing. Giovanni Mastropaolo e dal sottoscritto Prof. Michele Maffucci.

Il primo corso, condotto dal Prof. Mastropaolo è destinata ai docenti del biennio degli ITIS e degli IPIA e verterà sull’utilizzo della scheda Arduino, open source, programmabile con un linguaggio grafico (Scratch), di facile utilizzo, per la produzione di apparati domotici e robotici propedeutici alla realizzazione di prototipi, con la conseguente
possibilità di produrre schede di espansione e quindi moduli didattici destinate alle attività laboratoriali.

Il secondo corso condotto dal Prof. Maffucci tratterà invece un corso di secondo livello destinato ai colleghi con esperienze maturate nel settore elettronico e informatico, basato
sull’uso della scheda Arduino per l’implementazione di moduli didattici interattivi.
Il corso è stato progettato per essere di facile fruizione, pragmatico e disponibile on-line mediante apposite piattaforme on-line.
Nella prima parte saranno trattati moduli di programmazione e uso di Arduino
come strumento per creare sistemi di controllo del mondo reale (attuatori e sensori). Nella seconda fase si opererà su Arduino come elemento principale per la realizzazione di semplici strutture robotiche.

Ai corsi in questione potranno partecipare non più di 16 docenti per singolo
corso, più due docenti operanti presso la Scuola-Ospedale Regina Margherita di
Torino. Il il calendario dei corsi è quello riportato in calce.
Le adesioni dovranno pervenire via mail al Prof. Marvaso, che si occupa del coordinamento del corso, entro e non oltre il prossimo 07 marzo 2014.

Sono disponibili ancora posti per il corso di primo livello del Prof. Mastropaolo.

Calendario Corso primo livello Ing. Giovanni Mastropaolo:
Giovedì 13.03.2014 – ore 15,00 -18,00
Lunedì 17.03.2014 – ore 15,00 -18,00
Giovedì 20.03.2014 – ore 15,00 -18,00
Lunedì 24.03.2014 – ore 15,00 -18,00
Giovedì 27.03.2014 – ore 15,00 -18,00
Sede del corso: IIS Galilei-Ferrari di via Gaidano 126 – Torino

Calendario Corso secondo livello Prof. Maffucci:
Giovedì 13.03.2014 – ore 15,00 – 18,00
Martedì 18.03.2014 – 0re 15,00 – 18,00
Giovedì 20.03.2014 – ore 15,00 – 18,00
Martedì 25.03.2014 – ore 15,00 – 18,00
Giovedì 27.03.2014 – ore 15,00 – 18,00
Sede del corso : IIS Galilei-Ferrari via Gaidano 126 – Torino

Due chiacchere su Arduino Esplora

arduino-esplora
Mettendo ordine tra la mia library di sketch ho ritrovato alcune bozze di tutorial per Arduino Esplora che avevo incominciato a scrive nel mese di novembre durante il viaggio di rientro in treno da Verona (JobOrienta). Condivido con voi quanto da me velocemente elaborato, sperando che possa essere utile anche ad altri.
L’attività di creazione dei tutorial incomincia ovviamente dagli esempi resi disponibili da Arduino e quello che vi allego e lo sketch per il rilievo della temperatura e la scrittura sul TFT.
Ho aggiunto alla soluzione dell’esempio standard modifiche alla modalità di visualizzazione su TFT, allarme nel caso di superamento di una temperatura di soglia, variazione di colore del led rgb e avvisi sonori.
Poiché lo sketch è destinato agli studenti, all’interno di esso, in modalità di commento trovate le spiegazioni delle funzioni di libreria in cui metto in evidenza (anche in maniera ripetuta) funzionalità, parametri e valori restituiti.
Vi allego inoltre una versione dello stesso sketch con meno commenti in modo che per i più esperti sia possibile vedere la struttura generale del codice.
Lo sketch non è stato ottimizzato e nasce come primo esempio su cui gli studenti dovranno poi effettuare modifiche e miglioramenti.

/*

 Rilevatore di temperatura con Esplora TFT - V03

 Questo esempio è per il TFT collegato ad Arduino Esplora.

 Questo sketch e tratto dal tutorial disponibile su sito Arduino

 la cui prima versione è stata creata il 15 aprile 2013 da Scott Fitzgerald
 la potete trovare al seguente indirizzo

 http://arduino.cc/en/Tutorial/EsploraTFTTemp

 modified 23 November 2013
 by Michele Maffucci
 https://www.maffucci.it

 La variante proposta permette di segnalare un allarme
 se viene superata una temperatura di soglia fissata dall'utente,
 inoltre a titolo didattico sono stati aggiunti commenti di spiegazione
 alle funzioni utilizzate.

 */

// inclusione delle librerie necessarie per
// il funzionamento di Esplora, del TFT

#include #include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

char tempPrintout[3];  // array in cui memorizzare i valori di temperatura in gradi C
char tempPrintoutF[3]; // array in cui memorizzare i valori di temperatura in gradi F

// temperatura di allarme
const int maxTemp = 22;

void setup() {

  // begin()
  // Inizializzazione dell'LCD
  // istanza della classe TFT quando si usa la scheda Esplora.
  // Se si usa il display deve essere presente.

  // parametri
  // nessuno

  // restituisce
  // nulla

  // EsploraTFT.background(0,0,0);
  // Cancella lo schermo con uno sfondo nero

  EsploraTFT.begin();

  //--

  // Cancella tutto quello che attualmente visualizzata sullo schermo LCD
  // con il colore indicato. Può essere utilizzato nel loop() per cancellare lo schermo.
  // La funzione background() accetta valori a 8 bit per ognuno dei canali rosso, verde e blu
  // però lo schermo non visualizza con questa fedeltà.
  // I valori di rosso e blu sono scalati a 5 bit e il verde a 6 bit.

  // sintassi
  // screen.background(red, green, blue);

  // parametri
  // red: int da 0 a 255
  // green: int da 0 a 255
  // blu: int da 0 a 255

  // restituisce
  // nulla

  EsploraTFT.background(0,0,0);

  //---

  // stroke()
  // La funzione stroke() accetta valori a 8 bit per ognuno dei canali rosso, verde e blu
  // però lo schermo non visualizza con questa fedeltà.
  // I valori di rosso e blu sono scalati a 5 bit e il verde a 6 bit.

  // sintassi
  // screen.stroke(red, green, blue);

  // parametri
  // red: int da 0 a 255
  // green: int da 0 a 255
  // blu: int da 0 a 255

  // restituisce
  // nulla

  // EsploraTFT.stroke(255,0,0);
  // imposta il colore delle line e delle forme a rosso

  EsploraTFT.stroke(255,0,0);

  //---

  // setTextSize();
  // Imposta la dimensione del testo che segue
  // La dimensione di default è 1.
  // Ogni aumento di dimensione di una unità corrisponde ad un aumento di 10 pixel.
  // Quindi dimensione 1 = 10 pixel, dimensione 2 = 20 pixel e così via.

  // sintassi
  // screen.setTextSize(size);

  // parametri
  // size: intero da 1 a 5

  // restituisce
  // nulla

  // EsploraTFT.setTextSize(2);
  // imposta la dimensione del testo a 2 (20 px)

  EsploraTFT.setTextSize(2);

  // il testo viene posizionato in alto a sinistra dello schermo
  // il testo rimane permanente sullo schermo
  // la prima riga alle coordinate (0,0)
  // la seconda riga alle coordinate (0,20)

  //---

  // .text();

  // sintassi
  // screen.text(text, xPos, yPos);

  // parametri
  // text : array di tipo char in cui viene memorizzato il testo da visualizzare sul display
  // xPos : variabile int, coordinata x del testo da scrivere
  // yPos : variabile int, coordinata y del testo da scrivere

  // restituisce
  // nulla

  // scrive il testo tra virgolette alle coordinate (0, 0)
  // scrive il testo tra virgolette alle coordinate (0, 20)

  EsploraTFT.text("Gradi\n ",0,0);
  EsploraTFT.text("centigradi:\n ",0,20);

  // il testo che segue, all'interno del loop, vine impostato a 5 (50 px)
  EsploraTFT.setTextSize(5);
}

void loop() {

  // viene letta la temperatura in Celcius e memorizzata come stringa
  // il metodo readTemperature permette di restituire la temperatura in gradi Celsius
  // oppure in gradi Faherenheit, dipende dal parametro che viene passato, nell'esempio
  // DEGREES_C gradi centigradi. L'intervallo in gradi oscilla da -40 °C a 150 °C

  // readTemperature()
  // Legge la temperatura ambiente rilevata dal sensore su Esplora
  // e in funzione del parametro passato restituisce il valore
  // in gradi Celsius che Fahrenheit

  // parametri
  // scale: la scala scelta per l'output.
  // può asumere i valori: DEGREES_C e DEGREES_F

  // restituisce
  // un valore intero che rappresenta la temperatura in gradi Celsius o Fahrenheit.
  // L'intervallo di temperatura in gradi Celsius è da -40°C a 150°C
  // L'intervallo di temperatura in gradi Fahrenheit è da -40°F a 302°F.

  String temperature = String(Esplora.readTemperature(DEGREES_C));
  String temperatureF = String(Esplora.readTemperature(DEGREES_F));

  //--

  // toCharArray();
  // Copia la stringa di caratteri nel buffer

  // sintassi
  // string.toCharArray(buf, len)

  // parametri
  // string: variabile di tipo string
  // buf: il buffer dove copiare la stringa di caratteri (char [])
  // len: la dimensione del buffer (unsigned int)

  // converte la stringa in array di caratteri

  temperature.toCharArray(tempPrintout, 3);
  temperatureF.toCharArray(tempPrintoutF, 3);

  controlTemp();

}

void controlTemp(){

  // controlliamo se la temperatura è maggiore del valore fissato maxTemp
  if (Esplora.readTemperature(DEGREES_C)>maxTemp){

    // imposta il colore del testo a bianco
    EsploraTFT.stroke(255,0,0);


    // scrive la temperatura in gradi Celsius nelle linee sottostante alle coordinate indicate
    EsploraTFT.setTextSize(5);
    EsploraTFT.text(tempPrintout, 0, 50);

    // scrive i caratteri "." e "C" alle coordinate indicate
    EsploraTFT.text(".", 55, 25);
    EsploraTFT.text("C", 80, 50);

    // scrive la temperatura in gradi Fahrenheit nelle linee sottostante alle coordinate indicate
    EsploraTFT.setTextSize(1);
    EsploraTFT.text(tempPrintoutF, 110, 78);

    // scrive i caratteri "." e "F" alle coordinate indicate
    EsploraTFT.text(".", 121, 73);
    EsploraTFT.text("F", 126, 78);

    // imposta il testo a 2
    EsploraTFT.setTextSize(2);
    // imposta il colore del testo
    EsploraTFT.stroke(255,255,0);

    // scrive il testo sottostante alle coordinate indicate
    EsploraTFT.text("Attenzione:\n ",0,90);
    EsploraTFT.text("troppo caldo!:\n ",0,110);

    // funzione che consente di effettuare il blink del led sulla scheda Esplora
    blinkLedOn();

    // tone()
    // La funzione genera un'onda quadra di frequenza e durata stabilita dal buzzer di Esplora
    // La durata è espressa in milliseconds, se non è specificata nessuna durata l'emissione
    // del tono prosegue fino a quando non viene incontrata una finzione Esplora.noTone().
    // Attenzione che l'uso di tone() interferisce con il fading del red rosso.

    // sintassi
    // Esplora.tone(frequency, duration)

    // parametri
    // frequency: un unsigned int che rappresenta la frequenza espressa in hertz
    // duration: un unsigned long che rappresenta la durata in millisecondi (ozionale) del tono

    // emissione di un tono di allarme. Nota LA per 1 secondo
    Esplora.tone(440, 1000);

    // ripristina il testo a 5 per il prossimo ciclo di controllo
    // EsploraTFT.setTextSize(5);

    // persistenza del messaggio per 1 secondo
    // prima che venga effettuato il successivo controllo

    delay(1000);

    // cancella il testo prima di avviare il successivo loop
    EsploraTFT.stroke(0,0,0);

    // imposta il testo ad una dimensione di 2 cioè 20 px
    EsploraTFT.setTextSize(2);

    // scrive il testo alle coordinate indicate
    EsploraTFT.text("Attenzione:\n ",0,90);
    EsploraTFT.text("troppo caldo!:\n ",0,110);

    // imposta il testo ad una dimensione di 5 cioè 50 px
    EsploraTFT.setTextSize(5);

    // stampa il valore della temperatura in gradi Celsius alle coordinate indicate
    EsploraTFT.text(tempPrintout, 0, 50);

    // imposta il testo ad una dimensione di 1 cioè 10 px
    EsploraTFT.setTextSize(1);

    // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate
    EsploraTFT.text(tempPrintoutF, 110, 78);

  }
  else{
    // nel caso in cui la temperatura è al di sotto dei 22 gradi Celsius
    // viene impostato il colore di linee e forme a bianco

    // spegne LED esterno
    blinkLedOff();

    // imposta il colore del testo a bianco
    EsploraTFT.stroke(255,255,255);

    // scrive la temperatura in gradi Celsius nelle linee sottostante alle coordinate indicate

    // imposta il testo ad una dimensione di 5 cioè 50 px
    EsploraTFT.setTextSize(5);

    // stampa il valore della temperatura in gradi Celsius alle coordinate indicate
    EsploraTFT.text(tempPrintout, 0, 50);

    // scrive i caratteri "." e "C" alle coordinate indicate
    EsploraTFT.text(".", 55, 25);
    EsploraTFT.text("C", 80, 50);

    // imposta il testo ad una dimensione di 1 cioè 10 px
    EsploraTFT.setTextSize(1);

    // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate
    EsploraTFT.text(tempPrintoutF, 110, 78);

    // scrive i caratteri "." e "F" alle coordinate indicate
    EsploraTFT.text(".", 121, 73);
    EsploraTFT.text("F", 126, 78);

    delay(1000);

    // cancella il testo prima di avviare il successivo loop
    EsploraTFT.stroke(0,0,0);

    // imposta il testo ad una dimensione di 2 cioè 20 px
    EsploraTFT.setTextSize(2);

    // scrive i caratteri "Attenzione:" (con ritorno a capo) e "troppo caldo!:" (con ritorno a capo) alle coordinate indicate
    EsploraTFT.text("Attenzione:\n ",0,90);
    EsploraTFT.text("troppo caldo!:\n ",0,110);

    // imposta il testo ad una dimensione di 5 cioè 50 px
    EsploraTFT.setTextSize(5);

    // stampa il valore della temperatura in gradi Celsius alle coordinate indicate
    EsploraTFT.text(tempPrintout, 0, 50);

    // imposta il testo ad una dimensione di 1 cioè 10 px
    EsploraTFT.setTextSize(1);

    // stampa il valore della temperatura in gradi Fahrenheit alle coordinate indicate
    EsploraTFT.text(tempPrintoutF, 110, 78);
  }
}

// funzione che permette di far lampeggiare in diversi colori il led di Esplora
void blinkLedOn(){

  // writeRGB()
  // Consente di controllare la luminosità di un determinato colore del led rgb di Esplora.

  // sintassi
  // Esplora.writeRGB(red, green, blue)

  // parametri
  // red, variabile int imposta la luminosità del rosso. Intervallo da 0 a 255.
  // green, variabile int imposta la luminosità del verde. Intervallo da 0 a 255.
  // blue, variabile int imposta la luminosità del blu. Intervallo da 0 a 255.

  // restituisce
  // nulla

  Esplora.writeRGB(255,0,0);    // LED rosso
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(0,255,0);    // LED verde
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(0,0,255);    // LED blu
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(255,255,0);  // LED giallo
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(0,255,255);  // LED ciano
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(255,0,255);  // LED magenta
  delay(1000);                  // attesa di 1 sec
  Esplora.writeRGB(255,255,255);// LED bianco
  delay(1000);                  // attesa di 1 sec
}

void blinkLedOff(){
  Esplora.writeRGB(0,0,0);    // spegne il LED
}

Questa la versione con meno commenti:
Continua a leggere

In merito alle resistenze di pull up e pull down

corso-arduino
Sto scrivendo gli appunti per il corso su Arduino che realizzerò a partire dal prossimo 13 marzo per gli insegnanti della rete robotica che insegnano nel triennio della scuola superiore. Nelle slide stavo scrivendo alcune cose in merito alle resistenze di pull up e pull down. E’ una domanda ricorrente che mi viene posta via mail e da sempre ho un post lasciato a metà che devo sempre concludere. Condivido con voi alcune risorse che potrebbero esservi di aiuto. In passato avevo già parlato di questo argomento nei commenti, trovate indicazioni a questo link e a questo link. Una Spiegazione interessate la potete trovare anche su microcontroller.it più avanti aggiungero qualcosa di mio.

Saluti.