Mundarija:

Ertalabki do'stim: 8 qadam
Ertalabki do'stim: 8 qadam

Video: Ertalabki do'stim: 8 qadam

Video: Ertalabki do'stim: 8 qadam
Video: MTT TARBIYACHILARI UCHUN ZARUR ALBATTA TOMOSHA QILING 2024, Iyul
Anonim
Image
Image

Ba'zi odamlar juda band bo'lgan jadvalga ega, bu esa bir yoki ikki narsani unutishni osonlashtiradi. Bu budilnik yordamida siz o'z rejangizga rioya qilish uchun bir nechta budilnik o'rnatishingiz mumkin. Soat 24 soat ishlaydi va uni kunning turli vaqtlarida sizning jadvalingizga mos keladigan vaqtda dasturlash kifoya. Buni qilganingizda, siz belgilagan vaqt LCD displeyda paydo bo'ladi, shunda siz ularning to'g'riligini tekshirishingiz va qo'shimcha eslatma sifatida xizmat qilishingiz mumkin.

1 -qadam: Fikrga aqliy hujum

Eskiz va materiallar
Eskiz va materiallar

Muammoni hal qilmoqchi bo'lganimizda, biz g'oyani taklif qilish uchun baliq suyagi usulini qo'lladik va natijada budilnikimiz paydo bo'ldi.

2 -qadam: Eskiz va materiallar

Eskiz va materiallar
Eskiz va materiallar

Ushbu bosqichda biz elektronika va tashqi korpus uchun kerak bo'lgan hamma narsalarning ro'yxatini tuzishga harakat qildik. Keyin biz budilnik nimaga o'xshashligini va uning tashqi korpusini qanday yig'ishni eskizini ishlab chiqdik.

3 -qadam: Tashqi korpusni yaratish

Tashqi korpusni yaratish
Tashqi korpusni yaratish
Tashqi korpusni yaratish
Tashqi korpusni yaratish

Birinchi prototip uchun men barmoqlarning bo'g'imlari bir -biriga qanday mos kelishini ko'rishni xohlardim, shuning uchun men poyabzal qutisini ishlatardim va aniq o'lchovlardan foydalanmadim.

4 -qadam: tashqi qoplamani lazer bilan kesish

Tashqi qoplamani lazer bilan kesish
Tashqi qoplamani lazer bilan kesish

Ikkinchi prototip uchun men aniq o'lchovlarni olishni xohlardim va pdf formatini yaratib, uni lazer kesgichga yuborardim. Buning uchun men https://boxdesigner.connectionlab.org qutilarini yaratuvchi dastur veb -saytidan foydalandim. O'sha veb-saytda men qutining 3 o'lchamli o'lchamlarini, materialimizning qalinligini, o'lchov birliklarini va qanday fayl turini yaratishni xohlaganimni kiritdim. Qutilarning o'lchami 7,5 x 3 x 5 dyuym edi va men 1/8 dyuymli qalin akril materialdan foydalandim. Barmoqlar bo'g'imlarining o'lchovlari avtomatik ravishda 0,46875 dyuymga o'rnatildi. Men pdf versiyasini tanladim, chunki bu lazer kesuvchi o'qiydigan fayl turi va men Adobe -ga faylga o'zgartirish kiritishni xohlardim. Men chiziq ranglarini qizil rangga o'zgartirdim, shunda lazerli kesuvchi ularni o'yib yozishni emas, balki ularni kesib tashlashni bilishi uchun, men o'lchamlari 3,92 dyuymli 1,56 dyuymli to'rtburchaklar qutini old qismning old qismiga qo'shdim. quti. Bundan tashqari, budilnik bilan bog'langan simni ochish uchun pastki qismidagi o'ng tomoniga 1 dyuymdan 0,5 dyuymgacha kesilgan to'rtburchaklar qo'shdim. Oxir -oqibat men ikkita buzzer va tugma uchun tepaga uchta dumaloq teshik ochdim. Ovoz teshiklarining diametri 0,5 dyuymga, tugma ochilishi esa 0,375 dyuymga teng edi.

5 -qadam: uni birlashtirish

Birgalikda joylashtirish
Birgalikda joylashtirish

Barcha qismlar kesilganda, men uni yopish uchun shprits va akril elim ishlatardim. Men bo'laklarni bir -biriga bog'lab qo'ydim va qirralarning orasiga elim tomizdim, lekin uning yuqori qismi yopishtirilmagan.

6 -qadam: kod

Kirish:

Ushbu loyiha Arduino IDE dasturida c ++ tili yordamida kodlangan. ESP8266 bilan ishlaydigan NodeMCU mikro-boshqaruvchisi ishlatilgan. Bu loyihani amalga oshirish uchun bizga vaqtni to'g'ri ushlab turish, zil ovozi, signal signalini chaqiradigan signal tizimi, vaqt va signal vaqtlari ko'rsatiladigan ekran kerak bo'ladi. To'liq kodni bu havolaga qarang

Kutubxonalarni import qilish

Birinchidan, biz kerakli kutubxonalarni import qilishimiz kerak.

#"RTClib.h" ni qo'shing

#"Wire.h" ni qo'shing #qo'shishni #qo'shishni #qo'shishni #qo'shishni

O'zgaruvchilarni ishga tushirish

Keyin biz o'zgaruvchilarni keyinroq ishga tushirishimiz, signal tugmachalari uchun pin tartibini belgilashimiz, RTCni sozlashimiz va LCD displeyning I2C manzilini o'rnatishimiz kerak.

LiquidCrystal_I2C lcd (0x27, 20, 4);

const int buzzer1 = 12; const int buzzer2 = 0; const int tugmasi = 2; RTC_DS3231 rtc; char daysOfTheWeek [7] [12] = {"Yakshanba", "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma", "Shanba"} int boshlanish vaqti; int faol vaqt; int prevoustime = 0; char ahours1 [3]; char aminlar1 [3]; int soat1 = 0; int min1 = 0; char ahours2 [3]; char aminlar2 [3]; int soat2 = 0; int min2 = 0; char ahours3 [3]; char aminlari3 [3]; int soat3 = 0; int min3 = 0; int signal = 0; int ByteReceived; char qabul qilindiChar; const bayt numChars = 32; char qabul qilinganChars [numChars];

Sozlash

Keyinchalik, biz barcha kerakli jarayonlarni boshlaydigan funktsiyaga ega bo'lishimiz kerak. Bu funksiyada biz LCD -ni ishga tushirishimiz va boshlang'ich vaqtlarni chop etishimiz, kichikroq funktsiyani bajarishimiz kerak, agar u bo'lmasa, RTC real vaqtini beradi va ketma -ket monitorni ishga tushirishimiz kerak.

bo'sh o'rnatish () {

#ifndef ESP8266 while (! Seriyali); #endif if (! rtc.begin ()) {Serial.println ("RTC topilmadi"); vaqt (1); } if (rtc.lostPower ()) {Serial.println ("RTC kuchini yo'qotdi, vaqtni belgilashga ruxsat bering!"); rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))}} lcd.init (); lcd.backlight (); // Baklight -ni yoqadi. lcd.clear (); // LCD lcd.printni tozalaydi ("00:00"); // lcd.setCursor kodini yuklagandan so'ng LCD displeyda ko'rsatish (10, 0); lcd.print ("00:00"); lcd.setCursor (0, 1); lcd.print ("Vaqt"); lcd.setCursor (10, 1); lcd.print ("Signal 1"); lcd.setCursor (0, 3); lcd.print ("Signal 2"); lcd.setCursor (0, 2); lcd.print ("00:00"); lcd.setCursor (10, 3); lcd.print ("Signal 3"); lcd.setCursor (10, 2); lcd.print ("00:00"); rtc.begin (); pinMode (tugma, INPUT); // pinMode (buzzer1, OUTPUT) tugmachasining ovozini o'chirish uchun pin o'rnating; // signal signalini chiqarish uchun pinni o'rnatish pinMode (buzzer2, OUTPUT); // signal signalini chiqarish uchun pin o'rnating Serial.begin (9600); Serial.println ("HHMM formatida signallar orasidagi bo'sh joysiz signallarni kiritish vaqti"); boshlanish vaqti = millis ()/1000; }

Ma'lumotlarni qabul qilish

Endi biz signal vaqtini bilishimiz kerak. Buning uchun biz ketma -ket monitordan ma'lumotlarni olish va ularni massivda saqlash funksiyasini yaratdik.

bekor recvWithEndMarker () {

statik int ndx = 0; String timein = Serial.readString (); uchun (ndx = 0; timein [ndx]; ndx ++) {qabul qilinganChars [ndx] = timein [ndx]; } qabul qilindiChars [ndx] = '\ 0'; Serial.print (qabul qilinganChars); }

Signallarni sozlash

Keyingi qadam - signallarni o'rnatish. Bu erda signal 1 kodi. 2 va 3 signallari uchun xuddi shu jarayon bir nechta raqam o'zgarishi bilan takrorlangan.

/* Signal 1*/

recvWithEndMarker (); int h, m; uchun (h = 0; h <2; h ++) {ahours1 [h] = qabul qilinganChars [h]; } uchun (m = 2; m <4; m ++) {amins1 [m-2] = olinganChars [m]; } soatlik [h] = '\ 0'; amins1 [m-2] = '\ 0'; Serial.print (ahours1); Ketma -ket chop etish (aminlar1); soat1 = atoi (soat 1); min1 = atoi (amins1); Serial.print (soat1); Ketma -ket chop etish (min1);

Buzzer/tugma

Shunday qilib, real vaqt va signal vaqti teng bo'lganda, biz signal signalini o'chirib qo'yishimiz kerak. Shuningdek, bu bosqichda biz signalni ushlab turganingizda to'xtaydigan tugmachani qaytaramiz.

/ * Tovush tugmasi */

int sukunat; int b; b = digitalRead (2); agar (b == LOW) {sukunat = 1; } boshqa {sukunat = 0; } / * Signalni ishga tushirish * / if (soat == soat1 && mins == min1) {signal = 1; } if if (hours == hour2 && mins == min2) {signal = 1; } if if (hours == hour3 && mins == min3) {signal = 1; } boshqa {signal = 0; sukunat = 0; } if (signal == 1 && sukunat == 0) {ohang (buzzer1, 4000, 1000); ohang (buzzer2, 4000, 1000); kechikish (1000); noTone (buzzer1); noTone (buzzer2); kechikish (1000); }

Bosib chiqarish vaqtlari

Nihoyat, biz signal vaqtini va real vaqtni LCD displeyga chop etishimiz kerak.

DateTime now = rtc.now ();

int soat = (hozir.hour ()); int mins = (hozir.minute ()); / * 00:00 formatidagi signal vaqti */ lcd.setCursor (10, 0); lcd.print (1 soat); lcd.setCursor (13, 0); lcd.print (amins1); lcd.setCursor (0, 2); lcd.print (2 soat); lcd.setCursor (3, 2); lcd.print (aminlar 2); lcd.setCursor (10, 2); lcd.print (3 soat); lcd.setCursor (13, 2); lcd.print (aminlar 3); / * RTC dan ko'rsatish vaqti */ lcd.setCursor (0, 0); lcd.print (soat); lcd.print (":"); lcd.print (daqiqa);

7 -qadam: elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Materiallar varaqasida ko'rinib turganidek, ushbu loyihaning elektronikasida bir nechta bo'laklar mavjud. Birinchi rasm - yakuniy elektronika loyihalarining sxemasi. Ikkinchi rasm - bu bizning yakuniy elektron dizaynimiz. Uchinchi rasm - bu bizning loyihamizning ikkinchi prototipi o'rtasida.

Boshlash uchun NodeMCU -ni taxtaning chetiga ulang. Keyin siz boshqa barcha elektronikalarni NodeMCU va non paneliga ulashingiz kerak bo'ladi. LCD displeyni SCL uchun D1 va SDA uchun D2 pinlariga ulashdan boshlang. LCD displeyi foydalanuvchiga joriy vaqt va o'rnatilgan signal vaqtlarini ko'rish imkonini beradi. Endi simlarni D3 va D6 pinlariga ulang. Ovozli signal signallari foydalanuvchiga belgilangan vaqtga yetganda ogohlantirish imkonini beradi. Endi signalni to'xtatishga ruxsat berish uchun tugmani biriktirishingiz kerak. Ushbu tugmani D4 piniga ulang. Endi siz real vaqt soatingizni taxtaga biriktirasiz. Haqiqiy vaqtni sim bilan ulang, shunda u LCD displeyda ishlatiladigan bir xil SDA va SCL pinlarini ishlatadi.

8 -qadam: Final

Final
Final

Agar siz berilgan ma'lumotlarga amal qilgan bo'lsangiz, loyihangiz yuqoridagi rasmga o'xshab ketishi mumkin. Biz sizga ushbu loyihani qayta tiklashga urinishlaringizda omad tilaymiz va siz o'z loyihangizni tugatganingizda, bizni izohlarda rasm va mulohazalar bilan bo'lishishni tavsiya qilamiz. Rahmat va ijodkorlarga omad.

Tavsiya: