במדריך זה אנו הולכים לדון ולעצב מעגל למדידת מרחק. מעגל זה פותח על ידי ממשק חיישן קולי "HC-SR04" עם מיקרו בקר AVR. חיישן זה משתמש בטכניקה הנקראת "ECHO" שהיא דבר שאתה מקבל כאשר הצליל משתקף לאחור לאחר מכה עם משטח.
אנו יודעים שתנודות קול אינן יכולות לחדור דרך מוצקים. אז מה שקורה הוא שכאשר מקור קול מייצר רעידות הם עוברים באוויר במהירות של 220 מטר לשנייה. התנודות הללו כשהן פוגשות את אוזננו אנו מתארות אותן כצליל. כאמור קודם, התנודות הללו אינן יכולות לעבור מוצקות, ולכן כאשר הן פוגעות במשטח כמו קיר, הן משתקפות חזרה באותה מהירות למקור, הנקרא הד.
חיישן קולי "HC-SR04" מספק אות פלט פרופורציונאלי למרחק על בסיס ההד. החיישן כאן מייצר רטט קול בטווח קולי עם מתן ההדק, לאחר מכן הוא ממתין לרטט הקול שיחזור. כעת, בהתבסס על הפרמטרים, מהירות הקול (220m / s) והזמן שנדרש להד להגיע למקור, הוא מספק דופק פלט פרופורציונאלי למרחק.
כפי שמוצג באיור, בהתחלה עלינו ליזום את החיישן למדידת מרחק, כלומר אות לוגי HIGH בסיכת ההדק של החיישן ליותר מ -10 us, לאחר מכן נשלח רטט קול על ידי החיישן, לאחר הד, החיישן מספק אות בפין המוצא שרוחבו פרופורציונאלי למרחק בין מקור למכשול.
מרחק זה מחושב כ- מרחק (בס"מ) = רוחב פלט הדופק (ב- US) / 58.
כאן יש לקחת את רוחב האות בכפולה של us (מיקרו שנייה או 10 ^ -6).
רכיבים נדרשים
חומרה: ATMEGA32, ספק כוח (5 וולט), מתכנת AVR-ISP, JHD_162ALCD (16x2LCD), קבל 1000uF, נגד 10KΩ (2 יח '), חיישן HC-SR04.
תוכנה: Atmel studio 6.1, פרוגיספ או קסם פלאש.
תרשים מעגל והסבר עבודה
כאן אנו משתמשים ב- PORTB כדי להתחבר ליציאת נתונים LCD (D0-D7). מי שלא רוצה לעבוד עם FUSE BITS של ATMEGA32A לא יכול להשתמש ב- PORTC, מכיוון ש- PORTC מכיל סוג מיוחד של תקשורת אשר יכול להשבית רק על ידי שינוי FUSEBITS.
במעגל, אתה מבחין שלקחתי רק שתי סיכות בקרה, זה נותן את הגמישות של הבנה טובה יותר. ביט הניגודיות ו- READ / WRITE לא משמשים לעתים קרובות, כך שניתן לקצר אותם לקרקע. זה מכניס את LCD למצב הניגודיות והקריאה הגבוה ביותר. אנחנו רק צריכים לשלוט בסיכות ENABLE ו- RS כדי לשלוח תווים ונתונים בהתאם.
החיבורים שבוצעו עבור LCD מובאים להלן:
PIN1 או VSS לקרקע
PIN2 או VDD או VCC ל- + 5v כוח
PIN3 או VEE לקרקע (נותן ניגודיות מרבית הטובה ביותר למתחילים)
PIN4 או RS (בחירת רישום) ל- PD6 של uC
PIN5 או RW (קריאה / כתיבה) לקרקע (מכניס את LCD למצב קריאה מקל על התקשורת עבור המשתמש)
PIN6 או E (אפשר) ל- PD5 של uC
PIN7 או D0 עד PB0 של uC
PIN8 או D1 עד PB1 של uC
PIN9 או D2 ל- PB2 של uC
PIN10 או D3 ל- PB3 של uC
PIN11 או D4 ל- PB4 של uC
PIN12 או D5 ל- PB5 של uC
PIN13 או D6 ל- PB6 של uC
PIN14 או D7 ל- PB7 של uC
במעגל אתה יכול לראות שהשתמשנו בתקשורת 8 ביט (D0-D7) אולם זה לא חובה ואנחנו יכולים להשתמש בתקשורת 4 ביט (D4-D7) אבל עם תוכנית תקשורת של 4 ביט הופכת להיות קצת מורכבת. אז כפי שמוצג בטבלה לעיל אנו מחברים 10 פינים של LCD לבקר, בהם 8 פינים הם פינים של נתונים ו -2 פינים לשליטה.
החיישן הקולי הוא מכשיר בעל ארבעה פינים, PIN1- VCC או + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- קרקע. סיכת הדק היא המקום בו אנו נותנים טריגר שיגיד לחיישן למדוד את המרחק. הד הוא פין פלט שבו אנו מקבלים את המרחק בצורה של רוחב הדופק. סיכת ההד כאן מחוברת לבקר כמקור הפסקה חיצוני. אז כדי לקבל את רוחב פלט האות, סיכת ההד של החיישן מחוברת ל- INT0 (הפסקה 0) או PD2.
1. מפעילים את החיישן על ידי משיכת סיכת ההדק כלפי מעלה לפחות ל- 12uS.
2. ברגע שהה עולה גבוה אנו מקבלים הפרעה חיצונית ואנחנו הולכים להפעיל מונה (המאפשר מונה) ב- ISR (Interrupt Service Routine) שמבוצע מיד לאחר הפרעה שהופעלה.
3. ברגע שהההוא ירד שוב נוצרת הפרעה, הפעם אנחנו הולכים לעצור את הדלפק (השבתת הדלפק).
4. אז לדופק גבוה עד נמוך בסיכת הד, התחלנו דלפק ועצרנו אותו. ספירה זו מתעדכנת בזיכרון לקבלת המרחק, מכיוון שיש לנו את רוחב ההד בספירה כעת.
5. אנו הולכים לבצע חישובים נוספים בזיכרון בכדי לקבל את המרחק בס"מ
6. המרחק מוצג בתצוגת LCD בגודל 16x2.
להגדרת התכונות שלעיל נקבע את הרישומים הבאים:
שלושת המרשמים שלעיל נקבעים בהתאם להתקנת העבודה, ואנו נדון בהם בקצרה, כחול (INT0): יש להגדיר סיבית זו גבוהה כדי לאפשר את ההפרעה החיצונית 0, ברגע שהסיכה הזו מוגדרת, אנו חשים את שינויים בהיגיון בסיכה PIND2.
BROWN (ISC00, ISC01): שני סיביות אלה מותאמות לשינוי ההיגיון המתאים ב- PD2, אשר ייחשב כהפרעה.
אז כאמור קודם אנו זקוקים להפסקה כדי להתחיל ספירה ולעצור אותה. אז הגדרנו את ISC00 כאחד ואנחנו מקבלים הפרעה כשיש היגיון LOW to HIGH ב- INT0; הפרעה נוספת כאשר יש היגיון HIGH to LOW.
אדום (CS10): סיבית זו היא פשוט לאפשר ולהשבית דלפק. למרות שזה עובד יחד עם סיביות אחרות CS10, CS12. אנחנו לא מבצעים שום הגדרה מראש כאן, ולכן אנחנו לא צריכים לדאוג לגביהם.
כמה דברים שחשוב לזכור כאן הם:
אנו משתמשים בשעון פנימי של ATMEGA32A שהוא 1MHz. אין הגדרה מוקדמת יותר כאן, אנו לא מבצעים שגרת הפסקת התאמה, ולכן אין הגדרות רישום מורכבות.
ערך הספירה לאחר הספירה נשמר ברישום TCNT1 16bit.
בדוק גם פרויקט זה עם ארדואינו: מדידת מרחק באמצעות ארדואינו
הסבר על תכנות
עבודה של חיישן מדידת מרחק מוסברת שלב אחר שלב בתוכנית C להלן.
# כלול // כותרת כדי לאפשר בקרת זרימת נתונים על פינים # הגדר F_CPU 1000000 // אומר תדר גביש לבקר המצורף # כולל