Thể loại: Tự động hóa nhà, Mạch vi điều khiển
Số lượt xem: 17351
Bình luận về bài viết: 0
Điều khiển từ xa vi điều khiển: IR Remote, Arduino, ESP8266, 433 MHz
Vấn đề điều khiển từ xa hoặc điều khiển từ xa các thiết bị điện luôn và sẽ có liên quan, bất kể có công cụ tự động hóa trong hệ thống hay không. Đối với việc tổ chức điều khiển từ xa, hoàn toàn không thành vấn đề vi điều khiển, tất cả phụ thuộc vào các chức năng cần thiết được gán cho thiết bị được quản lý. Trong bài viết này, bạn sẽ tìm hiểu thông tin chung về cách điều khiển từ xa một vi điều khiển.

Loài
Có hai loại giao tiếp từ xa chính:
Có dây. Khi điều khiển bộ truyền động đặt trong một phòng (hoặc không phải phòng) được thực hiện từ bảng điều khiển hoặc từ một nút nút đặt ở một nơi khác. Trong trường hợp này, một kết nối dây điện của các mạch điều khiển và bộ truyền động (rơle, công tắc tơ, bao gồm các cơ chế, chẳng hạn như động cơ hoặc hệ thống, ví dụ, chiếu sáng) được cung cấp.
Không dây. Trong phương án này, không có kết nối điện của các mạch điều khiển và điều hành được yêu cầu. Trong các mạch không dây, có hai thiết bị: máy phát hoặc điều khiển từ xa (RC) và máy thu, là một phần của mạch điều khiển. Điều khiển không dây, lần lượt, là phổ biến trong hai phiên bản:
-
Bằng tín hiệu quang. Các hệ thống như vậy có trong mọi gia đình, vì vậy bạn kiểm soát hoạt động của TV, điều hòa không khí và các thiết bị gia dụng khác.
-
Bằng tín hiệu vô tuyến. Hiện đã có một số tùy chọn: Bluetooth, ZigBee, Wi-Fi, máy thu phát 433 MHz và các biến thể khác về chủ đề này.
Điều đáng chú ý là với các phương tiện kỹ thuật hiện đại, bạn có thể điều khiển vi điều khiển, cả từ điều khiển từ xa và qua Internet trên mạng cục bộ hoặc truy cập từ mọi nơi trên thế giới.
IR từ xa
Chúng tôi bắt đầu xem xét với phiên bản đơn giản và cổ điển nhất. Điều khiển thiết bị bằng cách truyền mã từ chuỗi nhấp nháy của đèn LED IR đến bộ thu quang được cài đặt trên thiết bị. Điều đáng chú ý là phổ hồng ngoại không thể nhìn thấy bằng mắt người, nhưng hầu hết các máy ảnh và video đều nhìn thấy nó.
Vì hầu hết các máy ảnh đều nhìn thấy hồng ngoại, bạn có thể kiểm tra khả năng phục vụ của điều khiển từ xa. Để thực hiện việc này, chỉ cần trỏ điều khiển từ xa để bộ phát nhìn vào camera và nhấn các nút. Thông thường, một ánh sáng trắng với tông màu tím được hiển thị trên màn hình.
Điều khiển này có một nhược điểm rõ ràng - bạn phải hướng điều khiển từ xa về phía người nhận. Và nếu hết pin trong điều khiển từ xa, thì bạn cũng phải nhắm, vì các hoạt động ngày càng ít đi.
Ưu điểm là đơn giản, khả năng bảo trì cao, cả máy phát và máy thu. Bạn có thể tìm thấy các chi tiết bằng cách tháo dỡ các điều khiển từ xa và TV bị hỏng để áp dụng điều này trong các dự án của riêng bạn.
Một cảm biến điển hình là như sau. Vì tín hiệu quang đang được nhận, cần phải loại trừ kích hoạt từ các nguồn sáng bên ngoài, như mặt trời, đèn chiếu sáng và các loại khác. Điều đáng chú ý là tín hiệu hồng ngoại được nhận chủ yếu ở tần số 38 kHz.

Dưới đây là thông số kỹ thuật của một trong các cảm biến hồng ngoại:
-
tần số sóng mang: 38 kHz;
-
điện áp cung cấp: 2,7 - 5,5 V;
-
mức tiêu thụ hiện tại: 50 A.
Và sơ đồ kết nối của nó:

Điều khiển từ xa có thể được sử dụng bởi bất kỳ ai có nguyên tắc hoạt động tương tự, điều khiển từ xa từ:
-
TV
-
Đầu DVD
-
máy ghi âm đài phát thanh;
-
từ các thiết bị chiếu sáng hiện đại, như đèn chùm thông minh và dải đèn LED và hơn thế nữa.

Dưới đây là một ví dụ về việc sử dụng một cảm biến như vậy với Arduino:

Để vi điều khiển, trong trường hợp của chúng tôi Arduin, để hiểu tín hiệu từ cảm biến, bạn cần sử dụng thư viện IRremote.h. Để biết ví dụ về cách đọc tín hiệu từ cảm biến, chúng tôi sẽ đưa ra mã để nhận biết chúng bằng cách đọc cổng nối tiếp của vi điều khiển từ Arduino IDE:
#include "IRremote.h" // kết nối thư viện để làm việc với tín hiệu IR.
IRrecv irrecv (2); // chỉ ra đầu ra mà máy thu được kết nối
kết quả decode_results;
void setup () {
Nối tiếp.begin (9600); // đặt tốc độ cổng COM
irrecv.enableIRIn (); // bắt đầu tiếp nhận
}
void loop () {
if (irrecv.decode (& results)) {// nếu dữ liệu đến
Serial.println (results.value, HEX); // in dữ liệu
irrecv.resume (); // chấp nhận lệnh sau
}
}
Kết quả là, khi bạn flash arduino và bắt đầu chuyển sang tỏa sáng vào bộ thu bằng điều khiển từ xa, chúng ta sẽ thấy hình ảnh sau trong màn hình cổng nối tiếp:

Đây là những mã gửi các nút ở dạng thập lục phân. Do đó, bạn có thể tìm ra nút nào trên điều khiển từ xa mà mã nào gửi, do đó không có yêu cầu cụ thể nào đối với điều khiển từ xa được sử dụng, bởi vì bạn có thể nhận ra và liên kết bất kỳ. Nhân tiện, đây là một ý tưởng cho một dự án về một điều khiển từ xa phổ quát được đào tạo, như vậy đã được bán trước đó. Nhưng bây giờ trong thời đại của Internet, lượng công nghệ được kiểm soát theo cách này đang giảm dần hàng năm.
Và với mã này, bạn có thể nhận ra tín hiệu và quản lý tải:
#inc loại "IRremote.h"
IRrecv irrecv (2); // chỉ ra đầu ra mà máy thu được kết nối
kết quả decode_results;
void setup () {
irrecv.enableIRIn (); // bắt đầu tiếp nhận
}
void loop () {
if (irrecv.decode (& results)) {// nếu dữ liệu đến
chuyển đổi (results.value) {
trường hợp 0xFFA857:
kỹ thuật sốWrite (13, CAO);
phá vỡ;
trường hợp 0xFFE01F:
kỹ thuật sốWrite (13, THẤP);
phá vỡ;
} irrecv.resume (); // chấp nhận lệnh sau } }
Điều chính trong mã là sự nhận biết thông qua chức năng Chuyển đổi, đôi khi chúng được gọi là một công tắc chuyển đổi trực tuyến. Nó là một dạng tương tự của các nhánh if, nhưng có hình thức đẹp hơn cho nhận thức. Trường hợp - đây là các tùy chọn, "nếu mã như vậy xuất hiện, thì ..." Mã kiểm soát 13 chân cho một số tín hiệu nhất định. Hãy để tôi nhắc bạn rằng đèn LED tích hợp trên bảng ARDUINO được kết nối với pin 13, tức là tác giả của mã điều khiển đèn LED.
Bạn có thể điều khiển mọi thứ bằng cách sử dụng chân kỹ thuật số cao hoặc thấp thông qua một bóng bán dẫn điện (mà chúng tôi đã đề cập trong hai bài viết trước đó ở đây và ở đây) với tải hiện tại trực tiếp, hoặc thông qua triac và trình điều khiển cho nó với tải hiện tại trực tiếp, bạn cũng có thể sử dụng rơle và công tắc tơ, nói chung, toàn bộ lĩnh vực cho trí tưởng tượng.
Tiếp nhận và truyền tín hiệu vô tuyến
Để sử dụng với vi điều khiển, các máy phát có tần số hoạt động là 433 MHz hoặc 315 MHz là phổ biến, có thể có các tần số khác, tùy thuộc vào bảng cụ thể, nhưng đây là những tần số phổ biến nhất. Hệ thống bao gồm hai nút - một máy thu và một máy phát, đó là logic.

Trong ảnh, máy phát được hiển thị ở trên cùng bên phải và máy thu ở phía dưới bên trái. Tên của họ để tìm kiếm: Mô-đun radio 433 MHz, MX-05V / XD-RF-5V (máy thu và máy phát).
Sơ đồ chân, như thường thấy trong các mô-đun, được vẽ trên bảng, giống như máy phát:

Máy thu không quá rõ ràng, vì Dữ liệu trên bảng mạch in được ghi trên hai chân, trên thực tế, một trong số chúng không được sử dụng.

Ví dụ, chúng tôi đưa ra một sơ đồ và mã để bật đèn LED từ một bảng Arduino được kết nối với một bảng tương tự khác, không có dây. Máy thu và máy phát được kết nối theo cùng một cách với cả hai bảng:

Thiết bị
Mô-đun
Chân Arduino
Người nhận
Vcc
GND
DỮ LIỆU
+ 5V
GND
2
Máy phát
Vcc
GND
DỮ LIỆU
+ 5V
GND
2
Tiếp theo, bạn cần kết nối thư viện RCswitch.h với Arduino IDE
Để bắt đầu, chúng tôi viết chương trình truyền phát:
#inc loại
RCSwitch mySwitch = RCSwitch(); // tạo một đối tượng để làm việc với giao diện người dùng
void setup () {
mySwitch.enableTransmit(2); // nói với chương trình mà pin thông tin được kết nối với
}
void loop () {
mySwitch.send (B0100,4);
độ trễ (1000);
mySwitch.send (B1000, 4);
độ trễ (1000);
}
Máy phát có thể truyền mã nhị phân, nhưng giá trị của nó có thể được viết ở dạng thập phân.
mySwitch.send (B0100,4);
và
mySwitch.send (B1000, 4);
đây là các lệnh chuyển, mySwitch là tên của máy phát mà chúng ta đã chỉ ra ở đầu mã và gửi là lệnh chuyển. Các đối số cho chức năng này là:
Tên máy phát.send (giá trị, kích thước gói của các xung được gửi đến không khí);
B1000 - ký hiệu B - có nghĩa là nhị phân, nó có thể được viết là số 8, tức là trong ký hiệu thập phân. Một tùy chọn khác là viết miền 1000 1000 dưới dạng chuỗi (trong dấu ngoặc kép).
Tiếp theo, chúng tôi viết mã cho người nhận (nó được flash vào bảng mà người nhận được kết nối):
#inc loại
RCSwitch mySwitch = RCSwitch ();
void setup () {
pinMode (3, ĐẦU RA);
mySwitch.enableReceive (0);
}
void loop () {
if (mySwitch.av Available ()) {
int value = mySwitch.getReceuredValue ();
if (giá trị == B1000)
kỹ thuật sốWrite (3, CAO);
khác nếu (giá trị == B0100)
kỹ thuật sốWrite (3, THẤP);
mySwitch.resetAv Available ();
}
}
Ở đây chúng tôi tuyên bố rằng giá trị được chấp nhận được lưu trữ trong biến Giá trị trong chuỗi mySwitch.getReceuredValue (). Và thực tế là máy thu được kết nối với pin thứ 2 được mô tả ở đây bởi mySwiitch.enableReceive (0).
Mặt khác, mã là sơ cấp, nếu nhận được tín hiệu 0100, thì chân số 3 được đặt thành cao (đơn vị log) và nếu 1000, sau đó thành thấp (log. Zero).
Thú vị:
Trong dòng mySwitch.enableTransmit (0), chúng tôi báo cho chương trình rằng bộ thu được kết nối với chân thứ 2 và chế độ nhận được bật. Những người chú ý nhất nhận thấy rằng đối số của phương thức này không phải là số pin CẦN 2, mà là 0 0, thực tế là phương thức enableTransmit (số) không chấp nhận số pin, mà là số ngắt, nhưng trong atmega328, được đưa vào Arduino Uno, nano, promini và một số người khác, trên chân thứ hai (chân PortD PD2) treo một ngắt với số 0. Bạn có thể thấy điều này trong sơ đồ chân Atmega áp dụng cho bo mạch Arduino, số pin được ghi trong hộp màu hồng.

Phương thức truyền và nhận này rất đơn giản và rẻ tiền, một cặp máy thu và máy phát có giá khoảng 1,5 đô la tại thời điểm viết.
Wi-Fi, Adruino và ESP8266
Để bắt đầu, ESP8266 là một vi điều khiển có hỗ trợ phần cứng cho Wi-Fi, Nó được bán dưới dạng một con chip riêng biệt và được hàn vào bảng, giống như một arduino. Nó có kernel 32 bit, nó được lập trình thông qua cổng nối tiếp (UART).
Các bảng thường có 2 chân GPIO miễn phí trở lên và luôn có các chân cho phần sụn, điều này phải được thực hiện thông qua bộ chuyển đổi USB sang nối tiếp. Được quản lý bởi các nhóm AT, một danh sách đầy đủ các lệnh có thể được tìm thấy trên trang web chính thức của ESP8266 và trên github.

Có một tùy chọn thú vị hơn, bảng NodeMCU, chúng có khả năng flash qua USB, bởi vì Bộ chuyển đổi USB-UART đã có trên bo mạch, thường được làm trên chip CP2102. Node MCU là một phần sụn, giống như một hệ điều hành, một dự án dựa trên ngôn ngữ kịch bản lệnh Lua.

Phần sụn có thể thực thi các tập lệnh Lua, bằng cách chấp nhận chúng trên một cổng nối tiếp hoặc bằng cách tái tạo các thuật toán được lưu trữ trong bộ nhớ Flash.
Nhân tiện, nó có hệ thống tệp riêng, mặc dù không có thư mục nào trong đó, tức là chỉ các tập tin không có thư mục. Trong bộ nhớ, không chỉ các tập lệnh có thể được lưu trữ mà còn có nhiều dữ liệu khác nhau, tức là bảng có thể lưu trữ thông tin được ghi lại, ví dụ, từ các cảm biến.
Bảng này hoạt động với các giao diện:
-
1-Dây;
-
I2C;
-
SPI
-
UART.
Nó có một loạt các chức năng:
-
mô-đun mã hóa;
-
lập lịch nhiệm vụ;
-
đồng hồ thời gian thực;
-
giao thức đồng bộ hóa qua Internet SNTP;
-
bộ hẹn giờ;
-
Kênh ADC (một);
-
phát tập tin âm thanh;
-
tạo ra ở đầu ra tín hiệu PWM (tối đa 6);
-
sử dụng ổ cắm, có hỗ trợ cho FatFS, tức là bạn có thể kết nối thẻ SD, v.v.

Và đây là một danh sách ngắn về những gì hội đồng quản trị có thể làm việc với:
-
gia tốc kế ADXL345;
-
Từ kế HMC5883L
-
con quay hồi chuyển L3G4200D;
-
cảm biến nhiệt độ và độ ẩm AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;
-
cảm biến nhiệt độ, độ ẩm, áp suất khí quyển BME280;
-
cảm biến nhiệt độ và áp suất khí quyển BMP085;
-
nhiều màn hình hoạt động trên các xe buýt I2C, SPI. Với khả năng làm việc với các phông chữ khác nhau;
-
Màn hình TFT ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;
-
đèn LED thông minh và bộ điều khiển LED - WS2812, tm1829, WS2801, WS2812.
Ngoài việc sử dụng ngôn ngữ Lua, bạn có thể lập trình bảng từ bên dưới Arduino IDE.
ESP8266 có thể được sử dụng như một thiết bị độc lập hoặc như một mô-đun để giao tiếp không dây với Arduino.

Việc xem xét tất cả các chức năng và tính năng của bảng này sẽ mất cả loạt bài viết.
Vì vậy, bảng này là một lựa chọn tuyệt vời cho điều khiển từ xa thông qua Wi-Fi. Phạm vi là rất lớn, ví dụ, để sử dụng điện thoại thông minh làm bảng điều khiển cho máy điều khiển vô tuyến tạm thời hoặc bộ tứ cực, điều khiển ánh sáng từ xa, sắp xếp mạng lưới cho toàn bộ ngôi nhà và quản lý từng ổ cắm, đèn, v.v. nếu chỉ có đủ chân.
Cách đơn giản nhất để làm việc với vi điều khiển là sử dụng một bảng ESP8266 duy nhất. Dưới đây là sơ đồ của một ổ cắm wi-fi đơn giản.

Để lắp ráp mạch này, bạn cần một mô-đun rơle hoặc rơle thông thường được kết nối với pin thông qua một bóng bán dẫn. Trước tiên, bạn cần một chương trình cho điện thoại thông minh RoboRemoFree ,. Trong đó, bạn sẽ cấu hình kết nối với ESP và tạo giao diện để điều khiển ổ cắm. Để mô tả cách sử dụng nó, bạn cần viết một bài viết riêng, vì vậy bây giờ hãy bỏ qua tài liệu này.
Trong ESP, chúng tôi tải phần sụn sau, thông qua chương trình ESPlorer (chương trình để làm việc với bảng)
- Thanh toán AP AP
wifi.setmode (wifi.STATIONAP)
cfg = {}
cfg.ssid = "ĐẶC BIỆT"
cfg.pwd = "1234567890"
wifi.ap.config (cfg)
- Cài đặt chế độ Pin
my_pin_nummber = 1
--gpio.mode (my_pin_nummber, gpio.OUTPUT)
gpio.mode (my_pin_nummber, gpio.OPENDRAIN)
- Tạo máy chủ
sv = net.createServer (net.TCP)
chức năng nhận (sck, dữ liệu)
nếu string.sub (dữ liệu, 0, 1) == "1" thì
--gpio.write (my_pin_nummber, gpio.HIGH)
gpio.write (my_pin_nummber, gpio.LOW)
khác nếu string.sub (dữ liệu, 0, 1) == "0" thì --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) kết thúc kết thúc in (dữ liệu) kết thúc nếu sv thì sv: nghe (333, chức năng (liên kết) Conn: on ("nhận", người nhận) liên kết: gửi ("Xin chào!") kết thúc) kết thúc - Tạo máy chủ HTTP http = net.createServer (net.TCP) chức năng receive_http (sck, dữ liệu) in (dữ liệu) yêu cầu cục bộ = string.match (dữ liệu, "([^ \ r, \ n] *) [\ r, \ n]", 1) nếu request == 'NHẬN / trên HTTP / 1.1' thì --gpio.write (my_pin_nummber, gpio.HIGH) gpio.write (my_pin_nummber, gpio.LOW) kết thúc nếu request == 'NHẬN / tắt HTTP / 1.1' thì --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) kết thúc sck: on ("đã gửi", hàm (sck) sck: close () collgarbage () end) phản hồi cục bộ = "HTTP / 1.0 200 OK \ r \ nServer: NodeMCU trên ESP8266 \ r \ nContent-Type: text / html \ r \ n \ r \ n" .. "
"
NodeMCU trên ESP8266 h1>" ..
"
" ..
" cơ thể> html>"
sck: gửi (phản hồi)
kết thúc
nếu http thì
http: lắng nghe (80, chức năng (liên kết)
liên kết: trên ("nhận", receive_http)
kết thúc)
kết thúc
in ("Bắt đầu.")
Bây giờ bạn có thể điều khiển chương trình từ chương trình Roboremo hoặc thông qua bất kỳ trình duyệt web nào, vì điều này bạn cần nhập địa chỉ IP của bảng vào thanh địa chỉ ở chế độ wi-fi 192.168.4.1.
Có một đoạn mã trong mã:
"
"
NodeMCU trên ESP8266 h1>" ..
"
" ..
" cơ thể> html>"
Đây là một loại phản hồi được cấp cho trình duyệt khi truy cập bảng. Nó chứa mã HTML, tức là Trang web đơn giản nhất, tương tự như trang bạn đang đọc bài viết này.

Đây là trang này, được ra mắt trong trình duyệt của điện thoại thông minh chạy hệ điều hành Android. Trên đây không phải là một hướng dẫn đầy đủ, vì nó sẽ mất một số tiền rất lớn, nếu bạn quan tâm đến thông tin này - viết bình luận và chúng tôi chắc chắn sẽ tiến hành đánh giá và viết một bài báo về làm việc với nó.
Xem thêm tại electro-vi.tomathouse.com
: