Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Historie
- Trinn 2: MASKINOPPSETT
- Trinn 3: OPPSETT AV PROGRAMVARE
- Trinn 4: Teori og metodikk
- Trinn 5: Få lokal tid
- Trinn 6: Konfigurere alarmen
- Trinn 7: Sette opp summeren
- Trinn 8: Sette opp knapper
- Trinn 9: Feilsøking
- Trinn 10: Arduino -kode
Video: Smart vekkerklokke ved hjelp av Magicbit (Arduino): 10 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Denne opplæringen viser hvordan du lager en smart vekkerklokke ved hjelp av OLED -skjerm i Magicbit dev board uten å bruke noen RTC -modul.
Rekvisita
- Magicbit
- USB-A til mikro-USB-kabel
Trinn 1: Historie
I denne opplæringen lærer vi om hvordan du lager en smart vekkerklokke ved hjelp av Magicbit.
Trinn 2: MASKINOPPSETT
Koble Magicbit til datamaskinen med en USB -kabel.
Trinn 3: OPPSETT AV PROGRAMVARE
Åpne Arduino IDE og konfigurer brettet med Arduino IDE. Følgende lenke viser hvordan du gjør det. Så vi anbefaler deg å gå til lenken og bli kjent med Magic bit.
magicbit-arduino.readthedocs.io/en/latest/…
Velg nå riktig brettype og port. I dette tilfellet er brettetypen Magicbit. Bibliotekene er allerede installert når de er i Magicbit -bibliotekene.
Trinn 4: Teori og metodikk
Hvis du ser på den første videoen, kan du se at skjermen har 2 skjermer.
- klokkeskjerm som viser tidsdetaljer
- alarmskjerm som viser alarmdetaljer
For å veksle mellom disse to skjermene brukte vi en hvilken som helst trykknapp på to i Magicbit. Disse knappene er koblet til 35 (venstre knapp) og 34 (høyre knapp) pins på ESP32 i Magicbit. For å vise tiden og andre detaljer brukte vi innebygd OLED -skjerm i magicbit.
La oss snakke om hvordan disse grafiske skjermene fungerer.
Klokkeskjermen har analog klokke, digital klokke, dato, måned og årstekster.
For å lage analog klokke bruker vi noen grafikkfunksjoner som er tilgjengelige i grafikkbiblioteket kalt Adafriut GFX. Ved å bruke sirkelfunksjon og linjefunksjon skaper vi analogt urskive. Enkle geometriske funksjoner som kalles sin og cos brukes til posisjonen til klokkeviserne. Så vi legger bare inn vinkelen som tilsvarer tiden for roterende hender. for det konverterer vi først tiden til vinkling som følger.
- minuttviseren = minutter*(360/60)
- timevinkel hånd = timer*(360/12)
Vinkelen målt i forhold til linjen mellom midten av urskiven og nummer 12 i urskiven. Ved å bruke sin- og cos -funksjoner kan vi beregne x- og y -koordinatene til endene av time- og minutterlinjer. Bildet under beskriver hvordan det går.
I henhold til koordinater skriver vi ut time- og minuttvis ved å tegne linjer. Det er også en tekstutskriftsfunksjon i Adafruit GFX -biblioteket. Det hjelper å skrive ut andre detaljer (dato, måned og klokkeslett med sifre) på skjermen. Du kan endre den analoge klokkeposisjonen og tekstposisjonene ved å endre parametere i koden.
I likhet med klokkeskjermen brukte vi tekstutskriftsfunksjon i Adafruit GFX -biblioteket for å skrive ut tall på OLED -skjerm på passende steder.
Trinn 5: Få lokal tid
Den viktigste delen av klokken er hvordan vi får lokal tid nøyaktig. Til dette formålet kan du bruke ekstern RTC -klokkemodul eller innebygd RC -klokke i ESP32 i Magicbit. I dette prosjektet brukte vi den andre metoden. I denne metoden bruker vi NTP (network time protocall) -klient for å hente lokal tid fra internett. For tilgang til internett brukte vi innebygd WIFI -anlegg i ESP32. Derfor bruker vi WIFI i første etappe for å få tilgang til internett ved å oppgi SSID og passord. Da bør vi konfigurere gmtOffset og daylightOffset i variabler på sekunder. Verdiene til disse variablene er forskjellige fra region til region i verden. gmtOffset betyr antall sekunder du er forskjellig fra GMT.. For de fleste ares dagslysOffset er 3600. Du finner den på internett. Etter at vi fikk gjeldende lokal tid brukte vi ikke lenger WIFI. Fordi da beregner vi lokal tid fra innebygd RC -klokke i ESP32. Dette gjøres ved å bruke time.h bibliotek. Det er et enkelt eksempel i Arduino (Arduino> Eksempler> ESP32> Tid> enklere) for å lære om hvordan dette fungerer videre. Disse koblingene kan du også bruke for ytterligere kunnskap om NTP -klient.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Etter å ha fått lokal tid riktig, endrer vi tiden vår med å vise tekster og vinkel i henhold til den tidsinformasjonen i hver sløyfe.
Trinn 6: Konfigurere alarmen
Ved å klikke på venstre og høyre knapp kan du endre alarmdato og klokkeslett. Sørg for å slå av alarmen når du endrer alarmdatoen og klokkeslettet. Etter konfigurering av dato og klokkeslett, slå på alarmen. For hvis alarmen er på og når alarmtiden er lik din nåværende tid mens du konfigurerer den, vil alarmsignalet ringe. I hovedsløyfen sjekker alltid gjeldende lokal tid og alarminformasjon er lik. Hvis de er like, vil summer og innebygd grønn LED i Magicbit fungere i løpet av ett minutt.
Trinn 7: Sette opp summeren
Vi bruker PWM -puls for å lage summerlyden ved å bruke analogCwrite () -funksjonen i koden. Fordi alle biblioteksfunksjonene er i ESP32 er gyldig for Magicbit. Du kan endre pipelyden til summeren fra å endre frekvensen og PWM -verdien i koden.
techtutorialsx.com/2017/06/15/esp32-arduin…
Denne siden beskriver hvordan summer fungerer med ESP32.
Trinn 8: Sette opp knapper
For å endre alle tilstandene brukte vi to innebygde trykknapper i Magicbit. Hovedløyfen sjekker alltid tilstanden til to knapper. Fordi de trakk opp internt, er normal tilstand et høyt signal. Så du kan se den digitale avlesningen av disse pinnene er 1. På standardfasen viser klokken grensesnitt. På den tiden, når du trykker på en av de to knappene, endrer den skjermen til alarmskjermen. Vi teller også tiden i sekunder fra den siste tiden da knappen ble trykket. Hvis tallet er større enn en forhåndsdefinert varighet, viser displayet klokkeskjermen.
Koden skrives ved å bruke grunnleggende funksjoner for nybegynnere. Så koden er enkel å forstå, og du kan lære metoden hvordan den fungerer ved å referere koden.
Trinn 9: Feilsøking
Noen ganger starter klokken litt senere, eller den viser ikke grafikken ordentlig. Følgende tips hjelper deg med å løse situasjonen.
- Sørg for at du har oppgitt riktig SSID og passord
- Endre NTP -serveren (du kan finne mange servere fra internett som er knyttet til din region).
- Endrer internettforbindelsen. (Mobil hotspot kan også være mulig).
Du kan også feilsøke alt ved å bruke den serielle skjermen. I tillegg til OLED -skjermen viser seriell skjerm tidsinformasjon.
Trinn 10: Arduino -kode
// biblioteker for OLED -skjerm
#inkludere
#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 teller = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "DIN SSID"; // wifi -detaljer const char* passord = "DITT PASSORD"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // alarmvariabler 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}}; // utvalg rektangel const char* ntpServer = "asia.pool.ntp.org"; // serverdetais const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 -skjerm (128, 64); // OLED -størrelse definere byte clockCenterY = (display.height () + 16)/2; // analoge urskive detaljer byte clockCenterX = (display.height () - 16)/2; byte clockRadius = 23; bool state = 0; // skjerm på eller av boolsk Alarm = 0; // alarm gjeldende tilstand String alarmState = "Alarm ON"; // alarm på eller av // variabler lagret tid data char dayName [10]; røye dagnummer [3]; røyemåned [10]; røyeår [5]; røyetimer [3]; røye minutter [3]; røye månedsnummer [3]; røyksekunder [3]; // knappvariabler bool RightState = 1; bool LeftState = 1; // summervariabler int channel = 0; int Frekvens = 2000; int PWM = 200; int oppløsning = 8; void setup () {// set input og ouputs pinMode (RightButton, INPUT); pinMode (VenstreKnapp, INNGANG); pinMode (GreenLED, OUTPUT); pinMode (summer, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // intialiser display display.display (); forsinkelse (3000); display.clearDisplay (); ledcSetup (0, Frekvens, oppløsning); // konfigurere pwm -parametere ledcAttachPin (Buzzer, 0); Serial.begin (115200); // intilize seriell kommunikasjon // koble til WiFi Serial.printf ("Koble til %s", ssid); WiFi.begin (ssid, passord); mens (WiFi.status ()! = WL_CONNECTED) {forsinkelse (500); Serial.print ("."); } Serial.println ("TILKOBLET"); // init og få tiden configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // koble fra WiFi da det ikke lenger trengs WiFi.disconnect (true); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // få nåværende tid // lagre høyre og venstre trykknappstater RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // sjekk at knappene trykkes ned hvis (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // når knappen trykkes, sender buzzer pipelydforsinkelse (100); hvis (state == 0) {// endre til alarmskjermrammestatus = 1; // endre tilstand til alarmtilstand RightState = LeftState = 1; // vi trenger bare endring sceern} counts = 0; // reset counter} if (state == 1 && (tellinger) <5) {// hvis det er i alarmskjermbildet og ingen tidsavbrudd calculateAlarm (); // beregne tidsverdier for alarminformaton showAlarm (); // show values} else {// if in clock skjermtilstand = 0; display.clearDisplay (); clockFace (); // analog urskive printLocalTime (); // utskriftstid i urskive og skrive ut andre detaljer} onAlarm (); // sammenligne alarmtid med lokal tid og slå på alarmforsinkelsen (100); // forsinkelse for alarm på og av} void clockFace () {// caalog clock face display.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); // print watch circle for (int digit = 0; digit = 5) {// only have 5 selections.so tilbakestill til -1 (-1 = er alarn på eller av) selectIndex = -1; } dateAndTimeSelection (selectIndex); // endre valg} ugyldig dateAndTimeSelection (int index) {if (index == -1) {// alarm på eller av hvis (RightState == 0) {// veksler mellom på og av alarm hvis (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } annet {alarmState = "Alarm ON"; }}} annet {if (RightState == 0) {// i andre valgmuligheter som relaterer dato eller klokkeslett i array alarmDateTime [index] = alarmDateTime [index] + 1; // indeks er utvalget}} int sammenligne [4] = {12, 2030, 23, 59}; // øvre grenser for datoene og årene int sammenligning [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // øvre grense for månedene int resetValue [4] = {1, 2020, 0, 0}; // startverdier for (int i = 1; jeg sammenligner [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> comparemonth [alarmDateTime [1] - 1]) {// tilbakestill vlaues hvis månedene er større enn grensene alarmDateTime [0] = 1; }} void showAlarm () {// skrive ut alarmdetaljer String alarmDateTime0 = String (alarmDateTime [0]); // konverter stings for å vise String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // hvis verdiene har en 1 digita, legg til "0" til dem. hvis (alarmDateTime [0]
Anbefalt:
DIY -- Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: 6 trinn
DIY || Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: Mens du lager en edderkopprobot, kan du lære så mange ting om robotikk. Som å lage roboter er både underholdende og utfordrende. I denne videoen skal vi vise deg hvordan du lager en Spider -robot, som vi kan bruke ved hjelp av smarttelefonen vår (Androi
Smart vekkerklokke: en smart vekkerklokke laget med bringebær Pi: 10 trinn (med bilder)
Smart vekkerklokke: en smart vekkerklokke laget med bringebær Pi: Har du noen gang ønsket deg en smart klokke? I så fall er dette løsningen for deg! Jeg lagde Smart Alarm Clock, dette er en klokke som du kan endre alarmtiden i henhold til nettstedet. Når alarmen går, kommer det en lyd (summer) og 2 lys vil
Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: 4 trinn
Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: Hei, jeg er Rithik. Vi kommer til å lage en Internett -kontrollert LED ved hjelp av telefonen din. Vi kommer til å bruke programvare som Arduino IDE og Blynk. Det er enkelt, og hvis du lyktes kan du kontrollere så mange elektroniske komponenter du vilTing We Need: Hardware:
Hvordan lage en drone ved hjelp av Arduino UNO - Lag en quadcopter ved hjelp av mikrokontroller: 8 trinn (med bilder)
Hvordan lage en drone ved hjelp av Arduino UNO | Lag en Quadcopter ved hjelp av mikrokontroller: Introduksjon Besøk min Youtube -kanal En Drone er en veldig dyr gadget (produkt) å kjøpe. I dette innlegget skal jeg diskutere hvordan jeg får det billig? Og hvordan kan du lage din egen slik til en billig pris … Vel, i India er alle materialer (motorer, ESCer
Oppmøtesystem ved å sende RFID -data til MySQL -server ved hjelp av Python With Arduino: 6 trinn
Oppmøtesystem ved å sende RFID-data til MySQL-server ved hjelp av Python With Arduino: I dette prosjektet har jeg tilkoblet RFID-RC522 med arduino, og deretter sender jeg data fra RFID til phpmyadmin-databasen. I motsetning til våre tidligere prosjekter bruker vi ikke ethernet -skjold i dette tilfellet, her leser vi bare serielle data som kommer fra