Mục lục:
Video: Vẽ sơ đồ dữ liệu DHT11 bằng Raspberry Pi và Arduino UNO: 7 bước
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Tài liệu hướng dẫn này giải thích cách tôi vẽ biểu đồ dữ liệu cảm biến nhiệt độ DHT11 bằng Arduino Uno và Raspberry Pi. Trong cảm biến nhiệt độ này được kết nối với Arduino Uno và Arduino Uno được kết nối nối tiếp với Raspberry Pi. Tại Raspberry Pi Side, các thư viện matplotlib, numpy và drawnow được sử dụng để vẽ đồ thị.
Bước 1: Những điều cần thiết cho dự án
1. Raspberry Pi
2. Arduino Uno
3. Cảm biến nhiệt độ DHT11
4. Dây nhảy
5. Breadboard
Bước 2: Tải xuống và cài đặt Arduino IDE trong Raspberry Pi
Lưu ý: - Bạn có thể sử dụng Arduino IDE của windows, Linux hoặc Mac để tải lên bản phác thảo trong Arduino UNO.
Bước đầu tiên là cài đặt Arduino IDE cho trình duyệt đang mở đó trong Raspberry Pi và mở liên kết được cung cấp bên dưới
Arduino IDE trước
Sau đó tải xuống phiên bản Linux ARM và giải nén nó bằng lệnh
tên tệp tar -xf
Sau khi giải nén bạn sẽ thấy một thư mục mới. Ở đây tôi đang sử dụng arduino-1.8.2 IDE. Sau đó đi đến thư mục bằng cách sử dụng lệnh.
cd arduino-1.8.1
Để chạy Arduino IDE, hãy sử dụng lệnh này trong thư mục arduino-1.8.2
./arduino
Cách sử dụng thư viện
Để cài đặt bất kỳ thư viện nào trong Arduino, chỉ cần tải xuống thư viện và dán vào thư mục arduino 1.8.2 ==> Library.
LƯU Ý: - Đảm bảo không có (-) trong thư mục thư viện cho ex (DHT-sensor). Nếu có dấu (-), hãy đổi tên nó.
chúng tôi sẽ sử dụng hai thư viện trong có thể hướng dẫn này, DHT_Sensor và Adafruit_Sensor
Bước 3: Mã cho Arduino
Bây giờ, hãy để python và Arduino nói chuyện cùng nhau. Đầu tiên, chúng ta cần một chương trình đơn giản để Arduino gửi dữ liệu qua cổng nối tiếp. Chương trình sau đây là một chương trình đơn giản sẽ đếm Arduino và gửi dữ liệu đến cổng nối tiếp.
Mã Arduino
#include "DHT.h" float tempC; // Biến hoặc giữ nhiệt độ trong C float tempF; // Biến để giữ nhiệt độ trong độ ẩm F float; // Biến để đọc áp suất
#define DHTPIN 7 // loại pin kỹ thuật số mà chúng tôi đang kết nối với
#define DHTTYPE DHT11 // DHT 11
// # xác định DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// # xác định DHTTYPE DHT21 // DHT 21 (AM2301)
// Khởi tạo cảm biến DHT.
DHT dht (DHTPIN, DHTTYPE);
void setup () {Serial.begin (115200); // bật màn hình nối tiếp
dht.begin (); // khởi tạo dht}
void loop () {tempC = dht.readTempe Heat (); // Đảm bảo khai báo các biến của bạn
độ ẩm = dht.readHumidity (); // Đọc độ ẩm
Serial.print (tempC);
Serial.print (",");
Serial.print (độ ẩm);
Serial.print ("\ n"); // cho new lineselay (2000); // Tạm dừng giữa các lần đọc. }
Sau khi bản phác thảo được biên dịch, hãy chọn bo mạch và cổng và tải nó lên.
Bước 4: Thiết lập Raspberry Pi
Sau khi mã được tải lên, hãy cài đặt một số thư viện để chúng tôi có thể vẽ biểu đồ dữ liệu sắp xếp từ Arduino Uno.
1. PySerial là một thư viện cung cấp hỗ trợ cho các kết nối nối tiếp trên nhiều thiết bị khác nhau. Để cài đặt nó, hãy sử dụng lệnh.
Sudo apt-get install python-serial
2. Numpy là một gói định nghĩa một đối tượng mảng đa chiều và các hàm toán học nhanh liên quan hoạt động trên nó. Nó cũng cung cấp các quy trình đơn giản cho đại số tuyến tính và FFT (Fast Fourier Transform) và tạo số ngẫu nhiên phức tạp. Bạn có thể cài đặt nó theo nhiều cách hoặc sử dụng gói apt hoặc pip. Ở đây tôi đang cài đặt bằng cách sử dụng pip, đầu tiên chúng ta phải cài đặt pip
sudo apt-get install python-pip python-dev build-essential
sudo pip cài đặt numpy
hoặc nếu bạn muốn sử dụng gói apt
sudo apt install python-numpy
3. Matplotlib là một thư viện vẽ đồ thị 2D cung cấp một API hướng đối tượng để nhúng các đồ thị vào các ứng dụng sử dụng các bộ công cụ GUI có mục đích chung như Tkinter, wxPython, Qt hoặc GTK +. Để cài đặt nó, hãy sử dụng lệnh
sudo pip cài đặt matplotlib
hoặc
sudo apt install python-matplotlib
4. Drawnow thường được sử dụng để xem kết quả sau mỗi lần lặp khi chúng ta sử dụng "imshow" trong MATLAB. Để cài đặt nó, hãy sử dụng lệnh
sudo pip cài đặt drawnow
Bước 5: Python Scipt
Bước tiếp theo là viết một tập lệnh python mà bạn có thể sử dụng bất kỳ trình soạn thảo nào để viết nó.
1. Vẽ dữ liệu trong một biểu đồ
import serial # import Serial Library
import numpy # Import numpy
nhập matplotlib.pyplot dưới dạng plt #import matplotlib thư viện
từ nhập drawnow *
tempC = #Empty arrayhumidity =
arduino = serial. Serial ("/ dev / ttyACM0", 115200)
plt.ion () # chế độ tương tác để vẽ số liệu trực tiếp = 0
def makeFig (): # Tạo một hàm tạo âm mưu mong muốn của chúng ta
plt.ylim (20, 30) # Đặt y giá trị tối thiểu và tối đa
plt.title ('Dữ liệu DHT11 Thời gian thực') # Đánh dấu tiêu đề
plt.grid (True) # Bật lưới
plt.ylabel ('Temp C') #Set ylabel
plt.plot (tempC, 'b ^ -', label = 'Độ C') #plot nhiệt độ
plt.legend (loc = 'phía trên bên phải') # vẽ chú giải
plt2 = plt.twinx () # Tạo trục y thứ hai
plt.ylim (50, 70) # Đặt giới hạn của trục y thứ hai
plt2.plot (độ ẩm, 'g * -', label = 'Độ ẩm') #plot dữ liệu áp suất
plt2.set_ylabel ('Độ ẩm') # nhãn trục y thứ hai
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = 'phía trên bên trái')
while True: # Vòng lặp while lặp lại mãi mãi
while (arduino.inWaiting () == 0): # Chờ ở đây cho đến khi có dữ liệu
vượt qua # không làm gì cả
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') # Ghép nó vào một mảng
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (tạm thời)
độ ẩm.append (hum)
drawnow (makeFig)
plt.pause (.000001)
count = count + 1 if (count> 20): # chỉ lấy 20 dữ liệu cuối cùng nếu dữ liệu nhiều hơn, nó sẽ bật ra đầu tiên
tempC.pop (0)
độ ẩm.pop (0)
2. Lập biểu đồ độ ẩm và nhiệt độ riêng biệt
import serial # import Serial Library
import numpy # Import numpy
nhập matplotlib.pyplot dưới dạng plt #import matplotlib thư viện
từ nhập drawnow *
tempC = # Mảng #Empty
độ ẩm =
arduino = serial. Serial ("/ dev / ttyACM0", 115200) Cổng #Serial mà arduino được kết nối và Baudrate
plt.ion () # Nói với matplotlib rằng bạn muốn chế độ tương tác để vẽ dữ liệu trực tiếp
def CreatePlot (): # Tạo một hàm tạo ra âm mưu mong muốn của chúng ta
plt.subplot (2, 1, 1) # Chiều cao, Chiều rộng, Biểu đồ đầu tiên
plt.ylim (22, 34) # Đặt y giá trị tối thiểu và tối đa
plt.title ('Dữ liệu DHT11 Thời gian thực') # Đánh dấu tiêu đề
plt.grid (True) # Bật lưới
plt.ylabel ('Temp C') #Set ylabels
plt.plot (tempC, 'b ^ -', label = 'Độ C') #plot nhiệt độ
plt.legend (loc = 'upper center') # vẽ chú giải
plt.subplot (2, 1, 2) # Chiều cao, Chiều rộng, Biểu đồ thứ hai
plt.grid (Đúng)
plt.ylim (45, 70) # Đặt giới hạn của trục y thứ hai
plt.plot (độ ẩm, 'g * -', label = 'Độ ẩm (g / m ^ 3)') #plot dữ liệu độ ẩm
plt.ylabel ('Độ ẩm (g / m ^ 3)') # nhãn trục y thứ hai
plt.ticklabel_format (useOffset = False) # để dừng trục y tự động chỉnh tỷ lệ
plt.legend (loc = 'phía trên trung tâm')
while True: # Vòng lặp while lặp lại mãi mãi
while (arduino.inWaiting () == 0): # Chờ ở đây cho đến khi có dữ liệu truyền # không làm gì cả
arduinoString = arduino.readline () # đọc dữ liệu từ cổng nối tiếp
dataArray = arduinoString.split (',') # Ghép nó vào một mảng
temp = float (dataArray [0]) #Chuyển đổi phần tử đầu tiên thành số thực và đưa vào tạm thời
hum = float (dataArray [1]) #Chuyển phần tử thứ hai thành số thực và đặt vào hum
tempC.append (tạm thời) # Xây dựng mảng tempC của chúng tôi bằng cách bổ sung đọc tạm thời
Moisturiser.append (hum) # Xây dựng mảng độ ẩm của chúng tôi bằng cách bổ sung đọc hum
drawnow (CreatePlot)
plt.pause (.000001)
count = count + 1
if (count> 20): # chỉ lấy 20 dữ liệu cuối cùng nếu dữ liệu nhiều hơn, nó sẽ bật ra đầu tiên
tempC.pop (0) # phần tử đầu tiên bật ra
độ ẩm.pop (0)
Bước 6: Sơ đồ mạch
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> HẾT