Archivi categoria: arduino

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.

Arduino Day is a worldwide event to celebrate its 10th year of life

Ricevo da Arduino la seguente segnalazione che volentieri pubblico:

Arduino Day is a worldwide event to celebrate its 10th year of life. It’s a day of official and self-organised gatherings bringing together people interested in Arduino to meet, share experiences and learn in their local areas.

Arduino invites Arduino user groups, makerspaces, hackerspaces, fablabs, associations, studios, educators, newbies and pro to take part to a day of celebration.
Every Arduino Day event is modular. All over the world, organizers plan different types of activities according to different audiences and skills. People can participate as organisers or  participants. Whether people are an experienced or a newbie, an engineer or a designer, a maker or a crafter, Arduino Day is a great way to celebrate Arduino and how you use it.

On the Arduino Day website, ArduinoDay.tv, organizers can submit their proposal and once approved they will receive a Digital Kit, a Discount Code for the Arduino Store and the community event will appear on the Map.
The call will close 15th March 2014.

The epicentre of Arduino Day will be New York: during friday night, we’ll share inspirational stories at IDEO New York; saturday at ITP: intro to Arduino room, hands-on and cooking-show style demos and project gallery with Massimo Banzi and Tom Igoe, Arduino co-founders. Massimo and Tom will be talking and interacting with people and seeing what nice things people do with Arduino. Finally, there’ll be an hangout on air with Massimo Banzi at Adafruit office in New York (10 pm).

Everyday new events are going to appear. We suggest you to keep an eye on the map ArduinoDay.tv

ARDUINODAY_720x300

Press pictures https://db.tt/gFkbwN62

Press contact press@arduino.cc

Arduino – lezione 08: display a 7 segmenti e creazione di librerie

Finalmente una nuova lezione 🙂

Inserisco una lezione sull’uso dei display a 7 segmenti che recentemente ho realizzato con una mia classe 5′, lo scopo è quello di comprendere meglio l’uso dei cicli e il conteggio ed incominciare a capire come creare le librerie.

Mi limiterò ad utilizzare un solo display è questo verrà utilizzato per contare da 0 a 9, dopo di che verrà utilizzato per visualizzare in sequenza solo i numeri pari e poi solo numeri dispari e poi cicli alternati di conteggi pari e dispari, ritengo un buon modo per allenarsi con condizioni e cicli.

Per ultimo illustrerò creare rapidamente una libreria da includere nel proprio codice.

Utilizzerò per questa lezione un display a 7 segmenti a catodo comune e la scelta non è dettata da motivi tecnici ma semplicemente perché nel magazzino della scuola ne abbiamo una scorta notevole 🙂

Innanzitutto vediamo di capire cosa è e come funziona un display a 7 segmenti.

Un display a 7 segmenti è tra i display più usati è realizzato da 7 segmenti ed ciascuno di essi è costituito da uno o più led disposti in modo da ottenere la disposizione indicata nelle figura che segue:

display-7-segmenti-catodo-comune-contenitore

Il dispositivo è detto dual in line. I sette ingressi sono nominati con lelettere dell’alfabeto: a, b, c, d, e, f, g inoltre disponiamo di un’ilteriore ingresso nominato DP (Decimal Point).

Un display viene detto a catodo comune se i 7 catodi dei LED sono connessi insieme e i rispettivi anodi sono disponibili così come rappresentato nella figura che segue:

display-7-segmenti-catodo-comune

Un display viene detto ad anodo comune se i 7 anodi dei LED sono connessi insieme e i rispettivi catodi sono disponibili così come rappresentato nella figura che segue:

display-7-segmenti-anodo-comune

Per poter illuminare un segmento del display è necessario che il corrispondente LED venga attraversato da corrente, ovvero l’anodo deve risultare positivo rispetto al catodo. Ovviamente per limitare la quantità di corrente che attraversa ogni LED ad un valore tra i 10 e i 20 mA è indispensabile inserire una resistenza di limitazione.

Nel caso del display che dispongo, HDSP 5503, si ha per ogni singolo LED:

Inoltre sappiamo che la tensione di alimentazione è di 5V

Possiamo calcolare la resistenza da insierire in serie ad ogni LED:

Anche in questo caso non me ne vorrete se utilizzo una resistenza di valore un po’ più elevato, da [pmath size=12]180 Omega[/pmath] semplicemente perché ne dispongo di un gran numero, avrò una luminosità leggermente inferiore e sicuramente il display mi durerà un po’ di più.

Collegamento del display

circuito

Collegamento reale

circuito-display-7-segmenti

Continua a leggere