0

Arduino giao tiếp DHT11 gửi đến điện thoại dùng NRF24L01

gui-du-lieu-dht11-den-smartphone-android
5/5 - (1 bình chọn)

Arduino thì quá quen thuộc với các bạn rồi nếu như bạn đang tìm đọc đến bài này phải không. Arduino được dùng trong khá nhiều các project ở mức độ tìm hiểu, học tập với khả năng “dễ học” của nó. Có khả năng giao tiếp với khá nhiều các module ngoại vi khác và hôm nay mình xin giới thiệu đến các bạn cách dùng Arduino giao tiếp DHT11, module dht11 với khả năng thu thập các giá trị nhiệt độ và độ ẩm môi trường xung quanh khá tốt.

Giao tiếp giữa Arduino và DHT11

Mục đích bài viết

  1. Dùng Arduino giao tiếp DHT11 (Đọc được thông số nhiệt độ, độ ẩm)
  2. Giao tiếp giữa arduino và module NRF24L01 (sử dụng bluetooth)
  3. Gửi giá trị độ ẩm, nhiệt độ theo thời gian thực đến điện thoại thông qua sóng bluetooth

Thành quả của dự án:

Tìm hiểu các thành phần cần có

1. Phần cứng

  • Module Arduino Uno
  • Module DHT11
  • Module NRF24L01

2. Phần mềm

  • Arduino IDE (nếu chưa có các bạn có thể tải về và tiến hành cài đặt nhé!)
  • Ứng dụng thu thập dữ liệu từ cảm biến (Nordic BLE Android Application): Cài đặt trên điện thoại Android nhé.

Đối với arduino ở đây mình sử dụng module arduino uno đã khá thân thuộc với anh em dân điện chúng ta, vì vậy mình xin phép không nói nhiều về nó nữa. Mình chỉ xin giới thiệu qua về 2 module còn lại

Module NRF24L01

  • Khoảng cách thu phát khoảng 100m (với điều kiện trống trải), khoảng 30-50m (trong nhà). Với một số phiên bản đặc biệt ví dụ như loại NRF24L01+ thì khoảng cách có thể lên tới 1km. Khá thích hợp cho các bộ điều khiển cầm tay.
  • Có anten sẵn trên bảng mạch rất tiện và đẹp.
  • Có khả năng truyền tín hiệu 2 chiều. Tức là một module vừa có thể là transmitter vừa có thể là receiver. Khác biệt so với loại 433Mhz là phải có 2 module riêng biệt.

Sơ đồ chân NRF24L01

Module DHT11

  • Điện áp hoạt động: 3V – 5V (DC)
  • Dãy độ ẩm hoạt động: 20% – 90% RH, sai số ±5%RH
  • Dãy nhiệt độ hoạt động: 0°C ~ 50°C, sai số ±2°C
  • Khoảng cách truyền tối đa: 20m

Sơ đồ chân DHT11

Kết nối các module

Sơ đồ kết nối dự án

Các bạn tiến hành kết nối đúng thứ tự chân như hình trên sau đó hãy cấp nguồn vào board arduino (jack cắm tròn 5V hoặc cổng nạp code từ USB)

Lưu ý: NRF24L01 chỉ cấp nguồn 3v3 nhé!

Nguyên lý giao tiếp giữa các module

Đầu tiên để giao tiếp giữa arduino và module dht11 thì ta chỉ cần kết nối chân tín hiệu của dht11 đến chân digital của arduino (sử dụng chân số 4).

Đối với nrf24l01 ta tiến hành giao tiếp với arduino thông qua giao thức spi

  • GND:   GND  Arduino
  • VCC:   3.3v  Arduino
  • CE:      PIN 9  Arduino
  • CSN:    PIN 10  Arduino
  • SCK:    PIN 13  Arduino Uno
  • MOSI:  PIN 11  Arduino Uno
  • MISO:   PIN 12  Arduino Uno
  • IRQ:      không dùng

Tiến hành code thôi nào

Code tổng quát dự án:

#include <SPI.h>
#include <RF24.h>
#include <BTLE.h>
#include <DHT.h>                                                            // dht11 temperature and humidity sensor library

#define DHTPIN 4                                                           // what digital pin we're connected to
#define DHTTYPE DHT11                                                       // select dht type as DHT 11 or DHT22
DHT dht(DHTPIN, DHTTYPE);

RF24 radio(9, 10); // CE, CSN
BTLE btle(&radio);

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.print("BLE and DHT Starting... ");
  Serial.println("Send Temperature Data over BTLE");
  dht.begin();   // initialise DHT11 sensor
  btle.begin("CD Temp");    // 8 chars max
  Serial.println("Successfully Started");
}

void loop() {                                              
  float temp = dht.readTemperature();   //read temperature data
  if (isnan(h) || isnan(t)) {                                                // Check if any reads failed and exit early (to try again).
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  Serial.print(" Temperature: ");  Serial.print(t);  Serial.println("°C ");
  nrf_service_data buf;
  buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID;
  buf.value = BTLE::to_nRF_Float(temp);

  if (!btle.advertise(0x16, &buf, sizeof(buf))) {
    Serial.println("BTLE advertisement failed..!");
  }
  btle.hopChannel(); 
  delay(2000);
}

Giải thích

Đầu tiên chúng ta cần các thư viện

#include <SPI.h>
#include <RF24.h>
#include <BTLE.h>
#include <DHT.h>

Tiếp theo là khai báo sử dụng module DHT11 hoặc DHT22, định nghĩa các chân giao tiếp giữa NRF24L01 và arduino

#define DHTPIN 
#define DHTTYPE DHT11                  
DHT22
DHT dht(DHTPIN, DHTTYPE);
RF24 radio(9, 10);
BTLE btle(&radio);

Cấu hình in dữ liệu ra màn hình để xem

Serial.begin(9600);
dht.begin();   
btle.begin("CD Temp");

Tiến hành đọc nhiệt độ của DHT11

float temp = dht.readTemperature();   //read temperature data
  if (isnan(h) || isnan(t)) {                                                
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

Lưu trữ giá trị vào bộ nhớ đệm và sau đó gửi giá trị vừa đọc được đến module NRF24L01 để tiến hành quảng bá dữ liệu đó đến App trên điện thoại

nrf_service_data buf;
 buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID;
 buf.value = BTLE::to_nRF_Float(temp);

 if (!btle.advertise(0x16, &buf, sizeof(buf))) {
   Serial.println("BTLE advertisement failed..!");
 }

Sau 1 chu kỳ quảng bá dữ liệu đến điện thoại thì sẽ ngừng và chuyển đến kênh khác sau đó lặp lại quá trình đọc cảm biến và gửi

btle.hopChannel();

Chờ khoảng 2 giây để lặp lại quá trình

delay(2000);

Kết quả

Sau khi nạp code thành công vào board arduino uno các bạn có thể tiến hành mở serial và theo dõi các giá trị đọc được từ module dht11.

Mở ứng dụng vừa cài đặt phía trên và tiến hành kết nối đến bluetooth có tên “CD Temp”, các bạn có thể làm theo video hướng dẫn phía trên nhé.

Kết quả sau khi kết nối thành công

Vậy Espitek đã hướng dẫn chi tiết từng bước để thực hiện dự án thu thập dữ liệu từ module DHT11 để gửi lên điện thoại giúp bạn dễ dàng giám sát rồi. Các bạn hoàn toàn có thể cải tiến dựa trên bài này để ứng dụng cho các dự án khác nhé.

Chúc các bạn thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai.