İçindekiler:

Arduino Çalar Saat Projesi: 14 Adım
Arduino Çalar Saat Projesi: 14 Adım

Video: Arduino Çalar Saat Projesi: 14 Adım

Video: Arduino Çalar Saat Projesi: 14 Adım
Video: Arduino Dijital Saat Yapımı (RTC/Saat Modülü Kullanımı) 2024, Kasım
Anonim
Arduino Çalar Saat Projesi
Arduino Çalar Saat Projesi

Bu projede, alarmın ayarlandığı zamanı ve zamanı göstermek için bir LCD ekranı kontrol etmek için Arduino Uno'yu kullanacağız. Her seferinde ayarlamak için düğmeleri kullanacağız.

Malzemeler:

  • Arduino Uno -
  • Breadboard -
  • Atlama Kabloları (x13+) -
  • 10 kohm direnç (x4) -
  • LCD ekran -
  • 7 Düğme -
  • Piezo Hoparlör -

Adım 1: Bağlantı Talimatları

Bağlantı Talimatları
Bağlantı Talimatları

1. Arduino üzerindeki 5V pininden bir jumper kablosunu breadboard üzerindeki + raylarından birine bağlayın.

Adım 2:

resim
resim

2. Arduino üzerindeki GND pininden bir jumper kablosunu breadboard üzerinde seçtiğiniz + rayının yanındaki - rayına bağlayın.

Aşama 3:

resim
resim

3. LCD ekranı güce, toprağa ve TX pinine (pim 1) bağlayın.

4. Adım:

resim
resim

4. Bacakları devre tahtasındaki boşluğun karşısına gelecek şekilde 7 düğmeyi devre tahtasına yerleştirin.

Adım 5:

resim
resim

5. 10 kohm'luk dirençleri - raydan GND pimi kendisine bağlı olarak düğmelerin sol alt pimlerine yerleştirin.

6. Adım:

resim
resim

6. Devre tahtanızdaki düğmelerin sağ alt pimi ile 5V rayı arasına atlama telleri yerleştirin.

7. Adım:

resim
resim

7. Önce 6, ardından 8-13 pinleri ile direncin bağlı olduğu buton üzerindeki pin arasına jumper kabloları yerleştirin.

Adım 8:

resim
resim

8. Ardından, Piezo hoparlörünüzü devre tahtasına yerleştirin ve pim 7'yi güç pimine, ardından 100 ohm'luk bir direnci toprağa bağlayın.

Adım 9: Programlama Talimatları

1. Genel Bakış: Bu proje, kullanıcıdan ilk açılışta geçerli saati, mevcut saati ve alarmın ayarlandığı saati ayarlamasını isteyecektir. Her seferinde ayarlamak için yukarıda bağlanan düğmeler kullanılacaktır. Soldan sağa, geçerli saat ayarlanır, geçerli dakika ayarlanır, geçerli AM veya PM ayarlanır, alarm saati ayarlanır, alarm dakikası ayarlanır, alarm AM veya PM ayarlanır. Son düğme, çalarken alarmı susturmak için kullanılır.

Adım 10:

2. Yapmamız gereken ilk şey, kullanacağımız değişkenimizi başlatmak.

// Kullanılacak değişkenleri sıfırlaint saat = 0; // Geçerli saat için saat int dakika = 0; //

Geçerli saat için dakika int saniye = 0; // Şimdiki zaman için saniye

int saat_a = 0; int // Alarm zamanı için saat

dakika_a = 0; // Alarm zamanı için dakika

bool am_pm = yanlış; // AM/PM geçiş bayrağı. Yanlış AM, Doğru PM'dir

bool am_pm_a = yanlış; // AM/PM alarm için geçiş bayrağı. Yanlış AM, Doğru PM'dir

int set_hr = 13; // Saati ayarlamak için pin 13'ü kullanın

int set_min = 12; // Dakika int'yi ayarlamak için pin 12'yi kullanın

set_am_pm = 11; // am/pm ayarlamak için pin 11'i kullanın

int set_hr_a = 10; // Alarm saatini ayarlamak için pin 10'u kullanın int set_min_a = 9; // Alarm için dakikayı ayarlamak için pin 9'u kullanın int set_am_pm_a = 8; // Alarm için am/pm ayarlamak için pin 8'i kullanın

int konuşmacı = 7; // Hoparlör için kullanılacak sabitle sessiz = 6; // Hoparlörü durdurmak için sabitle

bool alarmı = yanlış; // Alarm vermeye devam etmek için geçiş yapmak için işaretle

bool sessizleştirilmiş = yanlış; // Sessiz gösteren bayrağa basılmamış

int cur_time = 0; // Şimdiki zaman için değişken

int zaman = 0; // Geçen süre için değişken

Adım 11:

3. Ardından, LCD ekranı kurmamız ve kullanıcıya mevcut saati ayarlamasını söylememiz gerekiyor. Bunun yalnızca bir kez yapılması gerektiğinden, kurulum rutininde yapacağız.

geçersiz kurulum() {

// LCD ekranı ayarla

Seri.başla(9600); // Seriyi 9600 baud'da başlat

Serial.write(17); // Arka ışığı aç

Serial.write(24); // İmleç ve yanıp sönme olmadan ekranı açın

Serial.write(12); // Ekranı temizle

Serial.write(128); // İmleci sol üst köşeye taşı// pinMode'larını ayarla pinMode(set_hr, GİRİŞ); pinMode(set_min, INPUT);

pinMode(set_am_pm, INPUT);

pinMode(set_hr_a, INPUT);

pinMode(set_min_a, INPUT);

pinMode(set_am_pm_a, INPUT);

pinMode(hoparlör, ÇIKIŞ);

pinMode(sessiz, GİRİŞ);

// İlk güçte, kullanıcının geçerli saati ayarlamasını sağlayın. Serial.print("Geçerli saati ayarlayın"); gecikme(2000);

Serial.write(12);

printTimes();

cur_time = millis(); // Geçerli saati kaydet}

Adım 1/2:

4. Ardından, döngü rutininde, zamanı takip eder ve kullanıcının herhangi bir zamanı ayarlayıp ayarlamadığını görmek için düğme durumlarını okuruz.

boşluk döngüsü () {

// Tempo tutmak

tempo tutmak();

// Alarm verme zamanının gelip gelmediğini kontrol edin!

if((saat == saat_a && dakika == dakika_a && !sessiz) || alarm){tone(hoparlör, 2000, 500); // 500 ms için hoparlöre 2000 Hz ses çıkışı

gecikme(500); // 500 ms gecikme if(!alarm){ // Alarm kapalıysa açın

}

}

// Kullanıcı sessiz düğmesine basarak alarmı susturursa, alarmı durdurun if(alarm && !quieted && digitalRead(quiet)){

alarm = yanlış;

sessiz = doğru; }

// Alarmı sıfırlayın if(!alarm && sessizleştirildi && dakika != dakika_a){ sessizleştirildi = false;

}

// Set pinlerinin yükselip yükselmediğini kontrol edin ve eğer öyleyse, karşılık gelen değeri artırınif(digitalRead(set_hr) && hour < 12){

saat++;

printTimes();

geri tepme();

}

else if (digitalRead(set_hr) && saat == 12){ saat = 1;

printTimes();

geri tepme();

}

Başka{}

if(digitalRead(set_min) && dakika < 59){

dakika++;printTimes();

geri tepme();

}

else if (digitalRead(set_min) && dakika == 59){ dakika = 0;

printTimes();

geri tepme();

}

else{}if(digitalRead(set_am_pm) && am_pm){

am_pm = yanlış;

printTimes();

geri tepme();

}

else if (digitalRead(set_am_pm) && !am_pm){ am_pm = true;printTimes();

geri tepme();

}

else{}if(digitalRead(set_hr_a) && hour_a < 12){

saat_a++;

printTimes();

geri tepme();

}

else if (digitalRead(set_hr_a) && hour_a == 12){hour_a = 1;

printTimes();

geri tepme();

}

else{}if(digitalRead(set_min_a) && dakika_a < 59){

dakika_a++;

printTimes();

geri tepme();

}

else if (digitalRead(set_min) && dakika_a == 59){dakika_a = 0;

printTimes();

geri tepme();

}

else{}if(digitalRead(set_am_pm_a) && am_pm_a){

am_pm_a = yanlış;

printTimes();

geri tepme();

}

else if (digitalRead(set_am_pm_a) && !am_pm_a){am_pm_a = true;

printTimes();

geri tepme();

}

Başka{}

}

Adım 13:

5. Burada, oluşturduğum birkaç alt yordam göreceksiniz - debounce() ve printTimes(). Debounce(), düğmeleri yalnızca bir kez okuduğumuzdan emin olmak için kullanılır. Arduino saniyede binlerce kez taradığından, yalnızca bir kez okunmasını istediğinizde düğmeye birkaç kez basıldığını düşünebilir. Debounce(), düğme bırakılana kadar programı donduracaktır. printTimes() LCD ekranı günceller, ancak bu birkaç komut olduğundan, onları bir kez yazdım ve sonra bir zaman değeri değiştiğinde alt programı çağırabilirim.

// Herhangi bir tuşa basılırken bu fonksiyonda kalın ve 250 ms geciktirin.

void debounce(){

while(digitalRead(set_hr) || digitalRead(set_min) ||

digitalRead(set_am_pm) || digitalRead(set_hr_a) ||

digitalRead(set_min_a) || digitalRead(set_am_pm_a)){} gecikme(250);

}

// Herhangi bir değişiklik varsa güncellenen saatleri yazdırır

geçersiz printTimes(){

Serial.write(12);

Serial.print("Güncel Saat:");

Serial.write(148);

if(saat < 10){

Seri.print("0");

}

Seri.baskı(saat);

Seri.print(":");

if(dakika < 10){

Seri.print("0");

}

Seri.print(dakika);Serial.print(":");

if(saniye < 10){

Seri.print("0");

}

Seri.baskı(saniye);

if (am_pm){

Seri.print("PM");

}

Başka{

Serial.print("AM");

}

Serial.write(168);

Serial.print("Alarm Seti:");

Serial.write(188);

if(saat_a < 10){

Seri.print("0");

}

Serial.print(saat_a);

Seri.print(":");

if(dakika_a < 10){

Seri.print("0");

}

Seri.print(dakika_a);

eğer (am_pm_a){

Seri.print("PM");

}

Başka{

Serial.print("AM");

}

}

// void zaman parametrelerini artır

tempo tutmak(){

etime = millis() - cur_time;

if(etime >= 1000 && saniye < 59){

ikinci++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && saniye == 59 && dakika < 59){ saniye = 0;

dakika++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && saniye == 59 && dakika == 59 && saat < 12){

saniye = 0; dakika =

0; saat++; cur_time =

milli(); printTimes();

}

else if(etime >= 1000 && saniye == 59 && dakika == 59 && saat == 12){

saniye = 0; dakika =

0; saat = 1; am_pm =

!am_pm;

cur_time = millis();

printTimes();

}

Başka{}

}

Adım 14:

6. İşte bu!

Derleyin ve yükleyin ve işiniz bitti!

Önerilen: