תוכן עניינים:

אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU: 5 שלבים
אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU: 5 שלבים

וִידֵאוֹ: אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU: 5 שלבים

וִידֵאוֹ: אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU: 5 שלבים
וִידֵאוֹ: הנדסת אלקטרוניקה מחשבים 2023|ארדואינו פרויקטים|רובוט/רכב חשמלי חצי אוטונומי נשלט ע"י שלט אינפרא אדום 2024, יוני
Anonim
אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU
אינפרא אדום רובוט נשלט באמצעות רובוט באמצעות AVR (ATMEGA32) MCU

ה- PROJECT הנוכחי מתאר עיצוב ויישום של RoboCar בשלט רחוק אינפרא אדום (IR) שניתן להשתמש בו עבור יישומי בקרה אוטומטיים לא מאויישים שונים. תכננתי RoboCar בשלט רחוק (תנועת שמאל-ימין/קדמי-אחורי). המערכת כולה מבוססת על מיקרו -בקר (Atmega32) שהופך את מערכת הבקרה לחכמה וקלה יותר לשינויים עבור יישומים אחרים. הוא מאפשר למשתמש להפעיל או לשלוט ב- RoboCar ולהפעיל את מתג החשמל מרחק של כ -5 מטרים משם.

מילות מפתח: מפענח IR, מיקרו -בקר AVR (Atmega32), שלט רחוק לטלוויזיה, תקשורת אלחוטית

_

שלב 1: תקשורת תוך -אדומה

תקשורת תוך אדומה
תקשורת תוך אדומה

עקרון תקשורת IR:

א) שידור IR

משדר של LED IR בתוך המעגל שלו, הפולט אור אינפרא אדום על כל דופק חשמלי שניתן לו. דופק זה נוצר כאשר לוחצים על כפתור בשלט הרחוק, ובכך משלימים את המעגל ומספקים הטיה לנורית ה- LED. הנורית בהיותה מוטה פולטת אור באורך הגל של 940nm כסדרת פולסים, המתאימה ללחצן שנלחץ. אולם מכיוון שיחד עם ה- IR LED מקורות רבים אחרים של אור אינפרא אדום כמונו בני אדם, נורות, שמש וכו ', ניתן להפריע למידע המועבר. פתרון לבעיה זו הוא באמצעות אפנון. האות המועבר מאופנן באמצעות תדר נשא של 38 קילוהרץ (או כל תדר אחר בין 36 עד 46 קילוהרץ). נורית ה- IR נועדה להתנודד בתדר זה למשך זמן הדופק. המידע או אותות האור מאופננים ברוחב הדופק והם כלולים בתדר 38 קילוהרץ. שידור אינפרא אדום מתייחס לאנרגיה באזור ספקטרום הקרינה האלקטרומגנטית באורכי גל ארוכים מאלה של אור גלוי, אך קצרה יותר מאלו של גלי רדיו. בהתאם לכך, תדרי האינפרא אדום גבוהים יותר מאלו של מיקרוגל, אך נמוכים מאלו של האור הנראה. מדענים מחלקים את ספקטרום הקרינה האינפרא אדומה לשלושה אזורים. אורכי הגל מצוינים במיקרון (מסומן µ, כאשר 1 µ = 10-6 מטר) או בננומטרים (nm מקוצר, כאשר 1 nm = 10-9 מטר = 0.001 5). רצועת ה- IR הקרובה מכילה אנרגיה בטווח אורכי הגל הקרובים ביותר לגלוי, מ -0.750 עד 1.300 5 (750 עד 1300 ננומטר). רצועת ה- IR הבינונית (נקראת גם להקת ה- IR האמצעית) מורכבת מאנרגיה בטווח של 1.300 עד 3.000 5 (1300 עד 3000 ננומטר). פס ה- IR הרחוק משתרע מ- 2.000 עד 14.000 5 (3000 nm עד 1.4000 x 104nm).

ב) קבלת IR

המקלט מורכב מגלאי צילום אשר מפתח אות חשמלי פלט כאשר אור מתרחש עליו. תפוקת הגלאי מסוננת באמצעות מסנן פס צר אשר מבטל את כל התדרים מתחת או מעל תדר המוביל (38 KHz במקרה זה). הפלט המסונן ניתן לאחר מכן למכשיר המתאים כמו מיקרו -בקר או מעבד השולט על התקנים כמו מחשב או רובוט. ניתן לחבר את הפלט מהמסננים לאוסילוסקופ כדי לקרוא את הפולסים.

יישומים של IR:

אינפרא אדום משמש במגוון יישומי תקשורת, ניטור ובקרה אלחוטיים. הנה כמה דוגמאות:

· קופסאות שלט רחוק לבידור ביתי

· אלחוטי (רשתות מקומיות)

· קישורים בין מחשבי מחברת ומחשבים שולחניים

· מודם אלחוטי

· גלאי חדירה

· גלאי תנועה

· חיישני אש

· מערכות ראיית לילה

· ציוד אבחון רפואי

· מערכות הכוונת טילים

· מכשירי ניטור גיאולוגיים

העברת נתוני IR ממכשיר אחד למשנהו מכונה לעתים קורנת.

שלב 2: חיישן IR & פרוטוקול פרוטוקול NEC

חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC
חיישן IR & פרוטוקול פרוטוקול NEC

חיישני IR (איור 1)

TSOP1738, SFH-5110-38 (38kHz)

חיישני TSOP תכונות:

  • מגבר הקדם וגלאי התמונות שניהם באריזה אחת
  • מסנן פנימי לתדר PCM
  • מיגון משופר מפני הפרעות בשדה חשמלי
  • תאימות TTL ו- CMOS
  • תפוקה פעילה נמוכה צריכת חשמל נמוכה
  • חסינות גבוהה מפני אור הסביבה
  • אפשר העברת נתונים רציפה

פרוטוקול NEC:

פרוטוקול שידור ה- NEC IR משתמש בקידוד מרחק הדופק של סיביות ההודעה. אורך כל דופק הוא 562.5 מיקרון, בתדר נשא של 38kHz (26.3µs). סיביות לוגיות מועברות כדלקמן (איור 2):

  • '0' לוגי - פרץ דופק של 562.5µs ואחריו שטח של 562.5µs, עם זמן שידור כולל של 1.125ms
  • '1' לוגי - פרץ דופק של 562.5µs ואחריו מרחב של 1.6875ms עם זמן שידור כולל של 2.25ms

דופק המוביל כולל 21 מחזורים במהירות 38kHz. הפולסים בדרך כלל בעלי יחס סימון/מרווח של 1: 4, כדי להפחית את הצריכה הנוכחית:

(איור 3)

כל רצף קוד מתחיל בדופק 9ms, המכונה דופק AGC. לאחר מכן השתקה של 4.5ms:

(איור 4)

הנתונים מורכבים אז מ- 32 סיביות, כתובת של 16 סיביות ואחריה פקודה של 16 סיביות, המוצגות בסדר העברתן (משמאל לימין):

(איור 5)

ארבעת הבייטים של סיביות הנתונים נשלחים כל אחד מהסיביות הפחות משמעותיות תחילה. איור 1 ממחיש את הפורמט של מסגרת שידור NEC IR, עבור כתובת של 00h (00000000b) ופקודה של ADh (10101101b).

בסך הכל 67.5ms נדרשות לשדר מסגרת הודעה. הוא צריך 27ms כדי להעביר את 16 סיביות הכתובת (כתובת + הפוך) ואת 16 סיביות הפקודה (פקודה + הפוך).

(איור 6)

הזמן הנדרש להעברת המסגרת:

16 סיביות עבור הכתובת (כתובת + הפוך) דורשות 27ms לשדר זמן. ו -16 סיביות לפקודה (פקודה + הפוך) גם דורשות 27ms לשדר זמן. כי (כתובת + כתובת הפוכה) או (פקודה + פקודה הפוכה) תמיד יכילו 8 '0 ו -8' 1 כך (8 * 1.125 ms) + (8 * 2.25 ms) == 27 ms. על פי הזמן הכולל הנדרש להעברת המסגרת הוא (9ms +4.5ms +27ms +27ms) = 67.5 ms.

קודים חוזרים: אם המפתח בשלט הרחוק נשאר לחוץ, יופק קוד חוזר, בדרך כלל כ -40 שניות לאחר פרץ הדופק שסימן את סיום ההודעה. קוד חוזר ימשיך להישלח במרווחים של 108ms עד שהמפתח ישוחרר לבסוף. הקוד החוזר כולל את הדברים הבאים, לפי הסדר:

  • התפרצות דופק מובילה של 9 ms
  • שטח של 2.25ms
  • פרץ דופק של 562.5µs לציון סוף החלל (ומכאן סוף הקוד החוזר המועבר).

(איור 7)

חישוב עיכוב (1 ms):

תדר שעון = 11.0592 מגה -הרץ

מחזור מכונה = 12

עיכוב = 1 ms

TimerValue = 65536 - ((עיכוב * ClockFreq)/מחזור מכונה) = 65536 - ((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

שלב 3: בקרת מנועי DC באמצעות L293D

בקרת מנועי DC באמצעות L293D
בקרת מנועי DC באמצעות L293D

מנוע DC

מנוע DC הופך אנרגיה חשמלית לאנרגיה מכנית שניתן להשתמש בה לביצוע עבודות שימושיות רבות. הוא יכול לייצר תנועה מכנית כמו Go Forward/Backword של ה- RoboCar שלי. מנועי DC מגיעים בדירוגים שונים כמו 6V ו- 12V. יש לו שני חוטים או סיכות. אנו יכולים להפוך את כיוון הסיבוב על ידי היפוך קוטביות הקלט.

כאן אנו מעדיפים את L293D מכיוון שדירוג של 600mA טוב להנעת מנועי DC קטנים ודיודות הגנה כלולות במעגל עצמו. התיאור של כל סיכה הוא כדלקמן: אפשר סיכות: אלה סיכות מספר. 1 וסיכה מספר. 9. סיכה מספר. 1 משמש לאפשר נהג חצי H ו- 2. (גשר H בצד שמאל). סיכה מספר. 9 משמש לאפשר נהג גשר H ו- 3 (גשר H בצד ימין).

הרעיון הוא פשוט, אם אתה רוצה להשתמש בגשר H מסוים עליך לתת היגיון גבוה לסיכות הפעלה מתאימות יחד עם אספקת החשמל למעגל ה- IC. סיכה זו יכולה לשמש גם לשליטה על מהירות המנוע באמצעות טכניקת PWM. VCC1 (פין 16): סיכת אספקת חשמל. חבר אותו לספק 5V. VCC2 (פין 8): ספק כוח למנוע. החל עליו +ve מתח לפי דירוג המנוע. אם אתה רוצה להניע את המנוע שלך ב- 12V, החל 12V על סיכה זו.

אפשר גם להניע את המנוע ישירות על סוללה, פרט לזה המשמש לאספקת חשמל למעגל, פשוט חבר +מסוף ve של אותה סוללה לפין VCC2 והפוך את ה- GND של שתי הסוללות למשותף. (מתח MAX בסיכה זו הוא 36V בהתאם לגליון הנתונים שלו). GND (פינים 4, 5, 12, 13): חבר אותם ל- GND משותף של המעגל. כניסות (פינים 2, 7, 10, 15):

אלה סיכות קלט שדרכן ניתנים אותות בקרה על ידי מיקרו -בקרים או מעגלים/מעגלים אחרים. לדוגמה, אם על סיכה 2 (קלט של נהג חצי H הראשון) אנו נותנים לוגיקה 1 (5V), נקבל מתח השווה ל- VCC2 על סיכת הפלט המתאימה של נהג חצי H הראשון כלומר סיכה מספר. 3. באופן דומה ללוגיקה 0 (0V) על פין 2, מופיע 0V על פין 3. יציאות (פין 3, 6, 11, 14): סיכות יציאות. על פי אות הכניסה מגיע אות הפלט.

תנועות מוטוריות ב

-----------------------------------------------------------------------------------------

…………… עצור: נמוך: נמוך

…… בכיוון השעון: נמוך: גבוה

נגד כיוון השעון: גבוה: נמוך

……………. עצירה: גבוהה: גבוהה

שלב 4: תרשימי מעגלים עבור נהג מנוע וחיישן IR

תרשימי מעגלים לנהג מוטורי וחיישן IR
תרשימי מעגלים לנהג מוטורי וחיישן IR
תרשימי מעגלים לנהג מוטורי וחיישן IR
תרשימי מעגלים לנהג מוטורי וחיישן IR
תרשימי מעגלים לנהג מוטורי וחיישן IR
תרשימי מעגלים לנהג מוטורי וחיישן IR

ATmega32 הוא מיקרו-בקר CMOS 8 סיביות בעלות הספק נמוך המבוסס על AVR משופר RISCarchitecture. על ידי ביצוע הוראות עוצמתיות במחזור שעון אחד, ה- ATmega32 משיג תפוקות המתקרבות ל -1 MIPS לכל מגהרץ המאפשר למעצב המערכת לייעל את צריכת החשמל לעומת מהירות העיבוד.

ליבת ה- AVR משלבת מערך הדרכה עשיר עם 32 אוגרי עבודה למטרות כלליות. כל הרישומים מחוברים ישירות ליחידת הלוגיקה האריתמטית (ALU), ומאפשרים גישה לשני רגיסטרים עצמאיים בהוראה אחת המבוצעת במחזור שעון אחד. הארכיטקטורה המתקבלת יעילה יותר בקוד תוך השגת תפוקות מהירות פי עשרה יותר מבקרי מיקרו CISC רגילים.

ה- ATmega32 מספק את התכונות הבאות:

  • 32 קילו-בייט של זיכרון תכנות פלאש הניתן לתכנות בתוך המערכת עם יכולות קריאה-בעת-כתיבה,
  • 1024 בתים EEPROM, 2K בתים SRAM,
  • 32 קווי I/O למטרות כלליות,
  • 32 פנקסי עבודה למטרות כלליות,
  • ממשק JTAG עבור Boundaryscan,
  • תמיכה ותכנות באגים על שבב, שלושה טיימר/מונים גמישים עם מצבי השוואה, הפרעות פנימיות וחיצוניות, USART בתכנות סידורי, ממשק סידורי דו-חוטי מוכוון בתים, 8 ערוצים,
  • 10 סיביות ADC עם שלב קלט דיפרנציאלי אופציונלי עם רווח לתכנות (חבילת TQFP בלבד),
  • טיימר כלב השמירה הניתן לתכנות עם מתנד פנימי,
  • יציאה טורית SPI ו-
  • שישה מצבי חיסכון בחשמל לבחירת תוכנה.

    • מצב המתנה עוצר את המעבד תוך מתן אפשרות ל- USART,
    • ממשק דו חוטי, ממיר A/D,
    • SRAM,
    • טיימר/מונים,
    • יציאת SPI, ו-
    • להפריע למערכת להמשיך ולתפקד.
    • מצב כיבוי שומר את תוכן הרישום אך מקפיא את המתנד, ומשבית את כל שאר פונקציות השבבים עד להפסקה חיצונית או לאיפוס חומרה הבא.
    • במצב חיסכון בחשמל, הטיימר האסינכרוני ממשיך לפעול, ומאפשר למשתמש לשמור על בסיס טיימר בזמן שאר המכשיר ישן.
    • מצב הפחתת רעש ADC עוצר את המעבד ואת כל מודולי הקלט/פלט למעט טיימר אסינכרוני ו- ADC, כדי למזער את רעשי המעבר במהלך המרות ADC
    • במצב המתנה, מתנד הקריסטל/מהוד פועל כאשר שאר המכשיר ישן. זה מאפשר הפעלה מהירה מאוד בשילוב עם צריכת חשמל נמוכה.
    • במצב המתנה מורחבת, גם המתנד הראשי וגם הטיימר האסינכרוני ממשיכים לפעול.

כל המעגלים הקשורים ניתנים כאן וניתן גם מעגל ראשי (atmega32).

שלב 5: תוכניות Avr

תוכניות Avr
תוכניות Avr
תוכניות Avr
תוכניות Avr

1. עבור "חיישן מרחוק":

#כלול #כלול

#כלול "remote.h"

// גלובאלס תנודתי ללא זמן חתום; // טיימר ראשי, מאחסן זמן ב- 10us, // עודכן על ידי ISR (TIMER0_COMP) תנודתי לא חתימתי Char BitNo; // תפקיד ה- BIT הבא של נגיף ה- BIT התנודתי הבא; // מיקום הבייט הנוכחי

תנודתי ללא סימן IrData [4]; // ארבעת הבייטים של נתוני חבילת Ir // כתובת דו-בתיים 2-בתים נתונים נדיפים שאינם חתומים על IrCmdQ [QMAX]; // הפקודה הסופית התקבלה (מאגר)

תנודתי ללא סימן חתימה PrevCmd; // משמש לחזרה

// משתנים המשמשים להתחלת חזרה רק לאחר לחיצה על מקש לזמן מסוים

נגיף בלתי חתום נדיף חזור על; // 1 = כן 0 = אין תנודתי ללא תווים RCount; // ספירה חוזרת

תנודה נדיפה QFront = -1, QEnd = -1;

נדיב חסר חתימה נדיף; // מצב הכונס

נדיף חסר חתימה אדג '; // קצה ההפרעה [RISING = 1 OR FALLING = 0]

הפסקת נגיף אינטליגנטית בלתי חתומה;

/********************************************** ***** ***** / / ********************************************* *****************************************/

void RemoteInit () {

char i; עבור (i = 0; i <4; i ++) IrData = 0;

עצור = 0; מדינה = IR_VALIDATE_LEAD_HIGH; קצה = 0; חזור על = 0;

// טיימר התקנה 1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // הגדר ערך השוואה

char unsigned GetRemoteCmd (char wait) {uns cm char;

אם (המתן) בעוד (QFront ==-1); אחרת אם (QFront ==-1) החזרה (RC_NONE);

cmd = IrCmdQ [QFront];

אם (QFront == QEnd) QFront = QEnd = -1; אחרת {אם (QFront == (QMAX-1)) QFront = 0; אחרת QFront ++; }

החזר cmd;

}

2. עיקרי ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

בעוד (1) // אינסוף לולאה לחיישן IR פעיל {

cmd = GetRemoteCmd (1);

מתג (cmd) {

מקרה xx: {// BOT זז קדימה // Ch+ btn קדימה ();

לשבור; // שני המנועים בכיוון קדימה

}

………………………………………………….

………………………………………………….

………………………………………………….

ברירת מחדל: PORTC = 0x00; הפסקה; // מנועים שמאל וימין עוצרים}

}

}/*סוף הראשי*/

……………………………………………………………………………………………………………………

// זה דגם בסיסי, אבל אני יכול להשתמש בו במצב PWM.

//……………………………………………..תעשה חיים……………………………………………………//

מוּמלָץ: