IR ışınlarını farklı cihazlarla kontrol etme şeması. LED'i IR uzaktan kumandayı kullanarak kontrol ediyoruz. IR veri iletim formatları

  • 22.05.2019

Amaçlanan cihazlar arasında uzaktan kumanda ve kontrol açısından kızılötesi (IR) radyasyon kullanan cihazlar uzun süredir devam eden ve onurlu bir yere sahiptir.

Örneğin, ilk kızılötesi uzaktan kumandalar, bu tür kontrollerle donatılmış ilk TV'yi piyasaya süren Grundig ve Magnavox sayesinde 1974'te ortaya çıktı. Kızılötesi radyasyon kullanan sensörler otomasyonda yaygın olarak kullanılmaktadır.

IR kontrol cihazlarının ana avantajı, düşük hassasiyetleridir. elektromanyetik girişim ve ayrıca bu cihazların kendilerinin diğer elektronik cihazlara müdahale etmemesi. Kural olarak, IR uzaktan kumandası konut veya endüstriyel tesislerle sınırlıdır ve IR radyasyonunun yayıcısı ve alıcısı doğrudan görüş hattında olmalı ve birbirlerine doğru yönlendirilmelidir.

Bu özellikler, söz konusu cihazların ana uygulama kapsamını belirler - uzaktan kumanda Ev aletleri ve otomasyon cihazları açık kısa mesafeler ve ayrıca radyasyonun doğrusal yayılma çizgisinin kesişme noktasının temassız tespitinin gerekli olduğu yerler.

Kızılötesi ışınları kullanan cihazların ortaya çıkışının şafağında bile geliştirilmesi ve kullanılması çok basitti, ancak günümüzde modern teknolojilerin kullanılmasıyla elektronik veritabanı Bu tür cihazlar daha da basit ve daha güvenilir hale geldi. Hatta fark edilmesi kolay olduğu gibi Cep telefonları ve akıllı telefonlar iletişim ve kontrol için kızılötesi bağlantı noktasıyla donatılmıştır Ev aletleri Yaygın kullanımına rağmen IR kanalı aracılığıyla kablosuz teknolojiler Bluetooth ve Wi-Fi gibi.

Master Kit, DIY projelerinde kullanılmak üzere tasarlanmış çeşitli kızılötesi modüller sunar.

Farklı karmaşıklık ve amaç derecelerine sahip üç cihazı ele alalım. Kolaylık sağlamak için, tüm cihazların temel özellikleri incelemenin sonunda yer alan bir tabloda özetlenmiştir.

  1. Kızılötesi bariyer sensör olarak kullanılmak üzere tasarlanmıştır güvenlik sistemi spor müsabakaları sırasında fotoğraf kaplama olarak ve ayrıca otomasyon cihazlarının 50 metreye kadar mesafeden uzaktan kontrol edilmesi için.

Cihaz, bir verici ve bir alıcı olmak üzere iki modülden oluşur. Verici, NE556 çift entegre zamanlayıcı üzerine monte edilmiştir ve kare darbeler 36 kHz doldurma frekansı ile. Zamanlayıcı, kendisine bağlı kızılötesi LED'leri doğrudan kontrol etmek için yeterince güçlü bir akım çıkışına sahiptir.

NE556'nın tek analoğu ünlüdür integral zamanlayıcı Onlarca yıldır tüm radyo amatörleri ordusunun geliştirilmesine sadakatle hizmet eden NE555 elektronik aletler. 20 örnek kullanarak zamanlayıcıyı öğrenin elektronik devreler Bu zamanlayıcı temel alınarak geliştirilen ABC Elektronik Mühendisi serisindeki "Devre Tasarımı Klasikleri" yapım kiti kullanılarak yapılabilir. Devreleri kurarken havyaya bile ihtiyacınız yok; hepsi lehimsiz bir devre tahtası üzerinde toplanmıştır.

Yayılan sinyal, temeli özel bir mikro devre olan bir alıcı tarafından alınır, bir tepe detektörü tarafından tespit edilir ve 10A'ya kadar anahtarlama akımına izin veren bir rölenin bağlı olduğu bir transistör üzerindeki bir akım amplifikatörüne gider.

Kızılötesi bariyer, sadeliğine rağmen oldukça hassas bir cihazdır ve hem "iletim" hem de "yansıma" ile çalışmanıza olanak tanır ve yansıyan sinyallerin etkisini ortadan kaldıran verici ve alıcı için başlıklar üretilmesini gerektirir.

Bir Elektronik Mühendisi serisinin daha önce bahsedilen ABC'sinden “Dijital Laboratuvar” seti ile birlikte kızılötesi bariyer kullanmanın bir örneği görülebilir.

  1. - Bu, herhangi bir kızılötesi uzaktan kumandayla kontrol edilen bir ışık anahtarıdır.

Modül, uzaktan kumandadaki herhangi bir düğmeyi kullanarak aydınlatmayı veya diğer elektrikli cihazları kontrol etmenizi sağlar.

Tipik olarak her uzaktan kumandada nadiren kullanılan veya hiç kullanılmayan düğmeler bulunur. Bu anahtarı kullanarak avize, vantilatör vb. cihazları açıp kapatabilirsiniz. TV'nizi veya stereo sisteminizi kontrol ettiğiniz aynı uzaktan kumandadan.

Güç uygulandığında modül, uzaktan kumandada seçilen düğmeye karşılık gelen sinyali almak için 10 saniye "bekler" ve bu sürenin sonunda basılan düğmeyi "hatırlar". Bundan sonra modül rölesini aktif hale getirmek için bu butona bir kez basmak yeterli olacaktır, tekrar basıldığında röle kapanacaktır. Böylece “tetikleyici” tipi bir kontrol modu uygulanır. Modül, gücü kapatılsa bile programlanmış olarak kalır.

Güç kapatıldığında modülün son durumunu "hatırladığına" dikkat edilmelidir.

Cihazın bir modu var otomatik kapanma Yükün kapatılmasının unutulması durumunda, açıldıktan yaklaşık 12 saat sonra yük.

Modül rölesi gücü 1500 W'a kadar değiştirebilir.

  1. Ayarlamak Kablosuz kontrol IR kanalı üzerinden 4 düğmeli kendi uzaktan kumandasına ve her biri 2000 W'lık 4 kontrol kanalına sahiptir.

4 uzaktan kumanda kanalının her biri “düğme” modunda çalışır; Uzaktan kumandadaki ilgili düğmeye basıldığında kanal rölesi kapatılır.

Modülü kullanarak, iki fırçalı elektrik motorunun tersinir kontrolünü organize etmek mümkündür, çünkü her rölede ortak bir tel ile bir normalde kapalı (NC) ve bir normalde açık (NO) kontak bulunur.

Kullanım kolaylığı için her kanal, röle aktivasyonunu gösteren bir LED ile donatılmıştır.

Kitin uzaktan kumandası bir CR2032 elemanı tarafından çalıştırılır.

İle yük kontrolü daha fazla güç Dikkate alınan tüm cihazlar için bu, genişletme modülleri kullanılarak yapılabilir:

4000 W'a kadar: genişletme modülü yeterli olacaktır;

8000 W'a kadar: genişletme modülü yeterli olacaktır.

Kızılötesi kontrollü modüller

satıcı kodu

İsim

Besleme gerilimi

Kontrol kanalı sayısı

Bir kanalın maksimum yük gücü, W

Uygulama örnekleri

Kızılötesi bariyer

12V sabit

Güvenlik aletleri; spor yarışmaları; robotik; otomasyon cihazları

Işık anahtarı

12V sabit;

220VAC

Aydınlatma, havalandırma, ısıtma kontrolü

Kablosuz Kontrol Kiti

12V sabit

Komütatör motorlarının tersinir kontrolü; Ev aletlerinin 4 kanallı kontrolü

15:45 20.03.2002

Bir bilgisayarı herhangi bir IR uzaktan kumandayla kontrol etmenin üç yolu. Bu materyal esas olarak şunları içerir: teorik bilgi Bir bilgisayarı kontrol etmek için televizyonların ve diğer ev aletlerinin kızılötesi uzaktan kumandalarının kullanımına ilişkin. Bulmak gerçek uygulama böyle bir olasılık o kadar da zor değil. Programların başlatılmasını kontrol edebilirsiniz; fare imlecini hareket ettirin ve düğmelerine basmayı taklit edin; klavye tuşlarına basmayı simüle edin; WinAmp'ı yönetin; bilgisayarı kapatıp yeniden başlatın.

Üç yöntem ele alınacaktır. Hepsi bilgisayara bağlı bir IR alıcısı gerektirir. Son iki yöntem, kendinizin lehimlemesi zor olmayan ilkel devreler içerir.

En baştan başlayalım basit seçenek- Birçok mağazada 15 ila 40 dolar arasında değişen fiyatlarla satılan sıradan kızılötesi adaptörlerle çalışır. Bir USB veri yolu veya bir RS-232 seri bağlantı noktası (normal COM bağlantı noktası) aracılığıyla bağlanırlar. Son seçenek Bizim düşüncemize göre bu tercih edilebilir görünüyor çünkü incelenen yazılım büyük olasılıkla USB sürümleriyle çalışmayacaktır adaptörler. Ayrıca daha az maliyetlidirler. Bizim durumumuzda COM portu üzerinden bağlanan TEKRAM IRmate IR-210B adaptörünü kullandık. Bulduğumuz ve tanımladığımız programların herhangi bir adaptör için sürücü kurulumu gerektirmediği konusunda sizi hemen uyarmalıyız. Programların kendisi doğrudan COM bağlantı noktasıyla çalışır. Yüklü sürücüler müdahale edecek normal operasyon. Eğer kullanırsan USB versiyonları adaptörler, o zaman durum tam tersidir - sürücüler gereklidir, ancak daha önce de belirtildiği gibi, tüm programların ayarları bu tür cihazlar için destek içermiyordu.

Program Shareware koşulları altında dağıtılmaktadır. İÇİNDE demo modu Uzaktan kumandadan yalnızca dört komutu kullanmak mümkündür. WinLirc aracılığıyla çalışanlar da dahil olmak üzere çeşitli bağdaştırıcıları destekler (bu ayrıca ele alınacaktır). AVerMedia TV tarayıcı uzaktan kumandaları doğrudan desteklenir. Tam liste Desteklenen cihazlar geliştiricilerin web sitesinde bulunabilir.

Programın kullanımının oldukça kolay olduğu ortaya çıktı. Rus dili için destek var. Programla çalışmanın açıklamasına ayarlarla başlayalım.

"Dosya" menüsünde bulunurlar. Başlangıçta adaptörün hangi bağlantı noktasına bağlı olduğunu belirtmeniz gerekir. IRMate 210'umuz için program açıklamasında bir not vardı: yalnızca 2400 bps bağlantı noktası hızında çalışır. Talimatlara uyuyoruz, aksi takdirde tüm ayarlar oldukça optimaldir. Bu programla ve diğerleriyle çalışmanın mantığı, öncelikle programda bir kaynak - kontrol paneli - oluşturmanız gerektiğini ima eder. Örneğimizde buna "Samsung" adını verdik. Daha sonra kaynağa komutlar eklenir, uzaktan kumanda adı altında bulunurlar. Bunları eklerken program uzaktan kumandadan gelen sinyalleri değerlerine atar. Uzaktan kumanda düğmesine bir eylem atamak için fareyle sürüklemeniz yeterlidir doğru komut"Tetiklenen komutlar" penceresinde ve "Eylem listesi" sekmesinde gerekli olan her şeyi belirtin. Programın kayıtlı olmayan bir sürümü, bir diyagramda dörtten fazla eylem oluşturmanıza izin vermez.

Bu programın kurulumunu yaparak nasıl çalışacağımızı anlatmaya başlayalım. Programı ilk başlattığınızda ana menünün "Genel Yapılandırma" bölümüne yönlendirileceksiniz. Burada kullandığınız adaptör tipini seçmeniz gerekir. Bizim durumumuzda bu Genel Seri IR Alıcısıdır. Ardından “Donanım Kurulumu” öğesine gidin.

Aynı şekilde önceki program, boş alana sağ tıklayın ve menüden “Yeni Uzaktan Kumanda” seçeneğini seçin. Biz buna Samsung adını verdik. Daha sonra, farenin sağ düğmesini kullanarak IR uzaktan kumandadan tuşlar eklemeye başlıyoruz (“Yeni uzaktan kumanda düğmesi”). Uzaktan kumanda düğmelerini tanımlama sürecinde bir sorun ortaya çıktı - tüm düğme kodları programa aynı görünüyordu. Düğme kodu "İmza" penceresinin sağında görüntülenir ve COM bağlantı noktasından okunan basit bir veri kümesidir. Çözüm basitti: Ekran görüntüsünde bağlantı noktası göstergesinin yanında bir "Kurulum" düğmesi var. “Cihaz Ayarları” adlı ikinci sekmeyi seçmeniz gereken ayarlar penceresini açar. İçinde "IR kod uzunluğu" parametresini daha büyük bir değere, örneğin 32 bayta ayarlayın.
Uzaktan kumandadaki önceden tanımlanmış düğmelere eylemler atamak için üçüncü "Eylemler" bölümüne gitmeniz gerekir. Uzaktan kumandamızı ekleyin ve önceki bölümde tanımladığımız düğmeleri ekleyin, ancak artık seçim sağ tıklama açılır menüsünden olacaktır. Komutlara yönelik eylemler sağ pencereye eklenir.

"OSD'yi Devre Dışı Bırak" kutusunu işaretleyerek, uzaktan kumanda üzerinde bu tuşa bastığınızda ekranda açılacak pencereden kurtulacaksınız.

Öznel olarak uICE'ı PCRemote'tan daha çok beğendim. Ama ikisini de denemek daha iyi çünkü... aralarında birkaç fark var. Ayrıca kayıtlı olmayan versiyonları kullanacaksanız uICE 30 gün sonra işlevselliğini tamamen kaybedecek, PCRemote ise yukarıda belirtilen kısıtlamalarla çalışacaktır.

Ev yapımı IR alıcılarıyla çalışma

Yukarıda tartışılan yöntem, halihazırda bir IR adaptörüne sahip olanlar için uygundur veya bir tane satın almak herhangi bir zorluğa neden olmaz. Aksi takdirde, standart bir RS-232 bağlantı noktası üzerinden bağlanan basit bir IR alıcısını kendiniz oluşturmak hiç de zor değildir. Üstelik çok sayıda var daha fazla program, özellikle ev yapımı IR alıcılarıyla çalışıyor. Bu tür programların en popüleri WinLirc'tir. Buna bir program değil, COM bağlantı noktasıyla çalışmak için bir arayüz demek daha doğru olur. Bu arayüz aşağıda anlatılacak olan diğer tüm programlar tarafından kullanılır.

Bu, yukarıda açıklanan cihazların arayüzüdür. altında çalışıyor Windows kontrolü 95/98/ME/NT/2000. Başlangıçta Unix için yaratıldı, dolayısıyla bunun hayranları işletim sistemiİhtiyaç duydukları her şeyi www.lirc.org adresindeki bu sitede bulacaklar. Bu program kendi başına yalnızca cihazımızın COM bağlantı noktasından alınan sinyalleri alma ve işleme yeteneğine sahiptir. Uzaktan kumandayı kullanarak bilgisayarda herhangi bir işlem gerçekleştirmek için, diğer programlara ihtiyaç vardır ve bu programlar da tüm verileri WinLIRC'den alır. Yukarıda anlatılan programların tümü WinLIRC ile çalışabilmektedir.

Sürüm 2.0 geçen gün çıktı. Program Shareware koşulları altında dağıtılmaktadır, ancak vatandaşlar için eski SSCB Orada ücretsiz kayıt. Programın yetenekleri oldukça geniştir: klavye emülasyonundan ve WinAmp kontrolünden kontrole kadar harici cihazlar. Tüm bu özellikler yalnızca uygun eklentiler yüklendikten sonra görünür. Hepsi yazarın web sitesinde bulunmaktadır.

Bizim durumumuzda bu programla WinLIRC üzerinden çalışmamız gerekecek. Yazara göre geleneksel IR adaptörleriyle çalışmaya yönelik eklentiler şu anda yalnızca geliştirilmektedir. Açıkçası ben bu devreyi lehimlemedim, bu yüzden bunlar ve diğer ifadeler teorik kısma atfedilmesi daha iyi. Bu nedenle, olmadan devam etmek daha akıllıca olacaktır. gereksiz kelimeler bazı açıklamalı referanslar sağlayın.

Komütatör motor kontrol çipi, IR uzaktan kumanda, NRF24L01 radyo modülü, OKI 120A2, SD Kart Modülü, Komütatör motor kontrol çipi, M590E GSM GPRS modem, Gerçek zamanlı saat DS 3231/DS 1307, LM2596 devresinde Mini 360, L293D, Kızılötesi sensör ve mesafeler, gerçek zamanlı saat, HC-SR501, birim Güç Mini LM2596 devresinde 360, L298N kumanda, HC-SR501, GSM GPRS, M590E GSM GPRS modem, DS 3231/DS 1307 gerçek zamanlı saat, Wi-Fi modülü ESP8266-12E, Kart Modülü, Güç kaynağı, Mini 360, L293D, LM2596 devresinde Mini 360 güç kaynağı, Radyo modülü, IR uzaktan kumanda, Ethernet kalkanı, Fırça motor kontrol çipi, Fırça motor kontrol çipi, IR uzaktan kumanda, SD Kart Modülü , Radyo modülü NRF24L01, OKI motoru, L293D, Step motor, Güç kaynağı, L293D, LM2596 devresinde Mini 360 güç kaynağı, SD hafıza kartı, Ethernet kalkanı, HC-SR501 hareket sensörü, ESP8266-12E Wi-Fi modülü, OKI 120A2 step motor, Step motor,

Veri değişimi kızılötesi aralığında

Güvenilir alım ve parazitlere karşı garantili koruma sağlamak için sinyal modülasyonu ve kodlama kullanılır. Veri iletimi yakın görünür kızılötesi spektrumda gerçekleştirilir. Çoğu dalga boyu uygulanan sistemler 800–950 nm arasında değişir. Kurtulmanın en kolay yolu arkaplan gürültüsü- standart frekanslardan birini iletirken sinyali modüle edin (doldurun): 30, 33, 36, 37, 38, 40, 56 kHz. Tüm modern entegre alıcılar bu frekanslara ayarlanmıştır.

Bir kod dizisini iletirken yeterli aralığı sağlamak için, güçlü sinyal. IR LED'den geçen akım 1 A'ya ulaşabilir - bu tür akımlar darbeli modda oldukça kabul edilebilirken, ortalama güç tüketimi belgelerde belirtilen izin verilen maksimum değeri aşmamalıdır.

Gelişmiş çok sayıda özel cips(SAA3010, GS8489, KS51840, vb.), hazır bir kod dizisi oluşturarak bekleme modunda minimum akım tüketir, bu da pillerle çalıştırıldığında önemlidir. Bu mikro devreler uzaktan kumandaların (RC) tasarımını önemli ölçüde basitleştirir. Uzaktan kumanda düğmesine bastığımızda verici çipi etkinleştirilir ve belirtilen dolguya sahip bir kod dizisi üretir. LED bu sinyalleri kızılötesi radyasyona dönüştürür. Yayılan sinyal, IR radyasyonunu tekrar elektriksel darbelere dönüştüren bir fotodiyot tarafından alınır. Bu darbeler alıcı çip tarafından güçlendirilir ve demodüle edilir. Daha sonra kod çözücüye beslenirler. Kod çözme genellikle bir mikrodenetleyici kullanılarak yazılımda yapılır.

IR uzaktan kumanda alıcısı, verileri iki fazlı kodlamayla kurtarmalı ve büyük hızlı değişiklikler Parazitten bağımsız olarak sinyal seviyesi. Alıcı çıkışındaki darbe genişliği nominal değerden %10'dan fazla farklı olmamalıdır. Alıcının ayrıca sürekli dış ışığa karşı duyarsız olması gerekir. Tüm bu gereksinimleri karşılamak oldukça zordur. IR uzaktan kumanda alıcısının eski uygulamaları, hatta özel çipler kullananlar bile düzinelerce bileşen içeriyordu. Bu tür alıcılar sıklıkla kullanıldı rezonans devreleri doldurma frekansına göre ayarlanmıştır. Bütün bunlar tasarımın üretimini ve yapılandırılmasını zorlaştırdı ve iyi bir koruma kullanılmasını gerektirdi.

İÇİNDE Son zamanlardaÜç pimli entegre IR uzaktan kumanda alıcıları (SFH5110-xx, TSOP17xx, TFMS5хх0, vb.) yaygınlaştı. Tek bir pakette bir fotodiyot, bir ön amplifikatör ve bir sürücüyü birleştiriyor. Çıkış, mikro denetleyici tarafından daha ileri işlemlere uygun, dolgusuz düzenli bir TTL sinyali üretir. En önemli parametre bir alıcı seçerken - doldurma frekansı.

Dahili entegre alıcı amplifikatörü yüksek katsayı bu nedenle amplifikasyon, kendi kendini uyarmayı ortadan kaldırmak ve güç kaynağı devrelerindeki gürültünün etkisini ortadan kaldırmak için, VCC pinine mümkün olduğunca yakın bağlanmış, en az 4,7 μF kapasiteli bir elektrolitik kapasitör kullanılması gerekir.

IR Alıcısını Bağlama

TSOP31236 yongasını IR uzaktan kumanda alıcısı olarak kullanıyoruz. Tek bir pakette bir fotodiyodu, bir ön yükselticiyi ve bir şekillendiriciyi birleştirir. Çıkış, mikro denetleyici tarafından daha ileri işlemlere uygun, dolgusuz düzenli bir TTL sinyali üretir. Taşıyıcı frekansı 36 kHz, çıkış terstir yani sinyal yoksa pine mantıksal “1” gelir, sinyal göründüğünde ise mantıksal “0” gönderir.

Kütüphane IRuzaktan

Uzaktan kumandanızın protokolünü öğrenebilir ve uzaktan kumandadan gönderilen kodları almak için bir taslak yazabilirsiniz. Neyse ki zaten yazılmış evrensel kütüphane herhangi bir uzaktan kumandadan kod almak ve işlemek için - IRremote.

Kütüphane dosyalarını kitapla birlikte gelen kütüphaneler/IrRemote klasöründe bulabilirsiniz. elektronik arşiv. Kütüphaneyi projelerinizde kullanmak için onları dizinin kütüphaneler klasörüne yerleştirin. Arduino kurulumları. Kodu almak ve göndermek için taslak seri portörnekte sunulmuştur.

#katmak

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN); decode_results sonuçları;

geçersiz kurulum ()

Seri.begin(9600);

irrecv.enableIRIn(); // alıcıyı etkinleştir

geçersiz döngü ()

if (irrecv.decode(&sonuçlar))

Seri.println(sonuçlar.değer, HEX); irrecv.resume(); // sonraki değeri al

Ayrıca IR komutlarını da iletebilirsiniz. Desteklenen protokoller: NEC, Sony SIRC, Philips RC5, Philips RC6. Verici IR LED'in pin 3'e bağlanması gerekir. IR kodunun gönderilmesine ilişkin çizim örnekte sunulmuştur.

#katmak IRgönder gönder;

geçersiz kurulum ()

Seri.begin(9600);

geçersiz döngü ()

if (Serial.read() != -1)

for (int i = 0; i< 3; i++)

irsend.sendSony(0xa90, 12); // Sony TV güç kodu gecikmesi(100);

IR uzaktan kumanda kodlarını almaya yönelik taslak

İlk görev, uzaktan kumandamız için anahtar kodların bir listesini almaktır.

Kontrol için uzaktan kumanda tuşlarının bir listesini tanımlayalım:

<>- ileri hareket;

<↓>- geriye doğru hareket etmek;

<←>- Sola çevirin;

<→>- Sağa dönün;

<–CH>- ileri/geri hareket ederken hız artışı;

- ileri/geri hareket ederken hızın azaltılması;

<–VOL>- sola doğru yerinde dairesel hareket;

- sağa doğru yerinde dairesel hareket;

<0>- robotu durdurmak.

Örnekteki taslağı çalıştırın ve kodları alın gerekli anahtarlar uzaktan kumandanız için. Kod değerleri seri porta gönderilir.

#katmak

geçersiz kurulum ()

// IR için kesmeler

geçersiz döngü ()

// tıklama kodunu işliyoruz if(ir_kod>0)

ir_go(ir_kod); Seri.println(ir_kod); ir_kod=0;

// IR uzaktan kumandadan gönderilen kodu alın void get_ir_kod()

ayırmaInterrupt(0); // kesme 0'ı devre dışı bırakır if (irrecv.decode(&results))

if (sonuçlar.değer > 0 && sonuçlar.değer< 0xFFFFFFFF)

// 1 saniye geçti mi?

if (ir_time2-ir_time1>1000)

(ir_kod = ir_dt;ir_time1=ir_time2;)

başka

ir_kod = 0;

irrecv.resume();

Bunları sabit olarak yazalım

#define İLERİ 1936 //

#define GERİ 3984 // ↓

#define SPEED_UP 144 //ch+

#define SOL 3472 // ←

#define SAĞ 1424 // →

#define STOP 2320 // 0 - dur

Uzaktan kumandadan bir komutun alındığını kesme 0 (dijital pin2'de) ile belirleyeceğiz. Kesinti durumunda, uzaktan kumandadan gelen kodu belirleyen ve onu ir_kod değişkenine yazan get_ir_kod() prosedürü başlatılır. loop() prosedürü ir_kod değişkenini kontrol eder ve eğer değişken sıfır değilse (kodu uzaktan kumandadan alıyorsa), ir_go() eylem çıktı prosedürünü çağırır. Açık bu aşamada- bu, bir tuşa basıldığında beklenen eylemin seri porta çıkışıdır.

Bu taslak örnekte sunulmuştur.

Uzaktan kumandadan gelen komutun sonucu seri port monitöründe görüntülenir.

#katmak

// IR alıcı girişi int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN); decode_results sonuçları; imzasız uzun ir_dt, old_ir; uzun ir_kod;

işaretsiz uzun ir_time1, ir_time2;

// IR uzaktan anahtar kodları (marmitek)

#define İLERİ 1936

#define GERİ 3984

#define SPEED_UP 144 //ch+

#define SPEED_DOWN 2192 //ch-

#define SOL 3472

#SAĞ 1424'ü tanımla

#define CIRCLE_LEFT 3216 //cil+

#define CIRCLE_RIGHT 1168 //vol-

#define DUR 2320 //0

geçersiz kurulum ()

// seri bağlantı noktası Serial.begin(9600);

// alıcıyı etkinleştirin irrecv.enableIRIn(); ir_time1=0;ir_time2=0;

// IR için kesmeler

// FALLING – voltaj seviyesi değiştiğinde kesme çağrısı

// yüksekten (YÜKSEK) düşüğe (DÜŞÜK)attachInterrupt(0, get_ir_kod, FALLING);

geçersiz döngü ()

// tıklama kodunu işliyoruz if(ir_kod>0)

ir_go(ir_kod); ir_kod=0;

// IR uzaktan kumandadan gönderilen kodu alın void get_ir_kod()

ayırmaInterrupt(0); // kesmeyi devre dışı bırak 0

if (irrecv.decode(&sonuçlar))

if (sonuçlar.değer > 0 && sonuçlar.değer< 0xFFFFFFFF)

ir_dt = sonuçlar.değer; ir_time2=millis();

// 1 saniye geçti mi?

if (ir_time2-ir_time1>1000)

(ir_kod = ir_dt;ir_time1=ir_time2;) aksi halde

ir_kod = 0;

irrecv.resume();

// kesme prosedürünü etkinleştirin 0attachInterrupt(0, get_ir_kod, FALLING);

// alınan koda dayalı eylem void ir_go(kod)

anahtar (kod)

case FORWARD: // ileri yön Serial.print("ileri\n");

kırmak;

case BACK: // geriye doğru yön Serial.print("geri\n");

kırmak;

case SPEED_UP: // hız++ Serial.print("hız++\n"); kırmak;

case SPEED_DOWN: // hız-- Serial.print("hız--\n"); kırmak;

case LEFT: // sola Serial.print("left\n"); kırmak;

case RIGHT: // sağa Serial.print("sağ\n"); kırmak;

case CIRCLE_RIGHT: // sağa daire çizin Serial.print("circle_right\n"); kırmak;

case CIRCLE_LEFT: // sol daire Serial.print("circle_left\n"); kırmak;

case STOP: // Serial.print'i durdur("dur\n"); kırmak;

Başlangıç ​​veya “Cihaz nasıl başladı?”

...Ben geldiğimde Victoria kanepede oturuyor, televizyona bakıyordu. Zor bir gün olmuştu, bu yüzden hiçbir şey yapmak istemiyordu. Birkaç dakika pop dizileri izledik, sonra bitti ve Vika televizyonu kapattı. Oda karanlık oldu. Dışarıda yağmur yağıyordu ve bu durum evin de soğuk olduğunu gösteriyordu.
Vika kanepeden kalktı ve dokunarak elektrik düğmesini aramaya başladı. Nedense duvar lambası kanepenin yanında değil başka bir duvarda asılıydı ve ışığı açmak için odanın karşı tarafına geçmek zorunda kaldım. Sonunda ışığı açtığında oda akkor ampulün sıcak parıltısıyla doldu.
Yanımda, buruşuk bir çarşafın üzerinde televizyonun uzaktan kumandası duruyordu. Alt düğmeler işaretlenmemiş ve büyük olasılıkla kullanılmıyor. Ve sonra aklıma ilginç bir fikir geldi...
- Vic, bunu kutudaki uzaktan kumandayı kullanarak lambanı açabileceğin şekilde yapmamı ister misin? Ekstra düğmeler bile var...

Konsept
Cihazımızın IR uzaktan kumandadan sinyal alabilmesi, “kendi” butonunu diğerlerinden ayırt edebilmesi ve yükü kontrol edebilmesi gerekiyor. İlk ve son noktalar bir balta kadar basittir. Ama ikincisi biraz daha ilginç. Kendimi belirli bir uzaktan kumandayla sınırlamamaya karar verdim (Neden? - "Bu ilginç değil!"), ancak uzaktan kumandayla çalışabilecek bir sistem yapmaya karar verdim. farklı modeller uzaktan kumandalar farklı ekipman. Keşke IR alıcısı pes etmeseydi ve sinyali güvenle yakalasaydı.

Bir fotodetektör kullanarak sinyali yakalayacağız. Üstelik her alıcı uygun değildir; taşıyıcı frekansı, uzaktan kumandanın frekansıyla eşleşmelidir. Alıcının taşıyıcı frekansı, işaretinde belirtilmiştir: TSOP17xx - 17, alıcı modelidir ve xx, kilohertz cinsinden frekanstır. A taşıyıcı frekansı Uzaktan kumanda belgelerde veya internette bulunabilir. Prensip olarak, frekanslar eşleşmese bile sinyal alınacaktır, ancak hassasiyet berbat olacaktır - uzaktan kumandayı doğrudan alıcıya sokmanız gerekecektir.

Üreten her firma Ev aletleri, donanım imalatında standartlara uymak zorundadır. Uzaktan kumandaların modülasyon frekansları da standarttır. Ancak geliştiricilerin yazılım tarafında büyük bir şansı var - uzaktan kumanda ile cihaz arasındaki değişim protokollerinin çeşitliliği tek kelimeyle şaşırtıcı. Bu nedenle, bulmam gerekiyordu evrensel algoritma Değişim protokolünü umursamayan. Bu şekilde çalışır:

Cihaz hafızasında depolananlar kontrol noktaları. Bu tür her nokta için, IR alıcısından gelen zamanı ve çıkış durumunu (0 veya 1) kaydetmeniz gerekir.
Uzaktan kumandadan sinyal alındığında MK her noktayı sırayla kontrol edecektir. Tüm noktalar eşleşiyorsa, bu, cihazın programlandığı düğmenin ta kendisiydi. Alıcıdan gelen çıktı en az bir noktada şablonla eşleşmiyorsa cihaz hiçbir şekilde tepki vermeyecektir.

Ancak hiç kimse hataları iptal etmedi! Sinyalin şablondan farklı olması mümkündür ancak
kontrol noktalarında değerler aynı olacaktır. Bu işe yarayacak yanlış alarm. Nadir bir piç gibi görünüyor ve onunla savaşmak gerçekten zor! Ama aslında her şey o kadar da kötü değil (ve hatta bazı yerlerde iyi).

Öncelikle elimizde dijital sinyal Bu, dürtülerin sürekli gecikmelerle (zamanlamalarla) geldiği ve ortaya çıkmadığı anlamına gelir. Bu nedenle, eğer noktalar yeterince yoğunsa, bazı dürtülerin kaçırılacağından korkmanıza gerek yoktur.

İkincisi, küçük gürültü (genellikle nadir kısa darbelere benzer) çoğu durumda ormanın içinden geçer - çünkü doğrudan kontrol noktasına çarpmazsa sistemi hiç etkilemez. Bu, gürültüye karşı doğal korumaya sahip olduğumuz anlamına gelir.

İkinci tür hatalar (aka "Komutun eksik olması"), noktanın darbenin kenarına (alıcı çıkışındaki sinyalin seviyesini değiştirdiği yere) çok yakın konumlandırılması nedeniyle ortaya çıkar.
Kontrol noktasından birkaç mikrosaniye sonra sinyalin YÜKSEK'ten DÜŞÜK'e değişmesi gerektiğini düşünün. Şimdi uzaktan kumandanın normalden biraz daha hızlı bir komut verdiğini hayal edin (oldukça sık olur). Nabız cephesi zaman içinde değişti ve artık kontrol noktasından ÖNCE gerçekleşiyor! Alıcıdan gelen çıktı desenle eşleşmeyecek ve sistem sıfırlanacaktır.
Bunun olmasını önlemek için kontrol noktalarını cephelerden uzağa yerleştirmeniz gerekiyor.

"Her şey yolunda" diyorsunuz, "Ama kontrol noktalarını nereden bulabilirim?" Bu yüzden uzun zamandır bu konuya takılıp kaldım. Sonuç olarak, noktaların yerleştirilmesini size emanet etmeye karar verdim.
Cihazda J1 jumper'ı bulunmaktadır. Açıldığında kapalıysa, cihaz, IR alıcısının çıkardığı her şeyi aptalca UART aracılığıyla iletecektir. Kablonun diğer tarafında, bu veriler TSOP'tan gelen darbeleri bilgisayar ekranında görüntüleyen programım tarafından alınıyor. Tek yapmanız gereken farenizi kullanarak kontrol noktalarını bu grafik boyunca dağıtmak ve bunları EEPROM'a aktarmaktır. UART kullanmak mümkün değilse, J2 jumper'ı kurtarmaya gelir. Cihaz kapatıldığında UART üzerinden veri çıkışı yapmaz, EEPROM'da saklar.


Şema
Çok basit. ATTiny2313'ü denetleyici olarak aldım. Frekans 4 megahertz, kuvarstan veya dahili RC zincirinden.
İletişim ve güç kaynağı için RX ve TX hatları ayrı bir konektörde sağlanır. Orada, MK'yi cihazdan çıkarmadan yeniden başlatabilmeniz için RESET görüntülenir.
Fotodedektörün çıkışı INT0'a bağlanır, 33k direnç aracılığıyla güç kaynağına bağlanır. Güçlü bir parazit varsa, oraya daha küçük bir direnç, örneğin 10k koyabilirsiniz.
D4 ve D5 pinlerinde jumperlar var. D5'te Jumper1 ve D4'te Jumper2.

Güç modülü D6 pinine bağlanır. Üstelik sahip olduğum en küçük triyak olan BT131'i aldım. Akımı 1A - serin değil, ancak gövde çok büyük değil - TO92. Küçük yükler için bu kadar. Optokuplörü MOC3023'te yaptım - sıfır geçiş sensörüne sahip değil, bu da düzgün yük kontrolü için uygun olduğu anlamına geliyor (bunu burada hiç uygulamadım).

B Bağlantı Noktası neredeyse tamamen konektöre bağlı - oraya bir gösterge veya başka bir şey takabilirsiniz. Cihazın donanım yazılımını güncellerken aynı konektörü kullanıyorum. Pin B0 LED tarafından işgal edilmiştir.

Her şey LM70L05 aracılığıyla desteklenmektedir ve diyot köprüsü. Yani girişte gönderebilirsiniz alternatif akım voltajıörneğin bir transformatörden. Önemli olan 25 Volt'u geçmemesidir, aksi takdirde ya stabilizatör ya da kondansatör ölecektir.

Ödeme şu şekilde ortaya çıktı:


Evet arşivdeki panodan biraz farklı. Ancak bu, kendimi son derece gelişmiş bir tahta haline getirdiğim ve size bir demo sürümünü sunduğum anlamına gelmiyor :). Aksine, anakartımın son versiyonda olmayan birkaç kusuru var: Pine bağlı RESET pinim yok ve LED PB7'de takılıyor. Ve bu devre içi programlamaya pek elverişli değildir.

Firmware
Cihaz iki modda çalışabilir. İlkinde - J2 kapalıyken - darbeleri fotodetektörden UART'a iletir. Onunla başlayalım:

UART 9600 hızında çalışıyor yani 4 MHz frekansında UBRR kaydına 25 yazıyoruz.

...fotodedektörün ayağı seğirene kadar bekleyeceğiz. Düştüğü anda (başlangıçta çekme direncinde asılı kalır), zamanlayıcıyı başlatırız (TIMER/COUNTER1, 16 bitli olan) ve herhangi bir giriş değişikliği - herhangi bir mantıksal değişiklik (ICS00 = 1) için INT0 kesmesini açarız. ). Zaman işliyor... bekliyoruz.

Uzaktan kumandanın darbesi sona erdi - fotodetektörden gelen çıktı yükseldi, kesinti işe yaradı. Şimdi timer değerini hafızaya yazıp timer’ı sıfırlıyoruz. Bir sonraki kesmede başka bir bellek hücresine yazmak için yazma işaretçisini de artırmanız gerekir.

Bir darbe daha... çıkış seğiriyor... kesinti... zamanlayıcı değerinin belleğe yazılması... zamanlayıcının sıfırlanması... işaretçi + 2 (bir seferde iki bayt yazıyoruz)...

Ve bu, (RAM'in) sonunun yaklaştığı belli olana kadar devam edecek. Veya sinyal bitene kadar. Her durumda zamanlayıcıyı dondururuz ve kesintileri devre dışı bırakırız. Daha sonra topladığımız her şeyi yavaş yavaş UART'a atıyoruz. Veya J2 kapalıysa - EEPROM'a.

Sonunda onu köreltebilirsin sonsuz döngü ve sıfırlamayı bekleyin - görev tamamlandı.
Ve çıktı bir sayı dizisi olacaktır. Bunların her biri TSOP çıkışının durumundaki değişiklikler arasındaki süredir. Bu dizinin nerede başladığını bilerek (Ve biliyoruz! Bu, YÜKSEK'ten DÜŞÜK'e geçiştir), resmin tamamını eski haline getirebiliriz:

Başlatma işleminden sonra oturup TSOP'un hareket etmesini bekleriz. Bu olur olmaz EEPROM'dan ilk noktayı okuyoruz ve basit bir döngüde orada yazılan kadar basıyoruz. Bu durumda süreyi 32'lik paketler halinde sayıyoruz. Sersemlikten çıkıp alıcı çıkışında ne olduğunu kontrol ediyoruz.

Çıktı beklediğimizle örtüşmüyorsa bu bizim ekibimiz değildir. Sakin bir şekilde sinyalin bitmesini bekleyebilir ve her şeye yeniden başlayabilirsiniz.

Çıktı beklentilerimize uyuyorsa bir sonraki noktayı yükleyip kontrol ediyoruz. Ta ki zamanı = 0 olan bir noktaya gelinceye kadar. Bu, başka nokta olmadığı anlamına gelir. Bu, tüm ekibin çakıştığı ve yükü sizin çekebileceğiniz anlamına gelir.

Yani basit bir algoritma ortaya çıkıyor. Ancak ne kadar basitse o kadar güvenilirdir!

Softina
İlk başta şablonun otomatik olarak ezberlenmesini sağlamayı düşündüm. Yani, jumper'ı kapatırsınız, uzaktan kumandayı TSOP'a sokarsınız ve MK'nin kendisi kontrol noktalarını yerleştirir ve bunları EEPROM'a yerleştirir. Sonra fikrin çılgınca olduğu ortaya çıktı: Az çok yeterli bir algoritmanın çok karmaşık olduğu ortaya çıktı. Yoksa evrensel olmayacak.

İkinci fikir, kontrol noktalarını kendinizin ayarlayabileceğiniz bir bilgisayar programıydı. Teknolojik olarak pek gelişmiş değil ama her şey bu konuyu MK'ye emanet etmekten daha iyidir.


Cihazı, uzaktan kumandadaki istenen düğmeye yanıt verecek şekilde eğitiyoruz:

1) J1 atlama kablosunu kapatın.

2) UART'ı bağlayın. Bağlamanın bir yolu yoksa J2 atlama kablosunu kapatın. Daha sonra cihaz verileri EEPROM'a aktaracaktır.

3) Gücü açın.

4) UART kullanmaya karar verirsek yazılımı başlatın ve durum çubuğuna (pencerenin alt kısmında) bakın. Şöyle demeli: “ COM bağlantı noktası açık." Yazılı değilse bağlantıda bir pervaz ararız ve “Bağlan” butonuna basarız.

5) Uzaktan kumandayı alın ve dürtün istenilen düğme TSOP'ta. Cihaz sinyalin geldiğini algıladığı anda LED yanacaktır. Bunun hemen ardından cihaz UART üzerinden veri aktarmaya (veya EEPROM'a yazmaya) başlayacaktır. İletim tamamlandığında LED söner.

6.1) UART üzerinden çalışıyorsak “UART Üzerinden Yükle” butonuna tıklayın. Durum çubuğunda “Grafik yüklendi…” yazısından da memnunuz.

6.2) EEPROM üzerinden çalışıyorsak programcı ile okuruz EEPROM belleği ve *'e kaydedin. bin dosyası. (Kesinlikle çöp kutusu!). Daha sonra programdaki “Load.bin” butonuna tıklayın ve EEPROM’lu dosyayı seçin.

7) Yüklenen grafiğe bakıyoruz - bu TSOP'tan bir sinyal. Kenar çubuğunda ölçeği değiştirmek için kullanabileceğiniz bir kaydırıcı vardır. Şimdi fareyle programa tıklayıp kontrol noktalarını ayarlıyoruz. Sağ tık noktalar kaldırılır. Sadece onları cephelere çok yakın yerleştirmeyin. Bunun gibi bir şey ortaya çıkıyor:


8) “Save.bin”e tıklayın ve noktaları kaydedin. Daha sonra bu dosyayı EEPROM'a flashlıyoruz. İki nokta arasındaki süreyi 7 bit'e sıkıştırdığımız için 4 ms ile sınırlandırılmıştır. İki nokta arasındaki süre bu değeri aşarsa program noktaları dosyaya göndermeyi reddedecektir.

9) Atlama tellerini çıkarın. Cihazı yeniden başlat. Hazır!

Test videosu

Herkese selam! Burada en basit IR kontrolünün () nasıl yapılacağından bahsedeceğiz. Bu devreyi normal bir TV uzaktan kumandasıyla bile kontrol edebilirsiniz. Sizi hemen uyarıyorum, mesafe çok fazla değil - yaklaşık 15 santimetre, ancak bu sonuç bile işe yeni başlayan birini memnun edecektir. Ev yapımı bir vericiyle menzil iki katına çıkar, yani yaklaşık 15 santimetre daha artar. Uzaktan kumanda ünitesi basit bir şekilde yapılmıştır. Ayarlama sırasında 100-150 ohm'luk bir direnç aracılığıyla 9 voltluk "taca" bir IR LED bağlarız normal düğme sabitlemeden elektrik bandıyla aküye yapıştırın ve elektrik bandı IR LED'in kızılötesi radyasyonunu engellememelidir.

Fotoğraf devreyi monte etmek için ihtiyacımız olan tüm unsurları gösteriyor

1. Fotodiyot (hemen hemen her biri mümkündür)
2. 1 ohm ve 300-500 ohm için direnç (Netlik sağlamak için fotoğrafa 300 ve 500 ohm dirençler yerleştirdim)
3. Düzeltici direnci 47 odada
4. Transistör KT972A veya akım ve yapı bakımından benzer.
5. Herhangi bir düşük voltajlı LED'i kullanabilirsiniz.

Tek bir transistördeki IR kontrol alıcısının şematik diyagramı:


Bir fotodedektör yapmaya başlayalım. Diyagramı bir referans kitabından alınmıştır. Öncelikle tahtayı kalıcı kalemle çiziyoruz. Ancak bunu kurulumu asarak bile yapabilirsiniz, ancak bunu PCB üzerinde yapmanız tavsiye edilir. Benim panom şuna benziyor:


Şimdi elbette elemanları lehimlemeye başlayalım. Transistörün lehimlenmesi:



1 kOhm'luk bir direnci (Kilohm) ve bir inşaat direncini lehimleyin.


Ve sonunda lehimliyoruz son eleman- bu 300 - 500 Ohm'luk bir direnç, 300 Ohm'a ayarladım. İle yayınladı ters taraf baskılı devre kartıÇünkü mutasyona uğramış patileri yüzünden ön taraftan dokunmama izin vermiyordu =)


Kalan reçineyi yıkamak için her şeyi diş fırçası ve alkolle temizliyoruz. Her şey hatasız bir şekilde monte edilirse ve fotodiyot düzgün çalışıyorsa hemen çalışacaktır. Bu tasarımın uygulamalı videosunu aşağıda görebilirsiniz:

Videoda hem kameraya hem de uzaktan kumandaya aynı anda bakmanız gerektiğinden mesafe küçük. Bu nedenle uzaktan kumandanın yönlerine odaklanamadım. Fotodiyot yerine bir fotodirenç koyarsanız ışığa tepki verecektir, duyarlılığın eskisinden daha iyi olduğunu şahsen doğruladım. orijinal diyagramlar fotodirenç. Devreye 12V verdim, iyi çalışıyor - LED parlak bir şekilde yanıyor, fotorezistörün parlaklığı ve hassasiyeti ayarlanıyor. Şu anda bu devreyi kullanarak IR alıcısına 220 volttan güç verebilmem ve ampulün çıkışının da 220V olması için elemanları seçiyorum. Sağlanan diyagram için özel teşekkürler: Thehunteronghosts . Tarafından sağlanan materyal: