Mundarija:
- Ta'minotlar
- 1 -qadam: hikoya
- 2 -qadam: QURILMALARNI O'RNATISH
- 3 -qadam: dasturiy ta'minotni o'rnatish
- 4 -qadam: nazariya va metodologiya
- 5 -qadam: Mahalliy vaqtni olish
- 6 -qadam: signalni o'rnatish
- 7 -qadam: Buzzerni sozlash
- 8 -qadam: tugmachalarni o'rnatish
- 9 -qadam: Muammolarni bartaraf etish
- 10 -qadam: Arduino kodi
Video: Magicbit (Arduino) yordamida aqlli budilnik: 10 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Bu qo'llanmada RTC modulini ishlatmasdan Magicbit dev platasidagi OLED displey yordamida aqlli budilnikni qanday yasash ko'rsatilgan.
Ta'minotlar
- Magicbit
- USB-A-Micro-USB kabeli
1 -qadam: hikoya
Ushbu qo'llanmada biz Magicbit yordamida aqlli budilnikni qanday yasashni bilib olamiz.
2 -qadam: QURILMALARNI O'RNATISH
USB kabel yordamida Magicbit -ni kompyuterga ulang.
3 -qadam: dasturiy ta'minotni o'rnatish
Arduino IDE -ni oching va taxtani Arduino IDE bilan o'rnating. Quyidagi havola buni qanday qilish kerakligini ko'rsatadi. Shuning uchun biz sizga avval Magic bit bilan bog'lanishni va tanishishni tavsiya qilamiz.
magicbit-arduino.readthedocs.io/en/latest/…
Endi to'g'ri taxta turi va portini tanlang. Bunday holda, taxtaning turi Magicbit. Kutubxonalar Magicbit kutubxonalarida bo'lganda allaqachon o'rnatilgan.
4 -qadam: nazariya va metodologiya
Agar siz birinchi videoni ko'rsangiz, displeyda 2 ta ekran borligini ko'rishingiz mumkin.
- soat tafsilotlarini ko'rsatadigan soat ekrani
- signal detallari ko'rsatiladigan signalli ekran
Bu ikkita ekranni almashtirish uchun biz Magicbit -dagi ikkita tugmachani ishlatardik. Ushbu tugmalar Magicbit -dagi ESP32 -ning 35 (chap tugma) va 34 (o'ng tugma) pinlariga ulangan. Vaqt va boshqa ma'lumotlarni ko'rsatish uchun biz sehrli bitda o'rnatilgan OLED -displeydan foydalanganmiz.
Keling, bu grafik ekranlar qanday ishlashi haqida gapiraylik.
Soat ekranida analog soat, raqamli soat, sana, oy va yil matnlari mavjud.
Analog soatni yaratish uchun biz grafik kutubxonasida mavjud bo'lgan Adafriut GFX grafik funktsiyalaridan foydalanamiz. Doira funktsiyasi va chiziq funktsiyasidan foydalanib, biz analog soat yuzini yaratamiz. Sin va cos deb nomlangan oddiy geometrik funktsiyalar soat qo'llari holatida ishlatiladi. Shunday qilib, biz faqat qo'llarni aylantirish vaqtiga mos keladigan burchakni kiritamiz. buning uchun biz birinchi navbatda vaqtni burchakka aylantiramiz.
- qo'lning burchagi = daqiqa*(360/60)
- soat burchagi = soat*(360/12)
Soat yuzining markazi va soat sonining 12 raqami orasidagi chiziq bo'yicha o'lchangan burchak. Sin va cos funktsiyalari yordamida biz soat va daqiqa chiziqlarining uchlari x va y koordinatalarini hisoblashimiz mumkin. Quyidagi rasmda uning holati tasvirlangan.
Koordinatalarga ko'ra, biz chizilgan chiziqlar yordamida soat va daqiqalarni qo'l bilan bosib chiqaramiz. Adafruit GFX kutubxonasida matnni bosib chiqarish funktsiyasi ham mavjud. Bu boshqa ma'lumotlarni (sana, oy va vaqtni raqam bilan ko'rsatish) displeyda chop etishga yordam beradi. Koddagi parametrlarni o'zgartirish orqali siz analog soat holatini va matn o'rnini o'zgartirishingiz mumkin.
Adafruit GFX kutubxonasida soat ekranida bo'lgani kabi, biz kerakli joylarda OLED -displeyda raqamlarni chop etish uchun matnni bosib chiqarish funktsiyasidan foydalanganmiz.
5 -qadam: Mahalliy vaqtni olish
Soatning eng muhim qismi - bu mahalliy vaqtni qanday aniq olishimiz. Buning uchun siz Magicbit -dagi ESP32 -da tashqi RTC -soat moduli yoki o'rnatilgan RC -soatidan foydalanishingiz mumkin. Ushbu loyihada biz ikkinchi usulni qo'lladik. Ushbu usulda biz Internetdan mahalliy vaqtni olish uchun NTP (tarmoq vaqti protokoli) mijozidan foydalanamiz. Internetga kirish uchun biz ESP32 -da o'rnatilgan WIFI -dan foydalanganmiz. Birinchi bosqichda biz SSID va parolni taqdim etish orqali Internetga kirish uchun WIFIdan foydalanamiz. Keyin gmtOffset va daylightOffset -ni soniyalarda o'zgaruvchilarda sozlashimiz kerak. Bu o'zgaruvchilarning qiymatlari dunyoning mintaqalaridan farq qiladi. gmtOffset - bu siz GMTdan farq qiladigan soniyalar sonini bildiradi … Ko'p hollarda daylightOffset - 3600. Siz uni Internetda topishingiz mumkin. Joriy mahalliy vaqtni olganimizdan so'ng, biz endi WIFIdan foydalanmaymiz. Chunki biz ESP32 -dagi o'rnatilgan RC -soatdan mahalliy vaqtni hisoblaymiz. Bu time.h kutubxonasi yordamida amalga oshiriladi. Arduino -da oddiy misol bor (Arduino> Misollar> ESP32> Vaqt> oddiy vaqt), bu sizga bundan keyin qanday ishlashini bilib olishga yordam beradi. Bundan tashqari, ushbu havolalardan siz NTP mijozi haqida qo'shimcha ma'lumot olishingiz mumkin.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Mahalliy vaqtni to'g'ri qabul qilgandan so'ng, biz har bir tsiklda o'sha vaqtga qarab matn va burchakni ko'rsatish vaqtini o'zgartiramiz.
6 -qadam: signalni o'rnatish
Chap va o'ng tugmachalarni bosish orqali siz signal sanasi va vaqtini o'zgartirishingiz mumkin. Budilnik sanasi va vaqtini o'zgartirganda, signalni o'chirib qo'yganingizga ishonch hosil qiling. Sana va vaqtni o'rnatgandan so'ng, signalni yoqing. Chunki, agar signal yoqilgan bo'lsa va siz uni o'rnatayotganda signal vaqti sizning hozirgi vaqtingizga teng bo'lsa, signal qo'ng'irog'i jiringlaydi. Asosiy tsiklda har doim joriy mahalliy vaqt tekshiriladi va signal ma'lumotlari teng bo'ladi. Agar ular teng bo'lsa, Magicbit -dagi yashil LED -signalli signal bir daqiqada ishlaydi.
7 -qadam: Buzzerni sozlash
Biz kodda analogCwrite () funktsiyasidan foydalanib, signal signalini yaratish uchun PWM pulsidan foydalanamiz. Kutubxonaning barcha funktsiyalari ESP32 da bo'lgani uchun Magicbit uchun amal qiladi. Siz signal signalining tovushini kodning chastotasi va PWM qiymatidan o'zgartirishingiz mumkin.
techtutorialsx.com/2017/06/15/esp32-arduin…
Bu sahifada buzzerning ESP32 bilan qanday ishlashi haqida yozilgan.
8 -qadam: tugmachalarni o'rnatish
Barcha holatlarni o'zgartirish uchun biz Magicbit -da ikkita o'rnatilgan tugmachadan foydalanganmiz. Asosiy pastadir har doim ikkita tugma holatini tekshiradi. Chunki ular ichkariga ko'tarilishgan, normal holat - bu yuqori signal. Shunday qilib, siz bu pinlarning raqamli o'qilishini ko'rishingiz mumkin. 1. Standart bosqichda displey soat interfeysini ko'rsatadi. O'sha paytda, ikkita tugmachadan birortasi bosilsa, u ekranni signal ekraniga o'zgartiradi. Shuningdek, biz oxirgi marta tugma bosilgan vaqtni soniyalarda hisoblaymiz. Agar bu raqam oldindan belgilangan vaqtdan katta bo'lsa, displeyda soat ekrani ko'rsatiladi.
Kod yangi boshlanuvchilar uchun asosiy funktsiyalar yordamida yozilgan. Shunday qilib, kodni tushunish oson va siz uning qanday ishlashini kodga murojaat qilib bilib olishingiz mumkin.
9 -qadam: Muammolarni bartaraf etish
Ba'zida soat biroz keyinroq boshlanadi yoki grafik to'g'ri ko'rsatilmaydi. Quyidagi maslahatlar vaziyatni hal qilishga yordam beradi.
- To'g'ri SSID va parolni berganingizga ishonch hosil qiling
- NTP serverini o'zgartiring (siz o'zingizning mintaqangizga tegishli bo'lgan ko'plab serverlarni topishingiz mumkin).
- Internet aloqasini o'zgartiradi. (Mobil ulanish nuqtasi ham mumkin).
Bundan tashqari, ketma -ket monitor yordamida hamma narsani hal qilishingiz mumkin. OLED displeyidan tashqari ketma -ket monitor vaqt ma'lumotlarini ko'rsatadi.
10 -qadam: Arduino kodi
// OLED displey uchun kutubxonalar
#qo'shing
#include #include #delein OLED_RESET 4 #include // ulanish uchun wifi kutubxonasi #include "time.h" // kutubxonadan foydalanish uchun RC soati // kirish va chiqish pin nomlarini belgilash #o'ng tugmachasini belgilash 34 #chap tugmachasini 35 belgilash #Greenfilmni belgilash. #define Buzzer 25 int preTime = 0; int soni = 0; int currentTime = 0; tm timeinfo tuzilishi; const char* ssid = "SIZNING SSID"; // wifi tafsilotlari const char* password = "PAROLINGIZ"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // signal varibles int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bool buzzerOn = 0; int rekt [6] [4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {31, 44, 30, 20}, {67, 44, 30, 20}}; // tanlash to'rtburchaklar const char* ntpServer = "asia.pool.ntp.org"; // server uzoq muddatli gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 displeyi (128, 64); // OLED o'lchami bayt soatini belgilaydiCenterY = (display.height () + 16)/2; bayt soatRadius = 23; bool holati = 0; // ekran yoqilgan yoki o'chirilgan boolean Signal = 0; // signalning joriy holati String alarmState = "Signal ON"; // signal yoqilgan yoki o'chirilgan // varibles saqlangan vaqt ma'lumotlari char dayName [10]; char kunduzi [3]; char oy [10]; chor yil [5]; char soat [3]; char daqiqalari [3]; char oy raqami [3]; char soniyalar [3]; // tugma o'zgaruvchilari bool RightState = 1; bool LeftState = 1; // buzzer o'zgaruvchilari int channel = 0; int chastotasi = 2000; int PWM = 200; int o'lchamlari = 8; void setup () {// pinMode (RightButton, INPUT) kirish va chiqishlarini sozlash; pinMode (Chap tugma, Kirish); pinMode (GreenLED, OUTPUT); pinMode (Buzzer, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // intialize display display.display (); kechikish (3000); display.clearDisplay (); ledcSetup (0, chastota, piksellar sonini); // pwm parametrlarini sozlash ledcAttachPin (Buzzer, 0); Serial.begin (115200); // ketma -ket aloqani uzish // WiFi -ga ulanish Serial.printf (" %s ga ulanish", ssid); WiFi.begin (ssid, parol); while (WiFi.status ()! = WL_CONNECTED) {kechiktirish (500); Serial.print ("."); } Serial.println ("ULANGAN"); // init va configTime vaqtini oling (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // WiFi -ni uzing, chunki u endi kerak emas WiFi.disconnect (rost); WiFi rejimi (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // joriy vaqtni olish // o'ng va chap tugmachalarini saqlang RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // chaeck tugunlari bosiladi, agar (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // tugma bosilganda ovozli signal kechiktiruvchi signal chiqaradi (100); if (holat == 0) {// signal ekranining ramka holatiga o'zgartirish = 1; // holatni signal holatiga o'zgartirish RightState = LeftState = 1; // bizga faqat sceern} count = 0; // hisoblagichni tiklash} (holat == 1 && (hisoblar) <5) {// agar signal ekranida bo'lsa va vaqt tugashi hisoblanmasa, Signal (); // signal signalining vaqt qiymatlarini hisoblash showAlarm (); // qiymatlarni ko'rsatish} boshqa {// agar soat bo'lsa ekran holati = 0; display.clearDisplay (); clockFace (); // analog soat yuzi printLocalTime (); // soat yuzida chop etish vaqti va boshqa tafsilotlarni chop etish} onAlarm (); // signal vaqtini mahalliy vaqt bilan solishtiring va signal kechikishini yoqing (100); // uchun kechikish signalni yoqish va o'chirish} void clockFace () {// soatning yuzini ko'rsatuvchi katalog.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); selctions.sozini -1 ga qaytarish (-1 = o'chirish yoki o'chirish) selectIndex = -1; } dateAndTimeSelection (selectIndex); // tanlashni o'zgartirish} void dateAndTimeSelection (int index) {if (index == -1) {// signal yoqilgan yoki o'chirilgan bo'lsa (RightState == 0) {// agar bo'lsa signalni yoqish va o'chirish (alarmState == "Signal yoqilgan") {alarmState = "Signal o'chirilgan"; } else {alarmState = "Signal yoqilgan"; }}} else {if (RightState == 0) {// boshqa tanlovlarda alarmDateTime [index] = alarmDateTime [index] + 1 qatoridagi sana yoki vaqtni belgilaydi. // indeks - bu tanlov}} int solish [4] = {12, 2030, 23, 59}; // sana va yillarning yuqori chegaralari int comparemonth [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // oylarning yuqori limiti int resetValue [4] = {1, 2020, 0, 0}; // boshlang'ich qiymatlari (int i = 1; i [i - 1] ni taqqoslayman) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> taqqoslash [alarmDateTime [1] - 1]) {// oylar chegaralaridan kattaroq bo'lsa, vlaues -ni tiklash alarmDateTime [0] = 1; }} void showAlarm () {// signal detallarini chop etish String alarmDateTime0 = String (alarmDateTime [0]); // stinglarni ko'rsatish String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // agar qiymatlar bitta 1 raqamli bo'lsa, ularga "0" qo'shing. agar (alarmDateTime [0]
Tavsiya:
SONOFF aqlli kalitlari yordamida aqlli rolikli pardalarni qanday yasash mumkin ?: 14 qadam
SONOFF aqlli kalitlari yordamida aqlli rolikli pardalarni qanday yasash mumkin?: SONOFF aqlli kalitlarida interlok rejimidan foydalaning, oddiy rolikli pardalarni aqlli ko'rinishga aylantirish uchun ko'pchiligingiz rozi bo'lasizmi, siz ertalab rolikli pardalarni tortib olasiz. va kechqurun uni pastga tushirmoqchimisiz? Qanday bo'lmasin, men
Aqlli budilnik: Raspberry Pi -dan tayyorlangan aqlli budilnik: 10 qadam (rasmlar bilan)
Aqlli budilnik: Raspberry Pi bilan yasalgan aqlli budilnik: Siz hech qachon aqlli soatni xohlaganmisiz? Agar shunday bo'lsa, bu siz uchun yechim! Men Smart Budilnikni yaratdim, bu soat, siz budilnik vaqtini veb -saytga ko'ra o'zgartirishingiz mumkin. Signal o'chganda, ovoz eshitiladi va ikkita chiroq yonadi
Budilnik bilan DIY aqlli o'lchov (Wi-Fi, ESP8266, Arduino IDE va Adafruit.io bilan): 10 qadam (rasmlar bilan)
Budilnik bilan DIY aqlli o'lchov (Wi-Fi, ESP8266, Arduino IDE va Adafruit.io bilan): Oldingi loyihamda men Wi-Fi bilan aqlli hammom o'lchovini ishlab chiqdim. U foydalanuvchi vaznini o'lchashi, uni mahalliy ko'rsatishi va bulutga yuborishi mumkin. Bu haqda batafsil ma'lumotni quyidagi havola orqali olishingiz mumkin: https: //www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Ir sensori yordamida Arduino yordamida aqlli ko'cha chiroqlari: 4 qadam (rasmlar bilan)
Arduino yordamida Ir Sensor yordamida Smart Street Light: Iltimos, boshqa loyihalar uchun mening kanalimga OBUNA BO'LING. Bu loyiha Smart ko'cha yoritgichi haqida, avtomobil o'tayotganda ko'cha chiroqlari yonadi, bu erda biz 4 IQ sensorini ishlatamiz. avtomobil, har bir IQ sensori boshqaradi
"Aqlli soat 2" ni yig'ish (Arduino asosidagi budilnik, ko'plab qo'shimcha funktsiyalar bilan): 6 qadam
"Aqlli soat 2" ni yig'ish (Arduino asosidagi budilnik, ko'plab qo'shimcha funktsiyalarga ega): Ushbu qo'llanmada Wise Clock 2 uchun ochiq manba (apparat va dasturiy ta'minot) loyihasini qanday yig'ish ko'rsatilgan. Bu erda to'liq Wise Clock 2 to'plamini sotib olish mumkin. Xulosa qilib aytganda, bu Wise Clock 2 qila oladigan narsa (hozirgi ochiq manba dasturiy ta'minot bilan