Orodha ya maudhui:

Saa ya Kengele ya Smart kutumia Magicbit (Arduino): Hatua 10
Saa ya Kengele ya Smart kutumia Magicbit (Arduino): Hatua 10

Video: Saa ya Kengele ya Smart kutumia Magicbit (Arduino): Hatua 10

Video: Saa ya Kengele ya Smart kutumia Magicbit (Arduino): Hatua 10
Video: Lesson 22: Using Seven Segment Display with Arduino and Electronic Dice | SunFounder Robojax 2024, Novemba
Anonim
Image
Image

Mafunzo haya yanaonyesha jinsi ya kutengeneza saa ya kengele mahiri ukitumia onyesho la OLED kwenye bodi ya Magicbit dev bila kutumia moduli yoyote ya RTC.

Vifaa

  • Uchawi
  • USB-A hadi kebo ya Micro-USB

Hatua ya 1: Hadithi

Katika mafunzo haya tutajifunza juu ya jinsi ya kutengeneza saa nzuri ya Kengele kutumia Magicbit.

Hatua ya 2: KUPANGIA vifaa vikuu

Chomeka Magicbit yako kwenye kompyuta kwa kutumia kebo ya USB.

Hatua ya 3: KUWEKA SOFTWARE

Fungua IDE yako ya Arduino na usanidi bodi na Arduino IDE. Kiunga kifuatacho kinamaanisha jinsi ya kufanya hivyo. Kwa hivyo tunakupendekeza kwa hiyo kwanza nenda kwenye kiungo na ujue na Uchawi kidogo.

magicbit-arduino.readthedocs.io/en/latest/…

Sasa chagua aina sahihi ya bodi na bandari. Katika kesi hii aina ya bodi ni Magicbit. Maktaba tayari zimewekwa wakati maktaba ya Magicbit.

Hatua ya 4: Nadharia na Mbinu

Ukiangalia video ya kwanza, unaweza kuona onyesho lina skrini 2.

  • skrini ya saa ambayo inaonyesha maelezo ya wakati
  • skrini ya kengele inayoonyesha maelezo ya kengele

Ili kubadilisha kati ya skrini hizi mbili tulitumia kitufe chochote cha kushinikiza cha mbili katika Magicbit. Vifungo hivi vimeunganishwa na 35 (kifungo cha kushoto) na pini 34 (kifungo cha kulia) za ESP32 katika Magicbit. Kuonyesha wakati na maelezo mengine tulitumia onyesho la OLED la kujengwa kwenye magicbit.

Wacha tuzungumze juu ya jinsi skrini hizi za picha zinafanya kazi.

Skrini ya saa ina saa ya analogi, saa ya dijiti, tarehe, maandishi ya mwezi na mwaka.

Kwa kuunda saa ya analogi tunatumia kazi kadhaa za picha ambazo zinapatikana kwenye maktaba ya picha inayoitwa Adafriut GFX. Kwa kutumia kazi ya duara na kazi ya laini tunaunda uso wa saa ya analog. Kazi rahisi za kijiometri zinazoitwa dhambi na cos zinatumika kwa nafasi ya mikono ya saa. Kwa hivyo tunaingiza pembe tu ambayo inalingana na wakati wa kuzungusha mikono. kwa kuwa sisi kwanza hubadilisha wakati kuwa pembe kama ifuatavyo.

  • pembe ya mkono wa dakika = dakika * (360/60)
  • angle ya masaa mkono = masaa * (360/12)

Pembe iliyopimwa kwa heshima na laini kati ya katikati ya uso wa saa na nambari 12 katika uso wa saa. Kutumia kazi za dhambi na cos tunaweza kuhesabu x na y kuratibu za mwisho wa mistari ya saa na dakika. Picha hapa chini inaelezea jinsi inavyofanya.

Kwa mujibu wa kuratibu tunachapisha saa na mkono wa dakika kwa kuchora mistari. Pia kuna kazi ya kuchapisha maandishi katika maktaba ya Adafruit GFX. Inasaidia kuchapisha maelezo mengine (tarehe, mwezi na onyesho la wakati kwa tarakimu) kwenye maonyesho. Unaweza kubadilisha nafasi ya saa ya analog na nafasi za maandishi kwa kubadilisha vigezo kwenye nambari.

Kama vile skrini ya saa tulitumia kazi ya kuchapisha maandishi kwenye maktaba ya Adafruit GFX kwa nambari za kuchapisha kwenye onyesho la OLED katika sehemu zinazofaa.

Hatua ya 5: Kupata Saa za Mitaa

Sehemu muhimu zaidi ya saa ni jinsi tunavyopata wakati wa mahali kwa usahihi. Kwa kusudi hilo unaweza kutumia moduli ya saa ya nje ya RTC au saa ya RC iliyojengwa katika ESP32 katika Magicbit. Katika mradi huu tulitumia njia ya pili. Kwa njia hii tunatumia mteja wa NTP (protocall time protocall) kwa kupata wakati wa ndani kutoka kwa mtandao. Kwa ufikiaji wa mtandao tulitumia kituo cha WIFI kisichojengwa katika ESP32. Kwa hivyo katika hatua ya kwanza tunatumia WIFI kupata mtandao kwa kutoa SSID na nywila. Kisha tunapaswa kusanidi gmtOffset na daylightOffset katika vigeuzi kwa sekunde. Thamani za vigezo hivi ni tofauti kutoka mkoa hadi mkoa ulimwenguni. gmtOffset inamaanisha idadi ya sekunde unazotofautiana na GMT.. Kwa saa nyingi za mchanaOffset ni 3600. Unaweza kuipata kwenye mtandao. Baada ya kupata wakati wa sasa wa ndani hatukutumia WIFI tena. Kwa sababu basi tunahesabu saa za kawaida kutoka saa iliyojengwa ya RC katika ESP32. Hii imefanywa kwa kutumia maktaba ya time.h. Kuna mfano rahisi katika Arduino (Arduino> Mifano> ESP32> Muda> muda rahisi) kwako kujifunza jinsi hii inafanya kazi zaidi. Pia viungo hivi unaweza kutumia kwa maarifa zaidi juu ya mteja wa NTP.

  • https://dronebotworkshop.com/esp32-intro/
  • https://lastminuteengineers.com/esp32-ntp-server-d…

Baada ya kupata wakati wa mahali kwa usahihi, tunabadilisha wakati wetu kuonyesha maandishi na pembe kulingana na habari ya wakati huo katika kila kitanzi.

Hatua ya 6: Kuweka Kengele

Kwa kubonyeza vifungo vya kushoto na kulia unaweza kubadilisha tarehe ya kengele na uteuzi wa wakati. Hakikisha umezima kengele wakati wa kubadilisha tarehe na saa ya kengele. Baada ya kuweka tarehe na saa washa kengele. Kwa sababu ikiwa kengele imewashwa na wakati wa kengele ni sawa na wakati wako wa sasa wakati unapoiweka, kengele ya kengele italia. Katika kitanzi kuu huangalia kila wakati wa sasa na habari za kengele ni sawa. Ikiwa hizo ni sawa, basi buzzer na imejengwa kwa LED ya kijani huko Magicbit itafanya kazi wakati wa dakika moja.

Hatua ya 7: Kuweka Buzzer

Tunatumia mpigo wa PWM kuunda sauti ya buzzer kwa kutumia kazi ya AnalogCwrite () katika nambari. Kwa sababu ya kazi zote za maktaba ziko katika ESP32 ni halali kwa Magicbit. Unaweza kubadilisha sauti ya mlio wa sauti kutoka kwa badiliko lake na thamani ya PWM kwenye nambari.

techtutorialsx.com/2017/06/15/esp32-arduin …….

Ukurasa huu unaelezea juu ya jinsi buzzer inavyofanya kazi na ESP32.

Hatua ya 8: Kuweka Vifungo

Kwa kubadilisha majimbo yote tulitumia mbili zilizojengwa kwenye vifungo vya kushinikiza huko Magicbit. Kitanzi kuu kila wakati angalia hali ya vifungo viwili. Kwa sababu walijitokeza ndani, kuna hali ya kawaida ni ishara ya juu. Kwa hivyo unaweza kuona usomaji wa dijiti wa pini hizo ni 1. Katika hatua ya chaguo-msingi onyesho linaonyesha kiolesura cha saa. Wakati huo, wakati kitufe chochote kati ya mbili kinabanwa, basi inabadilisha skrini kuwa skrini ya kengele. Pia tunahesabu wakati kwa sekunde kutoka wakati wa mwisho wakati kitufe kinabanwa. Ikiwa hesabu hiyo ni kubwa kuliko muda uliowekwa tayari basi onyesho litaonyesha skrini ya saa.

Nambari imeandikwa kwa kutumia kazi za kimsingi kwa Kompyuta. Kwa hivyo nambari ni rahisi kuelewa na unaweza kujifunza njia inavyofanya kazi kwa kutaja nambari.

Hatua ya 9: Utatuzi wa matatizo

Wakati mwingine saa huanza kidogo baadaye au haionyeshi michoro vizuri. Vidokezo vifuatavyo husaidia kutatua hali.

  • Hakikisha umetoa SSID sahihi na nywila
  • Badilisha seva ya NTP (unaweza kupata seva nyingi kutoka kwa mtandao zinazohusiana na mkoa wako).
  • Inabadilisha muunganisho wa mtandao. (Hotspot ya rununu pia inawezekana).

Pia unaweza kutatua kila kitu kwa kutumia mfuatiliaji wa serial. Kwa kuongeza onyesho la mfululizo la OLED linaonyesha habari ya wakati.

Hatua ya 10: Msimbo wa Arduino

maktaba // kwa onyesho la OLED

# pamoja

#jumuisha #jumuisha #fafanua OLED_RESET 4 # pamoja na // maktaba ya wifi kwa unganisho la #jumuisha "saa." // maktaba ya kutumia saa ya RC // fafanua majina ya pembejeo na pato #fafanua Kitufe cha 34 #fafanua Kitufe cha Kushoto 35 #fafanua KijaniLED 16 #fafanua Buzzer 25 int preTime = 0; hesabu int = 0; muda wa sasa = 0; muundo tm timeinfo; const char * ssid = "SSID YAKO", // wifi details const char char * password = "NENO LAKO"; saa ya ndaniTareheTarehe [5] = {1, 1, 2020, 0, 0}; wakati wa mudaIndex = 0; int chaguaIndex = -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}}; // mstatili wa kuchagua const char * ntpServer = "asia.pool.ntp.org"; // server detais const long gmtOffset_sec = 19800; const int mchanaOffset_sec = 0; Onyesho la Adafruit_SSD1306 (128, 64); saa ya saa Radius = 23; hali ya bool = 0; nambari ya mchana ya char [3]; mwezi wa char [10]; mwaka wa char [5]; masaa ya char [3]; dakika za char [3]; nambari ya mwezi [3]; sekunde za char [3]; // kitufe cha viboreshaji vya RightState = 1; bool LeftState = 1; // vigeuzi vya buzzer int channel = 0; Mzunguko wa int = 2000; int PWM = 200; azimio la int = 8; usanidi batili () {// weka pembejeo na njia ya kuchimba pinMode (RightButton, INPUT); pinMode (KushotoButton, INPUT); pinMode (GreenLED, OUTPUT); pinMode (Buzzer, OUTPUT); onyesha. kuanza (SSD1306_SWITCHCAPVCC, 0x3C); kuchelewesha (3000); onyesha wazi Cleplay (); // kusanidi vigezo vya pwm ledcAttachPin (Buzzer, 0); Serial. Kuanza kwa WiFi (ssid, password); wakati (WiFi.status ()! = WL_CONNECTED) {kuchelewa (500); Printa ya serial ("."); } Serial.println ("IMEUNGANISHWA"); // init na upate muda wa kusanidi (gmtOffset_sec, mchanaOffset_sec, ntpServer); GetTime (); // ondoa WiFi kwani haihitajiki tena WiFi.kata (kweli); Njia ya WiFi (WIFI_OFF); onyesha wazi Cleplay (); } kitanzi batili () {getTime (); LeftState = digitalRead (KushotoButton); // chaeck buttouns ni taabu ikiwa (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // wakati kifungo ni taabu buzzer emit beep sauti kuchelewa (100); ikiwa (state == 0) {// badili kwa hali ya skrini ya kengele = 1; (hali == 1 && (hesabu) <5) {// ikiwa kwenye skrini ya kengele na hakuna muda wa kukokotoa hesabuAlarm (); // hesabu maadili ya saa ya kengele informaton showAlarm (); hali ya skrini = 0; onyesha wazi Cleplay (); saa ya saa (); kengele kuwasha na kuzima} saa tupuFace () {// saa ya kuonyesha saa. DrawCircle (saaCenterX, saaCenterY, saaRadius, NYEUPE); selctions.so rekebisha hadi -1 (-1 = iko karibu au imezimwa) chaguaIndex = -1; } tareheAndTimeSelection (chaguaIndex); (alarmState == "Alarm ON") {alarmState = "Kengele IMEZIMWA"; } mwingine {alarmState = "Alarm ON"; }}}} mwingine {if (RightState == 0) {// katika vipengee vingine hupunguza tarehe au saa inayohusiana katika safu ya alarmDateTime [index] = alarmDateTime [index] + 1; // index ni uteuzi}} int kulinganisha [4] = {12, 2030, 23, 59}; // mipaka ya juu ya tarehe na miaka int kulinganisha mwezi [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // limi ya juu ya miezi int resetValue [4] = {1, 2020, 0, 0}; // maadili ya kuanzia ya (int i = 1; ninalinganisha [i - 1]) {alarmDateTime = resetValue [i - 1]; }} ikiwa (alarmDateTime [0]> kulinganisha mwezi [alarmDateTime [1] - 1]) {// kuweka upya vlaues ikiwa miezi ni kubwa kuliko mipaka yao alarmDateTime [0] = 1; }} batili showAlarm () {// chapa maelezo ya kengele Kamba alarmDateTime0 = Kamba (alarmDateTime [0]); // kubadilisha kuuma kuonyesha String alarmDateTime1 = String (alarmDateTime [1]); Kamba ya kengeleDateTime2 = Kamba (alarmDateTime [2]); Kamba ya kengeleDateTime3 = Kamba (alarmDateTime [3]); Kamba ya kengeleDateTime4 = Kamba (alarmDateTime [4]); // ikiwa maadili yana digita moja 1 ongeza "0" kwao. ikiwa (alarmDateTime [0]

Ilipendekeza: