Categoria: Giochi di luce con Arduino

  • Semaforo unidirezionale a tre tempi

    Con tre LED ed Arduino viene simulato il funzionamento di un semaforo italiano unidirezionale.

     

    Semaforo unidirezionale a tre tempi html 962f9972702d7438

     Componenti

    • 3 Resistenze 220 Ω
    • 3 LED (rosso, giallo e verde)
    • 4 Cavetti MM

    Cablaggio

    Semaforo unidirezionale a tre tempi html 429a8e493bb17855

    Linguaggio naturale

    inizializzazione

      inizio
        disponi i pin digitali 11,12 e 13 per l’OUTPUT;
      fine

    ciclo

      inizio
        porta il pin digitale 13 al potenziale più alto;
        aspetta 3000 ms;
        porta il pin digitale 13 al potenziale più basso;
        aspetta 400 ms;
        porta il pin digitale 11 al potenziale più alto;
        aspetta 1000 ms;
        porta il pin digitale 11 al potenziale più basso;
        aspetta 400 ms;
        porta il pin digitale 12 al potenziale più alto;
        aspetta 3000 ms;
        porta il pin digitale 12 al potenziale più basso;
        aspetta 400 ms;
      fine

     

    Il codice

    Semaforo unidirezionale a tre tempi html 1825917a53f7bffe

    void setup() {
      pinMode(13, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(12, OUTPUT);
    }

    void loop() {
      digitalWrite(13, HIGH);
      delay(3000);
      digitalWrite(13, LOW);
      delay(400);
      digitalWrite(11, HIGH);
      delay(3000);
      digitalWrite(11, LOW);
      delay(400);
      digitalWrite(12, HIGH);
      delay(1000);
      digitalWrite(12, LOW);
      delay(400);
    }


  • Regolare il lampeggio con un potenziometro

    In questo progetto cambieremo l’intervallo del lampeggio di un LED con l’aiuto di un potenziometro rotante.

       In questo progetto cambieremo l’intervallo del lampeggio di un LED con l’aiuto di una resistenza variabile collegata ad un ingresso analogico di Arduino: nello specifico ci serviremo di un potenziometro rotante.

    Regolare il lampeggio con un potenziometro html c36284ed17f22c2e

    Regolare il lampeggio con un potenziometro html f35e2dd362227b1e

    Componenti

    • Led
    • Potenziometro

    Il segnale elettrico all’ingresso analogico A0 di Arduino cambia gradualmente al girare della manopola del potenziometro convertendolo in un numero appartenente all’intervallo che va da 0 a 1023; useremo questo numero per determinare il parametro da assegnare alla funzione delay.

    Il codice

    int sensorValue = 0;
    int moltiplicatore = 2;

    void setup()
    {
      pinMode(13, OUTPUT);
    }

    void loop()
    {
      sensorValue = analogRead(A0);
      digitalWrite(13, HIGH);
      delay((sensorValue * moltiplicatore));
      digitalWrite(13, LOW);
      delay((sensorValue * moltiplicatore));
    }


    Liberamente tratto da

    https://www.instructables.com/id/Arduino-Potentiometer-Analog-Input-Tinkercad/
    https://www.tinkercad.com/things/ibYhyMfKChT-read-a-potentiometer-with-analog-input/editel?collectionid=OMOZACHJ9IR8LRE&lessonid=EUQ1XZQJFSJ00OO&projectid=OH411VKJH0TNG79#/lesson-viewer

  • Premessa

      Questi scritti sono un collage di schede di lavoro nate nei vari corsi tenuti, a studenti e docenti, nelle scuole secondarie, sia inferiori che superiori, e nella scuola dell’infanzia, nonché frutto del lavoro degli studenti di Informatica dell’Istituto “E. Fermi” di Barletta nell’ambito dell’Alternanza Scuola-Lavoro. La varietà degli ambiti in cui gli argomenti sono stati affrontati ne giustifica la disomogeneità.

    Essi costituiscono anche parte dei supporti / stimolo per i nostri corsi.

    Comprensibilmente quanto riportato non è un testo definitivo, ma destinato a continui aggiornamenti, integrazioni e revisioni.

     

  • Facciamo lampeggiare un LED

    Viene creato un semplice programma per far lampeggiare un LED, prima collegato al pin 13 e poi ad  altro pin. Viene costruito un primo circuito su di una basetta sperimentale.


    Facciamo lampeggiare un LED html 4859cf93c066a312


    Accensione di un LED sul pin 13


       Faremo lampeggiare un LED in modo pulsato e regolare.
    Utilizzeremo il LED integrato nella scheda, indicato con la lettera L e collegato alla porta 13; esso ha una resistenza anch’essa integrata sulla scheda, e ciò consentirà di poter utilizzare in alternativa un LED inserito direttamente nei pin GND e 13.
    Componenti:
    • LED rosso.Facciamo lampeggiare un LED html 56121034351c452e

    inizializzazione

      inizio
        disponi il pin digitale 13 per l’OUTPUT;
        porta il pin digitale 13 al potenziale più alto;
      fine

    ciclo

      inizio

      fine

    Con mBlock

    • Con mblock 3
      Cliccando sulla bandierina si accenderà il LED.
      Sostituiamo il blocco
      Quando si clicca sulla bandierina
      con 
      ProgrammaArduino e selezioniamo Modalità Arduino nel menu Modifica: comparirà il codice per Arduino!

    Facciamo lampeggiare un LED html 1face1cb0356dcdd 
    • Con mblock 5
      Aggiungi prima Arduino Uno, poi programma;

      collega e carica.

    Facciamo lampeggiare un LED html f3287108b2b2da8c

    Con Tinkercad
    (https://www.instructables.com/id/Blink-an-LED-With-Arduino-in-Tinkercad/)

    Facciamo lampeggiare un LED html 600ce591f145a33a

    Dietro le quinte:

    due operazioni:

    • imposta l’uscita del pin digitale 13:
      si è informato Arduino che deve far uso del pin 13 da utilizzare come output
    • come ALTO:
      si è detto ad Arduino di portare il pin 13 al livello alto di tensione, cioè a 5 V.

    void setup(){     // SI SCRIVONO LE CONDIZIONI DI PARTENZA

    pinMode(13,OUTPUT); // IMPOSTA IL PIN 13 COME USCITA

    digitalWrite(13,1); // IL PIN 13 GENERA 5 V

    }

    void loop(){     // QUI GIRA IL PROGRAMMA CHE SI DEVE RIPETERE

                 // ALL’INFINITO. IN QUESTO CASO NULLA!

    }

    Portando il livello del pin 13 da ALTO a BASSO, il parametro 1 in digitalWrite verrà sostituito dallo 0.

    Con Otto Blockly

    ottoLED


     Lampeggio del LED sul pin 13

    inizializzazione

      inizio
        disponi il pin digitale 13perl’OUTPUT;
      fine

    ciclo

      inizio
        porta il pin digitale 13 alpotenziale più alto;
        aspetta 1000 ms;
        porta il pin digitale 13 al potenziale più basso;
        aspetta 1000 ms;
      fine

    Con mBlock

     Facciamo lampeggiare un LED html 47fb34dafb16f87d    
     Facciamo lampeggiare un LED html 76e006ab0226a637 

    con Tinkercad

    Facciamo lampeggiare un LED html 1a4b83a34a47b401

    Dietro le quinte

    void setup() {
      pinMode(13, OUTPUT); // IMPOSTA IL PIN 13 COME USCITA
    }

    void loop() {
      digitalWrite(13, HIGH); // GENERA 5 V AL PIN 13
      delay(1000); // ATTENDI UN SECONDO
      digitalWrite(13, LOW); // GENERA 0 V AL PIN 13
      delay(1000); // ATTENDI UN SECONDO
    }

    Con Otto Blockly

    ottoLampLED

    Semplice no? Semplice perché Arduino è stato pensato anche per creativi che non hanno dimestichezza con la progettazione software.

    Il comando delay(millisecondi) interrompe l’esecuzione del programma per i millisecondi specificati; Arduino continua a lavorare!


    La basetta sperimentale

    Accensione o lampeggio di un LED su di un pin diverso dal 13 html e77271f6b9f7aa42 Accensione o lampeggio di un LED su di un pin diverso dal 13 html ea788f52fd78da3 Accensione o lampeggio di un LED su di un pin diverso dal 13 html 53fd02d2618d699e

       Una basetta sperimentale, conosciuta anche come tavolozza sperimentale o breadbord, permette di costruire rapidamente, semplicemente e senza effettuare saldature, un circuito inserendo opportunamente gli estremi dei dispositivi nei suoi fori.
    È caratterizzata da una serie di fori in linee e colonne; in figura si possono notare, sia nella base superiore che in quella inferiore, le linee di alimentazione colorate, azzurre per i 0 V e rosse per i 5 V; le colonne, in posizione perpendicolare alle linee d’alimentazione, sono destinate ai componenti.

       Tutti i punti di una linea di alimentazione sono collegati fra loro così come i punti di una stessa colonna.

    Costruiamo il nostro primo circuito

       Non è possibile collegare direttamente l’anodo del LED rosso alla porta 5 V ed il catodo alla porta GND; infatti il LED rosso può sopportare una tensione massima di 1,8 V per cui si può bruciare con una tensione di 5 V: è perciò necessario interporre un dispositivo tra l’alimentazione ed il LED che porti ad una diminuzione del potenziale di almeno 3,2 V.
    Vedremo che può andar bene un resistore di resistenza di 220V.

    Componenti:

    • LED rosso;
    • 2 cavetti MM (rosso, nero);
    • Resistenza di 220 Ω (in seguito sarà giustificata la sua presenza).

    Schema

    Accensione o lampeggio di un LED su di un pin diverso dal 13 html bce34db70af0497

    Schema elettrico relativo al circuito costruito.

    Avremmo potuto invertire la posizione del LED e della resistenza: in questo caso lo schema elettrico sarebbe stato il seguente:

    Accensione o lampeggio di un LED su di un pin diverso dal 13 html 8ba973da1e03f3f

     La tensione di 5 V questa volta è applicata ad un capo della resistenza.

    I due circuiti sono equivalenti! L’ordine non è determinante per il funzionamento.
    Prova ad effettuare misurazioni con il tester di TinkerCad.

     Accensione o lampeggio di un LED su di un pin diverso dal 13 html fdd39c6cbfc57a4c

    Il resistore ed il LED sono attraversati dalla medesima corrente; in elettrodinamica si dice che i due dispositivi sono in serie.


    Accensione

    Il codice è identico al precedente solo che bisogna sostituire la porta 13 con la 8

    void setup() {
      pinmode(8,OUTPUT);
      digitalWrite(8,HIGH);
    }

    void loop() {
    }

    Lampeggio

    void setup() {
      pinMode(8, OUTPUT); // configura il pin 8 come output
    }

    void loop() {
      digitalWrite(8, HIGH); /* accende il LED (HIGH è il livello del potenziale 5 V)*/
      delay(1000); // attende 1 s
      digitalWrite(8, LOW); /* spegne il LED portando il livello del potenziale su 0 V */
      delay(1000); // attende 1 s
    }

     Con Otto Blockly

    ottoLampLED8

  • Mi presento! Sono Arduino UNO R3

    Un po’ di storia2

       Arduino è nato dall’idea di un gruppo di professori, assistenti e studenti dell’IDI (Interaction Design Institute) di Ivrea che, chiacchierando nel caffè Arduino3 di Ivrea, hanno ipotizzato una piattaforma hardware e software che avvicinasse gli studenti e le persone in generale alla programmazione ed in particolare alla prototipizzazione.
    L’idea si è presto concretizzata e la scheda, geniale, economica e soprattutto open source, ha avuto una così grande diffusione da far nascere, in pochissimo tempo, una così enorme quantità di componenti compatibili, da rendere migliore, semplice ed economico il controllo e la gestione di giocattoli, dispositivi ed impianti sia industriali che di domotica.

       Arduino è dunque nato come una piattaforma hardware che, sulla base di un programma, è in grado di interpretare i segnali provenienti da sensori (quali termometri, fotocellule, sensori di movimento, sensori di infrarossi, rilevatori di ultrasuoni), e decidere se e come comandare attuatori (quali ad esempio LED, generatori di raggi infrarossi, display a cristalli liquidi, illuminatori laser, cicalini attivi e passivi, motorini elettrici a corrente continua, servomotori e relè).
    Arduino è dunque un’interfaccia tra il programma scritto dall’utilizzatore (software) ed i componenti collegati alla scheda (hardware).
    Sono innumerevoli i software già pronti e disponibili nella rete!


    Alcune peculiarita’

       La famiglia degli Arduino è numerosa; le caratteristiche principali di Arduino UNO non si differenziano molto da quelle degli altri.
    Alcune delle caratteristiche di Arduino UNO:

    • è dotato di una piccola, ma sufficiente, memoria flash di 32 kB;
      la memoria flash, costituita da semiconduttori, è non volatile e riscrivibile, viene usata come memoria per lettura-scrittura; cioè una memoria che ha le stesse caratteristiche di una RAM, ma un programma, una volta caricato, resta memorizzato e disponibile sino a quando non se ne carica un altro; proprio come una memoria di massa!
    • è priva di sistema operativo,
    • può gestire un solo programma per volta.

     

    Elementi principali

       Nella foto è rappresentata una scheda Arduino-compatibile; in essa sono immediatamente individuabili:

    • un pulsante di reset color rosso, utile per riavviare il programma memorizzato;
    • un microcontrollore (ATmega328)4;
    • numerosi pin,
      detti anche connettori o porte; sono disposti in due file parallele: una accanto al pulsante di reset, l’altra sul lato opposto della scheda;
    • una porta USB mod B,
      con la quale si può collegare l’Arduino ad un computer; in tal caso il dispositivo può essere alimentato tramite il computer
    • una presa Jack di alimentazione esterna,
      utile in assenza del collegamento con un computer mediante la porta USB


    Alimentazione5

       È possibile alimentare Arduino in quattro diversi modi:

    1. Porta USB
      A questa porta devono essere forniti 5 V o da un computer o da un alimentatore dotato di porta USB.
      La corrente,

         • se ad alimentare è un computer, è di 250 o 500 mA a seconda della porta USB;
         • se si è in presenza di un alimentatore esterno, viene limitata a 500 mA da un fusibile autoripristinante di protezione (PTC).
      La connessione al PC non solo fornisce energia alla scheda, ma è indispensabile per
         • ricevere il programma,
         • inviare segnali al monitor di sistema, che vedremo essere residente sul PC,
         • ricevere informazioni dalla tastiera del PC.
    2. Presa JACK
      A questa presa si può collegare una alimentazione esterna, dai 6 ai 20 V, che poi viene portata a 5 V dal regolatore di tensione (NCP1117); si consigliano però valori fra i 7 ed i 12 V. Valori
      • minori di 7 V potrebbero non garantire una corretta stabilizzazione per la caduta di tensione dovuta al collegamento, in serie, di un diodo di protezione della scheda da una errata polarità nell’alimentazione
      • maggiore di 12 V: una differenza significativa fra ingresso ed uscita potrebbe provocare un surriscaldamento del regolatore.
      Per lo più tale presa viene utilizzata per una alimentazione esterna da 9 V quando Arduino deve essere indipendente (stand-alone), cioè deve vivere di vita propria sganciato dal PC. In caso di basso consumo del dispositivo ed in assenza di un un alimentatore esterno, può essere sufficiente anche una comune batteria da 9 V.
    3. Pin Vin
      Per alimentazione esterna; simile al metodo con il JACK, infatti anche da qui la tensione passa dal regolatore di tensione prima di arrivare ad Arduino, ma NON PROTETTA da inversione di polarità. Non bisogna alimentare contemporaneamente tramite la presa JACK: si potrebbero creare danni poiché tale ingresso è posto a valle della presa JACK.
      In realtà tale porta ha una duplice modalità di uso, infatti oltre ad una funzione di input ne ha anche una di output per prelevare la tensione applicata alla presa JACK, depotenziata solo dalla caduta di tensione ai capi del diodo di protezione; utile per alimentare dispositivi che richiedono una tensione superiore ai 5 V.
    4. Porta 5 V
      Si può fornire direttamente ad Arduino una tensione stabilizzata di 5 V; alimentazione NON PROTETTA, in quanto tale porta è a valle sia del diodo che del fusibile auto-ripristinante (PTC) di protezione, per cui questi non hanno nessuna influenza su di essa. Per non danneggiare la scheda, la tensione deve rigorosamente avere valori tra i 4,5 e i 5,5 V.
      Se si dispone di pile ricaricabili AA, queste hanno una tensione nominale di 1,2 V, per cui se ne possono usare 4 in serie (in un apposito box) per una tensione totale di 4,8 V, perfetta per essere utilizzata direttamente sul pin 5 V.
      Diverso è il caso in cui le pile non siano ricaricabili poiché esse sono da 1,5 V, per cui se ne usassimo 4 avremmo un totale di 6 V: uno 0,5 V di troppo! Un diodo, posto in serie al cavo positivo del box batterie, fornirebbe una caduta di tensione portando la tensione a circa 5,4 V, accettabile per alimentare Arduino dalla porta 5 V e nello stesso tempo ci si ritrova una protezione contro una accidentale inversione di polarità.


    Le porte

       Nella foto della scheda sono facilmente individuabili, a destra, alcuni pin di nostro interesse; dall’alto in basso troviamo

    • la porta AREF (Analog Reference Pin);
    • Ground GND (Digital Ground):
      collegamento di terra cui collegare il polo negativo dei sensori o altri componenti;
    • le porte digitali I/O: porte che possono assumere sia la funzione di ingresso (INPUT) che di uscita (OUTPUT) di segnali digitali: sono quelle numerate da 2 a 13 e sono gestite singolarmente dal microcontrollore.
      In un programma è necessario chiarire per ogni singola porta se, una volta attivata, l’utilizzo sarà di input o di output.
      Alla porta 13 è collegato un led (LED_BUILTIN), contrassegnato con la lettera L, che si illumina quando sulla porta 13 viene inviato un segnale digitale HIGH e si spegne quando arriva un segnale LOW.
      A seconda che una porta sia stata definita di input o di output, Arduino “scriverà” o “leggerà” il valore 1 (HIGH) o 0 (LOW). Il valore 1 implica che alla porta venga applicata una tensione di 5 V, mentre il valore 0 implica che alla porta non vi sia tensione.
      Le porte 3, 5, 6, 9, 10 e 11, contrassegnate da una tilde, trovano utilizzo anche in modalità PWM (Pulse Width Modulation) simulando uscite analogiche: di tale modalità parleremo al suo primo utilizzo.
    • RX: porta di input seriale, utile per ricevere dati da una apparecchiatura esterna; può trovare applicazione anche come porta digitale, contrassegnata con 0; si sconsiglia tale uso poiché può essere soggetta ad interferenze legate alla sua duplice funzione.
    • TX: porta di output seriale, utile per trasmettere dati ad una apparecchiatura esterna; può trovare applicazione anche come porta digitale, contrassegnata con 1; anche in questo caso, come per la porta RX, se ne sconsiglia tale uso.


    Nella scheda vi sono anche due led che lampeggiano quando circolano informazioni attraverso la porta USB o nella comunicazione seriale attraverso le porte TX ed RX.
       Sul lato opposto a quello in cui vi sono le porte digitali, richiamano la nostra attenzione due differenti gruppi di porte: in alto notiamo le porte contrassegnate come POWER e sul cui utilizzo non vi è niente da aggiungere a quel che si è già detto o è facilmente intuibile, mentre subito sotto troviamo 6 porte, numerate da 0 a 5 e precedute dalla lettera A, contrassegnate come ANALOG IN.
       Quelle analogiche sono porte di input, alle quali possono essere collegati i sensori di tipo analogico, i quali inviano segnali che non possono essere rappresentati da un semplice 0 o 1; a seconda della tensione rilevata sul sensore tali porte generano un valore compreso fra 0 e 1023 (cioè 210-1), corrispondenti rispettivamente a 0 e 5 V: una risoluzione di 4,9 mV.
    Di default queste porte sono predisposte come porte di ingresso, ma possono essere utilizzate anche come porte digitali di output ed in questo caso sono indirizzabili con i numeri da 14 (corrispondente alla A0) a 19 (corrispondente alla A5).


    ___________________________________________________________

    1 – Arduino è un marchio registrato e solo le schede ufficiali possono essere denominate con tale nome. Le esperienze cui si fa riferimento in questi tutorial possono essere condotte anche con qualsiasi scheda compatibile.

    2 – http://giocarduino.altervista.org/arduino-scheda-sensori-attuatori.pdf

    3 – Arduino d’Ivrea (955 – 1015), è stato marchese d’Ivrea dal 990 al 999 e poi re d’Italia dal 1002 al 1014.

    4 – È un minicomputer con un microprocessore da 16 MHz in cui, tra l’altro, vi è il bootloader (il software di inizializzazione del microprocessore) ed il programma di gestione della connessione USB.

    5 – Per approfondimenti si consiglia la lettura dell’articolo di Michele Menniti L’alimentazione di Arduino, questa sconosciuta… https://docplayer.it/23410028-L-alimentazione-di-arduino-questa-sconosciuta.html
    Si consiglia anche il video di Paolo Aliverti 4 modi per alimentare Arduino https://www.youtube.com/watch?v=SFiX_YtN9zQ

  • Il semaforo unidirezionale a tre tempi con un LED RGB

    L’obiettivo è quello di realizzare un semaforo con il solo LED RedGgreeBlue; poiché non è presente un LED per il giallo, tale colore sarà generato dalla mescolanza delle luci di tonalità rossa e verde.

     

     

    Il semaforo unidirezionale Con led RGB html f77638ae19b81123

     

     

     

     

     

    Componenti:

    •  1 LED RGB,
    •  3 Resistenza da 220 Ω,
    •  4 cavetti MM.

    Gli anodi del rosso e verde vanno collegati a pin PWM; nel nostro caso

    Pin 5 [PWM] = anodo del verde

    Pin 6 [PWM] = anodo del rosso

     

     

     

     

     

     

     

     

     

    Il codice:

     

    #define rosso 6
    #define verde 5

     

    void setup() {
      pinMode(rosso, OUTPUT);
      pinMode(verde, OUTPUT);
    }

     

    void loop() {

      analogWrite(rosso, 255);
      delay(8000);

      analogWrite(rosso, 0);
      analogWrite(verde, 255);
      delay(8000);

      analogWrite(verde, 0);
      analogWrite(rosso, 255);
      analogWrite(verde, 255);
      delay(3000);

      analogWrite(rosso, 0);
      analogWrite(verde, 0);

    }