Advertisement
chrisdaloa

Arduino umidità e temperatura con led e suoni

Oct 21st, 2017
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.81 KB | None | 0 0
  1.  
  2.  
  3. /*
  4.  * ARDUINO TEST N.1
  5.  * Descrizione funzionamento:
  6.  * Rilevatore di temperatura e umidità su display 1602 con le seguenti caratteristiche:
  7.  * - beep frequenza 1000 al cambio di temperatura
  8.  * - beep frequenza 2000 al cambio di umidità di almeno 3 punti percentuali
  9.  * - accensione led ROSSO se la temperatura scende
  10.  * - accensione led VERDE se la temperatura sale
  11.  * - accensione led BLU se l'umidità cambia di almeno 3 punti percentuali
  12.  * - pulsane di spegnimento led
  13.  * - potenziometro regolatore display
  14.  *
  15.   The circuit:
  16.  * LCD RS pin to digital pin 7
  17.  * LCD Enable pin to digital pin 8
  18.  * LCD D4 pin to digital pin 9
  19.  * LCD D5 pin to digital pin 10
  20.  * LCD D6 pin to digital pin 11
  21.  * LCD D7 pin to digital pin 12
  22.  * LCD R/W pin to ground
  23.  * LCD VSS pin to ground
  24.  * LCD VCC pin to 5V
  25.  * 10K resistor:
  26.  * ends to +5V and ground
  27.  * wiper to LCD VO pin (pin 3)
  28.  *
  29.  * BUTTON to digital pin 2
  30.  *
  31.  * DHT to digital pin 13
  32.  *
  33.  * BUZZER to digital pin 4
  34.  
  35.  
  36.  */
  37.  
  38. // include the library code:
  39. #include <LiquidCrystal.h>
  40. #include <DHT.h>
  41.  
  42.  
  43. //definisco il DHT11
  44. #define DHTPIN 13
  45. #define DHTTYPE DHT11
  46. DHT dht(DHTPIN, DHTTYPE);
  47.  
  48. // initialize the library with the numbers of the interface pins
  49. LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
  50.  
  51. //definisco i pin del led RGB
  52. #define BLUE 3
  53. #define GREEN 5
  54. #define RED 6
  55.  
  56. // definisco il pin del buzzer
  57. int buzzer = 4;
  58.  
  59. //definisco le variabili di temperature e umidità
  60. int t = dht.readTemperature();
  61. int h = dht.readHumidity();
  62.  
  63. //definisco le variabili che uso per memorizzare i valori precedenti
  64. int to = t;
  65. int ho = h;
  66.  
  67. //definisco l'interrupt alla pressione del pulsante sul pin 2
  68. const byte interruptPin = 2;
  69.  
  70. int  val = 0;
  71.  
  72.  
  73. void setup() {
  74.     // preimposto il contenuto del LCD
  75.     lcd.begin(16, 2);
  76.     lcd.print("Avvio");
  77.     lcd.setCursor(0,1);
  78.     lcd.print("in corso");
  79.  
  80.     //imposto il buzzer su output
  81.     pinMode(buzzer,OUTPUT);
  82.  
  83.     //imposto il led rbg su output
  84.     pinMode(RED,OUTPUT);
  85.     pinMode(GREEN,OUTPUT);
  86.     pinMode(BLUE,OUTPUT);
  87.  
  88.     //imposto il led rgb su spento
  89.     digitalWrite(RED,255);
  90.     digitalWrite(GREEN,255);
  91.     digitalWrite(BLUE,LOW);
  92.  
  93.    // pinMode(BUTTON, INPUT);
  94.     pinMode(interruptPin, INPUT_PULLUP);
  95.     attachInterrupt(digitalPinToInterrupt(interruptPin), spegni, CHANGE);
  96.  
  97.    
  98.     Serial.begin(9600);
  99.  
  100.    
  101.  
  102. }
  103.  
  104. void loop() {
  105.     //la prima volta attendo 2 secondi altrimenti non valorizza le variabili del DHT11
  106.     //nell'attesa accendo tutti i led e mostro un messaggio "Avvio in corso..." (vedi setup)
  107.    if (to == 0){
  108.       delay(500);
  109.  
  110.       //accendo rosso
  111.       lcd.setCursor(8,1);
  112.       lcd.print(".");
  113.       digitalWrite(RED,HIGH);
  114.       digitalWrite(GREEN,LOW);
  115.       digitalWrite(BLUE,LOW);
  116.       delay(500);
  117.  
  118.       //accendo verde
  119.       lcd.setCursor(9,1);
  120.       lcd.print(".");
  121.       digitalWrite(RED,LOW);
  122.       digitalWrite(GREEN,HIGH);
  123.       digitalWrite(BLUE,LOW);
  124.       delay(500);
  125.  
  126.       //accendo blu
  127.       lcd.setCursor(10,1);
  128.       lcd.print(".");
  129.       digitalWrite(RED,LOW);
  130.       digitalWrite(GREEN,LOW);
  131.       digitalWrite(BLUE,HIGH);
  132.       delay(500);
  133.      
  134.       //visualizzo i dati sul display
  135.       lcd.setCursor(0,0);
  136.       lcd.print("Temperatura ");
  137.       lcd.setCursor(0,1);
  138.       lcd.print("Umidita'    ");
  139.  
  140.       //spengo il led
  141.       spegni();
  142.    }
  143.    
  144.     //leggo temperatura e umidità  
  145.     t = dht.readTemperature();
  146.     h = dht.readHumidity();
  147.  
  148.    
  149.  
  150.     // scrivo temperatura e umidità sul display
  151.     lcd.setCursor(13, 0);
  152.     lcd.print(t);
  153.     lcd.setCursor(15, 0);
  154.     lcd.print(char(223));
  155.  
  156.     lcd.setCursor(13, 1);
  157.     lcd.print(h);
  158.     lcd.setCursor(15, 1);
  159.     lcd.print("%");
  160.  
  161.     if (to > 0){
  162.     if (to != t) {  //se cambia la temperatura buz di 1000
  163.        // tone(buzzer,1000,200);    
  164.         if (to <= t){  //se la temperatura è aumentata o è rimasta invariata accendo il led rgb verde
  165.             digitalWrite(RED,LOW);
  166.             digitalWrite(GREEN,HIGH);
  167.             digitalWrite(BLUE,LOW);
  168.         }else{ //se la temperatura è scesa accendo il led rgb rosso
  169.             digitalWrite(RED,HIGH);
  170.             digitalWrite(GREEN,LOW);
  171.             digitalWrite(BLUE,LOW);
  172.         }
  173.     }else{
  174.         if (ho > h+2 || ho < h-2){ //se non è variata la temperatura ma è variata l'umidità di almeno 5 punti percentuali suono 2000 e accendo il led blu
  175.          //   tone(buzzer,2000,200);    
  176.             digitalWrite(RED,HIGH);
  177.             digitalWrite(GREEN,HIGH);
  178.             digitalWrite(BLUE,LOW);
  179.         }
  180.       }
  181.     }
  182.  
  183.     //salvo i valori precedenti
  184.     to = t;
  185.     ho = h;
  186.  
  187.  
  188.    
  189.     //attendo 5 secondi
  190.     delay(5000);
  191. }
  192.  
  193. void spegni(){
  194.             digitalWrite(RED,LOW);
  195.             digitalWrite(GREEN,LOW);
  196.             digitalWrite(BLUE,LOW);
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement