Arduino, RTC saat modülü ve servo motor ile mama kabı nasıl yapılır?

s.zahit

Kilopat
Katılım
20 Mayıs 2017
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
Kedime zaman ayarlı mama kabı yapmak istiyorum fakat ufak bir internet taraması yaptığımda böyle bir kodla karşılaşmadım. Kısa süreli ve RTC modülü olmadan yapanlar var fakat ben 1 saate değil de 12 saate bir vermesini istiyorum, bunun için de zannediyorum ki RTC modülüne ihtiyaç var. Peki bu kod nasıl olabilir?

12 saatin sonunda servo motor 0'dan 180 dereceye gelsin ve 5 saniye sonra eski haline dönsün ve tekrar 12 saati saymaya başlasın. Yardımcı olabilir misiniz?
 
Açıkçası daha önce RTC modülünü kullanmadım ama sanırım çok zor değildir. Dokümantasyonlarına ve kod örneklerine bakarak nasıl çalıştığını anlayabilirsiniz. Zaten gerisi kod bakımından çok da zorlamaz.

Açıkçası daha önce RTC modülünü kullanmadım ama sanırım çok zor değildir. Dokümantasyonlarına ve kod örneklerine bakarak nasıl çalıştığını anlayabilirsiniz. Zaten gerisi kod bakımından çok da zorlamaz.

Bu arada dediğim gibi o modülü kullanmadım eğer kullanması zor bir şey falansa linçlemeyin :D. Sadece daha önceki tecrübelerime dayanarak söyledim.
 
C++:
#include <Servo.h>
#define ServoPin 3
Servo myservo;

int saat = 12;
unsigned long aralik = 1000*60*60*saat;

void setup() {
  myservo.attach(ServoPin);
}

void loop() {
      myservo.write(180);
      delay(5000);
      myservo.write(0);
      delay(aralik);
}

Bu şekil bir kod işinizi görür. Int saat = 12; satırındaki 12 sayısını kaç ile değiştirirseniz o kadar saat aralıkla 5 saniyeliğine servo motor açılıp kapanacaktır. Bu kod enerji aldığında servo motor açılıp kapnacak sonra saat değişkeninin değeri kadar saat bekeleyecektir. Eğer arduino sürekli elektriğe bağlı olacaksa bu kod işinizi görür fakat elektrik kesintileri gibi istisnai durumlarda manuel olarak kedinin mama saati geldiğinde fişi çıkar tak yapmanız veya arduino üstünde bulunan reset tuşuna basmanız gerekebilir.
 
C++:
#include <Servo.h>
#define ServoPin 3
Servo myservo;

int saat = 12;
unsigned long aralik = 1000*60*60*saat;

void setup() {
  myservo.attach(ServoPin);
}

void loop() {
      myservo.write(180);
      delay(5000);
      myservo.write(0);
      delay(aralik);
}

Bu şekil bir kod işinizi görür. Int saat = 12; satırındaki 12 sayısını kaç ile değiştirirseniz o kadar saat aralıkla 5 saniyeliğine servo motor açılıp kapanacaktır. Bu kod enerji aldığında servo motor açılıp kapnacak sonra saat değişkeninin değeri kadar saat bekeleyecektir. Eğer arduino sürekli elektriğe bağlı olacaksa bu kod işinizi görür fakat elektrik kesintileri gibi istisnai durumlarda manuel olarak kedinin mama saati geldiğinde fişi çıkar tak yapmanız veya arduino üstünde bulunan reset tuşuna basmanız gerekebilir.
Hocam maalesef kod doğru çalışmıyor. 12 saat değil 12 saniyede kapanıp açılıyor. Bir de rtc modülünü kullansak elektrik kesintilerinde dahi doğru saatinde açılıp kapanmaz mı? Yeniden teşekkür ederim.

Kod:
#include <Servo.h>

Servo servoMotor;
int servoPin = 9;  // Servo motorun bağlı olduğu pin
unsigned long previousMillis = 0;
const long interval = 43200000;  // 12 saat (12 * 60 * 60 * 1000 milisaniye)
boolean servoOpen = false;

void setup() {
  servoMotor.attach(servoPin);
  servoMotor.write(0);  // Servo motoru başlangıçta kapalı konumda tut
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    if (servoOpen) {
      servoMotor.write(0);  // Servo motoru kapat
      servoOpen = false;
    } else {
      servoMotor.write(90);  // Servo motoru aç (90 derece)
      servoOpen = true;
      delay(5000);  // 5 saniye bekle
    }
  }
}


Hocam bu da chatgpt'nin yazdığı kod, sonradan aklıma geldi chat gptye yazmak.

Kod:
#include <Servo.h>
#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;
Servo servoMotor;

int servoPin = 9;  // Servo motorun bağlı olduğu pin
int openHour = 8;   // Servo motorun açılma saati (24 saat formatında)
int closeHour = 20; // Servo motorun kapanma saati (24 saat formatında)
boolean servoOpen = false;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();
 
  if (!rtc.isrunning()) {
    Serial.println("RTC modülü başlatılamadı!");
    while (1);
  }

  servoMotor.attach(servoPin);
  servoMotor.write(0);  // Servo motoru başlangıçta kapalı konumda tut
}

void loop() {
  DateTime now = rtc.now();
  int currentHour = now.hour();

  if (currentHour == openHour && !servoOpen) {
    servoMotor.write(90);  // Servo motoru aç (90 derece)
    servoOpen = true;
    delay(5000);  // 5 saniye bekle
  }
  else if (currentHour == closeHour && servoOpen) {
    servoMotor.write(0);  // Servo motoru kapat
    servoOpen = false;
  }
}

Bu da RTC modülünü kullanarak belirlediğimiz bir saatte kabın açılmasını, açıksa kapanmasına yarayan kod.
 
Son düzenleme:
Hocam maalesef kod doğru çalışmıyor. 12 saat değil 12 saniyede kapanıp açılıyor. Bir de rtc modülünü kullansak elektrik kesintilerinde dahi doğru saatinde açılıp kapanmaz mı? Yeniden teşekkür ederim.
Kusura bakmayın hocam simülasyonda denedim yanlış olmuş olabilir. Evet rtc modülü kullanırsanız elektrik olduğu sürece saat 8 ve 20 de servo motor açılacaktır. Fakat örneğin 7 de elektrik kesildi ve 9 da geldi. Bu durumda mama elektrikler gelse bile saat 20 ye kadar dökülmeyecektir.
 
Kusura bakmayın hocam simülasyonda denedim yanlış olmuş olabilir. Evet rtc modülü kullanırsanız elektrik olduğu sürece saat 8 ve 20 de servo motor açılacaktır. Fakat örneğin 7 de elektrik kesildi ve 9 da geldi. Bu durumda mama elektrikler gelse bile saat 20 ye kadar dökülmeyecektir.
Hocam çok teşekkür ederim, değerli vaktinizi aldım, hakkınızı helal edin.
 

Technopat Haberler

Yeni konular

Geri
Yukarı