Arduino Saat Modülü Bir Süre Sonra Sapıyor

G3258

Kilopat
Katılım
9 Temmuz 2015
Mesajlar
1.657
Makaleler
5
Çözümler
5
Arduino, DS3231 ve röle modülü kullanarak babama paydos zili yapmıştım. Paydos vakti gelince zilin çalması gerekiyor ve öyle de oluyor. Bu aşamada bir sıkıntı yok zaten.

Sorun saatin zamanla sapması. Yani ben saati ayarlayıp Arduino'ya kodu yükledikten 1 - 2 ay sonra saat olması gerekenden geri kalmaya başlıyor. Bu yüzden 1 - 2 ayda bir Arduino'yu ordan alıp tekrar saati doğru yazarak kodu yüklemem gerekiyor. Saatin üstündeki pilde herhangi bir sıkıntı yok. Bu neden olabilir? Daha iyi bir RTC modülü öneriniz var mı? Bu sorunu nasıl çözebilirim?
 
Son düzenleyen: Moderatör:
Arduino, DS3231 ve röle modülü kullanarak babama paydos zili yapmıştım. Paydos vakti gelince zilin çalması gerekiyor ve öyle de oluyor. Bu aşamada bir sıkıntı yok zaten.

Sorun saatin zamanla sapması. Yani ben saati ayarlayıp Arduino'ya kodu yükledikten 1 - 2 ay sonra saat olması gerekenden geri kalmaya başlıyor. Bu yüzden 1 - 2 ayda bir Arduino'yu oradan alıp tekrar saati doğru yazarak kodu yüklemem gerekiyor. Saatin üstündeki pilde herhangi bir sıkıntı yok. Bu neden olabilir? Daha iyi bir RTC modülü öneriniz var mı? Bu sorunu nasıl çözebilirim?

Aynı modülü ben de kullandım sorun olmuyor. Yazdığın kodu ve devre şemasını gönderebilir misin? Ayrıca bahsettiğin sorun pilden kaynaklı gibi düzgün çalıştığından emin misin?
 
Aynı modülü ben de kullandım sorun olmuyor. Yazdığın kodu ve devre şemasını gönderebilir misin? Ayrıca bahsettiğin sorun pilden kaynaklı gibi düzgün çalıştığından emin misin?
Pilin düzgün çalıştığına eminim. Sorun pildendir diye pili de birkaç defa değiştirdim. Pilin voltajını ölçtüğümde ise herhangi bir sıkıntı olmadığını görüyorum.

[CODE lang="c" title="Arduino"]#include <DS3231.h>

int Relay = 4;

DS3231 rtc(SDA,SCL);
Time t;

const int sabahHour = 8;
const int sabahMin = 03;
const int sabahSec = 00;

const int sabahKahvaltiHour = 9;
const int sabahKahvaltiMin = 30;
const int sabahKahvaltiSec = 00;

const int sabahKahvaltiBitisHour = 9;
const int sabahKahvaltiBitisMin = 45;
const int sabahKahvaltiBitisSec = 00;

const int oglenArasiHour = 13;
const int oglenArasiMin = 00;
const int oglenArasiSec = 00;

const int oglenArasiBitisHour = 14;
const int oglenArasiBitisMin = 00;
const int oglenArasiBitisSec = 00;

const int ikindiArasiHour = 16;
const int ikindiArasiMin = 00;
const int ikindiArasiSec = 00;

const int ikindiArasiBitisHour = 16;
const int ikindiArasiBitisMin = 15;
const int ikindiArasiBitisSec = 00;

const int aksamCikisHour = 19;
const int aksamCikisMin = 33;
const int aksamCikisSec = 00;


void setup() {

Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, HIGH);

}

void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print("hour(s), ");
Serial.print(t.min);
Serial.print("minute(s) ");
Serial.print(t.sec);
Serial.print("second(s)");
Serial.println(" ");
delay(1000);


if (t.hour == sabahHour && t.min == sabahMin && t.sec == sabahSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == sabahKahvaltiHour && t.min == sabahKahvaltiMin && t.sec == sabahKahvaltiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == sabahKahvaltiBitisHour && t.min == sabahKahvaltiBitisMin && t.sec == sabahKahvaltiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == oglenArasiHour && t.min == oglenArasiMin && t.sec == oglenArasiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == oglenArasiBitisHour && t.min == oglenArasiBitisMin && t.sec == oglenArasiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == ikindiArasiHour && t.min == ikindiArasiMin && t.sec == ikindiArasiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == ikindiArasiBitisHour && t.min == ikindiArasiBitisMin && t.sec == ikindiArasiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == aksamCikisHour && t.min == aksamCikisMin && t.sec == aksamCikisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}
else {
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

}[/CODE]
Devre şeması yok elimde şu an maalesef, zaten bildiğiniz klasik bağlantılar yani.
 
Pilin düzgün çalıştığına eminim. Sorun pildendir diye pili de birkaç defa değiştirdim. Pilin voltajını ölçtüğümde ise herhangi bir sıkıntı olmadığını görüyorum.

[CODE lang="c" title="Arduino"]#include <DS3231.h>

int Relay = 4;

DS3231 rtc(SDA,SCL);
Time t;

const int sabahHour = 8;
const int sabahMin = 03;
const int sabahSec = 00;

const int sabahKahvaltiHour = 9;
const int sabahKahvaltiMin = 30;
const int sabahKahvaltiSec = 00;

const int sabahKahvaltiBitisHour = 9;
const int sabahKahvaltiBitisMin = 45;
const int sabahKahvaltiBitisSec = 00;

const int oglenArasiHour = 13;
const int oglenArasiMin = 00;
const int oglenArasiSec = 00;

const int oglenArasiBitisHour = 14;
const int oglenArasiBitisMin = 00;
const int oglenArasiBitisSec = 00;

const int ikindiArasiHour = 16;
const int ikindiArasiMin = 00;
const int ikindiArasiSec = 00;

const int ikindiArasiBitisHour = 16;
const int ikindiArasiBitisMin = 15;
const int ikindiArasiBitisSec = 00;

const int aksamCikisHour = 19;
const int aksamCikisMin = 33;
const int aksamCikisSec = 00;

void setup() {

Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, HIGH);

}

void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print("hour(s), ");
Serial.print(t.min);
Serial.print("minute(s) ");
Serial.print(t.sec);
Serial.print("second(s)");
Serial.println(" ");
delay(1000);

if (t.hour == sabahHour && t.min == sabahMin && t.sec == sabahSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == sabahKahvaltiHour && t.min == sabahKahvaltiMin && t.sec == sabahKahvaltiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == sabahKahvaltiBitisHour && t.min == sabahKahvaltiBitisMin && t.sec == sabahKahvaltiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == oglenArasiHour && t.min == oglenArasiMin && t.sec == oglenArasiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == oglenArasiBitisHour && t.min == oglenArasiBitisMin && t.sec == oglenArasiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == ikindiArasiHour && t.min == ikindiArasiMin && t.sec == ikindiArasiSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == ikindiArasiBitisHour && t.min == ikindiArasiBitisMin && t.sec == ikindiArasiBitisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

else if (t.hour == aksamCikisHour && t.min == aksamCikisMin && t.sec == aksamCikisSec) {
digitalWrite(Relay, LOW);
Serial.println("Bell ON");
delay(2000);
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}
else {
digitalWrite(Relay, HIGH);
Serial.println("Bell OFF");
}

}[/CODE]
Devre şeması yok elimde şu an maalesef, zaten bildiğiniz klasik bağlantılar yani.

Koda çok bakamadım ama sorun yok gibi duruyor. Eğer devre şemasında da soru yoksa(modüle gelen voltaj, Arduino kartı vs.) Sorun modül ve ya Arduino kartından kaynaklı olabilir. Onları da kendin test etmen gerek.
Koda çok bakamadım ama sorun yok gibi duruyor. Eğer devre şemasında da soru yoksa(modüle gelen voltaj, Arduino kartı vs.) Sorun modül veya Arduino kartından kaynaklı olabilir. Onları da kendin test etmen gerek.

Ek olarak kodda sorun olma ihtimaline karşı başka bir hazır kod ile test edebilirsin.
 
Koda çok bakamadım ama sorun yok gibi duruyor. Eğer devre şemasında da soru yoksa(modüle gelen voltaj, Arduino kartı vs.) Sorun modül ve ya Arduino kartından kaynaklı olabilir. Onları da kendin test etmen gerek.


Ek olarak kodda sorun olma ihtimaline karşı başka bir hazır kod ile test edebilirsin.
Kodun yaptığı iş sadece saati okuyup ona göre işlem yapmak, koddan kaynaklı olarak saatin sapma yapacağı benim aklıma yatmıyor. Aynı modülden bir tane daha alayım bakalım soruna çare olacak mı.
 
Kodun yaptığı iş sadece saati okuyup ona göre işlem yapmak, koddan kaynaklı olarak saatin sapma yapacağı benim aklıma yatmıyor. Aynı modülden bir tane daha alayım bakalım soruna çare olacak mı?

Dediğim gibi sorun kod kaynaklı durmuyor ama emin olmak için yapabilirsiniz. Onun dışında modül ya da Arduino kartı sebep oluyor olabilir.
 

Yeni konular

Geri
Yukarı