แปลงข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO: 7 ขั้นตอน
แปลงข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO: 7 ขั้นตอน

วีดีโอ: แปลงข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO: 7 ขั้นตอน

วีดีโอ: แปลงข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO: 7 ขั้นตอน
วีดีโอ: [Anto] สอนการใช้ dht11 ในการวัดอุณหภูมิ ความชื้น ส่งค่าเข้า Anto 2025, มกราคม
Anonim
พล็อตข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO
พล็อตข้อมูล DHT11 โดยใช้ Raspberry Pi และ Arduino UNO

คำแนะนำนี้อธิบายวิธีที่ฉันพล็อตข้อมูลเซ็นเซอร์อุณหภูมิ DHT11 โดยใช้ Arduino Uno และ Raspberry Pi ในเซ็นเซอร์อุณหภูมินี้เชื่อมต่อกับ Arduino Uno และ Arduino Uno เชื่อมต่อแบบอนุกรมกับ Raspberry Pi ที่ Raspberry Pi Side ไลบรารี matplotlib, numpy และ drawow ใช้เพื่อพล็อตกราฟ

ขั้นตอนที่ 1: สิ่งที่จำเป็นสำหรับโครงการ

สิ่งที่จำเป็นสำหรับโครงการ
สิ่งที่จำเป็นสำหรับโครงการ
สิ่งที่จำเป็นสำหรับโครงการ
สิ่งที่จำเป็นสำหรับโครงการ
สิ่งที่จำเป็นสำหรับโครงการ
สิ่งที่จำเป็นสำหรับโครงการ

1. ราสเบอร์รี่ปี่

2. Arduino Uno

3. DHT11 เซ็นเซอร์อุณหภูมิ

4. สายจัมเปอร์

5. เขียงหั่นขนม

ขั้นตอนที่ 2: ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi

ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi
ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi
ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi
ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi
ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi
ดาวน์โหลดและติดตั้ง Arduino IDE ใน Raspberry Pi

หมายเหตุ:- คุณสามารถใช้ Arduino IDE ของ windows, Linux หรือ Mac เพื่ออัปโหลดภาพร่างใน Arduino UNO

ขั้นตอนแรกคือการติดตั้ง Arduino IDE สำหรับเบราว์เซอร์ที่เปิดอยู่ใน Raspberry Pi และเปิดลิงก์ที่ระบุด้านล่าง

Arduino IDE ก่อนหน้า

จากนั้นดาวน์โหลดเวอร์ชัน Linux ARM และแตกไฟล์โดยใช้คำสั่ง

tar -xf ชื่อไฟล์

หลังจากแตกไฟล์แล้ว คุณจะเห็นไดเร็กทอรีใหม่ ที่นี่ฉันใช้ arduino-1.8.2 IDE จากนั้นไปที่ไดเร็กทอรีโดยใช้คำสั่ง

cd arduino-1.8.1

ในการรัน Arduino IDE ให้ใช้คำสั่งนี้ในไดเรกทอรี arduino-1.8.2

./arduino

วิธีใช้ห้องสมุด

ในการติดตั้งไลบรารีใด ๆ ใน Arduino เพียงดาวน์โหลดไลบรารีและวางในโฟลเดอร์ arduino 1.8.2 ==> ไลบรารี

หมายเหตุ:- ตรวจสอบให้แน่ใจว่าไม่มี (-) ในโฟลเดอร์ไลบรารีเช่น (เซ็นเซอร์ DHT) หากมี (-) ให้เปลี่ยนชื่อ

เราจะใช้สองไลบรารีในคำสั่งนี้ DHT_Sensor และ Adafruit_Sensor

ขั้นตอนที่ 3: รหัสสำหรับ Arduino

รหัสสำหรับ Arduino
รหัสสำหรับ Arduino

ตอนนี้ให้ python และ Arduino คุยกัน ประการแรกเราต้องการโปรแกรมอย่างง่ายเพื่อให้ Arduino ส่งข้อมูลผ่านพอร์ตอนุกรม โปรแกรมต่อไปนี้เป็นโปรแกรมอย่างง่ายที่จะนับ Arduino และส่งข้อมูลไปยังพอร์ตอนุกรม

รหัส Arduino

#include "DHT.h" float tempC; // ตัวแปรหรืออุณหภูมิค้างใน C float tempF; // ตัวแปรสำหรับเก็บอุณหภูมิในความชื้นลอย F; //ตัวแปรสำหรับอ่านค่าความดัน

#define DHTPIN 7 // พินดิจิทัลที่เราเชื่อมต่ออยู่

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// เริ่มต้นเซ็นเซอร์ DHT

DHT dht (DHTPIN, DHTTYPE);

ถือเป็นโมฆะการตั้งค่า(){Serial.begin(115200); //เปิดเครื่องมอนิเตอร์แบบอนุกรม

dht.begin(); // เริ่มต้น dht }

วงเป็นโมฆะ () {tempC = dht.readTemperature(); // อย่าลืมประกาศตัวแปรของคุณ

ความชื้น = dht.readHumidity(); // อ่านความชื้น

Serial.print(tempC);

Serial.print(", ");

Serial.print(ความชื้น);

Serial.print("\n"); // สำหรับ linedelay ใหม่ (2000); // หยุดระหว่างการอ่าน }

เมื่อร่างแบบร่างแล้ว ให้เลือกบอร์ดและพอร์ตแล้วอัปโหลด

ขั้นตอนที่ 4: ตั้งค่า Raspberry Pi

ตั้งค่า Raspberry Pi
ตั้งค่า Raspberry Pi

เมื่ออัปโหลดโค้ดแล้ว ให้ติดตั้งไลบรารี่บางส่วนเพื่อให้เราสามารถพล็อตกราฟของข้อมูลที่มาจาก Arduino Uno ตามลำดับ

1. PySerial เป็นไลบรารีที่ให้การสนับสนุนการเชื่อมต่อแบบอนุกรมผ่านอุปกรณ์ต่างๆ ในการติดตั้งให้ใช้คำสั่ง

Sudo apt-get ติดตั้ง python-serial

2. Numpy คือแพ็คเกจที่กำหนดออบเจ็กต์อาร์เรย์หลายมิติและฟังก์ชันทางคณิตศาสตร์ที่รวดเร็วที่เกี่ยวข้องซึ่งทำงานบนวัตถุนั้น นอกจากนี้ยังมีกิจวัตรง่ายๆ สำหรับพีชคณิตเชิงเส้นและ FFT (การแปลงฟูเรียร์แบบเร็ว) และการสร้างตัวเลขสุ่มที่ซับซ้อน คุณสามารถติดตั้งได้หลายวิธีโดยใช้ apt package หรือ pip ที่นี่ฉันกำลังติดตั้งโดยใช้ pip สำหรับสิ่งนั้นก่อนอื่นเราต้องติดตั้ง pip

sudo apt-get ติดตั้ง python-pip python-dev build-essential

sudo pip ติดตั้ง numpy

หรือถ้าคุณต้องการใช้ apt package

sudo apt ติดตั้ง python-numpy

3. Matplotlib เป็นไลบรารีการพล็อต 2D ซึ่งจัดเตรียม API เชิงวัตถุสำหรับการฝังพล็อตลงในแอปพลิเคชันโดยใช้ชุดเครื่องมือ GUI ทั่วไป เช่น Tkinter, wxPython, Qt หรือ GTK+ ในการติดตั้งให้ใช้คำสั่ง

sudo pip ติดตั้ง matplotlib

หรือ

sudo apt ติดตั้ง python-matplotlib

4. Drawnow มักใช้เพื่อดูผลลัพธ์หลังจากการวนซ้ำแต่ละครั้ง เนื่องจากเราใช้ "imshow" ใน MATLAB ในการติดตั้งให้ใช้คำสั่ง

sudo pip ติดตั้ง drawow

ขั้นตอนที่ 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

ขั้นตอนต่อไปคือการเขียนสคริปต์หลามเพื่อให้คุณสามารถใช้โปรแกรมแก้ไขใดก็ได้ในการเขียน

1. พล็อตข้อมูลในกราฟเดียว

นำเข้า Serial # นำเข้า Serial Library

นำเข้า numpy # นำเข้า numpy

นำเข้า matplotlib.pyplot เป็น plt #import matplotlib library

จาก drawow นำเข้า *

tempC = #ว่างเปล่า arrayhumidity =

arduino = serial. Serial("/dev/ttyACM0", 115200)

plt.ion () # โหมดโต้ตอบเพื่อพล็อต datacount สด = 0

def makeFig(): #สร้างฟังก์ชันที่ทำให้พล็อตที่เราต้องการ

plt.ylim(20, 30) #Set y ค่าต่ำสุดและสูงสุด

plt.title('Real Time DHT11 Data') #พล็อตชื่อเรื่อง

plt.grid(จริง) #เปิดตาราง

plt.ylabel('Temp C') #Set ylabel

plt.plot(tempC, 'b^-', label='Degree C') #plot อุณหภูมิ

plt.legend(loc='upper right') #วางแผนตำนาน

plt2=plt.twinx() #สร้างแกน y ที่สอง

plt.ylim(50, 70) #กำหนดขีดจำกัดของแกน y ที่สอง

plt2.plot(ความชื้น, 'g*-', label='Humidity') #plot ข้อมูลความดัน

plt2.set_ylabel('ความชื้น') #label แกน y ที่สอง

plt2.ticklabel_format(useOffset=False)

plt2.legend(loc='บนซ้าย')

while True: # while loop ที่วนซ้ำตลอดไป

while (arduino.inWaiting()==0): #รอที่นี่จนกว่าจะมีข้อมูล

ผ่าน #ไม่ทำอะไรเลย

arduinoString = arduino.readline()

dataArray = arduinoString.split(', ') #แยกเป็นอาร์เรย์

อุณหภูมิ = ลอย (dataArray[0])

ฮัม = ลอย (dataArray[1])

tempC.append(ชั่วคราว)

ความชื้นต่อท้าย (ฮัม)

drawow(makeFig)

plt.หยุดชั่วคราว(.000001)

count=count+1 if(count>20): #ใช้เฉพาะ 20 ข้อมูลสุดท้ายหากข้อมูลมากกว่านั้นจะปรากฏขึ้นก่อน

tempC.ป๊อป(0)

ความชื้นป๊อป(0)

2. เพื่อพล็อตความชื้นและอุณหภูมิแยกจากกัน

นำเข้า Serial # นำเข้า Serial Library

นำเข้า numpy # นำเข้า numpy

นำเข้า matplotlib.pyplot เป็น plt #import matplotlib library

จาก drawow นำเข้า *

tempC = #อาร์เรย์ว่างเปล่า

ความชื้น =

arduino = serial. Serial("/dev/ttyACM0", 115200) #พอร์ตอนุกรมที่ Arduino เชื่อมต่อและ Baudrate

plt.ion() #บอก matplotlib ว่าคุณต้องการโหมดโต้ตอบเพื่อพล็อตข้อมูลสด

def CreatePlot(): #สร้างฟังก์ชันที่ทำให้พล็อตที่ต้องการ

plt.subplot(2, 1, 1) #ความสูง ความกว้าง พล็อตแรก

plt.ylim(22, 34) #Set y ค่าต่ำสุดและสูงสุด

plt.title('Real Time DHT11 Data') #พล็อตชื่อเรื่อง

plt.grid(จริง) #เปิดตาราง

plt.ylabel('Temp C') #Set ylabels

plt.plot(tempC, 'b^-', label='Degree C') #plot อุณหภูมิ

plt.legend(loc='upper center') #วางแผนตำนาน

plt.subplot(2, 1, 2) # Height, Width, Second plot

plt.grid(จริง)

plt.ylim(45, 70) #ตั้งค่าขีดจำกัดของแกน y ที่สอง

plt.plot(humidity, 'g*-', label='Humidity (g/m^3)') #plot ข้อมูลความชื้น

plt.ylabel('ความชื้น (g/m^3)') #label แกน y ที่สอง

plt.ticklabel_format(useOffset=False) #เพื่อหยุด autoscale แกน y

plt.legend(loc='upper center')

while True: # while loop ที่วนซ้ำตลอดไป

while (arduino.inWaiting()==0): #รอที่นี่จนกว่าจะมีการส่งผ่านข้อมูล #ไม่ทำอะไรเลย

arduinoString = arduino.readline() #อ่านข้อมูลจากพอร์ตอนุกรม

dataArray = arduinoString.split(', ') #แยกเป็นอาร์เรย์

temp = float(dataArray[0]) #Convert องค์ประกอบแรกเป็นตัวเลขลอยตัวและใส่ temp

hum = float(dataArray[1]) #แปลงองค์ประกอบที่สองเป็นตัวเลขลอยตัวและใส่ hum

tempC.append(temp) #สร้างอาร์เรย์ tempC ของเราโดยต่อท้ายการอ่าน temp

moisture.append(hum) #สร้างอาร์เรย์ความชื้นของเราโดยผนวก hum reading

drawow(สร้างพล็อต)

plt.หยุดชั่วคราว(.000001)

นับ=นับ+1

if(count>20): #ใช้เฉพาะ 20 ข้อมูลสุดท้ายหากข้อมูลมากกว่านั้นจะปรากฏขึ้นก่อน

tempC.pop(0) # เด้งออกองค์ประกอบแรก

ความชื้นป๊อป(0)

ขั้นตอนที่ 6: แผนภาพวงจร

แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> ออก