Mga kategorya: Ang automation sa bahay, Mga circuit ng Microcontroller
Bilang ng mga tanawin: 17351
Mga puna sa artikulo: 0
Microcontroller Remote Control: IR Remote, Arduino, ESP8266, 433 MHz
Ang isyu ng remote o remote control ng mga de-koryenteng kagamitan ay palaging at magiging may kaugnayan, anuman ang mayroong mga tool sa automation sa system o hindi. Para sa samahan ng remote control, hindi mahalaga kung anuman microcontroller, ang lahat ay nakasalalay sa mga kinakailangang pag-andar na itinalaga sa pinamamahalaang aparato. Sa artikulong ito, malalaman mo ang pangkalahatang impormasyon tungkol sa mga pamamaraan ng remote control para sa isang microcontroller.

Mga species
Mayroong dalawang pangunahing uri ng malayuang komunikasyon:
Wired. Kapag ang kontrol ng mga actuators na matatagpuan sa isang silid (o hindi ang silid) ay isinasagawa mula sa control panel o mula sa isang post na pindutan na matatagpuan sa ibang lugar. Sa kasong ito, ang isang de-koryenteng koneksyon ng wire ng mga control circuit at actuators (relay, contactors, na kasama ang mga mekanismo, tulad ng mga motor o system, halimbawa, pag-iilaw) ay ibinibigay.
Wireless. Sa embodiment na ito, hindi kinakailangan ang de-koryenteng koneksyon ng control at executive circuit. Sa mga wireless circuit, mayroong dalawang aparato: isang transmiter o isang remote control (RC) at isang tatanggap, na bahagi ng kinokontrol na circuit. Ang pagkontrol sa wireless, sa turn, ay pangkaraniwan sa dalawang bersyon:
-
Sa pamamagitan ng optical signal. Ang ganitong mga sistema ay nasa bawat bahay, kaya kinokontrol mo ang operasyon ng TV, air conditioning at iba pang mga gamit sa sambahayan.
-
Sa pamamagitan ng signal ng radyo. Mayroon nang isang bilang ng mga pagpipilian: Bluetooth, ZigBee, Wi-Fi, 433 MHz transmitter-receiver at iba pang mga pagkakaiba-iba sa paksang ito.
Ito ay nagkakahalaga na tandaan na sa modernong teknikal na paraan ay maaari mong kontrolin ang microcontroller, kapwa mula sa remote control at sa pamamagitan ng Internet sa isang lokal na network o may access mula sa kahit saan sa mundo.
Malayo ang IR
Sinimulan namin ang aming pagsasaalang-alang sa pinakasimpleng at pinaka klasikong bersyon. Kontrol ng aparato sa pamamagitan ng pagpapadala ng isang code mula sa pagkakasunud-sunod ng flicker ng IR LED sa optical receiver na naka-install sa aparato. Kapansin-pansin na ang infrared spectrum ay hindi nakikita ng mata ng tao, ngunit nakikita ito ng karamihan sa mga larawan at video.
Dahil nakikita ng karamihan sa mga camera ang infrared, maaari mong suriin serviceability ng mga remote control. Upang gawin ito, ituro lamang ang remote control upang ang emitter ay tumitingin sa camera at pindutin ang mga pindutan. Karaniwan, ang isang puting glow na may isang lilang tint ay makikita sa screen.
Ang kontrol na ito ay may isang halata na disbentaha - dapat mong ituro ang malalayo patungo sa tatanggap. At kung ang mga baterya sa remote control ay naubusan, kailangan mo ring pakay, dahil ang mga operasyon ay nagiging mas mababa at mas kaunti.
Ang mga kalamangan ay pagiging simple, mataas na pagpapanatili, pareho ang transmiter at ang tatanggap. Maaari mong mahanap ang mga detalye sa pamamagitan ng pag-alis ng sirang mga remotes at telebisyon upang mailapat ito sa iyong sariling mga proyekto.
Ang isang tipikal na sensor ay ang mga sumusunod. Dahil natanggap ang optical signal, kinakailangan upang maibukod ang pag-trigger mula sa mga likas na mapagkukunan ng ilaw tulad ng araw, ilaw ng lampara at iba pa. Kapansin-pansin din na ang signal ng infrared ay natanggap pangunahin sa isang dalas ng 38 kHz.

Narito ang mga pagtutukoy ng isa sa mga sensor ng IR:
-
dalas ng carrier: 38 kHz;
-
supply ng boltahe: 2.7 - 5.5 V;
-
kasalukuyang pagkonsumo: 50 μA.
At ang diagram ng koneksyon nito:

Ang remote control ay maaaring magamit ng sinumang may katulad na prinsipyo ng operasyon, mga malayuang kontrol mula sa:
-
Mga TV
-
Mga manlalaro ng DVD
-
mga radio tape recorder;
-
mula sa mga modernong aparato sa pag-iilaw, tulad ng mga matalinong chandelier at LED strips at marami pa.

Narito ang isang halimbawa ng paggamit ng tulad ng isang sensor kasama si Arduino:

Upang ang microcontroller, sa aming kaso na Arduin, upang maunawaan ang signal mula sa sensor, kailangan mong gumamit ng library ng IRremote.h. Para sa isang halimbawa kung paano basahin ang isang senyas mula sa isang sensor, bibigyan namin ng isang code upang makilala ang mga ito sa pamamagitan ng pagbabasa ng serial port ng microcontroller mula sa Arduino IDE:
#include "IRremote.h" // ikonekta ang library upang gumana sa IR signal.
IRrecv irrecv (2); // ipahiwatig ang output kung saan konektado ang tatanggap
mga resulta ng decode_result;
walang pag-setup () {
Serial.begin (9600); // itakda ang bilis ng COM port
irrecv.enableIRIn (); // simulan ang pagtanggap
}
walang bisa na loop () {
kung (irrecv.decode (& mga resulta)) {// kung dumating ang data
Serial.println (mga resulta.value, HEX); // data ng pag-print
irrecv.resume (); // tanggapin ang sumusunod na utos
}
}
Bilang isang resulta, kapag nag-flash ka ng arduino, at nagsisimulang "lumiwanag" sa tatanggap gamit ang remote control, makikita natin ang sumusunod na larawan sa serial port monitor:

Ito ang mga code na nagpapadala ng mga pindutan sa form na hexadecimal. Sa gayon, maaari mong malaman kung aling pindutan sa remote control na ipinapadala ng code, kaya walang mga tiyak na kinakailangan para sa remote control na ginamit, dahil maaari mong makilala at iugnay ang anuman. Sa pamamagitan ng paraan, ito ay isang ideya para sa isang proyekto ng isang sinanay na unibersal na remote control, ang mga ito ay naibenta nang mas maaga. Ngunit ngayon sa edad ng Internet, ang halaga ng teknolohiyang kinokontrol sa paraang ito ay bumabawas sa bawat taon.
At sa code na ito, maaari mong makilala ang mga signal at pamahalaan ang pag-load:
#include "IRremote.h"
IRrecv irrecv (2); // ipahiwatig ang output kung saan konektado ang tatanggap
mga resulta ng decode_result;
walang pag-setup () {
irrecv.enableIRIn (); // simulan ang pagtanggap
}
walang bisa na loop () {
kung (irrecv.decode (& mga resulta)) {// kung dumating ang data
lumipat (resulta.value) {
kaso 0xFFA857:
digitalWrite (13, Hataas);
masira;
kaso 0xFFE01F:
digitalWrite (13, LOW);
masira;
} irrecv.resume (); // tanggapin ang sumusunod na utos } }
Ang pangunahing bagay sa code ay ang pagkilala sa pamamagitan ng function ng Switch, kung minsan ay tinawag silang "switchcase". Ito ay isang analog ng kung ang mga sanga, ngunit may mas magandang anyo para sa pagdama. Kaso - ito ang mga pagpipilian, "kung dumating ang tulad ng isang code, pagkatapos ..." Kinokontrol ng code ang 13 pin para sa ilang mga signal. Ipaalala ko sa iyo na ang built-in na LED sa board ng ARDUINO ay konektado sa pin 13, i.e. kinokontrol ng may-akda ng code ang LED.
Maaari mong kontrolin ang anumang gamit ang isang mataas o mababang digital pin sa pamamagitan ng isang power transistor (na nasaklaw namin sa dalawang artikulo kanina dito at dito) na may isang direktang kasalukuyang pag-load, o sa pamamagitan ng isang triac at isang driver para dito na may isang direktang kasalukuyang pag-load, maaari mo ring gamitin ang mga relay at contactor, sa pangkalahatan, isang buong larangan para sa imahinasyon.
Pagtanggap at paghahatid ng signal ng radyo
Para sa paggamit sa mga microcontroller, ang mga transmiter na may operating frequency na 433 MHz o 315 MHz ay karaniwan, maaaring mayroong iba pang mga dalas, depende sa tukoy na board, ngunit ito ang pinaka-karaniwan. Ang system ay binubuo ng dalawang node - isang tatanggap at isang transmiter, na lohikal.

Sa larawan, ang transmiter ay ipinapakita sa kanang tuktok, at ang tatanggap sa kaliwang kaliwa. Ang kanilang pangalan para sa paghahanap: 433MHz radio module, MX-05V / XD-RF-5V (tatanggap at transmiter).
Ang pinout, tulad ng madalas na kaso sa mga module, ay ipininta sa board, tulad ng transmiter:

Ang tatanggap ay hindi masyadong halata, dahil ang Data sa nakalimbag na circuit board ay nakasulat sa loob ng dalawang mga pin, sa katunayan ang isa sa mga ito ay hindi ginagamit.

Halimbawa, nagbibigay kami ng isang diagram at isang code para sa pag-on sa LED mula sa isang Arduino board na konektado sa isa pang katulad na board, nang walang mga wire. Ang receiver at transmiter ay konektado sa parehong paraan sa parehong mga board:

Aparato
Modyul
Mga pin ng Arduino
Tagatanggap
Vcc
GND
DATA
+ 5V
GND
2
Transmiter
Vcc
GND
DATA
+ 5V
GND
2
Susunod, kailangan mong ikonekta ang library ng RCswitch.h sa Arduino IDE
Upang magsimula, isusulat namin ang programa ng transmiter:
#include
RCSwitch mySwitch = RCSwitch(); // lumikha ng isang bagay upang gumana sa harap-dulo
walang pag-setup () {
mySwitch.paganahinTransmit(2); // sabihin sa programa kung aling pin ang koneksyon ng impormasyon ay konektado
}
walang bisa na loop () {
mySwitch.send (B0100,4);
pagkaantala (1000);
mySwitch.send (B1000, 4);
pagkaantala (1000);
}
Ang transmiter ay maaaring magpadala ng binary code, ngunit ang mga halaga ay maaaring isulat sa desimal na form.
mySwitch.send (B0100,4);
at
mySwitch.send (B1000, 4);
ito ang mga utos ng paglilipat, ang MySwitch ay ang pangalan ng transmiter na ipinahiwatig namin sa simula ng code, at ipadala ang utos ng transfer. Ang mga argumento para sa pagpapaandar na ito ay:
Ang pangalan ng Transmiter.send (halaga, sukat ng packet ng mga pulso na ipinadala sa hangin);
B1000 - ang simbolo B - ay nangangahulugang binary, maaari itong isulat bilang bilang 8, i.e. sa deskripsyon ng desimal Ang isa pang pagpipilian ay ang pagsulat ng "1000" bilang isang string (sa mga marka ng sipi).
Susunod, isusulat namin ang code para sa tatanggap (ito ay pinaso sa board kung saan konektado ang tatanggap):
#include
RCSwitch mySwitch = RCSwitch ();
walang pag-setup () {
pinMode (3, OUTPUT);
mySwitch.enableReceive (0);
}
walang bisa na loop () {
kung (mySwitch.available ()) {
int halaga = mySwitch.getReceivedValue ();
kung (halaga = B1000)
digitalWrite (3, Hataas);
kung hindi kung (halaga = B0100)
digitalWrite (3, LOW);
mySwitch.resetAvailable ();
}
}
Dito ipinapahayag namin na ang tinanggap na halaga ay naka-imbak sa variable na Halaga sa string mySwitch.getReceivedValue (). At ang katotohanan na ang tumatanggap ay konektado sa 2nd pin ay inilarawan dito ng mySwiitch.enableReceive (0).
Ang natitirang bahagi ng code ay elementarya, kung natanggap ang signal na 0100, pagkatapos ay ang pin number 3 ay nakatakda sa mataas (log. Unit), at kung 1000, pagkatapos ay mababa (log. Zero).
Kawili-wili:
Sa linya na mySwitch.enableTransmit (0) sinabi namin sa programa na ang tatanggap ay konektado sa 2nd pin at ang mode na natanggap ay naka-on. Ang pinaka-matulungin ay napansin na ang argumento ng pamamaraang ito ay hindi pin bilang "2", ngunit "0", ang katotohanan ay ang paraan ng pagpapaandar (number) ay hindi tumatanggap ng numero ng pin, ngunit ang nakakaabala na numero, ngunit sa atmega328, na kung saan ay ilagay sa Arduino Uno, nano, promini at maraming iba pa, sa pangalawang pin (PortD pin PD2) ay nakabitin ng isang makagambala sa bilang na zero. Maaari mong makita ito sa Atmega pinout na naaangkop sa Arduino board, ang mga numero ng pin ay nakasulat sa mga pink na kahon.

Ang pamamaraang ito ng paghahatid at pagtanggap ay napaka-simple at mura; isang pares ng tatanggap at transmiter na nagkakahalaga ng mga $ 1.5 sa oras ng pagsulat.
Wi-Fi, Adruino at ESP8266
Upang magsimula sa, Ang ESP8266 ay isang microcontroller na may suporta sa hardware para sa Wi-Fi, Ito ay ibinebenta bilang isang hiwalay na chip, at soldered sa board, tulad ng isang arduino. Mayroon itong 32-bit kernel, na-program sa pamamagitan ng isang serial port (UART).
Ang mga board ay karaniwang may 2 o higit pang mga libreng pin ng GPIO at palaging may mga pin para sa firmware, dapat itong gawin sa pamamagitan ng isang USB sa serial adapter. Pinamamahalaan ng mga koponan sa AT, ang isang buong listahan ng mga utos ay matatagpuan sa opisyal na website ng ESP8266 at sa github.

Mayroong isang mas kawili-wiling pagpipilian, mga board ng NodeMCU, mayroon silang kakayahang mag-flash sa pamamagitan ng USB, dahil Ang isang USB-UART converter ay nasa board na, na karaniwang ginawa sa isang chip na CP2102. Ang Node MCU ay isang firmware, isang bagay tulad ng isang operating system, isang proyekto batay sa wika ng script ng Lua.

Maaaring maisakatuparan ng firmware ang mga script ng Lua, alinman sa pamamagitan ng pagtanggap sa mga ito sa isang serye na port o sa pamamagitan ng pag-kopya ng mga algorithm na nakaimbak sa memorya ng Flash.
Sa pamamagitan ng paraan, mayroon itong sariling file system, kahit na walang mga direktoryo sa ito, i.e. mga file lamang na walang mga folder. Sa memorya, hindi lamang ang mga script ay maaaring maiimbak, kundi pati na rin ang iba't ibang data, i.e. ang board ay maaaring mag-imbak ng impormasyon na naitala, halimbawa, mula sa mga sensor.
Ang board ay gumagana sa mga interface:
-
1-Wire;
-
I2C;
-
SPI
-
UART.
Mayroon itong isang buong host ng mga pag-andar:
-
module ng pag-encrypt;
-
iskedyul ng gawain;
-
real orasan;
-
proteksyon ng orasan sa orasan sa pamamagitan ng Internet SNTP;
-
timers;
-
ADC channel (isa);
-
maglaro ng mga file na audio;
-
makabuo sa mga output ng isang signal ng PWM (hanggang sa 6);
-
gumamit ng mga socket, mayroong suporta para sa FatFS, i.e. maaari mong kumonekta ang mga SD card at iba pa.

At narito ang isang maikling listahan ng kung ano ang maaaring gumana sa lupon:
-
accelerometer ADXL345;
-
HMC5883L magnetometer
-
gyroscope L3G4200D;
-
temperatura at halumigmig sensor AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;
-
sensor ng temperatura, kahalumigmigan, presyon ng atmospera BME280;
-
temperatura at sensor ng presyon ng atmospera BMP085;
-
maraming mga display na nagtatrabaho sa I2C, SPI bus. Na may kakayahang magtrabaho sa iba't ibang mga font;
-
Ipinapakita ng TFT ang ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;
-
matalinong LEDs at LED Controller - WS2812, tm1829, WS2801, WS2812.
Bilang karagdagan sa paggamit ng wikang Lua, maaari mong i-program ang board mula sa ilalim ng Arduino IDE.
Ang ESP8266 ay maaaring magamit bilang isang aparato na nakapag-iisa o bilang isang module para sa wireless na komunikasyon sa Arduino.

Ang pagsasaalang-alang sa lahat ng mga pag-andar at tampok ng board na ito ay kukuha ng isang buong serye ng mga artikulo.
Kaya ang board na ito ay isang mahusay na pagpipilian para sa remote control sa pamamagitan ng Wi-Fi. Ang saklaw ay napakalaking, halimbawa, upang gumamit ng isang smartphone bilang isang control panel para sa isang makeshift na kinokontrol ng radyo o quadrocopter, remote control control, hanggang sa pag-aayos ng mga network para sa buong bahay at pamahalaan ang bawat outlet, lampara, atbp. kung mayroon lamang sapat na mga pin.
Ang pinakasimpleng paraan upang gumana sa microcontroller ay ang paggamit ng isang solong ESP8266 board. Sa ibaba ay isang diagram ng isang simpleng outlet ng wi-fi.

Upang tipunin ang circuit na ito, kailangan mo ng isang module ng relay, o isang maginoo relay na konektado sa isang pin sa pamamagitan ng isang transistor. Una kailangan mo ng isang programa para sa isang smartphone na RoboRemoFree,. Sa loob nito, i-configure mo ang koneksyon sa ESP at gumawa ng isang interface para sa pagkontrol sa outlet. Upang ilarawan kung paano ito gagamitin, kailangan mong sumulat ng isang hiwalay na artikulo, kaya hayaan mo na itong talikuran ang materyal na ito.
Sa ESP-load namin ang sumusunod na firmware, sa pamamagitan ng ESPlorer program (programa para sa pagtatrabaho sa board)
- Wifi AP Settup
wifi.setmode (wifi.STATIONAP)
cfg = {}
cfg.ssid = "ESPTEST"
cfg.pwd = "1234567890"
wifi.ap.config (cfg)
-Set Pin mode
my_pin_nummber = 1
--gpio.mode (my_pin_nummber, gpio.OUTPUT)
gpio.mode (my_pin_nummber, gpio.OPENDRAIN)
- Lumikha ng Server
sv = net.createServer (net.TCP)
tagatanggap ng function (sck, data)
kung string.sub (data, 0, 1) == "1" kung gayon
--gpio.write (my_pin_nummber, gpio.HIGH)
gpio.write (my_pin_nummber, gpio.LOW)
iba pa kung string.sub (data, 0, 1) == "0" kung gayon --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) wakas wakas i-print (data) wakas kung sv noon sv: makinig (333, pag-andar (koneksyon) kumonekta: sa ("tumanggap", tatanggap) kumonekta: ipadala ("Hello!") wakas) wakas - Gumawa ng HTTP Server http = net.createServer (net.TCP) function na tumanggap_http (sck, data) i-print (data) lokal na kahilingan = string.match (data, "([^ \ r, \ n] *) [\ r, \ n]", 1) kung kahilingan ang == 'GET / sa HTTP / 1.1' noon --gpio.write (my_pin_nummber, gpio.HIGH) gpio.write (my_pin_nummber, gpio.LOW) wakas kung kahilingan ang == 'GET / off HTTP / 1.1' pagkatapos --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) wakas sck: sa ("ipinadala", function (sck) sck: malapit () koleksyon ng basurahan () dulo) lokal na tugon = "HTTP / 1.0 200 OK \ r \ nServer: NodeMCU sa ESP8266 \ r \ nContent-Type: teksto / html \ r \ n \ r \ n" .. "
"
NodeMCU sa ESP8266
" .."
" ..
" "
sck: ipadala (tugon)
wakas
kung http noon
http: makinig (80, function (koneksyon)
kumonekta: sa ("tumanggap", makatanggap_http)
wakas)
wakas
i-print ("Sinimulan.")
Ngayon ay maaari mong kontrolin ang programa alinman sa programa ng Roboremo, o sa pamamagitan ng anumang web browser, para dito kailangan mong i-type ang IP address ng board sa address bar sa wi-fi mode, ito 192.168.4.1.
May isang snippet sa code:
"
"
NodeMCU sa ESP8266
" ..
"
" ..
" "
Ito ay isang uri ng tugon na inilabas sa browser kapag nag-access sa board. Naglalaman ito ng HTML code, i.e. Ang pinakasimpleng web page, katulad ng sa kung saan mo binabasa ang artikulong ito.

Narito ang pahinang ito, na inilunsad sa browser ng isang smartphone na tumatakbo sa Android OS. Ang nasa itaas ay hindi isang kumpletong tagubilin, dahil kukuha ito ng isang malaking halaga, kung interesado ka sa impormasyong ito - magsulat ng mga komento at tiyak na magsasagawa kami ng pagsusuri at magsulat ng isang artikulo tungkol sa pagtatrabaho dito.
Tingnan din sa electro-tl.tomathouse.com
: