תוכן עניינים:
- אספקה
- שלב 1: כיצד פועל השעון הדיגיטלי
- שלב 2: מכונת המדינה
- שלב 3: מגן לוח מקשים LCD
- שלב 4: ממשק מכונת המדינה
- שלב 5: חיבור דברים ביחד
- שלב 6: קבל את הדוגמה
וִידֵאוֹ: שעון דיגיטלי על Arduino באמצעות מכשיר סופי: 6 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
היי, אני הולך להראות לך כיצד ניתן ליצור שעון דיגיטלי בעזרת YAKINDU Statechart Tools ולהריץ על Arduino, שמשתמש במגן לוח מקשים LCD.
הדגם המקורי של השעון הדיגיטלי נלקח מדוד הראל. הוא פרסם מאמר בנושא
"[…] הרחבה רחבה של הפורמליזם המקובל של מכונות המדינה ותרשימי המדינה."
במאמר זה הוא השתמש בדוגמת השעון הדיגיטלי למחקר שלו. השתמשתי בו כהשראה ובניתי מחדש את השעון עם YAKINDU Statechart Tools (כלי ליצירת מודלים גרפיים של מכונות מדינה וליצור איתו קוד C/C ++) והחזרתי אותו לחיים על Arduino.
אספקה
חוּמרָה:
- Arduino Uno או Mega
- מגן לוח מקשים LCD
תוֹכנָה:
- כלי סטטרט של YAKINDU
- Eclipse C ++ IDE עבור Arduino
שלב 1: כיצד פועל השעון הדיגיטלי
נתחיל בהגדרת אופן הפעולה של השעון הדיגיטלי. אתה זוכר את אלה … נניח … שעונים דיגיטליים "מגניבים במיוחד" שלכולם היו בשנות ה -90? שעון עצר משולב, אזעקות שונות והצפצוף המעצבן שלו כל שעה שלמה. אם לא, תסתכל: שעון דיגיטלי משנות ה -90.
אז בעצם זה שעון הניתן להגדרה עם מצבים שונים. השעה הנוכחית תוצג בעיקר, אך ישנן כמה תכונות אחרות. כקלט, יש לך הפעלה/כיבוי, מצב ולחצן הגדרה. בנוסף, אתה יכול להדליק ולכבות את האור. בעזרת כפתור המצב תוכל להבחין בין המצבים ולהפעיל/להשבית את תכונות השעון:
- הצג את השעה (שעון)
- הצג את התאריך (תאריך)
- הגדר את האזעקה (אזעקה 1, אזעקה 2)
- הפעל/השבת פעמון (הגדר פעמון)
- השתמש בשעון העצור (Stop Watch)
בתוך התפריטים, תוכל להשתמש בלחצן ההפעלה/כיבוי כדי להגדיר את המצב. כפתור הסט מאפשר לך להגדיר את השעה - למשל. לשעון או לאזעקות. ניתן לשלוט בשעון העצר - להתניע ולעצור אותו - באמצעות כפתור הנורה והכבה. ניתן גם להשתמש בדלפק הקפה משולב
יתר על כן, יש צלצול שנשמע כל שעה מלאה ותאורה אחורית ניתנת לשליטה. בשלב הראשון לא חיברתי אותם לארדואינו.
שלב 2: מכונת המדינה
אינני רוצה לפרט בהרחבה על ההסבר של דוגמה זו. זה לא בגלל שזה מורכב מדי, זה רק קצת גדול מדי. אנסה להסביר את הרעיון הבסיסי של איך זה עובד. הביצוע צריך להיות מסביר את עצמו, על ידי הסתכלות על המודל או הורדה והדמייתו. חלקים מסוימים במכשיר המדינה מסוכמים באזורי משנה, כמו אזור הזמן שנקבע. עם זאת, יש להבטיח את הקריאות של מכונת המדינה.
המודל מחולק לשני חלקים - גרפי וטקסטואלי. בחלק הטקסטואלי יוגדרו האירועים, המשתנים וכו '. בחלק הגרפי - תרשים המצב - מצוין הביצוע הלוגי של המודל. כדי ליצור מכונת מדינה, שממלאת את ההתנהגות שצוין, יש צורך באירועי קלט מסוימים, שניתן להשתמש בהם במודל: onoff, set, mode, light ו- light_r. בתוך סעיף ההגדרה נעשה שימוש באירוע פנימי, המגדיל את ערך הזמן כל 100 אלפיות השנייה:
כל 100 ms / זמן += 1
בהתבסס על שלבי 100 ms הזמן הנוכחי יחושב בתבנית HH: MM: SS:
display.first = (זמן / 36000) % 24;
display.second = (time / 600) % 60; display.third = (time / 10) % 60;
הערכים יחוברו לתצוגת ה- LCD באמצעות עדכון הפעולה LCD בכל פעם שיקראו למכשיר המדינה:
display.updateLCD (display.first, display.second, display.third, display.text)
הביצוע הבסיסי של מכונת המדינה כבר מוגדר בסעיף כיצד פועל השעון הדיגיטלי. בתוך הכלי השתמשתי בכמה רכיבי דוגמנות "מיוחדים" כמו CompositeState, History, Sub-Diagrams, ExitNodes וכו '. ניתן למצוא תיאור מפורט במדריך למשתמש.
שלב 3: מגן לוח מקשים LCD
מגן לוח המקשים LCD די מגניב לפרויקטים פשוטים, הדורשים מסך להדמיה וכמה לחצנים כקלט - HMI אופייני ופשוט (ממשק מכונה אנושי). מגן לוח המקשים LCD מכיל חמישה כפתורי משתמש ועוד אחד לאיפוס. חמשת הכפתורים כולם יחד מחוברים לסיכה A0 של הארדואינו. כל אחד מהם מחובר למפריד מתח, המאפשר הבחנה בין הכפתורים.
אתה יכול להשתמש ב- AnalogRead (0) כדי למצוא את הערכים הספציפיים, שיכולים כמובן להיות שונים מהיצרן. פרויקט פשוט זה מציג את הערך הנוכחי על ה- LCD:
#כלול "Arduino.h"
#include "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); הגדרת חלל () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("ערך נמדד"); } לולאת חלל () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); עיכוב (200); }
אלה התוצאות הנמדדות שלי:
- אף אחד: 1023
- בחר: 640
- משמאל: 411
- למטה: 257
- למעלה: 100
- מימין: 0
עם ספים אלה אפשר לקרוא את הכפתורים:
#define NONE 0 #להגדיר SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; result = analogRead (0); אם (תוצאה <50) {החזר ימינה; } if (תוצאה <150) {return UP; } if (תוצאה <300) {return DOWN; } if (תוצאה <550) {return LEFT; } if (תוצאה <850) {return SELECT; } החזר NONE; }
שלב 4: ממשק מכונת המדינה
קוד C ++ שנוצר של מכונת המדינה מספק ממשקים, אותם יש ליישם כדי לשלוט במכשיר המדינה. השלב הראשון הוא חיבור אירועי in עם המקשים של מגן המקלדות. כבר הראיתי כיצד לקרוא את הכפתורים, אך לצורך התממשקותם למכשיר המדינה, יש צורך בהפחתת הכפתורים - אחרת האירועים יועלו מספר פעמים, מה שמוביל להתנהגות בלתי צפויה. הרעיון של הורדת תוכנות אינו חדש. תוכל לעיין בתיעוד של Arduino.
ביישום שלי, אני מזהה קצה נופל (שחרור הכפתור). קראתי את ערך הכפתור, מחכה ל -80 אלפיות השנייה (קיבלתי תוצאות טובות יותר עם 80 במקום 50), שומר את התוצאה וקראתי את הערך החדש. אם oldResult לא היה NONE (לא הודפס) והתוצאה החדשה היא NONE, אני יודע שהכפתור נלחץ בעבר ועכשיו שוחרר. לאחר מכן, אני מעלה את אירוע הקלט בהתאם למכשיר המדינה.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); עיכוב (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); לשבור; } מקרה LEFT: {stateMachine-> getSCI_Button ()-> raise_set (); לשבור; } מקרה למטה: {stateMachine-> getSCI_Button ()-> raise_light (); לשבור; } מקרה UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); לשבור; } מקרה נכון: {stateMachine-> getSCI_Button ()-> raise_onoff (); לשבור; } ברירת מחדל: {הפסקה; }}}}
שלב 5: חיבור דברים ביחד
התוכנית הראשית משתמשת בשלושה חלקים:
- מכונת המדינה
- טיימר
- מטפל לתצוגה (הדפסת lcd אופיינית (…))
DigitalWatch* stateMachine = DigitalWatch חדש (); CPPTimerInterface* timer_sct = חדש CPPTimerInterface (); DisplayHandler* displayHandler = DisplayHandler חדש ();
מכונת המדינה משתמשת במטפל תצוגה וקיבלה טיימר, אשר יעודכן כדי לשלוט באירועים המתוזמנים. לאחר מכן, מכונת המדינה מאתחלת ונכנסת.
הגדרת void () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }הלולאה עושה שלושה דברים:
- העלה אירועי קלט
- חשב את הזמן שחלף ועדכן את הטיימר
- התקשר למכשיר המדינה
long_time_time = 0; long last_cycle_time = 0; לולאת void () {raiseEvents (); שעון_אחרון_זמן = זמן_זמן; current_time = מיליס (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
שלב 6: קבל את הדוגמה
זהו זה. כנראה שלא ציינתי כל פרט ביישום, אך תוכל להציץ בדוגמה או להשאיר הערה.
הוסף את הדוגמה ל- IDE פועל עם: קובץ -> חדש -> דוגמה -> דוגמאות ל- YAKINDU Statechart -> הבא -> Arduino -שעון דיגיטלי (C ++)
> אתה יכול להוריד את ה- IDE כאן <<
אתה יכול להתחיל בניסיון של 30 יום. לאחר מכן, עליך לקבל רישיון, שהוא בחינם לשימוש לא מסחרי!
מוּמלָץ:
כיצד להכין שעון אנלוגי ושעון דיגיטלי באמצעות רצועת לד באמצעות ארדואינו: 3 שלבים
כיצד להכין שעון אנלוגי ושעון דיגיטלי באמצעות רצועת לד באמצעות Arduino: היום נכין שעון אנלוגי & שעון דיגיטלי עם רצועת Led ומודול MAX7219 Dot עם Arduino. זה יתקן את הזמן עם אזור הזמן המקומי. השעון האנלוגי יכול להשתמש בפס LED ארוך יותר, כך שניתן לתלות אותו על הקיר כדי להפוך לאמנות עולם
שעון דיגיטלי של Arduino באמצעות DS1302: 4 שלבים
שעון דיגיטלי של Arduino באמצעות DS1302: מבוא שלום חבר'ה, אני מקווה שכולכם מסתדרים מצוין. זה הולך להיות פרויקט קצר ופשוט אודות יצירת שעון דיגיטלי באמצעות Arduino. בפרויקט זה נכין שעון דיגיטלי בעזרת Arduino ורשם משמרות. זֶה
מכשיר סופי של מצב MSP430: 6 שלבים
Finite State Machine ב- MSP430: אני הולך להראות לכם כיצד לתכנת לוח שיגור MSP430G2 עם מכונות Finite State (FSM) באמצעות YAKINDU Statechart Tools ישירות בסטודיו Composer Code Composer של Texas. הדרכה זו מכילה שישה שלבים: התקנת כלי סטטרטים של YAKINDU כ
שעון דיגיטלי באמצעות תצוגת Arduino ו- Led Dot Matrix: 6 שלבים
שעון דיגיטלי באמצעות תצוגת Arduino ו- Led Dot Matrix: כיום, יצרנים, מפתחים מעדיפים את Arduino לפיתוח מהיר של אב טיפוס של פרויקטים. Arduino היא פלטפורמת אלקטרוניקה בעלת קוד פתוח המבוססת על חומרה ותוכנה נוחים לשימוש. Arduino יש קהילת משתמשים טובה מאוד. בפרויקט זה
שעון דיגיטלי פשוט באמצעות Arduino Nano & DS1307: 4 שלבים
שעון דיגיטלי פשוט באמצעות Arduino Nano & DS1307: במאמר זה אראה לך הדרכה להכנת שעון דיגיטלי באמצעות Arduino. לוח Arduino בו אני משתמש הוא Arduino Nano V3, DS1307 כספק נתוני זמן, MAX7219 7 פלח כ- צפה בתצוגה. לפני הכניסה להדרכה, אני ממליץ ש