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

Contenuto cancellato Contenuto aggiunto
Riga 150:
 
=== Codice ===
Per la realizzazione del progetto è stato utilizzato il seguente codice:<syntaxhighlight lang="arduino" line="1">
#include <SimpleDHT.h>
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);
 
//Dichiaro delle variabili
</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">
const unsigned int DHT = 2;
void setup(){
//const unsigned int ECHO = 12;
pinMode(pinMotore, OUTPUT);
//const unsigned int TRIGGER = 13;
pinMode(pinPulsante, INPUT);
//Definisco la Velocità del suono centimetri/microsecondo
}
const float Vs = 0.0343;
 
const int cifra1 = 3;
void loop(){
const int cifra2 = 4;
const int cifra3 = 5;
//const int cifra4 = 0;
 
const int a = 7;
const int b = 8;
const int c = 9;
const int d = 10;
const int e = 11;
const int f = 12;
const int g = 13;
const int dp = 6;
 
const int ritardo = 500;
 
SimpleDHT11 dht11(DHT);
 
void setup() {
// pinMode(ECHO, INPUT);
// pinMode(TRIGGER, OUTPUT);
 
Serial.begin(9600);
 
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(dp, OUTPUT);
pinMode(cifra1, OUTPUT);
if(enableValue != lastEnableValue && enableValue == HIGH){
pinMode(cifra2, OUTPUT);
if(!enabled){
pinMode(cifra3, OUTPUT);
startTime = millis();
// pinMode(cifra4, OUTPUT);
}
 
void loop() {
float temp = rilevaTemperatura();
float n = 05.0;
stampa(temp);
}
 
void stampa(float n) {
int cifre[3] = {};
cifre[0] = n/10;
cifre[1] = n - cifre[0] * 10;
cifre[2] = (n*10) - (cifre[0] * 100) - (cifre[1] * 10);
// cifre[3] = (n*100) - (cifre[0] * 1000) - (cifre[1] * 100) - (cifre[2] * 10);
 
for(int i = 0; i < sizeof(cifre); i++) {
int stampa = cifre[i];
switch(i) {
case 0:
digitalWrite(cifra1, LOW);
digitalWrite(cifra2, HIGH);
digitalWrite(cifra3, HIGH);
digitalWrite(dp, LOW);
delay(ritardo);
break;
case 1:
digitalWrite(cifra1, HIGH);
digitalWrite(cifra2, LOW);
digitalWrite(cifra3, HIGH);
digitalWrite(dp, LOW);
delay(ritardo);
break;
case 2:
digitalWrite(cifra1, HIGH);
digitalWrite(cifra2, HIGH);
digitalWrite(cifra3, LOW);
digitalWrite(dp, HIGH);
delay(ritardo);
break;
}
switch(stampa) {
case 0:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
break;
case 1:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 2:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 3:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 4:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 5:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 6:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 7:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 9:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
default:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
}
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">
 
//int rilevaDistanza() {
lastEnableValue = enableValue;
// digitalWrite(TRIGGER, LOW);
// delayMicroseconds(5);
// digitalWrite(TRIGGER, HIGH);
// delayMicroseconds(10);
// digitalWrite(TRIGGER, LOW);
//
// long tempo = pulseIn(ECHO, HIGH) / 2;
// float spazio = tempo * Vs;
// return(int(spazio));
//}
 
float rilevaTemperatura() {
if(enabled){
byte temperature = 0;
if((millis()-startTime) > bootTime){
byte humidity = 0;
analogWrite(pinMotore, velocitàMotore);
int err = SimpleDHTErrSuccess;
}else{
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
analogWrite(pinMotore, 255);
}return 999;
}else{
analogWrite(pinMotore, 0);
}
 
delay(50);
Serial.print("Temperatura " + String(temperature) + " °C\n");
return(float(temperature));
}
 
</syntaxhighlight>
</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 ===