Mundarija:

Arduino budilnik loyihasi: 14 qadam
Arduino budilnik loyihasi: 14 qadam

Video: Arduino budilnik loyihasi: 14 qadam

Video: Arduino budilnik loyihasi: 14 qadam
Video: Lesson 22: Using Seven Segment Display with Arduino and Electronic Dice | SunFounder Robojax 2024, Iyul
Anonim
Arduino budilnik loyihasi
Arduino budilnik loyihasi

Ushbu loyihada biz Arduino Uno -dan LCD displeyni boshqarib, signal o'rnatilgan vaqt va vaqtni ko'rsatamiz. Biz har safar sozlash uchun tugmalardan foydalanamiz.

Materiallar:

  • Arduino Uno -
  • Non paneli -
  • Jumper simlari (x13+) -
  • 10 kohmli rezistorlar (x4) -
  • LCD displey -
  • 7 tugma-https://vilros.com/collections/raspberry-pi-acces…
  • Piezo dinamik -

1 -qadam: ulanish bo'yicha ko'rsatmalar

Bog'lanish bo'yicha ko'rsatmalar
Bog'lanish bo'yicha ko'rsatmalar

1. Arduino -dagi 5V -pinli o'tish simini non panelidagi + relslardan biriga ulang.

2 -qadam:

Rasm
Rasm

2. Arduino -dagi GND pinidagi o'tish simini non panelida siz tanlagan + relsning yonidagi temir yo'lga ulang.

3 -qadam:

Rasm
Rasm

3. LCD displeyni quvvatga, erga va TX piniga ulang (1 -pin).

4 -qadam:

Rasm
Rasm

4. Non panelidagi 7 tugmachani oyoqlari non panelidagi bo'shliq bo'ylab joylashtiring.

5 -qadam:

Rasm
Rasm

5. GND pimi bilan tugmalarning pastki chap pimlariga ulangan temir yo'ldan 10 kohmli rezistorni joylashtiring.

6 -qadam:

Rasm
Rasm

6. O'tish simlarini tugmalarning pastki o'ng pimi va 5V panjarasi orasiga joylashtiring.

7 -qadam:

Rasm
Rasm

7. O'tish simlarini pinlar 6, keyin 8-13 va rezina ulangan tugmachaning orasiga joylashtiring.

8 -qadam:

Rasm
Rasm

8. Keyin, Piezo karnayini non paneliga qo'ying va 7 -pinni quvvat piniga, so'ngra 100 ohmli rezistorni erga ulang.

9 -qadam: dasturlash bo'yicha ko'rsatmalar

1. Umumiy nuqtai: Ushbu loyiha foydalanuvchidan displeyda joriy quvvat va joriy signal vaqtini belgilashini so'raydi. Yuqorida ulangan tugmalar har safar sozlash uchun ishlatiladi. Chapdan o'ngga ular joriy soatni, joriy daqiqani, joriy AM yoki PMni, budilnikni, budilnikni, signalni AM yoki PMni o'rnatadilar. Oxirgi tugma signal eshitilganda ovozni o'chirish uchun ishlatiladi.

10 -qadam:

2. Biz qilishimiz kerak bo'lgan birinchi narsa - biz foydalanadigan o'zgaruvchini ishga tushirish.

// Ishlatiladigan o'zgaruvchilarni ishga tushiringint = 0; // Joriy vaqt uchun soat int minut = 0; //

Joriy vaqt uchun daqiqa int second = 0; // Joriy vaqt uchun ikkinchi

int hour_a = 0; int // Budilnik vaqti

daqiqa_a = 0; // Budilnik vaqti

bool am_pm = noto'g'ri; // AM/PM bayroqchasini almashtirish. Yolg'on - AM, haqiqat - PM

bool am_pm_a = noto'g'ri; // AM/PM signal uchun bayroqni o'zgartiradi. Yolg'on - AM, haqiqat - PM

int set_hr = 13; // Soatni o'rnatish uchun 13 -pindan foydalaning

int set_min = 12; // int daqiqasini o'rnatish uchun 12 -pindan foydalaning

set_am_pm = 11; // Ertalab/kechqurun sozlash uchun 11 -pinni ishlating

int set_hr_a = 10; // signal uchun soatni belgilash uchun pin 10 dan foydalaning int set_min_a = 9; // signal 9 uchun pinni ishlating int set_am_pm_a = 8; // Signal uchun ertalab/kechani o'rnatish uchun 8 -pinni ishlating

int dinamik = 7; // Karnay ovozi uchun ishlatiladigan pin = 6; // Karnayni to'xtatish uchun pin

bool signal = noto'g'ri; // Xavotirga tushmaslik uchun almashtirish uchun bayroq

bool sustlashdi = noto'g'ri; // Jim ko'rsatadigan bayroq bosilmagan

int cur_time = 0; // Joriy vaqt uchun o'zgaruvchan

int etime = 0; // O'tgan vaqt uchun o'zgaruvchan

11 -qadam:

3. Keyinchalik, biz LCD displeyni sozlashimiz va foydalanuvchiga joriy vaqtni belgilashimizni aytishimiz kerak. Buni faqat bir marta bajarish kerak bo'lgani uchun, biz buni sozlash tartibida qilamiz.

