Akıllı Sera Projesi
Bu yazımızda arduino ile akıllı sera setimiz ile akıllı sera projesini yapacağız. Projemiz üzerinde bulunan Dht11 sensörü ile sıcaklık ve nemi, toprak nem sensörümüz ile toprağın nemini ve ldr ile de seranın ışığının değerilerini 2x16 lcd ekran üzerinden gözlemlenebilmektedir. Aynı zamanda projemizde bulunan butonlar ile sıcaklık, nem ve toprak nemi ayarları yapılabilmektedir. Setimizde bulunan malzemeleri sıralayalım. Setimizi Buradan satın alabilirsiniz.
- Arduino Uno SMD + USB Kablo
- 2x16 LCD Ekran
- I2C Karakter Dönüştürücü Modül
- Mini Dalgıç Su Pompası Motoru
- 4lü 5V Röle Kartı
- Su Motoru için Hortum
- Su Seviye Sensörü
- DHT11 Sıcaklık ve Nem Sensör Kartı
- Toprak Nem Sensörü
- 12V Mini Fan
- On Off Anahtar
- Buton x5
- 9V Pil Klipsi
- 12V Halojen Ampul
- G4 Duy
- Jumper Kablo Seti
Projemizin bağlantılarını yukarıdaki çizimde gösterildiği gibi yaptıktan sonra kodumuzu arduino uno ya yükleyebilriz.
Arduino kodu:
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
#define DHTPIN 6
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define ArttirButonu 7
#define EksiltButonu 9
#define SecButonu 8
#define ToprakSensoru A1
#define IsikSensoru A0
#define SuMotoru 2
#define Fan 4
#define Lamba 3
int MenuUstDeger[5] = {40, 100, 1000, 1000, 100};
int MenuDeger[5] = {};
int Menu = -1;
bool EkranYaz = 0;
double Zaman = 0, Zaman2 = 0;
void writeIntIntoEEPROM(int address, int number)
{
EEPROM.write(address, number >> 8);
EEPROM.write(address + 1, number & 0xFF);
}
int readIntFromEEPROM(int address)
{
return (EEPROM.read(address) << 8) + EEPROM.read(address + 1);
}
void setup() {
dht.begin();
lcd.init();
lcd.backlight();
pinMode(ArttirButonu, INPUT_PULLUP);
pinMode(EksiltButonu, INPUT_PULLUP);
pinMode(SecButonu, INPUT_PULLUP);
digitalWrite(ArttirButonu, HIGH);
digitalWrite(EksiltButonu, HIGH);
digitalWrite(SecButonu, HIGH);
pinMode(ToprakSensoru, INPUT);
pinMode(IsikSensoru, INPUT);
pinMode(SuMotoru, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Lamba, OUTPUT);
digitalWrite(SuMotoru, HIGH);
digitalWrite(Fan, HIGH);
digitalWrite(Lamba, HIGH);
Serial.begin(9600);
MenuDeger[0] = readIntFromEEPROM(0);
MenuDeger[1] = readIntFromEEPROM(2);
MenuDeger[2] = readIntFromEEPROM(4);
MenuDeger[3] = readIntFromEEPROM(6);
lcd.setCursor(3, 0);
lcd.print("Akilli Sera");
delay(100);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (digitalRead(SecButonu) == 0)
{
delay(50);
Menu++; if (Menu > 4)Menu = 0;
while (digitalRead(SecButonu) == 0);
EkranYaz = 1;
Zaman = millis();
}
if (digitalRead(EksiltButonu)== 0 && millis() - Zaman < 7000 )
{
delay(50);
MenuDeger[Menu] = MenuDeger[Menu] - 5;
if (MenuDeger[Menu] < 0)MenuDeger[Menu] = 0;
while (digitalRead(EksiltButonu) == 0);
EkranYaz = 1;
Zaman = millis();
}
if (digitalRead(ArttirButonu) == 0 && millis() - Zaman < 7000)
{
delay(50);
MenuDeger[Menu] = MenuDeger[Menu] + 5;
if (MenuDeger[Menu] > MenuUstDeger[Menu])MenuDeger[Menu] = MenuUstDeger[Menu];
while (digitalRead(ArttirButonu) == 0);
EkranYaz = 1;
Zaman = millis();
}
if (millis() - Zaman < 7000)
{
if (EkranYaz == 1)
{
if (Menu == 0)
{
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("SICAKLIK");
lcd.setCursor(7, 1);
lcd.print(MenuDeger[Menu]);
}
else if (Menu == 1)
{
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("NEM");
lcd.setCursor(7, 1);
lcd.print(MenuDeger[Menu]);
}
else if (Menu == 2)
{
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("TOPRAK");
lcd.setCursor(7, 1);
lcd.print(MenuDeger[Menu]);
}
else if (Menu == 3)
{
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("ISIK");
lcd.setCursor(7, 1);
lcd.print(MenuDeger[Menu]);
}
else if (Menu == 4)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kaydetmek icin");
lcd.setCursor(0, 1);
lcd.print("yukari tusa bas ");
if (MenuDeger[Menu] < 0)
{
MenuDeger[Menu] = 0;
}
}
EkranYaz = 0;
}
}
else if (millis() - Zaman2 > 4000)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ISI: ");
lcd.print(t);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Nem: ");
lcd.print(h);
Zaman2 = millis();
Menu = -1;
}
else if (millis() - Zaman2 > 2000 && millis() - Zaman2 < 2100)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TOPRAK: ");
lcd.print(analogRead(ToprakSensoru));
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("ISIK: ");
lcd.print(analogRead(IsikSensoru));
Menu = -1;
}
if (MenuDeger[4] > 0)
{
writeIntIntoEEPROM(0, MenuDeger[0]);
writeIntIntoEEPROM(2, MenuDeger[1]);
writeIntIntoEEPROM(4, MenuDeger[2]);
writeIntIntoEEPROM(6, MenuDeger[3]);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Veriler Kaydedildi...");
MenuDeger[4] = 0;
delay(1000);
Zaman = Zaman - 7000;
}
if (t < MenuDeger[0])
{
digitalWrite(Lamba, LOW);
}
else
{
digitalWrite(Lamba, HIGH);
}
if (h > MenuDeger[1])
{
digitalWrite(Fan, LOW);
}
else
{
digitalWrite(Fan, HIGH);
}
if (analogRead(ToprakSensoru) < MenuDeger[2]-10)
{
digitalWrite(SuMotoru, HIGH);
}
else if (analogRead(ToprakSensoru) > MenuDeger[2]+50)
{
digitalWrite(SuMotoru, LOW);
}
}