כיום מונים דיגיטליים מחליפים מונים אנלוגיים בכל מגזר בין אם מד החשמל שלו או מד המחירים שלו. הסיבה העיקרית לכך היא מטרים אנלוגיים שיש להם חלקים מכניים הנוטים להתבלות כאשר משתמשים בהם זמן רב והם אינם מדויקים כמו מטרים דיגיטליים.
דוגמא טובה לכך היא מד מהירות ומד מרחק אנלוגי המשמשים באופנועים ישנים למדידת מהירות ומרחק נסיעה. יש להם חלקים מיוחדים הנקראים פינויון וסידור מתלה בהם משמש כבל לסיבוב סיכת מד המהירות כאשר מסובבים את הגלגל. זה יתבלה בעת שימוש לתקופה ארוכה וגם זקוק להחלפה ותחזוקה.
במונה דיגיטלי, במקום להשתמש בחלקים מכניים, משתמשים בחיישנים מסוימים כמו מפריע אופטי או חיישן אולם לחישוב המהירות והמרחק. זה מדויק יותר מהמונים האנלוגיים ואינו דורש כל תחזוקה לתקופה ארוכה. בנינו בעבר פרויקטים רבים של מד מהירות דיגיטלי באמצעות חיישנים שונים:
- מד מהירות DIY באמצעות Arduino ואפליקציית Android לעיבוד
- מד מהירות דיגיטלי ומעגל מד מרחק באמצעות מיקרו בקר PIC
- מדידת מהירות, מרחק וזווית עבור רובוטים ניידים באמצעות חיישן LM393 (H206)
היום, במדריך זה נכין אב-טיפוס של מד מונית דיגיטלי באמצעות ארדואינו. פרויקט זה מחשב את המהירות והמרחק שעובר גלגל המונית ומציג אותו ברציפות על צג LCD בגודל 16x2. ועל סמך מרחק הנסיעה הוא מייצר סכום מחיר כאשר אנו לוחצים על כפתור הלחיצה.
התמונה למטה מציגה את ההתקנה המלאה של פרויקט מוניות דיגיטליות
לאב-טיפוס זה יש שלדת מכוניות RC עם מודול חיישן מהירות וגלגל מקודד המחובר למנוע. לאחר מדידת המהירות, אנו יכולים למדוד את מרחק הנסיעה ולמצוא את ערך סכום הנסיעה על ידי לחיצה על כפתור. אנו יכולים לקבוע את מהירות הגלגל באמצעות פוטנציומטר. למידע נוסף על השימוש במודול חיישן מהירות LM-393 עם Arduino, עקוב אחר הקישור. בואו נראה הקדמה קצרה של מודול חיישן המהירות.
מודול חיישן מהירות אופטי LM-393 מחורץ אינפרא אדום
זהו מודול מסוג חריץ שיכול לשמש למדידת מהירות הסיבוב של גלגלי המקודד. מודול חיישן מהירות זה פועל על בסיס מפריע אופטי מסוג חריץ המכונה גם חיישן מקור אופטי. מודול זה דורש מתח של 3.3 וולט עד 5 וולט ומייצר פלט דיגיטלי. כך שניתן להתממשק עם כל מיקרו-בקר.
חיישן האור האינפרא-אדום מורכב ממקור אור (IR-LED) וחיישן פוטו טרנזיסטור. שניהם ממוקמים עם פער קטן ביניהם. כאשר אובייקט ממוקם בין הפער של נורית ה- IR לפוטו-טרנזיסטור הוא יפריע את קרן האור ויגרום להפסקת העברת הזרם.
כך עם חיישן זה משתמשים בדיסק מחורץ (Encoder Wheel) שניתן לחבר אותו למנוע וכאשר הגלגל מסתובב עם המנוע הוא קוטע את קרן האור בין נורית ה- IR לפוטו-טרנזיסטור שהופכת את הפלט לכיבוי וכיבוי (יצירת פולסים).
כך הוא מייצר פלט HIGH כאשר יש הפרעה בין המקור לחיישן (כאשר כל אובייקט ממוקם בין לבין) ומייצר פלט LOW כאשר אין אובייקט שמוצב. במודול יש לנו נורית LED המציינת את ההפרעה האופטית שנגרמה.
מודול זה מגיע עם LM393 Comparator IC המשמש לייצור אותות HIGH ו- LOW מדויקים ב- OUTPUT. לפיכך, מודול זה נקרא לפעמים כחיישן מהירות LM393.
מדידת מהירות ומרחק נסיעה לחישוב מחיר
כדי למדוד את מהירות הסיבוב עלינו לדעת את מספר החריצים הקיימים בגלגל המקודד. יש לי גלגל מקודד עם 20 חריצים. כאשר הם מסתובבים סיבוב אחד שלם יש לנו 20 פעימות בפלט. אז כדי לחשב מהירות אנו זקוקים למספר פעימות המופקות בשנייה.
לדוגמה
אם יש 40 פעימות בשנייה אחת, אז
מהירות = נו. של פעימות / מספר חריצים = 40/20 = 2RPS (מהפכה לשנייה)
לחישוב מהירות בסל"ד (מהפכות לדקה) הכפל עם 60.
מהירות בסל"ד = 2 X 60 = 120 סל"ד (מהפכות לדקה)
מדידת מרחק
מדידת המרחק שעברה ההגה כל כך פשוטה. לפני חישוב המרחק, יש לדעת את היקף הגלגל.
היקף הגלגל = π * d
כאשר d הוא קוטר הגלגל.
הערך של π הוא 3.14.
יש לי גלגל (גלגל מכונית RC) בקוטר 6.60 ס"מ כך שההיקף הוא (20.7 ס"מ).
אז כדי לחשב את המרחק שעבר, פשוט הכפל את מספר הפולסים שהתגלה עם ההיקף.
מרחק נסיעה = היקף הגלגל x (מספר פעימות / מספר חריצים)
אז כאשר גלגל של היקף 20.7 ס"מ לוקח 20 פעימות שהוא סיבוב אחד של גלגל המקודד, המרחק שעבר הגלגל מחושב על ידי
מרחק נסיעה = 20.7 x (20/20) = 20.7 ס"מ
על מנת לחשב את המרחק במטר חלקו את המרחק בערך ס"מ ב- 100.
הערה: זהו גלגל מכונית RC קטן, בזמן אמת למכוניות יש גלגלים גדולים יותר מכך. אז אני מניח שהיקף הגלגל יהיה 230 ס"מ במדריך זה.
חישוב התעריף על פי מרחק נסיעה
כדי לקבל את סכום הנסיעה הכולל, הכפל את המרחק שעבר עם מחיר הנסיעה (כמות / מטר).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
לאחר מכן צרף שתי הפרעות חיצוניות. הפרעה ראשונה הופכת את סיכת הארדואינו 2 לסיכת הפסקה וקוראת ל- ISR (ספירה) כאשר מתגלה סיכה (LOW TO HIGH) בסיכה 2. סיכה זו 2 מחוברת לפלט D0 של מודול חיישן המהירות.
והשני הופך את סיכת הארדואינו 3 לסיכת הפסקה וקוראת ל- ISR (generatefare) כאשר מתגלה HIGH ב- pin3. סיכה זו מחוברת ללחצן הלחץ בעזרת נגיעה נפתחת.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. הבא בואו נראה אודות ה- ISR שהשתמשנו כאן:
ISR1- ספירת () ISR נקרא כאשר קורה RISING (LOW TO HIGH) בסיכה 2 (מחובר לחיישן מהירות).
ספירת חללים () // ISR לספירות מחיישן המהירות { counter ++; // להגדיל את ערך המונה בסיבוב אחד ++; // הגדל את ערך הסיבוב בעיכוב אחד (10); }
ISR2- timerIsr () ISR נקרא בכל שנייה ומבצע את השורות שנמצאות בתוך ה- ISR.
חלל timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); טיימר1.detachInterrupt (); lcd.clear (); מהירות צפה = (מונה / 20.0) * 60.0; סיבובי צף = 230 * (סיבוב / 20); rotationinm = סיבובים / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("מהירות (RPM):"); lcd.print (מהירות); מונה = 0; int analogip = analogRead (A0); int motorspeed = מפה (אנלוגיפ, 0,1023,0,255); analogWrite (5, motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
פונקציה זו מכילה את השורות שמנתקות תחילה את ה- Timer1 ו- Interrupt pin2 מכיוון שיש לנו הצהרות הדפסה LCD בתוך ה- ISR.
לחישוב SPEED בסל"ד אנו משתמשים בהמשך לקוד שבו 20.0 הוא מספר החריצים שנקבעו מראש בגלגל המקודד.
מהירות צפה = (מונה / 20.0) * 60.0;
ולחישוב המרחק מתחת לקוד משמש:
סיבובי צף = 230 * (סיבוב / 20);
כאן ההנחה של הגלגל היא כ 230 ס"מ (מכיוון שזה נורמלי עבור מכוניות בזמן אמת)
הבא להמיר את המרחק ב- m על ידי חלוקת המרחק ב- 100
rotationinm = סיבובים / 100;
לאחר מכן אנו מציגים את SPEED ו- DISTANCE בתצוגת LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("מהירות (RPM):"); lcd.print (מהירות);
חשוב: עלינו לאפס את המונה ל- 0 מכיוון שאנחנו צריכים לאתר מספר פלוסים לשנייה ולכן אנו משתמשים בשורה זו
מונה = 0;
לאחר מכן קרא את הסיכה האנלוגית A0 והמיר אותה לערך דיגיטלי (0 עד 1023) ומפה את הערכים האלה ל- 0-255 עבור פלט PWM (הגדרת מהירות המנוע) ולבסוף כתוב את ערכי ה- PWM באמצעות פונקציית AnalogWrite המחוברת ל- ULN2003 מנוע IC.
int analogip = analogRead (A0); int motorspeed = מפה (אנלוגיפ, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: generatefare () ISR משמש להפקת סכום התעריף בהתבסס על מרחק הנסיעה. ISR זה נקרא כאשר מזוהה סיכה 3 היא HIGH (כאשר לוחצים על כפתור). פונקציה זו מנתקת את ההפרעה בסיכה 2 והטיימר נקטעת ואז מנקה את ה- LCD.
בטל generatefare () { detachInterrupt (digitalPinToInterrupt (2)); הצמד בשעה 2 טיימר 1. detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); רופי צף = rotationinm * 5; lcd.print (רופי); lcd.setCursor (0,1); lcd.print ("Rs 5 למטר"); }
לאחר שהמרחק הזה הוכפל עם 5 (השתמשתי ב- 5 לשיעור INR 5 למטר). אתה יכול לשנות בהתאם לרצונך.
רופי צף = rotationinm * 5;
לאחר חישוב ערך הכמות הציגו אותו על צג ה- LCD המחובר לארדואינו.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (רופי); lcd.setCursor (0,1); lcd.print ("Rs 5 למטר");
הקוד וההדגמה המלאים מופיע להלן.
תוכל לשפר עוד יותר את אב הטיפוס הזה על ידי הגברת הדיוק, החוסן והוספת תכונות נוספות כמו אפליקציית אנדרואיד, תשלום דיגיטלי וכו 'ולפתח אותו כמוצר.