Utente:Piergio.andri/Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 1:
== Termostato ==
Tramite l'utilizzo del microcontrollore Arduino andiamo a creare un termostato dove possiamo andare a impostare la temperatura attraverso una manopola la temperatura. che poiPoi andremo a confrontareverificare conla temperatura ambientale, tramite un rivelatoresensore di temperatura, se essa è più bassa si accende un led, altrimenti si spegne. Se si preme un tasto si vedrà la temperatura impostata, la temperatura rilevata e l'umidità rilevata.
 
=== Descrizione del progetto ===
Il termostato ha un funzionamento abbastanza semplice:
In questa sezioni inserirete come il progetto viene affrontato e risolto. Per rendere il tutto più semplice inserirò un mio progetto, così da darvi una traccia
 
* Come prima cosa rileva la temperatura e l'umidità;
* Come seconda cosa rilevo la temperatura impostata attraverso un resistore variabile, mappando i caratteri partendo da 0 a 1023 arrivando dalla temperatura minima alla temperatura massima;
* Successivamente confronto il valore letto con il valore impostata;
* Se la temperatura letta è superiore alla temperatura impostata il led si spegne, se è inferiore il led si accende;
* Verifico se il bottone viene premuto;
* Se esso viene premuto stampo una scritta sul display LCD che può essere temperatura impostata, letta, e umidità
 
=== Schema elettrico ===
Non è sufficiente disegnarlo: va spiegato, meglio se per passi. Guardate [[Controllo di temperatura con LM335]], per esempio. Non utilizza Arduino, ma spiega lo schema elettrico in ogni suo passaggio e dimensiona i componenti.
 
Voi avrete una complessità minore, ma utilizzare questo come traccia non è male.
 
=== Schema di montaggio ===
Line 15 ⟶ 19:
=== Codice ===
Infine il codice (o, i codici) utilizzato. Per inserire il codice, in quest'ambiente con ''Modifica sorgente'' basta scrivere il testo con un singolo spazio, così:<syntaxhighlight lang="arduino" line="1">
//Importo le librerie
void setup() {
#include <LiquidCrystal.h>
// put your setup code here, to run once:
#include <SimpleDHT.h>
 
//Inizializzo delle variabili che mi serviranno più avanti
int setTemp = 0, circaUmidita = 0, temperaturaLegg = 10;
int temperatura = 0, umidita = 0;
int riposo = 3, oldRiposoMills = 0;
int stato = 0, erroriConsecutivi = 0;
int led = 9;
int valButtonHold = LOW, menu = LOW, hold = 0;
int tMax = 22, tMin = 10;
 
//Componenti esterne: pulsanti, potenziometri ecc...
const int potTemp = A5;
const int btn = 10;
 
//inizializzo DHT11
const int DHTPIN = 2; //da definire
SimpleDHT11 dht11;
 
//Inizializzo display LCD
const int rs = 8, e = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, e, d4, d5, d6, d7);
 
void setup() {
//Inizializzo il display
lcd.begin(16, 2);
//Inizializzo i pin di input e output
pinMode(led, OUTPUT);
pinMode(btn, INPUT);
}
 
void loop() {
oldRiposoMills = millis();
// put your main code here, to run repeatedly:
// Controllo della temperatura e dell'umidità nell'ambiente
byte t = 0;
byte u = 0;
int err = SimpleDHTErrSuccess;
//Controllo degli errori
if ((err = dht11.read(DHTPIN, &t, &u, NULL)) != SimpleDHTErrSuccess) {
erroriConsecutivi++;
//Serial.println(err);
return;
}
 
if (erroriConsecutivi >= 3) {
//lcd.clear();
//lcd.print("Errore nel rilevamento temperatura ");
erroriConsecutivi--;
}
 
erroriConsecutivi = 0;
// Valori definiti
temperatura = (int)t;
umidita = (int)u;
 
// Controllo della temperatura impostata
if (setTemp != analogRead(potTemp)) {
setTemp = analogRead(potTemp);
// Converto il valore analogico della temperatura in un valore leggibile
// Range temperature 10 a 22
temperaturaLegg = map(setTemp, 0 ,1023, tMin, tMax);
}
 
int valButton = digitalRead(btn);
 
//Controllo se il pulsante viene premuto
if(valButton == HIGH && valButtonHold == LOW) {
if (hold > 3) {hold = 0;}
else {hold++;}
valButtonHold = valButton;
} else {valButtonHold = LOW;}
//Confronto temperatura letta e la temperatura impostata
if (temperaturaLegg > temperatura) {digitalWrite(led, HIGH);}
else {digitalWrite(led, LOW);}
 
//Controllo di cosa mostrare sul display
if (hold == 0) {
lcd.clear();
lcd.print("Temp. impostata:");
lcd.setCursor(0,1);
lcd.print(temperaturaLegg);
}
if (hold == 1) {
lcd.clear();
lcd.print("Temp. letta:");
lcd.setCursor(0,1);
lcd.print(temperatura);
}
if (hold == 2) {
lcd.clear();
lcd.print("Umidita");
lcd.setCursor(0,1);
lcd.print(umidita);
}
}
</syntaxhighlight>E, naturalmente, commenti nel codice, e spiegazioni, sono graditi.