- Tổng quan về cảm biến DHT11:
- Điều kiện tiên quyết:
- Cài đặt thư viện Adafruit LCD trên Raspberry Pi:
- Cài đặt thư viện Adafruit DHT11 trên Raspberry Pi:
- Sơ đồ mạch:
- Lập trình Python cho cảm biến DHT11:
- Đo độ ẩm và nhiệt độ bằng Raspberry Pi:
Nhiệt độ và Độ ẩm là các thông số phổ biến nhất được theo dõi trong bất kỳ môi trường nào. Có rất nhiều cảm biến để lựa chọn để đo nhiệt độ và độ ẩm, nhưng cảm biến được sử dụng nhiều nhất là DHT11 do phạm vi đo và độ chính xác tốt. Nó cũng hoạt động với giao tiếp một chân và do đó rất dễ dàng giao tiếp với Vi điều khiển hoặc Vi xử lý. Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách giao tiếp cảm biến DHT11 phổ biến với Raspberry Pi và hiển thị giá trị nhiệt độ và độ ẩm trên màn hình LCD 16x2. Chúng tôi đã sử dụng nó để xây dựng Trạm thời tiết IoT Raspberry Pi.
Tổng quan về cảm biến DHT11:
Cảm biến DHT11 có thể đo độ ẩm và nhiệt độ tương đối với các thông số kỹ thuật sau
Phạm vi nhiệt độ: 0-50 ° C Độ chính xác nhiệt độ: ± 2 ° C Phạm vi độ ẩm: 20-90% RH Độ chính xác độ ẩm: ± 5%
Cảm biến DHT11 có sẵn ở dạng mô-đun hoặc dạng cảm biến. Trong hướng dẫn này, chúng tôi đang sử dụng dạng mô-đun của cảm biến, sự khác biệt duy nhất giữa cả hai là ở dạng mô-đun, cảm biến có một tụ lọc và một điện trở kéo lên được gắn vào chân đầu ra của cảm biến. Vì vậy, nếu bạn chỉ sử dụng cảm biến, hãy chắc chắn rằng bạn thêm hai thành phần này. Cũng tìm hiểu giao tiếp DHT11 với Arduino.
Cách hoạt động của Cảm biến DHT11:
Cảm biến DHT11 có vỏ màu xanh lam hoặc trắng. Bên trong lớp vỏ này, chúng ta có hai thành phần quan trọng giúp chúng ta cảm nhận độ ẩm và nhiệt độ tương đối. Thành phần đầu tiên là một cặp điện cực; điện trở giữa hai điện cực này do chất nền giữ ẩm quyết định. Vì vậy điện trở đo được tỉ lệ nghịch với độ ẩm tương đối của môi trường. Cao hơn độ ẩm tương đối thấp hơn sẽ là giá trị của điện trở và ngược lại. Cũng lưu ý rằng độ ẩm tương đối khác với độ ẩm thực tế. Độ ẩm tương đối đo hàm lượng nước trong không khí so với nhiệt độ trong không khí.
Thành phần còn lại là một NTC Thermistor gắn trên bề mặt. Thuật ngữ NTC là viết tắt của Hệ số nhiệt độ âm, khi nhiệt độ tăng, giá trị của điện trở sẽ giảm
Điều kiện tiên quyết:
Giả định rằng Raspberry Pi của bạn đã được cài sẵn hệ điều hành và có thể kết nối với internet. Nếu không, hãy làm theo hướng dẫn Bắt đầu với Raspberry Pi trước khi tiếp tục.
Nó cũng được giả định rằng bạn có quyền truy cập vào số pi của mình thông qua cửa sổ đầu cuối hoặc thông qua ứng dụng khác mà qua đó bạn có thể viết và thực thi các chương trình python và sử dụng cửa sổ đầu cuối.
Cài đặt thư viện Adafruit LCD trên Raspberry Pi:
Giá trị của nhiệt độ và độ ẩm sẽ được hiển thị trên màn hình LCD 16 * 2. Adafruit cung cấp cho chúng tôi một thư viện để dễ dàng vận hành màn hình LCD này ở chế độ 4-bit, vì vậy hãy thêm nó vào Raspberry Pi bằng cách mở cửa sổ đầu cuối Pi và làm theo các bước dưới đây.
Bước 1: Cài đặt git trên Raspberry Pi của bạn bằng cách sử dụng dòng bên dưới. Git cho phép bạn sao chép bất kỳ tệp dự án nào trên Github và sử dụng nó trên Raspberry pi của bạn. Thư viện của chúng tôi ở trên Github nên chúng tôi phải cài đặt git để tải thư viện đó xuống pi.
apt-get cài đặt git
Bước 2: Dòng sau liên kết đến trang GitHub nơi có thư viện, chỉ cần thực hiện dòng sao chép tệp dự án trên thư mục chính của Pi
git clone git: //github.com/adafruit/Adafruit_Python_CharLCD
Bước 3: Sử dụng lệnh bên dưới để thay đổi dòng thư mục, vào tệp dự án mà chúng ta vừa tải xuống. Dòng lệnh được đưa ra bên dưới
cd Adafruit_Python_CharLCD
Bước 4: Bên trong thư mục sẽ có một tập tin tên là setup.py , chúng ta phải cài đặt nó, để cài đặt thư viện. Sử dụng mã sau để cài đặt thư viện
sudo python setup.py cài đặt
Đó là thư viện lẽ ra đã được cài đặt thành công. Bây giờ, tương tự, hãy tiến hành cài đặt thư viện DHT cũng từ Adafruit.
Cài đặt thư viện Adafruit DHT11 trên Raspberry Pi:
DHT11 Sensor hoạt động với nguyên lý của hệ thống một dây. Giá trị của nhiệt độ và độ ẩm được cảm biến bởi cảm biến và sau đó được truyền qua chân đầu ra dưới dạng dữ liệu nối tiếp. Sau đó, chúng tôi có thể đọc những dữ liệu này bằng cách sử dụng chân I / O trên MCU / MPU. Để hiểu cách đọc các giá trị này, bạn sẽ phải đọc qua biểu dữ liệu của cảm biến DHT11, nhưng bây giờ để giữ mọi thứ đơn giản, chúng tôi sẽ sử dụng thư viện để nói chuyện với cảm biến DHT11.
Các thư viện DHT11 cung cấp bởi Adafruit có thể được sử dụng cho DHT11, DHT22 và cảm biến nhiệt độ một dây khác nữa. Quy trình cài đặt thư viện DHT11 cũng tương tự như quy trình cài đặt thư viện LCD. Dòng duy nhất sẽ thay đổi là liên kết của trang GitHub nơi lưu thư viện DHT.
Nhập bốn dòng lệnh lần lượt vào thiết bị đầu cuối để cài đặt thư viện DHT
git clone
cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev sudo python setup.py install
Sau khi hoàn tất, bạn sẽ cài đặt thành công cả hai thư viện trên Raspberry Pi của chúng tôi. Bây giờ chúng ta có thể tiến hành kết nối phần cứng.
Sơ đồ mạch:
Sơ đồ mạch hoàn chỉnh Giao diện DH11 với Raspberry pi được đưa ra bên dưới, nó được xây dựng bằng Fritzing. Làm theo các kết nối và tạo mạch
Cả cảm biến LCD và DHT11 đều hoạt động với nguồn điện + 5V, vì vậy chúng tôi sử dụng chân 5V trên Raspberry Pi để cấp nguồn cho cả hai. Một điện trở kéo lên có giá trị 1k được sử dụng trên chân đầu ra của cảm biến DHT11, nếu bạn đang sử dụng một mô-đun, bạn có thể tránh điện trở này.
Một chiếc tông đơ 10k được thêm vào chân Vee của màn hình LCD để kiểm soát mức độ tương phản của màn hình LCD. Ngoài ra, tất cả các kết nối đều khá thẳng. Nhưng hãy lưu ý bạn đang sử dụng chân GPIO nào để kết nối các chân vì chúng tôi sẽ cần trong chương trình của mình. Biểu đồ dưới đây sẽ cho phép bạn tìm ra số pin GPIO.
Sử dụng biểu đồ và thực hiện các kết nối của bạn theo sơ đồ mạch. Tôi đã sử dụng breadboard và dây jumper để tạo kết nối. Vì tôi sử dụng mô-đun DHT11 nên tôi đã kết nối trực tiếp nó với Raspberry Pi. Phần cứng của tôi trông như thế này bên dưới
Lập trình Python cho cảm biến DHT11:
Chúng ta phải viết chương trình để đọc giá trị nhiệt độ và độ ẩm từ cảm biến DHT11 rồi hiển thị tương tự trên màn hình LCD. Vì chúng tôi đã tải xuống các thư viện cho cả cảm biến LCD và DHT11, mã sẽ được chuyển tiếp khá nhiều. Các python chương trình hoàn toàn có thể tìm thấy ở phần cuối của trang này, nhưng bạn có thể đọc thêm để hiểu làm thế nào các chương trình hoạt động.
Chúng ta phải nhập thư viện LCD và thư viện DHT11 vào chương trình của mình để sử dụng các chức năng liên quan đến nó. Vì chúng tôi đã tải xuống và cài đặt chúng trên Pi của mình, chúng tôi có thể chỉ cần sử dụng các dòng sau để nhập chúng. Chúng tôi cũng nhập thư viện thời gian để sử dụng hàm trì hoãn.
thời gian nhập # thời gian nhập để tạo độ trễ nhập Adafruit_CharLCD dưới dạng LCD # Nhập thư viện LCD nhập Adafruit_DHT # Nhập Thư viện DHT cho cảm biến
Tiếp theo, chúng ta phải xác định cảm biến được kết nối với chân nào và loại cảm biến nhiệt độ được sử dụng. Biến sensor_name được gán cho Adafruit_DHT.DHT11 vì chúng ta đang sử dụng bộ cảm biến DHT11 đây. Chân đầu ra của cảm biến được kết nối với GPIO 17 của Raspberry Pi và do đó chúng tôi gán 17 cho biến sensor_pin như hình dưới đây.
sensor_name = Adafruit_DHT.DHT11 # chúng tôi đang sử dụng cảm biến DHT11 sensor_pin = 17 #Cảm biến được kết nối với GPIO17 trên Pi
Tương tự, chúng ta cũng phải xác định các chân GPIO mà LCD được kết nối với. Ở đây chúng ta đang sử dụng màn hình LCD ở chế độ 4 bit do đó chúng ta sẽ có bốn chân dữ liệu và hai chân điều khiển để kết nối với các chân GPIO của pi. Ngoài ra, bạn có thể kết nối chân đèn nền với chân GPIO nếu chúng ta cũng muốn điều khiển đèn nền. Nhưng hiện tại tôi không sử dụng nó nên tôi đã gán 0 cho nó.
lcd_rs = 7 #RS của LCD được kết nối với GPIO 7 trên PI lcd_en = 8 #EN của LCD được kết nối với GPIO 8 trên PI lcd_d4 = 25 # D4 của LCD được kết nối với GPIO 25 trên PI lcd_d5 = 24 # D5 của LCD là được kết nối với GPIO 24 trên PI lcd_d6 = 23 # D6 của LCD được kết nối với GPIO 23 trên PI lcd_d7 = 18 # D7 của LCD được kết nối với GPIO 18 trên PI lcd_backlight = 0 #LED không được kết nối nên chúng tôi gán cho 0
Bạn cũng có thể kết nối LCD ở chế độ 8-bit với Raspberry pi nhưng khi đó các chân rảnh rỗi sẽ bị giảm đi.
Thư viện LCD từ Adafruit mà chúng tôi đã tải xuống có thể được sử dụng cho tất cả các loại màn hình LCD đặc trưng. Ở đây trong dự án của chúng tôi, chúng tôi đang sử dụng màn hình LCD 16 * 2 vì vậy chúng tôi đang đề cập đến số lượng Hàng và Cột cho một biến như hình dưới đây.
lcd_columns = 16 # cho 16 * 2 LCD lcd_rows = 2 # cho 16 * 2 LCD
Bây giờ, chúng ta đã khai báo các chân LCD và số lượng Hàng và Cột cho màn hình LCD, chúng ta có thể khởi tạo màn hình LCD bằng cách sử dụng dòng sau để gửi tất cả thông tin cần thiết đến thư viện.
lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) # Gửi tất cả chi tiết mã pin vào thư viện
Để bắt đầu chương trình, chúng tôi hiển thị một thông báo giới thiệu nhỏ bằng cách sử dụng hàm lcd.message () và sau đó đưa ra độ trễ 2 giây để thông báo có thể đọc được. Để in trên dòng thứ 2, lệnh \ n có thể được sử dụng như hình dưới đây
lcd .message ('DHT11 with Pi \ n -CircuitDigest') # Cung cấp thời gian cho tin nhắn giới thiệu.sleep (2) # Chờ trong 2 giây
Cuối cùng, bên trong vòng lặp while, chúng ta nên đọc giá trị nhiệt độ và độ ẩm từ cảm biến và hiển thị trên màn hình LCD cứ sau 2 giây. Chương trình hoàn chỉnh bên trong vòng lặp while được hiển thị bên dưới
while 1: #Infinite Loop
độ ẩm, nhiệt độ = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor và lưu các giá trị tương ứng trong biến thể nhiệt độ và độ ẩm
lcd.clear () # Xoá màn hình LCD lcd.message ('Temp =%.1f C'% nhiệt độ) # Hiển thị giá trị của nhiệt độ lcd.message ('\ nHum =%.1f %%'% độ ẩm) # Hiển thị giá trị của Humidity time.sleep (2) # Chờ trong 2 giây rồi cập nhật giá trị
Chúng ta có thể dễ dàng nhận được giá trị của nhiệt độ và độ ẩm từ cảm biến bằng cách sử dụng dòng đơn bên dưới. Như bạn có thể thấy, nó trả về hai giá trị được lưu trữ trong độ ẩm và nhiệt độ thay đổi. Các sensor_name và sensor_pin chi tiết được thông qua như là các thông số; những giá trị này đã được cập nhật trong phần đầu của chương trình
độ ẩm, nhiệt độ = Adafruit_DHT.read_retry (sensor_name, sensor_pin)
Để hiển thị tên biến trên màn hình LCD, chúng ta có thể sử dụng các số nhận dạng như & d,% c, v.v. Ở đây vì chúng tôi đang hiển thị số dấu phẩy động chỉ có một chữ số sau dấu thập phân, chúng tôi sử dụng số nhận dạng%.1f để hiển thị giá trị trong nhiệt độ và độ ẩm thay đổi
lcd .message ('Temp =%.1f C'% nhiệt độ) lcd .message ('\ nHum =%.1f %%'% độ ẩm)
Đo độ ẩm và nhiệt độ bằng Raspberry Pi:
Thực hiện các kết nối theo sơ đồ mạch và cài đặt các thư viện cần thiết. Sau đó khởi chạy chương trình python được đưa ra ở cuối trang này. Màn hình LCD của bạn sẽ hiển thị thông báo giới thiệu và sau đó hiển thị giá trị nhiệt độ và độ ẩm hiện tại như trong hình dưới đây.
Nếu bạn không thấy màn hình LCD không hiển thị gì, hãy kiểm tra xem cửa sổ python shell có hiển thị bất kỳ lỗi nào không, nếu không có lỗi nào được hiển thị thì hãy kiểm tra các kết nối của bạn một lần nữa và điều chỉnh chiết áp để thay đổi mức độ tương phản của màn hình LCD và kiểm tra xem bạn có bật được gì không màn hình.
Hy vọng bạn đã hiểu dự án và thích xây dựng nó, nếu bạn gặp bất kỳ vấn đề nào trong việc hoàn thành dự án này, hãy báo cáo trên phần bình luận hoặc sử dụng diễn đàn để được trợ giúp kỹ thuật. Tôi sẽ cố gắng hết sức để trả lời tất cả các ý kiến.
Bạn cũng có thể kiểm tra các dự án khác của chúng tôi bằng DHT11 với bộ vi điều khiển khác.