ინფრაწითელი მიმღების დაკავშირება arduino-სთან. Arduino: ინფრაწითელი დისტანციური მართვა და მიმღები. ბიბლიოთეკები IR-თან მუშაობისთვის

ინფრაწითელი მიმღების დაკავშირება arduino-სთან. Arduino: ინფრაწითელი დისტანციური მართვა და მიმღები. ბიბლიოთეკები IR-თან მუშაობისთვის

  • შეყვანის ძაბვა: 4.0 ... 5.5 V (5 V ნომინალური)
  • დენის მოხმარება: 100 mA-მდე პულსის რეჟიმში (Vcc = 5 V)
  • სინათლის ტალღის სიგრძე: 940 ნმ (პიკური მნიშვნელობა)
  • სიგნალის მაქსიმალური სიხშირე: 10 MHz-მდე
  • გადაცემის მანძილი: 10 მ-მდე (Vcc=5V-ზე)
  • სამუშაო ტემპერატურა: -25 … 85 °C
  • მიმართულების კუთხე: 120° (ძაბვის დაკარგვით< 50%)

"Trema" ხაზის ყველა მოდული დამზადებულია იმავე ფორმატში

კავშირი:

მოსახერხებელია მოდულის დაკავშირება 3 გზით, სიტუაციიდან გამომდინარე:

მეთოდი - 1:სადენიანი კაბელის და Piranha UNO-ს გამოყენება

ბიბლიოთეკა იყენებს მეორე აპარატურულ ტაიმერს,

არ გამოუშვათ PWM სიგნალები 3 ან 11 გამომავალზე!

წაიკითხეთ მეტი ბიბლიოთეკის დაყენების შესახებ ჩვენს...

დამატებითი ინფორმაცია მოდულთან მუშაობის შესახებ:

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

საინფორმაციო პაკეტების რაოდენობადისტანციური მართვის უმეტესობას აქვს ერთი, მაგრამ ზოგიერთი მოწყობილობა, როგორიცაა კონდიციონერი, იყენებს 2, 3 ან მეტ საინფორმაციო პაკეტს.

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

პაუზის ხანგრძლივობა პაკეტებს შორის:ჩვეულებრივ არ აღემატება 200 ms.

მონაცემთა გადაცემის პროტოკოლები:განსაზღვრეთ შემდეგი ძირითადი პარამეტრები:

გადამყვანის სიხშირე:დისტანციური მართვის უმეტესობისთვის ეს არის 38 kHz, სწორედ ამ სიხშირეზეა მორგებული Trema IR მიმღები.

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

დაწყების, გაჩერების და გადართვის სიგნალები:მათი სახელის მიხედვით, ისინი განლაგებულია პაკეტის დასაწყისში, ბოლოს ან შუაში.

შეჩერება:ხანგრძლივი პაუზის კოდირებისას შეუძლებელია პაკეტში ბოლო ბიტის მნიშვნელობის დადგენა, რადგან პაკეტს მოჰყვება ხანგრძლივი პაუზა და ბოლო ბიტი ყოველთვის იქნება განსაზღვრული როგორც "1", ამიტომ ემატება Stop სიგნალი. პაკეტს, რომელიც არის პულსი, რომელიც არ ატარებს ინფორმაციას.

დაწყება:ორფაზიანი კოდირებით, საჭიროა დაწყების სიგნალი, რადგან შეუძლებელია პაკეტის გადაცემის დაწყება პაუზიდან.

გადართვა:ეს არის ცოტა, რომელიც ცვლის თავის მნიშვნელობას ყოველი ახალი ღილაკის დაჭერით, რომელიც გამოიყენება RS5, RS5X, RS6 (Philips) პროტოკოლებში, სადაც განმეორებითი პაკეტები მთლიანად იმეორებენ ინფორმაციის პაკეტის მონაცემებს. ამ გზით მიმღებ მოწყობილობას შეუძლია განასხვავოს ღილაკის დაჭერა და ხელახლა დაჭერა.

პულსის სიგრძის კოდირება- ჯერ გადაიცემა პულსი, რომლის სიგრძე დამოკიდებულია გადაცემული ბიტის მნიშვნელობაზე, შემდეგ მოდის პაუზა, რომლის ხანგრძლივობა არ არის დამოკიდებული ბიტის მნიშვნელობაზე. მაგალითად: SIRC პროტოკოლში (Sony), პულსის სიგრძე ბიტისთვის "1" = 1200 μs, ხოლო ბიტისთვის "0" = 600 μs, პაუზების სიგრძე ყოველთვის არის 600 μs. ამ გზით თქვენ შეგიძლიათ განასხვავოთ "1" "0"-დან პულსის სიგრძით.

პაუზის სიგრძის კოდირება- ჯერ გადაიცემა პულსი, რომლის სიგრძე არ არის დამოკიდებული გადაცემული ბიტის მნიშვნელობაზე, რასაც მოჰყვება პაუზა, რომლის სიგრძე დამოკიდებულია ბიტის მნიშვნელობაზე. მაგალითად: NEC პროტოკოლში, პაუზის სიგრძე ბიტისთვის „1“ = 1687,5 μs, ხოლო ბიტისთვის „0“ = 562,5 μs, პულსის სიგრძე ყოველთვის არის 562,5 μs. ამრიგად, თქვენ შეგიძლიათ განასხვავოთ "1" "0"-დან პაუზის სიგრძით.

ორფაზიანი კოდირება- პულსის სიგრძე უდრის პაუზის ხანგრძლივობას და მათი თანმიმდევრობა განსაზღვრავს გადაცემული ბიტის ტიპს. მაგალითად: RS5 პროტოკოლში (Philips), "1" ბიტისთვის პულსი მიჰყვება პაუზას, ხოლო ბიტისთვის "0" პაუზა მიჰყვება პულსს. NRC პროტოკოლისთვის (Nokia), პირიქით, ბიტისთვის "1" პაუზა მიჰყვება პულსს, ხოლო ბიტისთვის "0" პულსი პაუზას მოსდევს.

მაგალითები:

მონაცემთა ერთჯერადი გადაცემა:

#შეიცავს // დააკავშირეთ ბიბლიოთეკა IR გადამცემთან მუშაობისთვის iarduino_IR_TX VD(10); // გამოაცხადეთ VD ობიექტი, მიუთითეთ პინი, რომელზეც არის დაკავშირებული IR გადამცემი void setup())( VD.begin(); // დაიწყეთ მუშაობა IR გადამცემთან VD.send(0x00FFA25D); // გაგზავნეთ კოდი 0x00FFA25D ერთხელ , პაკეტების გამეორების გარეშე ) void loop()() // Arduino გამოგიგზავნით კოდს 0x00FFA25D, რაც მიუთითებს, რომ ის ჩართულია

მონაცემთა გადაცემა ხელახალი პაკეტებით:

#შეიცავს // ბიბლიოთეკის დაკავშირება IR გადამცემთან მუშაობისთვის iarduino_IR_TX VD(2); // გამოაცხადეთ VD ობიექტი, მიუთითეთ პინი, რომელზედაც დაკავშირებულია IR გადამცემი void setup())( pinMode(3,INPUT); // დააკონფიგურირეთ pin 3, რომელსაც ღილაკი უკავშირდება, როგორც შეყვანის pinMode(4, INPUT // Configure 4 pin, რომელზედაც არის დაკავშირებული ღილაკი, როგორც შეყვანის pinMode(5,INPUT) მუშაობის დაწყება IR გადამცემთან ) void loop())( if(digitalRead(3))(VD.send(0x00FFA25D, true);) // თუ დაჭერილია ღილაკი, რომელიც დაკავშირებულია პინ 3-თან, მაშინ ვაგზავნით კოდს 0x00FFA25D, და როდესაც ის შეჩერებულია, ჩვენ ვაგზავნით განმეორებით პაკეტებს, რადგან ფუნქცია გამოიძახეს ჭეშმარიტი პარამეტრით if(digitalRead(4))(VD.send(0x00FF629D, true);) // თუ დაჭერილია 4 პინთან დაკავშირებული ღილაკი , შემდეგ ჩვენ ვაგზავნით კოდს 0x00FF629D და როდესაც ის შეჩერებულია, ვაგზავნით განმეორებით პაკეტებს, რადგან ფუნქცია გამოიძახეს ჭეშმარიტი პარამეტრით if(digitalRead(5))(VD.send(0x00FFE21D, true);) // თუ დააჭირეთ პინ 5-თან დაკავშირებულ ღილაკს, შემდეგ ვაგზავნით კოდს 0x00FFE21D და როდესაც ის შეჩერებულია, ვაგზავნით განმეორებით პაკეტებს, რადგან ფუნქცია გამოიძახეს ჭეშმარიტი პარამეტრით)

მონაცემთა გადაცემა პროტოკოლის მითითებით:

#შეიცავს // დააკავშირეთ ბიბლიოთეკა IR გადამცემთან მუშაობისთვის iarduino_IR_TX VD(5); // გამოაცხადეთ VD ობიექტი, მიუთითეთ პინი, რომელზეც არის დაკავშირებული IR გადამცემი void setup() ( VD.begin(); // დაიწყეთ მუშაობა IR გადამცემთან pinMode(6,INPUT); // დააკონფიგურირეთ პინი 6, რომელზეც ღილაკი, როგორც შეყვანის pinMode(7,INPUT // დააკონფიგურიროთ პინი 7, რომელზედაც არის დაკავშირებული ღილაკი, როგორც შეყვანის pinMode(8,INPUT) შეყვანა VD.protocol("AeQQV" ~zK]Kp^KJp[@@@@@@@@Bp"); // მიუთითეთ მონაცემთა გადაცემის პროტოკოლი ELENBERG დისტანციური მართვისგან) // შეგიძლიათ მიიღოთ პროტოკოლის ხაზი რომელიმეზე დაჭერით ღილაკი ტელევიზორის დისტანციურ მართვაზე // და გამოძახება მიმღების ფუნქციის ამავე სახელწოდების, პარამეტრების გარეშე void loop())( if(digitalRead(4))(VD.send(0x417, true);) // გაგზავნეთ ON/ OFF სიგნალი (განმეორებითი პაკეტებით, პაკეტები მეორდება პროტოკოლში მითითებული დროის ინტერვალის შემდეგ) if(digitalRead(5) )(VD.send(0x425, true);) // გაგზავნეთ VOL- სიგნალი (განმეორებითი პაკეტებით, პაკეტებით მეორდება პროტოკოლში მითითებული დროის ინტერვალის შემდეგ) if(digitalRead(6))(VD.send(0x427);) // გაგზავნეთ VOL+ სიგნალი (გამეორების პაკეტების გარეშე, ხმა უფრო სწრაფად გაიზრდება, რადგან ფუნქცია გამოძახებულია მარყუჟი ინტერვალების გარეშე) )

ეს მაგალითი გვიჩვენებს, თუ როგორ შეუძლია გადამცემს სრულად მოახდინოს სხვა IR დისტანციური მართვის სიგნალების სიმულაცია.

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

ბიბლიოთეკის ძირითადი ფუნქციების აღწერა:

ბიბლიოთეკის დაკავშირება:

#შეიცავს // დააკავშირეთ ბიბლიოთეკა IR გადამცემთან მუშაობისთვის. iarduino_IR_TX VD(PIN_NO[,INVERSION]); // გამოაცხადეთ VD ობიექტი, მიუთითეთ პინის ნომერი, რომელზეც არის დაკავშირებული IR გადამცემი.

// მეორე პარამეტრი, ტიპის bool, შეიძლება მიუთითებდეს, რომ გადამცემის მონაცემები უნდა იყოს შებრუნებული.

  • ფუნქცია start();
  • მიზანი: IR გადამცემთან მუშაობის ინიციალიზაცია
  • სინტაქსი: begin();
  • პარამეტრები: არცერთი.
  • დაბრუნების მნიშვნელობები: არცერთი.
  • შენიშვნა: დარეკვა ერთხელ დაყენების კოდში.
მაგალითი:

VD.begin(); // IR გადამცემთან მუშაობის დაწყება

  • ფუნქცია send();
  • მიზანი: მონაცემთა გადაცემა.
  • სინტაქსი: გაგზავნა (DATA [, HOLD ]);
    • პარამეტრები:
    • DATA - კოდი, როგორიცაა uint32_t, რომელიც უნდა გადაიცეს;
  • პარამეტრები: არცერთი.
  • შენიშვნა: თუ ფუნქცია გამოიძახება HOLD პარამეტრის გარეშე, ან უდრის false-ს, მაშინ ფუნქცია, ყოველ ჯერზე მისი გამოძახებისას, ერთხელ გადასცემს მითითებულ კოდს. თუ ფუნქცია გამოიძახება HOLD პარამეტრით, რომელიც ტოლია true-ს, მაშინ ფუნქცია წყვეტს ღილაკს და აგზავნის ხელახლა ცდის პაკეტებს (პროტოკოლში მითითებულ ინტერვალში), როდესაც ის შეჩერებულია.
  • შენიშვნა: დარეკვა ერთხელ დაყენების კოდში.
VD.send(0xCCDDEEFF); // კოდის გაგზავნა 0xCCDDEEFF. თუ ფუნქცია გამოძახებულია მუდმივად, მარყუჟში, მაშინ ის ამ კოდს ყოველ ჯერზე გაგზავნის. VD.send(0xCCDDEEFF, true); // კოდის გაგზავნა 0xCCDDEEFF. თუ ფუნქცია გამოძახებულია მუდმივად, მარყუჟში, მაშინ ის კოდს მხოლოდ პირველად გამოაგზავნის, შემდეგ კი გაგზავნის განმეორებით პაკეტებს მონაცემთა გადაცემის მითითებული პროტოკოლის შესაბამისად.

ფუნქციის პროტოკოლი();

  • მიზანი: მონაცემთა გადაცემის პროტოკოლის დაყენება.
  • სინტაქსი: პროტოკოლი (STRING);
  • სინტაქსი: გაგზავნა (DATA [, HOLD ]);
    • LINE - შედგება 25 პროტოკოლის სიმბოლოსგან + ხაზის ბოლო სიმბოლოსგან. ამ სტრიქონის მიღება შესაძლებელია ამავე სახელწოდების ფუნქციის მიმღებისთვის პარამეტრების გარეშე გამოძახებით.
  • დააბრუნეთ მნიშვნელობები: bool - სტრიქონი შეიცავს პროტოკოლის სწორ მონაცემებს თუ არა.
  • შენიშვნა: ფუნქცია ადგენს მონაცემთა გადაცემის პროტოკოლს, ასე რომ IR გადამცემს შეუძლია ჩვეულებრივი დისტანციური მართვის სიგნალების სიმულაცია. ამ ფუნქციის გამოძახების შემდეგ მონაცემთა გადაცემა send() ფუნქციის გამოყენებით განხორციელდება ახალი პროტოკოლის გამოყენებით. მონაცემთა გადაცემის ნაგულისხმევი პროტოკოლი შეესაბამება "Car mp3" დისტანციურ კონტროლს.
  • შენიშვნა: დარეკვა ერთხელ დაყენების კოდში.
VD.პროტოკოლი ("AeQQV~zK]Kp^KJp[@@@@@@@Bp"); // მიუთითეთ მონაცემთა გადაცემის პროტოკოლი ELENBERG დისტანციური მართვისგან.

// ახლა გადამცემი გაგზავნის მონაცემებს, დაშიფრავს მას, მითითებული პროტოკოლის შესაბამისად.

  • // პროტოკოლის სტრიქონის მიღება შეგიძლიათ ტელევიზორის დისტანციური მართვის ნებისმიერ ღილაკზე დაჭერით და IR მიმღებისთვის ამავე სახელწოდების ფუნქციის დარეკვით, პარამეტრების გარეშე.
  • სიხშირის ცვლადი:
  • მნიშვნელობა: ადგენს მონაცემთა გადაცემის მატარებლის სიხშირეს kHz-ში;
მონაცემთა ტიპი: uint8_t;

შენიშვნა: თუ ცვლადს არ ენიჭება მნიშვნელობა, მაშინ გადაცემა ხორციელდება პროტოკოლში მითითებული სიხშირით. თუ თქვენ მიუთითებთ 0 მნიშვნელობას, მაშინ მონაცემები გადაეცემა მოდულაციის გარეშე.

  • VD.სიხშირე=36; // დააყენეთ გადამზიდავი სიხშირე მონაცემთა გადაცემისთვის 36 kHz-ზე. VD.send(0xCCDDEEFF); // მონაცემების გაგზავნა გადამზიდავი სიხშირით 36 kHz. VD.send(0xABCDEF); // მონაცემების გაგზავნა გადამზიდავი სიხშირით 36 kHz.
  • განათების ჩართვა/გამორთვა, გათბობა, ვენტილაცია, მორწყვა და ა.შ.
  • კარების გაღება/დახურვა, ჟალუზები, სახურავის ფანჯრები, ვენტილატორები და ა.შ.

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

სიზარმაცე არის თვისება, რომელიც გვაიძულებს, დიდი ძალისხმევა შევამციროთ ენერგიის საერთო ხარჯები.

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

ძირითადი საკომუნიკაციო არხები მოიცავს:

  • რადიო არხი
  • ულტრაბგერითი
  • ინფრაწითელი

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

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

ამ მიმღების დაშლის შემდეგ დავინახე რაღაც ხრიკი ამ „თვალში“ 4 IR მიმღები იყო შედუღებული. ეს გაკეთდა იმისათვის, რომ მიეღო IR ტალღები ოთხი მხრიდან. და ეს მოსახერხებელია, თქვენ არ გჭირდებათ საკუთარი თავის შეზღუდვა გარკვეული მიღების კუთხით.

მეც დავხატე მსგავსი წრე ოთხი მიმღებით, თუ დამჭირდებოდა. მე გამოვიყენე TSOP1836 IR მიმღებები, მაგრამ შეგიძლიათ გამოიყენოთ სხვა. 360 გრადუსიანი მიღების უზრუნველსაყოფად, თქვენ უნდა აირჩიოთ შესაბამისი IR მიმღები (მიღების ფართო კუთხით) და მოათავსოთ ისინი ერთმანეთთან რაც შეიძლება ახლოს. მე ვერ შევამჩნიე რაიმე პრობლემა ჩემს მიმღებებთან. მე ასევე ჩავრთე ბეჭდური მიკროსქემის დაფა და ელემენტების მდებარეობა დანართში.

ბრძანებების დასამუშავებლად ბუნებრივად გამოვიყენებ arduino uno-ს, შემიძლია გამოვიყენო IR როგორც მიმღები
TSOP34836 (აქვს მიღების მაღალი დიაპაზონი, მაგრამ უფრო ძვირია) ან TL1838. თქვენ შეგიძლიათ აიღოთ ნებისმიერი IR პულტი, თუნდაც ტელევიზორიდან. კარგად, თუ გჭირდებათ საკუთარი დისტანციური მართვის პულტი, შეგიძლიათ შეიძინოთ ნაკრები arduino-სთვის.

მუშაობის პრინციპი:
დისტანციური მართვის ღილაკზე დაჭერისას ის აგზავნის ღილაკის კოდს ინფრაწითელ შუქზე, რის შემდეგაც მიმღები იღებს ამ ღილაკის კოდს და აგზავნის მას აქტუატორთან, რომელიც ღილაკიდან გამომდინარე შეასრულებს გარკვეულ მოქმედებას.

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

arduino IR სიგნალების მისაღებად, ჩვენ დავუკავშირებთ IR მიმღებს შემდეგნაირად:

გთხოვთ გაითვალისწინოთ, რომ მიმღების ფეხების მდებარეობა შეიძლება განსხვავდებოდეს.


მიმღებს აქვს 3 ფეხი, "+" და "-" კვების წყარო (ძირითადად ძაბვა 3.3-5V) და მონაცემთა ფეხი არის ის, რაც გადასცემს ინფორმაციას მოწყობილობას (ჩვენს შემთხვევაში, arduino). TSOP34836-ის მიწოდების ძაბვა არის 2.7-5.5 ვოლტი. გამოვიყენებ 5 ვოლტს სტანდარტული არდუინოს გამომავალიდან.

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

#შეიცავს int RECEIVE_PIN = 11;//მიმღების კონტაქტი int RELAY_PIN = 3;//რელე კონტაქტი IRrecv irrecv(RECEIVE_PIN);//მიმღების პინის მინიჭება decode_results შედეგები;//მიღებული მონაცემები

void setup() (
Serial.begin(9600);
irecv.enableIRIn(); // ჩართეთ მიმღები
pinMode (RELAY_PIN, OUTPUT); // რელეს კონფიგურაცია გამოსავალზე
ციფრული ჩაწერა (RELAY_PIN,HIGH); //დააყენეთ მნიშვნელობა მაღალი
}

void loop() (
if (irrecv.decode(&results)) (//თუ მონაცემები მიღებულია
Serial.print ("0x");
Serial.println(results.value, HEX);//მიღებული შეტყობინების გამოტანა ტერმინალში
if ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF)) digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));//თუ ღილაკის კოდი საპირისპიროა 0x8FF40BF ან 0xB0F ასახელებს ხელახლა შესაცვლელად
დაგვიანებით(200)
irrecv.resume();// მიიღეთ შემდეგი მნიშვნელობა
}
}

ნება მომეცით ავხსნა ცოტა ესკიზით:



if ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF))

შედეგად მიღებული მნიშვნელობა შედარებულია "0x8FF40BF" და "0xD72040BF" - ეს არის ღილაკების კოდები თექვსმეტობითი აღნიშვნით. ორი მნიშვნელობა მხოლოდ იმიტომ, რომ მე ვიყენებ ორი დისტანციური მართვის უნიკალური კოდებით.



digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));

ციფრული პინით ჩაწერის სტანდარტული პროცედურა გარდა "!digitalRead(RELAY_PIN)". მოაწერე "!" აღნიშნავს ინვერსიას, ჩვენს შემთხვევაში ციფრული გამომავალი "RELAY_PIN" მდგომარეობის ინვერსიას.



Serial.print ("0x");
Serial.println(results.value, HEX);//მიღებული შეტყობინების გამოტანა ტერმინალში

ეს ხაზები აგზავნის ყველა მიღებულ კოდს ტერმინალში. სამუშაო პროგრამაში ეს არ არის აუცილებელი, მაგრამ აუცილებელია კონკრეტული ღილაკისთვის საჭირო კოდის გარკვევა. ანუ ჯერ ავტვირთავთ ესკიზს Arduino-ში, მივდივართ ტერმინალში და ღილაკზე დაჭერით მივიღებთ სასურველ კოდს.


ასევე არსებობს რამდენიმე განსხვავებული მაგალითი IRremote ბიბლიოთეკაში, რომლებიც შეიძლება სასარგებლო იყოს.


სტატიის დანართში:


  • ესკიზი არდუინოსთვის

  • PCB 4 სენსორისთვის

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

როგორ მუშაობს ეს

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

რა გვჭირდება

  • არდუინო(ან ანალოგებს, მე ვიყენებ ტოსდუინო- 2-ჯერ იაფი, სრულად თავსებადია ჩვეულებრივ არდუინოსთან)
  • LED ( LED)
  • 220 kOhm რეზისტორი
  • IR მიმღები სერიიდან

კავშირი

IR მიმღები

LED

არდუინო პურის დაფა არდუინო
პინი ნომერი 11 რეზისტორი 220 kOhm GND (GrouND)

IR ტექნოლოგია

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

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

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

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

ნაწილი გადამზიდავი სიხშირე
30 kHz
33 kHz
36 kHz
36.7 kHz
38 kHz
40 kHz
56 kHz

IRremote.h

ჩამოტვირთეთ ბიბლიოთეკა IR დისტანციურიშეგიძლიათ ჩემი საცავიდან Github.com-ზე

ამ ბიბლიოთეკის დასაყენებლად დააკოპირეთ არქივის შიგთავსი: arduino-1.x/libraries/IRremote სადაც arduino-1.x არის საქაღალდე, სადაც არის დაინსტალირებული Arduino-1.x/libraries/IRremote /IRremote.cpp ხელმისაწვდომი უნდა იყოს და IRremote.h

მაგალითი No1 - ვიღებთ დისტანციური მართვის ღილაკის კოდს

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

#შეიცავს int RECEIVE_PIN = 2; IRrecv irecv(RECEIVE_PIN); გაშიფვრის_ შედეგების შედეგები; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); // გაუშვით მიმღები ) void loop() (if (irrecv.decode(&results)) ( Serial.print("0x"); Serial. println(results.value, HEX delay(50);// მიიღეთ შემდეგი მნიშვნელობა )

მე გამოვიყენებ ამ ღილაკების კოდებს ყველა შემდეგ მაგალითში:

მაგალითი No2 - დისტანციური მართვის ღილაკისთვის სახელის მინიჭება

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

#შეიცავს int RECEIVE_PIN = 2; IRrecv irecv(RECEIVE_PIN); გაშიფვრის_ შედეგების შედეგები; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() (if (irrecv.decode(&results)) ( switch (results.value) (შემთხვევა 0x77E1A0CB: Serial.println( "Center" ;;;; 0x77E130CB: Serial.println("Down");

მაგალითი No3 - ჩართეთ LED დისტანციური მართვის ღილაკის გამოყენებით

ახლა ვასწავლოთ ჩვენი არდუინოჩართეთ LED PIN 11-ზე დისტანციური მართვის ღილაკის საშუალებით

#შეიცავს int LED = 11; int მდგომარეობა = 0; // 0 = LED გამორთულია, ხოლო 1 = LED ჩართული int RECEIVE_PIN = 2; IRrecv irecv(RECEIVE_PIN); გაშიფვრის_ შედეგების შედეგები; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED, OUTPUT); ) void loop() (if ((irrecv.decode(&results)) && (results.value==0x77E1A0CB) ) ( if (state == 0) (state = 1; digitalWrite(LED, HIGH); Serial.println("Center - HIGH"); ) else (state = 0; digitalWrite(LED, LOW); Serial.println( "Center - LOW");

მაგალითი No4 - PWM დისტანციური მართვის საშუალებით

ახლა მოდით გავაკონტროლოთ ჩვენი LED-ის სიკაშკაშე (რადგან ის დაკავშირებულია პორტ 11-თან, რომელსაც აქვს PWM, პრობლემები არ უნდა იყოს). სიკაშკაშის გასაკონტროლებლად გამოყენებული იქნება დისტანციური მართვის ღილაკები ზემოთ და ქვემოთ.

#შეიცავს int RECEIVE_PIN = 2; int სიკაშკაშე = 0; int LED = 11; IRrecv irecv(RECEIVE_PIN); გაშიფვრის_ შედეგების შედეგები; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() (if (irrecv.decode(&results)) ( switch (results.value) (შემთხვევა 0x77E150CB: if (სიკაშკაშე< 255) { brightness+=15; Serial.println(brightness); } break; case 0x77E130CB: if(brightness >0) ( სიკაშკაშე-=15; Serial.println(სიკაშკაშე); ) break;

) analogWrite (LED, სიკაშკაშე);

irrecv.resume();

))

ინფრაწითელი გამოსხივების მიმღებები დღეს ფართოდ გამოიყენება საყოფაცხოვრებო ტექნიკაში ხელმისაწვდომი ფასის, სიმარტივისა და გამოყენების სიმარტივის გამო. ეს მოწყობილობები საშუალებას გაძლევთ მართოთ მოწყობილობები დისტანციური მართვის გამოყენებით და შეგიძლიათ იპოვოთ თითქმის ნებისმიერი ტიპის მოწყობილობაში. მაგრამ ამის მიუხედავად, Bluetooth მოდული თანდათან უფრო და უფრო მეტ პოპულარობას იძენს.

IR მიმღების მუშაობის პრინციპი. დისტანციური მართვის სიგნალის დამუშავება

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

ინფრაწითელი გამოსხივების ზემოქმედებით ფოტოდიოდში, რომელსაც შორის გვდა რეგიონებმა შექმნეს ნახევარგამტარის დამატებითი რეგიონი ( მე-რეგიონი), დენი იწყებს დინებას. სიგნალი მიდის გამაძლიერებელზე, შემდეგ კი გამტარ ფილტრზე, რომელიც მორგებულია ფიქსირებულ სიხშირეზე: 30; 33; 36; 38; 40 და 56 კილოჰერცი და იცავს მიმღებს ჩარევისგან. ჩარევა შეიძლება გამოიწვიოს ნებისმიერი საყოფაცხოვრებო ტექნიკით.

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

როგორ დააკავშიროთ IR მიმღები Arduino-სთან

ინფრაწითელი მიმღების კორპუსები შეიცავს ოპტიკურ ფილტრს მოწყობილობის გარე ელექტრომაგნიტური ველებისგან დასაცავად. IR მიმღების Arduino UNO-სთან დასაკავშირებლად გამოიყენება სამი ფეხი, რომლებიც დაკავშირებულია - GND, 5V და A0. ჩვენ გირჩევთ გამოიყენოთ 3.3 ვოლტი დასაწყებად, რათა არ დაიწვას IR სენსორი დაყენების დროს.

ამ გაკვეთილისთვის დაგვჭირდება შემდეგი დეტალები:

  • Arduino Uno / Arduino Nano / Arduino Mega board;
  • breadboard;
  • IR მიმღები;
  • დისტანციური მართვა;
  • 1 LED და 220 Ohm რეზისტორი;
  • მამრობითი მამრობითი და მამრობითი მდედრობითი სქესის მავთულები.


IR მიმღების დაკავშირების დიაგრამა Arduino ანალოგურ პორტთან

შეაერთეთ IR მიმღები ზემოთ ნაჩვენები სქემის მიხედვით და დააკავშირეთ LED-ები 12 და 13 ქინძისთავებს. პროგრამის ჩამოტვირთვამდე დაგჭირდებათ IRremote.h ბიბლიოთეკის ინსტალაცია, თუ ის უკვე არ არის დაინსტალირებული. ეს ბიბლიოთეკა არ ეკუთვნის Arduino IDE პროგრამირების გარემოს სტანდარტულ ბიბლიოთეკებს. შეგიძლიათ ჩამოტვირთოთ IRremote.h ბიბლიოთეკა და დასრულებული ესკიზი ერთ არქივში Google Drive-დან ბმულის გამოყენებით.

ესკიზი Arduino IR მიმღებისთვის:

#შეიცავს // დააკავშირეთ ბიბლიოთეკა IR მიმღებისთვის IRrecv irecv(A0); // მიუთითეთ პინი, რომელზეც არის დაკავშირებული IR მიმღებიგაშიფვრის_ შედეგების შედეგები; void setup () // პროცედურის დაყენება ( irrecv.enableIRIn (); // დაიწყე ინფრაწითელი სიგნალის მიღება pinMode (13, OUTPUT); // პინი 13 იქნება გამოსავალი pinMode (12, OUTPUT); // პინი 12 იქნება გამოსავალი pinMode (A0, INPUT); // pin A0 იქნება შემავალი (ინგლ. "input") Serial.begin(9600); // დააკავშირეთ პორტის მონიტორი) void loop () // პროცედურის ციკლი ( if (irrecv.decode (&results)) // თუ მონაცემები მოვიდა, შეასრულეთ ბრძანებები( Serial .println(results.value); // მიღებული მონაცემების გაგზავნა პორტში // ჩართეთ და გამორთეთ LED-ები, მიღებული სიგნალის მიხედვით if (results.value == 16754775) ( digitalWrite (13, HIGH); ) if (results.value == 16769055) ( digitalWrite (13, LOW); ) if (results.value == 16718055) ( digitalWrite (12, HIGH ) if (results.value == 16724175) ( digitalWrite (12, LOW ); ) irrecv.resume (); // მიიღეთ შემდეგი სიგნალი IR მიმღებზე } }

ახსნა კოდისთვის:

  1. IRremote.h ბიბლიოთეკა შეიცავს ბრძანებების ერთობლიობას და საშუალებას გაძლევთ გაამარტივოთ ესკიზი;
  2. decode_results განცხადება ანიჭებს ცვლადის სახელს შედეგებს დისტანციური მართვის მიღებულ სიგნალებს.

IR სენსორი შეიძლება გამოყენებულ იქნას Arduino მიკროკონტროლერზე არსებულ ბევრ მოწყობილობაში, მათ შორის დისტანციური მართვის სერვო დისკი Arduino-ზე IR მიმღებიდან. დაყენებისას უნდა ჩართოთ Arduino IDE პორტის მონიტორი და გაარკვიოთ რა სიგნალს იგზავნება დისტანციური მართვის ესა თუ ის ღილაკი. მიღებული კოდები უნდა იქნას გამოყენებული ესკიზში if() პირობებში ორმაგი ტოლობის ნიშნის შემდეგ.

პოსტები ამ თემაზე:


IR Receiver მოდული IR დისტანციურ მართვასთან ერთად საშუალებას მოგცემთ მარტივად განახორციელოთ Arduino დაფის დისტანციური მართვა.

ეს სხვა არაფერია, თუ არა VS1838B IR მიმღები დაფაზე დამონტაჟებული მწარმოებლის მიერ რეკომენდებული აღკაზმულობა.

ამ მოდულთან მუშაობისთვის საჭიროა დისტანციური მართვის პულტი 38 kHz სიხშირით.

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

ძირითადი ტექნიკური მახასიათებლები:

მიწოდების ძაბვა: 2.7 - 5.5V

მოდულაციის სიხშირე: 38 kHz

ტემპერატურის დიაპაზონი: - 20 ... + 80°C

ინტერფეისი: ციფრული

დაკავშირება Arduino-სთან

მოდული აღჭურვილია სამი პინიანი 2.54 მმ კონექტორით

: უერთდება GND პინს

: უერთდება +5V გამომავალს

: აკავშირებს ციფრულ პინთან (მაგალითად D2)

არდუინოს გარემოში მუშაობის მაგალითი

ამ მოდულთან მუშაობისთვის საჭიროა დააინსტალიროთ IRremote ბიბლიოთეკა

ჩამოტვირთეთ, ამოალაგეთ და განათავსეთ ბიბლიოთეკების საქაღალდეში Arduino საქაღალდეში. თუ Arduino IDE ღია იყო ბიბლიოთეკის დამატების დროს, გადატვირთეთ გარემო.

დისტანციური მართვის ღილაკების კითხვა

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

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

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

კოდის ნიმუში:

#შეიცავს int RECV_PIN = 2; IRrecv irecv(RECV_PIN); //კონკრეტული პორტიდან სიგნალის მისაღებად ობიექტის შექმნაგაშიფვრის_ შედეგების შედეგები; //შედეგის შენახვა ცვლადიბათილად დაყენება () { სერიალი // დაწყება მიღება) ბათილად მარყუჟი() ( if (irrecv.decode(& შედეგები)) //სიგნალის მიღებისას... { სერიალი.println(results.value); //...გაიტანეთ მისი მნიშვნელობა სერიულ პორტში irrecv.resume();

))

თქვენ უნდა ნახოთ შემდეგი პორტის მონიტორზე:

ყოველი ღილაკის დაჭერით თითქმის წამით ვიღებთ დაახლოებით 10 კოდს. პირველი არის ღილაკის კოდი. და ამის შემდეგ იწყება სტანდარტული კოდის გამოჩენა, რომელიც იტყობინება, რომ ღილაკი გაჩერებულია.

Arduino დაფის მართვა დისტანციური მართვის საშუალებით

კოდის ნიმუში:

მოდით, არდუინოს დაფაზე (D13) LED აანთოთ პირველი ღილაკის დაშიფვრისას და გამორთოთ მეორე ღილაკის დაშიფვრისას.// დატესტილია Arduino IDE 1.0.3-ზე #შეიცავს დაყენება () { სერიალი int RECV_PIN = 2; int LED = 13; IRrecv irecv(RECV_PIN); გაშიფვრის_ შედეგების შედეგები; ბათილად .begin(9600); irecv.enableIRIn(); მარყუჟი// გაუშვით მიმღები სერიალი pinMode (LED, OUTPUT); ) ბათილად () ( if (irrecv.decode(&results)) (.println(results.value); if (results.value == 16769565)// კოდირების მიღებისას 1 ( digitalWrite (LED, HIGH);// ჩართეთ LED ) if (results.value == 16761405)// კოდირების მიღებისას 2 ( digitalWrite (LED, LOW); } }
ხედები