Sensore di colore con Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Creata pagina con "{{Risorsa | tipo = laboratorio | materia1 = Sistemi automatici per le superiori 1 | avanzamento = 0% | dipartimento1 = Scuole }} {{ITIS Urbino |classe = 4A/EN (Daniel G., Sasha M.) |as = 2021/2022 |materia = Sistemi automatici per le superiori 1 |docente = Giacomo Alessandroni |wiki_docente = Galessandroni}} = Realizzazione con display LCD = miniatura|Sensore di temperatura e umidità DHT-11 Il..."
Etichetta: Editor wikitesto 2017
 
Nessun oggetto della modifica
Riga 1:
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 2|avanzamento=25%|dipartimento1=Scuole}}
{{Risorsa
{{Lavori in corso
| tipo = laboratorio
| classe = 4A/EN (Daniel G., Sasha M.)
| materia1 = Sistemi automatici per le superiori 1
| as = 2021/2022
| avanzamento = 0%
| materia = Sistemi automatici per le superiori 2
| dipartimento1 = Scuole
| docente = Giacomo Alessandroni
}}
| wiki_docente = Galessandroni
{{ITIS Urbino
| link_istituto = https://www.itisurbino.edu.it/
|classe = 4A/EN (Daniel G., Sasha M.)
| istituto = ITIS "Enrico Mattei"
|as = 2021/2022
| comune = Urbino
|materia = Sistemi automatici per le superiori 1
}}
|docente = Giacomo Alessandroni
|wiki_docente = Galessandroni}}
 
= Realizzazione con display LCD =
[[File:Dht11 term and humidity sensor.jpg|miniatura|Sensore di temperatura e umidità DHT-11]]
Il '''progetto''' che segue è pensato per la realizzazione di un termometro digitale, composto da uno schermo LCD in grado di mostrare la temperatura e l'umidità di un determinato luogo tramite l'utilizzo di un sensore di umidità e temperatura DHT11.
 
Questa risorsa descrive come realizzare un '''riconoscitore di colori con Arduino, mediante l'utilizzo di un sensore di colori TCS3200'''
== Descrizione del progetto ==
[[File:16x2 LCD Display (cropped).jpg|miniatura|Display LCD 16x2]]
Il sistema è composto da:
 
== Presentazione del progetto ==
* sensore di temperatura DHT-11, che acquisisce temperatura e umidità dall'esterno.
Il '''bastone intelligente per non vedenti''' attraverso un sensore di prossimità, avverte l'utente quando questo si avvicina a un ostacolo, tramite un segnale acustico; inoltre, tramite un motore, viene generata una vibrazione, che guida l'utente a individuare l'ostacolo e – di conseguenza – a superarlo con facilità.
 
Questo progetto semplifica la circolazione dei soggetti con problematiche legate alla vista.
* display LCD 16x2, con integrato I2C, che mostra i valori ottenuti dal sensore sul display illuminato
 
== Schema di montaggiomontaggi ==
{| class="wikitable"
Di seguito lo schema di montaggio[[File:Termometro_digitale_con_Arduino.svg|centro|600x600px|
|+Componenti utilizzati
!Descrizione
!Tipo
|-
|Active buzzer
|<math>8~\Omega</math>
|-
|Ultrasonic Distance Sensor
|HC-SR04
|-
|Pulsante
|1
|-
|Motore
|DC
|-
|Resistenza
|<math>330~\Omega</math>
|}
[[File:Arduino_Smart_Stick.svg|centro|600x600px]]
 
 
]]Qui un'immagine del circuito realizzato.[[File:Foto circuito.jpg|immagine del circuito completo|centro|600x600px]]Si noti che l'interfaccia I2C (che consente il numero dei cavi con il microcontrollore) nello schema di montaggio è integrata nel display LCD, mentre nella realizzazione di laboratorio e inserita a parte.
 
== Codice ==
Il codice utilizzato è il seguente:<syntaxhighlight lang="arduino" line="1">
#include <DHT.h> // Libreria per il controllo del sensore
#include <LiquidCrystal_I2C.h> // Libreria per la gestione del driver I2C
 
== Codice ==
int pinLed = 4;
<syntaxhighlight lang="arduino">
DHT dht(3, DHT11); // Pin del sensore e dello schermo LCD
#define LED 2
LiquidCrystal_I2C lcd(0x27, 16, 2); // Formato display LCD
#define S0 4
</syntaxhighlight>Includo le librerie del sensore DHT11 e del display LCD e dichiaro i pin.<syntaxhighlight lang="arduino" line="1" start="8">
#define S1 5
#define S2 6
#define S3 7
#define R 11
#define B 9
#define G 10
#define sensorOut 8
void setup() {
Serial.begin(9600);
dht.begin(); // inizializzazione del sensore DHT11
pinMode(LED, OUTPUT);
lcd.init(); // inizializzazione del display LCD
pinMode(S0, OUTPUT);
lcd.backlight(); // abilitazione della retroilluminazione del display
pinMode(pinLedS1, OUTPUT) // definiamo la retroilluminazione come OUTPUT;
pinMode(S2, OUTPUT);
analogWrite(pinLed, 10) // mandiamo il segnale PWM con un valore da 0 a 255
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
digitalWrite(S0, HIGH);
digitalWrite(S1, HIGH);
}
</syntaxhighlight>Inizializziamo il sensore e il display, retro illuminiamo il display (lcd.backlight) e mandiamo il segnale PWM con un valore 10 ( compreso tra 0 e 255).<syntaxhighlight lang="arduino">
unsigned long r, g, b;
void loop() {
void loop() {
delay(1000); // Si esegue un'acquisizione ogni secondo
digitalWrite(LED, HIGH);
int t = dht.readTemperature(); // Lettura della temperatura e umidità relativa
digitalWrite(S2, LOW);
int h = dht.readHumidity();
digitalWrite(S3, LOW);
lcd.clear(); // Reset del display
r = pulseIn(sensorOut, LOW);
lcd.setCursor(0,0); // Cursore a riga 0, colonna 0
digitalWrite(S2, HIGH);
lcd.print("Temp: " + String(t) + Char(0xDF) + "C"); // Scrittura della temperatura
digitalWrite(S3, HIGH);
lcd.setCursor(0,1); // Cursore a riga 1, colonna 0
g = pulseIn(sensorOut, LOW);
lcd.print("Umid: " + String(h) + "%"); // Scrittura dell'umidità relativa
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
b = pulseIn(sensorOut, LOW);
Serial.print("R=");
Serial.print(r);
Serial.print("\tGT=");
Serial.print(g);
Serial.print("\tGB=");
Serial.print(b);
delay(100);
if((r <= 33)&&(g <= 51)&&(b <= 43)){
Serial.print("RED");
analogWrite(11, 255);
} else if((r <= 36)&&(g <= 45)&&(b <= 36)){
Serial.print("BLUE");
analogWrite(9, 255);
} else if((r <= 35)&&(g <= 45)&&(b <= 40)){
Serial.print("GREEN");
analogWrite(10, 255);
} else {
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(11, 0);
}
}
 
</syntaxhighlight>Dopo aver letto la temperatura e l'umidità, i due valori vengono stampati sulla prima e sulla seconda riga del display LCD, con l'aggiunta del simbolo del grado centigrado (°C) e della percentuale (%).
</syntaxhighlight>
 
=== Connessione dei pin ===
Come prima cosa definiamo i pin ai quali colleghiamo il buzzer (o cicalino piezoelettrico), il sensore ad ultrasuoni (HC-SR04) ed il motore DC.
 
=== Parametri del codice ===
In seguito vengono definite la distanza massima di lettura del sensore <code>distanzaMax</code>, la distanza minima del buzzer (se si ha una distanza minore il buzzer farà un suono continuo) <code>dMinb</code>, la distanza massima del buzzer (a una distanza maggiore il buzzer non suona) <code>dMaxB</code>, la velocità di trasmissione del monitor seriale (espresso in baud) <code>baud</code>, infine la distanza che massima del motore DC <code>dM</code>.
 
Tutte le distanze sono espresse in centimetri.
 
<code>long</code> è un tipo di dato che può contenere numeri a 32 bit, con segno.
 
=== Input e Output ===
 
* <code>tP</code> è il pin "Trigger": dice al sensore quando inviare un segnale;
* <code>eP</code> è il pin "Echo" che riceve il ritorno del segnale inviato dal sensore (ammesso che vi sia);
* <code>B</code> è il pin "Buzzer";
* <code>M</code> è il pin "Motore";
 
=== Programma principale ===
Nel programma principale forniamo ad Arduino tutte le informazioni relative all'esecuzione del programma e tutti i comandi relativi.
 
== Espansioni suggerite ==
Aggiunta di:
 
* Ruota per il movimento facilitato;
* Sensore di prossimità a 180°;
* funzione S.O.T.F.(stick on the floor) che permette al non vedente di ritrovare il bastone tramite un segnale acustico in caso di caduta e difficoltà a ritrovarlo;
* Sensore di profondità;