Mở đầu
- Hôm nay, mình sẽ hướng dẫn các bạn cách sử dụng con cảm biến nhiệt độ DS18B20 siêu quen thuộc nhé. Lí do tại sao mình lại sử dụng con cảm biến này, vì giá thành khá rẻ (Khoảng 30-40k ngoài thị trường), sai số nhiệt độ nhỏ ( +±0.5°C ), dễ sử dụng và lắp mạch. Trước đó mình đã có sử dụng một con cảm biến nhiệt độ là LM35 và một con cảm biến tích hợp là DHT11, nhưng sai số còn khá lớn, nên mình quyết định chọn em DS18B20 này để phục vụ cho các bài nghiên cứu của mình.
Chuẩn bị
Phần cứng | |
---|---|
ESP8266 NodeMCU v1.0 | x1 |
Phần mềm | |
Arduino IDE | |
Thư viện | |
OneWire | |
Dallas Temperute |
Cảm biến nhiệt độ DS18B20
Cảm biến nhiệt độ DS18B20 có 2 loại chính
[caption id="attachment_101957" align="aligncenter" width="400"]
- Cảm biến nhiệt độ DS18B20 dây
- Module cảm biến nhiệt độ DS18B20
Thông số kĩ thuật
Chuẩn giao tiếp | : 1 wire |
Điện áp hoạt động | : 3.0-5.5V |
Dải đo | : -55 °C đến +125 °C |
Độ chính xác | : ± 0.5 ° C trong khoảng -10 ° C đến +85 ° C |
Độ phân giải | : 9 đến 12 bit |
Sơ đồ chân
-
Module DS18B20
Cảm biến nhiệt độ DS18B20 dây
- Ok, vậy là chúng ta đã có những khái niệm đầu tiên về con cảm biến nhiệt độ DS18B20 này rồi đúng không. Còn chờ gì nữa mà không qua ngay quán linh kiện điện tử mua một em về test ngay thôi các bạn ơi.
Sơ đồ đấu nối với ESP8266
Lưu ý: Các bạn nên có một con trở 4.7k ở giữa 2 chân data màu xanh và chân VDD vào màu vàng nhé.
Code
#include <OneWire.h> #include <DallasTemperature.h> unsigned int t; #define ONE_WIRE_BUS 4 // Cài đặt chân GPIO sử dụng /* * Thiết đặt thư viện onewire * Tạo thuộc tính sử dụng giao tiếp onewire ở chân GPIO số 4 */ OneWire oneWire(ONE_WIRE_BUS); /* * Mình dùng thư viện DallasTemperature để đọc cho nhanh */Liên kết thuộc tính với thư viện DallasTemperature để sử dụng đọc cảm biến DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); sensors.begin(); // Bắt đầu đọc cảm biến } void loop(void) { /* * Mình không dùng delay mà sẽ dùng hàm millis * Sau khoảng thời gian là 1s thì nó sẽ request như bên dưới ;) */ if(millis()-t >1000) { // Yêu cầu thông tin từ cảm biến sensors.requestTemperatures(); Serial.print("Nhiet do:"); // Lấy giá trị nhiệt độ của cảm biến. // Vì có thể có nhiều cảm biến nên số thứ tự đầu tiên sẽ là đọc cảm biến đầu tiên sử dụng // Nếu dùng 2 con thì có thể dùng getTempCByIndex(1) Serial.println(sensors.getTempCByIndex(0)); t=millis(); } }
Video
https://www.youtube.com/watch?v=MIizR-JZZn8
https://www.candipharm.com
13/12/2022