תוכן עניינים:
- שלב 1: סקירה קצרה של המעגל
- שלב 2: סקירה קצרה של התוכנה
- שלב 3: תוכן מנות I2C
- שלב 4: רכישת קודי שלט רחוק (ui32Data)
- שלב 5: כיצד לבדוק את מכשיר ה- I2C Slave שלך
- שלב 6: כיווץ העיצוב שלך
- שלב 7: סיכום
- שלב 8: שימוש בהפניות
וִידֵאוֹ: שלט רחוק I2C אינפרא אדום עם הארדואינו: 8 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:17
מבוא זה מפרט כיצד ניתן ליצור שלט אוניברסלי מרחוק באמצעות 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 ניתן למעלה בתמונה 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)
ישנן שלוש דרכים בהן תוכלו לרכוש קוד מפתח שלט רחוק בהתאמה;
- ספירת סיביות באמצעות אוסצילוסקופ,
- חפש את זה באתר,
- פענח אותו ישירות מזרם הנתונים בתוכנה.
ספירת סיביות באמצעות היקף
זוהי לא שיטה יעילה מכיוון שהיא אורכת לא מעט זמן ואולי דורשת יותר מניסיון אחד, אולם היא יכולה להיות מדויקת ביותר. הוא שימושי גם באימות ויזואלי של קודים המתקבלים בשיטות 2 ו -3, גם בקביעת כל מוזרויות של שלט. לדוגמא כאשר אתה מחזיק כפתור בשלט של IR IR של אפל. השלט יפרסם בתחילה רצף פקודות ולאחר מכן יעקוב אחר רצף דחוס חוזר של 0xF….
חפש את זה באתר
מאגר הנתונים של קוד השלט הרחוק באתר שלט רחוק אינפרא אדום של לינוקס הוא מקור טוב.
אולם החיסרון הוא שאולי תצטרך לנסות כמה קודים עד שתמצא קוד שמתאים לך. ייתכן שיהיה עליך גם לפרש כמה מהייצוגים של הקודים על מנת להמיר אותם לצורתם הקססית המקבילה.
פענח אותו ישירות מזרם הנתונים
באמצעות המעגל בתמונה 1 לעיל בשילוב עם ספריית IRremote לדוגמה 'IRrecvDumpV2.ino' אפשר לפענח את זרם הנתונים ישירות מהשלט. תמונה 2 מציגה שלט מפושט לטלוויזיה של סמסונג ללחיצת כפתור הפעלה/כיבוי בחלון מסוף ה- Arduino IDE.
מקלט/משדר משולב
תמונות 3 ו -4 לעיל מתארות פתרון המאפשר קליטה ושידור של פקודת IR כדי לאפשר אב טיפוס קל.
כדי לפענח לחיצות על לחצן שלט רחוק IR, יהיה עליך להבהב את הארדואינו עם הדוגמה 'IRrecvDumpV2.ino' המגיעה עם ספריית IRremote.
זה גם עובד באותה מידה עבור שידור אם פקודות IR. נורית אדומה כלולה כאינדיקציה ויזואלית שהמכשיר בפעולה.
שלב 5: כיצד לבדוק את מכשיר ה- I2C Slave שלך
בעזרת קוד המקור כאן והמעגל המתואר למעלה בתמונה 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
מוּמלָץ:
ביצוע שלט רחוק למראה פרויקט הארדואינו שלך בבית: 9 שלבים (עם תמונות)
יצירת שלט רחוק למראה פרויקט הארדואינו שלך בבית: הכנתי פרוייקט שהשתמש בארדואינו ובספריית מרחוק IR לשליטה בכמה דברים. אז בהנחיה זו אראה לך כיצד תוכל לתכנן מחדש כל שלט רחוק. השתמשת בפרויקט הבא שלך. ואתה לא צריך שום דבר מפואר בכדי להכין ארוחה טובה
טלפון נייד אינפרא אדום מזגן שלט רחוק ייצור DIY: 7 שלבים
טלפון נייד מזגן אינפרא אדום שלט רחוק ייצור עשה זאת בעצמך: בקיץ החם, כשאתה חוזר הביתה או למשרד, אתה רוצה להדליק את המזגן אבל אתה לא יכול למצוא את השלט רחוק לזמן מה. זה דבר מאוד מעצבן. בעידן שבו הטלפון הנייד הזה לא עוזב, האם אתה יכול להשתמש בטלפון הנייד כ
בודק שלט רחוק אינפרא אדום באמצעות TSOP4838: 5 שלבים
בודק שלט רחוק אינפרא אדום באמצעות TSOP4838: כך בונים מעגל בודק שלט רחוק פשוט. פשוט בצע את השלבים שלהלן ותגיע תוך 5 דקות. אם זה עובד, אנא השאירו לייק לסרטון שלנו וספרו לנו בתגובות
היכרות עם 'דאודורינו' - הארדואינו הנשלט על ידי אינפרא אדום במקל דאודורנט ריק. לחץ על התמונה הראשונה: 7 שלבים
היכרות עם 'דאודורינו' - הארדואינו הנשלט על ידי אינפרא אדום במקל דאודורנט ריק. לחץ על תמונה ראשונה: עכשיו לפרטים
שלט רחוק רובוט הארדואינו שלך: 7 שלבים
שלט ברובוט הארדואינו שלך: במדריך זה אני הולך לכסות להשתמש במגן מנוע Adafruit עבור Arduino V2 לצד אנטנה nRF24L01 ליצירת רובוט בטווח רחוק. אני משתמש ב- Adafruit Arduino 101 CurrieBot ישן עם Undu Arduino במקום ב