Menü

SICAKLIK KONTROLLÜ AKILLI ROLE

8 Aralık 2017 - Arduino
4.6 (92.73%) 11 votes

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.

 

SICAKLIK KONTROLLÜ AKILLI ROLE” üzerine 13 düşünce

  • mehmet

    drençler nereye baglanıyor onu anlayamadım yardım edermisiniz

    Yanıtla
      Fatih Ahmet Aluç

      Merhaba ,Arduino tx ile esp rx pinin arasına yerleştirdik.1k 2k ohm şeklinde yerleştirdiğimiz dirençleri gerilim bölücü olarak kullandık ve 5 volt olan dijital pin çıkışından 3.3 volt almış olduk.

      Yanıtla
  • mehmet

    giriş voltajını nereden sağlıyoruz?

    Yanıtla
      Fatih Ahmet Aluç

      Merhaba esp8266’yı beslemek için 3.3 volt vermeniz gerekiyor.Esp veri iletişimi halinde değişken akım çektiği için harici bir 3.3 volt gerilim kaynağına onu bağladık Size önerim ams1117 kullanmanız.Arduino’yu usb portundan besledik.

      Yanıtla
  • mehmet

    hocam kod hata veriyor

    Yanıtla
  • mehmet

    Error compiling for board Arduino/Genuino Uno
    hatası veriyor kod

    Yanıtla
      Fatih Ahmet Aluç

      merhaba kütüphanelerinde hata olabilir.

      Yanıtla
        mehmet

        aynen kütüphanede eksik varmış saolun

        Yanıtla
  • mehmet

    kodları buradan kopyalayıp yapıştırıyorum olmuyor
    kütüphaneleride yükledim olmuyor

    Yanıtla
  • mehmet

    size zahmet olmazsa kodları arduino dosyası olarak
    e-postadan yollayabilirmisiniz LÜTFEN
    ([email protected]) LÜTFEN

    Yanıtla
  • aaaaa

    arduino nano ile yapsam fark edermi

    Yanıtla
  • Bir Cevap Yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Araç çubuğuna atla