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

שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום: 5 שלבים
שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום: 5 שלבים

וִידֵאוֹ: שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום: 5 שלבים

וִידֵאוֹ: שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום: 5 שלבים
וִידֵאוֹ: צימוד שלט לממיר ולטלויזיה פרטנר TV 2024, נוֹבֶמבֶּר
Anonim
שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום
שלט טלוויזיה אוניברסלי - Ardiuino, אינפרא אדום

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

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

אספקה

דברים שתצטרך: -ארדואינו UNO או ננו - קילומטראז 'עשוי להשתנות עם לוחות אחרים

-קרש לחם ללא הלחמה (או לוח חשמל להלחמה אם תרצה להפוך אותו לקבוע יותר)

-חוטי מגשרים בצבעים ואורכים שונים

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

נגד -10K אוהם (5) (אם אתה רוצה יותר כפתורי לחיצה, תזדקק ליותר מאלה)

נגד -470 אוהם (2)

-LED אינפרא אדום

-LED אדום

-חיישן אינפרא אדום (השתמשתי במספר חלק VS1838B, אתה יכול להשתמש בחיישן אחר, פשוט בדוק את הסיכה החוצה)

(אופציונלי) מלחם, הלחמה, שטף הלחמה.

שלב 1: בניית המעגל:

בניית המעגל
בניית המעגל

1). אני תמיד אוהב להתחיל עם פריסת הרכיבים שלי, מכיוון שזה תמיד מניע את הפריסה על לוח הלחם.

-ללחוץ על כפתורים

-נוריות: הנורית האדומה ו- LED IR מחוברות במקביל, כך שתוכל לראות מה נורית ה- IR עושה.

-חיישן

2). נגדים

- חמשת הנגדים של 10K שחיברנו ללחצני הלחיצה נקראים נגדי "משיכה כלפי מטה". נגדים כלפי מטה ודאו שכאשר לא לוחצים על כפתור לחיצה, סיכת הארדואינו המתאימה מקבל 0 וולט (או לפחות קרוב אליה). למידע נוסף על נגדים למטה (או כלפי מעלה) להלן מדריך מעמיק:

www.electronics-tutorials.ws/logic/pull-up…

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

3). חוטי מעגל

4). 5V וחוטי קרקע

השתמש בתמונה המצורפת לעיון! אל תפחד לשנות את זה לצרכים שלך!

שלב 2: קוד:

#כלול const int RECV_PIN = 7; // לחצן IR קריאת סיכה int לחצן 1 = A4; // לחצן int int שמאל 2 = A3; // 2 משמאל int Button3 = A2; // לחצן int באמצע 4 = A1; // 2nd to the right int Button5 = A0; // הכי רחוק ימינה int LED = 3; // IR LED & LED אדום int val = 0; // שינוי ערך IRsend irsend; IRrecv irrecv (RECV_PIN); תוצאות decode_results;

הגדרת void () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} לולאת void () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // שימוש בקריאה אנלוגית במקום קריאה דיגיטלית כדי להימנע מבעיות קיבול שבוי. גם עוזר להפחית את הכפתורים. // לאחר קריאה אנלוגית ב -900 מאפשר קצת להתנדנד בערכים, כלומר, אות האינפרא יישלח גם אם לא יופעל 5V מלא על הסיכה. // אך 900 גבוה מספיק כדי שלא יקראו בטעות עקב עיכוב צימוד קיבולי (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // שינוי הערך ב- "i <3" ישנה את מספר הפעמים שהאות חוזר על עצמו באופן מיידי. אז "i <2" יחזור על האות פעמיים. // ייתכן שתצטרך לשחק עם המספר הזה אם הטלוויזיה שלך לא מגיבה, בדרך כלל 1 או 3 עובדים הכי הרבה, אם לא, נסה מספרים מוזרים. // ייתכן שתצטרך לשחק עם ערכי התזמון של עיכוב אותות, למשל, עבור הטלוויזיה שלי 10 עובד, אבל 30 לא. {irsend.sendSony (0xa90, 12); // קוד כוח טלוויזיה של סוני, עבור הטלוויזיה שלי, הקוד צריך להישלח 3x3, אז 3 פולסים, שלוש פעמים נפרדות עיכוב (10); // "עיכוב תוך אות" עבור (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" הוא מספר הסיביות, פרוטוקולים שונים דורשים מספרי סיביות שונים. NEC הוא 32, סוני בן 12, אתה יכול לחפש את העיכוב של האחרים (10); for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // עיכוב הפחתת עוצמת הקול של Sony TV (100);}}} עיכוב (100);} אם (irrecv.decode (& תוצאות)) // החלק שלהלן של הקוד מאפשר לך לפרש אותות אינפרא אדומים משלטים שונים. {Serial.println (results.value, HEX); // הוא יפיק את ההליך "NEC, Sony, Etc.." וקוד טלוויזיה "c90, a90, FF02FD" יהיה עליך להוסיף 0x לחזית מתג קוד הטלוויזיה (results.decode_type) {case DENON: Serial.println ("DENON"); לשבור; מקרה NEC: Serial.println ("NEC"); לשבור; מקרה PANASONIC: Serial.println ("PANASONIC"); לשבור; מקרה SONY: Serial.println ("SONY"); לשבור; מקרה RC5: Serial.println ("RC5"); לשבור; מקרה JVC: Serial.println ("JVC"); לשבור; מקרה SANYO: Serial.println ("SANYO"); לשבור; מארז MITSUBISHI: Serial.println ("MITSUBISHI"); לשבור; מקרה SAMSUNG: Serial.println ("SAMSUNG"); לשבור; מקרה LG: Serial.println ("LG"); לשבור; מקרה RC6: Serial.println ("RC6"); לשבור; מקרה DISH: Serial.println ("DISH"); לשבור; מקרה SHARP: Serial.println ("SHARP"); לשבור; מקרה WHYNTER: Serial.println ("WHYNTER"); לשבור; מקרה AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); לשבור; ברירת מחדל: מקרה לא ידוע: Serial.println ("לא ידוע"); break;} irrecv.resume ();}}

שלב 3: קוד בעומק: שליחת אותות IR

אני אתייחס לשורות קוד לפי מספר השורה שלהם - להמשך הדרך, השתמש בקישור הזה:

pastebin.com/AQr0fBLg

ראשית, עלינו לכלול את ספריית IR מרחוק על ידי z3t0.

להלן קישור לספרייה:

github.com/z3t0/Arduino-IRremote

אם אתה צריך מדריך כיצד להוריד כראוי ספרייה ולהתקין אותה ב- IDE:

www.arduino.cc/en/guide/libraries

שורה 1 כוללת את הספרייה.

לאחר מכן, עלינו להכריז על כמה משתנים, שורות 2-12 עושות זאת.

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

אנו משתמשים ב- "int" כדי להגדיר משתנים שישתנו.

עלינו להשתמש בסיכה עם דופק עם אפנון (PWM) עבור סיכת ה- LED שלנו - כל סיכה שיש לה "~" לידה תספיק, בקוד שלי - אנו משתמשים בסיכה דיגיטלית 3.

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

שימו לב שאנו מגדירים את הכניסות והיציאות שלנו (15-20), מפעילים את הצג הסדרתי (21), מאפשרים לחיישן ה- IR (22) ואומרים ל- Arduino להבהב את הנורית המשולבת בכל פעם שאנו מקבלים אות בחיישן (23).

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

בשורה 25, אנו משתמשים באמירת if, זה אומר לארדואינו "חפשו את הקריטריונים הספציפיים האלה, אם הקריטריונים מתקיימים, עשו את הדבר הספציפי הזה". במקרה זה, הקריטריונים הם analogRead (Button1)> 900, או במילים אחרות - "Arduino, תסתכל על כפתור 1, שהגדרנו כסיכה A4 קודם לכן, אם האות האנלוגי שהתקבל גדול מ- 900, המשך להנחיות הבאות., אם לא, אנא המשך הלאה ". יש קצת מה לפרוק כאן, אז אפשר לצלול פנימה: אות אנלוגי על הארדואינו הוא ערך שווה או פחות מ- 5V, כאשר 5V שווה ל- 1023 ו- 0V שווה 0. ניתן להגדיר כל מתח נתון בין 0 ל -5V על ידי מספר, ועם קצת מתמטיקה, נוכל להבין את המספר הזה, או להיפך, מתח. חלקו את 1024 (אנו כוללים 0 כיחידה) ב- 5, מה שנותן לנו 204.8. לדוגמה, אנו משתמשים במספר 900, כדי לתרגם את זה למתח, אנו פשוט מחלקים 900 ב- 204.8, ונותנים לנו ~ 4.4V. אנו אומרים לארדואינו לחפש מתח גדול מ ~ 4.4 וולט, ואם כן, בצע את ההנחיה הבאה שלנו.

אם מדברים על ההנחיות הבאות (שורה 25), אנו רואים irsend.sendNEC (0xFF02FD, 32). זה אומר "Arduino, שלח דופק מאופנן העוקב אחר פרוטוקול NEC, במיוחד האות FF02FD, וודא שאורכו 32 סיביות". זה יגרום להבהב LED ה- IR שלנו כך שמכשירים אחרים יכולים להבין. תחשוב על זה קצת כמו קוד מורס, אבל רק עם אור בלתי נראה! יש הרבה פרוטוקולים שונים, כל אחד עם מאות אם לא אלפי אותות בודדים, וכל אחד עם מספר הסיביות הספציפי שלהם - המכשיר שלנו יוכל לזהות כמות גדולה של אותות אלה, אך נצלול לזה בהמשך!

בשורה 28, יש לנו את העיכוב הראשון שלנו - זה כאן כדי למנוע אותות חזרה לא מכוונים, ברגע שהכפתור נלחץ ואות ה- IR נשלח, יש לנו 100 אלפיות השנייה כדי להוריד את האצבע מהכפתור. זה לא נשמע הרבה זמן, אבל בפועל נראה שזה עובד מצוין. פונקציית העיכוב אומרת לארדואינו "אל תעשה דבר במשך X אלפיות השנייה" ולהתייחסות, הם 1000 מילי שניות בשנייה.

עוברים לכפתור הבא שלנו בשורה 29, כפתור 5 (במקור היו לי 4 כפתורים בשלט הזה, הוספתי חמישי, אז בגלל זה אנחנו לא בסדר). זה, ברוח, זה אותו דבר כמו כפתור 1, אך עם כמה הבדלים מרכזיים. ההבדל הראשון שתראה הוא הצהרה - זו בעצם לולאה נוספת - לולאה עם לולאה גדולה יותר, loopception. באופן ספציפי יש לנו "for (int i = 0; i <3; i ++)", קרא את זה כ"ארדואינו, אפשר להתחיל ב -0, חזור על ההנחיות הבאות עד שנגיע לשלוש פעמים ". הפונקציה for משמשת מכיוון שהרבה מכשירים מתוכנתים לחפש אות חוזר, ובמקרה שלנו כאן, 3 פעמים. אתה יכול פשוט לשנות את המספר 3 למספר אחר אם המכשיר שלך דורש תזמון חזרה אחר. הבדל מפתח נוסף עם כפתור 5 הוא שהוא חוזר על עצמו שוב, 3 פעמים, או 3x3. במילים אחרות, אנו שולחים את האות 3 פעמים, ממתינים 10 אלפיות השנייה, שולחים אותו שוב 3 פעמים, ממתינים עוד 10 אלפיות השנייה ולאחר מכן שולחים אותו 3 פעמים שוב. סוג תקשורת זה נפוץ להפעלה וכיבוי של התקנים וייתכן שזה בדיוק מה שהטלוויזיה או המכשיר שלכם דורשים - המפתח לכך הוא לשחק עם כל המשתנים עד לקבלת התוצאה הרצויה. שנה את ערך העיכוב הקצר, שנה את ערך החזרה, שלח 6 קבוצות במקום 3 וכו '. מכשירים מתוכנתים עם כללי אותות שרירותיים בכוונה, דמיין אם שלט הטלוויזיה שלך שלח את אותו סוג אות כמו סרגל הקול שלך; בכל פעם שהחלפת את הערוץ בטלוויזיה, סרגל הסאונד שלך נכבה - לכן ישנם כללי אות שונים.

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

שלב 4: קוד בעומק: קבלת אותות IR

קוד עומק: קבלת אותות IR
קוד עומק: קבלת אותות IR

בשורה 55, אנו מתחילים לתכנת את Arduino לפרש אותות IR שנשלחים על ידי שלטים אחרים - זה הכרחי כדי שתוכל להבין את הפרוטוקולים והאותות שהשלטים שלך מנצלים. שורת הקוד הראשונה בשורה 55 היא אם (irrecv.decode (& results) קוראים זאת כ"ארדואינו, חפש קוד IR, אם אתה מוצא אותו, החזר ערך אמיתי, אם שום דבר לא נמצא, החזר שקר. כאשר נכון, רשום המידע ל"תוצאות "".

מעבר לשורה 56, יש לנו Serial.println (results.value, HEX) זה אומר "Ardunio, הדפס את התוצאות בצג הטורי בפורמט HEX". Hex, כלומר הקסדצימלי, הוא דרך שבה אנו יכולים לקצר מחרוזת בינארית (רק 0 ו -1) למשהו קצת יותר קל להקליד. לדוגמה 101010010000 הוא "a90", הקוד המשמש לכיבוי והדלקה של הטלוויזיה שלי, ו 111111110000001011111101 הוא 0xFF02FD, השולט ברצועת ה- RGB שלי. אתה יכול להשתמש בתרשים לעיל כדי להמיר בינארי ל- hex, ולהיפך, או שאתה יכול להשתמש בקישור הבא:

www.rapidtables.com/convert/number/hex-to-…

עד קו 57, יש לנו פונקציה חדשה, הנקראת מארז מתג.

בעיקרו של דבר, מקרה מתג מאפשר לנו לציין הוראות שונות בהתבסס על תוצאות משתנה נתון (מקרה). ההפסקה יוצאת מהצהרת המתג, ומשמשת אותה בסוף כל משפט.

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

שלב 5: מסקנה

אם יש לך שאלה - אל תהסס לפנות אלי כאן! אני שמח לנסות לעזור לך הכי טוב שאני יכול.

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

-RB

מוּמלָץ: