תוכן עניינים:
- אספקה
- שלב 1: סיפור
- שלב 2: הגדרת חומרה
- שלב 3: הגדרת תוכנה
- שלב 4: תיאוריה ומתודולוגיה
- שלב 5: קבלת הזמן המקומי
- שלב 6: הגדרת האזעקה
- שלב 7: הגדרת הבאזר
- שלב 8: הגדרת לחצנים
- שלב 9: פתרון בעיות
- שלב 10: קוד ארדואינו
וִידֵאוֹ: שעון מעורר חכם באמצעות Magicbit (Arduino): 10 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:12
הדרכה זו מראה כיצד לייצר שעון מעורר חכם באמצעות תצוגת OLED בלוח ה- dev של Magicbit ללא שימוש במודול RTC.
אספקה
- מג'יקביט
- כבל USB-A למיקרו USB
שלב 1: סיפור
במדריך זה נלמד כיצד ליצור שעון מעורר חכם באמצעות Magicbit.
שלב 2: הגדרת חומרה
חבר את ה- Magicbit למחשב באמצעות כבל USB.
שלב 3: הגדרת תוכנה
פתח את Arduino IDE והגדר את הלוח עם Arduino IDE. הקישור הבא מתייחס כיצד לעשות זאת. אז אנו ממליצים לך קודם כל להיכנס לקישור ולהכיר את Magic bit.
magicbit-arduino.readthedocs.io/en/latest/…
כעת בחר את סוג הלוח והיציאה הנכונים. במקרה זה סוג הלוח הוא Magicbit. הספריות כבר מותקנות כאשר בספריות Magicbit.
שלב 4: תיאוריה ומתודולוגיה
אם אתה מסתכל על הסרטון הראשון, אתה יכול לראות שהתצוגה כוללת 2 מסכים.
- מסך שעון המציג פירוט זמן
- מסך אזעקה המציג פרטי אזעקה
למעבר בין שני המסכים השתמשנו בכל כפתור לחיצה של שניים ב- Magicbit. כפתורים אלה מחוברים ל -35 (כפתור שמאלי) ול -34 (כפתור ימני) של ה- ESP32 ב- Magicbit. כדי להציג את הזמן ופרטים אחרים השתמשנו בתצוגת OLED מובנית ב- magicbit.
בואו נדבר על איך המסכים הגרפיים האלה עובדים.
במסך השעון יש טקסט אנלוגי, שעון דיגיטלי, תאריכים, חודשים ושנים.
ליצירת שעון אנלוגי אנו משתמשים בכמה פונקציות גרפיות הזמינות בספריית הגרפיקה בשם Adafriut GFX. באמצעות פונקציית מעגל ופונקציית קו אנו יוצרים פנים שעון אנלוגיות. פונקציות גיאומטריות פשוטות הנקראות sin ו- cos משמשות למיקום מידות השעון. אז אנחנו רק מכניסים את הזווית המתאימה לזמן של ידיים מסתובבות. לשם כך אנו ממירים תחילה את הזמן לזווית כדלקמן.
- זווית יד דקה = דקות*(360/60)
- זווית שעות יד = שעות*(360/12)
הזווית הנמדדת ביחס לקו בין מרכז שעון המספר למספר 12. בפונקציית השעון. בעזרת פונקציות sin ו- cos נוכל לחשב את הקואורדינטות x ו- y של קצות השורות והדקות. התמונה למטה מתארת את מהלך המצב.
על פי הקואורדינטות אנו מדפיסים יד ודקה על ידי ציור קווים. יש גם פונקציית הדפסה של טקסט בספריית GFX של Adafruit. זה עוזר להדפיס פרטים אחרים (תצוגת תאריך, חודש ושעה בספרות) המוצגים בתצוגה. ניתן לשנות את מיקום השעון האנלוגי ומיקומי הטקסט על ידי שינוי פרמטרים בקוד.
בדומה למסך השעון, השתמשנו בפונקציית הדפסת טקסט בספריית AdFruit GFX להדפסה של מספרי תצוגת OLED במקומות המתאימים.
שלב 5: קבלת הזמן המקומי
החלק החשוב ביותר בשעון הוא האופן בו אנו מקבלים את הזמן המקומי בצורה מדויקת. לשם כך תוכל להשתמש במודול שעון RTC חיצוני או בשעון RC מובנה ב- ESP32 ב- Magicbit. בפרויקט זה השתמשנו בשיטה השנייה. בשיטה זו אנו משתמשים בלקוח NTP (רשת זמן פרוטוקול) עבור מקבל את הזמן המקומי מהאינטרנט. לגישה לאינטרנט השתמשנו במתקן WIFI מובנה ב- ESP32. לכן בשלב הראשון אנו משתמשים ב- WIFI לגישה לאינטרנט על ידי מתן SSID וסיסמה. לאחר מכן עלינו להגדיר את gmtOffset ו- daylightOffset במשתנים תוך שניות. הערכים של משתנים אלה שונים מאזור לאזור בעולם. פירושו gmtOffset הוא מספר השניות בהן אתה שונה מה- GMT..במרבית הימים aresoffset הוא 3600. אתה יכול למצוא אותו באינטרנט. לאחר שקיבלנו את הזמן המקומי הנוכחי כבר לא השתמשנו ב- WIFI. כי אז אנו מחשבים זמן מקומי משעון RC מובנה ב- ESP32. זה נעשה באמצעות ספריית time.h. יש דוגמה פשוטה ב- Arduino (Arduino> דוגמאות> ESP32> Time> simpletime) שתוכל ללמוד כיצד זה עובד הלאה. כמו כן, תוכל להשתמש בקישורים אלה לידע נוסף אודות לקוח NTP.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
לאחר שקיבלנו את הזמן המקומי בצורה נכונה, אנו משנים את הזמן המציג טקסטים וזווית בהתאם למידע הזמן הזה בכל לולאה.
שלב 6: הגדרת האזעקה
על ידי לחיצה על הלחצנים השמאליים והימניים תוכל לשנות את תאריך השעה והתאריך. הקפד לכבות את האזעקה כאשר אתה משנה את התאריך והשעה של האזעקה. לאחר הגדרת התאריך והשעה הפעל את האזעקה. כי אם האזעקה מופעלת וכאשר זמן האזעקה שווה לזמן הנוכחי בזמן שאתה מגדיר אותה, זמזם האזעקה יצלצל. בלולאה הראשית תמיד בודק את הזמן המקומי הנוכחי ופרטי האזעקה שווים. אם אלה שווים, אז זמזם מובנה LED ירוק ב- Magicbit יעבוד במהלך דקה אחת.
שלב 7: הגדרת הבאזר
אנו משתמשים בדופק PWM ליצירת צליל הבאזר באמצעות הפונקציה analogCwrite () בקוד. מכיוון שכל פונקציות הספרייה נמצאות ב- ESP32 תקף ל- Magicbit. אתה יכול לשנות את צליל הביפ של הזמזם משינוי תדירותו וערך PWM שלו בקוד.
techtutorialsx.com/2017/06/15/esp32-arduin…
דף זה מתאר כיצד אופן הפעולה של זמזם עם ESP32.
שלב 8: הגדרת לחצנים
כדי לשנות את כל המצבים השתמשנו בשני כפתורי לחיצה מובנים ב- Magicbit. לולאה ראשית תמיד לבדוק את המצב של שני לחצנים. מכיוון שהם משכו פנימה, שם המצב הנורמלי הוא אות גבוה. כך שתוכל לראות את הקריאה הדיגיטלית של סיכות אלה הן 1. בשלב ברירת המחדל התצוגה מציגה את ממשק השעון. באותו זמן, כאשר נלחץ על אחד משני הכפתורים, הוא משנה מסך למסך אזעקה. כמו כן, אנו סופרים את הזמן בשניות מהפעם האחרונה בה נלחץ על הכפתור. אם מספר זה גדול מכמה משך זמן מוגדר מראש, התצוגה תציג את מסך השעון.
הקוד נכתב על ידי שימוש בפונקציות בסיסיות למתחילים. אז הקוד פשוט להבנה ותוכל ללמוד את השיטה כיצד הוא פועל על ידי הפניית הקוד.
שלב 9: פתרון בעיות
לפעמים השעון מתחיל קצת מאוחר יותר או שהוא לא מציג את הגרפיקה כראוי. העצות הבאות עוזרות לפתור את המצב.
- וודא שנתת את ה- SSID והסיסמה הנכונים
- שנה את שרת NTP (אתה יכול למצוא שרתים רבים מהאינטרנט המתייחסים לאזור שלך).
- משנה את חיבור האינטרנט. (אפשר גם נקודה חמה ניידת).
כמו כן, תוכל לפתור הכל באמצעות הצג הטורי. בנוסף לתצוגת OLED הצג הטורי מציג מידע על הזמן.
שלב 10: קוד ארדואינו
// ספריות לתצוגת OLED
#לִכלוֹל
#include #include #define OLED_RESET 4 #include // wifi library for connect #include "time.h" // ספרייה לשימוש בשעון RC // הגדר שמות סיכות קלט ופלט #הגדר כפתור ימני 34 #הגדר כפתור שמאלי 35 #הגדר GreenLED 16 #define Buzzer 25 int preTime = 0; int counts = 0; int currentTime = 0; struct 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; 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 להגדיר בתים clockCenterY = (display.height () + 16)/2; // פרטי פנים של שעון אנלוגי byte clockCenterX = (display.height () - 16)/2; בייט clockRadius = 23; מצב bool = 0; // מסך מופעל או כבוי אזעקה בוליאנית = 0; // מצב אזעקה הנוכחי String alarmState = "אזעקה מופעלת"; // אזעקה מופעלת או כבויה // משתנים נתונים מאוחסנים בזמן char dayName [10]; מספר יום צ'אר [3]; חודש צ'ארה [10]; שנת חרלה [5]; שעות צ'ארלה [3]; דקות צ'ארלה [3]; מספר החודש char [3]; צ'ארס שניות [3]; // משתני כפתורים bool RightState = 1; bool LeftState = 1; // משתני זמזם int channel = 0; int תדר = 2000; int PWM = 200; רזולוציית int = 8; הגדרת void () {// set input ו- ouputs pinMode (RightButton, INPUT); pinMode (כפתור שמאלי, INPUT); pinMode (GreenLED, OUTPUT); pinMode (באזר, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // לאתחל תצוגת display.display (); עיכוב (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 ("מחובר"); // init וקבל את הזמן configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // נתק את ה- WiFi מכיוון שכבר אין בו צורך ב- WiFi.disconnect (נכון); WiFi.mode (WIFI_OFF); display.clearDisplay (); } לולאת void () {getTime (); // קבל את השעה הנוכחית // אחסן את הלחצן הימני והשמאלי של לחצן RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // צא לחצו על הלחצנים אם (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // כאשר נלחץ על הכפתור, זמזם פולט עיכוב צליל ביפ (100); אם (מצב == 0) {// שנה למצב מסגרת אזעקה = 1; // שנה מצב למצב אזעקה RightState = LeftState = 1; // אנחנו צריכים רק שינוי sceern} counts = 0; // reset reset} if (state == 1 && (ספירות) <5) {// אם במסך אזעקה וללא פסק זמן calculateAlarm (); // לחשב ערכי זמן של אזעקת informaton showAlarm (); // הצג ערכים} אחר {// אם בשעון מצב מסך = 0; display.clearDisplay (); clockFace (); // השעון האנלוגי printLocalTime (); // הדפס זמן בשעון והדפס פרטים אחרים} onAlarm (); // השווה את זמן ההתראה עם השעה המקומית והפעל את עיכוב האזעקה (100); // עיכוב עבור אזעקה מופעלת וכיבוי} void clockFace () {// caalog display face face.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); // הדפס מעגל שעון עבור (int digit = 0; digit = 5) {// יש רק 5 selctions.so אפס ל- -1 (-1 = הוא alarn מופעל או כבוי) selectIndex = -1; } dateAndTimeSelection (selectIndex); // change selection} void dateAndTimeSelection (int index) {if (index == -1) {// אזעקה מופעלת או מושבתת אם (RightState == 0) {// מעבר בין אזעקה מופעלת וכיבוי אם (alarmState == "אזעקה מופעלת") {alarmState = "אזעקה כבויה"; } אחר {alarmState = "אזעקה מופעלת"; }}}} אחר {אם (RightState == 0) {// במגוון בחירות אחרות תאריך השעה או השעה במערך alarmDateTime [index] = alarmDateTime [index] + 1; // אינדקס הוא הבחירה}} int השווה [4] = {12, 2030, 23, 59}; // גבולות עליונים של התאריכים והשנים int השוואה [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]; }} if (alarmDateTime [0]> comparemonth [alarmDateTime [1] - 1]) {// אפס vlaues אם החודשים גדולים מהגבולות שלהם alarmDateTime [0] = 1; }} void showAlarm () {// הדפסת פרטי אזעקה String alarmDateTime0 = String (alarmDateTime [0]); // המרת עוקצים להצגת String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // אם לערכים יש ספרה אחת אחת הוסף להם "0". אם (alarmDateTime [0]
מוּמלָץ:
שעון מעורר חכם - אינטל אדיסון - Iot RoadShow - סאו פאולו: 4 שלבים
שעון מעורר חכם - אינטל אדיסון - Iot RoadShow - סאו פאולו: אחת הסגולות הגדולות של כל מי שחי או עובד בעיר גדולה היא ניהול זמן. כיום הנסיעות קבועות, וכיוון שהתנועה היא אחד הגורמים העיקריים. במחשבה על זה, הכנתי יישום קטן שמשתמש באינטגרציה עם Google M
WakeupNow - שעון מעורר חכם: 8 שלבים
WakeupNow - שעון מעורר חכם: כפי שכולם יודעים, חיי התלמידים קשים מאוד, יש להם יום ארוך עם הרצאות, הרבה שיעורי בית ובכלל, יש להם חיים מטורפים. אין להם זמן לכלום, ואם אתה מציע להם להוסיף כמה שעות ליום הם ישמחו. מידע על
שעון מעורר חכם: שעון מעורר חכם המיוצר עם פטל פי: 10 שלבים (עם תמונות)
שעון מעורר חכם: שעון מעורר חכם המיוצר עם פטל פאי: האם אי פעם רצית שעון חכם? אם כן, זה הפתרון בשבילך! הכנתי שעון מעורר חכם, זהו שעון שתוכל לשנות את זמן ההתראה בהתאם לאתר. כאשר האזעקה תיגמר, ישמע צליל (זמזם) ושתי נורות יעיפו
קנה מידה חכם DIY עם שעון מעורר (עם Wi-Fi, ESP8266, Arduino IDE ו- Adafruit.io): 10 שלבים (עם תמונות)
קנה מידה חכם DIY עם שעון מעורר (עם Wi-Fi, ESP8266, Arduino IDE ו- Adafruit.io): בפרויקט הקודם שלי פיתחתי סולם אמבטיה חכם עם Wi-Fi. הוא יכול למדוד את משקל המשתמש, להציג אותו באופן מקומי ולשלוח אותו לענן. תוכל לקבל פרטים נוספים על כך בקישור למטה: https: //www.instructables.com/id/Wi-Fi-Smart-Scale-wi
הרכבת "שעון חכם 2" (שעון מעורר מבוסס ארדואינו עם הרבה תכונות נוספות): 6 שלבים
הרכבת "שעון חכם 2" (שעון מעורר מבוסס ארדואינו עם הרבה תכונות נוספות): הדרכה זו מציגה כיצד להרכיב את הערכה לפרויקט ווייז שעון 2, פרויקט קוד פתוח (חומרה ותוכנה). ניתן לרכוש ערכת Wise Clock 2 מלאה כאן. לסיכום, זה מה שעון ווייז 2 יכול לעשות (עם תוכנת הקוד הפתוח הנוכחי