Projemizin temel amacı ortamın ısı ve nemini ölçüp ekranda göstermektir.Wifi modülü aracılığıyla da internet sitesine aktarılıp grafikle gösterilmesidir.Sıcaklık değeri 30 derece altında iken röle 1 yani ısıtıcı,sıcaklık değeri 30 derece üstünde iken röle 2 yani soğutucu aktif hale gelir ve sıcaklık 30 derecede sabitlenir.
Projede kullanılan malzemeler
1.Arduino Uno
2.DHT11 ısı ve nem sensörü
3.ESP8266 Wifi modülü
4.Nokia LCD 5110 ekran
5.5V’luk ikili röle
6.3.3 Voltluk Voltaj regülatörü
Kullandıgımız bağlantılar:
-5110 LCD Ekran için bağlantılar-
Arduino 5110 LCD
8.pin CLK
9.pin DIN
10.pin DC
11.pin RST
12.pin CE
3.3V VCC,BL
GND GND
-DHT11 için bağlantılar-
Arduino DHT11
5V VCC
GND GND
4.pin DATA
-ESP8266 için bağlantılar-
Arduino ESP8266
2.pin TX
3.pin RX
-Esp’nin VCC ve CH_PD pinleri 3.3 volt regülatörün pozitif yoluna. GND bacağı ise negatif yoluna bağlandı.
-2 Kanal 5 Volt röle-
Arduino Röle
5V VCC
GND GND
5.pin röle1
6.pin röle2
İlk olarak kullanacağımız sensörlerin kütüphanelerini belirledik. Kullandığımız wifi modülü olan Esp8266’nın yazılım güncellemesi yapıldı.Kullandığımız kütüphaneler:
-Pcd8544 Lcd kütüphanesi
-Dht11 kütüphanesi
-Esp8266 kütüphanesi
-Thingspeak kütüphanesi
-Kullandığımız kodlar-
#include <SoftwareSerial.h>
SoftwareSerial espSerial = SoftwareSerial(2,3);
#include <SPI.h>
#include <PCD8544.h>
static PCD8544 lcd = PCD8544(8, 9, 10, 11, 12);
int isitici=5;
int sogutucu=6;
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
String apiKey = “6PA5O1G1A5MOYZZG”;
String ssid=”a”;
String password =”aaaaaaaa”;
boolean DEBUG=true;
//======================================================================== showResponce
void showResponse(int waitTime){
long t=millis();
char c;
while (t+waitTime>millis()){
if (espSerial.available()){
c=espSerial.read();
if (DEBUG) Serial.print(c);
}
}
}
//========================================================================
boolean thingSpeakWrite(float value1, float value2){
String cmd = “AT+CIPSTART=\”TCP\”,\””;
cmd += “184.106.153.149”;
cmd += “\”,80″;
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
if(espSerial.find(“Error”)){
if (DEBUG) Serial.println(“AT+CIPSTART error”);
return false;
}
String getStr = “GET /update?api_key=”;
getStr += apiKey;
getStr +=”&field1=”;
getStr += String(value1);
getStr +=”&field2=”;
getStr += String(value2);
getStr += “\r\n\r\n”;
cmd = “AT+CIPSEND=”;
cmd += String(getStr.length());
espSerial.println(cmd);
if (DEBUG) Serial.println(cmd);
delay(100);
if(espSerial.find(“>”)){
espSerial.print(getStr);
if (DEBUG) Serial.print(getStr);
}
else{
espSerial.println(“AT+CIPCLOSE”);
if (DEBUG) Serial.println(“AT+CIPCLOSE”);
return false;
}
return true;
}
//================================================================================ setup
void setup() {
DEBUG=true;
Serial.begin(9600);
lcd.begin(84, 48);
dht.begin();
lcd.setCursor(10,0);
lcd.print(“Sicaklik: “);
lcd.setCursor(10,3);
lcd.print(“Nem:”);
lcd.setContrast(50);
espSerial.begin(115200);
pinMode(isitici, OUTPUT);
pinMode(sogutucu,OUTPUT);
espSerial.println(“AT+CWMODE=1”);
showResponse(1000);
espSerial.println(“AT+CWJAP=\””+ssid+”\”,\””+password+”\””);
showResponse(5000);
if (DEBUG) Serial.println(“Setup completed”);
}
// ====================================================================== loop
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
if (DEBUG) Serial.println(“Failed to read from DHT”);
}
else {
if (DEBUG) Serial.println(“Temp=”+String(t)+” *C”);
if (DEBUG) Serial.println(“Humidity=”+String(h)+” %”);
thingSpeakWrite(t,h);
}
lcd.setCursor(21,1);
lcd.print(t);
lcd.print(” C”);
Serial.print(“Sicaklik: “); Serial.println(t);
lcd.setCursor(21,4);
lcd.print(h);
lcd.print(” %”);
Serial.print(“Nem: “); Serial.println(h);
if(t>=30){
digitalWrite(sogutucu, HIGH);
digitalWrite(isitici, LOW);
}
if(t<30){
digitalWrite(isitici, HIGH);
digitalWrite(sogutucu, LOW);
}
delay(20000); }
ayrıca devremizi baskı devreye de aktardık.