Kazalo:
- Zaloge
- 1. korak: Zgodba
- 2. korak: NASTAVITEV OPREME
- 3. korak: NASTAVITEV PROGRAMSKE OPREME
- 4. korak: teorija in metodologija
- 5. korak: Pridobivanje lokalnega časa
- 6. korak: Nastavitev alarma
- 7. korak: Nastavitev brenčalnika
- 8. korak: Nastavitev gumbov
- 9. korak: Odpravljanje težav
- 10. korak: Arduino koda
Video: Pametna budilka z uporabo Magicbita (Arduino): 10 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Ta vadnica prikazuje, kako narediti pametno budilko z zaslonom OLED na Magicbit dev board brez uporabe modula RTC.
Zaloge
- Magicbit
- Kabel USB-A do Micro-USB
1. korak: Zgodba
V tej vadnici se bomo naučili, kako z Magicbitom narediti pametno budilko.
2. korak: NASTAVITEV OPREME
Priključite Magicbit v računalnik s kablom USB.
3. korak: NASTAVITEV PROGRAMSKE OPREME
Odprite svoj Arduino IDE in nastavite ploščo z Arduino IDE. Na naslednji povezavi je opisano, kako to storiti. Zato vam priporočamo, da najprej pojdite na povezavo in se seznanite z Magic bitom.
magicbit-arduino.readthedocs.io/en/latest/…
Zdaj izberite pravo vrsto plošče in vrata. V tem primeru je vrsta plošče Magicbit. Knjižnice so že nameščene, ko so v knjižnicah Magicbit.
4. korak: teorija in metodologija
Če pogledate prvi video, lahko vidite, da ima zaslon 2 zaslona.
- zaslon ure, ki prikazuje podrobnosti časa
- alarmni zaslon, ki prikazuje podrobnosti alarma
Za preklapljanje med tema dvema zaslonoma smo v Magicbitu uporabili kateri koli dva gumba. Ti gumbi so priključeni na 35 (levi gumb) in 34 (desni gumb) nožic ESP32 v Magicbitu. Za prikaz časa in drugih podrobnosti smo uporabili vgrajen OLED zaslon v magicbitu.
Pogovorimo se o tem, kako ti grafični zasloni delujejo.
Zaslon z uro ima analogno uro, digitalno uro, datum, mesec in leto.
Za ustvarjanje analogne ure uporabljamo nekatere grafične funkcije, ki so na voljo v grafični knjižnici Adafriut GFX. Z uporabo krožne funkcije in linijske funkcije ustvarimo analogno uro. Preproste geometrijske funkcije, imenovane sin in cos, se uporabljajo za položaj kazalcev ure. Tako vnesemo samo kot, ki ustreza času za rotacijske roke. za to najprej pretvorimo čas v kot, kot sledi.
- kot minutne kazalke = minute*(360/60)
- kot ur kazalcev = ur*(360/12)
Kot, izmerjen glede na črto med središčem urne številke in številko 12. Na urni ploskvi. S funkcijami sin in cos lahko izračunamo koordinate x in y koncev urnih in minutnih črt. Spodnja slika opisuje, kako je.
Po koordinatah narišemo ure in minute po črtah. V knjižnici Adafruit GFX je na voljo tudi funkcija tiskanja besedila. Pomaga pri tiskanju drugih podrobnosti (datum, mesec in čas v številkah) na zaslonu. Položaj analogne ure in položaj besedila lahko spremenite s spreminjanjem parametrov v kodi.
Tako kot zaslon z uro smo v knjižnici Adafruit GFX uporabili funkcijo tiskanja besedila za tiskanje številk na zaslonu OLED na ustreznih mestih.
5. korak: Pridobivanje lokalnega časa
Najpomembnejši del ure je, kako natančno določimo lokalni čas. V ta namen lahko uporabite zunanji modul ure RTC ali vgrajeno uro RC v ESP32 v Magicbitu. V tem projektu smo uporabili drugo metodo. Pri tej metodi uporabljamo odjemalca NTP (network time protocall) za pridobivanje lokalnega časa iz interneta. Za dostop do interneta smo uporabili vgrajen WIFI v ESP32. Zato na prvi stopnji uporabljamo WIFI za dostop do interneta z zagotavljanjem SSID in gesla. Nato bi morali gmtOffset in daylightOffset konfigurirati v spremenljivkah v nekaj sekundah. Vrednosti teh spremenljivk se od sveta do regije razlikujejo. gmtOffset pomeni število sekund, ki se razlikujejo od GMT.. Za večino območij dnevna svetloba Offset je 3600. Najdete ga na internetu. Ko smo dobili trenutni lokalni čas, nismo več uporabljali WIFI. Ker potem izračunamo lokalni čas iz vgrajene ure RC v ESP32. To naredite s knjižnico time.h. V Arduinu je preprost primer (Arduino> Primeri> ESP32> Čas> simpletime), kjer lahko izvedete, kako to deluje naprej. Tudi te povezave lahko uporabite za nadaljnje znanje o odjemalcu NTP.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Ko pravilno določimo lokalni čas, spremenimo čas prikaza besedil in kota glede na informacije o času v vsaki zanki.
6. korak: Nastavitev alarma
S pritiskom na levi in desni gumb lahko spremenite datum in čas alarma. Pri spreminjanju datuma in časa alarma obvezno izklopite alarm. Ko nastavite datum in čas, vklopite alarm. Kajti če je alarm vklopljen in ko je čas alarma enak vašemu trenutnemu času, ko ga nastavljate, bo zvonil alarm. V glavni zanki vedno preveri, da sta trenutni lokalni čas in informacije o alarmu enake. Če so enaki, bo zvočnik in vgrajena zelena LED v Magicbitu delovala v eni minuti.
7. korak: Nastavitev brenčalnika
Za ustvarjanje zvočnega signala z uporabo funkcije analogCwrite () v kodi uporabljamo impulz PWM. Ker so vse knjižnične funkcije v ESP32 velja za Magicbit. Zvočni signal piska lahko spremenite tako, da spremenite njegovo frekvenco in vrednost PWM v kodi.
techtutorialsx.com/2017/06/15/esp32-arduin…
Na tej strani je opisano, kako brenčalo deluje z ESP32.
8. korak: Nastavitev gumbov
Za spreminjanje vseh stanj smo v Magicbitu uporabili dva vgrajena gumba. Glavna zanka vedno preveri stanje dveh gumbov. Ker so se notranje potegnili, je normalno stanje visok signal. Tako lahko vidite digitalno branje teh zatičev 1. Na privzeti stopnji se na zaslonu prikaže vmesnik ure. Takrat, ko pritisnete kateri koli od dveh gumbov, se zaslon spremeni v zaslon z alarmom. Prav tako štejemo čas v sekundah od zadnjega pritiska na gumb. Če je to število daljše od določenega trajanja, se na zaslonu prikaže zaslon z uro.
Koda je napisana z uporabo osnovnih funkcij za začetnike. Tako je koda preprosta za razumevanje in kako se lahko naučite metode, se obrnite na kodo.
9. korak: Odpravljanje težav
Včasih se ura zažene nekoliko kasneje ali pa ne prikazuje pravilno grafike. Naslednji nasveti pomagajo rešiti situacijo.
- Poskrbite, da ste podali pravilen SSID in geslo
- Spremenite strežnik NTP (na internetu lahko najdete veliko strežnikov, ki se nanašajo na vašo regijo).
- Spremeni internetno povezavo. (Možna je tudi mobilna dostopna točka).
Vse lahko odpravite tudi s serijskim monitorjem. Serijski monitor poleg zaslona OLED prikazuje tudi informacije o času.
10. korak: Arduino koda
// knjižnice za zaslon OLED
#vključi
#include #include #define OLED_RESET 4 #include // wifi knjižnica za povezavo #include "time.h" // knjižnica za uporabo ure RC // definiranje vhodnih in izhodnih imen pin #define RightButton 34 #define LeftButton 35 #define GreenLED 16 #define Buzzer 25 int preTime = 0; int šteje = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "VAŠ SSID"; // podrobnosti o wifi const char* geslo = "VAŠA GESLA"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // spremenljivke alarma int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bool buzzerOn = 0; int rect [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}}; // izbirni pravokotnik const char* ntpServer = "asia.pool.ntp.org"; // podrobnosti strežnika const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Zaslon Adafruit_SSD1306 (128, 64); // velikost OLED določi bajt clockCenterY = (display.height () + 16)/2; // podrobnosti analogne ure ure bajt clockCenterX = (display.height () - 16)/2; bajtna uraRadius = 23; bool stanje = 0; // zaslon vklopljen ali izklopljen Boolean Alarm = 0; // trenutno stanje alarma String alarmState = "Alarm ON"; // alarm vklopljen ali izklopljen // spremenljivka shranjenih časovnih podatkov char dayName [10]; char daynumber [3]; mesec char [10]; leto char [5]; urne ure [3]; char minut [3]; številka meseca char [3]; char sekund [3]; // spremenljivke gumbov bool RightState = 1; bool LeftState = 1; // zvočniške spremenljivke int channel = 0; int Frekvenca = 2000; int PWM = 200; int ločljivost = 8; void setup () {// nastavite vhod in izhod pinMode (RightButton, INPUT); pinMode (Levi gumb, Vhod); pinMode (GreenLED, OUTPUT); pinMode (Buzzer, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // inicializirajte display.display (); zamuda (3000); display.clearDisplay (); ledcSetup (0, Frekvenca, ločljivost); // konfiguriramo parametre pwm ledcAttachPin (Buzzer, 0); Serial.begin (115200); // vzpostavi serijsko komunikacijo // se poveže z WiFi Serial.printf ("Povezovanje z %s", ssid); WiFi.begin (ssid, geslo); while (WiFi.status ()! = WL_CONNECTED) {zamuda (500); Serial.print ("."); } Serial.println ("POVEZANO"); // init in dobimo čas configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // prekinite povezavo WiFi, ker WiFi ni več potreben.disconnect (true); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // dobimo trenutni čas // shranimo stanja desnega in levega gumba RightState = digitalRead (RightButton); LeftState = digitalno branje (Levi gumb); // potrdite gumbe, če pritisnete (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // ko pritisnete gumb, zvočni signal oddaja zvočni zamik (100); if (stanje == 0) {// spremenite v stanje okvirja zaslona alarma = 1; // spremenite stanje v stanje alarma RightState = LeftState = 1; // potrebujemo le spremembo sceern} count = 0; // ponastavi števec}, če (stanje == 1 && (šteje) <5) {// če je na zaslonu alarma in ni časovne omejitve stanje zaslona = 0; display.clearDisplay (); clockFace (); // analogna številčnica ure printLocalTime (); // čas tiskanja v številčnici ure in natis drugih podrobnosti} onAlarm (); // primerjamo čas alarma z lokalnim časom in vklopimo zakasnitev alarma (100); // zakasnitev za vklop in izklop alarma} void clockFace () {// caalog clock face display.drawCircle (clockCenterX, clockCenterY, clockRadius, BELO); // natisni krog ure za (int številka = 0; številka = 5) {// samo 5 selctions.so ponastavi na -1 (-1 = je alarm vklopljen ali izklopljen) selectIndex = -1; } dateAndTimeSelection (selectIndex); // spremeni selction} void dateAndTimeSelection (int index) {if (index == -1) {// alarm vklopljen ali izklopljen, če (RightState == 0) {// preklop med alarmom za vklop in izklop, če (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } else {alarmState = "Alarm ON"; }}} else {if (RightState == 0) {// v drugih razdelkih icrement zadevni datum ali čas v matriki alarmDateTime [index] = alarmDateTime [index] + 1; // indeks je izbor}} int compare [4] = {12, 2030, 23, 59}; // zgornje meje datumov in let int comparemonth [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // zgornja meja mesecev int resetValue [4] = {1, 2020, 0, 0}; // začetne vrednosti za (int i = 1; primerjam [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> comparemonth [alarmDateTime [1] - 1]) {// ponastavi vlaues, če so meseci večji od njihovih omejitev alarmDateTime [0] = 1; }} void showAlarm () {// natisni podrobnosti alarma String alarmDateTime0 = String (alarmDateTime [0]); // pretvorimo nize v prikaz String alarmDateTime1 = String (alarmDateTime [1]); Niz alarmDateTime2 = Niz (alarmDateTime [2]); Niz alarmDateTime3 = Niz (alarmDateTime [3]); Niz alarmDateTime4 = Niz (alarmDateTime [4]); // če imajo vrednosti eno števko, jim dodajte "0". če (alarmDateTime [0]
Priporočena:
WakeupNow - pametna budilka: 8 korakov
WakeupNow - pametna budilka: Kot vsi vemo, je življenje študentov zelo težko, imajo dolg dan s predavanji, veliko domačih nalog in na splošno imajo noro življenje. Nimajo časa za nič, in če jim predlagate, da dnevu dodajo nekaj ur, bodo veseli. Odpri
Nadgrajena budilka, pametna luč: 8 korakov (s slikami)
Upcycled Alarm Clock Smart Light: V tem projektu obnovim popolnoma pokvarjeno budilko. Številčnico ure zamenja 12 LED, osvetljenih z LED trakom okoli roba ure. 12 LED diod pove čas in LED trak je programiran, da deluje kot alarm, obrača
Zbudi me - pametna budilka: 6 korakov
Wake Me Up - pametna budilka: Wake me up je pametna budilka, ki jo lahko uporabite tudi kot pametno luč. Vgrajen ledstrip simulira naravno svetlobo, ki prihaja v vašo sobo. To omogoča miren in naraven način za začetek dneva. Budilka je opremljena tudi s segmentom 4*7
Pametna budilka: pametna budilka iz Raspberry Pi: 10 korakov (s slikami)
Pametna budilka: pametna budilka iz Raspberry Pi: Ste si kdaj želeli pametno uro? Če je tako, je to rešitev za vas! Naredil sem pametno budilko, to je ura, ki jo lahko spremenite glede na spletno stran. Ko se alarm sproži, bo zaslišal zvočni signal in dve lučki bosta
GOOB - pametna budilka: 15 korakov (s slikami)
GOOB - pametna budilka: GOOB je kratica za "Get Out of Bed", kar ustreza imenu mojega projekta. Želel sem ustvariti napravo, ki me bo zjutraj zbudila, saj to ni najlažja naloga. Glavna ideja je, da budilka ne ustavi alarma