kategoriler: Ev otomasyonu, Mikrodenetleyici devreleri
Görüntülenme sayısı: 17351
Makaleye Yorumlar: 0

Mikrodenetleyici Uzaktan Kumanda: IR Uzaktan Kumanda, Arduino, ESP8266, 433 MHz

 

Elektrikli ekipmanların uzaktan veya uzaktan kumandası sorunu, sistemde otomasyon araçlarının bulunup bulunmamasına bakılmaksızın her zaman ilgili olmuştur. Uzaktan kumandanın organizasyonu için, mikrodenetleyici, hepsi yönetilen cihaza atanan gerekli işlevlere bağlıdır. Bu makalede, bir mikro denetleyicinin uzaktan nasıl kontrol edileceği hakkında genel bilgiler öğreneceksiniz.

Mikrodenetleyici uzaktan kumanda

türleri

İki ana uzaktan iletişim türü vardır:


telli. Bir odada (veya odada değil) bulunan aktüatörlerin kontrolü, kontrol panelinden veya başka bir yerde bulunan bir düğme direğinden gerçekleştirildiğinde. Bu durumda, kontrol devrelerinin ve aktüatörlerinin (motorlar veya sistemler, örneğin aydınlatma gibi mekanizmaları içeren röleler, kontaktörler) bir elektrik teli bağlantısı sağlanır.


kablosuz. Bu düzenlemede, kontrol ve yürütme devrelerinin elektrik bağlantısı gerekmez. Kablosuz devrelerde iki cihaz vardır: bir verici veya bir uzaktan kumanda (RC) ve kontrollü devrenin bir parçası olan bir alıcı. Kablosuz kontrol, iki versiyonda yaygındır:

  • Optik sinyal ile. Bu tür sistemler her evde bulunur, böylece TV'nin, klimanın ve diğer ev aletlerinin çalışmasını kontrol edersiniz.

  • Radyo sinyali ile. Zaten bir dizi seçenek var: Bluetooth, ZigBee, Wi-Fi, 433 MHz verici alıcıları ve bu konudaki diğer varyasyonlar.

Modern teknik araçlarla, mikrodenetleyiciyi hem uzaktan kumandadan hem de yerel bir ağdaki Internet üzerinden veya dünyanın herhangi bir yerinden erişerek kontrol edebileceğinizi belirtmek gerekir.



IR uzaktan kumanda

Düşüncemize en basit ve en klasik versiyonla başlıyoruz. IR LED'in titreme sekansından cihaza takılı optik alıcıya bir kod ileterek cihaz kontrolü. Kızılötesi tayfın insan gözü tarafından görülmediğini belirtmek gerekir, ancak çoğu fotoğraf ve video kamera bunu görür.

Çoğu kamera kızılötesi gördüğünden, uzaktan kumandaların servis kolaylığı. Bunu yapmak için, uzaktan kumandayı, verici kameraya bakacak şekilde yönlendirin ve düğmelere basın. Genellikle ekranda mor renk tonlu beyaz bir parıltı görülür.

Bu kontrolün belirgin bir dezavantajı vardır - uzaktan kumandayı alıcıya doğru yönlendirmelisiniz. Uzaktan kumandadaki piller biterse, işlemler de gittikçe azaldığı için hedeflemeniz gerekir.

Avantajları, hem verici hem de alıcı, basitlik, yüksek bakım kolaylığıdır. Detayları kendi projelerinize uygulamak için kırık uzaktan kumandaları ve televizyonları sökerek bulabilirsiniz.

Tipik bir sensör aşağıdaki gibidir. Optik sinyal alındığından, güneş, aydınlatma lambaları ve diğerleri gibi yabancı ışık kaynaklarından tetiklemeyi hariç tutmak gerekir. Kızılötesi sinyalin esas olarak 38 kHz frekansında alındığını da belirtmek gerekir.

IR sensörü

IR sensörlerinden birinin özellikleri şunlardır:

  • taşıyıcı frekansı: 38 kHz;

  • besleme gerilimi: 2,7 - 5,5 V;

  • akım tüketimi: 50 μA.

Ve bağlantı şeması:

IR sensörü bağlantı şeması

Uzaktan kumanda, benzer bir çalışma prensibine sahip olan herkes tarafından kullanılabilir, uzaktan kumandalar:

  • televizyonlar;

  • DVD oynatıcılar

  • radyo teyp kaydediciler;

  • akıllı avizeler, LED şeritler ve daha fazlası gibi modern aydınlatma cihazlarından.

Kontrol paneli

İşte böyle bir sensörü kullanma örneği Arduino ile

Arduino IR Sensörü Örneği

Mikrodenetleyicinin, bizim durumumuzda Arduin, sensörden gelen sinyali anlayabilmesi için IRremote.h kütüphanesini kullanmanız gerekir. Bir sensörden bir sinyalin nasıl okunacağına dair bir örnek için, Arduino IDE'den mikro denetleyicinin seri portunu okuyarak bunları tanımak için bir kod:

#include "IRremote.h" // IR sinyaliyle çalışmak için kütüphaneyi bağlayın.

IRrecv irrecv (2); // alıcının bağlı olduğu çıkışı gösterir

decode_results sonuçları;

void setup () {

Serial.begin (9600); // COM bağlantı noktası hızını ayarlama

irrecv.enableIRIn (); // alımı başlat

}

void loop () {

if (irrecv.decode (& results)) {// veri gelirse

Serial.println (sonuç değeri, HEX); // verileri yazdır

irrecv.resume (); // aşağıdaki komutu kabul et

  }

}

Sonuç olarak, arduino'yu flaş ettiğinizde ve uzaktan kumanda ile alıcıya “parlamaya” başladığınızda, seri port monitörde aşağıdaki resmi göreceğiz:

Seri port monitörü

Bunlar düğmeleri onaltılı biçimde gönderen kodlardır. Böylece, uzaktan kumanda üzerinde hangi kodun hangi düğmeyi gönderdiğini öğrenebilirsiniz, bu nedenle kullanılan uzaktan kumanda için belirli bir gereklilik yoktur, çünkü herhangi birini tanıyabilir ve ilişkilendirebilirsiniz. Bu arada, bu daha önce satılan eğitimli bir evrensel uzaktan kumanda projesi için bir fikir. Ama şimdi internet çağında, bu şekilde kontrol edilen teknoloji miktarı her yıl azalıyor.

Ve bu kodla, sinyalleri tanıyabilir ve yükü yönetebilirsiniz:

#include "IRremote.h"

IRrecv irrecv (2); // alıcının bağlı olduğu çıkışı gösterir

decode_results sonuçları;

void setup () {

irrecv.enableIRIn (); // alımı başlat

}

void loop () {

if (irrecv.decode (& results)) {// veri gelirse

switch (results.value) {

vaka 0xFFA857:

digitalWrite (13, YÜKSEK);

break;

vaka 0xFFE01F:

digitalWrite (13, DÜŞÜK);

break;

    }   

irrecv.resume (); // aşağıdaki komutu kabul et

  }

}

Koddaki ana şey, Switch işlevi aracılığıyla tanımadır, bazen bunlara “anahtar kutusu” denir. İf dallarının bir analogudur, ancak algı için daha güzel bir forma sahiptir. Durum - bunlar, "böyle bir kod gelirse, o zaman ..." seçenekleridir. Kod, belirli sinyaller için 13 iğneyi kontrol eder. ARDUINO kartındaki yerleşik LED'in 13 no'lu pime bağlı olduğunu hatırlatalım, yani. kodun yazarı LED'i kontrol etti.

Bir güç transistörü (daha önce iki makalede ele aldığımız) yüksek veya düşük bir dijital pim kullanarak her şeyi kontrol edebilirsiniz burada ve burada) bir doğru akım yükü ile veya bir doğru akım yükü olan bir triyak ve bir sürücü aracılığıyla, röleleri ve kontaktörleri, genel olarak, hayal gücü için bir bütün alanı kullanabilirsiniz.


Radyo sinyali alımı ve iletimi

Mikrodenetleyicilerle kullanım için, 433 MHz veya 315 MHz çalışma frekanslarına sahip vericiler yaygındır, özel panele bağlı olarak başka frekanslar olabilir, ancak bunlar en yaygın olanlardır. Sistem iki düğümden oluşur - bir alıcı ve mantıksal bir verici.

Radyo sinyali alımı ve iletimi

Resimde verici sağ üstte ve alıcı sol altta gösterilmektedir. Arama için adları: 433MHz radyo modülü, MX-05V / XD-RF-5V (alıcı ve verici).

Pin çıkışı, modüllerde olduğu gibi, verici gibi tahtaya boyanır:

Radyo vericisi

Alıcı çok açık değil, çünkü baskılı devre kartındaki veriler iki pim üzerine yazılıyor, aslında bunlardan biri kullanılmıyor.

Radyo alıcısı

Örneğin, kablo olmadan başka bir benzer panoya bağlı bir Arduino kartından LED'i açmak için bir şema ve kod veriyoruz. Alıcı ve verici her iki panele de aynı şekilde bağlanır:

Panolardaki alıcı ve verici

cihaz

modül

Arduino pimleri

alıcı

VCC

GND

VERİ

+ 5V

GND

2

verici

VCC

GND

VERİ

+ 5V

GND

2 

Ardından, RCswitch.h kütüphanesini Arduino IDE'ye bağlamanız gerekir

Başlamak için verici programını yazıyoruz:

#include

RCSwitch mySwitch = RCSwitch(); // kullanıcı arabirimiyle çalışmak için bir nesne oluşturun

void setup () {

    mySwitch.enableTransmit(2); // programa bilgi kanalının hangi pime bağlı olduğunu söyleyin

}

void loop () {

mySwitch.send (B0100,4);

gecikme (1000);

mySwitch.send (B1000, 4);

    gecikme (1000);

} 

Verici ikili kod iletebilir, ancak değerleri ondalık biçimde yazılabilir.

mySwitch.send (B0100,4);

ve

mySwitch.send (B1000, 4);

bunlar aktarım komutlarıdır, mySwitch kodun başında belirttiğimiz vericinin adıdır ve gönderme aktarım komutudur. Bu işlevin bağımsız değişkenleri şunlardır:

Verici adı. Gönder (değer, havaya gönderilen palsların paket boyutu);

B1000 - B sembolü - ikili anlamına gelir, 8 sayısı olarak yazılabilir, yani. ondalık gösterimde. Diğer bir seçenek de “1000” i bir dize (tırnak içinde) yazmaktı.

Ardından, alıcının kodunu yazıyoruz (alıcının bağlı olduğu karta yanıp sönüyor):

#include

RCSwitch mySwitch = RCSwitch ();

void setup () {

pinMode (3, ÇIKIŞ);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int value = mySwitch.getReceivedValue ();

eğer (değer == B1000)

digitalWrite (3, YÜKSEK);

else if (değer == B0100)

digitalWrite (3, DÜŞÜK);

mySwitch.resetAvailable ();

    }

}

Burada kabul edilen değerin mySwitch.getReceivedValue () dizesindeki Value değişkeninde saklandığını beyan ederiz. Alıcının 2. pime bağlı olması burada mySwiitch.enableReceive (0) tarafından açıklanmaktadır.

Kodun geri kalanı temeldir, eğer sinyal 0100 alınırsa, pim numarası 3 yüksek (log. Unit) ve 1000 ise, sonra low (log. Zero) olarak ayarlanır.

Ben merak:

MySwitch.enableTransmit (0) satırında, programa alıcının 2. pime bağlı olduğunu ve alma modunun açık olduğunu söyleriz. En dikkatli olanlar, bu yöntemin argümanının “2” pin numarası değil, “0” olduğunu fark ettiler, gerçeği, enableTransmit yönteminin (sayı) pin numarasını değil kesme numarasını değil, atmega328'de Arduino Uno, nano, promini ve diğerleri, ikinci pimde (PortD pimi PD2) sıfır sayısı ile bir kesme asar. Bunu Arduino kartı için geçerli olan Atmega pinout'ta görebilirsiniz, pin numaraları pembe kutularda yazılmıştır.

Atmega pinout

Bu gönderme ve alma yöntemi çok basit ve ucuzdur; bir çift alıcı ve verici, yazarken yaklaşık 1.5 $ 'a mal olur.


Kablosuz, Adruino ve ESP8266

Başlangıç ​​olarak, ESP8266, Wi-Fi için donanım desteğine sahip bir mikrodenetleyicidir, Ayrı bir yonga olarak satılır ve bir arduino gibi tahtaya lehimlenir. 32-bit çekirdeğe sahiptir, seri port (UART) üzerinden programlanır.

Kartlar genellikle 2 veya daha fazla ücretsiz GPIO pinine sahiptir ve her zaman bellenim için pinler vardır, bu bir USB'den seri adaptöre yapılmalıdır. AT ekipleri tarafından yönetilen komutların tam bir listesini resmi ESP8266 web sitesinde ve github'da bulabilirsiniz.

ESP8266

Daha ilginç bir seçenek var, NodeMCU panoları, USB ile yanıp sönme yeteneğine sahipler, çünkü USB-UART dönüştürücü zaten kartta, genellikle CP2102 yongasında yapılır. Düğüm MCU, Lua kodlama diline dayanan bir yazılımdır, işletim sistemi gibi bir projedir.

NodeMCU Kartı

Ürün yazılımı Lua komut dosyalarını seri bağlantı noktasında kabul ederek veya Flash bellekte depolanan algoritmaları yeniden oluşturarak yürütebilir.

Bu arada, içinde hiçbir dizin olmamasına rağmen, kendi dosya sistemi vardır, yani. sadece klasörsüz dosyalar. Bellekte, sadece komut dosyaları değil, aynı zamanda çeşitli veriler de saklanabilir. kart, örneğin sensörlerden kaydedilen bilgileri saklayabilir.

Kart arayüzlerle çalışır:

  • 1-tel;

  • I2C;

  • SPI;

  • UART.

Bir dizi fonksiyona sahiptir:

  • şifreleme modülü;

  • görev zamanlayıcı;

  • gerçek zaman saati;

  • Internet SNTP üzerinden saat senkronizasyon protokolü;

  • zamanlayıcılar;

  • ADC kanalı (bir);

  • ses dosyalarını oynatmak;

  • çıkışlarda bir PWM sinyali üretmek (6'ya kadar);

  • Yuva kullanın, FatFS desteği vardır, yani SD kartları bağlayabilirsiniz vb.

ESP-12E

İşte yönetim kurulunun neyle çalışabileceğine dair kısa bir liste:

  • ivmeölçerler ADXL345;

  • HMC5883L manyetometreler

  • jiroskoplar L3G4200D;

  • sıcaklık ve nem sensörleri AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sıcaklık, nem, atmosferik basınç sensörleri BME280;

  • sıcaklık ve atmosferik basınç sensörleri BMP085;

  • I2C, SPI veriyollarında çalışan birçok ekran. Farklı yazı tipleriyle çalışma yeteneği ile;

  • TFT, ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • akıllı LED'ler ve LED denetleyicileri - WS2812, tm1829, WS2801, WS2812.

Lua dilini kullanmaya ek olarak, kartı Arduino IDE altından da programlayabilirsiniz.

ESP8266 bağımsız bir cihaz olarak veya Arduino ile kablosuz iletişim için bir modül olarak kullanılabilir.

Arduino ile kablosuz iletişim modülü

Bu kurulun tüm işlev ve özelliklerinin dikkate alınması bir dizi makaleyi alacaktır.

Bu yüzden bu kart Wi-Fi üzerinden uzaktan kumanda için mükemmel bir seçenektir. Kapsam, örneğin, akıllı telefonu geçici bir radyo kontrollü makine veya quadrocopter için kontrol paneli olarak kullanmak çok büyük, uzaktan aydınlatma kontrolü, tüm ev için ağların düzenlenmesi ve her bir prizin, lambanın vb. eğer yeterli pim olsaydı.

Mikrodenetleyici ile çalışmanın en basit yolu tek bir ESP8266 kartı kullanmaktır. Aşağıda basit bir wi-fi çıkışının bir şeması bulunmaktadır.

En basit wifi çıkış şeması

Bu devreyi monte etmek için bir röle modülüne veya bir transistör aracılığıyla bir pime bağlı geleneksel bir röleye ihtiyacınız vardır. İlk önce bir akıllı telefon RoboRemoFree için bir programa ihtiyacınız var. İçinde, ESP bağlantısını yapılandıracak ve prizi kontrol etmek için bir arayüz yapacaksınız. Nasıl kullanılacağını açıklamak için ayrı bir makale yazmanız gerekiyor, bu yüzden şimdilik bu materyali atlayalım.

ESP'de ESPlorer programı (kartla çalışma programı) aracılığıyla aşağıdaki ürün yazılımını yüklüyoruz

--Wifi AP Kurulumu

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

--Pin modunu ayarlama

my_pin_nummber = 1

--gpio.mode (my_pin_nummber, gpio.OUTPUT)

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

--Sunucu Oluştur

sv = net.createServer (net.TCP)

işlev alıcısı (sck, veri)

string.sub (veri, 0, 1) == "1" ise

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

başka

string.sub (veri, 0, 1) == "0" ise

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

yazdır (veri)

eğer sv o zaman

sv: dinle (333, fonksiyon (conn)

conn: açık ("al", alıcı)

conn: gönder ("Merhaba!")

bitiş)

- HTTP Sunucusu Oluşturun

http = net.createServer (net.TCP)

function rece_http (sck; veri)

yazdır (veri)

yerel istek = string.match (veri, "([^ \ r, \ n] *) [\ r, \ n]", 1)

request == 'HTTP / 1.1'de GET /

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

request == 'HTTP / 1.1' GET / off 'ise

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

sck: on ("gönderildi", işlev (sck) sck: close () collectgarbage () end)

local response = "HTTP / 1.0 200 Tamam \ r \ nSunucu: ESP8266 üzerinde NodeMCU \ r \ nİçerik Türü: text / html \ r \ n \ r \ n" ..

" ESP8266'da NodeMCU " ..

"

ESP8266 üzerinde NodeMCU

" ..

"


" ..

" Açık Kapalı " ..

" "

sck: gönder (yanıt)

http ise

http: dinle (80, fonksiyon (conn)

conn: on ("almak", almak_http)

bitiş)

yazdır ("Başladı.")

Şimdi programı Roboremo programından veya herhangi bir web tarayıcısından kontrol edebilirsiniz, bunun için wi-fi modunda adres çubuğuna kartın IP adresini yazmanız gerekir. 192.168.4.1.

Kodda bir snippet var:

" ESP8266'da NodeMCU " ..

"

ESP8266 üzerinde NodeMCU

" ..

"


" ..

" Açık Kapalı " ..

" "

Bu, panoya erişirken tarayıcıya verilen bir tür yanıttır. HTML kodu içerir, yani. Bu makaleyi okuduğunuz web sayfasına benzeyen en basit web sayfası.

Android işletim sistemini çalıştıran akıllı telefonun tarayıcısındaki sayfa

İşte Android OS çalıştıran bir akıllı telefonun tarayıcısında başlatılan bu sayfa. Yukarıdakiler tam bir talimat değildir, çünkü bu bilgilerle ilgileniyorsanız çok fazla zaman alacaktır - yorum yazın ve kesinlikle bir inceleme yapacağız ve onunla çalışma hakkında bir makale yazacağız.

Ayrıca bkz. electro-tr.tomathouse.com:

  • Yeni başlayanlar için Arduino'yu bağlama ve programlama
  • Arduino I / O portlarını okuma ve yönetme yöntemleri
  • Nextion ekranları nedir ve onlarla nasıl çalışılır?
  • JavaScript'te programlanabilir mikrodenetleyiciler: hangisini seçmeli, özellikleri ...
  • AVR mikrodenetleyicilerinin çeşitleri ve düzenlenmesi

  •