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

שלט רחוק I2C אינפרא אדום עם הארדואינו: 8 שלבים (עם תמונות)
שלט רחוק I2C אינפרא אדום עם הארדואינו: 8 שלבים (עם תמונות)

וִידֵאוֹ: שלט רחוק I2C אינפרא אדום עם הארדואינו: 8 שלבים (עם תמונות)

וִידֵאוֹ: שלט רחוק I2C אינפרא אדום עם הארדואינו: 8 שלבים (עם תמונות)
וִידֵאוֹ: ארדואינו- פרוייקטונים- פקודות קוליות בעברית להפעלת צרכנים -מנורת לילה כבקשתך 2024, נוֹבֶמבֶּר
Anonim
שלט רחוק אינפרא אדום I2C עם הארדואינו
שלט רחוק אינפרא אדום I2C עם הארדואינו
שלט רחוק אינפרא אדום I2C עם הארדואינו
שלט רחוק אינפרא אדום I2C עם הארדואינו

מבוא זה מפרט כיצד ניתן ליצור שלט אוניברסלי מרחוק באמצעות I2C לממשק.

כמה מוזר אתה אומר, באמצעות מכשיר עבדים I2C?

כן, מכשיר עבדים I2C.

הסיבה לכך היא שהתזמון המדויק של מנות IR הוא די תובעני ואחד שארדואינו טיפוסי יתמודד איתו אם הוא כבר מבצע משימות רבות במקביל. עדיף לחלק את עומס המחשוב על ידי הקצאת פעילויות אינטנסיביות לתזמון למעבדים ייעודיים בכל הזדמנות אפשרית (עדיף שתעשה זאת בחומרה). בהתחשב בכך ש- I2C היא שיטת תקשורת מתועדת וחזקה בין ICs, בחרתי בזה כממשק.

מבוא

כפי שצוין לעיל מתואר הוראה זו מתארת כיצד לשלוט במכשירי חשמל ביתיים כגון טלוויזיה, נגן DVD ולוויין וכו 'באמצעות ספריית IRremote בארדואינו.

הוא מסתיים בדוגמה עיצובית שהופכת את הארדואינו למודול שלט רחוק של עבדים I2C (תמונה 1 למעלה) עם מעגל בדיקה של אב טיפוס (תמונה 2 למעלה) וממשיך לפרט כיצד לכווץ את העיצוב שלך לרכיבים המינימליים הדרושים כך שניתן יהיה מוטמע בעיצוב אחר. במקרה שלי אני משתמש בהתקן מוטבע זה בהתקן שלט רחוק אוניברסלי של IoT המבוסס על ESP8266-12E.

אילו חלקים אני צריך?

כדי לבנות את המעגל המתואר בשלב 1 (משדר IR) תזדקק לחלקים הבאים;

  • 2 נגדים 10K כבוי
  • נגד 390R 1 off
  • נגד 33R אחד
  • נגד 3K8 חד פעמי
  • נורית אדומה אחת כבוייה
  • 1 הנחה IR LED TSAL6400
  • 1 כבוי טרנזיסטור BC337
  • קבל חד פעמי של 220uF
  • 1 הנחה על Arduino Uno

כדי לבנות את המעגל המתואר בשלב 4 (מקלט IR) תזדקק לחלקים הבאים;

  • נגד 10K אחד
  • 1 הנחה על TSOP38328
  • קבל חד פעמי של 220uF
  • 1 הנחה על Arduino Uno

כדי לבנות את המעגל המתואר בשלב 5 (מעגל בדיקת עבדים) תזדקק לחלקים הבאים;

  • 4 נגדים 10K כבוי
  • נגד 390R כבוי
  • נגד 33R אחד
  • נגד 3K8 חד פעמי
  • 2 כיבוי LED אדום
  • 1 הנחה IR LED TSAL6400
  • 1 כבוי טרנזיסטור BC337
  • קבל חד פעמי של 220uF
  • 2 כפתורי SPST
  • 2 הנחה על Arduino Unos

כדי לבנות את המעגל המתואר בשלב 6 (עיצוב מכווץ) תזדקק לחלקים הבאים;

  • 3 נגדים 10K כבוי
  • נגד אחד 270R
  • נגד 15R אחד כבוי
  • 4 נגדים 1K כבוי
  • נורית אדומה אחת כבוייה
  • 1 LED IR TSAL6400 או TSAL5300
  • 1 כבוי טרנזיסטור BC337
  • 1 כבוי קבל אלקטרוליטי 220uF @ 6.3v
  • 1 off 1000uF קבלים אלקטרוליטיים @ 6.3v
  • 2 קבלים של 0.1uF
  • 2 קבלים 22pF כבויים
  • 1 כבוי 16MHz Xtal
  • 1 הנחה על ATMega328P-PU

הערה: תדרש גם מכשיר FTDI לתכנת ה- ATMega328P

אילו כישורים אני צריך?

  • הבנה מינימלית של האלקטרוניקה,
  • הכרת Arduino וזה IDE,
  • קצת סבלנות,
  • קצת הבנה של I2C תהיה שימושית (ראה כאן כמה פרטים כלליים של ספריית I2C/Wire).

נושאים מכוסים

  • סקירה קצרה של המעגל,
  • סקירה קצרה של התוכנה,
  • תוכן מנות I2C,
  • רכישת קודי שלט רחוק (ui32Data),
  • כיצד לבדוק את מכשיר ה- I2C Slave שלך,
  • מכווץ את העיצוב שלך,
  • סיכום,
  • נעשה שימוש בהפניות.

כתב ויתור

כמו תמיד, אתה משתמש בהנחיות אלה על אחריותך בלבד והן אינן נתמכות.

שלב 1: סקירה קצרה של המעגל

סקירה קצרה של המעגל
סקירה קצרה של המעגל

מטרת המעגל היא העברת קודי שלט רחוק IR. העיצוב שלו די פשוט קדימה ודי פשוט.

כאשר הטרנזיסטור Q1 a BC337 NPN מופעל באמצעות היגיון מ- Arduino PWM O/P D3 אל הנגד R5, הזרם עובר דרך תאי 1 ו- 2. מוגבל רק על ידי נגדי נטל R3 ו- R4 בהתאמה. Q1 משמש להגברת הזרם העובר דרך דיודת ה- IR (IF Max = 100mA) לזה העולה על מה שה- Arduino O/P מסוגל ~ 40mA @ +5v אספקה.

קבלים C1 אלקטרוליטיים של 220uF מספקים ייצוב כלשהו המונע ירידה במסילת אספקה על ידי הכוח המושך על ידי נוריות 1 ו -2.

הנגדים R1 ו- R2 הם משיכות I2C.

שלב 2: סקירה קצרה של התוכנה

סקירה קצרה של התוכנה
סקירה קצרה של התוכנה
סקירה קצרה של התוכנה
סקירה קצרה של התוכנה
סקירה קצרה של התוכנה
סקירה קצרה של התוכנה

הַקדָמָה

כדי לאסוף בהצלחה את קוד המקור הזה תזדקק לספרייה הנוספת הבאה;

IRremote.h

  • מאת: z3t0
  • מטרה: ספרייה מרחוק אינפרא אדום עבור Arduino: לשלוח ולקבל אותות אינפרא אדום עם פרוטוקולים מרובים
  • מאת:

סקירת קוד

כפי שמוצג בתמונה 1 לעיל, בעת ההפעלה הקוד מגדיר את קלט/פלט המיקרו-בקר ואז בוחן את סטטוס דגל התוכנה הפנימי 'bFreshDataFlag'. כאשר דגל זה מוגדר, הבקר טוען שהוא קו 'עסוק' (שולח סיכת נתונים D4 נמוכה) ועובר למצב 'eBUSY' קריאה ברצף של פקודות לחיצה על לחצנים המוחזקים ב- uDataArray ושולחים את הנתונים המאופננים ל- IR לנורית ה- IR בתוך רצף שידור.

לאחר שהנתונים המוחזקים ב- uDataArray נשלחו במלואם, מצב 'eIDLE' מתחדש והשורה 'עסוק' מופסקת (שליחת פין הנתונים D4 גבוה). המכשיר מוכן כעת לקבל לחיצות כפתורים נוספות המסמנות את סוף רצף השידור.

קליטה של נתוני לחיצה על לחצני IR

כאשר נתונים נשלחים לשלט הרחוק InfraRed באמצעות I2C הם מעוררים הפרעה וקריאת הפונקציה ReceiveEvent () מופעלת באופן אסינכרוני.

לאחר הפעלת נתוני I2C שהתקבלו נכתבים ברצף למאגר 'uDataArray '.

במהלך קליטת הנתונים, אם סיום הרצף מסומן על ידי המאסטר (bFreshData! = 0x00) נקבע 'bFreshDataFlag', ובכך מסמן את תחילת רצף השידור.

תמונות 2 … 3 נותנות דוגמה לרצף מנות טיפוסי.

הערה: קוד המקור המלא זמין כאן

שלב 3: תוכן מנות I2C

תוכן מנות I2C
תוכן מנות I2C

הפורמט של חבילת הבקרה שנשלחה לעבד מעל I2C ניתן למעלה בתמונה 1 המשמעות של כל שדה ניתנת להלן

המשמעות של שדות מנות הבקרה

בייט קידוד;

  • קידוד שלט רחוק IR,

    • RC6 (סקיי) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

הייצוג המשושה של זרם הנתונים הבינארי IR 4 בתים של נתונים (ארוך ללא סימן), LSByte … MSByte

בייט bNumberOfBitsInTheData;

מספר הביטים בנתונים (מקסימום 32). טווח = 1… 32

בייט bPulseTrainRepeats;

כמה חזרות על רכבת הדופק הזו. טווח = 1… 255. בדרך כלל 2 … 4 חזרות. ייתכן שתרצה להאריך את זה עבור פקודות הפעלה/כיבוי מכיוון שהמכשיר המקבל דורש לפעמים כמה חזרות רכבת דופק נוספת כדי לקבל אות הפעלה

בייט bDelayBetweenPulseTrainRepeats;

עיכוב בין החזרות של רכבת הדופק הזו. טווח = 1… 255mS. בדרך כלל 22mS … 124mS

בייט bButtonRepeats;

מדמה לחיצה חוזרת על אותו כפתור (אך אינו תומך בקוד שהשתנה כמו שלט של אפל, הוא פשוט חוזר על קוד הכפתור). טווח = 1… 256. ברירת מחדל = 1

uint16_t ui16DelayBetweenButtonRepeats;

עיכוב בין החזרה על הכפתורים (int sign). 2 בתים בסך הכל LSByte … MSByte. טווח = 1… 65535mS. ברירת מחדל = 0mS

בייט bFreshData;

  • נתונים טריים. ערך שאינו אפס. נכתב אחרון, מפעיל את רצף ה- TX TX. טווח 0x00… 0xFF

    • עוד מנות בקרה יגיעו = 0
    • זוהי חבילת הבקרה הסופית = ערך לא-אפס 1, 2, … 255

שים לב לשימוש בהנחיית המהדר '_packed_'. זאת על מנת להבטיח שהנתונים הם בתים מנות לבייט בזיכרון ללא קשר למערכת המטרה בה משתמשים (Uno, Due, ESP8266 וכו '). המשמעות היא שהאיחוד בין registerAllocationType ו- dataArrayType צריך רק ברצף שעון/שעון בתים מחבילת בקרה ברצף, מה שהופך את תוכנת TX/RX לפשוטה.

שלב 4: רכישת קודי שלט רחוק (ui32Data)

רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)
רכישת קודי שלט רחוק (ui32Data)

ישנן שלוש דרכים בהן תוכלו לרכוש קוד מפתח שלט רחוק בהתאמה;

  1. ספירת סיביות באמצעות אוסצילוסקופ,
  2. חפש את זה באתר,
  3. פענח אותו ישירות מזרם הנתונים בתוכנה.

ספירת סיביות באמצעות היקף

זוהי לא שיטה יעילה מכיוון שהיא אורכת לא מעט זמן ואולי דורשת יותר מניסיון אחד, אולם היא יכולה להיות מדויקת ביותר. הוא שימושי גם באימות ויזואלי של קודים המתקבלים בשיטות 2 ו -3, גם בקביעת כל מוזרויות של שלט. לדוגמא כאשר אתה מחזיק כפתור בשלט של IR IR של אפל. השלט יפרסם בתחילה רצף פקודות ולאחר מכן יעקוב אחר רצף דחוס חוזר של 0xF….

חפש את זה באתר

מאגר הנתונים של קוד השלט הרחוק באתר שלט רחוק אינפרא אדום של לינוקס הוא מקור טוב.

אולם החיסרון הוא שאולי תצטרך לנסות כמה קודים עד שתמצא קוד שמתאים לך. ייתכן שיהיה עליך גם לפרש כמה מהייצוגים של הקודים על מנת להמיר אותם לצורתם הקססית המקבילה.

פענח אותו ישירות מזרם הנתונים

באמצעות המעגל בתמונה 1 לעיל בשילוב עם ספריית IRremote לדוגמה 'IRrecvDumpV2.ino' אפשר לפענח את זרם הנתונים ישירות מהשלט. תמונה 2 מציגה שלט מפושט לטלוויזיה של סמסונג ללחיצת כפתור הפעלה/כיבוי בחלון מסוף ה- Arduino IDE.

מקלט/משדר משולב

תמונות 3 ו -4 לעיל מתארות פתרון המאפשר קליטה ושידור של פקודת IR כדי לאפשר אב טיפוס קל.

כדי לפענח לחיצות על לחצן שלט רחוק IR, יהיה עליך להבהב את הארדואינו עם הדוגמה 'IRrecvDumpV2.ino' המגיעה עם ספריית IRremote.

זה גם עובד באותה מידה עבור שידור אם פקודות IR. נורית אדומה כלולה כאינדיקציה ויזואלית שהמכשיר בפעולה.

שלב 5: כיצד לבדוק את מכשיר ה- I2C Slave שלך

כיצד לבדוק את מכשיר העבד I2C שלך
כיצד לבדוק את מכשיר העבד I2C שלך
כיצד לבדוק את מכשיר העבד I2C שלך
כיצד לבדוק את מכשיר העבד I2C שלך

בעזרת קוד המקור כאן והמעגל המתואר למעלה בתמונה 1, תכנת את ה- 'Master' Arduino עם 'IR_Remote_Sim_Test.ino' ו- 'Slave' Arduino עם 'IR_Remote_Sim.ino'.

בהנחה שיש לך טלוויזיה של Sony Bravia, תיבת Sky HD ו- Sony BT SoundBar, לחץ על כפתור 1 והטלוויזיה שלך תעבור ל- BBC1 (ערוץ 101). לחץ על כפתור 2 וסרגל הקול שלך יושתק. לחץ שוב וזה יבטל את ההשתקה.

במהלך ביצוע רצף שידור ה- IR, LED3 יידלק המציין שהעבד תפוס ו- LED1 יהבהב בתוך התהליך של שידור ה- IR.

כמובן שאם אין לך אותה מערכת בידור המוגדרת לעיל, תוכל לתכנת מחדש את העבד עם 'IRrecvDumpV2.ino', לפענח את פקודות העניין המרוחקות שלך ולאחר מכן לתכנת אותן ב- 'IR_Remote_Sim_Test.ino' בשבילך תרחיש נתון.

תמונה 2 מציגה את סקירת תוכנת הבדיקה ברמת המערכת בין Master ו- Slave.

שלב 6: כיווץ העיצוב שלך

כיווץ העיצוב שלך
כיווץ העיצוב שלך

אוקיי, אז בהנחה שעקבת אחרי ההנחיה ההנחה הזו על שני Arduinos לשליטה במכשירי הבית שלך היא לא השימוש היעיל ביותר במלאי Arduino שלך. כתוצאה מכך אם תבנה את המעגל המוצג בתמונה למעלה ותעקוב אחר ההוראות כאן לתכנת ה- ATMega328P עם 'IR_Remote_Sim.ino', תוכל לצמצם את כל המערכת לרכיבים המינימליים. זה יאפשר לך להטמיע את העיצוב שלך במערכת אחרת.

שלב 7: סיכום

סיכום
סיכום
סיכום
סיכום

הפתרון יציב ועובד היטב, הוא מוטבע במערכת אחרת כבר כמה שבועות ללא בעיות.

בחרתי ב- Arduino Uno R3 מכיוון שרציתי מכשיר בעל מספיק זיכרון RAM בכדי שיהיה לי מאגר כפתורים בעומק סביר. הסתפקתי בגודל מאגר של 20 מנות (MAX_SEQUENCES).

מגן ה- Hybrid TX/RX שיצרתי גם היה שימושי מאוד בעת פענוח שלטני Sony ו- Sky. למרות שאני חייב להתוודות על השימוש בהיקף הדיגיטלי שלי מדי פעם כדי לבדוק שהפקודה IR מפוענת תוכנה זהה לזו שמגיעה מה- IR שהתקבל (TSOP38328).

הדבר היחיד שהייתי עושה אחרת היה להשתמש במעגל הכונן של הזרם הקבוע עבור ה- IR, כפי שמוצג למעלה בתמונה 2.

נקודה נוספת שיש לציין היא שלא כל משדרי ה- IR מאופננים עם 38KHz, ה- TSOP38328 מותאם עבור 38KHz.

שלב 8: שימוש בהפניות

IRRemote.h

  • מאת: z3t0
  • מטרה: ספרייה מרחוק אינפרא אדום עבור Arduino: לשלוח ולקבל אותות אינפרא אדום עם פרוטוקולים מרובים
  • מאת:

ספריית IR מרחוק

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

חיישן מקלט IR (אינפרא אדום) - TSOP38238 (שווה ערך)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

כדי להימנע ממבנה מבנה הנתונים לגבולות מילים

  • https://github.com/esp8266/Arduino/issues/1825
  • https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
  • https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4

מקור טוב לפרטי IR מרחוק

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

מסד נתונים של IR

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

BC337 גליון הנתונים

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 גליון נתונים

https://www.vishay.com/docs/81857/1n4148.pdf

מוּמלָץ: