Isi kandungan:

Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO: 7 Langkah
Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO: 7 Langkah

Video: Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO: 7 Langkah

Video: Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO: 7 Langkah
Video: TUTORIAL IOT - Menghubungkan Raspberry dengan DHT11 Versi Lengkap 2024, November
Anonim
Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO
Plot Data DHT11 Menggunakan Raspberry Pi dan Arduino UNO

Petunjuk ini menerangkan bagaimana saya memplot data suhu DHT11 sensor menggunakan Arduino Uno dan Raspberry Pi. Pada suhu ini sensor dihubungkan dengan Arduino Uno dan Arduino Uno dihubungkan secara bersiri dengan Raspberry Pi. Di Raspberry Pi Side, perpustakaan matplotlib, numpy dan drawow digunakan untuk memplot grafik.

Langkah 1: Perkara yang Diperlukan untuk Projek

Perkara yang Diperlukan untuk Projek
Perkara yang Diperlukan untuk Projek
Perkara yang Diperlukan untuk Projek
Perkara yang Diperlukan untuk Projek
Perkara yang Diperlukan untuk Projek
Perkara yang Diperlukan untuk Projek

1. Raspberry Pi

2. Arduino Uno

3. Sensor Suhu DHT11

4. Wayar Pelompat

5. Papan roti

Langkah 2: Muat turun dan Pasang Arduino IDE di Raspberry Pi

Muat turun dan Pasang Arduino IDE di Raspberry Pi
Muat turun dan Pasang Arduino IDE di Raspberry Pi
Muat turun dan Pasang Arduino IDE di Raspberry Pi
Muat turun dan Pasang Arduino IDE di Raspberry Pi
Muat turun dan Pasang Arduino IDE di Raspberry Pi
Muat turun dan Pasang Arduino IDE di Raspberry Pi

Catatan: - Anda dapat menggunakan Arduino IDE windows, Linux atau Mac untuk memuat naik sketsa di Arduino UNO.

Langkah pertama ialah memasang Arduino IDE untuk penyemak imbas terbuka di Raspberry Pi dan membuka pautan yang diberikan di bawah

Arduino IDE Sebelumnya

Kemudian muat turun versi Linux ARM dan ekstrak menggunakan arahan

nama fail tar -xf

Selepas mengekstrak anda akan melihat direktori baru. Di sini saya menggunakan arduino-1.8.2 IDE. Kemudian pergi ke direktori dengan menggunakan perintah.

cd arduino-1.8.1

Untuk menjalankan Arduino IDE, gunakan perintah ini di direktori arduino-1.8.2

./arduino

Cara menggunakan perpustakaan

Untuk memasang perpustakaan di Arduino, cukup muat turun perpustakaan dan tampal di folder arduino 1.8.2 ==> perpustakaan.

CATATAN: - Pastikan tidak ada (-) dalam folder perpustakaan untuk bekas (sensor DHT). Sekiranya ada (-), namakan semula.

kami akan menggunakan dua perpustakaan dalam arahan ini, DHT_Sensor dan Adafruit_Sensor

Langkah 3: Kod untuk Arduino

Kod untuk Arduino
Kod untuk Arduino

Sekarang, mari kita python dan Arduino bercakap bersama. Pertama, kita memerlukan program sederhana untuk mendapatkan data penghantaran Arduino melalui port bersiri. Program berikut adalah program sederhana yang akan mempunyai jumlah Arduino dan menghantar data ke port bersiri.

Kod Arduino

#masuk "DHT.h" terapung tempC; // Pemboleh ubah atau menahan temp dalam C float tempF; // Pemboleh ubah untuk menahan suhu dalam kelembapan float F; // Pemboleh ubah untuk menahan tekanan membaca

#tentukan DHTPIN 7 // pin digital apa yang kita sambungkan

#tentukan DHTTYPE DHT11 // DHT 11

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

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

// Memulakan sensor DHT.

DHT dht (DHTPIN, DHTTYPE);

persediaan tidak sah () {Serial.begin (115200); // hidupkan monitor bersiri

dht.begin (); // mulakan dht}

gelung void () {tempC = dht.readTemperature (); // Pastikan anda menyatakan pemboleh ubah anda

kelembapan = dht.readHumidity (); // Baca Kelembapan

Serial.print (tempC);

Cetakan bersiri (",");

Cetakan bersiri (kelembapan);

Cetakan bersiri ("\ n"); // untuk linedelay baru (2000); // Jeda antara bacaan. }

Setelah lakaran disusun, pilih papan dan port dan muat naik.

Langkah 4: Sediakan Raspberry Pi

Sediakan Raspberry Pi
Sediakan Raspberry Pi

Setelah kod dimuat, Pasang beberapa perpustakaan sehingga kami dapat memplot grafik data yang datang secara bersiri dari Arduino Uno.

1. PySerial adalah perpustakaan yang menyediakan sokongan untuk sambungan bersiri melalui pelbagai peranti yang berbeza. Untuk memasangnya gunakan arahan.

Sudo apt-get pasang python-serial

2. Numpy adalah pakej yang mentakrifkan objek pelbagai dimensi dan fungsi matematik pantas yang berkaitan yang beroperasi di atasnya. Ia juga menyediakan rutin sederhana untuk aljabar linear dan FFT (Fast Fourier Transform) dan penjanaan nombor rawak yang canggih. Anda boleh memasangnya dengan banyak cara sama ada menggunakan pakej apt atau pip. Di sini saya memasang menggunakan pip kerana pertama kita harus memasang pip

sudo apt-get install python-pip python-dev build-essential

sudo pip pasang numpy

atau jika anda mahu menggunakan pakej yang sesuai

sudo apt pasang python-numpy

3. Matplotlib adalah perpustakaan plot 2D yang menyediakan API berorientasi objek untuk menyisipkan plot ke dalam aplikasi menggunakan alat alat GUI tujuan umum seperti Tkinter, wxPython, Qt, atau GTK +. Untuk memasangnya gunakan arahan

sudo pip pasang matplotlib

atau

sudo apt pasang python-matplotlib

4. Drawnow umumnya digunakan untuk melihat hasilnya setelah setiap lelaran kerana kita menggunakan "imshow" dalam MATLAB. Untuk memasangnya gunakan arahan

sudo pip install drawow

Langkah 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Langkah seterusnya adalah menulis skrip python untuk itu anda boleh menggunakan mana-mana editor untuk menulisnya.

1. Petak data dalam satu graf

import serial # import Serial Library

import numpy # Import numpy

import matplotlib.pyplot sebagai perpustakaan matplotlib plt #import

dari import drawow *

tempC = # Kekosongan array kosong =

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

plt.ion () # mod interaktif untuk memplot jumlah data langsung = 0

def makeFig (): #Buat fungsi yang membuat plot yang kita inginkan

plt.ylim (20, 30) # Tetapkan nilai min dan maksimum

plt.title ('Data Masa Nyata DHT11') #Menulis tajuk

plt.grid (Betul) # Hidupkan grid

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

plt.plot (tempC, 'b ^ -', label = 'Degree C') #plot suhu

plt.legend (loc = 'kanan atas') #plot legenda

plt2 = plt.twinx () #Buat paksi y kedua

plt.ylim (50, 70) # Tetapkan had paksi y kedua

plt2.plot (kelembapan, 'g * -', label = 'Kelembapan') #plot data tekanan

plt2.set_ylabel ('Kelembapan') #label paksi y kedua

plt2.ticklabel_format (useOffset = Salah)

plt2.legend (loc = 'kiri atas')

while True: # Sementara gelung yang bergelung selamanya

while (arduino.inWaiting () == 0): #Tunggu di sini sehingga ada data

lulus #tak apa-apa

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Split ke dalam array

temp = float (dataArray [0])

hum = terapung (dataArray [1])

tempC.append (temp)

kelembapan. tambah (hum)

drawow (makeFig)

plt jeda (.000001)

hitung = hitung + 1 jika (kiraan> 20): #hanya mengambil 20 data terakhir jika data lebih banyak, ia akan muncul terlebih dahulu

tempC.pop (0)

kelembapan.pop (0)

2. Untuk merancang kelembapan dan suhu secara berasingan

import serial # import Serial Library

import numpy # Import numpy

import matplotlib.pyplot sebagai perpustakaan matplotlib plt #import

dari drawow import *

tempC = #E array kosong

kelembapan =

arduino = serial. Serial ("/ dev / ttyACM0", 115200) # Port udara yang menghubungkan arduino dan Baudrate

plt.ion () #Beritahu matplotlib anda mahukan mod interaktif untuk memplot data langsung

def CreatePlot (): #Buat fungsi yang membuat plot yang kita inginkan

plt.subplot (2, 1, 1) # Tinggi, Lebar, Petak pertama

plt.ylim (22, 34) # Tetapkan nilai min dan maksimum

plt.title ('Data Masa Nyata DHT11') #Menulis tajuk

plt.grid (Betul) # Hidupkan grid

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

plt.plot (tempC, 'b ^ -', label = 'Degree C') #plot suhu

plt.legend (loc = 'pusat atas') #plot legenda

plt.subplot (2, 1, 2) # Tinggi, Lebar, Petak kedua

plt.grid (Betul)

plt.ylim (45, 70) # Tetapkan had paksi y kedua

plt.plot (kelembapan, 'g * -', label = 'Kelembapan (g / m ^ 3)') # data kelembapan plot

plt.ylabel ('Kelembapan (g / m ^ 3)') #label paksi y kedua

plt.ticklabel_format (useOffset = False) #untuk menghentikan paksi y autoskala

plt.legend (loc = 'pusat atas')

while True: # Sementara gelung yang bergelung selamanya

while (arduino.inWaiting () == 0): #Tunggu di sini sehingga ada data pass #doakan apa-apa

arduinoString = arduino.readline () # membaca data dari port bersiri

dataArray = arduinoString.split (',') #Split ke dalam array

temp = float (dataArray [0]) #Tukar elemen pertama ke nombor terapung dan masukkan temp

hum = float (dataArray [1]) #Tukar elemen kedua ke nombor terapung dan masukkan hum

tempC.append (temp) #Bangunkan array tempC kami dengan menambahkan bacaan temp

humidity.append (hum) #Membina susunan kelembapan kami dengan menambahkan bacaan hum

drawow (BuatPlot)

plt jeda (.000001)

kiraan = hitung + 1

if (hitung> 20): #hanya mengambil 20 data terakhir jika data lebih banyak, ia akan muncul terlebih dahulu

tempC.pop (0) # keluar elemen pertama

kelembapan.pop (0)

Langkah 6: Diagram Litar

Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> KELUAR

Disyorkan: