כדי שכל פרויקט יתעורר בחיים, עלינו להשתמש בחיישנים. חיישנים משמשים כעיניים ואוזניים לכל היישום המשובץ, זה עוזר למיקרו-בקר הדיגיטלי להבין מה קורה בפועל בעולם האנלוגי האמיתי הזה. במדריך זה נלמד כיצד לממשק חיישן קולי HC-SR04 עם מיקרו-בקר PIC.
ה- HC-SR04 הוא חיישן אולטראסוני שניתן להשתמש בו למדידת מרחק בין 2 ס"מ ל 450 ס"מ (תיאורטית). חיישן זה הוכיח את עצמו כראוי על ידי השתלבות בפרויקטים רבים הכוללים איתור מכשולים, מדידת מרחק, מיפוי סביבה וכו '. בסוף מאמר זה תוכלו ללמוד כיצד עובד חיישן זה וכיצד לממשק אותו עם מיקרו-בקר PIC16F877A למדידת המרחק והתצוגה. אותו על גבי מסך ה- LCD. נשמע מעניין נכון !! אז בואו נתחיל…
חומרים נדרשים:
- PIC16F877A MCU עם הגדרת תכנות
- תצוגת LCD 16 * 2
- חיישן קולי (HC-SR04)
- חוטי חיבור
כיצד עובד חיישן קולי?
לפני שנמשיך הלאה, עלינו לדעת כיצד עובד חיישן קולי כדי שנוכל להבין את ההדרכה הזו הרבה יותר טוב. החיישן הקולי המשמש בפרויקט זה מוצג להלן.
כפי שאתה יכול לראות יש לו שתי עיניים מעגליות כמו השלכות וארבע סיכות שיוצאות ממנו. שתי התחזיות דומות לעין הן משדר ומקלט הגל האולטראסוני (להלן נקרא גל ארה"ב). המשדר פולט גל אמריקאי בתדר של 40 הרץ, גל זה עובר באוויר ומשתקף חזרה כאשר הוא חש אובייקט. הגלים החוזרים נצפים על ידי המקלט. כעת אנו יודעים את הזמן שלוקח הגל הזה להשתקף ולחזור ומהירות הגל האמריקני היא גם אוניברסאלית (3400 ס"מ לשנייה). באמצעות מידע זה ונוסחאות התיכון שלהלן אנו יכולים לחשב את המרחק המכוסה.
מרחק = מהירות × זמן
כעת, כשאנו יודעים כיצד עובד חיישן אמריקאי, תן לנו כיצד ניתן להתממשק אליו לכל MCU / מעבד באמצעות ארבעת הפינים. ארבעת הפינים האלה הם Vcc, טריגר, הד וקרקע בהתאמה. המודול עובד על + 5 וולט ומכאן שהספק ה- Vcc וסיכה הקרקעית משמשים להפעלת המודול. שני הסיכות האחרות הן סיכות הקלט / פלט באמצעותן אנו מתקשרים ל- MCU שלנו. סיכת ההדק צריכה להיות מוצהרת כמו סיכת פלט ועשתה גבוהים עבור 10uS, זו תשדר גל ארה"ב לאוויר כמו 8 פרץ סוניק מחזור. לאחר שנצפה הגל, סיכת ההד תגיע גבוה למשך פרק הזמן המדויק שנלקח על ידי הגל האמריקני כדי לחזור למודול החיישן. מכאן שסיכת הד זו יוכרז כקלטוטיימר ישמש למדידת כמה זמן הסיכה הייתה גבוהה. ניתן להבין זאת עוד על ידי תרשים התזמון שלהלן.
מקווה שהגעתם לדרך סתמית לממשק את החיישן הזה ל- PIC. אנו נשתמש במודול הטיימר ובמודול ה- LCD במדריך זה ואני מניח שאתה מכיר את שניהם, אם לא אנא חזור למדריך המתאים להלן מכיוון שאדלג על רוב המידע הקשור אליו.
- ממשק LCD עם מיקרו-בקר PIC
- הבנת טיימרים במיקרו-בקר PIC
תרשים מעגל:
תרשים המעגל השלם לממשק חיישן קולי עם PIC16F877A מוצג להלן:
כפי שמוצג, המעגל כולל לא יותר מאשר תצוגת LCD והחיישן האולטראסוני עצמו. החיישן האמריקאי יכול להיות מופעל על ידי + 5 וולט ומכאן שהוא מופעל ישירות על ידי ווסת המתח 7805. לחיישן יש פין פלט אחד (פין טריגר) המחובר לסיכה 34 (RB1) וסיכת הכניסה (סיכת הד) מחוברת לסיכה 35 (RB2). חיבור הסיכה המלא מתואר בטבלה שלהלן.
S. לא: |
מספר סיכה של PIC |
שם סיכה |
מחובר ל |
1 |
21 |
RD2 |
RS של LCD |
2 |
22 |
RD3 |
E של LCD |
3 |
27 |
RD4 |
D4 של LCD |
4 |
28 |
RD5 |
D5 של LCD |
5 |
29 |
RD6 |
D6 של LCD |
6 |
30 |
RD7 |
D7 של LCD |
7 |
34 |
RB1 |
טריגר של ארה"ב |
8 |
35 |
RB2 |
הד של ארה"ב |
תכנות את מיקרו בקר ה- PIC שלך:
התוכנית המלאה להדרכה זו ניתנת בסוף עמוד זה, בהמשך הסברתי את הקוד לנתחים מלאים קטנים להבנתך. כאמור קודם התוכנית כוללת את הרעיון של ממשק LCD וטיימר שלא יוסבר בפירוט במדריך זה מאחר שכבר כיסינו אותם בהדרכות הקודמות.
בפנים, את הפונקציה העיקרית אנו מתחילים באתחול סיכות ה- IO והרשמים האחרים כרגיל. אנו מגדירים את סיכות ה- IO עבור חיישן LCD ו- US וגם יוזמים את רישום ה- Timer 1 על ידי הגדרתו לעבודה על 1: 4 טרום-סקלר ושימוש בשעון פנימי (Fosc / 4)
TRISD = 0x00; // PORTD הוכרז כפלט לממשק LCD TRISB0 = 1; // הגדר את סיכת RB0 כקלט לשימוש כסיכת הפסקה TRISB1 = 0; // סיכת הדק של חיישן ארה"ב נשלחת כסיכת פלט TRISB2 = 1; // סיכת הד של חיישן ארה"ב מוגדרת כסיכת כניסה TRISB3 = 0; // RB3 הוא פין פלט עבור LED T1CON = 0x20; // 4 קדם-סקלרי ושעון פנימי
טיימר 1 הוא טיימר של 16 סיביות המשמש ב- PIC16F877A, הרישום T1CON שולט בפרמטרים של מודול הטיימר והתוצאה תישמר ב- TMR1H וב- TMR1L מכיוון שהיא תוצאה של 16 סיביות 8 הראשונים יאוחסנו ב- TMR1H וה- 8 הבא ב- TMR1L. ניתן להפעיל או לכבות את הטיימר באמצעות TMR1ON = 0 ו- TMR1ON = 1 בהתאמה.
כעת, הטיימר מוכן לשימוש, אך עלינו לשלוח את הגלים האמריקניים אל מחוץ לחיישן, לשם כך עלינו לשמור על סיכת הדק גבוהה למשך 10uS, זה נעשה על ידי הקוד הבא.
טריגר = 1; __השהיית_ (10); טריגר = 0;
כפי שמוצג בתרשים התזמון לעיל, סיכת ההד תישאר נמוכה עד שהגל יחזור בחזרה ואז תישאר גבוהה ותישאר גבוהה בזמן המדויק שנדרש לגלים לחזור חזרה. זמן זה צריך להימדד על ידי מודול טיימר 1, אותו ניתן לעשות על ידי השורה הבאה
ואילו (הד == 0); TMR1ON = 1; ואילו (הד == 1); TMR1ON = 0;
לאחר שנמדד הזמן הערך המתקבל יישמר ברשומות TMR1H ו- TMR1L, יש לאסוף את הרישומים הללו כדי לאסוף כדי לקבל את הערך של 16 סיביות. זה נעשה באמצעות השורה למטה
time_taken = (TMR1L - (TMR1H << 8));
זמן_זמן זה יהיה בתים טופס, כדי לקבל את ערך הזמן בפועל שיש לנו להשתמש בנוסחה שלהלן.
זמן = (ערך רישום של 16 סיביות) * (1 / שעון פנימי) * (קנה מידה מוקדם) שעון פנימי = Fosc / 4 איפה שבמקרה שלנו, Fosc = 20000000Mhz וקנה מידה מראש = 4 מכאן הערך של השעון הפנימי יהיה 5000000Mhz וערך הזמן יהיה זמן = (ערך רישום של 16 סיביות) * (1/5000000) * (4) = (ערך רישום של 16 סיביות) * (4/5000000) = (ערך רישום של 16 סיביות) * 0.0000008 שניות (OR) זמן = (ערך רישום של 16 סיביות) * 0.8 מיקרו שניות
בתוכנית שלנו הערך של הרישום של 16 סיביות נשמר במשתנה time_taken ולכן השורה שלמטה משמשת לחישוב time_taken במיקרו שניות
time_taken = time_taken * 0.8;
בשלב הבא עלינו למצוא כיצד לחשב את המרחק. כידוע מרחק = מהירות * זמן. אך כאן יש לחלק את התוצאה ל- 2 מכיוון שהגל מכסה את מרחק השידור וגם את מרחק הקבלה. המהירות שלנו מנפנפת (קול) היא 34000 ס"מ לשנייה.
מרחק = (מהירות * זמן) / 2 = (34000 * (ערך רישום של 16 סיביות) * 0.0000008) / 2 מרחק = (0.0272 * ערך רישום של 16 סיביות) / 2
אז ניתן לחשב את המרחק בסנטימטרים כמו להלן:
מרחק = (0.0272 * זמן לקח) / 2;
לאחר חישוב ערך המרחק והזמן שנדרש פשוט עלינו להציג אותם על גבי מסך ה- LCD.
מדידת מרחק באמצעות PIC וחיישן קולי:
לאחר ביצוע החיבורים והעלאת הקוד, הגדרת הניסוי שלך אמורה להיראות ככזו המוצגת בתמונה למטה.
לוח ה- PIC Perf, המוצג בתמונה זו, נוצר עבור סדרת ההדרכות שלנו ב- PIC, בה למדנו כיצד להשתמש במיקרו-בקר PIC. כדאי לחזור לאותם מדריכי PIC Microcontroller באמצעות MPLABX ו- XC8 אם אינך יודע כיצד לצרוב תוכנית באמצעות פיקיט 3, מכיוון שאדלג על כל המידע הבסיסי הזה.
כעת הניח אובייקט לפני החיישן והוא אמור להציג עד כמה האובייקט נמצא רחוק מהחיישן. ניתן גם להבחין בזמן הנדרש המוצג במיקרו שניות לשידור הגל וחזרה חזרה.
אתה יכול להזיז את האובייקט במרחק המועדף עליך ולבדוק את הערך שמוצג על גבי LCD. הצלחתי למדוד מרחק מ -2 ס"מ ל -350 ס"מ עם דיוק של 0.5 ס"מ. זו תוצאה מספקת למדי! מקווה שנהנית מההדרכה ולמדת להכין משהו בעצמך. אם יש לך ספקות שחרר אותם בסעיף ההערות למטה או השתמש בפורומים.
בדוק גם ממשק של חיישן אולטרה סאונד עם מיקרו-בקרים אחרים:
- מדידת מרחק מבוססת חיישנים וקולי Arduino
- מדוד מרחק באמצעות פטל פי וחיישן קולי HCSR04
- מדידת מרחק באמצעות HC-SR04 ומיקרו בקר AVR