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?
- Arduino UNO(sau orice alt dispozitiv compatibil arduino);
- Modul Bluetooth HC-05;
- Modul senzor de temperatură DHT11(sau orice alt DHT);
- LCD 1602;
- Potențiometru 10KΩ;
- Rezistor 220Ω;
- Releu 5V;
- 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.