Mündəricat:

Arduino Zəngli Saat Layihəsi: 14 addım
Arduino Zəngli Saat Layihəsi: 14 addım

Video: Arduino Zəngli Saat Layihəsi: 14 addım

Video: Arduino Zəngli Saat Layihəsi: 14 addım
Video: Lesson 99: Building Arduino Digital Clock using DS3231 LCD and Seven Segment Display 2024, Noyabr
Anonim
Arduino Zəngli Saat Layihəsi
Arduino Zəngli Saat Layihəsi

Bu layihədə, Arduino Uno -dan istifadə edərək LCD ekranı idarə etmək üçün həyəcan siqnalının hazırkı vaxtını və vaxtını göstərəcəyik. Hər dəfə təyin etmək üçün düymələrdən istifadə edəcəyik.

Materiallar:

  • Arduino Uno -
  • Çörək lövhəsi -
  • Jumper Wires (x13+) -
  • 10 kohm rezistor (x4) -
  • LCD ekran -
  • 7 Düymə-https://vilros.com/collections/raspberry-pi-acces…
  • Piezo Dinamik -

Addım 1: Bağlama Təlimatları

Bağlanma Təlimatları
Bağlanma Təlimatları

1. Arduino üzərindəki 5V pinindən bir keçid telini çörək lövhəsindəki + raylardan birinə bağlayın.

Addım 2:

Şəkil
Şəkil

2. Arduino üzərindəki GND pinindən bir keçid telini çörək taxtasında seçdiyiniz + relsin yanındakı relsə bağlayın.

Addım 3:

Şəkil
Şəkil

3. LCD ekranı gücə, yerə və TX pininə (pin 1) qoşun.

Addım 4:

Şəkil
Şəkil

4. Ayaqları çörək taxtasındakı boşluqdan keçərək çörək taxtasına 7 düymə qoyun.

Addım 5:

Şəkil
Şəkil

5. Düymənin sol alt sancaqlarına bağlı olan GND pinli relsdən 10 kohm rezistoru yerləşdirin.

Addım 6:

Şəkil
Şəkil

6. Keçid tellərini düymələrin sağ alt pimi ilə çörək lövhənizdəki 5V ray arasında yerləşdirin.

Addım 7:

Şəkil
Şəkil

7. Keçid tellərini 6, daha sonra 8-13 pinləri və rezini bağladığı düymənin arasına yerləşdirin.

Addım 8:

Şəkil
Şəkil

8. Sonra, Piezo dinamikinizi çörək taxtasına qoyun və pin 7 -ni elektrik pininə, sonra yerə 100 ohm rezistora bağlayın.

Addım 9: Proqramlaşdırma Təlimatları

1. Baxış: Bu layihə, istifadəçidən ekrandakı cari vaxtı və həyəcan siqnalının təyin olunduğu vaxtı təyin etməsini xahiş edəcək. Hər dəfə təyin etmək üçün yuxarıdakı düymələrdən istifadə olunacaq. Soldan sağa, onlar cari saatı, cari dəqiqəni, cari AM və ya PM -i, zəngli saatı, həyəcan dəqiqəsini, həyəcanı AM və ya PM -i təyin edirlər. Son düymə həyəcan siqnalı çaldıqda onu susdurmaq üçün istifadə olunur.

Addım 10:

2. Etməli olduğumuz ilk şey, istifadə edəcəyimiz dəyişənimizi işə salmaqdır.

// İstifadə ediləcək dəyişənləri işə salın saat = 0; // Cari vaxt üçün saat int dəqiqə = 0; //

Cari vaxt üçün dəqiqə int saniyə = 0; // Cari vaxt üçün ikinci

int hour_a = 0; int // Zəngli saat üçün saat

dəqiqə_a = 0; // Zəngli saat üçün dəqiqə

bool am_pm = yalan; // AM/PM bayrağı dəyişdirin. Yanlış AM, doğru PMdir

bool am_pm_a = yalan; // AM/PM siqnalizasiya üçün bayrağı dəyişir. Yanlış AM, doğru PMdir

int set_hr = 13; // Saatı təyin etmək üçün pin 13 istifadə edin

int set_min = 12; // int int dəqiqəsini təyin etmək üçün pin 12 -dən istifadə edin

set_am_pm = 11; // Səhər/axşamı təyin etmək üçün pin 11 -dən istifadə edin

int set_hr_a = 10; // siqnalizasiya saatını təyin etmək üçün pin 10 istifadə edin int set_min_a = 9; // siqnalizasiya dəqiqəsini təyin etmək üçün pin 9 istifadə edin int set_am_pm_a = 8; // Siqnal üçün səhər/axşamı təyin etmək üçün pin 8 -dən istifadə edin

int dinamik = 7; // Dinamik üçün sakit olmaq üçün istifadə olunan pin = 6; // Dinamiki dayandırmaq üçün bərkidin

bool həyəcanı = yalan; // Narahat olmaq üçün keçmək üçün bayraq çəkin

bool sakitləşdi = yalan; // Sükut göstərən bayraq basılmadı

int cur_time = 0; // Cari vaxt üçün dəyişkəndir

int etime = 0; // Ötən müddət ərzində dəyişkəndir

Addım 11:

3. Sonra, LCD ekranı qurmalı və istifadəçiyə cari vaxtı təyin etməsini söyləməliyik. Bunun yalnız bir dəfə edilməsi lazım olduğundan, bunu quraşdırma qaydasında edəcəyik.

boş quraşdırma () {

// LCD ekran qurun

Serial.begin (9600); // Serialı 9600 baudda başladın

Serial.write (17); // Arxa işığı yandırın

Serial.write (24); // Ekranı kursorla və yanıb -sönmədən açın

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

Serial.write (128); // İmleci sol üst küncə köçürün // PinModes pinMode qurun (set_hr, GİRİŞ); pinMode (set_min, GİRİŞ);

pinMode (set_am_pm, INPUT);

pinMode (set_hr_a, GİRİŞ);

pinMode (set_min_a, GİRİŞ);

pinMode (set_am_pm_a, GİRİŞ);

pinMode (dinamik, Çıxış);

pinMode (səssiz, GİRİŞ);

// İlkin gücdə istifadəçinin cari vaxtı təyin etməsi. Serial.print ("Cari vaxtı təyin et"); gecikmə (2000);

Serial.write (12);

printTimes ();

cur_time = milis (); // Cari vaxtı saxla}

Addım 12:

4. Sonra, dövrə rutinində, vaxtı izləyirik və düymənin vəziyyətini oxuyuruq ki, istifadəçinin vaxtlardan birini təyin edib -etmədiyini öyrənək.

boşluq döngəsi () {

// Vaxt saxla

keepTime ();

// Həyəcan etməyin vaxtı olub olmadığını yoxlayın!

if ((saat == hour_a && dəqiqə == dəqiqə_a &&! sakit) || həyəcan) {ton (dinamik, 2000, 500); // Dinamikə 500 ms üçün 2000 Hz səs çıxarın

gecikmə (500); // 500 ms gecikdirsə (! Həyəcan) {// Siqnal söndürülsə, onu yandırın

}

}

// İstifadəçi səs düyməsini basaraq həyəcanı susdurursa, (həyəcan &&! Sakitləşdirilmiş && digitalRead (səssiz)) {

həyəcan = yalan;

sakitləşdi = doğru; }

// Siqnalı sıfırlayın, əgər (! Siqnal && sakitləşdirilmiş && dəqiqə! = Dəqiqə_a) {sakitləşdirilmiş = yalan;

}

// Quraşdırılmış sancaqların yüksək olub olmadığını yoxlayın və əgər varsa, müvafiq dəyəri artırın (digitalRead (set_hr) && hour <12) {

saat ++;

printTimes ();

çıxarmaq ();

}

başqa halda (digitalRead (set_hr) && hour == 12) {hour = 1;

printTimes ();

çıxarmaq ();

}

başqa {}

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

dəqiqə ++; printTimes ();

çıxarmaq ();

}

başqa halda (digitalRead (set_min) && minutes == 59) {minutes = 0;

printTimes ();

çıxarmaq ();

}

başqa {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = yalan;

printTimes ();

çıxarmaq ();

}

başqa halda (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

çıxarmaq ();

}

başqa {} if (digitalRead (set_hr_a) && hour_a <12) {

hour_a ++;

printTimes ();

çıxarmaq ();

}

başqa halda (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

çıxarmaq ();

}

başqa {} if (digitalRead (set_min_a) && minutes_a <59) {

dəqiqə_a ++;

printTimes ();

çıxarmaq ();

}

başqa halda (digitalRead (set_min) && minutes_a == 59) {minutes_a = 0;

printTimes ();

çıxarmaq ();

}

başqa {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = yalan;

printTimes ();

çıxarmaq ();

}

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

printTimes ();

çıxarmaq ();

}

başqa {}

}

Addım 13:

5. Burada yaratdığım bir neçə alt proqram görürsünüz - debounce () və printTimes (). Debounce () düymələri yalnız bir dəfə oxuduğumuzdan əmin olmaq üçün istifadə olunur. Arduino saniyədə min dəfə taradığından, yalnız bir dəfə oxumaq istədiyiniz zaman düymənin bir neçə dəfə basıldığını düşünə bilər. Düymə buraxılana qədər Debounce () proqramı donduracaq. printTimes () LCD ekranı yeniləyir, amma bir neçə əmr olduğu üçün onları bir dəfə yazdım və sonra zaman dəyəri dəyişdikdə alt proqrama zəng edə bilərəm.

// Hər hansı bir düyməyə basılarkən bu funksiyada qalın və 250 ms gecikdirin.

ləğv et () {

isə (digitalRead (set_hr) || digitalRead (set_min) ||

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

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} gecikmə (250);

}

// Dəyişiklik olarsa, yenilənmiş vaxtları yazır

void printTimes () {

Serial.write (12);

Serial.print ("Cari Saat:");

Serial.write (148);

əgər (saat <10) {

Serial.print ("0");

}

Serial.çap (saat);

Serial.print (":");

əgər (dəqiqə <10) {

Serial.print ("0");

}

Serial.print (dəqiqə); Serial.print (":");

əgər (ikinci <10) {

Serial.print ("0");

}

Serial. çap (ikinci);

əgər (am_pm) {

Serial.print ("PM");

}

başqa {

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Siqnal Seti:" üçün);

Serial.write (188);

əgər (saat_a <10) {

Serial.print ("0");

}

Serial.print (hour_a);

Serial.print (":");

əgər (dəqiqə_a <10) {

Serial.print ("0");

}

Serial. çap (dəqiqə_a);

əgər (am_pm_a) {

Serial.print ("PM");

}

başqa {

Serial.print ("AM");

}

}

// Boş vaxt parametrlərini artırın

keepTime () {

etime = millis () - cur_time;

əgər (etime> = 1000 && saniyə <59) {

ikinci ++;

cur_time = milis ();

printTimes ();

}

başqa halda (etime> = 1000 && second == 59 && minutes <59) {second = 0;

dəqiqə ++;

cur_time = milis ();

printTimes ();

}

başqa halda (etime> = 1000 && saniyə == 59 && dəqiqə == 59 && saat <12) {

saniyə = 0; dəqiqə =

0; saat ++; cur_time =

milis (); printTimes ();

}

başqa halda (etime> = 1000 && saniyə == 59 && dəqiqə == 59 && saat == 12) {

saniyə = 0; dəqiqə =

0; saat = 1; am_pm =

! am_pm;

cur_time = milis ();

printTimes ();

}

başqa {}

}

Addım 14:

6. Budur!

Tərtib edin və yükləyin və hər şey bitdi!

Tövsiyə: