Controlarea unui ventilator în funcție de temperatură

  Salutare!După ceva timp în care nu am mai postat, am revenit cu un nou tutorial. Astăzi vom face un ventilator care va porni la depășirea unei temperaturi setate de pe bluetooth.

De ce avem nevoie?

  1. Arduino UNO(sau orice alt dispozitiv compatibil arduino);
  2. Modul Bluetooth HC-05;
  3. Modul senzor de temperatură DHT11(sau orice alt DHT);
  4. LCD 1602;
  5. Potențiometru 10KΩ;
  6. Rezistor 220Ω;
  7. Releu 5V;
  8. Alimentare externa 12V 500mA.

Schema folosită este următoarea:


Cum conectăm componentele?

  • PIN 1 LCD – BREADBOARD GND(-)
  • PIN 2 LCD – BREADBOARD 5V(+)
  • PIN 3 LCD – CENTRU POTENTIOMETRU(PIN2)
  • PIN 4 LCD – PIN 7 ARDUINO
  • PIN 5 LCD – BREADBOARD GND(-)
  • PIN 6 LCD – PIN 6 ARDUINO
  • PIN 7 ->PIN 10 LCD – FARA CONEXIUNE
  • PIN 11(D4) LCD – PIN 5 ARDUINO
  • PIN 12(D5) LCD – PIN 4 ARDUINO
  • PIN 13(D6) LCD – PIN 3 ARDUINO
  • PIN 14(D7) LCD – PIN 2 ARDUINO
  • PIN 15 LCD – REZISTENTA 220Ω – BREADBOARD 5V(+)
  • PIN 16 LCD – BREADBOARD GND(-)
  • PIN 1 POTENTIOMETRU –  BREADBOARD GND(-)
  • PIN 3 POTENTIOMETRU – BREADBOARD 5V(+)
  • 5V ARDUINO – BREADBOARD 5V(+)
  • GND ARDUINO – BREADBOARD GND(-)
  • HC-05 GND – BREADBOARD GND(-)
  • HC-05 VCC – BREADBOARD 5V(+)
  • HC-05 TX – ARDUINO RX(PIN 0)
  • HC-05 RX – ARDUINO TX(PIN 1)
  • DHT 11 GND – BREADBOARD GND(-)
  • DHT 11 5V – BREADBOARD 5V(+)
  • DHT 11 SIGNAL – PIN 8 ARDUINO
  • RELEU VCC – BREADBOARD 5V(+)
  • RELEU GND – BREADBOARD GND(-)
  • RELEU NO (PIN 1) – 12V FAN +
  • RELEU COMMON (PIN 2) – ALIMENTATOR 12VDC +
  • 12V FAN GND(-) – ALIMENTATOR 12V GND(-)

Cu toate conexiunile făcute, sa trecem la cod… 🙂


//Acest cod a fost scris de Ilinca Stefan - Costin
//Copyright arduinoro.blogspot.com
#include            //includem library dht
#include //includem library lcd
#define DHTPIN 8         //pin dht11
//aici puteti edita!!!!!!!!
#define DHTTYPE DHT11  //tipul senzorului dht
int setTemp = 26;     // temperarura initiala de pornire fan este de 26 grade 
int releu = 9;       //pin releu
int state = 0;      //variabila ce va retine codul primit prin BT
   DHT dht(DHTPIN, DHTTYPE); //definim senzorul dht11
   LiquidCrystal lcd (7,6,5,4,3,2);//definim pinii lcd-uluo

void setup() {       //setup
lcd.begin(16,2);    //marimea LCD-ului
Serial.begin(9600);//initializam serialul la 9600baud
dht.begin();      //pornim senzorul dht
pinMode(releu, OUTPUT);   //pinul releului=iesire
digitalWrite(releu, HIGH);//releu=OPRIT
}
void loop() { //structura repetitiva
if(Serial.available() > 0){//daca exista date in serial > 0
  state=Serial.read();    //variabila state va lua valoarea din serial
  }
           if (state == '1'){     //daca codul primit prin bluetooth=1
  setTemp=17;                    //setam temperatura la care sa se opreasca fan-ul=17 grade
  lcd.clear();                  //stergem totul de pe lcd
     lcd.setCursor(0,0);       //setam cursorul pe randul 1 caracterul 1
  lcd.print("Temp. setata:"); //printam pe lcd 
     lcd.setCursor(0,1);     //setam cursorul pe randul 2 caracterul 1
  lcd.print(setTemp);       //printam temperatura setata
  lcd.print(char(223));    //printam semnul de grade
  lcd.print("C");         //printam C(celsius)
  delay(2000);           //delay 2 secunde                    
       }
           else if (state == '2'){//altfel daca codul primit prin bluetooth=2
  setTemp=20;                    //setam temperatura la care sa se opreasca fan-ul=20 grade
    lcd.clear();                //stergem totul de pe lcd
     lcd.setCursor(0,0);       //setam cursorul pe randul 1 caracterul 1
  lcd.print("Temp. setata:"); //printam pe lcd  
     lcd.setCursor(0,1);     //setam cursorul pe randul 2 caracterul 1
  lcd.print(setTemp);       //printam temperatura setata
  lcd.print(char(223));    //printam semnul de grade
  lcd.print("C");         //printam C(celsius)
  delay(2000);           //delay 2 secunde
           }
              else if (state == '3'){//altfel daca codul primit prin bluetooth=3
  setTemp=22;                    //setam temperatura la care sa se opreasca fan-ul=22 grade
    lcd.clear();                //stergem totul de pe lcd
     lcd.setCursor(0,0);       //setam cursorul pe randul 1 caracterul 1
  lcd.print("Temp. setata:"); //printam pe lcd  
     lcd.setCursor(0,1);     //setam cursorul pe randul 2 caracterul 1
  lcd.print(setTemp);       //printam temperatura setata
  lcd.print(char(223));    //printam semnul de grade
  lcd.print("C");         //printam C(celsius)
  delay(2000);           //delay 2 secunde
            }
             else if (state == '4'){//altfel daca codul primit prin bluetooth=4
  setTemp=24;                    //setam temperatura la care sa se opreasca fan-ul=24 grade
    lcd.clear();                //stergem totul de pe lcd
     lcd.setCursor(0,0);       //setam cursorul pe randul 1 caracterul 1
  lcd.print("Temp. setata:"); //printam pe lcd  
     lcd.setCursor(0,1);     //setam cursorul pe randul 2 caracterul 1
  lcd.print(setTemp);       //printam temperatura setata
  lcd.print(char(223));    //printam semnul de grade
  lcd.print("C");         //printam C(celsius)
  delay(2000);           //delay 2 secunde
            }
            else if (state == '5'){//altfel daca codul primit prin bluetooth=5
  setTemp=27;                    //setam temperatura la care sa se opreasca fan-ul=27 grade
    lcd.clear();                //stergem totul de pe lcd
     lcd.setCursor(0,0);       //setam cursorul pe randul 1 caracterul 1
  lcd.print("Temp. setata:"); //printam pe lcd  
     lcd.setCursor(0,1);     //setam cursorul pe randul 2 caracterul 1
  lcd.print(setTemp);       //printam temperatura setata
  lcd.print(char(223));    //printam semnul de grade
  lcd.print("C");         //printam C(celsius)
  delay(2000);           //delay 2 secunde
            }
lcd.clear();//stergem totul de pe lcd
float temp = dht.readTemperature(); //citim temperatura de pe senzor

if (isnan(temp)) {                 //daca senzorul nu este conectat
lcd.print("Failed");              //printam pe lcd "failed"
delay(1000);                     //delay 1 sec
return;                         //return
}
lcd.setCursor(0,0);   //setam cursorul pe randul 1 caracterul 1
lcd.print("Temp: ");  //printam pe lcd temp:
lcd.print(temp);      //printam temperatura
lcd.print((char)223); //printam semnul de grade
lcd.print(" C");      //printam C(celsius)

if (temp > setTemp){        //daca temperatura din dht > decat temperatura setata
  digitalWrite(releu, LOW); //atunci pornim ventilatorul
  lcd.setCursor(0,1);       //setam cursorul pe randul 2 caracterul 1
  lcd.print("Fan = ON ");   // printam pe lcd fan=on
  delay(10);                //delay 10ms
}
else{                           //altfel (daca temp din dht < temp setata 
  digitalWrite(releu, HIGH);   //oprim ventilatorul
  lcd.setCursor(0,1);         //setam cursorul pe randul 2 caracterul 1
  lcd.print("Fan = OFF ");   // printam pe lcd fan=off
}
delay(2000);   //delay 2 secunde

}//inchidem bucla


           

Aplicația folosită este RoboRemo, dar pot fi folosite și alte aplicații compatibile. Am vorbit mai mult despre RoboRemo aici.

Cam atât cu acest post, dacă aveți întrebări nu ezitați să le lăsați mai jos, în secțiunea de comentarii.

Succes! 

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *