Obsah:
- Zásoby
- Krok 1: Příběh
- Krok 2: NASTAVENÍ HARDWARU
- Krok 3: NASTAVENÍ SOFTWARU
- Krok 4: Teorie a metodologie
- Krok 5: Získání místního času
- Krok 6: Nastavení alarmu
- Krok 7: Nastavení bzučáku
- Krok 8: Nastavení tlačítek
- Krok 9: Odstraňování problémů
- Krok 10: Arduino kód
Video: Chytrý budík využívající Magicbit (Arduino): 10 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Tento tutoriál ukazuje, jak vytvořit chytrý budík pomocí OLED displeje na desce pro vývojáře Magicbit bez použití jakéhokoli modulu RTC.
Zásoby
- Magicbit
- Kabel USB-A na Micro-USB
Krok 1: Příběh
V tomto tutoriálu se naučíme, jak vytvořit chytrý budík pomocí Magicbit.
Krok 2: NASTAVENÍ HARDWARU
Připojte svůj Magicbit k počítači pomocí kabelu USB.
Krok 3: NASTAVENÍ SOFTWARU
Otevřete své Arduino IDE a nastavte desku pomocí Arduino IDE. Následující odkaz popisuje, jak to udělat. Doporučujeme vám tedy nejprve přejít na odkaz a seznámit se s Magic bit.
magicbit-arduino.readthedocs.io/cs/latest/…
Nyní vyberte správný typ desky a port. V tomto případě je typ desky Magicbit. Knihovny jsou již nainstalovány v knihovnách Magicbit.
Krok 4: Teorie a metodologie
Když se podíváte na první video, můžete vidět, že displej má 2 obrazovky.
- obrazovka s hodinami, která zobrazuje detaily času
- obrazovka alarmu, která zobrazuje podrobnosti o alarmu
Pro přepínání mezi těmito dvěma obrazovkami jsme použili jakékoli tlačítko dvou v Magicbit. Tato tlačítka jsou připojena k 35 (levé tlačítko) a 34 (pravé tlačítko) pinům ESP32 v Magicbit. K zobrazení času a dalších podrobností jsme použili vestavěný OLED displej v Magicbit.
Pojďme si promluvit o tom, jak tyto grafické obrazovky fungují.
Obrazovka hodin má analogové hodiny, digitální hodiny, text data, měsíce a roku.
Pro vytváření analogových hodin používáme některé grafické funkce, které jsou k dispozici v grafické knihovně s názvem Adafriut GFX. Pomocí kruhové funkce a liniové funkce vytváříme analogový ciferník. K poloze ručiček hodin se používají jednoduché geometrické funkce zvané sin a cos. Zadáváme tedy pouze úhel, který odpovídá času pro otočení rukou. proto nejprve převedeme čas na úhel následujícím způsobem.
- úhel minutové ručičky = minuty*(360/60)
- úhel hodin ručička = hodiny*(360/12)
Úhel měřený vzhledem k přímce mezi středem ciferníku a číslem 12 na ciferníku. Pomocí funkcí sin a cos můžeme vypočítat souřadnice x a y konců hodinových a minutových čar. Níže uvedený obrázek popisuje, jak si vede.
Podle souřadnic tiskneme hodinovou a minutovou ručku kreslením čar. V knihovně Adafruit GFX je také funkce tisku textu. Pomáhá vytisknout na displeji další detaily (datum, měsíc a čas v číslicích). Pozici analogových hodin a polohu textu můžete změnit změnou parametrů v kódu.
Jako u hodinové obrazovky jsme použili funkci tisku textu v knihovně Adafruit GFX pro tisk čísel na OLED displeji na příslušných místech.
Krok 5: Získání místního času
Nejdůležitější částí hodin je, jak přesně získáme místní čas. K tomu můžete použít externí hodinový modul RTC nebo vestavěné RC hodiny v ESP32 v Magicbit. V tomto projektu jsme použili druhou metodu. V této metodě používáme klienta NTP (protokol síťového času) pro získání místního času z internetu. Pro přístup k internetu jsme použili vestavěné zařízení WIFI v ESP32. V první fázi proto používáme WIFI pro přístup k internetu zadáním SSID a hesla. Pak bychom měli nakonfigurovat gmtOffset a daylightOffset v proměnných v sekundách. Hodnoty těchto proměnných se liší region od regionu na světě. gmtOffset znamená počet sekund, ve kterých se lišíte od GMT.. Pro většinu ares je denní světlo 3600. Najdete ho na internetu. Poté, co jsme získali aktuální místní čas, jsme již WIFI nepoužívali. Protože pak vypočítáme místní čas z vestavěných RC hodin v ESP32. To se provádí pomocí knihovny time.h. V Arduinu je jednoduchý příklad (Arduino> Příklady> ESP32> Čas> simpletime), kde se dozvíte, jak to funguje dále. Také tyto odkazy můžete použít pro další znalosti o klientovi NTP.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Po správném získání místního času měníme čas zobrazováním textů a úhlu podle informací o čase v každé smyčce.
Krok 6: Nastavení alarmu
Kliknutím na levé a pravé tlačítko můžete změnit datum a čas budíku. Při změně data a času budíku nezapomeňte vypnout budík. Po nastavení data a času zapněte alarm. Protože pokud je budík zapnutý a když se čas budíku rovná vašemu aktuálnímu času při jeho nastavování, zazvoní bzučák alarmu. V hlavní smyčce vždy kontroluje aktuální místní čas a informace o alarmu jsou stejné. Pokud jsou stejné, pak bzučák a vestavěná zelená LED v Magicbit budou fungovat po dobu jedné minuty.
Krok 7: Nastavení bzučáku
Pomocí pulsu PWM vytváříme zvuk bzučáku pomocí funkce analogCwrite () v kódu. Protože všechny funkce knihovny jsou v ESP32, platí pro Magicbit. Pípnutí bzučáku můžete změnit změnou jeho frekvence a hodnoty PWM v kódu.
techtutorialsx.com/2017/06/15/esp32-arduin…
Tato stránka popisuje, jak funguje bzučák s ESP32.
Krok 8: Nastavení tlačítek
Ke změně všech stavů jsme použili dvě zabudovaná tlačítka v Magicbit. Hlavní smyčka vždy kontroluje stav dvou tlačítek. Protože se zastavili interně, je v normálním stavu vysoký signál. Digitální čtení těchto pinů je tedy 1. Ve výchozí fázi displej zobrazuje rozhraní hodin. V té době, když je stisknuto jakékoli z těchto dvou tlačítek, změní se obrazovka na obrazovku alarmu. Počítáme také čas v sekundách od posledního stisknutí tlačítka. Pokud je tento počet větší než nějaké předdefinované trvání, pak se na displeji zobrazí obrazovka s hodinami.
Kód je napsán pomocí základních funkcí pro začátečníky. Kód je tedy snadno srozumitelný a můžete se naučit, jak metoda funguje, odkazováním na kód.
Krok 9: Odstraňování problémů
Někdy se hodiny spustí o něco později nebo nezobrazují grafiku správně. Následující tipy pomáhají situaci vyřešit.
- Ujistěte se, že jste zadali správný SSID a heslo
- Změňte server NTP (můžete najít mnoho serverů z internetu, které se týkají vaší oblasti).
- Změní připojení k internetu (mobilní hotspot je také možný).
Také můžete vše vyřešit pomocí sériového monitoru. Kromě OLED displeje zobrazuje sériový monitor i časové informace.
Krok 10: Arduino kód
// knihovny pro OLED displej
#zahrnout
#include #include #define OLED_RESET 4 #include // wifi library for connect #include "time.h" // library for use RC clock // define input and output pin names #define RightButton 34 #define LeftButton 35 #define GreenLED 16 #define Buzzer 25 int preTime = 0; int count = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "VAŠE SSID"; // detaily wifi const char* heslo = "VAŠE HESLO"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // proměnné alarmu int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bool bzučák Zapnuto = 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}}; // obdélník výběru const char* ntpServer = "asia.pool.ntp.org"; // odpojení serveru const gmtOffset_sec = 19800; const int denní světloOffset_sec = 0; Adafruit_SSD1306 displej (128, 64); // OLED velikost definuje byte clockCenterY = (display.height () + 16)/2; // analogový ciferník podrobnosti byte clockCenterX = (display.height () - 16)/2; byte clockRadius = 23; bool state = 0; // obrazovka zapnutá nebo vypnutá boolean Alarm = 0; // aktuální stav alarmu String alarmState = "Alarm ON"; // alarm zapnutý nebo vypnutý // proměnné uložené časové údaje char dayName [10]; char daynumber [3]; char měsíc [10]; char rok [5]; znakové hodiny [3]; char minut [3]; char monthnumber [3]; znak sekund [3]; // proměnné tlačítka bool RightState = 1; bool LeftState = 1; // proměnné bzučáku int kanál = 0; int Frekvence = 2000; int PWM = 200; int rozlišení = 8; void setup () {// nastavení vstupu a výstupu pinMode (RightButton, INPUT); pinMode (LeftButton, INPUT); pinMode (GreenLED, OUTPUT); pinMode (bzučák, VÝSTUP); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // inicializace displeje display.display (); zpoždění (3000); display.clearDisplay (); ledcSetup (0, Frequency, Resolution); // konfigurace parametrů pwm ledcAttachPin (Buzzer, 0); Serial.begin (115200); // zintenzivnění sériové komunikace // připojení k WiFi Serial.printf ("Připojení k %s", ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {zpoždění (500); Serial.print ("."); } Serial.println („PŘIPOJENO“); // init a získejte čas configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // odpojit WiFi, protože již není potřeba WiFi.disconnect (true); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // získání aktuálního času // uložení stavů pravého a levého tlačítka RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // zkontrolujte, zda jsou stisknuta tlačítka, pokud (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // při stisknutí tlačítka bzučák vydá zpoždění pípnutí (100); if (state == 0) {// změna na stav rámce obrazovky alarmu = 1; // změna stavu na stav alarmu RightState = LeftState = 1; // potřebujeme pouze změnit sceern} počty = 0; // reset čítače} pokud (stav == 1 && (počítá) <5) {// pokud je na obrazovce alarmu a není časový limit stav obrazovky = 0; display.clearDisplay (); clockFace (); // analogový ciferník printLocalTime (); // tisk času na ciferníku a tisk dalších podrobností} onAlarm (); // porovnání času alarmu s místním časem a zapnutí zpoždění alarmu (100); // zpoždění pro zapnutí a vypnutí budíku} void clockFace () {// zobrazení caalogového ciferníku.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); // tisk hodinového kruhu pro (int digit = 0; digit = 5) {// má pouze 5 selctions.so reset na -1 (-1 = je alarm zapnutý nebo vypnutý) selectIndex = -1; } dateAndTimeSelection (selectIndex); // změna výběru} neplatné dateAndTimeSelection (int index) {if (index == -1) {// alarm zapnut nebo vypnut, pokud (RightState == 0) {// přepíná mezi zapnutým a vypnutým alarmem, pokud (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } else {alarmState = "Alarm ZAP"; }}} else {if (RightState == 0) {// v ostatních sekcích icrement datum nebo čas v poli alarmDateTime [index] = alarmDateTime [index] + 1; // index je výběr}} int porovnání [4] = {12, 2030, 23, 59}; // horní hranice dat a let v porovnání [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // horní hranice měsíce int resetValue [4] = {1, 2020, 0, 0}; // počáteční hodnoty pro (int i = 1; porovnávám [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> porovnat [alarmDateTime [1] - 1]) {// reset vlaues, pokud jsou měsíce větší než jejich limity alarmDateTime [0] = 1; }} void showAlarm () {// tisk podrobností alarmu String alarmDateTime0 = String (alarmDateTime [0]); // převod stingů na zobrazení String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // pokud mají hodnoty jednu 1 číslici, přidejte k nim "0". if (alarmDateTime [0]
Doporučuje:
Chytrý budík - Intel Edison - Iot RoadShow - São Paulo: 4 kroky
Inteligentní budík - Intel Edison - Iot RoadShow - São Paulo: Jednou z velkých ctností každého, kdo žije nebo pracuje ve velkém městě, je time management. V současné době jsou cesty konstantní a protože provoz je jedním z hlavních faktorů. Když o tom přemýšlím, vytvořil jsem malou aplikaci, která využívá integraci s Google M
Wake Me Up - chytrý budík: 6 kroků
Wake Me Up - chytrý budík: Wake me up je chytrý budík, který lze použít také jako chytré světlo. Vestavěný LED pás simuluje přirozené světlo přicházející do vaší místnosti. To umožňuje klidný a přirozený způsob, jak začít svůj den. Budík je také vybaven 4*7 segme
Inteligentní budík: inteligentní budík vyrobený z Raspberry Pi: 10 kroků (s obrázky)
Chytrý budík: Chytrý budík vyrobený z Raspberry Pi: Chtěli jste někdy chytré hodiny? Pokud ano, toto je řešení pro vás! Vytvořil jsem inteligentní budík, toto jsou hodiny, u kterých můžete podle času na webu změnit čas budíku. Když se spustí alarm, ozve se zvuk (bzučák) a 2 kontrolky
GOOB - chytrý budík: 15 kroků (s obrázky)
GOOB - chytrý budík: GOOB je zkratka pro „Get Out Of Bed“, což je vhodný název pro můj projekt. Chtěl jsem vytvořit zařízení, které by mě mohlo ráno probudit, protože to není nejjednodušší úkol. Hlavní myšlenkou je, že budík nezastaví budík
Vytvořte si chytrý hrnek od LED & Arduino: 6 kroků
Vyrobte si chytrý hrnek od LED & Arduino: V tomto projektu použijeme RGB LED, senzor prostředí a Arduino Nano k odeslání zprávy nebo k alarmu s barevnými světly. Na konci tohoto projektu můžete: Číst teplotu prostředí ze snímače DS18B20 od společnosti Arduino. Ovládání R