Სარჩევი:

I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად: 8 ნაბიჯი (სურათებით)
I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად: 8 ნაბიჯი (სურათებით)

ვიდეო: I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად: 8 ნაბიჯი (სურათებით)

ვიდეო: I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად: 8 ნაბიჯი (სურათებით)
ვიდეო: NE567 ინფრაწითელი დისტანციური მართვის მიმღები (სქემატური და breadboard) 2024, ივლისი
Anonim
I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად
I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად
I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად
I2C ინფრაწითელი დისტანციური მართვა არდუინოსთან ერთად

PreambleThis Instructable დეტალურად აღწერს თუ როგორ უნდა შექმნათ უნივერსალური დისტანციური კონტროლერი I2C გამოყენებით ინტერფეისისთვის.

რამდენად უცნაურად ამბობთ, I2C მონა მოწყობილობის გამოყენებით?

დიახ, I2C მონა მოწყობილობა.

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

შესავალი

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

ის მთავრდება დიზაინის მაგალითით, რომელიც Arduino- ს აქცევს I2C მონა დისტანციური მართვის მოდულად (სურათი 1 ზემოთ) პროტოტიპის საცდელი წრედით (სურათი 2 ზემოთ) და აგრძელებს დეტალებს, თუ როგორ უნდა შეამციროთ თქვენი დიზაინი მინიმალურ კომპონენტებზე, რაც შეიძლება ასე იყოს ჩადებულია სხვა დიზაინში. ჩემს შემთხვევაში მე ვიყენებ ამ ჩადგმულ მოწყობილობას IoT Universal დისტანციური მართვის მოწყობილობაში, რომელიც დაფუძნებულია ESP8266-12E– ს გარშემო.

რა ნაწილები მჭირდება?

ნაბიჯი 1 (IR გადამცემი) გამოსახული სქემის შესაქმნელად დაგჭირდებათ შემდეგი ნაწილები;

  • 2 off 10K რეზისტორების
  • 1 off 390R რეზისტორი
  • 1 off 33R რეზისტორი
  • 1 off 3K8 რეზისტორი
  • 1 გამორთული წითელი LED
  • 1 off IR Led TSAL6400
  • 1 ტრანზისტორი BC337
  • 1 off 220uF კონდენსატორი
  • 1 ფასდაკლება არდუინო უნოზე

ნაბიჯი 4 (IR მიმღები) გამოსახული სქემის შესაქმნელად დაგჭირდებათ შემდეგი ნაწილები;

  • 1 off 10K რეზისტორი
  • 1 ფასდაკლება TSOP38328
  • 1 off 220uF კონდენსატორი
  • 1 ფასდაკლება არდუინო უნოზე

მე –5 საფეხურზე გამოსახული სქემის შესაქმნელად (მონა ტესტის წრე) დაგჭირდებათ შემდეგი ნაწილები;

  • 4 off 10K რეზისტორების
  • 2 off 390R რეზისტორი
  • 1 off 33R რეზისტორი
  • 1 off 3K8 რეზისტორი
  • 2 გამორთული წითელი LED
  • 1 off IR Led TSAL6400
  • 1 ტრანზისტორი BC337
  • 1 off 220uF კონდენსატორი
  • 2 გამორთული SPST ღილაკი
  • 2 ფასდაკლებით Arduino Unos

ნაბიჯ 6 -ში გამოსახული სქემის ასაშენებლად (შემცირებული დიზაინი) დაგჭირდებათ შემდეგი ნაწილები;

  • 3 off 10K რეზისტორების
  • 1 off 270R რეზისტორი
  • 1 off 15R რეზისტორი
  • 4 გამორთული 1K რეზისტორი
  • 1 გამორთული წითელი LED
  • 1 ფასდაკლება IR Led TSAL6400 ან TSAL5300
  • 1 ტრანზისტორი BC337
  • 1 off 220uF capacitor electrolytic @ 6.3v
  • 1 off 1000uF კონდენსატორი ელექტროლიტური @ 6.3v
  • 2 off 0.1uF კონდენსატორები
  • 2 off 22pF კონდენსატორები
  • 1 off 16MHz Xtal
  • 1 ფასდაკლება ATMega328P-PU

შენიშვნა: თქვენ ასევე დაგჭირდებათ FTDI მოწყობილობა ATMega328P– ის დასაპროგრამებლად

რა უნარები მჭირდება?

  • ელექტრონიკის მინიმალური ცოდნა,
  • არდუინოს ცოდნა და მისი IDE,
  • ცოტა მოთმინება,
  • I2C– ის გარკვეული გაგება სასარგებლო იქნებოდა (იხილეთ აქ ზოგადი I2C/Wire ბიბლიოთეკის დეტალები).

გაშუქებული თემები

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

პასუხისმგებლობის უარყოფა

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

ნაბიჯი 1: წრის მოკლე მიმოხილვა

მიკროსქემის მოკლე მიმოხილვა
მიკროსქემის მოკლე მიმოხილვა

მიკროსქემის მიზანია IR დისტანციური მართვის კოდების გადაცემა. მისი დიზაინი საკმაოდ მარტივია და საკმაოდ მარტივია.

როდესაც ტრანზისტორი Q1 a BC337 NPN ჩართულია ლოგიკური გზით Arduino PWM O/P D3 რეზისტორ R5– მდე, მიმდინარე გადის Leds 1 და 2. შეზღუდულია მხოლოდ ბალასტური რეზისტენტებით შესაბამისად R3 და R4 შესაბამისად. Q1 გამოიყენება IR დიოდში გამავალი დენის გასაზრდელად (IF Max = 100mA) იმაზე მეტად, ვიდრე Arduino O/P- ს შეუძლია ~ 40mA @ +5v მიწოდება.

კონდენსატორი C1 a 220uF ელექტროლიტური უზრუნველყოფს გარკვეულ სტაბილიზაციას, რაც აფერხებს მიწოდების რკინიგზის ვარდნას Leds 1 და 2 მიერ მოწოდებული სიმძლავრით.

რეზისტორები R1 და R2 არის I2C დაჭიმვა.

ნაბიჯი 2: პროგრამული უზრუნველყოფის მოკლე მიმოხილვა

პროგრამის მოკლე მიმოხილვა
პროგრამის მოკლე მიმოხილვა
პროგრამის მოკლე მიმოხილვა
პროგრამის მოკლე მიმოხილვა
მოკლე მიმოხილვა პროგრამული უზრუნველყოფის შესახებ
მოკლე მიმოხილვა პროგრამული უზრუნველყოფის შესახებ

პრეამბულა

ამ კოდის წარმატებით შესადგენად დაგჭირდებათ შემდეგი დამატებითი ბიბლიოთეკა;

IRromote.h

  • ავტორი: z3t0
  • მიზანი: ინფრაწითელი დისტანციური ბიბლიოთეკა Arduino– სთვის: გააგზავნეთ და მიიღეთ ინფრაწითელი სიგნალები მრავალი პროტოკოლით
  • საიდან:

კოდის მიმოხილვა

როგორც ნაჩვენებია სურათზე 1 ზემოთ, გაშვებისას კოდი ახდენს მიკრო კონტროლერის I/O კონფიგურაციას, შემდეგ გამოკითხავს შიდა პროგრამული უზრუნველყოფის დროშის სტატუსს "bFreshDataFlag". როდესაც ეს დროშა დაყენებულია, კონტროლერი ამტკიცებს, რომ ის არის "დაკავებული" ხაზი (მონაცემების პინ D4 დაბალ დონეზე გაგზავნა) და გადადის "eBUSY" - ში, თანმიმდევრულად კითხულობს ღილაკს uDataArray და იგზავნება IR მოდულირებული მონაცემებით IR LED- ში გადაცემის თანმიმდევრობა.

მას შემდეგ, რაც uDataArray -ში შენახული მონაცემები სრულად გაიგზავნება, 'eIDLE' მდგომარეობა განახლდება და 'დაკავებული' ხაზი გაუქმდება (მონაცემთა პინ D4 მაღალი გაგზავნა). მოწყობილობა უკვე მზად არის მიიღოს მეტი ღილაკი, რომელიც აღნიშნავს გადაცემის თანმიმდევრობას.

IR ღილაკის მონაცემების მიღება

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

მიღების შემდეგ მიღებული I2C მონაცემები იწერება თანმიმდევრულად ბუფერში 'uDataArray '.

მონაცემთა მიღებისას, თუ მიმდევრობის დასასრულს სიგნალი აქვს სამაგისტრო (bFreshData! = 0x00) მითითებულია 'bFreshDataFlag', რაც ნიშნავს გადაცემის თანმიმდევრობის დაწყებას.

სურათები 2… 3 მოცემულია ტიპიური პაკეტის თანმიმდევრობის მაგალითი.

შენიშვნა: სრული კოდი ხელმისაწვდომია აქ

ნაბიჯი 3: I2C პაკეტის შინაარსი

I2C პაკეტის შინაარსი
I2C პაკეტის შინაარსი

I2C– ზე მონაზე გაგზავნილი საკონტროლო პაკეტის ფორმა მოცემულია ზემოთ სურათზე 1, თითოეული ველის მნიშვნელობა მოცემულია ქვემოთ

საკონტროლო პაკეტის ველების მნიშვნელობა

ბაიტი კოდირება;

  • IR დისტანციური მართვის კოდირება,

    • RC6 (ცა) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32 მონაცემები;

ორობითი IR მონაცემთა ნაკადის ჰექსექსუალური წარმომადგენლობა 4 მონაცემთა ბაიტი (ხელმოუწერელი გრძელი), LSByte… MSByte

ბაიტი bNumberOfBitsInTheData;

ბიტების რაოდენობა მონაცემებში (მაქსიმუმ 32). დიაპაზონი = 1… 32

ბაიტი bPulseTrain გამეორება;

რამდენი გამეორება ამ პულსის მატარებლის. დიაპაზონი = 1… 255. როგორც წესი, 2… 4 გამეორება. შეიძლება დაგჭირდეთ ამის გახანგრძლივება ჩართვის/გამორთვის ბრძანებებისათვის, რადგან მიმღები მოწყობილობა ხანდახან მოითხოვს დამატებით პულსის მატარებლის გამეორებას ჩართვის სიგნალის მისაღებად

ბაიტი bDelayBetweenPulseTrain გამეორება;

ამ პულსის მატარებლის გამეორებებს შორის შეფერხება. დიაპაზონი = 1… 255 mS. ტიპიურად 22mS… 124mS

ბაიტი bButton გამეორება;

ახდენს ერთი და იგივე ღილაკის განმეორებითი დაჭერის სიმულაციას (მაგრამ მხარს არ უჭერს შეცვლილ კოდს, როგორიცაა Apple დისტანციური მართვა, ის უბრალოდ იმეორებს ღილაკის კოდს). დიაპაზონი = 1… 256. ნაგულისხმევი = 1

uint16_t ui16 დაგვიანება ღილაკზე გამეორება;

ღილაკების გამეორებებს შორის შეფერხება (ხელმოუწერელი int). 2 ბაიტი სულ LSByte… MSByte. დიაპაზონი = 1… 65535 mS. ნაგულისხმევი = 0 mS

ბაიტი bFreshData;

  • ახალი მონაცემები. არა ნულოვანი მნიშვნელობა. ბოლო დაწერილი, იწვევს IR TX თანმიმდევრობას. დიაპაზონი 0x00… 0xFF

    • მეტი საკონტროლო პაკეტი იქნება = 0
    • ეს არის საბოლოო საკონტროლო პაკეტი = არა ნულოვანი მნიშვნელობა 1, 2,… 255

გაითვალისწინეთ "_packed_" შემდგენლის დირექტივის გამოყენება. ეს არის იმის უზრუნველსაყოფად, რომ მონაცემები არის პაკეტი ბაიტი ბაიტი მეხსიერებაში, მიუხედავად სამიზნე სისტემისა (Uno, Due, ESP8266 და ა. შ.). ეს ნიშნავს, რომ კავშირი RegisterAllocationType- სა და dataArrayType- ს შორის მხოლოდ თანმიმდევრულად არის საჭირო საათის ამოღება/საათი ბაიტებში საკონტროლო პაკეტიდან, რაც TX/RX პროგრამულ უზრუნველყოფას ამარტივებს.

ნაბიჯი 4: დისტანციური მართვის კოდების შეძენა (ui32Data)

დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)
დისტანციური მართვის კოდების შეძენა (ui32Data)

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

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

ბიტის დათვლის გზით მოცულობით

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

გადახედეთ მას ვებგვერდზე

დისტანციური მართვის კოდის მონაცემთა ბაზა Linux ინფრაწითელი დისტანციური მართვის ვებსაიტზე არის კარგი წყარო.

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

გაშიფვრა პირდაპირ მონაცემთა ნაკადიდან

ზემოთ მოყვანილი სურათის 1 სქემის გამოყენებით IR დისტანციური ბიბლიოთეკის მაგალითთან "IRrecvDumpV2.ino" შესაძლებელია მონაცემების ნაკადის დეკოდირება პირდაპირ დისტანციურიდან. სურათი 2 გვიჩვენებს Samsung TV- ის დაშიფრულ დისტანციურ ღილაკს ჩართვის/გამორთვის Arduino IDE ტერმინალის ფანჯარაში.

კომბინირებული მიმღები/გადამცემი

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

IR დისტანციური მართვის ღილაკზე დაჭერის დასაშიფრებლად დაგჭირდებათ Arduino- ს ციმციმა 'IRrecvDumpV2.ino' მაგალითით, რომელიც მოყვება IRremote ბიბლიოთეკას.

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

ნაბიჯი 5: როგორ შეამოწმოთ თქვენი I2C მონა მოწყობილობა

როგორ შეამოწმოთ თქვენი I2C მონა მოწყობილობა
როგორ შეამოწმოთ თქვენი I2C მონა მოწყობილობა
როგორ შეამოწმოთ თქვენი I2C მონა მოწყობილობა
როგორ შეამოწმოთ თქვენი I2C მონა მოწყობილობა

წყაროს კოდის და სურათის 1 -ში ზემოთ აღწერილი სქემის გამოყენებით დაპროგრამეთ 'Master' Arduino 'IR_Remote_Sim_Test.ino' და 'მონა' Arduino 'IR_Remote_Sim.ino'.

დავუშვათ გაქვთ Sony Bravia TV, Sky HD ყუთი და Sony BT SoundBar, დააჭირეთ ღილაკს 1 და თქვენი ტელევიზია გადადის BBC1– ზე (არხი 101). დააჭირეთ ღილაკს 2 და თქვენი ხმის ბარი დადუმდება. კვლავ დააჭირეთ ღილაკს და დადუმდება.

IR გადაცემის თანმიმდევრობის შესრულების დროს LED3 ანათებს, რაც იმას ნიშნავს, რომ მონა დაკავებულია და LED1 ციმციმდება IR გადაცემის პროცესთან ერთად.

რა თქმა უნდა, თუ თქვენ არ გაქვთ იგივე გასართობი სისტემა, როგორც ზემოთ, შეგიძლიათ ხელახლა დაპროგრამოთ მონა 'IRrecvDumpV2.ino'-ით, გაშიფროთ თქვენი ინტერესების დისტანციური ბრძანებები, შემდეგ დაპროგრამეთ ისინი 'IR_Remote_Sim_Test.ino' თქვენი მოცემული სცენარი.

სურათი 2 გვიჩვენებს სისტემის დონის სატესტო პროგრამული უზრუნველყოფის მიმოხილვას Master და Slave– ს შორის.

ნაბიჯი 6: თქვენი დიზაინის შემცირება

თქვენი დიზაინის შემცირება
თქვენი დიზაინის შემცირება

კარგი, ასე რომ ვივარაუდოთ, რომ თქვენ მიჰყევით ამ ინსტრუქციას, რომელიც დაეყრდნობა ორ არდუინოს თქვენი სახლის მოწყობილობების გასაკონტროლებლად, არ არის თქვენი Arduino მარაგის ყველაზე ეფექტური გამოყენება. შესაბამისად, თუ თქვენ ააშენებთ სქემას, რომელიც ნაჩვენებია ზემოთ მოცემულ სურათზე და მიჰყვებით აქ მოცემულ ინსტრუქციას ATMega328P– ის დასაპროგრამებლად „IR_Remote_Sim.ino“- ით, თქვენ შეძლებთ მთელი სისტემის შემცირებას მინიმალურ კომპონენტებამდე. ეს საშუალებას მოგცემთ ჩაწეროთ თქვენი დიზაინი სხვა სისტემაში.

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

დასკვნა
დასკვნა
დასკვნა
დასკვნა

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

მე ავირჩიე Arduino Uno R3, როგორც მინდოდა მოწყობილობა, რომელსაც გააჩნდა საკმარისი ოპერატიული მეხსიერება, რომ მე მქონოდა გონივრული სიღრმის ღილაკის ბუფერი. მე დავთანხმდი 20 პაკეტის ბუფერულ ზომას (MAX_SEQUENCES).

ჰიბრიდული 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

გირჩევთ: