Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 15

CHƯƠNG 3 MÔ PHỎNG MẠNG CẢM BIẾN KHÔNG DÂY

3.1. Sơ đồ mạng cảm biến không dây trong kho lạnh

Nút Sink
ESP32
DHT11
LCD

Nút cảm biến 1 DHT11 DHT11


Nút cảm biến 2
ESP32
ESP32
DHT11
MQ135 MQ135

Hình 3.1: Sơ đồ mạng cảm biến không dây

3.1.1. Sơ đồ mạng cảm biến không dây bao gồm

3.1.1.1. Nút Sink

Nút sink là nút nhận dữ liệu được truyền từ các nút cảm biến về. Nút sink
bao gồm vi xử lý ESP32, module cảm biến nhiệt độ, độ ẩm DHT11 và cảm biến
chất lượng không khí MQ135

3.1.1.2. Nút cảm biến 1

Nút cảm biến 1 là nút truyền dữ liệu đến nút sink. Nút cảm biến 1 bao gồm
vi xử lý ESP32, module cảm biến nhiệt độ, độ ẩm DHT11 cảm biến chất lượng
không khí MQ135
3.1.1.3. Nút cảm biến 2

Nút cảm biến 2 là nút truyền dữ liệu đến nút sink. Nút cảm biến 2 bao gồm
vi xử lý ESP32, module cảm biến nhiệt độ, độ ẩm DHT11 cảm biến chất lượng
không khí MQ135

3.1.2. Nguyên lý hoạt động của mạch

Hai nút cảm biến 1 và 2 thu thập dữ liệu từ môi trường, sau đó nút cảm biến
1 và 2 sẽ truyền dữ liệu về nút sink để xử lý.

3.2. Thiết kế phần cứng

3.2.1. Linh kiện phần cứng

- Vi xử lý ESP32
- Module DHT11
- Module MQ135
- Breadboard
- Capble

3.2.2. Sơ đồ nối dây


3.2.2. Lắp ráp phần cứng

3.2.2.1. Nút cảm biến số 1

Nút cảm biến số 1 gồm vi điều khiển ESP32 và Module cảm biến nhiệt độ,
độ ẩm DHT11 và cảm biến MQ135

Hình 3.2: Nút cảm biến số 1

3.2.2.2. Nút cảm biến số 2

Nút cảm biến số 1 gồm vi điều khiển ESP32 và Module cảm biến nhiệt độ,
độ ẩm DHT11 và cảm biến MQ135
Hình 3.3: Nút cảm biến số 2

3.2.2.3. Nút sink

Nút sink bao gồm vi điều khiển ESP32

Hình 3.4: Nút Sink

3.2.2.4. Mạch hoàn thiện

Hình 3.5: Mạch hoàn thiện

3.2.2.5. Cấp nguồn và nạp code cho mạch


Hình 3.6: Cấp nguồn và nạp code cho mạch

3.3. Thiết kế phần mềm

3.3.1. Phần mềm để sử dụng thiết kế

3.3.1.1. Phần mềm Arduino IDE là gì?

Arduino IDE là một phần mềm với một mã nguồn mở, được sử dụng chủ
yếu để viết và biên dịch mã vào module Arduino. Nó bao gồm phần cứng và
phần mềm. Phần cứng chứa đến 300,000 board mạch được thiết kế sẵn với các
cảm biến, linh kiện. Phần mềm giúp bạn có thể sử dụng các cảm biến, linh kiện
ấy của Arduino một cách linh hoạt phù hợp với mục đích sử dụng.
Hình 3.7: Giao diện phần mềm Arduino IDE

3.3.1.2.Lý do nên sử dụng Arduino IDE

a. Phần mềm lập trình mã nguồn mở miễn phí

IDE trong Arduino IDE là phần có nghĩa là mã nguồn mở. Nghĩa là phần
mềm này miễn phí cả về phần tải về lẫn phần bản quyền. Người dùng có quyền
sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung được nhà
phát hành cho phép mà không cần xin phép ai, điều mà họ không được phép làm
đối với các phần mềm nguồn đóng.

b. Sử dụng ngôn ngữ lập trình C/C++ thân thiện với các lập trình viên
Arduino IDE sử dụng ngôn ngữ lập trình C/C++ rất phổ biến trong giới lập
trình. Bất kỳ đoạn code nào của C/C++ thì Arduino IDE đều có thể nhận dạng,
giúp các lập trình viên thuận tiện trong việc thiết kế chương trình lập cho các bo
mạch Arduino.
c. Thư viện hỗ trợ phong phú
Arduino IDE tích hợp với hơn 700 thư viện, được viết và chia sẻ bởi nhà
phát hành Arduino Software và thành viên trong cộng đồng Arduino. Mọi người
có thể tận dụng chúng cho dự án của riêng mình mà không cần phải bỏ ra bất kỳ
chi phí nào.
b. Giao diện đơn giản dễ sử dụng
Arduino IDE có một giao diện đơn giản, dễ sử dụng giúp người dùng thuận
tiện hơn trong thao tác. Dưới đây là một số tính năng chúng ta thường sử dụng:

● Nút kiểm tra chương trình (Verify): giúp dò lỗi phần code định truyền
xuống bo mạch Arduino.

● Nút tải đoạn code vào bo mạch Arduino (Upload): giúp nhập đoạn code
vào bo mạch Arduino.

● Vùng lập trình: người dùng sẽ viết chương trình tại khu vực này.

● Thanh Menu: gồm những thẻ chức năng nằm trên cùng như File, Edit,
Sketch, Tools, Help.

c. Hỗ trợ đa nền tảng như Windows, MacOS, Linux


Arduino IDE hoạt động trên 3 hệ điều hành phổ biến nhất. Đó là Windows,
Mac OS và Linux. Nhờ vậy, người dùng có thể truy cập vào phần mềm ở bất cứ
đâu, bất cứ khi nào. Ngoài ra, người dùng có thể truy cập vào công cụ từ đám
mây. Điều này cho phép các nhà lập trình lựa chọn tạo và lưu dự án của mình
trên đám mây. Hoặc họ có thể xây dựng chương trình trên máy tính và upload nó
lên bo mạch Arduino.

3.3.1.2. Phần mềm Visual studio code là gì?

……………………………………….

…………………………………………

3.3.2. Mã code của các nút

3.3.2.1. Mã code của nút cảm biến 1


#include <esp_now.h>

#include <WiFi.h>

#include "DHT.h"

const int DHTPIN = 25;

const int DHTTYPE = DHT11;

DHT dht(DHTPIN, DHTTYPE);

uint8_t broadcastAddress[] = {0x08,0x3A,0xF2,0x72,0xDB,0x24};

typedef struct struct_message {

int id; // must be unique for each sender board

int x;

int y;

} struct_message;

struct_message myData;

esp_now_peer_info_t peerInfo;

void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {

Serial.print("\r\nLast Packet Send Status:\t");

Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery


Success" : "Delivery Fail");}

void setup() {

Serial.begin(115200);

dht.begin();

WiFi.mode(WIFI_STA);

if (esp_now_init() != ESP_OK) {

Serial.println("Error initializing ESP-NOW");

return;
}

esp_now_register_send_cb(OnDataSent);

memcpy(peerInfo.peer_addr, broadcastAddress, 6);

peerInfo.channel = 0;

peerInfo.encrypt = false;

if (esp_now_add_peer(&peerInfo) != ESP_OK){

Serial.println("Failed to add peer");

return;

void loop() {

// Set values to send

myData.id = 1;

float h = dht.readHumidity();

float t = dht.readTemperature();

myData.x = t;

myData.y = h;

esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData,


sizeof(myData));

if (result == ESP_OK) {

Serial.println("Sent with success");

else {

Serial.println("Error sending the data");


}

delay(3000);

3.3.2.3. Mã code của nút sink

#include <esp_now.h>

#include <WiFi.h>

#include <IOXhop_FirebaseESP32.h>

#include <ArduinoJson.h>

#define WIFI_SSID "Hera Palace"

#define WIFI_PASSWORD "244466666"

#define FIREBASE_HOST "https://esp32firebaseenxuto-74f23-default-


rtdb.firebaseio.com/"

#define FIREBASE_AUTH
"CxV2VWf74yPUCS0AfVvhwLg05S124wbNoc12ZYOy"

unsigned long sendDataPrevMillis = 0;

typedef struct struct_message {

int id;

int x;

int y;

}struct_message;

struct_message myData;

struct_message board1;

struct_message board2;

struct_message boardsStruct[2] = {board1, board2};


void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int
len) {
char macStr[18];

memcpy(&myData, incomingData, sizeof(myData));

boardsStruct[myData.id-1].x = myData.x;

boardsStruct[myData.id-1].y = myData.y;

void setup() {

Serial.begin(115200);

WiFi.mode(WIFI_STA);

if (esp_now_init() != ESP_OK) {

Serial.println("Error initializing ESP-NOW");

return;

//--------------------------------------------------

WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

Serial.print("Conectando ao wifi");

while (WiFi.status() != WL_CONNECTED)

Serial.print(".");

delay(300);

Serial.println();

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

esp_now_register_recv_cb(OnDataRecv);

}
void loop() {

int board1X = boardsStruct[0].x;

int board1Y = boardsStruct[0].y;

int board2X = boardsStruct[1].x;

int board2Y = boardsStruct[1].y;

float h = boardsStruct[1].y;

float t = boardsStruct[1].x;

float ppm = 100;

Serial.printf("x value: %f \n", t);

Serial.printf("y value: %f \n", h);

Serial.println();

//--------------------Sender---------------------------

if (millis() - sendDataPrevMillis > 3000 || sendDataPrevMillis == 0)

sendDataPrevMillis = millis();

Firebase.setString("/Receiver/Title", "Dinh");

Firebase.setInt("/Receiver/Number0", ppm); // AQI

Firebase.setFloat("/Receiver/Number1", h); // Độ ẩm

Firebase.setFloat("/Receiver/Number2", t); // Nhiệt độ

}
3.4. Code WEB (HTML, CSS, JS)

3.5. Mô phỏng và đánh giá

Hình 3.8:
Đánh giá: Mô hình mạng cảm biến không dây này sử dụng giao thức HTTP để
truyền dữ liệu từ các nút cảm biến và nút sink với nhau. Tốc độ truyền dữ liệu khá
nhanh và sử dụng được trong môi trường không có mạng theo mô hình Access point –
Client của vi điều khiển ESP32.

3.5. Kết luận

Chúng ta đã mô phỏng một mạng cảm biến không dây trong một kho lạnh. Mạng
cảm biến này sử dụng các nút cảm biến với ESP32, DHT11 và màn hình LCD để thu
thập dữ liệu về nhiệt độ và độ ẩm trong kho lạnh và hiển thị chúng tại nút sink.

Qua quá trình mô phỏng, chúng ta đã nhìn thấy một số ưu điểm của mạng cảm
biến không dây trong môi trường kho lạnh. Với tính linh hoạt của mạng không dây,
chúng ta không cần phải cài đặt dây cáp phức tạp trong kho lạnh, điều này giúp tiết
kiệm thời gian và công sức khi triển khai.

Sử dụng ESP32, chúng ta có thể kết nối các nút cảm biến và nút sink với mạng
Wi-Fi, cho phép truyền dữ liệu từ các nút cảm biến đến nút sink một cách dễ dàng.
Điều này giúp theo dõi nhiệt độ và độ ẩm trong kho lạnh từ xa và thu thập dữ liệu một
cách hiệu quả.

DHT11 là một cảm biến giá rẻ và phổ biến, cho phép chúng ta đo nhiệt độ và độ
ẩm trong kho lạnh. Mặc dù độ chính xác của nó không cao như các cảm biến chuyên
nghiệp, nhưng trong mô phỏng này, nó vẫn cung cấp thông tin đáng tin cậy về điều
kiện môi trường trong kho lạnh.

Màn hình LCD được sử dụng để hiển thị dữ liệu nhiệt độ và độ ẩm một cách trực
quan và dễ đọc. Điều này giúp nhân viên trong kho lạnh dễ dàng theo dõi và kiểm soát
điều kiện nhiệt độ và độ ẩm một cách thuận tiện.
Tổng quát, mô phỏng mạng cảm biến không dây trong kho lạnh đã cho chúng ta
cái nhìn về cách sử dụng công nghệ để giám sát nhiệt độ và độ ẩm trong môi trường
lạnh. Mặc dù còn một số hạn chế, nhưng mạng cảm biến không dây vẫn là một giải
pháp hữu ích trong việc quản lý và kiểm soát điều kiện môi trường trong kho lạnh.

KẾT LUẬN VÀ KIẾN NGHỊ

You might also like