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

Arduino ашиглан I2C InfraRed алсын удирдлага: 8 алхам (зурагтай)
Arduino ашиглан I2C InfraRed алсын удирдлага: 8 алхам (зурагтай)

Видео: Arduino ашиглан I2C InfraRed алсын удирдлага: 8 алхам (зурагтай)

Видео: Arduino ашиглан I2C InfraRed алсын удирдлага: 8 алхам (зурагтай)
Видео: ESP8266 Diesel Injector Purging Station - PWM NodeMCU pump flow Control (Subtittled) 2024, Долдугаар сарын
Anonim
Arduino -той I2C InfraRed алсын удирдлага
Arduino -той I2C InfraRed алсын удирдлага
Arduino -той I2C InfraRed алсын удирдлага
Arduino -той I2C InfraRed алсын удирдлага

Энэхүү зааварчилгаанд I2C интерфэйсийг ашиглан бүх нийтийн алсын удирдлага хэрхэн бий болгох талаар дэлгэрэнгүй бичсэн болно.

I2C боол төхөөрөмж ашиглан та ямар сонин юм бэ?

Тийм ээ, I2C боол төхөөрөмж.

Учир нь IR пакетуудын зөв цаг гаргах нь маш их шаарддаг бөгөөд ердийн Arduino нь бусад олон ажлыг нэгэн зэрэг гүйцэтгэж байгаа бол тэмцэх болно. Тооцоолох ачааллыг хуваарилах нь илүү оновчтой бөгөөд зориулалтын процессоруудад хуваарилах боломжтой (үүнийг техник хангамж дээр хийх нь дээр). I2C нь IC -ийн хооронд сайн баримтжуулсан, бат бөх харилцааны арга гэдгийг харгалзан би үүнийг интерфэйс болгон сонгосон.

Танилцуулга

Дээр дурдсанчлан энэхүү зааварчилгаа нь Arduino дээрх IRremote номын санг ашиглан телевиз, DVD тоглуулагч, хиймэл дагуул гэх мэт гэр ахуйн цахилгаан хэрэгслийг хэрхэн хянах талаар тайлбарласан болно.

Энэхүү загвар нь Arduino -г туршилтын хэлхээний загвартай (дээрх зураг 2) I2C боолын алсын удирдлагатай модуль болгон хувиргасан дизайны жишээгээр дуусгавар болж, дизайныг шаардлагатай хамгийн бага бүрэлдэхүүн хэсгүүдэд хэрхэн багасгах талаар нарийвчлан тайлбарлав. өөр загварт суулгасан. Миний хувьд би энэ суулгагдсан төхөөрөмжийг ESP8266-12E дээр суурилсан IoT Universal алсын удирдлагатай төхөөрөмжид ашигладаг.

Надад ямар хэсгүүд хэрэгтэй вэ?

Алхам 1 (IR дамжуулагч) -д дүрсэлсэн хэлхээг бий болгохын тулд танд дараах хэсгүүд хэрэгтэй болно;

  • 2 унтраалттай 10K резистор
  • 1 унтраалттай 390R эсэргүүцэл
  • 1 унтраалттай 33R эсэргүүцэл
  • 1 унтраалттай 3K8 резистор
  • Улаан гэрэл 1 унтраалттай
  • IR Led TSAL6400 дээр 1 хөнгөлөлт
  • BC337 транзисторыг 1 удаа хасна
  • 1 унтраалттай 220uF конденсатор
  • Arduino Uno -оос 1 хөнгөлөлт

Алхам 4 (IR хүлээн авагч) -д дүрсэлсэн хэлхээг бий болгохын тулд танд дараах хэсгүүд хэрэгтэй болно;

  • 1 унтраалттай 10К эсэргүүцэл
  • TSOP38328 дээр 1 хөнгөлөлт
  • 1 унтраалттай 220uF конденсатор
  • Arduino Uno -оос 1 хөнгөлөлт

5 -р алхамд (Боолын туршилтын хэлхээ) дүрсэлсэн хэлхээг бий болгохын тулд танд дараах хэсгүүд хэрэгтэй болно;

  • 4 унтраалттай 10K резистор
  • 390R эсэргүүцэлтэй 2 унтраалттай
  • 1 унтраалттай 33R эсэргүүцэл
  • 1 унтраалттай 3K8 резистор
  • Улаан LED 2 унтраалттай
  • IR Led TSAL6400 дээр 1 хөнгөлөлт
  • BC337 транзисторыг 1 удаа хасна
  • 1 унтраалттай 220uF конденсатор
  • SPST -ийн 2 товчлуур
  • Arduino Unos -оос 2 хямдарлаа

Алхам 6 -д дүрслэгдсэн хэлхээг бий болгохын тулд (Shrunk design) танд дараах хэсгүүд хэрэгтэй болно;

  • 3 унтраалттай 10K резистор
  • 1 унтраалттай 270R эсэргүүцэл
  • 1 унтраалттай 15R эсэргүүцэл
  • 4 унтраалттай 1K резистор
  • Улаан гэрэл 1 унтраалттай
  • IR Led TSAL6400 эсвэл TSAL5300 дээр 1 хөнгөлөлт
  • BC337 транзисторыг 1 удаа хасна
  • Электролитийн @ 6.3v -ийн 1 унтраах 220uF конденсатор
  • Электролитийн @ 6.3v 1000uF конденсатор 1 унтраалттай
  • 0.1 унтлагын багтаамжтай 2 конденсатор
  • 2 унтраалттай 22pF конденсатор
  • 1 унтраалга 16MHz Xtal
  • ATMega328P-PU 1 хямдарсан

Тэмдэглэл: ATMega328P програмчлахын тулд танд FTDI төхөөрөмж хэрэгтэй болно

Надад ямар ур чадвар хэрэгтэй вэ?

  • Электроникийн хамгийн бага ойлголт,
  • Arduino болон түүний IDE -ийн талаархи мэдлэг,
  • Бага зэрэг тэвчээр,
  • I2C -ийн талаар зарим ойлголт өгөх нь ашигтай байх болно (I2C/Утас номын сангийн ерөнхий дэлгэрэнгүйг эндээс үзнэ үү).

Хамрах сэдвүүд

  • Хэлхээний товч тойм,
  • Програм хангамжийн товч тойм,
  • I2C пакетийн агуулга,
  • Алсын удирдлагын кодыг олж авах (ui32Data),
  • I2C Slave төхөөрөмжөө хэрхэн шалгах вэ,
  • Загвараа хумих,
  • Дүгнэлт,
  • Ашигласан лавлагаа.

Татгалзах

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

Алхам 1: Хэлхээний товч тойм

Хэлхээний товч тойм
Хэлхээний товч тойм

Хэлхээний зорилго нь IR алсын удирдлагын кодыг дамжуулах явдал юм. Түүний загвар нь маш энгийн бөгөөд маш энгийн.

Q1 транзистор BC337 NPN логикоор Arduino PWM O/P D3 -аас Resistor R5 хүртэл асах үед гүйдэл нь 1 ба 2 -р дамжин өнгөрдөг бөгөөд зөвхөн R3 ба R4 тогтворжуулагч эсэргүүцэлээр хязгаарлагддаг. Q1 нь IR диод (IF Max = 100mA) дамжин өнгөрөх гүйдлийг Arduino O/P -ээс дээш ~ 40mA @ +5v нийлүүлэлтээс хэтрүүлэхэд ашигладаг.

Конденсатор C1 220uF Электролитик нь Leds 1 ба 2 -ийн хүчээр дамжуулах хоолойн уналтаас урьдчилан сэргийлэх зарим тогтворжуулалтыг өгдөг.

R1 ба R2 резисторууд нь I2C таталт юм.

Алхам 2: Програм хангамжийн товч тойм

Програм хангамжийн товч тойм
Програм хангамжийн товч тойм
Програм хангамжийн товч тойм
Програм хангамжийн товч тойм
Програм хангамжийн товч тойм
Програм хангамжийн товч тойм

Оршил

Энэхүү эх кодыг амжилттай эмхэтгэхийн тулд танд дараах нэмэлт номын сан хэрэгтэй болно;

IRremote.h

  • Оруулсан: z3t0
  • Зорилго: Arduino -ийн хэт улаан туяаны алсын номын сан: олон протокол бүхий хэт улаан туяаны дохиог илгээх, хүлээн авах
  • Хаанаас:

Кодын тойм

Дээрх 1-р зурагт үзүүлсэн шиг код эхлэх үед микро контроллерийн I/O-ийг тохируулж дараа нь 'bFreshDataFlag' програм хангамжийн дотоод тугны төлөв байдлын талаар санал асуулга явуулдаг. Энэ тугийг тохируулах үед хянагч нь "Завгүй" гэсэн мөрийг (D4 өгөгдлийн зүү бага илгээдэг) баталж, 'eBUSY' төлөв рүү шилжиж uDataArray дээр дарагдсан тушаалуудыг дарж, IR модуляцлагдсан өгөгдлийг IR LED рүү илгээдэг. дамжуулах дараалал.

UDataArray -д хадгалагдсан өгөгдлийг бүрэн илгээсэний дараа 'eIDLE' төлөвийг сэргээж, "Завгүй" мөрийг баталгаажуулаагүй болно (өгөгдлийн зүү D4 өндөр илгээх). Төхөөрөмж нь дамжуулах дарааллын төгсгөлийг тэмдэглэсэн илүү олон товчлуур дарахад бэлэн боллоо.

IR товчлуурын даралтын өгөгдлийг хүлээн авах

Мэдээллийг I2C -ээр InfraRed алсын удирдлага руу илгээхэд тасалдал үүсч, хүлээн авахEvent () функцийн дуудлага асинхрон байдлаар идэвхжинэ.

Хүлээн авсан I2C өгөгдлийг идэвхжүүлсний дараа 'uDataArray ' буферт дараалан бичнэ.

Мэдээлэл хүлээн авах явцад хэрэв дарааллын төгсгөлийг мастер дохио өгвөл (bFreshData! = 0x00) 'bFreshDataFlag' тохируулагдсан бөгөөд ингэснээр дамжуулах дараалал эхэлснийг илтгэнэ.

Зураг 2… 3 нь ердийн пакет дарааллын жишээг өгдөг.

Жич: Бүрэн эх кодыг эндээс авах боломжтой

Алхам 3: I2C пакетийн агуулга

I2C пакетийн агуулга
I2C пакетийн агуулга

I2C дээр боол руу илгээсэн хяналтын пакетийн форматыг 1 -р зурагт өгөгдсөн болно. Талбар бүрийн утгыг доор өгөв.

Хяналтын пакет талбаруудын утга

байт bEncoding;

  • IR алсын удирдлагатай кодчилол,

    • RC6 (Тэнгэр) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

IR хоёртын өгөгдлийн урсгалын зургаан талт дүрслэл 4 Өгөгдлийн байт (гарын үсэг зураагүй урт), LSByte… MSByte

байт bNumberOfBitsInTheData;

Өгөгдөл дэх битийн тоо (хамгийн ихдээ 32). Хүрээ = 1… 32

байт bPulseTrainRepeats;

Энэ импульсийн галт тэрэг хичнээн олон удаа давтагдаж байна. Хүрээ = 1… 255. Ихэвчлэн 2… 4 давталт хийдэг. Хүлээн авах төхөөрөмж заримдаа асаах дохиог хүлээн авахын тулд хэд хэдэн нэмэлт импульсийн галт тэрэгний давталт хийх шаардлагатай байдаг тул та үүнийг асаах/унтраах командын хувьд сунгаж болно

байт bDelayBetweenPulseTrainRepeats;

Энэхүү импульсийн галт тэрэгний давталтын хоорондох саатал. Хүрээ = 1… 255mS. Ихэвчлэн 22mS … 124mS байна

байт bButtonДахин давтах;

Ижил товчлуурыг дахин дарахыг дуурайдаг (гэхдээ Apple -ийн алсын удирдлага шиг өөрчлөгдсөн кодыг дэмждэггүй, товчлуурын кодыг давтдаг). Муж = 1… 256. Анхдагч = 1

uint16_t ui16DelayBetweenButtonRepeats;

Товчлуурын давталтын хоорондох саатал (unsigned int). Нийт 2 байт LSByte… MSByte. Хүрээ = 1… 65535mS. Анхдагч = 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 давтагдсан шахсан дарааллаар дагана.

Үүнийг вэбсайтаас үзээрэй

Линукс хэт улаан туяаны алсын удирдлагатай вэбсайт дээрх алсын удирдлагын кодын мэдээллийн сан нь сайн эх сурвалж юм.

Үүний сул тал бол танд тохирох кодыг олох хүртэл хэдэн кодыг туршиж үзэх шаардлагатай болж магадгүй юм. Та мөн кодын зарим дүрслэлийг эквивалент зургаан өнцөгт хэлбэрт оруулахын тулд тайлбарлах шаардлагатай болж магадгүй юм.

Мэдээллийн урсгалаас шууд декодчилно уу

Дээрх 1 -р зураг дээрх хэлхээг IRremote номын сангийн жишээ 'IRrecvDumpV2.ino' -тай хамт ашигласнаар өгөгдлийн урсгалыг алсаас шууд декодлох боломжтой. Зураг 2 -т Arduino IDE терминалын цонхонд асаах/унтраах товчлуурыг дарах зориулалттай Samsung телевизийн алсын удирдлагыг харуулав.

Хосолсон хүлээн авагч/дамжуулагч

Дээрх 3 ба 4 -р зурагнууд нь хялбархан загварчлах боломжийг олгодог IR командыг хүлээн авах, дамжуулах боломжийг олгодог шийдлийг дүрсэлсэн болно.

IR алсын удирдлага товчлуур дээр дарахад код тайлахын тулд та IRduote номын санд ирдэг 'IRrecvDumpV2.ino' жишээг ашиглан Arduino -г асаах хэрэгтэй болно.

Хэрэв IR командыг өгвөл энэ нь дамжуулахтай адил сайн ажилладаг. Төхөөрөмж ажиллаж байгааг харуулах дохио болгон улаан LED -ийг оруулсан болно.

Алхам 5: I2C боол төхөөрөмжөө хэрхэн шалгах вэ

I2C боол төхөөрөмжөө хэрхэн шалгах вэ
I2C боол төхөөрөмжөө хэрхэн шалгах вэ
I2C боол төхөөрөмжөө хэрхэн шалгах вэ
I2C боол төхөөрөмжөө хэрхэн шалгах вэ

Энд байгаа эх код болон 1 -р зурагт үзүүлсэн хэлхээг ашиглан 'Master' Arduino -ийг 'IR_Remote_Sim_Test.ino', 'Slave' 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 -т Мастер ба Боол хоёрын системийн түвшний туршилтын програм хангамжийн тоймыг харуулав.

Алхам 6: Дизайнаа хумих

Дизайнаа хумиж байна
Дизайнаа хумиж байна

За, хэрэв та энэ зааварчилгааг дагаж мөрдсөн гэж үзвэл гэрийн төхөөрөмжөө удирдахын тулд хоёр Arduino -д найдах нь таны Arduino -ийн хувьцааг хамгийн үр ашигтай ашиглах явдал биш юм. Тиймээс, хэрэв та дээрх зураг дээр үзүүлсэн хэлхээг байгуулж, ATMega328P програмыг 'IR_Remote_Sim.ino' програмчлах зааврыг дагаж мөрдвөл та бүхэл системийг бүхэлд нь хамгийн бага хэмжээнд хүртэл бууруулах боломжтой болно. Энэ нь дизайныг өөр системд оруулах боломжийг танд олгоно.

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

Дүгнэлт
Дүгнэлт
Дүгнэлт
Дүгнэлт

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

Би хангалттай хэмжээтэй RAM товчлууртай, хангалттай гүнтэй товчлуурын буфертай төхөөрөмж авахыг хүссэн тул Arduino Uno R3 -ийг сонгосон. Би 20 пакет (MAX_SEQUENCES) хэмжээтэй буфер авахаар шийдсэн.

Миний хийсэн Hybrid TX/RX бамбай нь Sony болон Sky алсын удирдлагыг декодлоход бас маш сайн хэрэг болсон. Програм хангамжийн декодчилсон IR командыг IR хүлээн авсан IR -ээс ирсэнтэй ижил байсан эсэхийг шалгахын тулд би дижитал цар хүрээгээ үе үе ашиглан хүлээн зөвшөөрөх хэрэгтэй болдог (TSOP38328).

Миний өөрөөр хийх байсан цорын ганц зүйл бол дээр дурдсан 2 -р зурагт үзүүлсэн IR туяаны тогтмол гүйдлийн хөтчийн хэлхээг ашиглах байсан.

Өөр нэг анхаарах зүйл бол бүх IR дамжуулагчийг 38 кГц -ээр зохицуулдаггүй, TSOP38328 нь 38 кГц -т тохируулагдсан байдаг.

Алхам 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

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