Բովանդակություն:

I2C InfraRed հեռակառավարում Arduino- ի հետ. 8 քայլ (նկարներով)
I2C InfraRed հեռակառավարում Arduino- ի հետ. 8 քայլ (նկարներով)

Video: I2C InfraRed հեռակառավարում Arduino- ի հետ. 8 քայլ (նկարներով)

Video: I2C InfraRed հեռակառավարում Arduino- ի հետ. 8 քայլ (նկարներով)
Video: Օգտագործելով Melexis MLX90614 ինֆրակարմիր ջերմաչափ `Arduino- ի հետ 2024, Նոյեմբեր
Anonim
I2C InfraRed հեռակառավարում Arduino- ի հետ
I2C InfraRed հեռակառավարում Arduino- ի հետ
I2C InfraRed հեռակառավարում Arduino- ի հետ
I2C InfraRed հեռակառավարում Arduino- ի հետ

PreambleThis Instructable- ը մանրամասնում է, թե ինչպես ստեղծել ինտերֆեյսի համար I2C- ով ունիվերսալ հեռակառավարիչ:

Որքա՞ն տարօրինակ եք ասում ՝ օգտագործելով I2C ստրուկ սարք:

Այո, I2C ստրուկ սարք:

Դա պայմանավորված է նրանով, որ IR փաթեթների ճշգրիտ ժամանակը բավականին պահանջկոտ է, և որի հետ սովորական Arduino- ն կպայքարի, եթե այն միաժամանակ իրականացնում է բազմաթիվ այլ առաջադրանքներ: Ավելի լավ է հաշվիչ բեռը բաշխել `հնարավորության դեպքում ինտենսիվ գործողություններ նշանակելով հատուկ պրոցեսորներին (հնարավորության դեպքում դա ավելի լավ է սարքավորումներում): Հաշվի առնելով, որ I2C- ը լավ փաստագրված և ամուր հաղորդակցության մեթոդ է IC- ների միջև, ես դա ընտրեցի որպես միջերես:

Ներածություն

Ինչպես նշվեց վերևում, այս հրահանգը նկարագրում է, թե ինչպես կարելի է կառավարել կենցաղային տեխնիկան, ինչպիսիք են հեռուստացույցը, DVD նվագարկիչը և արբանյակը և այլն ՝ օգտագործելով Arduino- ի IRremote գրադարանը:

Այն եզրափակում է դիզայնի օրինակը ՝ Arduino- ն վերածելով I2C ստրուկի հեռակառավարման մոդուլի (նկ. 1 վերը) նախատիպի փորձարկման սխեմայով (նկ. 2 վերև) և շարունակում մանրամասն ՝ ինչպես կրճատել ձեր դիզայնը մինչև նվազագույն անհրաժեշտ բաղադրիչները, որպեսզի այն հնարավոր լինի: ներդրված այլ դիզայնի մեջ: Իմ դեպքում ես օգտագործում եմ այս ներդրված սարքը IoT Universal հեռակառավարման սարքում, որը հիմնված է ESP8266-12E- ի շուրջ:

Ի՞նչ մասեր են ինձ պետք:

Քայլ 1 -ում պատկերված շղթան կառուցելու համար (IR հաղորդիչ) ձեզ հարկավոր են հետևյալ մասերը.

  • 2 անջատված 10K դիմադրություն
  • 1 անջատված 390R դիմադրություն
  • 1 անջատված 33R դիմադրություն
  • 1 անջատված 3K8 ռեզիստոր
  • 1 կարմիր կարմիր LED
  • 1 զեղչ IR Led TSAL6400- ով
  • 1 Տրանզիստոր BC 337
  • 1 off 220uF կոնդենսատոր
  • 1 զեղչ Arduino Uno- ի համար

Քայլ 4 -ում պատկերված միացում կառուցելու համար (IR ընդունիչ) ձեզ հարկավոր են հետևյալ մասերը.

  • 1 -ից 10K դիմադրություն
  • 1 զեղչ TSOP38328
  • 1 off 220uF կոնդենսատոր
  • 1 զեղչ Arduino Uno- ի համար

Քայլ 5 -ում պատկերված սխեմայի կառուցման համար (Ստրուկի փորձարկման շրջան) ձեզ հարկավոր են հետևյալ մասերը.

  • 4 անջատված 10K դիմադրիչներ
  • 2 անջատված 390R դիմադրություն
  • 1 անջատված 33R դիմադրություն
  • 1 անջատված 3K8 ռեզիստոր
  • 2 անջատված կարմիր LED
  • 1 զեղչ IR Led TSAL6400- ով
  • 1 Տրանզիստոր BC 337
  • 1 off 220uF կոնդենսատոր
  • 2 զեղչ SPST կոճակներով
  • 2 զեղչ Arduino Unos- ի համար

6 -րդ քայլում պատկերված սխեման կառուցելու համար (Փոքրացված ձևավորում) ձեզ հարկավոր են հետևյալ մասերը.

  • 3 անջատված 10K դիմադրիչներ
  • 1 անջատված 270R դիմադրիչ
  • 1 անջատված 15R դիմադրություն
  • 4 անջատված 1K ռեզիստորներ
  • 1 կարմիր կարմիր LED
  • 1 զեղչ IR Led TSAL6400 կամ TSAL5300
  • 1 Տրանզիստոր BC 337
  • 1 off 220uF կոնդենսատոր էլեկտրոլիտիկ @ 6.3 վ
  • 1 1000UF կոնդենսատոր էլեկտրոլիտիկ @ 6.3 վ
  • 2 զեղչ 0.1uF կոնդենսատորներից
  • 2 անջատված 22pF կոնդենսատորներ
  • 1 զեղչ ՝ 16 ՄՀց Xtal
  • 1 զեղչ ATMega328P-PU

Նշում. ATMega328P- ը ծրագրավորելու համար ձեզ կպահանջվի նաև FTDI սարք

Ի՞նչ հմտություններ են ինձ պետք:

  • Էլեկտրոնիկայի նվազագույն տիրապետում,
  • Arduino- ի և դրա IDE- ի իմացություն,
  • Մի փոքր համբերություն,
  • I2C- ի մասին որոշ պատկերացումներ օգտակար կլինեն (տե՛ս այստեղ որոշ ընդհանուր I2C/Wire Library գրառումների համար):

Coveredածկված թեմաներ

  • Շղթայի համառոտ ակնարկ,
  • Theրագրաշարի համառոտ ակնարկ,
  • I2C փաթեթի բովանդակություն,
  • Հեռակառավարման կոդերի ձեռքբերում (ui32Data),
  • Ինչպես փորձարկել ձեր I2C Slave սարքը,
  • Նեղացնելով ձեր դիզայնը,
  • Եզրակացություն,
  • Օգտագործված հղումներ:

Հրաժարում

Ինչպես միշտ, դուք օգտագործում եք այս հրահանգները ձեր ռիսկով, և դրանք գալիս են չաջակցված:

Քայլ 1. Շրջանի համառոտ ակնարկ

Շրջանի համառոտ ակնարկ
Շրջանի համառոտ ակնարկ

Շղթայի նպատակը IR հեռակառավարման կոդերի փոխանցումն է: Նրա դիզայնը բավականին ուղիղ է և բավականին պարզ:

Երբ տրանզիստոր Q1 a BC337 NPN- ը Arduino PWM O/P D3- ից մինչև Resistor R5 տրամաբանական մեկի միջոցով միացված է, հոսանքը անցնում է 1 -ին և 2 -րդ լուսամուտներով: Q1- ն օգտագործվում է IR դիոդով (IF Max = 100 մԱ) անցնող հոսանքի ավելացման համար, քան գերազանցում է Arduino O/P- ի հզորությունը ~ 40mA @ +5v մատակարարմանը:

Capacitor C1 a 220uF Electrolytic- ը ապահովում է որոշակի կայունացում `կանխելով մատակարարման երկաթուղու անկումը Leds 1 -ի և 2 -ի քաշած էներգիայի միջոցով:

R1 և R2 դիմադրիչները I2C քաշքշուկներ են:

Քայլ 2: Bրագրակազմի համառոտ ակնարկ

Bրագրաշարի համառոտ ակնարկ
Bրագրաշարի համառոտ ակնարկ
Bրագրաշարի համառոտ ակնարկ
Bրագրաշարի համառոտ ակնարկ
Bրագրաշարի համառոտ ակնարկ
Bրագրաշարի համառոտ ակնարկ

Նախաբան

Այս աղբյուրի կոդը հաջողությամբ կազմելու համար ձեզ հարկավոր կլինի հետևյալ լրացուցիչ գրադարանը.

IRremote.h

  • Հեղինակ `z3t0
  • Նպատակը. Ինֆրակարմիր հեռավոր գրադարան Arduino- ի համար. Ուղարկեք և ստացեք ինֆրակարմիր ազդանշաններ բազմաթիվ արձանագրություններով
  • Սկսած ՝

Կոդի ակնարկ

Ինչպես ցույց է տրված վերևում 1-ին նկարում, գործարկման ժամանակ ծածկագիրը կարգավորում է միկրոհսկիչի մուտքն ու ելքը, այնուհետև հարցնում ներքին ծրագրաշարի դրոշի կարգավիճակը `« bFreshDataFlag »: Երբ դրոշը դրված է, վերահսկիչը պնդում է, որ դա «yբաղված» գիծ է (տվյալների պին D4 ցածր ուղարկելը) և տեղափոխվում է «eBUSY» վիճակի հաջորդաբար կարդալով uDataArray կոճակում սեղմված հրամանները և IR մոդուլացված տվյալները ուղարկելով IR LED- ին փոխանցման հաջորդականությունը:

Երբ uDataArray -ում պահվող տվյալները լիովին ուղարկվեն, «eIDLE» վիճակը վերսկսվում է, և «զբաղված» տողը հանվում է (տվյալների պին D4 բարձր ուղարկելը): Այժմ սարքը պատրաստ է ստանալ ավելի շատ կոճակներ ՝ նշելով փոխանցման հաջորդականության ավարտը:

IR կոճակի սեղմման տվյալների ընդունում

Երբ տվյալները ուղարկվում են InfraRed հեռակառավարման վահանակի միջոցով I2C- ի միջոցով, դա առաջացնում է ընդհատում, և receEventEvent () գործառույթի կանչը գործարկվում է ասինխրոն կերպով:

Ստացված 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 կրկնում: Միգուցե ցանկանաք դա երկարաձգել միացման/անջատման հրամանների դեպքում, քանի որ ընդունող սարքը երբեմն պահանջում է մի քանի լրացուցիչ զարկերակային գնացքի կրկնություն `միացման ազդանշան ստանալու համար:

բայթ bDelayBetweenPulseTrainRepeats;

Այս զարկերակային գնացքի կրկնությունների միջև ուշացում: Միջակայք = 1… 255 մմ Սովորաբար 22mS… 124mS:

բայթ bButton Կրկնվում;

Նմանակում է նույն կոճակի կրկնակի սեղմումը (բայց չի աջակցում փոփոխված ծածկագիրը, ինչպես Apple- ի հեռակառավարիչը, այն պարզապես կրկնում է կոճակի ծածկագիրը): Միջակայք = 1… 256. Լռելյայն = 1:

uint16_t ui16DelayBetweenButton Կրկնվում է;

Կոճակի կրկնությունների միջև ուշացում (չստորագրված int): 2 բայթ ընդհանուր LSByte… MSByte: Միջակայք = 1… 65535 մմ Լռելյայն = 0mS

բայթ 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 Infrared Remote Control վեբ կայքի հեռակառավարման կոդի տվյալների բազան լավ աղբյուր է:

Այնուամենայնիվ, բացասականն այն է, որ գուցե ստիպված լինեք մի քանի կոդ փորձել, մինչև չգտնեք այն, որը ձեզ համար աշխատում է: Հնարավոր է նաև ստիպված լինեք մեկնաբանել ծածկագրերի որոշ ներկայացումներ ՝ դրանք համարժեք վեցանկյուն ձևի վերածելու համար:

Վերծանեք այն անմիջապես տվյալների հոսքից

Օգտագործելով վերը նշված 1 -ին սխեման `IRremote գրադարանի 'IRrecvDumpV2.ino' օրինակին զուգահեռ, հնարավոր է տվյալների հոսքը վերծանել հեռակառավարումից: Նկար 2 -ը ցույց է տալիս վերծանված Samsung TV հեռակառավարման վահանակը Arduino IDE տերմինալի պատուհանում միացնելու/անջատելու կոճակի համար:

Համակցված ընդունիչ/հաղորդիչ

3 -րդ և 4 -րդ նկարները պատկերում են լուծում, որը թույլ է տալիս ինչպես ընդունել, այնպես էլ փոխանցել IR հրամանը `թույլ տալով հեշտ նախատիպերի պատրաստում:

IR հեռակառավարման կոճակի սեղմումները վերծանելու համար հարկավոր է Arduino- ն լուսարձակել «IRrecvDumpV2.ino» օրինակով, որը գալիս է IRremote գրադարանի հետ:

Այն նաև հավասարապես լավ է աշխատում IR- ի հրամանների դեպքում: Կարմիր լուսարձակը ներառված է որպես սարքի գործողության տեսողական ցուցում:

Քայլ 5. Ինչպես փորձարկել ձեր I2C ստրուկ սարքը

Ինչպես փորձարկել ձեր I2C ստրուկ սարքը
Ինչպես փորձարկել ձեր I2C ստրուկ սարքը
Ինչպես փորձարկել ձեր I2C ստրուկ սարքը
Ինչպես փորձարկել ձեր I2C ստրուկ սարքը

Օգտագործելով սկզբնաղբյուրը այստեղ և նկար 1 -ում վերը նշված սխեման ՝ ծրագրավորեք «Վարպետ» Arduino- ն «IR_Remote_Sim_Test.ino» - ով և «Slave» Arduino- ով ՝ «IR_Remote_Sim.ino» - ով:

Ենթադրելով, որ ունեք Sony Bravia հեռուստատեսություն, Sky HD տուփ և Sony BT SoundBar, սեղմեք կոճակը 1 և ձեր հեռուստացույցը կանցնի BBC1- ի (ալիք 101): Կտտացրեք կոճակը 2, և ձեր ձայնային սանդղակը կփակվի: Կրկին սեղմեք, և այն կփակվի:

IR փոխանցման հաջորդականության կատարման ընթացքում LED3- ը լուսավորվում է ՝ նշելով, որ ստրուկը զբաղված է, և LED1 -ը թրծվելու է IR փոխանցման գործընթացի հետ միասին:

Իհարկե, եթե դուք չունեք նույն զվարճանքի համակարգը, որը վերը նշված է, կարող եք ստրուկին կրկին ծրագրավորել «IRrecvDumpV2.ino»-ով, վերծանել ձեր հետաքրքրող հեռակա հրամանները, այնուհետև դրանք ծրագրավորել ձեր «IR_Remote_Sim_Test.ino»-ի մեջ: տրված սցենարը:

Նկար 2 -ը ցույց է տալիս համակարգի մակարդակի փորձարկման ծրագրակազմի ակնարկ Master- ի և Slave- ի միջև:

Քայլ 6: Փոքրացրեք ձեր դիզայնը

Նեղացնելով ձեր դիզայնը
Նեղացնելով ձեր դիզայնը

Լավ, ուրեմն, ենթադրելով, որ հետևել եք այս հրահանգին ՝ ձեր տան սարքերը վերահսկելու համար հենվելով երկու Arduinos- ի վրա, ձեր Arduino- ի բաժնետոմսերի ամենաարդյունավետ օգտագործումը չէ: Հետևաբար, եթե կառուցեք վերևում նկարում պատկերված սխեման և հետևեք այստեղ տրված հրահանգներին `ATMega328P- ն« IR_Remote_Sim.ino » - ով ծրագրավորելու համար, կկարողանաք ամբողջ համակարգը հասցնել նվազագույն բաղադրիչների: Սա թույլ կտա ձեր դիզայնը ներդնել այլ համակարգի մեջ:

Քայլ 7: Եզրակացություն

Եզրակացություն
Եզրակացություն
Եզրակացություն
Եզրակացություն

Լուծումը կայուն է և լավ է աշխատում, այն արդեն մի քանի շաբաթ է ՝ ներդրված է այլ համակարգում ՝ առանց որևէ խնդիրների:

Ես ընտրեցի Arduino Uno R3- ը, քանի որ ուզում էի մի սարք, որն ունենար բավարար RAM, որպեսզի կարողանայի ունենալ ողջամիտ խորության կոճակի բուֆեր: Ես բավարարվեցի 20 փաթեթների բուֆերային չափի համար (MAX_SEQUENCES):

Իմ պատրաստած Hybrid 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/hy/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

Խորհուրդ ենք տալիս: