Агуулгын хүснэгт:

ТВ -ийн алсын удирдлага - Ardiuino, Хэт улаан туяа: 5 алхам
ТВ -ийн алсын удирдлага - Ardiuino, Хэт улаан туяа: 5 алхам

Видео: ТВ -ийн алсын удирдлага - Ardiuino, Хэт улаан туяа: 5 алхам

Видео: ТВ -ийн алсын удирдлага - Ardiuino, Хэт улаан туяа: 5 алхам
Видео: DIY IR пульт дистанционного управления без какой-либо IC 2024, Арваннэгдүгээр
Anonim
ТВ -ийн алсын удирдлага - Ardiuino, хэт улаан туяа
ТВ -ийн алсын удирдлага - Ardiuino, хэт улаан туяа

Сайн уу? Энэхүү зааварчилгаанд би хэт ягаан туяаны алсын удирдлагатай ихэнх зүйл дээр ажилладаг, мөн өөр бусад алсын удирдлагаас илгээсэн хэт улаан туяаны дохиог "сонсож" тайлах өөрийн бүх нийтийн алсын удирдлагыг хэрхэн бүтээх, програмчлах талаар танд үзүүлэх болно.

Энэхүү алсын удирдлагыг бүтээхэд надад юу нөлөөлсөн талаар бага зэрэг мэдээлэл - би та нарын ихэнх шиг алсын удирдлагаа байнга алддаг бөгөөд энэ гамшиг нь маш их урам хугардаг тул үүнийг шийдвэрлэхийг би хүсч байна! Би энэ алсын удирдлагыг суурилуулж, өөрийн захиалгаар хийсэн орны хүрээ рүү болгоомжтой суулгасан (би бас модон эдлэл хийдэг хүн) - Хэрэв миний орны хүрээний нэг хэсэг бол алсын удирдлагыг алдаж болохгүй!

Хангамж

Танд хэрэгтэй зүйл: -Arduino UNO эсвэл Nano - миль нь бусад самбараас хамаарч өөр өөр байж болно

-Гагнуургүй талхны хавтан (эсвэл хэрэв та үүнийг илүү байнгын болгохыг хүсвэл гагнах боломжтой хавтан)

-Янз бүрийн өнгө, урттай утаснууд

- Түр зуурын товчлуур (5) (та илүү олон товчлуур нэмж болно, гэхдээ аналог 1 -ээс бусад нь ашиглагддаг тул дижитал тээглүүр ашиглах шаардлагатай болно. Та татах эсэргүүцлийг зөв ашиглаж байгаа эсэхийг шалгах хэрэгтэй., эсвэл резисторыг татаж, товчлуурыг нь салга)

-10K Ом эсэргүүцэл (5) (хэрэв та илүү олон товчлуур авахыг хүсвэл эдгээрээс илүү хэрэгтэй болно)

-470 Ом эсэргүүцэл (2)

-Хэт улаан туяаны LED

-Улаан LED

-Хэт улаан туяаны мэдрэгч (би VS1838B хэсгийн дугаарыг ашигласан, та өөрийг ашиглаж болно, зүгээр л залгуурыг нь шалгаарай)

(Нэмэлт) Гагнуурын төмөр, гагнуур, гагнуурын урсгал.

Алхам 1: Хэлхээ байгуулах:

Цахилгаан хэлхээг бий болгох
Цахилгаан хэлхээг бий болгох

1). Би үргэлж бүрэлдэхүүн хэсгүүдийг байрлуулахаас эхлэх дуртай байдаг, учир нь энэ нь талхны самбар дээрх байрлалыг үргэлж хөтөлдөг.

-Товчлуурыг дарна уу

-LEDS: Улаан LED ба IR LED нь уялдаатай тул IR LED юу хийж байгааг харж болно.

-Мэдрэгч

2). Эсэргүүцэл

- Бидний товчлуур дээр хавсаргасан 10K эсэргүүцэлтэй таван резисторыг "доош татах" резистор гэж нэрлэдэг. Резисторыг татаж аваарай, хэрэв товчлуур дарагдаагүй бол холбогдох Arduino зүү нь 0 вольт (эсвэл дор хаяж ойролцоо) авдаг эсэхийг шалгаарай. Резисторыг доош татах (эсвэл татах) талаар дэлгэрэнгүй мэдээллийг эндээс авах боломжтой.

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

Эдгээр резисторууд нь бүрэн шаардлагагүй байж магадгүй, гэхдээ хэрэв та "хий үзэгдэл" түлхэлт авч байгаа бол энэ нь багтаамжийн холболтоос үүдэлтэй бөгөөд эсэргүүцэгчийг доош нь татахаас урьдчилан сэргийлэх болно.

3). Хэлхээний утас

4). 5V ба газардуулгын утас

Лавлахын тулд өгсөн зургийг ашиглана уу! Гэхдээ үүнийг өөрийн хэрэгцээнд нийцүүлэн өөрчлөхөөс бүү ай!

Алхам 2: Код:

#inc const int RECV_PIN = 7; // IR мэдрэгч уншсан pin int Button1 = A4; // Хамгийн зүүн талын int Button2 = A3; // зүүн талаас 2 -р int Button3 = A2; // Middle int Button4 = A1; // 2 -р баруун тийш int Button5 = A0; // Хамгийн баруун тийш int LED = 3; // IR LED & Улаан LED int val = 0; // Өөрчлөх утга IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results үр дүн;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, OUTPUT); Цуваа эхлэх (9600); irrecv.enableIRIn (); irrecv.blink13 (үнэн);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // олзлогдсон багтаамжийн асуудлаас зайлсхийхийн тулд дижитал уншихын оронд аналог уншихыг ашиглах. мөн товчлууруудыг салгахад тусалдаг. // 900 -д аналог унших нь утсан дээр 5В бүрэн хүчдэл ашиглаагүй байсан ч гэсэн хэт ягаан туяа илгээх болно гэсэн үг юм. // гэхдээ 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); // Sony TV -ийн цахилгаан код, миний ТВ -ийн хувьд кодыг 3х3 хэмжээтэй илгээх шаардлагатай тул 3 импульс, гурван тусдаа удаашралтай (10); // "дотоод дохионы саатал" (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" бол битийн дугаар, өөр өөр протоколууд өөр битийн дугааруудыг дууддаг. NEC 32, Sony 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);} if (irrecv.decode (& үр дүн)) // кодын доорх хэсэг нь янз бүрийн алсын удирдлагаас хэт улаан туяаны дохиог тайлбарлах боломжийг танд олгоно. {Serial.println (results.value, HEX); // энэ нь "NEC, Sony, Etc.." процедурыг үүсгэх бөгөөд "c90, a90, FF02FD" телевизийн кодыг үүсгэх бөгөөд та ТВ код шилжүүлэгчийн урд талд 0x нэмэх шаардлагатай болно (results.decode_type) {тохиолдолд 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"); завсарлага; case DISH: Serial.println ("DISH"); завсарлага; тохиолдолд SHARP: Serial.println ("SHARP"); завсарлага; кейс WHYNTER: Serial.println ("WHYNTER"); завсарлага; тохиолдол AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); завсарлага; анхдагч: тохиолдолд МЭДЭХГҮЙ: Serial.println ("Мэдэхгүй"); завсарлага;} irrecv. resume ();}}

Алхам 3: Гүн дэх код: IR дохио илгээх

Би кодын мөрүүдийг мөрийн дугаараар нь дурдах болно - дагаж мөрдөхийн тулд энэ холбоосыг ашиглана уу.

pastebin.com/AQr0fBLg

Нэгдүгээрт, бид IR Remote Library -ийг z3t0 -оор оруулах ёстой.

Номын сангийн линк энд байна.

github.com/z3t0/Arduino-IRremote

Хэрэв танд номын санг хэрхэн зөв татаж аваад IDE -д суулгах заавар хэрэгтэй бол:

www.arduino.cc/en/guide/libraries

1 -р мөрөнд номын сан орно.

Дараа нь бид хэд хэдэн хувьсагчийг зарлах хэрэгтэй, 2-12 мөр үүнийг хийдэг.

Бид энэ ангилалд багтсан нэгээс бусад нь өөрчлөгдөхгүй хувьсагчдыг тодорхойлохдоо "cost int" -ыг ашигладаг.

Бид "int" ашиглан өөрчлөгдөх хувьсагчдыг тодорхойлдог.

Бид LED зүүгээ модуляцтай (PWM) импульс бүхий зүү ашиглах ёстой - хажууд нь "~" байгаа зүү хангалттай байх болно, миний кодонд дижитал зүү 3 ашигладаг.

Дараа нь бид зарим тохиргоог хийх хэрэгтэй - энэ код нь Arduino -ийг асаах эсвэл дахин тохируулах үед зөвхөн нэг л удаа ажиллах болно.

Бид оролт, гаралтыг (15-20) тодорхойлж, цуваа дэлгэцийг асааж (21), IR мэдрэгчийг (22) идэвхжүүлж, мэдрэгч рүү дохио ирэх үед Arduino-д самбар дээрх LED-ийг анивчуулахыг анхааруулж байна. 23).

Дараа нь бид давталтаа бүтээх болно - энэ код хэд хэдэн удаа дээд талаас доод тал руу хэд хэдэн удаа давтагдах болно.

25 -р мөрөнд бид if илэрхийллийг ашигладаг бөгөөд энэ нь Arduino -д "энэ тодорхой шалгуурыг хайж олох, хэрэв энэ шалгуур хангагдсан бол энэ тодорхой зүйлийг хий" гэж хэлдэг. Энэ тохиолдолд шалгуур нь analogRead (Button1)> 900, эсвэл өөрөөр хэлбэл "Arduino, бидний өмнө A4 зүү гэж тодорхойлсон 1 товчлуурыг хараарай, хэрэв хүлээн авсан аналог дохио 900 -аас их бол манай дараагийн зааврыг үргэлжлүүлнэ үү., хэрэв үгүй бол цаашаа үргэлжлүүлнэ үү. " Энд задлахад жаахан зүйл байгаа тул шумбаж үзье: Arduino дээрх аналог дохио нь 5V -тэй тэнцүү буюу түүнээс бага утга бөгөөд 5V нь 1023, 0V нь 0 -тэй тэнцүү байна. 0 -ээс 5V хүртэлх хүчдэлийг тодорхойлж болно. тоо, жаахан математикийн тусламжтайгаар бид энэ тоог эсвэл эсрэгээр хүчдэлийг олж чадна. 1024 -ийг (бид 0 -ийг нэгж болгон) 5 -д хуваавал 204.8 болно. Жишээлбэл, бид 900 тоог ашигладаг бөгөөд үүнийг хүчдэл болгон хувиргахын тулд 900 -ийг 204.8 -д хувааж ~ 4.4V өгдөг. Бид Arduino -д ~ 4.4 вольтоос дээш хүчдэл хайхыг зөвлөж байна, хэрэв тийм бол бидний дараагийн зааврыг хий.

Дараагийн заавруудын талаар ярих (25 -р мөр), бид irsend.sendNEC (0xFF02FD, 32) -ийг харж байна. Энэ нь "Arduino, NEC протокол, ялангуяа FF02FD дохиог дагаж модуляцлагдсан импульс илгээж, 32 битийн урттай эсэхийг шалгаарай" гэж хэлдэг. Энэ нь манай IR LED -ийг бусад төхөөрөмжүүд ойлгохуйц гэрэлтүүлэх болно. Үүнийг Морзын код шиг жаахан бодоод үзээрэй, гэхдээ зүгээр л үл үзэгдэх гэрлээр! Тэнд маш олон янзын протоколууд байдаг бөгөөд тус бүр нь хэдэн зуун мянга биш, тус бүр өөрийн гэсэн бит дугаартай байдаг - манай төхөөрөмж эдгээр дохиог маш их хэмжээгээр таних боломжтой боловч бид үүнийг дараа нь оруулах болно.

28 -р мөрөнд бид эхний удаашралтай байгаа бөгөөд энэ нь санамсаргүйгээр давтах дохиог урьдчилан сэргийлэх зорилгоор энд байна, товчлуурыг дарж, IR дохиог илгээсэн тохиолдолд бид хуруугаа товчлуураас нь салгахад 100 миллисекунд хэрэгтэй болно. Энэ нь тийм ч их цаг хугацаа шаарддаггүй мэт санагддаг, гэхдээ практик дээр энэ нь сайн ажилладаг юм шиг санагддаг. хойшлуулах функц нь Arduino -д "X миллисекундэд юу ч хийхгүй" гэж хэлдэг бөгөөд лавлагааны хувьд секундэд 1000 миллисекунд байдаг.

Дараагийн товчлуур болох 29 -р мөр, 5 -р товчлуур руу шилжих (Би анх энэ алсын удирдлага дээр 4 товчлууртай байсан бөгөөд тавны нэгийг нэмсэн тул бид дараалалгүй болсон). Энэ нь оюун санааны хувьд 1 товчлууртай ижил зүйл боловч хэд хэдэн гол ялгаа байдаг. Таны харж буй анхны ялгаа нь for мэдэгдэл юм - энэ бол үндсэндээ өөр нэг давталт юм. Ялангуяа бидэнд "for (int i = 0; i <3; i ++)" гэж байгаа бөгөөд үүнийг "Arduino, 0 -ээс эхэлье, 3 удаа хүрэх хүртэл дараах зааврыг давтана уу" гэж уншаарай. Олон тооны төхөөрөмжүүд давтагдсан дохиог хайхаар програмчлагдсан байдаг тул манай функцийг энд 3 удаа ашигладаг тул for функцийг ашигладаг. Хэрэв таны төхөөрөмж өөр давталтын хуваарь шаардвал та 3 дугаарыг өөр дугаар болгон өөрчилж болно. Товч 5 -ийн өөр нэг гол ялгаа нь үүнийг 3 удаа, эсвэл 3 дахин давтах явдал юм. Өөрөөр хэлбэл бид дохиог 3 удаа илгээж, 10 миллисекунд хүлээж, дахин 3 удаа илгээж, дахиад 10 миллисекунд хүлээж, дараа нь дахин 3 удаа илгээдэг. Энэ төрлийн харилцаа холбоо нь төхөөрөмжийг асаах, унтраахад түгээмэл байдаг бөгөөд энэ нь таны телевиз эсвэл төхөөрөмжийн шаардсан зүйл байж болох юм - үүний гол түлхүүр нь хүссэн үр дүнд хүрэх хүртэл бүх хувьсагчтай тоглох явдал юм. Богино хугацааны хоцролтын утгыг өөрчлөх, давтах утгыг өөрчлөх, 3 -ийн оронд 6 багц илгээх гэх мэт. Төхөөрөмжүүдийг дур мэдэн дохионы дүрмээр програмчилсан байдаг. ТВ алсын удирдлага нь таны дууны баартай ижил төрлийн дохио илгээсэн эсэхийг төсөөлөөд үз дээ. ТВ -ийнхээ сувгийг өөрчлөх бүртээ дууны бариул хаагддаг тул дохионы өөр өөр дүрмүүд байдаг.

Дараагийн гурван товчлуурыг дээр дурдсан ижил зарчмуудаар програмчилсан бөгөөд ингэснээр бид 55 -р мөр хүртэл алгасах боломжтой.

Алхам 4: Гүн дэх код: IR дохиог хүлээн авах

Гүн дэх код: IR дохиог хүлээн авах
Гүн дэх код: IR дохиог хүлээн авах

55 -р мөрөнд бид Arduino програмыг бусад алсын удирдлагаас илгээсэн IR дохиог тайлбарлах програмчлах ажлыг эхлүүлж байгаа бөгөөд энэ нь таны алсын удирдлага ашигладаг протокол, дохиог олж мэдэх боломжийг олгодог. 55 -р мөр дэх кодын эхний мөр бол (irrecv.decode (& үр дүн) үүнийг "Arduino, IR код хайх, хэрэв олсон бол жинхэнэ утгыг буцааж өгөх, хэрэв юу ч олоогүй бол худал гэж буцаана. Үнэн бол тэмдэглэнэ үү." мэдээллийг "үр дүн" болгоно.

56 -р мөр рүү шилжихэд бидэнд Serial.println (results.value, HEX) байгаа бөгөөд үүнд "Ardunio, үр дүнг цуврал монитор дээр HEX форматаар хэвлэ" гэж бичжээ. Арван зургаат гэсэн утгатай Hex бол хоёртын мөрийг (ердөө 0 ба 1 -ийг) богиносгож бичихэд арай хялбар болгож өгдөг арга юм. Жишээлбэл, 101010010000 бол "a90", миний телевизийг унтрааж асаахад ашигладаг код бөгөөд 111111110000001011111101 бол миний RGB туузыг хянадаг 0xFF02FD юм. Та дээрх хүснэгтийг ашиглан хоёртын файлыг зургаан өнцөгт болгон хөрвүүлэх эсвэл эсрэгээр эсвэл дараах холбоосыг ашиглаж болно.

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

57 -р мөрөнд бид шилжүүлэгч кейс гэж нэрлэгддэг шинэ функцтэй боллоо.

Үндсэндээ сэлгэн залгуур нь тухайн хувьсагчийн үр дүнд үндэслэн өөр өөр зааврыг зааж өгөх боломжийг олгодог. завсарлага нь шилжүүлэгчийн мэдэгдлээс гардаг бөгөөд мэдэгдэл бүрийн төгсгөлд ашиглагддаг.

Бид энд шилжих хайрцгийг ашиглан янз бүрийн алсын удирдлагаас Arduino -ийн мэдэрдэг протоколууд дээр үндэслэн цуваа дэлгэц дээр хэрхэн хэвлэхээ өөрчлөх болно.

Алхам 5: Дүгнэлт

Хэрэв танд асуулт байгаа бол эндээс надтай холбоо бариарай! Би танд чадах чинээгээрээ туслахыг хичээж байгаадаа баяртай байна.

Та амьдралаа арай дээр болгохын тулд ашиглаж болох зүйлийг сурсан гэж найдаж байна!

-RB

Зөвлөмж болгож буй: