Gli ingressi analogici sul PLC: la sonda di temperatura PT100

Una PT100 è un tipo di sensore di temperatura a resistenza (RTD, Resistance Temperature Detector) molto utilizzato in ambito industriale per misurare la temperatura con precisione.

Normalmente si presenta con tre fili di collegamento che seguono il seguente schema.

Collegamento dei fili:

PT100 filo Modulo SM1231 RTD Funzione
Filo 1 (bianco) AI0+ Corrente di misura
Filo 2 (bianco) AI0M Misura tensione
Filo 3 (rosso) AI0N Compensazione

⚠️ I colori possono variare a seconda del costruttore del sensore, ma in genere due fili dello stesso colore sono “gemelli”, mentre quello diverso è la linea di corrente.

La PT100 non può essere collegata direttamente a un ingresso analogico standard del PLC come IW64.

Perché:

  • Gli ingressi analogici standard del PLC (es. IW64) aspettano segnali in tensione (0–10 V) o in corrente (4–20 mA).

  • Una PT100 è un sensore resistivo che cambia resistenza, non fornisce né tensione né corrente utile.

  • Quindi collegarla direttamente non produrrà letture corrette e potrebbe danneggiare l’ingresso.

Per collegare la PT100 ci sono tre soluzioni possibili:

1. Usare un modulo RTD (es. SM1231 RTD) che si collega direttamente la PT100 (2, 3 o 4 fili). È il metodo più semplice e preciso con i PLC S7-1200. Il modulo si occupa di generare la corrente di misura, leggere la resistenza e convertire in temperatura

2. Usare un convertitore PT100 → 4-20 mA. In questo caso si collega la PT100 al convertitore che invia un segnale 4–20 mA. NB: questo segnale può essere collegato a un ingresso analogico del PLC, come IW64, se supporta segnali di corrente

3. Usare un convertitore PT100 → 0-10 V. Si Collega la PT100 al convertitore, che invia un segnale 0-10V. Questo segnale può essere collegato a un ingresso analogico del PLC, come IW64, se supporta segnali di tensione

In questo articolo useremo un convertitore di segnale pt100 -> 0-10 V come quello in figura:

a cui colleghiamo una PT 100 come quella in figura, che ha un range 0-100°C

Quindi, ricapitolando i collegamenti elettrici sono i seguenti:

PT100 → Convertitore

  • Collega la PT100 al convertitore (seguendo le istruzioni del convertitore per il tipo a 2, 3 o 4 fili).

  • Il convertitore trasforma il valore di temperatura in una tensione proporzionale 0–10 V.

Convertitore → PLC (AI0)

  • Il positivo del segnale (0–10 V) del convertitore va collegato al morsetto AI0 del PLC.

  • Il negativo (GND) va collegato al M analogico (MANA) del PLC.

Attenzione che anche il convertitore, come abbiamo detto, va alimentato con i 24V (preso dal PLC) e dalla massa (presa dal PLC). Una massa va anche all’ingresso del PLC, insieme al cavo del segnale (blu) che viene dal convertitore

Preparazione delle variabili

L’unico ingresso impegnato nel progetto è quello analogico. L’indirizzo dell’ingresso dell’immagine sopra è %IW64.

La tabella delle TAGS quindi avrà un’unica linea relativa all’ingresso %IW64 a cui è associrato un valore intero:

 

A questo punto, per procedere alla realizzazione del programma, abbiamo bisogno di ulteriori variabili, che serviranno a comprendere meglio i passaggi da realizzare per arrivare alla definizione della temperatura partendo da un valore di tensione.

Il primo passaggio, prevede la normalizzazione della variabile di ingresso: l’input analogico del PLC S7-1200, infatti, una volta convertito in digitale, restituisce alla CPU un valore che va da 0 a 27648. In altri termini, quando al PLC arriva 0V, la CPU leggerà 0 dalla porta IW64 e quando arrivano 10V, la CPU restituirà il suo valore massimo: 27648.

Questo valore va “normalizzato”, ovvero va trasformato in un valore reale compreso tra 0.0 e 1.0 e per questa operazione sarà necessario creare una variabile di tipo reale in un blocco DB che chiameremo Normed_sens_temp.

Successivamente il valore di Normed_sens_temp (compreso tra 0 e 1), dovrà essere convertito in temperatura, a seconda della scala del sensore. Se, come nel nostro caso, il sensore ha un range che va da 0 a 100°C, si calcolerà la temperatura misurata come una frazione del range (0-100) calcolata in base al valore di Normed_sens_temp.

Il valore della temperatura così calcolata lo salveremo su un’altra variabile reale che chiameremo Scaled_temperatura.

Quindi, riassumendo, sarà necessario aggiungere un blocco dati tramite la funzione “Add new block” della sezione “Program blocks” del ramo del PLC. Il blocco lo chiameremo DB_dati_ingressi:

All’interno del blocco, dovremo creare le due variabili Normed_sens_temp e Scaled_temperatura

Realizzazione del programma

Il programma sarà composto di due blocchi: quello destinato alla “normalizzazione” del valore letto in ingresso, e quello che lo scala. I due blocchi si chiamano, rispettivamente: NORM_X e SCALE_X

NORM_X legge il valore dall’ingresso IW64, che è un numero che va da 0 a 27648, lo trasforma in un numero che va da 0 a 1.0 e salva il risultato nella variabile Normed_sens_temp;

SCALE_X prende la variabile Normed_sens_temp e lo trasforma, tramite una proporzione, in un valore compreso tra i suoi valore MIN e MAX (nel nostro caso 0 e 100), per poi salvare il risultato nel valroe Scaled_temperatura

A questo punto abbiamo il valore della temperatura, che, ad esempio, possiamo mostrare in un HMI (come spiegato nell’articolo Configurare un HMI ). In particolare aggiungiamo un HMI Siemens KTP400 Basic. Per farlo cliccare su “Add new device”

E sullo screen_1 aggiungiamo solo il campo di testo Scaled_temperatura, preso dal DB_Dati_Ingressi. Attenzione al formato, che qui abbiamo scelto come s999.99 (quindi un numero di tre cifre con due decimali e il segno)

Per aggiungere l’unità di misura di deve andare alla voce “Appearance”:

Infine, se non è stato già fatto, va configurata la rete e la connessione tra il PLC e l’HMI. Per farlo, si deve andare alla voce della ramificazione principale: “Devices and network”

Simulazione

In mancanza di un PLC vero, passiamo alla simulazione. Avviamo la simulazione sia del PLC che dell’HMI come spiegato nell’articolo Simulare un progetto per il PLC su TIA Portal

Per simulare un ingresso nel simulatore, si possono usare le “Force tables”. Nella “tabella di forzatura” è possibile forzare un valore di ingresso.

Per aprire una tabella di forzatura selezionare “Force tables” dalla ramificazione e poi inserire la variabile che si vuole forzare (nel nostro caso “ST_Sensore_temp”)

Si deve inserire un valore “forzato” nel campo “Force value” (noi abbiamo messo 2000) e poi si deve cliccare sull’icona degli occhiali con la freccia verde

Infine si deve cliccare sulla F rossa e la freccia verde per applicare la forzatura. Comparirà una F rossa a sinistra dal valore forzato:

Nel programma in corrispondenza dell’ingresso apparirà ancora una F rossa e il valore impostato:

E nel simulatore dell’HMI, apparirà il valore della temperatura calcolato




Braccio Tinkerkit Arduino

Obiettivo:

Pilotare il braccio robotico Tinkerkit tramite Arduino e 2 Joystick

Componenti elettronici:

Teoria:

Alla base di questa esercitazione c’è il braccio robotico TinkerKit.

Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot
Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot

Il TinkerKit Braccio è un braccio robotico completamente operativo, controllato tramite Arduino. Può essere assemblato in diversi modi per realizzare più attività come lo spostamento di oggetti, il movimento di pannelli, fotocamere o cellulari.

Braccio TinkerKit
Braccio TinkerKit

La scheda del braccio deve essere alimentare tramite la connessione jack con l’alimentatore da 5 VDC @ 4000 mA fornito nella confezione.

Nella confezione sono presenti:

  • Plastic Parts x 21
  • Screws x 63
  • Flat Washer x 16
  • Hexagon Nut x 7
  • Springs x 2
  • Servo Motors: 2 x SR 311, 4 x SR 431
  • Arduino compatible Shield x 1
  • Power Supply 5V, 4A x 1
  • Phillips Screwdriver x 1
  • Spiral Cable Protection Wrap x 1

Per pilotare la scheda dei driver del Braccio è necessario scaricare la libreria da questo link: https://github.com/bcmi-labs/arduino-library-braccio

Installazione Shield TinkerKit sopra Arduino
Braccio TinkerKit scheda pilotaggio servomotori
Braccio TinkerKit datasheet scheda pilotaggio servomotori

Schema connessione Joystick a shield servomotori:

Connessione Joystick

Alcune immagini rappresentative del funzionamento del Braccio:

Posizione iniziale di sicurezza
Posizione iniziale di sicurezza
Connessione dei Joystick
Connessione dei Joystick
Base a 0°
Base a 0°
Base a 180°
Base a 180°
Spalla 15° (Shoulder)
Spalla 15° (Shoulder)
Spalla 165° (Shoulder)
Spalla 165° (Shoulder)
Gomito 0° (Elbow)
Gomito 0° (Elbow)
Gomito 180° (Elbow)
Gomito 180° (Elbow)
Polso 0° (Wrist)
Polso 0° (Wrist)
Polso 180° (Wrist)
Polso 180° (Wrist)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Mano 73° (Gripper)
Mano 73° (Gripper)
Mano 10° (Gripper)
Mano 10° (Gripper)

Funzionamento:

Il Braccio è costituito da 6 Servo Motori di conseguenza 2 Joystick (2 assi + 1 bottone per joystick) non basterebbero per pilotare tutti gli assi.

 Si è optato quindi per il pilotaggio dei motori da 1 a 4 tramite gli assi (potenziometri collegati agli ingressi analogici di Arduino) del joystick mentre per la rotazione della mano nei due sensi sono utilizzati i pulsanti dei due joystick connessi ai pin 1 e 2 di Arduino (ingressi I/O in configurazione INPUT_PULLUP).

Rimane la chiusura e apertura della gripper (mano), per fare questo invece si è optato al cambio di stato apertura-chiusura e chiusura-apertura tramite la pressione contemporanea dei pulsanti dei joystick.

Ricordarsi di queste informazioni, limiti di rotazione dei servomotori, per non rovinare il Braccio:

  • M1=base (base) degrees. Allowed values from 0 to 180 degrees
  • M2=shoulder (spalla) degrees. Allowed values from 15 to 165 degrees
  • M3=elbow (gomito) degrees. Allowed values from 0 to 180 degrees
  • M4=wrist (polso) vertical degrees. Allowed values from 0 to 180 degrees
  • M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
  • M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the gripper (pinza) is open, 73: the gripper is closed.

Codice:






Arduino Last Christmas

Obiettivo: Riprodurre la melodia Last Christmas utilizzando la piattaforma Arduino. Un progetto realizzato dall’alunno della classe 4DSA del Liceo Enrico Medi di Senigallia: Gianmarco D’Emilio

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice:






Antifurto con funzioni domotiche

Obiettivo: Realizzare un antifurto con funzioni domotiche, con annesso un secondo Arduino in collegamento seriale in grado di comandare un cancello scorrevole.
Progetto realizzato dallo studente Sanchini Simone, dell’Università Politecnica delle Marche

Componenti elettronici:

  • 2 Arduino UNO
  • 2 Breadboard
  • 4 Resistenze da 220 Ohm per i led
  • 4 LED
  • 6 Interruttori
  • 1 Resistenza (2.2kOhm) per Fotoresistenza
  • 1 Fotoresistenza
  • 2 Motori DC
  • 1 Piezo
  • 1 Sensore PIR
  • 1 Sensore IR
  • 1 Telecomando IR
  • 1 KeyPad 4×4

Pre-requisiti:

  1. Password di accesso con KeyPad 4×4 e Arduino – (Tinkercad)
  2. Crepuscolare (Smart Lamp)
  3. Controllo di un LED Mediante Telecomando ELEGOO
  4. Blinking Led Senza Delay: MILLIS()
  5. Collegamento Seriale Arduino (non trovato su Arduinofacile)
  6. Il Sensore di Presenza

Teoria

Come abbiamo detto, lo scopo dell’esercitazione è quello realizzare un antifurto con funzioni domotiche utilizzando poi un secondo Arduino in collegamento seriale in grado di comandare un cancello scorrevole.

ARDUINO 1:

 Attraverso il Keypad sarà possibile inserire tre tipi di codici diversi:

  1. 1234: permette di inserire l’allarme (Stato=1), al suo inserimento le finestre e la porta di casa devono essere chiuse, queste ultime vengono simulate da due interruttori. All’inserimento ci saranno 5 secondi di delay in modo di permettere all’utente di uscire e chiudere la porta, dopodiché le luci presenti (simulate dal led) vengono spente, le tapparelle abbassate e attraverso il collegamento seriale viene dato il comando al secondo Arduino di aprire il cancello. Lo stop delle tapparelle e del cancello avviene attraverso dei finecorsa (simulati da due interruttori).
  2. 1235: permette di togliere l’allarme (Stato=0), al momento del disinnesco, verranno aperte le tapparelle se giorno, oppure accese le luci se notte, utilizzando come riferimento il sensore crepuscolare.
  3. 1236: permette di inserire l’allarme notturno (Stato=2), con la differenza dal primo che in questo caso esso non tiene in considerazione dell’apertura delle finestre. Al momento dell’inserimento attraverso il collegamento seriale viene dato il comando al secondo Arduino di chiudere il cancello.

Indicazioni LED:

Rosso: allarme inserito;

Rosso-Verde: allarme notturno inserito;

Rosso-Giallo-Verde (lampeggio): codice errato;

Giallo: finestre/porta aperta;

Cosa succede in caso di apertura di finestre o porta quando il nostro allarme è inserito?

Il sistema passerà allo stato di intrusione (Stato=3), settando cosi un timer realizzato dalla funzione millis() di tempo t, nella quale è possibile inserire il codice di sblocco; In caso il codice di sblocco non è inserito entro il tempo limite la “sirena” inizia a suonare finché l’antifurto non verrà sbloccato.

La stessa cosa succede in caso di intrusione dalle finestre quando l’allarme notturno è inserito.

ARDUINO 2:

Il secondo Arduino permette di comandare un cancello attraverso o i comandi mandati dal primo, oppure attraverso un telecomando IR, con un solo pulsante (a causa di un problema di lettura di tinkercad).

Premendo il pulsante lo stato cambierà lo stato del cancello in base a quello precedente:

Stato=0 -> Cancello fermo;

Stato=1 -> Cancello in chiusura;

Stato=2 -> Cancello fermo;

Stato=3 -> Cancello in apertura;

Il cancello è fermato in apertura e chiusura da due finecorsa, simulati da due interruttori.

Se in fase di chiusura il sensore PIR rileva qualcosa il cancello torna allo stato di apertura.

Quando il cancello finisce l’apertura, premendo il finecorsa, parte un timer di tempo t, ed alla fine di esso il cancello torna in fase di chiusura automatica.

Collegamento Circuitale:

TINKERCAD:

https://www.tinkercad.com/things/3aMc1kLCsu0-definitivo-sanchini/editel?sharecode=_gcKkLKcUpJEY1lHHIETPlS8ldhHe4IcM9bkXZUF48k

Codice:






Le frecce dell’AUDI con Arduino

Obiettivo: Realizzare un sistema di controllo dei led che simula l’effetto delle frecce di un Audi. Le luci si accendono alla pressione di un pulsante.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 8 Resistenze da 220 Ohm per i led
  • 4 LED
  • 2 Resistenza da 10KOhm per i pulsanti
  • 2 Pulsanti

Pre-requisiti:


LED e Pulsante


TeoriaCome abbiamo detto, lo scopo dell’esercitazione è quello di attivare due barre LED tramite la pressione di due pulsanti. Le barre simulano l’effetto freccia presente nelle auto Audi. La pressione del pulsante dà il comando di avvio della sequenza e, se si tiene premuto il pulsante, la sequenza rimane attiva.

Sarà necessario sistemare il codice in base a come viene montato il pulsante (se in pull-up o in pull-down)

Collegamento Circuitale:

Codice:

Il codice è basato sulla lettura del segnale del pulsante (nel nostro caso in pull-down) che, se premuto, attiva la relativa sequenza



Esperienza realizzata dalla classe 3 BMC del Dipartimento di Meccanica dell’ITIS “E.Mattei” di Urbino nell’AS 2022-23. Codice e Thinkercad realizzato da Giacomo Brancorsini




Realizzare un Cronometro Digitale con Arduino

Obiettivo: Realizzare un cronometro digitale per misurare lo scorrere del tempo in millisecondi utilizzando il microcontrollore Arduino, un display LCD e due pulsanti
Un progetto realizzato dagli alunni della classe 3ATLC dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Benedetti Nicolas
– Puca Edoardo

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 100 Ohm per i pulsanti
  • 1 Display LCD
  • 2 Pulsanti

Pre-requisiti:


Blinking Led Senza Delay: MILLIS()


TeoriaRealizzare un cronometro digitale con il controllore Arduino, è relativamente semplice. Per implementare questo dispositivo, basta collegare arduino ad un display LCD ed utilizzare l’istruzione millis() nell’apposito sketch.
Nel dettaglio, la funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programma corrente. Questo numero si riazzera dopo circa 50 giorni.
A tale fine è importante ribadire che mediante la funzione millis è possibile effettuare più misurazioni nel corso del tempo e per calcolare il tempo trascorso tra una misurazione e l’altra basta fare al differenza:

tempo = misura2 – misura1 

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo della funzione millis è possibile realizzare un cronometro digitale con il controllore Arduino. Nel caso specifico due differenti misure vengono effettuate per determinare il tempo trascorso. La prima misura viene salvata nella variabile “tempoI” mentre la seconda nella variabile “tempoF“. Il tempo trascorso tra le due differenti misure viene memorizzato nella variabile”tempo” ottenuta come la differenza tra “tempoF” e “tempoI“.



Tinkercad






Realizzare un Voltmetro [0-5Volt] con Display a 7 Segmenti

Obiettivo: Realizzare un dispositivo per misurare tensioni nel range 0.5 V utilizzando il microcontrollore Arduino ed il display a sette segmenti.
Un progetto realizzato dagli alunni della classe 3AUT dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Amadori Federico
– Fucili Elia

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 14 Resistenze da 100 Ohm per I display a sette segmenti
  • 2 Display a 7 Segmenti

Pre-requisiti:


1..2..3.. Il Display a 7 Segmenti



Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead


TeoriaEffettuare la misura di una tensione compresa nel range 0-5 V, utilizzando il controllore Arduino, è relativamente semplice. Per effettuare questa misura, basta collegare l’elemento di cui vogliamo analizzare la tensione ad un ingresso analogico (A0-A5) e utilizzare l’istruzione analogRead nell’apposito sketch.
A tale fine è importante ribadire che l’ingresso analogico compreso nel range 0-5V viene mappato utilizzato la funzione analogRead(A0) nel range 0-1023, pertanto è indispensabile utilizzare una corrispettiva funzione di conversione basta sulla seguente proporzione:

ValoreAnalogRead : 1023 = ValoreTensione : 5 

In conclusione, il valore di tensione può essere semplicemente ottenuto dividendo per 1023 e moltiplicando per 5 il valore letto utilizzando la funzione analogRead(A0).

Tale valore può essere poi visualizzato su differenti tipi di display: monitor del computer, display LCD e display a 7 segmenti. Nell’esempio in questione vengono utilizzati due display a 7 segmenti (uno per la parte intera ed uno per la parte decimale) al fine di visualizzare la tensione misurata.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo di due display a sette segmenti è possibile visualizzare la tensione prodotta dalla “patata”. Nel caso specifico viene utilizzata una patata come generatore di tensione per verificare che il dispositivo fornisca una valutazione corretta della tensione misurata. Delle funzioni specifiche (e.g., zeroI, unoI, zeroD, unoD, etc) vengono utilizzate per visualizzare i vari numeri nei due differenti display.



Tinkercad




PersonalizzazioniE’ possibile utilizzare altre tipologie di display per visualizzare la tensione misurata.





Realizzare un Contapunti con Display LCD

Obiettivo: Realizzare un contapunti manuale utilizzando il microcontrollore Arduino ed il display LCD

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 1kOhm per i pulsanti
  • 1 Resistenza da 100 Ohm per il display LCD
  • 1 Trimmer (per regolare il contrasto del display LCD)
  • 2 Pulsanti

Pre-requisiti:


Come Collegare un Display LCD ad Arduino



Pulsante come Interruttore


TeoriaAttraverso l’utilizzo di due semplici pulsanti e di un display LCD è possibile realizzare un contapunti digitale per riprodurre il punteggio di una partita di biliardo, pallavolo, calcetto, etc. Ogni volta che uno dei due pulsanti è premuto viene incrementato il punteggio di una delle squadre.

Collegamento Circuitale:

Codice:

Attraverso l’utilizzo di due contatori cnt1 e cnt2 è possibile memorizzare il punteggio di ogni squadra. Tali valori sono riprodotti sul display LCD utilizzando l’istruzione LCD.print().
Per evitare delle letture multiple che potrebbero portare ad un comportamento errato del circuito si utilizza una variabile globale che memorizza lo stato precedente del pulsante (i.e., valButton1Old e valButton2Old).




PersonalizzazioniE’ possibile introdurre un ulteriore pulsante per resettare il punteggio senza necessariamente dovere riavviare il controllore Arduino. Inoltre si può aggiungere un dispositivo di segnalazione acustica per avvisare l’utilizzatore del cambio di punteggio.





Arduino Cyclone Arcade Game

Obiettivo: Realizzare un gioco Arcade, basato su LED e pulsanti, utilizzando il microcontrollore Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Resistenze da 1kOhm per i pulsanti
  • 8 Resistenze da 100 Ohm per i LED.
  • 1 Buzzer Passivo (per la realizzazione di una melodia)
  • 8 LED (7 LED Rossi ed 1 Led Verde)
  • 1 Pulsante

Pre-requisiti:


Pulsante come Interruttore



https://www.arduinofacile.it/2020/03/23/blinking-led-senza-delay-millis/


Buzzer Passivo


TeoriaLo scopo di questo progetto è quello di creare un semplice gioco per bambini interattivo e divertente, sfruttando il microcontrollore Arduino. Il progetto proposto prende spunto da un gioco realmente prodotto e commercializzato negli anni 80 denominato “Cyclon jr” (vedi figura).

Cyclone Jr

Il progetto è di facile realizzazione e si basa sull’utilizzo di un pulsante e di alcuni LED che si accenderanno in sequenza. L’obiettivo del gioco è premere il pulsante quando la luce del cyclone raggiunge l’unico LED verde presente nel tabellone di gioco. In caso di successo, il livello di difficoltà aumenterà ed i led si accenderanno più velocemente. Differente, in caso di sconfitta, il gioco ricomincerà da capo ed i led si accenderanno più lentamente.

L’utilizzo di un buzzer passivo permette di generare un segnale acustico in caso di vittoria o sconfitta. Analogamente una gioco di luci sarà avviato ogni volta che il giocatore preme il pulsante in modo corretto.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Sebbene le componenti hardware impiegate nel progetto in questione sono di comune utilizzo, il codice non è dei più immediati. Innanzitutto, è importante considerare che per fare lampeggiare i LED è stata utilizzata la funzione millis() a discapito della tradizionale delay. L’impiego della funzione millis() permette infatti una maggiore reazione nel rilevare la pressione di un pulsante. Inoltre l’impiego dell’operatore modulo % permette di gestire in modo facile la corretta accensione dei led in sequenza. La difficoltà è infine regolata dal parametro K che aumenta ad ogni vittoria.




PersonalizzazioniE’ possibile aggiungere un numero maggiore di led per rendere il gioco più completo.





L’Albero di Natale (Gioco Luci + Melodia)

Obiettivo: Riprodurre la melodia “Merry Christmas” e creare un gioco luci Natalizio utilizzando la piattaforma Arduino (senza utilizzare la funzione delay).



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer
  • 6 Resistenze (100 Ohm)
  • 6 Led (Possibilmente rossi)

Pre-requisiti:


Arduino Jingle Bells



Blinking Led Senza Delay: MILLIS()


TeoriaNelle lezioni precedenti è stato illustrato come ogni melodia musicale è composta da note e pause. Se le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone() le pause possono essere riprodotte utilizzando la funzione delay().
Tuttavia è importante considerare che sebbene la funzione delay risulti molto pratica e permetta una facile realizzazione di giochi luci o riproduzione di melodie, questa produce un blocco del controllore il quale può impedire il corretto funzionamento di altre operazioni.
Nel caso specifico, se utilizzassimo la funzione delay sia per gestire il gioco luci sia per riprodurre la melodia, la funzione delay utilizzata in entrambi i task andrebbe a danneggiare la corretta esecuzione di una delle due attività. Ad esempio, si avrebbero delle pause troppo lunghe nella melodia rendendola incomprensibile.

Per risolvere questo problema si è deciso di utilizzare la funzione millis sia per realizzare il gioco luci sia per implementare la melodia.

La funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programam corrente. Questo numero si riazzera dopo circa 50 giorni.

Collegamento Circuitale:

Circuito Elettrico

Codice: