Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Thiết kế mạng cảm biến không dây dùng module lora
1) TÓM TẮT
Đồ án thực hiện nhằm mục tiêu thiết kế được ứng dụng mạng cảm biến không dây dùng
module lora. Lợi ích của việc sử dụng module lora khơng dây là có thể truyền dữ liệu với
khoảng cách lên hàng km mà không cần các mạch khuếch đại công suất từ đó giúp tiết
kiệm năng lượng tiêu thụ khi truyền/nhận dữ liệu ít tốn sức người, tiết kiệm thời gian. Đồ
án sử dụng chip SX1278 của hãng Semtech (hoạt động ở tần số 410 – 441 Mhz). Thực
hiện thiết kế một hệ thống gồm 2 phần chính: Node và server. Node (arduino) thu thập
các thông số nhiệt độ từ cảm biến LM35 và gửi về server để quản lý thông qua công nghệ
lora, node và server cùng xử lý 2 tác vụ là truyền và nhận gói tin. Node thì truyền (phản
hồi) khi đã nhận được gói tin từ server. Server thì thực hiện việc gửi lệnh và nhận dữ liệu
phản hồi từ client (tại đây ta có thể làm mọi điều với dữ liệu nhận được). Cùng với sự tìm
tịi, học hỏi khơng ngừng của nhóm để tạo thành một khối có chức năng điều khiển và
thực hiện lệnh truyền nhận được giữa các client với server. Kết quả nghiên cứu là mơ
hình có thể thực hiện lệnh từ xa truyền nhận theo ý người dùng muốn mà ở đây cụ thể là
truyền nhận giữa các client và server với nhau thông qua việc điều khiển bằng các button
(nút nhấn) và quan sát các kết quả trả về thơng qua trình theo dõi serial (serial monitor)
của trình biên dịch Arduino IDE hoặc cũng có thể thực hiện gửi lệnh từ chính cửa sổ này.
Đồ án đạt yêu cầu thiết kế ứng dụng mạng cảm biến không dây dùng module LoRa để
đọc giá trị cảm biến từ xa.
Từ khóa: Module lora, mạng cảm biến không dây, iot
ABSTRACT
The project aims to design a wireless sensor network application using the module lora.
The benefit of using the wireless module lora is that it can transmit data at distances up to
kilometers without the need for power amplifiers, thereby saving energy consumption
when transmitting / receiving data, less labor-intensive, saving time. This project uses
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Semtech SX1278 chip (operating at frequencies 410 - 441 Mhz).The implementation of a
system design consists of two main parts: Node and server. The node (arduino) collects
temperature parameters from the LM35 sensor and sends it to the server to manage
through the lora technology, the node and the server together handle the two tasks of
transmitting and receiving packets. The node transmits (responds) when the packet has
been received from the server. The server sends the command and receives response data
from clients (here we can do everything with the data received). My group has designed
a block that controls and executes commands received between clients and the server.
The research result is that the model can execute remote commands at the discretion of
the user (namely, transmitting between clients and servers together through control
buttons) and observing the returned results via the Serial Monitor of the Arduino IDE
compiler, or you can also send commands from this window. This project meets the
requirements of designing a wireless sensor network using module lora to read remote
sensor values.
Keywords: Module lora, wireless sensor network, iot
Title: Wireless sensor network design uses lora module
2) GIỚI THIỆU
LoRa là viết tắt của Long Range Radio được nghiên cứu và phát triển bởi Cycleo và sau
này được mua lại bởi công ty Semtech năm 2012. Với công nghệ này, chúng ta có thể
truyền dữ liệu với khoảng cách lên hàng km mà không cần các mạch khuếch đại công
suất; từ đó giúp tiết kiệm năng lượng tiêu thụ khi truyền/nhận dữ liệu. Do đó, LoRa có
thể được áp dụng rộng rãi trong các ứng dụng thu thập dữ liệu như sensor network trong
đó các sensor node có thể gửi giá trị đo đạc về trung tâm cách xa hàng km và có thể hoạt
động với battery trong thời gian dài trước khi cần thay pin.
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Nguyên lý hoạt động của LoRa ra sao?
LoRa sử dụng kỹ thuật điều chế gọi là Chirp Spread Spectrum. Có thể hiểu nôm na
nguyên lý này là dữ liệu sẽ được băm bằng các xung cao tần để tạo ra tín hiệu có dãy tần
số cao hơn tần số của dữ liệu gốc (cái này gọi là chipped); sau đó tín hiệu cao tần này tiếp
tục được mã hố theo các chuỗi chirp signal (là các tín hiệu hình sin có tần số thay đổi
theo thời gian; có 2 loại chirp signal là up-chirp có tần số tăng theo thời gian và downchirp có tần số giảm theo thời gian; và việc mã hoá theo nguyên tắc bit 1 sẽ sử dụng upchirp, và bit 0 sẽ sử dụng down-chirp) trước khi truyền ra anten để gửi đi.
Theo Semtech công bố thì nguyên lý này giúp giảm độ phức tạp và độ chính xác cần thiết
của mạch nhận để có thể giải mã và điều chế lại dữ liệu; hơn nữa LoRa khơng cần cơng
suất phát lớn mà vẫn có thể truyền xa vì tín hiệu Lora có thể được nhận ở khoảng cách xa
ngay cả độ mạnh tín hiệu thấp hơn cả nhiễu môi trường xung quanh.
Băng tần làm việc của LoRa từ 430MHz đến 915MHz cho từng khu vực khác nhau trên
thế giới:
430MHz cho châu Á
780MHz cho Trung Quốc
433MHz hoặc 866MHz cho châu Âu
915MHz cho USA
Nhờ sử dụng chirp signal mà các tín hiệu LoRa với các chirp rate khác nhau có thể hoạt
động trong cùng 1 khu vực mà không gây nhiễu cho nhau. Điều này cho phép nhiều thiết
bị LoRa có thể trao đổi dữ liệu trên nhiều kênh đồng thời (mỗi kênh cho 1 chirprate)
Radio packet của LoRa như hình sau:
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Các dữ liệu trong 1 radio packet của LoRa, bao gồm:
Preamble: Là chuỗi binary để bộ nhận detect được tín hiệu của LoRa packet trong
khơng khí
Header: chứa thơng tin về size của Payload cũng như có PayloadCRC hay khơng.
Giá trị của Header cũng được check CRC kèm theo
Payload: là dữ liệu ứng dụng truyền qua LoRa
Payload: giá trị CRC của Payload. Nếu có PayloadCRC, LoRa chip sẽ tự kiểm tra
dữ liệu trong Payload và báo lên nếu CRC OK hay không.
Lý do thực hiện đề tài: Nhằm làm quen với công nghệ truyền từ xa và ứng dụng được
một số các chức năng của module lora để có thể phát triển mở rộng ra các ứng dụng từ đó
áp dụng thực tế vào cuộc sống hằng ngày.
Nghiên cứu liên quan mạng cảm biến khơng dây dùng module: Có thể phát triển thêm
để ứng dụng vào hệ thống tưới cây thông minh, báo cháy thông minh, điều khiển tự động
từ xa, ngôi nhà thông minh, iot…
Kết quả mong muốn: Truyền nhận giữa các Node và Server thuận lợi (khơng có lỗi
ngồi ý muốn), phát triển thêm việc ứng dụng lora vào trong việc điều khiển xe mơ hình
nhằm có thể giúp việc quản lý vị trí của các Node một cách tự động
Các bước thực hiện:
+ Tìm hiểu cơng nghệ Lora và các linh kiện cần thiết sử dụng trong đề tài
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
+ Tham khảo tài liệu (Datasheet, Internet,… )
+ Hỏi giáo viên hướng dẫn về những khó khăn gặp phải trong quá trình làm đồ án
+ Thiết kế giải thuật, phần cứng của Node và Server
+ Sau khi thực hiện truyền nhận được giữa hai Module thì tiến hành đọc cảm biến và
hoàn thành đồ án
+ Đưa ra được hướng phát triển và tài liệu tham khảo
Tài liệu tham khảo:
/> /> /> /> />
3) PHƯƠNG PHÁP THỰC HIỆN
3.1) Thiết kế phần cứng:
3.1.1) Kit Arduino Nano và Kit Arduino Uno R3
Giới thiệu tổng quan:
Board Arduino Nano có cấu tạo, số lượng chân vào ra là tương tự như board Arduino
Uno tuy nhiên đã được tối giản về kích thước cho tiện sử dụng hơn. Do được tối giản rất
nhiều về kích thước nên Arduino Nano chỉ được nạp code và cung cấp điện bằng duy
nhất 1 cổng mini USB
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Board Arduino Nano
Thông số kĩ thuật chi tiết:
+ Vi xử lý
ATmega328 (phiên bản v3.0)
+ Điện áp hoạt động
5V
+ Điện áp đầu vào (khuyến nghị)
7-12 V
+ Điện áp đầu vào (giới hạn)
6-20 V
+ Chân vào/ra số
14 (6 chân có khả năng xuất ra tín hiệu PWM)
+ Chân vào tương tự
8
+ Dịng điện mỗi chân vào/ra
40 mA
+ Bộ nhớ
16 KB (ATmega168), 32 KB (ATmega328) trong đó
2 KB dùng để nạp bootloader
+ SRAM
1 KB (ATmega168) hoặc 2 KB (ATmega328)
+ EEPROM
512 bytes (ATmega168) hoặc 1 KB (ATmega328)
+ Xung nhịp
16 MHz
3.1.2) Arduino IDE:
Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính năng thơng dụng mang lại nhiều lợi thế cho
Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phần mềm. Môi trường lập trình
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
đơn giản dễ sử dụng, ngơn ngữ lập trình dễ hiểu và dựa trên nền tảng C/C++ rất quen
thuộc với người làm kỹ thuật. Và quan trọng là số lượng thư viện code được viết sẵn và
chia sẻ bởi cộng đồng nguồn mở là cực kỳ lớn.
Giao diện phần mềm Arduino IDE.
3.1.3) Module Lora SX1278 (UART):
SX1278 là module truyền thông có công suất 100mw. Nó làm việc ở dải 433MHZ và sử
dụng cổng Serial để gửi nhận dữ liệu. Khoảng cách truyền tối đa lý tưởng của Module
Lora này đạt được khoảng 3000m. Module này có cơ chế FEC truyền lại khi báo lỗi
truyền tin. Khi truyền tin thì dữ liệu sẽ được mã hóa và giải mã nhằm cải thiện độ tin cậy.
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Module có 4 chế độ hoạt động với 4 mode truyền khác nhau. Đặc biệt có thể ứng dụng
vào các hệ thống yêu cầu điện năng tiêu thụ rất thấp. Khi ở chế độ power saving mode.
Các chế độ truyền nhận của module lora SX1728
Thông số kỹ thuật :
-Model: E32-TTL-100 RF
-IC chính: SX1278 từ SEMTECH.
-Điện áp hoạt đơng: 2.5 - 5.5 VDC
-Điện áp giao tiếp: TTL
-Giao tiếp UART Data bits 8, Stop bits 1, Parity none, tốc độ từ 1200 - 115200.
-Tần số: 410 - 441Mhz
-Công suất: 20dbm (100mW)
-Khoảng cách truyền tối đa trong điều kiện lý tưởng: 3000m
-Tốc độ truyền: 0.3 - 19.2 Kbps ( mặc định 2.4 Kbps)
-512bytes bộ đệm.
-Hỗ trợ 65536 địa chỉ cấu hình có 32 kênh
-Kích thước: 21x36mm.
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
-Độ dài dữ liệu truyền và nhận là: 58 Byte / gói tin
Các ứng dụng:
Cảm biến đọc khoảng cách thông minh
Node cảm biến
Nhà thông minh
Robot thông minh
Quan trắc môi trường
Hệ thống thu thập dữ liệu tự động
Module Lora SX1278
Chi tiết chức năng chân AUX:
-
Chân AUX có thể được sử dụng để hiển thị quá trình truyền nhận dữ liệu khơng
dây hoặc q trình khởi động của module.
Tín hiệu AUX báo hiệu hoạt động của module
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Khi có tín hiệu vào TXD thì tín hiệu AUX xuất ra là thấp báo hiệu có tín hiệu truyền
serial. Khi Serial đã gửi xong thì AUX=1 tức là trở lại mức cao như lúc chờ dữ liệu ban
đầu.
3.1.4) Cảm biến nhiệt độ LM35
Cảm biến LM35 là bộ cảm biến nhiệt mạch tích hợp chính xác cao mà điện áp đầu ra của
nó tỉ lệ tuyến tính với nhiệt độ thang Celsius. Chúng khơng u cầu cân chỉnh ngồi vì
vốn chúng đã được cân chỉnh.
Cảm biến LM35 có 3 chân:
+ Chân nguồn VCC
+ Chân đầu ra Vout (chân tương tự)
+ Chân nối đất GND.
Hình ảnh cảm biến LM35
Đặc điểm chính của cảm biến LM35 :
- Điện áp đầu vào từ 4V đến 30V
- Độ phân giải điện áp đầu ra là 10mV/˚C
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
- Độ chính xác cao ở 25 ˚C là 0.5˚C
- Trở kháng đầu ra thấp 0.1 cho 1mA tải
Dải nhiệt độ đo được của LM35 là từ -55˚C đến 150˚C với các mức điện áp ra khác nhau.
Xét một số mức điện áp sau :
- Nhiệt độ 55˚C điện áp đẩu ra -550mV
- Nhiệt độ 25˚C điện áp đầu ra 250mV
- Nhiệt độ 150˚C điện áp đầu ra 1500mV.
Tùy theo cách mắc của LM35 để ta đo các giải nhiệt độ phù hợp. Đối với hệ thống này
thì đo từ 0˚C đến 150˚C
3.2) Giải pháp thiết kế Node con (client):
Sơ đồ khối ghép nối phần cứng:
Sơ đồ khối Node con
Khối 1: Khối nguồn
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Khối nguồn có nhiệm vụ chính là cung cấp nguồn điện cho toàn bộ mạch điều khiển bao
gồm khối vi điều khiển và khối truyền thông
Khối 2: Khối vi điều khiển MCU
Khối vi điều khiển MCU ARDUINO UNO R3 sẽ nhận tín hiệu từ cảm biến và gửi bản tin
đến Server thông qua module truyền thông SX1278.
Khối 3: Khối cảm biến
Khối cảm biến sẽ nhận thay đổi của môi trường, sau đó sẽ gửi tín hiệu điện áp về vi điều
khiển
Khối 4: Khối truyền thơng
Khới trùn thơng có nhiệm vụ gửi các gói tin dữ liệu từ nút con đến Server
Lưu đờ tḥt toán Node con
Lưu đồ thuật tốn Node con
Giải thích lưu đồ thuật tốn: Sau khi cấp ng̀n cho Node con, vi điều khiển sẽ thực hiện
cấu hình các tham số và cấu hình hệ thống. Sau đó thực hiện đọc giá trị các cảm biến và
đợi nhận lệnh từ Server. Qúa trình này lặp lại liên tục
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Sơ đồ nguyên lí thiết kế phần cứng
Sơ đồ nguyên lý Node con
3.3) Giải pháp thiết kế Server:
Sơ đồ khối ghép nối phần cứng:
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Sơ đồ khối Server
Khối 1: Khối nguồn
Khối 2: Khối vi điều khiển MCU
Khối 3: Khối cảm biến
Khối 4: Khối truyền thơng
Lưu đờ tḥt toán Server:
Lưu đồ thuật tốn Server
Giải thích lưu đồ thuật toán: Sau khi cấp nguồn cho Server, vi điều khiển sẽ thực hiện cấu
hình các tham số và cấu hình hệ thống. Sau đó thực hiện đợi lệnh, khi có lệnh thì nhận và
kiểm tra lệnh để gửi cho từng Node con thực thi (Với Lệnh Auto thì gửi cho tồn Chanel)
và nhận các giá trị tương ứng với từng lệnh khác nhau từ Client và quan sát trên Serial
monitor của Arduino IDE
Sơ đồ nguyên lí thiết kế phần cứng
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
Sơ đồ nguyên lý Server
3.5) CÁC DẠNG GỬI GÓI TIN TRONG LORA THÔNG DỤNG:
3.5.1) Theo Kiểu Giao Thức TCP/IP:
Giao thức TCP/IP hoạt động như thế nào?
TCP/IP là sự kết hợp của hai giao thức riêng biệt: Giao thức kiểm soát truyền tin (TCP) và giao
thức Internet (IP). Giao thức Internet cho phép các gói được gửi qua mạng; Nó cho biết các
gói tin được gửi đi đâu và làm thế nào để đến đó. IP có một phương thức cho phép bất kỳ máy
tính nào trên Internet chuyển tiếp gói tin tới một máy tính khác thơng qua một hoặc nhiều
khoảng (chuyển tiếp) gần với người nhận gói tin.
Giao thức điều khiển truyền dẫn đảm bảo việc truyền dữ liệu đáng tin cậy qua các mạng kết
nối Internet. TCP kiểm tra các gói dữ liệu xem có lỗi khơng và gửi (ACK) u cầu truyền lại nếu
có lỗi được tìm thấy.
Được áp dụng trong đồ án khi gửi các lệnh đơn (Hoặc khi kiểm tra kết nối) thì sẽ đợi ACK,
nếu Server nhận được ACK thì sẽ làm tiếp việc khác. Nếu như hết Timeout mà không
nhận được ACK thì ta sẽ gửi lại (Hoặc khơng).
Giao thức TCP đảm bảo được việc khơng bị mất gói tin (Được áp dụng trong những
trường hợp muốn đảm bảo việc truyền nhận gói tin chính xác 100%)
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
3.5.2) Theo Kiểu Giao Thức UDP:
Giao thức UDP giống với TCP nhưng UDP chỉ gửi gói tin mà khơng quan tâm q trình gửi
(nhận)
Dễ gây mất gói tin, nhưng phù hợp khi ta cần gửi nhiều lệnh, liên tục mà khơng muốn đợi
Timeout (Như khi gửi lệnh điều khiển)
HÌNH ẢNH MINH HỌA
_Ngồi ra ta cũng có thể sử dụng các loại giao thức khác để truyền nhận như: Polling, Cửa sổ
trượt, ….
4) PHẦN CODE CHƯƠNG TRÌNH:
#include <SoftwareSerial.h>
#include "E32-TTL-100.h"
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
#define M0_PIN 7
#define M1_PIN 8
#define AUX_PIN
A0
#define SOFT_RX
10
#define SOFT_TX 11
SoftwareSerial softSerial(SOFT_RX, SOFT_TX); // RX, TX
//=== AUX ===========================================+
bool AUX_HL;
bool ReadAUX()
{
int val = analogRead(AUX_PIN);
if(val<50)
{
AUX_HL = LOW;
}else {
AUX_HL = HIGH;
}
return AUX_HL;
}
//return default status
RET_STATUS WaitAUX_H()
{
RET_STATUS STATUS = RET_SUCCESS;
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
uint8_t cnt = 0;
uint8_t data_buf[100], data_len;
while((ReadAUX()==LOW) && (cnt++
{
Serial.print(".");
delay(100);
}
if(cnt==0)
{
}
else if(cnt>=TIME_OUT_CNT)
{
STATUS = RET_TIMEOUT;
Serial.println(" TimeOut");
}
else
{
Serial.println("");
}
return STATUS;
}
//=== AUX ===========================================//=== Mode Select ===================================+
bool chkModeSame(MODE_TYPE mode)
{
static MODE_TYPE pre_mode = MODE_INIT;
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
if(pre_mode == mode)
{
//Serial.print("SwitchMode: (no need to switch) "); Serial.println(mode, HEX);
return true;
}
else
{
Serial.print("SwitchMode: from "); Serial.print(pre_mode, HEX); Serial.print(" to ");
Serial.println(mode, HEX);
pre_mode = mode;
return false;
}
}
void SwitchMode(MODE_TYPE mode)
{
if(!chkModeSame(mode))
{
WaitAUX_H();
switch (mode)
{
case MODE_0_NORMAL:
// Mode 0 | normal operation
digitalWrite(M0_PIN, LOW);
digitalWrite(M1_PIN, LOW);
break;
case MODE_1_WAKE_UP:
Đồ án kỹ thuật điện tử
ĐỒ ÁN KỸ THUẬT ĐIỆN TỬ
digitalWrite(M0_PIN, HIGH);
digitalWrite(M1_PIN, LOW);
break;
case MODE_2_POWER_SAVIN:
digitalWrite(M0_PIN, LOW);
digitalWrite(M1_PIN, HIGH);
break;
case MODE_3_SLEEP:
// Mode 3 | Setting operation
digitalWrite(M0_PIN, HIGH);
digitalWrite(M1_PIN, HIGH);
break;
default:
return ;
}
WaitAUX_H();
delay(10);
}
}
//=== Mode Select ===================================//=== Basic cmd =====================================+
void cleanUARTBuf()
{
bool IsNull = true;
while (softSerial.available())
{
IsNull = false;