Სარჩევი:

უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი: 5 ნაბიჯი
უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი: 5 ნაბიჯი

ვიდეო: უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი: 5 ნაბიჯი

ვიდეო: უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი: 5 ნაბიჯი
ვიდეო: ტელევიზორის შეკეთება. 2024, ივლისი
Anonim
უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი
უნივერსალური ტელევიზია - არდიუინო, ინფრაწითელი

გამარჯობა! ამ სასწავლო ინსტრუქციაში მე გაჩვენებთ, თუ როგორ უნდა ააწყოთ და დააპროგრამოთ თქვენი უნივერსალური დისტანციური მართვის პულტი, რომელიც იმუშავებს უმეტესად ინფრაწითელი დისტანციური მართვის საშუალებით და ასევე "მოუსმენს" და გაშიფრავს ინფრაწითელ სიგნალს სხვადასხვა სხვა დისტანციური მართვის საშუალებით.

ცოტა რამ იმის შესახებ, რაც მე შთააგონა ამ დისტანციის მშენებლობაში - მე, როგორც თქვენგან უმეტესობას, მუდმივად ვკარგავ დისტანციურ დისტანციებს და ეს უბედურება საკმაოდ იმედგაცრუებულია, ასე რომ, მე ვფიქრობ, რომ მოვაგვაროთ ის! მე ავაშენე ეს დისტანციური და გონივრულად ჩავრთე იგი ჩემს მიერ მორგებულ საწოლის ჩარჩოში (მე ასევე ხის მუშები ვარ) - მე ვერ დავკარგავ პულტს, თუ ის ჩემი საწოლის ჩარჩოს ნაწილია!

მარაგები

რაც დაგჭირდებათ: -არდუინო გაერო ან ნანო - გარბენი შეიძლება განსხვავდებოდეს სხვა დაფებთან ერთად

-შედუღების გარეშე დაფა (ან გასაყიდი ზოლები, თუ გსურთ გახადოთ ის უფრო მუდმივი)

-სხვადასხვა ფერის და სიგრძის მავთულხლართები

- ერთჯერადი დაჭერის ღილაკები (5) (შეგიძლიათ დაამატოთ მეტი ღილაკი, მაგრამ თქვენ უნდა გამოიყენოთ ციფრული ქინძისთავები, რადგან ყველა ანალოგური ქინძისთავის გარდა გამოიყენება 1 - თქვენ უნდა დაათვალიეროთ, რომ დარწმუნდეთ, რომ სწორად იყენებთ გამწევი რეზისტორებს ან ჩამოწიეთ რეზისტორები და გააუქმეთ ღილაკები)

-10K Ohm რეზისტორი (5) (თუ გსურთ უფრო მეტი ღილაკი, დაგჭირდებათ მეტი)

-470 Ohm რეზისტორი (2)

-ინფრაწითელი LED

-წითელი LED

-ინფრაწითელი სენსორი (მე გამოვიყენე ნაწილის ნომერი VS1838B, თქვენ შეგიძლიათ გამოიყენოთ სხვა, უბრალოდ შეამოწმეთ ამოღება)

(სურვილისამებრ) Soldering რკინის, Solder, Solder Flux.

ნაბიჯი 1: შექმენით წრე:

წრის აგება
წრის აგება

1). მე ყოველთვის მინდა დავიწყო ჩემი კომპონენტების განლაგებით, რადგან ეს ყოველთვის ამოძრავებს პურის დაფაზე განლაგებას.

-დააჭირეთ ღილაკებს

-LEDS: წითელი LED და IR LED მიერთებულია ტანდემში, ასე რომ თქვენ შეგიძლიათ ნახოთ რას აკეთებს IR LED.

-სენსორი

2). რეზისტორები

- ხუთ 10K რეზისტორებს, რომლებიც ჩვენ მიმაგრებულია ღილაკებზე, ეწოდება "დაწევის ქვემოთ" რეზისტორები. ჩამოწიეთ რეზისტორები დარწმუნდით, რომ როდესაც ღილაკზე დაჭერილი არ არის, შესაბამისი არდუინოს პინი იღებს 0 ვოლტს (ან მინიმუმ მასთან ახლოს). ქვემოთ მოყვანილი რეზისტორების შესახებ დამატებითი ინფორმაციისთვის აქ არის სიღრმისეული სახელმძღვანელო:

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

ეს რეზისტორები შეიძლება სულაც არ იყოს საჭირო, მაგრამ თუ თქვენ იღებთ "მოჩვენების" ბიძგებს, ეს უფრო სავარაუდოა, რომ გამოწვეულია capacitive შეერთებით და რეზისტორების დაშლა ხელს უშლის ამას.

3). წრიული მავთულები

4). 5V და მიწის მავთულები

გამოიყენეთ მითითებული სურათი მითითებისთვის! ნუ შეგეშინდებათ მისი შეცვლა თქვენი საჭიროებისთვის!

ნაბიჯი 2: კოდი:

#მოიცავს const int RECV_PIN = 7; // IR სენსორი წაკითხვის pin int Button1 = A4; // Farthest Left int int Button2 = A3; // მე -2 მარცხნიდან int ღილაკი 3 = A2; // Middle int Button4 = A1; // მე -2 მარჯვნივ int ღილაკი 5 = A0; // ყველაზე შორს მარჯვნივ int LED = 3; // IR LED & წითელი LED int val = 0; // მნიშვნელობის შეცვლა IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results results;

void setup () {pinMode (Button1, INPUT); pinMode (ღილაკი 2, შეყვანა); pinMode (ღილაკი 3, შეყვანა); pinMode (ღილაკი 4, შეყვანა); pinMode (ღილაკი 5, შეყვანა); pinMode (LED, OUTPUT); სერიული.დაწყება (9600); irrecv.enableIRIn (); irrecv.blink13 (ჭეშმარიტი);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // ციფრული წაკითხვის ნაცვლად ანალოგური წაკითხვის გამოყენება ტყვეობის მოცულობის პრობლემების თავიდან ასაცილებლად. ასევე, ხელს უწყობს ღილაკების დენონსირებას. // 900 -ზე ანალოგის წაკითხვისას შესაძლებელია გარკვეული მნიშვნელობის მქონე ოთახის გადაადგილება, რაც იმას ნიშნავს, რომ ინფრა სიგნალი გაიგზავნება მაშინაც კი, თუ პინზე არ გამოიყენება 5V. // მაგრამ 900 არის საკმარისად მაღალი, რომ არ წაიკითხოს შეცდომით შეერთების capacitive შეფერხების გამო (100);} // RGB Strip On & Off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // მნიშვნელობის შეცვლა "i <3" - ში შეიცვლება სიგნალის დაუყოვნებლივ გამეორების რაოდენობა. ასე რომ "i <2" ორჯერ გაიმეორებს სიგნალს. // შეიძლება დაგჭირდეთ ამ ნომერზე თამაში, თუ თქვენი ტელევიზია არ რეაგირებს, ზოგადად, 1 ან 3 მუშაობს უმეტესად, თუ არა, სცადეთ კენტი რიცხვები. // თქვენ ასევე შეიძლება დაგჭირდეთ სიგნალის დაყოვნების დროის მნიშვნელობების თამაში, მაგალითად, ჩემი TV 10 – ის მუშაობისთვის, მაგრამ 30 არა. {irsend.sendSony (0xa90, 12); // Sony ტელევიზიის დენის კოდი, ჩემი ტელევიზიისათვის, კოდი უნდა გაიგზავნოს 3x3, ასე რომ 3 პულსი, სამჯერ ცალკე დაგვიანებით (10); // "სიგნალის შიდა შეფერხება" for (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 (& results)) // კოდის ქვემოთ მოცემული ნაწილი საშუალებას გაძლევთ ინტერპრეტირებული სიგნალების ინტერპრეტაცია სხვადასხვა დისტანციური მართვის საშუალებით. {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"); შესვენება; ნაგულისხმევი: შემთხვევა UNKNOWN: Serial.println ("UNKNOWN"); შესვენება;} irrecv.resume ();}}}

ნაბიჯი 3: კოდი სიღრმეში: IR სიგნალების გაგზავნა

მე ვიხსენებ კოდის ხაზებს მათი ხაზის ნომრით - ამის გასაგრძელებლად გამოიყენეთ ეს ბმული:

pastebin.com/AQr0fBLg

პირველ რიგში, ჩვენ უნდა შევიტანოთ IR დისტანციური ბიბლიოთეკა z3t0– ით.

აქ არის ბიბლიოთეკის ბმული:

github.com/z3t0/Arduino-IRremote

თუ გჭირდებათ სახელმძღვანელო, თუ როგორ უნდა ჩამოტვირთოთ ბიბლიოთეკა და დააინსტალიროთ ის IDE– ში:

www.arduino.cc/en/guide/libraries

სტრიქონი 1 მოიცავს ბიბლიოთეკას.

შემდეგი, ჩვენ უნდა გამოვაცხადოთ რამდენიმე ცვლადი, ხაზები 2-12 ამის გაკეთება.

ჩვენ ვიყენებთ "cost int" ცვლადების განსაზღვრისათვის, რომლებიც არ შეიცვლება, ყველა ერთის გარდა ამ კატეგორიაში.

ჩვენ ვიყენებთ "int" ცვლადების განსაზღვრისათვის, რომლებიც შეიცვლება.

ჩვენ უნდა გამოვიყენოთ პულსი იმპულსური მოდულაციით (PWM) ჩვენი LED პინისთვის - ნებისმიერი პინი, რომელსაც გვერდით აქვს ~, საკმარისი იქნება, ჩემს კოდში - ჩვენ ვიყენებთ ციფრულ პინ 3 -ს.

შემდეგი, ჩვენ უნდა გავაკეთოთ გარკვეული კონფიგურაცია - ეს კოდი იმუშავებს მხოლოდ ერთხელ, როდესაც Arduino ჩართულია ან გადატვირთულია.

გაითვალისწინეთ, რომ ჩვენ განვსაზღვრავთ ჩვენს შესასვლელსა და გამოსავალს (15-20), ვუშვებთ სერიულ მონიტორს (21), ვაძლევთ IR სენსორს (22) და ვეუბნებით არდუინოს, რომ აანთოს საბორტო LED ნებისმიერ დროს, როდესაც სიგნალს მივიღებთ სენსორში (23).

შემდეგი, ჩვენ განვავითარებთ ჩვენს მარყუჟს - ეს კოდი არაერთხელ გააქტიურდება, წამიდან ზემოდან ქვემოდან რამდენიმეჯერ.

25 -ე სტრიქონში ჩვენ ვიყენებთ if დებულებას, რომელიც არდუინოს ეუბნება: „ეძებე ეს კონკრეტული კრიტერიუმები, თუ ეს კრიტერიუმები დაკმაყოფილებულია, გააკეთე ეს კონკრეტული საქმე“. ამ შემთხვევაში კრიტერიუმები არის ანალოგური წაკითხვა (ღილაკი 1)> 900, ან სხვა სიტყვებით რომ ვთქვათ - "არდუინო, შეხედე ღილაკს 1, რომელიც ჩვენ ადრე განვსაზღვრეთ როგორც pin A4, თუ მიღებული ანალოგური სიგნალი 900 -ზე მეტია, გთხოვთ გააგრძელოთ ჩვენი შემდეგი ინსტრუქციები თუ არა, გთხოვთ გააგრძელოთ ". აქ ცოტა რამ არის გასახსნელი, ასე რომ, ჩავყვინთ: Arduino– ზე ანალოგური სიგნალი არის 5V– ის ტოლი ან ნაკლები, 5V უდრის 1023 და 0V უდრის 0. ნებისმიერი ძაბვა 0 -დან 5V- მდე შეიძლება განისაზღვროს რიცხვი და ცოტა მათემატიკა, ჩვენ შეგვიძლია გამოვთვალოთ ეს რიცხვი, ან პირიქით, ძაბვა. გაყავით 1024 (ჩვენ 0 -ს ერთეულად ჩავთვლით) 5 -ზე, რაც გვაძლევს 204.8 -ს. მაგალითად, ჩვენ ვიყენებთ რიცხვს 900, რომ ვთარგმნოთ ის ძაბვად, ჩვენ უბრალოდ ვყოფთ 900 -ს 204.8 -ზე, რაც გვაძლევს 4 4.4V. ჩვენ ვეუბნებით არდუინოს, მოძებნოთ ძაბვა greater 4.4 ვოლტზე მეტი და თუ არის, გააკეთეთ ჩვენი შემდეგი ინსტრუქცია.

მომდევნო ინსტრუქციებზე საუბრისას (სტრიქონი 25), ჩვენ ვხედავთ irsend.sendNEC (0xFF02FD, 32). ეს ამბობს "არდუინო, გაგზავნე მოდულირებული პულსი, რომელიც მიჰყვება NEC პროტოკოლს, კერძოდ FF02FD სიგნალს და დარწმუნდი, რომ მისი სიგრძეა 32 ბიტი". ეს გახდის ჩვენს IR LED ციმციმს ისე, როგორც სხვა მოწყობილობებს ესმით. ცოტა იფიქრეთ მორსეს კოდზე, მაგრამ მხოლოდ უხილავი შუქით! არსებობს უამრავი განსხვავებული პროტოკოლი, თითოეულს ასობით თუ არა ათასობით ინდივიდუალური სიგნალი და თითოეულს თავისი კონკრეტული ბიტ ნომერი - ჩვენი მოწყობილობა შეძლებს ამ სიგნალების დიდი რაოდენობის ამოცნობას, მაგრამ ჩვენ მოგვიანებით ჩავუღრმავდებით!

28 -ე ხაზზე, ჩვენ გვაქვს პირველი შეფერხება - ეს არის აქ, რათა თავიდან ავიცილოთ განმეორებითი სიგნალები, როდესაც ღილაკს დააჭერთ და IR სიგნალი გაიგზავნება, ჩვენ გვაქვს 100 მილიწამი, რომ თითი ამოვიღოთ ღილაკიდან. ეს არ ჟღერს ბევრ დროს, მაგრამ პრაქტიკაში, როგორც ჩანს, კარგად მუშაობს. შეფერხების ფუნქცია ეუბნება არდუინოს "არაფერი გააკეთო X მილიწამში" და ცნობისთვის, ეს არის 1000 მილიწამი წამში.

ჩვენ მივდივართ შემდეგ ღილაკზე 29 სტრიქონიდან, ღილაკი 5 (მე თავდაპირველად მქონდა 4 ღილაკი ამ პულტზე, დავამატე მეხუთე, ამიტომაც ვართ მწყობრიდან). ეს, სულისკვეთებით, იგივეა, რაც ღილაკი 1, მაგრამ რამდენიმე ძირითადი განსხვავებით. პირველი განსხვავება, რომელსაც ნახავთ არის განცხადება for - ეს არის არსებითად სხვა მარყუჟი - მარყუჟი სხვა უფრო დიდ მარყუჟში, loopception. კერძოდ, ჩვენ გვაქვს "for (int i = 0; i <3; i ++)", წაიკითხეთ ეს როგორც "არდუინო, დავიწყოთ 0 -დან, ვიმეორებთ შემდეგ ინსტრუქციებს სანამ არ მივაღწევთ 3 -ჯერ". For ფუნქცია გამოიყენება, რადგან ბევრი მოწყობილობა დაპროგრამებულია იმისათვის, რომ მოძებნოს განმეორებითი სიგნალი, და ჩვენს შემთხვევაში აქ, 3 ჯერ. თქვენ შეგიძლიათ უბრალოდ შეცვალოთ ნომერი 3 სხვა ნომრად, თუ თქვენი მოწყობილობა მოითხოვს გამეორების სხვა განრიგს. ღილაკ 5 -თან კიდევ ერთი მთავარი განსხვავება ის არის, რომ ის მეორდება ისევ, 3 ჯერ, ან 3x3. სხვა სიტყვებით რომ ვთქვათ, ჩვენ ვაგზავნით სიგნალს 3 ჯერ, ველოდებით 10 მილიწამს, ვგზავნით ისევ 3 ჯერ, ველოდებით კიდევ 10 მილიწამს და შემდეგ კვლავ ვგზავნით 3 ჯერ. ამ ტიპის კომუნიკაცია ხშირია მოწყობილობების ჩართვისა და გამორთვისთვის და შეიძლება იყოს ის, რასაც თქვენი ტელევიზია ან მოწყობილობა მოითხოვს - ამის გასაღები არის ყველა ცვლადთან თამაში, სანამ არ მიიღებთ სასურველ შედეგს. შეცვალეთ მოკლე შეფერხების მნიშვნელობა, შეცვალეთ განმეორებითი მნიშვნელობა, გაგზავნეთ 6 პარტია 3 -ის ნაცვლად და ა.შ. მოწყობილობები განზრახ არის დაპროგრამებული სიგნალის თვითნებური წესებით, წარმოიდგინეთ, თუ თქვენი ტელევიზორის დისტანციურმა ტელეფონმა გაუგზავნა იგივე ტიპის სიგნალი, როგორც თქვენს ხმოვან ზოლს; ყოველ ჯერზე, როდესაც არხს იცვლიდი ტელევიზორში, ხმის ბარი ითიშებოდა - სწორედ ამიტომ არსებობს სიგნალის განსხვავებული წესები.

მომდევნო სამი ღილაკი დაპროგრამებულია იმავე პრინციპებით, ნაწილობრივ მაინც, ზემოთ აღწერილი - ასე რომ ჩვენ შეგვიძლია გამოტოვოთ ბოლომდე 55 -ე ხაზამდე.

ნაბიჯი 4: კოდი სიღრმეში: IR სიგნალების მიღება

კოდი სიღრმეში: IR სიგნალების მიღება
კოდი სიღრმეში: IR სიგნალების მიღება

55 -ე სტრიქონში ჩვენ ვიწყებთ Arduino- ს პროგრამირებას სხვა დისტანციური მართვის საშუალებით გაგზავნილი IR სიგნალების ინტერპრეტაციით - ეს აუცილებელია, ასე რომ თქვენ შეგიძლიათ გაარკვიოთ ოქმები და სიგნალები, რომელსაც იყენებს თქვენი დისტანციური მართვის პულტი. 55 -ე სტრიქონის კოდის პირველი ხაზი არის თუ: ინფორმაცია "შედეგებში" ".

56 -ე ხაზზე გადასვლისას ჩვენ გვაქვს Serial.println (results.value, HEX) სადაც ნათქვამია "არდუნიო, დაბეჭდე შედეგები სერიულ მონიტორში HEX ფორმატში". Hex, რაც ნიშნავს თექვსმეტობითს, არის გზა, რომლის საშუალებითაც ჩვენ შეგვიძლია შევამციროთ ორობითი სტრიქონი (მხოლოდ 0 და 1), რაც ოდნავ ადვილია აკრეფა. მაგალითად, 101010010000 არის "a90", კოდი, რომელიც გამოიყენება ჩემი ტელევიზიის გამორთვისა და ჩართვისთვის, ხოლო 111111110000001011111101 არის 0xFF02FD, რომელიც აკონტროლებს ჩემს RGB ზოლს. თქვენ შეგიძლიათ გამოიყენოთ ზემოთ მოყვანილი დიაგრამა ორობითი ექვსკუთხედში და პირიქით, ან შეგიძლიათ გამოიყენოთ შემდეგი ბმული:

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

ქვემოთ 57 ხაზამდე, ჩვენ გვაქვს ახალი ფუნქცია, სახელწოდებით switch case.

არსებითად, გადართვის შემთხვევა გვაძლევს საშუალებას დავაკონკრეტოთ სხვადასხვა ინსტრუქცია მოცემული ცვლადის (შემთხვევის) შედეგების საფუძველზე. შესვენება გამოდის switch განცხადებიდან და გამოიყენება ყოველი განცხადების ბოლოს.

ჩვენ ვიყენებთ გადართვის საქმეს აქ შესაცვლელად, თუ როგორ ვბეჭდავთ სერიულ მონიტორზე პროტოკოლების საფუძველზე, რომელსაც ჩვენი Arduino გრძნობს სხვადასხვა დისტანციური პულტიდან.

ნაბიჯი 5: დასკვნა

თუ თქვენ გაქვთ შეკითხვა - გთხოვთ მოგერიდოთ დამიკავშირდით აქ! მოხარული ვარ, რომ მაქსიმალურად დაგეხმარებით.

ვიმედოვნებ, რომ თქვენ ისწავლეთ ისეთი რამ, რისი გამოყენებაც შეგიძლიათ თქვენი ცხოვრების გასაუმჯობესებლად!

-რბ

გირჩევთ: