جدول المحتويات:
فيديو: ارسم بيانات DHT11 باستخدام Raspberry Pi و Arduino UNO: 7 خطوات
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
يشرح هذا التوجيه كيف أرسم بيانات DHT11 لمستشعر درجة الحرارة باستخدام Arduino Uno و Raspberry Pi. في مستشعر درجة الحرارة هذا متصل بـ Arduino Uno و Arduino Uno متصل بشكل متسلسل بـ Raspberry Pi. في Raspberry Pi Side ، تُستخدم مكتبات matplotlib و numpy و drawnow لرسم الرسوم البيانية.
الخطوة 1: الأشياء المطلوبة للمشروع
1. Raspberry Pi
2. اردوينو أونو
3. جهاز استشعار درجة الحرارة DHT11
4. أسلاك العبور
5. اللوح
الخطوة 2: قم بتنزيل Arduino IDE وتثبيته في Raspberry Pi
ملاحظة: - يمكنك استخدام Arduino IDE من windows أو Linux أو Mac لتحميل الرسم التخطيطي في Arduino UNO.
الخطوة الأولى هي تثبيت Arduino IDE لهذا المتصفح المفتوح في Raspberry Pi وفتح الرابط أدناه
اردوينو IDE السابق
ثم قم بتنزيل إصدار Linux ARM واستخرجه باستخدام الأمر
tar -xf اسم الملف
بعد الاستخراج سترى دليل جديد. أنا هنا أستخدم arduino-1.8.2 IDE. ثم انتقل إلى الدليل باستخدام الأمر.
cd اردوينو 1.8.1
لتشغيل Arduino IDE ، استخدم هذا الأمر في دليل arduino-1.8.2
./arduino
كيفية استخدام المكتبات
لتثبيت أي مكتبات في Arduino ، ما عليك سوى تنزيل المكتبة ولصقها في اردوينو 1.8.2 ==> مجلد المكتبات.
ملاحظة: - تأكد من عدم وجود (-) في مجلد المكتبة على سبيل المثال (مستشعر DHT). إذا كان هناك أي (-) ، فقم بإعادة تسميته.
سنستخدم مكتبتين في هذا الدليل ، DHT_Sensor و Adafruit_Sensor
الخطوة 3: كود اردوينو
الآن ، دعنا نتحدث عن Python و Arduino معًا. أولاً ، نحتاج إلى برنامج بسيط للحصول على Arduino يرسل البيانات عبر المنفذ التسلسلي. البرنامج التالي هو برنامج بسيط سيحتوي على عدد Arduino ويرسل البيانات إلى المنفذ التسلسلي.
كود اردوينو
# تضمين "DHT.h" تعويم tempC ؛ // متغير أو عقد درجة الحرارة في درجة حرارة تعويم C ؛ // متغير لعقد درجة الحرارة في الرطوبة العائمة F ؛ // متغير لعقد قراءة الضغط
#define DHTPIN 7 // ما هو الدبوس الرقمي الذي نتصل به
#define DHTTYPE DHT11 // DHT 11
// # حدد DHTTYPE DHT22 // DHT 22 (AM2302) ، AM2321
// # حدد 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") ؛ // لـ new linedelay (2000) ؛ // وقفة بين القراءات. }
بمجرد تجميع الرسم ، حدد اللوحة والمنفذ وقم بتحميله.
الخطوة 4: إعداد Raspberry Pi
بمجرد تحميل الكود ، قم بتثبيت بعض المكتبات حتى نتمكن من رسم رسم بياني للبيانات التي تأتي بشكل تسلسلي من Arduino Uno.
1. PySerial هي مكتبة توفر دعمًا للاتصالات التسلسلية عبر مجموعة متنوعة من الأجهزة المختلفة. لتثبيته استخدم الأمر.
سودو apt-get install python-serial
2. Numpy عبارة عن حزمة تحدد كائن مصفوفة متعدد الأبعاد والوظائف الرياضية السريعة المرتبطة به والتي تعمل عليه. كما يوفر إجراءات بسيطة للجبر الخطي و FFT (تحويل فورييه السريع) وتوليد الأرقام العشوائية المتطورة. يمكنك تثبيته بعدة طرق إما باستخدام apt package أو pip. أنا هنا أقوم بالتثبيت باستخدام pip لذلك علينا أولاً تثبيت pip
sudo apt-get install python-pip python-dev build-ضروريًا
تثبيت sudo pip numpy
أو إذا كنت تريد استخدام حزمة ملائمة
sudo apt تثبيت python-numpy
3. Matplotlib هي مكتبة تخطيط ثنائية الأبعاد توفر واجهة برمجة تطبيقات موجهة للكائنات لتضمين المؤامرات في التطبيقات باستخدام مجموعات أدوات واجهة المستخدم الرسومية للأغراض العامة مثل Tkinter أو wxPython أو Qt أو GTK +. لتثبيته استخدم الأمر
sudo pip تثبيت matplotlib
أو
sudo apt تثبيت python-matplotlib
4. يستخدم Drawnow بشكل عام لرؤية النتائج بعد كل تكرار حيث نستخدم "imshow" في MATLAB. لتثبيته استخدم الأمر
sudo pip تثبيت drawnow
الخطوة 5: بايثون سكيبت
الخطوة التالية هي كتابة نص بيثون بحيث يمكنك استخدام أي محرر لكتابته.
1. بيانات مؤامرة في رسم بياني واحد
استيراد # المسلسل استيراد مكتبة المسلسل
import numpy # Import numpy
استيراد matplotlib.pyplot كمكتبة plt #import matplotlib
من drawnow استيراد *
tempC = #Empty arrayhumidity =
اردوينو = مسلسل تسلسلي ("/ dev / ttyACM0"، 115200)
plt.ion () # الوضع التفاعلي لرسم عدد بيانات مباشر = 0
def makeFig (): # إنشاء دالة تجعل الحبكة التي نريدها
plt.ylim (20، 30) # ضبط قيم y min و max
plt.title ("بيانات DHT11 في الوقت الفعلي") # ضع العنوان
plt.grid (صواب) # قم بتشغيل الشبكة
plt.ylabel ('Temp C') # Set ylabel
plt.plot (tempC، 'b ^ -'، label = 'Degree C') # رسم درجة الحرارة
plt.legend (loc = 'upper right') # رسم وسيلة الإيضاح
plt2 = plt.twinx () # إنشاء محور ص ثاني
plt.ylim (50، 70) # تعيين حدود المحور y الثاني
plt2.plot (الرطوبة ، 'g * -' ، التسمية = 'الرطوبة') # بيانات ضغط المخطط
plt2.set_ylabel ("الرطوبة") # تسمية المحور y الثاني
plt2.ticklabel_format (useOffset = False)
plt2.legend (loc = "أعلى اليسار")
بينما صحيح: # بينما تتكرر الحلقة إلى الأبد
while (arduino.inWaiting () == 0): # انتظر هنا حتى تكون هناك بيانات
تمرير # لا تفعل شيئا
arduinoString = arduino.readline ()
dataArray = arduinoString.split ('،') # اقسمها إلى مصفوفة
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.append (درجة الحرارة)
الرطوبة. إلحاق (همهمة)
drawnow (makeFig)
plt.pause (.000001)
count = count + 1 if (count> 20): # فقط خذ آخر 20 بيانات إذا كانت البيانات أكبر ، فستظهر أولاً
درجة الحرارة (0)
الرطوبة. بوب (0)
2. لرسم الرطوبة ودرجة الحرارة بشكل منفصل
استيراد # المسلسل استيراد مكتبة المسلسل
import numpy # Import numpy
استيراد matplotlib.pyplot كمكتبة plt #import matplotlib
من drawnow استيراد *
tempC = # مصفوفة فارغة
الرطوبة =
arduino = serial. Serial ("/ dev / ttyACM0"، 115200) # المنفذ التسلسلي الذي يتصل به اردوينو و Baudrate
plt.ion () #Tell matplotlib تريد الوضع التفاعلي لرسم البيانات الحية
def CreatePlot (): # إنشاء وظيفة تجعل المؤامرة المطلوبة
plt.subplot (2، 1، 1) #Height، Width، First plot
plt.ylim (22، 34) # ضبط قيم y min و max
plt.title ("بيانات DHT11 في الوقت الفعلي") # ضع العنوان
plt.grid (صواب) # قم بتشغيل الشبكة
plt.ylabel ('Temp C') # مجموعة ylabels
plt.plot (tempC، 'b ^ -'، label = 'Degree C') # رسم درجة الحرارة
plt.legend (loc = 'upper center') # رسم وسيلة الإيضاح
plt.subplot (2 ، 1 ، 2) # الارتفاع ، العرض ، المؤامرة الثانية
plt.grid (صواب)
plt.ylim (45، 70) # تعيين حدود المحور y الثاني
plt.plot (الرطوبة ، 'g * -' ، الملصق = 'الرطوبة (جم / م ^ 3)') # بيانات رطوبة القطعة
plt.ylabel ('الرطوبة (g / m ^ 3)') # تسمية المحور y الثاني
plt.ticklabel_format (useOffset = False) # لإيقاف المحور y المقياس التلقائي
plt.legend (loc = "مركز علوي")
بينما صحيح: # بينما تتكرر الحلقة إلى الأبد
while (arduino.inWaiting () == 0): # انتظر هنا حتى تمر البيانات # لا تفعل شيئًا
arduinoString = arduino.readline () # اقرأ البيانات من المنفذ التسلسلي
dataArray = arduinoString.split ('،') # اقسمها إلى مصفوفة
temp = float (dataArray [0]) # تحويل العنصر الأول إلى رقم عائم ووضعه في درجة الحرارة
hum = float (dataArray [1]) # تحويل العنصر الثاني إلى رقم عائم ووضع همهمة
tempC.append (temp) # قم ببناء مجموعة tempC الخاصة بنا عن طريق إلحاق قراءة temp
humidity. append (hum) # بناء مصفوفة الرطوبة الخاصة بنا عن طريق إلحاق قراءة الرطوبة
drawnow (CreatePlot)
plt.pause (.000001)
العد = العد + 1
إذا (العد> 20): # فقط خذ آخر 20 بيانات إذا كانت البيانات أكثر ، فستظهر أولاً
tempC.pop (0) # انبثق العنصر الأول
الرطوبة. بوب (0)
الخطوة 6: مخطط الدائرة
اردوينو ==> DHT11
3.3 فولت ==> VCC
GND ==> GND
D7 ==> خارج