bo'sh o'rnatish () {

// LCD ekranni sozlash

Serial.begin (9600); // Serialni 9600 bodda boshlang

Serial.write (17); // Orqa chiroqni yoqing

Serial.write (24); // Displeyni kursor bilan, yonib -o'chmasdan yoqing

Serial.write (12); // Ekranni tozalang

Serial.write (128); // Kursorni chap yuqori burchakka siljiting // pinModes pinMode (set_hr, KIRITISH); pinMod (set_min, INPUT);

pinMod (set_am_pm, INPUT);

pinMod (set_hr_a, INPUT);

pinMod (set_min_a, INPUT);

pinMod (set_am_pm_a, INPUT);

pinMode (dinamik, OUTPUT);

pinMode (jim, Kirish);

// Dastlabki kuchda, foydalanuvchining joriy vaqtini belgilang. Serial.print ("Joriy vaqtni o'rnating"); kechikish (2000);

Serial.write (12);

printTimes ();

cur_time = millis (); // Joriy vaqtni saqlash}

12 -qadam:

4. Keyin, tsikl tartibida, biz vaqtni kuzatib boramiz va tugma holatini o'qiymiz, foydalanuvchi vaqtlardan birini o'rnatadimi yoki yo'qligini bilib olamiz.

void loop () {

// Vaqtni saqlang

keepTime ();

// Xavotir vaqti kelganligini tekshiring!

agar ((soat == hour_a && daqiqa == minut_a &&! jim) || signal) {ohang (karnay, 2000, 500); // Karnayga 500 ms uchun 2000 Gts chastotali ovozni chiqarish

kechikish (500); // 500 msni kechiktiring, agar (! Signal) {// Agar signal o'chirilgan bo'lsa, uni yoqing

}

}

// Agar foydalanuvchi signalni jim tugmachani bosib o'chirsa, signalni to'xtating, agar (signal &&! Jim && digitalRead (jim)) {

signal = noto'g'ri;

jim = haqiqiy; }

// Budilnikni qayta o'rnating, agar (! Signal && sustlashdi && daqiqa! = Daqiqa_a) {sessiz = noto'g'ri;

}

// O'rnatilgan pimlarning balandligini tekshiring va agar shunday bo'lsa, mos keladigan qiymatni oshiring (digitalRead (set_hr) && hour <12) {

soat ++;

printTimes ();

o'chirish ();

}

aks holda (digitalRead (set_hr) && hour == 12) {hour = 1;

printTimes ();

o'chirish ();

}

boshqa {}

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

daqiqa ++; printTimes ();

o'chirish ();

}

aks holda (digitalRead (set_min) && minutes == 59) {minutes = 0;

printTimes ();

o'chirish ();

}

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

am_pm = noto'g'ri;

printTimes ();

o'chirish ();

}

aks holda (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

o'chirish ();

}

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

soat_a ++;

printTimes ();

o'chirish ();

}

aks holda (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

o'chirish ();

}

boshqa {} if (digitalRead (set_min_a) && minutes_a <59) {

daqiqa_a ++;

printTimes ();

o'chirish ();

}

aks holda (digitalRead (set_min) && minutes_a == 59) {minutes_a = 0;

printTimes ();

o'chirish ();

}

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

am_pm_a = noto'g'ri;

printTimes ();

o'chirish ();

}

if if (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = rost;

printTimes ();

o'chirish ();

}

boshqa {}

}

13 -qadam:

5. Bu erda siz men yaratgan bir nechta kichik dasturlarni ko'rasiz - debounce () va printTimes (). Debounce () tugmachalarni faqat bir marta o'qishimizga ishonch hosil qilish uchun ishlatiladi. Arduino sekundiga ming marta skanerlaganligi sababli, siz uni faqat bir marta o'qishni xohlaganingizda, tugma bir necha marta bosilgan deb o'ylashi mumkin. Debounce () tugmachasi bo'shatilmaguncha dasturni muzlatib qo'yadi. printTimes () LCD displeyni yangilaydi, lekin bu bir nechta buyruqlar bo'lgani uchun men ularni bir marta yozdim va keyin vaqt qiymati o'zgarganda istalgan vaqtda kichik dasturni chaqira olaman.

// Har qanday tugma bosilayotganda, bu funksiyada qoling va 250 msni kechiktiring.

bekor qilish () {

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

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

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

}

// O'zgarishlar bo'lsa, yangilangan vaqtlarni chop etadi

void printTimes () {

Serial.write (12);

Serial.print ("Joriy vaqt:");

Serial.write (148);

agar (soat <10) {

Serial.print ("0");

}

Ketma -ket chop etish (soat);

Serial.print (":");

agar (daqiqa <10) {

Serial.print ("0");

}

Serial.print (daqiqa); Serial.print (":");

agar (ikkinchi <10) {

Serial.print ("0");

}

Ketma -ket chop etish (ikkinchi);

agar (am_pm) {

Serial.print ("PM");

}

boshqa {

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Signal uchun:");

Serial.write (188);

agar (soat_a <10) {

Serial.print ("0");

}

Serial.print (hour_a);

Serial.print (":");

agar (daqiqa_a <10) {

Serial.print ("0");

}

Serial.print (minut_a);

agar (am_pm_a) {

Serial.print ("PM");

}

boshqa {

Serial.print ("AM");

}

}

// Vaqt parametrlarini bekor qilish

keepTime () {

etime = millis () - cur_time;

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

ikkinchi ++;

cur_time = millis ();

printTimes ();

}

aks holda (etime> = 1000 && second == 59 && minutes <59) {second = 0;

daqiqa ++;

cur_time = millis ();

printTimes ();

}

aks holda (etime> = 1000 && second == 59 && minutes == 59 && hour <12) {

soniya = 0; daqiqa =

0; soat ++; cur_time =

millis (); printTimes ();

}

aks holda (etime> = 1000 && second == 59 && minutes == 59 && hour == 12) {

soniya = 0; daqiqa =

0; soat = 1; am_pm =

! am_pm;

cur_time = millis ();

printTimes ();

}

boshqa {}

}

14 -qadam:

6. Hammasi shu!

Kompilyatsiya qiling va yuklang, shunda hammasi tugadi!

Tavsiya: