Misurazione di temperatura e umidità con Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Etichetta: Editor wikitesto 2017
Revisione (1)
Riga 1:
= Realizzazione con display LCD =
== Termometro digitale ==
[[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.
 
=== Descrizione del progetto ===
[[File:16x2 LCD Display (cropped).jpg|miniatura|Display LCD 16x2]]
Il sistema è composto da:
Riga 11:
* display LCD 16x2, con integrato I2C, che mostra i valori ottenuti dal sensore sul display illuminato
 
=== Schema di montaggio ===
Di seguito lo schema di montaggio[[File:Termometro_digitale_con_Arduino.svg|centro|600x600px]]|
 
[[File:Foto circuito.jpg|immagine del circuito completo|centro|600x600px]]
 
=== Codice ===
]]Qui un'immagine del circuito realizzato.[[File:Foto circuito.jpg|immagine del circuito completo|centro|600x600px]]Si noti che l'interfacci 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:
 
Line 47 ⟶ 50:
</syntaxhighlight>
 
= Realizzazione con display a 7 segmenti =
=== Conclusioni ===
Ricapitolando, la realizzazione di questo circuito, permette di visualizzare sullo schermo LCD 16x2 la temperatura e l'umidità misurata dal sensore DHT11, realizzando quindi un termometro digitale.
 
 
== Motore DC regolabile tramite potenziometro ==
Il '''progetto''' che segue è pensato per la realizzazione di una ventola, realizzata con un motore DC controllato da un transistor, in grado di azionarsi tramite un pulsante e regolabile attraverso un potenziometro.
 
=== Descrizione del progetto ===
 
 
Il sistema è composto da:
 
* Motore DC, che ruotando fa girare una ventola;
* Transistor NPN, che svolge la funzione di un interruttore;
* Pulsante, che aziona o ferma il motore;
* Potenziometro, che regola la velocità del motore DC.
 
=== Schema elettrico ===
lo schema elettrico del circuito effettuato è il seguente.
[[File:Schema_elettrico_n2.png|alt=schema elettrico|nessuno|miniatura|500x500px|schema elettrico]]
Alla scheda di Arduino vengono collegati i componenti utilizzando sia i pin analogici, per il potenziometro, sia i pin pwm, per il motore DC
 
=== Schema di montaggio ===
[[File:Schema_di_montaggio_n2.png|bordo|senza_cornice|500x500px]]
 
=== Codice ===
Per la realizzazione del progetto è stato utilizzato il seguente codice:<syntaxhighlight lang="arduino" line="1">
int pinMotore = 3;
int pinPulsante = 4;
int pinPotenziometro = A0;
int bootTime = 300;
</syntaxhighlight>Definisco le variabili e i pin dei componenti, più il boot time, ossia la velocità massima del motore alla sua accensione, indipendentemente dal potenziometro.<syntaxhighlight lang="arduino" line="1" start="5">
bool enabled = false;
int lastEnableValue = LOW;
unsigned long startTime = 0;
</syntaxhighlight>Creo delle variabili per la lettura dello stato del pulsante, e utilizziamo "unsigned long" per memorizzare il tempo in cui il motore è rimasto acceso.<syntaxhighlight lang="arduino" line="1" start="8">
int velocitàMotore = map(analogRead(pinPotenziometro), 0, 1023, 70, 255);
int enableValue = digitalRead(pinPulsante);
 
</syntaxhighlight>La velocità del motore viene impostata attraverso la lettura del potenziometro. I pin però restutiscono un valore da 0 a 1023, non compatibili con i pin pwm (da 0 a 255) quindi attraverso la funzione map effettuo una conversione proporzionale (70 è il valore minimo sotto il quale il motore smette di girare).<syntaxhighlight lang="arduino" line="1" start="10">
void setup(){
pinMode(pinMotore, OUTPUT);
pinMode(pinPulsante, INPUT);
}
 
void loop(){
if(enableValue != lastEnableValue && enableValue == HIGH){
if(!enabled){
startTime = millis();
}
enabled = !enabled;
}
</syntaxhighlight>Leggo il valore del pulsante, se esso è cambiato ed è uguale a HIGH, impostiamo il tempo attuale nella variabile startTime<syntaxhighlight lang="arduino" line="1" start="24">
 
lastEnableValue = enableValue;
 
if(enabled){
if((millis()-startTime) > bootTime){
analogWrite(pinMotore, velocitàMotore);
}else{
analogWrite(pinMotore, 255);
}
}else{
analogWrite(pinMotore, 0);
}
delay(50);
}
 
</syntaxhighlight>Dopo aver aggiornato la variabile che verrà utilizzata nella if successiva, se il motore era acceso, dopo il tempo di accensione, viene letto il valore del potenziometro e si imposta la velocità del motore. Se siamo ancora nella fase inziale impostiamo il valore a 255 indipendentemente dal potenziometro. Se invece viene premuto il pulsante di nuovo impostiamo la velocità a 0.
 
=== Conclusioni2 ===
In conclusione, la realizzazione di questo circuito permette, grazie ad un pulsante, l'accensione e lo spegnimento del motore DC; la velocità del motore DC è regolata da un potenziometro, realizzando così una ventola.
 
''Progetto è stato realizzato da Daniel Gostoli e Sasha Fasolo Massoli.''
 
== Termometro con display a 7 segmenti ==
Il '''progetto''' che segue è pensato per la realizzazione di un termometro digitale, realizzato col supporto del microcontrollore Arduino, che attraverso il sensore di temperatura e umidità DHT11, mostra il valore della temperatura dell'ambiente su un display a 7 segmenti.
== Descrizione del progetto ==
[[File:Dht11 term and humidity sensor.jpg|miniatura|Sensore dht11 utilizzato nel circuito|160x160px]]
 
=== Descrizione del progetto ===
Il funzionamento del circuito può essere riassunto in 3 punti:
* Il sensore DHT11 effettua la misurazione della temperatura;
Line 133 ⟶ 58:
* Arduino invia la stringa al display, il quale illumina i segmenti per comporre le cifre derivanti dal valore iniziale;
 
=== Schema di montaggio ===
[[File:Schema display.jpg|miniatura|Schema di collegamento del display a 7 segmenti utilizzato |127x127px]]
[[File:Schema di montaggio del circuito.jpg|centro|senza_cornice|600x600px|Schema di montaggio effettuato con l'utilizzo di fritzing; il sensore utilizzato nel circuito è diverso da quello nello schema di montaggio, per modificarlo basta sostituirgi un dht11.]]
Line 155 ⟶ 80:
Nello schema di montaggio è stato utilizzato un diverso sensore di temperatura, per realizzare il circuito basta sostituirlo con un sensore DHT11 ( nel nostro caso cpn tre pin).
 
=== Codice ===
<syntaxhighlight lang="arduino">
#include <SimpleDHT.h>
Line 357 ⟶ 282:
</syntaxhighlight>La funzione rivelaTemperatura(), come suggerisce il nome va a rilevare la temperatura dal nostro sensore, riportando la temperatura con un valore decimale.
 
=== Conclusioni ===
[[File:Immagine del termometro digitale.jpg|miniatura|Foto del circuito]]
In conclusione, la realizzazione di questo circuito permette, grazie al display di poter visualizzare in tempo reale la temperatura in una determinata stanza o in un determinato ambiente, con un'approssimazione al grado centigrado. Il circuito può rivelarsi particolarmente utile appunto negli ambienti chiusi per poter verificare costantemente la temperatura, ad esempio nelle serre.
 
''Il progetto è stato realizzato da Andrea Piergiovanni, Matteo Coccia,Thomas Pennacchini, Daniel Gostoli, e Sasha Fasolo Massoli.''
 
 
== Motore DC regolabile tramite potenziometro ==
Il '''progetto''' che segue è pensato per la realizzazione di una ventola, realizzata con un motore DC controllato da un transistor, in grado di azionarsi tramite un pulsante e regolabile attraverso un potenziometro.
 
=== Descrizione del progetto ===
 
 
Il sistema è composto da:
 
* Motore DC, che ruotando fa girare una ventola;
* Transistor NPN, che svolge la funzione di un interruttore;
* Pulsante, che aziona o ferma il motore;
* Potenziometro, che regola la velocità del motore DC.
 
=== Schema elettrico ===
lo schema elettrico del circuito effettuato è il seguente.
[[File:Schema_elettrico_n2.png|alt=schema elettrico|nessuno|miniatura|500x500px|schema elettrico]]
Alla scheda di Arduino vengono collegati i componenti utilizzando sia i pin analogici, per il potenziometro, sia i pin pwm, per il motore DC
 
=== Schema di montaggio ===
[[File:Schema_di_montaggio_n2.png|bordo|senza_cornice|500x500px]]
 
=== Codice ===
Per la realizzazione del progetto è stato utilizzato il seguente codice:<syntaxhighlight lang="arduino" line="1">
int pinMotore = 3;
int pinPulsante = 4;
int pinPotenziometro = A0;
int bootTime = 300;
</syntaxhighlight>Definisco le variabili e i pin dei componenti, più il boot time, ossia la velocità massima del motore alla sua accensione, indipendentemente dal potenziometro.<syntaxhighlight lang="arduino" line="1" start="5">
bool enabled = false;
int lastEnableValue = LOW;
unsigned long startTime = 0;
</syntaxhighlight>Creo delle variabili per la lettura dello stato del pulsante, e utilizziamo "unsigned long" per memorizzare il tempo in cui il motore è rimasto acceso.<syntaxhighlight lang="arduino" line="1" start="8">
int velocitàMotore = map(analogRead(pinPotenziometro), 0, 1023, 70, 255);
int enableValue = digitalRead(pinPulsante);
 
</syntaxhighlight>La velocità del motore viene impostata attraverso la lettura del potenziometro. I pin però restutiscono un valore da 0 a 1023, non compatibili con i pin pwm (da 0 a 255) quindi attraverso la funzione map effettuo una conversione proporzionale (70 è il valore minimo sotto il quale il motore smette di girare).<syntaxhighlight lang="arduino" line="1" start="10">
void setup(){
pinMode(pinMotore, OUTPUT);
pinMode(pinPulsante, INPUT);
}
 
void loop(){
if(enableValue != lastEnableValue && enableValue == HIGH){
if(!enabled){
startTime = millis();
}
enabled = !enabled;
}
</syntaxhighlight>Leggo il valore del pulsante, se esso è cambiato ed è uguale a HIGH, impostiamo il tempo attuale nella variabile startTime<syntaxhighlight lang="arduino" line="1" start="24">
 
lastEnableValue = enableValue;
 
if(enabled){
if((millis()-startTime) > bootTime){
analogWrite(pinMotore, velocitàMotore);
}else{
analogWrite(pinMotore, 255);
}
}else{
analogWrite(pinMotore, 0);
}
delay(50);
}
 
</syntaxhighlight>Dopo aver aggiornato la variabile che verrà utilizzata nella if successiva, se il motore era acceso, dopo il tempo di accensione, viene letto il valore del potenziometro e si imposta la velocità del motore. Se siamo ancora nella fase inziale impostiamo il valore a 255 indipendentemente dal potenziometro. Se invece viene premuto il pulsante di nuovo impostiamo la velocità a 0.
 
=== Conclusioni2 ===
In conclusione, la realizzazione di questo circuito permette, grazie ad un pulsante, l'accensione e lo spegnimento del motore DC; la velocità del motore DC è regolata da un potenziometro, realizzando così una ventola.
 
''Progetto è stato realizzato da Daniel Gostoli e Sasha Fasolo Massoli.''