ዝርዝር ሁኔታ:

Magicbit (Arduino) በመጠቀም ዘመናዊ የማንቂያ ሰዓት 10 ደረጃዎች
Magicbit (Arduino) በመጠቀም ዘመናዊ የማንቂያ ሰዓት 10 ደረጃዎች

ቪዲዮ: Magicbit (Arduino) በመጠቀም ዘመናዊ የማንቂያ ሰዓት 10 ደረጃዎች

ቪዲዮ: Magicbit (Arduino) በመጠቀም ዘመናዊ የማንቂያ ሰዓት 10 ደረጃዎች
ቪዲዮ: {711} Battery Charge Discharge Controller With Arduino Code 2024, ህዳር
Anonim
Image
Image

ይህ አጋዥ ስልጠና ማንኛውንም የ RTC ሞዱል ሳይጠቀሙ በ Magicbit dev ቦርድ ውስጥ የ OLED ማሳያ በመጠቀም ዘመናዊ የማንቂያ ሰዓት እንዴት እንደሚሠራ ያሳያል።

አቅርቦቶች

  • Magicbit
  • ዩኤስቢ-ኤ ወደ ማይክሮ-ዩኤስቢ ገመድ

ደረጃ 1 - ታሪክ

በዚህ መማሪያ ውስጥ Magicbit ን በመጠቀም ዘመናዊ የማንቂያ ሰዓት እንዴት መሥራት እንደሚቻል እንማራለን።

ደረጃ 2 የሃርድዌር ቅንብር

የዩኤስቢ ገመድ በመጠቀም Magicbit ን ወደ ኮምፒውተር ይሰኩት።

ደረጃ 3 የሶፍትዌር ማዋቀር

የእርስዎን Arduino IDE ይክፈቱ እና ሰሌዳውን በአርዱዲኖ አይዲኢ ያዋቅሩ። የሚከተለው አገናኝ ያንን እንዴት ማድረግ እንደሚቻል ያመለክታል። ስለዚህ መጀመሪያ ወደ አገናኝ እንዲሄዱ እና ከአስማት ቢት ጋር እንዲተዋወቁ እንመክራለን።

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

አሁን ትክክለኛውን የሰሌዳ ዓይነት እና ወደብ ይምረጡ። በዚህ ሁኔታ የቦርዱ ዓይነት Magicbit ነው። በ Magicbit ቤተ -መጽሐፍት ውስጥ ሲሆኑ ቤተ -መጽሐፍቶቹ ቀድሞውኑ ተጭነዋል።

ደረጃ 4 - ጽንሰ -ሀሳብ እና ዘዴ

የመጀመሪያውን ቪዲዮ ከተመለከቱ ማሳያው 2 ማያ ገጾች እንዳሉት ማየት ይችላሉ።

  • የጊዜ ዝርዝርን የሚያሳይ የሰዓት ማያ ገጽ
  • የማንቂያ ዝርዝሮችን የሚያሳይ የማንቂያ ማያ ገጽ

በእነዚህ ሁለት ማያ ገጾች መካከል ለመቀያየር በ Magicbit ውስጥ ማንኛውንም የሁለት የግፊት ቁልፍን እንጠቀማለን። እነዚህ አዝራሮች በ Magicbit ውስጥ ከ ESP32 35 (የግራ አዝራር) እና 34 (የቀኝ አዝራር) ካስማዎች ጋር ተገናኝተዋል። እኛ በአስማትbit ውስጥ አብሮ የተሰራውን የ OLED ማሳያ ተጠቅመን ጊዜውን እና ሌሎች ዝርዝሮችን ለማሳየት።

እነዚህ ግራፊክ ማያ ገጾች እንዴት እንደሚሠሩ እንነጋገር።

የሰዓት ማያ ገጽ የአናሎግ ሰዓት ፣ ዲጂታል ሰዓት ፣ ቀን ፣ ወር እና ዓመት ጽሑፎች አሉት።

የአናሎግ ሰዓት ለመፍጠር እኛ Adafriut GFX በሚባል ግራፊክስ ቤተ -መጽሐፍት ውስጥ የሚገኙትን አንዳንድ የግራፊክስ ተግባሮችን እንጠቀማለን። የክበብ ተግባርን እና የመስመር ተግባርን በመጠቀም የአናሎግ የሰዓት ፊት እንፈጥራለን። ኃጢአት እና ኮስ የሚባሉ ቀላል የጂኦሜትሪክ ተግባራት በሰዓት እጆች አቀማመጥ ላይ ያገለግላሉ። ስለዚህ ለተሽከረከሩ እጆች ጊዜን የሚመጥን አንግል ብቻ እናስገባለን። ለዚያ በመጀመሪያ ጊዜውን ወደ አንግል እንደሚከተለው እንለውጣለን።

  • ደቂቃ የእጅ አንግል = ደቂቃዎች*(360/60)
  • የሰዓት አንግል እጅ = ሰዓታት*(360/12)

በሰዓት ፊት መሃል እና በቁጥር 12 መካከል ባለው መስመር መካከል የሚለካው አንግል ኃጢአትን እና የኮስ ተግባሮችን በመጠቀም የሰዓት እና ደቂቃዎች መስመሮችን ጫፎች የ x እና y መጋጠሚያዎችን ማስላት እንችላለን። ከታች ያለው ሥዕል እንዴት እንደሚሠራ ይገልጻል።

መጋጠሚያዎች መሠረት በመስመሮች በሰዓት እና በደቂቃ እጅ እናተምታለን። በአዳፍ ፍሬፍ ጂኤፍኤክስ ቤተ -መጽሐፍት ውስጥ የጽሑፍ ህትመት ተግባርም አለ። በማሳያው ላይ ሌሎች ዝርዝሮችን (ቀን ፣ ወር እና የጊዜ ማሳያ በዲጂቶች) ለማተም ይረዳል። በኮዱ ውስጥ ያሉትን መለኪያዎች በመለወጥ የአናሎግ ሰዓት አቀማመጥ እና የጽሑፍ ቦታዎችን መለወጥ ይችላሉ።

ልክ እንደ ሰዓት ማያ ገጽ እኛ በአዳፍ ፍሬፍ ጂኤፍኤክስ ቤተ -መጽሐፍት ውስጥ የጽሑፍ ህትመት ተግባርን በተገቢው ቦታዎች ላይ በ OLED ማሳያ ላይ ለማተም ቁጥሮች እንጠቀም ነበር።

ደረጃ 5: የአካባቢውን ሰዓት ማግኘት

የሰዓቱ በጣም አስፈላጊው ክፍል የአከባቢውን ጊዜ በትክክል እንዴት እንደምናገኝ ነው። ለዚያ ዓላማ በ MagicPit ውስጥ በ ESP32 ውስጥ የውጭ የ RTC ሰዓት ሞዱል ወይም አብሮ የተሰራ የ RC ሰዓት መጠቀም ይችላሉ። በዚህ ፕሮጀክት ውስጥ ሁለተኛውን ዘዴ ተጠቀምን። በዚህ ዘዴ የአካባቢውን ጊዜ ከበይነመረቡ ለማግኘት NTP (የአውታረ መረብ ጊዜ ፕሮቶኮል) ደንበኛን እንጠቀማለን። በይነመረብን ለማግኘት በ ESP32 ውስጥ አብሮገነብ የ WIFI ተቋምን እንጠቀም ነበር። ስለዚህ በመጀመሪያ ደረጃ SSID ን እና የይለፍ ቃልን በማቅረብ በይነመረቡን ለመድረስ WIFI ን እንጠቀማለን። ከዚያ በሰከንዶች ውስጥ gmtOffset እና የቀን ብርሃን ኦፍሴት በተለዋዋጮች ውስጥ ማዋቀር አለብን። የእነዚህ ተለዋዋጮች እሴቶች በዓለም ውስጥ ከክልል ክልል ይለያያሉ። gmtOffset ማለት ከጂኤምቲ የሚለዩት የሰከንዶች ብዛት ማለት ነው ።. ለአብዛኛዎቹ ares daylightOffset is 3600. በበይነመረብ ውስጥ ሊያገኙት ይችላሉ። የአሁኑን አካባቢያዊ ሰዓት ካገኘን በኋላ WIFI ን አልተጠቀምንም። ምክንያቱም ያኔ የአከባቢን ጊዜ በ ESP32 ውስጥ ካልተገነባው የ RC ሰዓት እናሰላለን። ይህ የሚደረገው የ time.h ቤተ -መጽሐፍትን በመጠቀም ነው። ይህ እንዴት የበለጠ እንደሚሰራ ለማወቅ በአርዱዲኖ (አርዱinoኖ> ምሳሌዎች> ESP32> ጊዜ> ቀላል ጊዜ) ውስጥ ቀላል ምሳሌ አለ። እንዲሁም እነዚህ አገናኞች ስለ NTP ደንበኛ ለተጨማሪ እውቀት ሊጠቀሙበት ይችላሉ።

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

የአከባቢውን ጊዜ በትክክል ካገኘን በኋላ በእያንዳንዱ ዙር ውስጥ በዚያ የጊዜ መረጃ መሠረት ጽሑፎችን እና አንግልን ለማሳየት ጊዜያችንን እንለውጣለን።

ደረጃ 6 ማንቂያውን ማቀናበር

የግራ እና የቀኝ አዝራሮችን ጠቅ በማድረግ የማንቂያ ቀን እና ሰዓት ምርጫን መለወጥ ይችላሉ። የማንቂያ ቀን እና ሰዓት ሲቀይሩ ማንቂያውን ማጥፋትዎን ያረጋግጡ። ቀን እና ሰዓት ካዘጋጁ በኋላ ማንቂያውን ያብሩ። ምክንያቱም ማንቂያው በርቶ ከሆነ እና እርስዎ በሚያዋቅሩት ጊዜ የማንቂያ ሰዓት ከአሁኑ ጊዜዎ ጋር እኩል ከሆነ ፣ የማንቂያ ደወሉ ይጮኻል። በዋናው loop ውስጥ ሁል ጊዜ የአሁኑን አካባቢያዊ ጊዜ ይፈትሻል እና የማንቂያ መረጃ እኩል ነው። እነዚያ እኩል ከሆኑ ፣ ከዚያ ማወዛወዝ እና በ Magicbit ውስጥ በአረንጓዴ LED ውስጥ የተገነባው በአንድ ደቂቃ ውስጥ ይሠራል።

ደረጃ 7 - Buzzer ን ማቀናበር

በኮድ ውስጥ የአናሎግ ጻፍ () ተግባርን በመጠቀም የጩኸት ድምጽ ለመፍጠር የ PWM ምት እንጠቀማለን። በሁሉም የቤተ -መጽሐፍት ተግባራት ምክንያት በ ESP32 ውስጥ ለ Magicbit ልክ ነው። በኮዱ ውስጥ ካለው ድግግሞሽ እና የ PWM እሴት ከለውጡ የጩኸቱን ድምጽ ድምፅ መለወጥ ይችላሉ።

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

ይህ ገጽ buzzer ከ ESP32 ጋር እንዴት እንደሚሠራ ይገልጻል።

ደረጃ 8 - አዝራሮችን ማቀናበር

ሁሉንም ግዛቶች ለመለወጥ በ Magicbit ውስጥ ሁለት የተጫኑ የግፊት ቁልፎችን ተጠቅመናል። ዋናው ዑደት ሁል ጊዜ የሁለት አዝራሮችን ሁኔታ ይፈትሹ። እነሱ ወደ ውስጥ ስለገቡ ፣ የተለመደው ሁኔታ ከፍተኛ ምልክት አለ። ስለዚህ የእነዚያ ካስማዎች ዲጂታል ንባብ ማየት ይችላሉ 1. በነባሪ ደረጃ ማሳያው የሰዓት በይነገጽ ያሳያል። በዚያን ጊዜ ፣ ከሁለቱ አዝራሮች ማናቸውም ሲጫኑ ፣ ከዚያ ማያ ገጹን ወደ ማንቂያ ማያ ገጽ ይለውጣል። እንዲሁም አዝራሩ ከተጫነበት የመጨረሻ ጊዜ ጀምሮ በሰከንዶች ውስጥ ጊዜውን እንቆጥራለን። ያ ቆጠራ ከተወሰነ የተወሰነ የጊዜ ርዝመት የሚበልጥ ከሆነ ማሳያው የሰዓት ማያ ገጹን ያሳያል።

ኮዱ የተፃፈው ለጀማሪዎች መሠረታዊ ተግባራትን በመጠቀም ነው። ስለዚህ ኮዱ ለመረዳት ቀላል ነው እና ኮዱን በመጥቀስ እንዴት እንደሚሰራ ዘዴውን መማር ይችላሉ።

ደረጃ 9 - መላ መፈለግ

አንዳንድ ጊዜ ሰዓቱ ትንሽ ቆይቶ ይጀምራል ወይም ግራፊክስን በትክክል አያሳይም። ምክሮችን መከተል ሁኔታውን ለመፍታት ይረዳል።

  • ትክክለኛውን SSID እና የይለፍ ቃል መስጠቱን ያረጋግጡ
  • የ NTP አገልጋዩን ይለውጡ (ከእርስዎ ክልል ጋር የሚዛመድ ከበይነመረቡ ብዙ አገልጋዮችን ማግኘት ይችላሉ)።
  • የበይነመረብ ግንኙነትን ይለውጣል። (የሞባይል መገናኛ ነጥብ እንዲሁ ይቻላል)።

እንዲሁም ተከታታይ ማሳያውን በመጠቀም ሁሉንም ነገር መላ መፈለግ ይችላሉ። ከ OLED ማሳያ ተከታታይ ማሳያ በተጨማሪ የጊዜ መረጃን ያሳያል።

ደረጃ 10 የአርዱዲኖ ኮድ

// ቤተ መጻሕፍት ለ OLED ማሳያ

#ያካትቱ

#ማካተት #ማካተት #መግለፅ OLED_RESET 4 #ማካተት // የ wifi ቤተ -መፃህፍት ለማካተት #“ጊዜ.ህ” // ቤተ -መጽሐፍትን ለመጠቀም RC ሰዓት // የግቤት እና የውጤት ፒን ስሞችን ይግለጹ #ትክክለኛው ቡትቶን 34 #መግለፅ ግራኝ አዝራር 35 #መግለፅ GreenLED 16 #መግለፅ Buzzer 25 int preTime = 0; int ቆጠራዎች = 0; int currentTime = 0; መዋቅር tm timeinfo; const char* ssid = "የእርስዎ SSID"; // የ wifi ዝርዝሮች const char* password = "የይለፍ ቃልዎ"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // የማንቂያ ደወሎች 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}} ፤ // የምርጫ አራት ማእዘን const char* ntpServer = "asia.pool.ntp.org"; // አገልጋይ detais const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 ማሳያ (128 ፣ 64) ፤ // የ OLED መጠን ባይት ሰዓትCenterY = (display.height () + 16)/2 ፤ // የአናሎግ የሰዓት ዝርዝሮች ዝርዝሮች ባይት clockCenterX = (display.height () - 16)/2; ባይት ሰዓት ራዲየስ = 23; bool state = 0; // ማያ ገጽ በርቷል ወይም ጠፍቷል ቡሊያን ማንቂያ = 0; // ማንቂያ የአሁኑ ሁኔታ ሕብረቁምፊ alarmState = "ማንቂያ በርቷል"; የቻር የቀን ቁጥር [3]; የቻር ወር [10]; የቻር ዓመት [5]; የቻር ሰዓት [3]; የቻር ደቂቃዎች [3]; የቻር ወር ቁጥር [3]; ቻር ሰከንዶች [3]; // የአዝራር ተለዋዋጮች bool RightState = 1; bool LeftState = 1; // buzzer ተለዋዋጮች int ሰርጥ = 0; int ድግግሞሽ = 2000; int PWM = 200; int ጥራት = 8; ባዶነት ማዋቀር () {// የግቤት እና የውጤቶች pinMode (RightButton ፣ INPUT); pinMode (LeftButton ፣ ማስገቢያ); pinMode (GreenLED ፣ OUTPUT); pinMode (Buzzer, OUTPUT); ማሳያ. መዘግየት (3000); display.clearDisplay (); ledcSetup (0 ፣ ድግግሞሽ ፣ ጥራት) ፤ // የ pwm ግቤቶችን ledcAttachPin (Buzzer ፣ 0) ያዋቅሩ ፤ Serial.begin (115200); // ተከታታይ ግንኙነትን ያዋህዱ // ወደ WiFi Serial.printf (“ከ %s” ፣ ssid ጋር መገናኘት); WiFi.begin (ssid ፣ የይለፍ ቃል); ሳለ (WiFi.status ()! = WL_CONNECTED) {መዘግየት (500); Serial.print ("."); } Serial.println ("ተገናኝቷል"); // ግባ እና የጊዜ ውቅረት ጊዜን (gmtOffset_sec ፣ የቀን ብርሃን ኦፍሴት_ሴክ ፣ ntpServer) ያግኙ ፤ getTime (); // ከእንግዲህ WiFi ስላልፈለገ WiFi ያላቅቁ። ያላቅቁ (እውነተኛ) ፤ WiFi.mode (WIFI_OFF); display.clearDisplay (); } ባዶነት loop () {getTime () ፤ // የአሁኑን ጊዜ ያግኙ // የቀኝ እና የግራ ግፊት አዝራርን ግዛቶች RightState = digitalRead (RightButton) ፤ LeftState = digitalRead (LeftButton); // ጫፉ ጫፎቹ ተጭነዋል (RightState == 0 || LeftState == 0) {ledcWrite (0, 200) ፤ // አዝራሩ ሲጫን የጩኸት ድምፅ ድምፅ መዘግየት (100) ያወጣል ፤ ከሆነ (ሁኔታ == 0) {// ወደ የማንቂያ ማያ ገጽ ክፈፍ ሁኔታ = 1; // ሁኔታ ወደ የማንቂያ ሁኔታ ይለውጡ RightState = LeftState = 1; // እኛ ለውጥ sceern ብቻ ያስፈልገናል} ቆጠራዎች = 0; // ዳግም ማስጀመሪያ ቆጣሪ} (ግዛት == 1 && (ቆጠራዎች) <5) {// በማንቂያ ማያ ገጽ ውስጥ ከሆነ እና የጊዜ ማብቂያ ከሌለ ማስጠንቀቂያ () ፣ // የማስጠንቀቂያ ደወል የጊዜ እሴቶችን ያሳዩ ማሳወቂያ () ፣ // እሴቶችን ያሳዩ} ሌላ {// በሰዓት ውስጥ ከሆነ የማያ ገጽ ሁኔታ = 0; display.clearDisplay (); clockFace (); // የአናሎግ ሰዓት ፊት ህትመት አካባቢያዊ ጊዜ () ፤ // ሰዓት ፊት ላይ የህትመት ጊዜ እና ሌሎች ዝርዝሮችን ማተም} ላይ (ማንቂያ) ፣ // የማንቂያ ሰዓትን ከአካባቢያዊ ሰዓት ጋር ማወዳደር እና የማንቂያውን መዘግየት (100) ያብሩ ፣ // መዘግየት ለ ማንቂያ በርቷል እና ጠፍቷል} ባዶ ሰዓት ፊት () {// caalog ሰዓት የፊት ማሳያ። selctions.so ዳግም ወደ -1 (-1 = ማንቂያ በርቷል ወይም ጠፍቷል) ይምረጡ ኢንዴክስ = -1; } dateAndTimeSelection (selectIndex) ፤ // ቀይር ለውጥ} ባዶ ቀን AndTimeSelection (int ኢንዴክስ) {if (index == -1) {// ማንቂያ ከበራ ወይም ከጠፋ (RightState == 0) {// ማንቂያውን በማብራት እና በማጥፋት መካከል ለመቀያየር (alarmState == "ማንቂያ በርቷል") {alarmState = "ማንቂያ ጠፍቷል"; } ሌላ {alarmState = "ማንቂያ በርቷል"; }}} ሌላ {ከሆነ (RightState == 0) {// በሌሎች ክፍሎች ውስጥ በድርድር ማንቂያ ውስጥ የግንኙነት ቀንን ወይም ጊዜን ቢጨምሩበት ቀን [index] = alarmDateTime [index] + 1; // መረጃ ጠቋሚ ምርጫው ነው}} int ንጽጽር [4] = {12, 2030, 23, 59}; // የቀነዶች እና የዓመታት የላይኛው ወሰን [12] = {31 ፣ 28 ፣ 31 ፣ 30 ፣ 31 ፣ 30 ፣ 31 ፣ 31 ፣ 30 ፣ 31 ፣ 30 ፣ 31} // የወሩ የላይኛው ሊሚ int resetValue [4] = {1, 2020, 0, 0}; // የመነሻ እሴቶች ለ (int i = 1 ፣ እኔ አነፃፅራለሁ [i - 1]) {alarmDateTime = resetValue [i - 1]; }} ከሆነ (alarmDateTime [0]> ወርን አወዳድር [alarmDateTime [1] - 1]) {// ወራቶች ከገደባቸው በላይ ከሆኑ የማንቂያ ደውሎች ጊዜ (0] = 1; }} ባዶነት ማሳያ ማንቂያ () {// የህትመት የማንቂያ ዝርዝሮች ሕብረቁምፊ alarmDateTime0 = ሕብረቁምፊ (alarmDateTime [0]); // String alarmDateTime1 = String (alarmDateTime [1]) ን ለማሳየት ስቴንስ ይለውጡ ፤ ሕብረቁምፊ alarmDateTime2 = ሕብረቁምፊ (alarmDateTime [2]); ሕብረቁምፊ alarmDateTime3 = ሕብረቁምፊ (alarmDateTime [3]); ሕብረቁምፊ alarmDateTime4 = ሕብረቁምፊ (alarmDateTime [4]); // እሴቶች አንድ 1 አሃዝ ካላቸው “0” ይጨምሩላቸው። ከሆነ (የማንቂያ ቀን ሰዓት [0]

የሚመከር: