İçindekiler:

Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin: 7 Adım
Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin: 7 Adım

Video: Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin: 7 Adım

Video: Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin: 7 Adım
Video: Blynk DHT11 Sıcaklık ve Nem Ölçümü (NodeMCU) 2024, Kasım
Anonim
Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin
Raspberry Pi ve Arduino UNO Kullanarak DHT11 Verilerini Çizin

Bu talimat, Arduino Uno ve Raspberry Pi kullanarak sıcaklık sensörü DHT11 verilerini nasıl çizdiğimi açıklıyor. Bu sıcaklık sensöründe Arduino Uno ile Arduino Uno seri olarak Raspberry Pi ile bağlanmıştır. Raspberry Pi Side'de grafikleri çizmek için matplotlib, numpy ve drawow kütüphaneleri kullanılmaktadır.

Adım 1: Proje İçin Gereken Şeyler

Proje İçin Gerekenler
Proje İçin Gerekenler
Proje İçin Gerekenler
Proje İçin Gerekenler
Proje İçin Gerekenler
Proje İçin Gerekenler

1. Ahududu Pi

2. Arduino Uno

3. DHT11 Sıcaklık Sensörü

4. Atlama Telleri

5. Breadboard

Adım 2: Arduino IDE'yi Raspberry Pi'ye İndirin ve Kurun

Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin
Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin
Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin
Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin
Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin
Arduino IDE'yi Raspberry Pi'ye indirin ve yükleyin

Not: - Arduino UNO'ya çizim yüklemek için Windows, Linux veya Mac'in Arduino IDE'sini kullanabilirsiniz.

İlk adım, Raspberry Pi'de bu açık tarayıcı için Arduino IDE'yi kurmak ve aşağıda verilen bağlantıyı açmaktır.

Arduino Önceki IDE

Ardından Linux ARM sürümünü indirin ve komutu kullanarak çıkarın

tar -xf dosya adı

Çıkardıktan sonra yeni bir dizin göreceksiniz. Burada arduino-1.8.2 IDE kullanıyorum. Ardından komutu kullanarak dizine gidin.

cd arduino-1.8.1

Arduino IDE'yi çalıştırmak için arduino-1.8.2 dizininde bu komutu kullanın.

./arduino

Kitaplıklar nasıl kullanılır?

Arduino'ya herhangi bir kitaplık kurmak için, kitaplığı indirip arduino 1.8.2 ==> kitaplıklar klasörüne yapıştırmanız yeterlidir.

NOT:- Ex (DHT-sensörü) için kütüphane klasöründe (-) olmadığından emin olun. (-) varsa yeniden adlandırın.

bu öğretilebilir dosyada iki kitaplık kullanacağız, DHT_Sensor ve Adafruit_Sensor

Adım 3: Arduino için Kod

Arduino için kod
Arduino için kod

Şimdi python ve Arduino'yu birlikte konuşalım. Öncelikle Arduino'nun seri port üzerinden veri göndermesini sağlamak için basit bir programa ihtiyacımız var. Aşağıdaki program Arduino'yu sayacak ve verileri seri porta gönderecek basit bir programdır.

Arduino Kodu

#include "DHT.h" kayan tempC; // C float tempF'de değişken veya tutma sıcaklığı; // F şamandıra neminde sıcaklığı tutmak için değişken; // Basınç okumasını tutmak için değişken

#define DHTPIN 7 // hangi dijital pine bağlıyız

#define DHTTYPE DHT11 // DHT 11

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

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

// DHT sensörünü başlat.

DHT dht(DHTPIN, DHTTYPE);

geçersiz kurulum(){Serial.begin(115200); // seri monitörü aç

dht.begin(); // dht'yi başlat }

geçersiz döngü() {tempC = dht.readTemperature(); // Değişkenlerinizi bildirdiğinizden emin olun

nem = dht.readHumidity(); // Nem Oku

Seri.print(tempC);

Seri.print(", ");

Seri.print(nem);

Seri.print("\n"); // yeni hat gecikmesi için(2000); // Okumalar arasında duraklama. }

Sketch derlendikten sonra board ve port seçin ve yükleyin.

Adım 4: Raspberry Pi'yi Kurun

Raspberry Pi'yi kurun
Raspberry Pi'yi kurun

Kod yüklendikten sonra, Arduino Uno'dan seri olarak gelen verilerin grafiğini çizebilmemiz için bazı kütüphaneler kurun.

1. PySerial, çeşitli farklı aygıtlar üzerinden seri bağlantı desteği sağlayan bir kitaplıktır. Yüklemek için komutunu kullanın.

Sudo apt-get install python-serial

2. Numpy, çok boyutlu bir dizi nesnesini ve üzerinde çalışan ilişkili hızlı matematik işlevlerini tanımlayan bir pakettir. Ayrıca lineer cebir ve FFT (Hızlı Fourier Dönüşümü) ve karmaşık rastgele sayı üretimi için basit rutinler sağlar. Apt paketi veya pip kullanarak birçok şekilde kurabilirsiniz. Burada pip kullanarak kurulum yapıyorum, bunun için önce pip kurmamız gerekiyor

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

sudo pip kurulumu numpy

ya da apt paketini kullanmak istiyorsanız

sudo apt yükleme python-numpy

3. Matplotlib, çizimleri Tkinter, wxPython, Qt veya GTK+ gibi genel amaçlı GUI araç takımlarını kullanan uygulamalara yerleştirmek için nesne yönelimli bir API sağlayan bir 2B çizim kitaplığıdır. Yüklemek için komutu kullanın

sudo pip kurulum matplotlib

veya

sudo apt yükleme python-matplotlib

4. Drawnow, MATLAB'da "imshow" kullandığımız için genellikle her yinelemeden sonra sonuçları görmek için kullanılır. Yüklemek için komutu kullanın

sudo pip kurulumu çizildi

Adım 5: Python Komut Dosyası

Python Komut Dosyası
Python Komut Dosyası
Python Komut Dosyası
Python Komut Dosyası

Sonraki adım, yazmak için herhangi bir düzenleyiciyi kullanabileceğiniz bir python betiği yazmaktır.

1. Verileri tek bir grafikte çizin

seriyi içe aktar # Seri Kitaplığını içe aktar

numpy'yi içe aktar # numpy'yi içe aktar

matplotlib.pyplot'u plt olarak içe aktar #import matplotlib library

Drawow import'dan *

tempC = #Boş dizi nem =

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

plt.ion() # canlı veri sayısını çizmek için etkileşimli mod = 0

def makeFig(): #İstediğimiz grafiği oluşturan bir işlev oluşturun

plt.ylim(20, 30) #y min ve max değerlerini ayarla

plt.title('Gerçek Zamanlı DHT11 Verisi') #Başlığı çiz

plt.grid(True) #Izgarayı aç

plt.ylabel('Temp C') #ylabel'i ayarla

plt.plot(tempC, 'b^-', label='Derece C') #sıcaklığı çiz

plt.legend(loc='sağ üst') #efsaneyi çiz

plt2=plt.twinx() #İkinci bir y ekseni oluştur

plt.ylim(50, 70) #İkinci y ekseninin limitlerini ayarla

plt2.plot(nem, 'g*-', etiket='Nem') #plot basınç verileri

plt2.set_ylabel('Nem') #label ikinci y ekseni

plt2.ticklabel_format(useOffset=Yanlış)

plt2.legend(loc='sol üst')

while True: # Sonsuza kadar dönen while döngüsü

while (arduino.inWaiting()==0): #Veri gelene kadar burada bekle

geçmek #hiçbir şey yapma

arduinoString = arduino.readline()

dataArray = arduinoString.split(', ') #Bir diziye böl

temp = kayan nokta(dataArray[0])

hum = kayan nokta(dataArray[1])

tempC.append(temp)

nem.append(hum)

çizilmiş(makeFig)

plt.duraklat(.000001)

count=count+1 if(count>20): #yalnızca son 20 veriyi al, eğer veri daha fazlaysa ilk önce açılır

tempC.pop(0)

nem.pop(0)

2. Nem ve sıcaklığı ayrı ayrı çizmek için

seriyi içe aktar # Seri Kitaplığını içe aktar

numpy'yi içe aktar # numpy'yi içe aktar

matplotlib.pyplot'u plt olarak içe aktar #import matplotlib library

Drawow import'dan *

tempC = #Boş dizi

nem =

arduino = serial. Serial("/dev/ttyACM0", 115200) #Arduino'nun bağlı olduğu seri port ve Baudrate

plt.ion() #matplotlib'e canlı verileri çizmek için etkileşimli mod istediğinizi söyleyin

def CreatePlot(): #İstediğimiz grafiği oluşturan bir işlev oluşturun

plt.subplot(2, 1, 1) #Yükseklik, Genişlik, İlk arsa

plt.ylim(22, 34) #y min ve max değerlerini ayarla

plt.title('Gerçek Zamanlı DHT11 Verisi') #Başlığı çiz

plt.grid(True) #Izgarayı aç

plt.ylabel('Temp C') #Yılbelleri ayarla

plt.plot(tempC, 'b^-', label='Derece C') #sıcaklığı çiz

plt.legend(loc='üst merkez') #efsaneyi çiz

plt.subplot(2, 1, 2) # Yükseklik, Genişlik, İkinci arsa

plt.grid(Doğru)

plt.ylim(45, 70) #İkinci y ekseninin limitlerini ayarla

plt.plot(nem, 'g*-', label='Nem (g/m^3)') #plot nem verisi

plt.ylabel('Nem (g/m^3)') #label ikinci y ekseni

plt.ticklabel_format(useOffset=False) #y eksenini otomatik ölçeklendirmeyi durdurmak için

plt.legend(loc='üst merkez')

while True: # Sonsuza kadar dönen while döngüsü

while (arduino.inWaiting()==0): #Veri geçişi gelene kadar burada bekle #hiçbir şey yapma

arduinoString = arduino.readline() #seri porttan verileri oku

dataArray = arduinoString.split(', ') #Bir diziye böl

temp = float(dataArray[0]) #İlk öğeyi kayan sayıya dönüştür ve temp olarak koy

hum = float(dataArray[1]) #İkinci öğeyi kayan sayıya dönüştür ve uğultuya koy

tempC.append(temp) #Geçici okuma ekleyerek tempC dizimizi oluşturun

nem.append(hum) #hum okumasını ekleyerek nem dizimizi oluşturma

drawow(CreatePlot)

plt.duraklat(.000001)

say=say+1

if(count>20): #yalnızca son 20 veriyi al, eğer veri daha fazlaysa ilk önce açılır

tempC.pop(0) # ilk öğeyi çıkar

nem.pop(0)

Adım 6: Devre Şeması

Devre şeması
Devre şeması
Devre şeması
Devre şeması
Devre şeması
Devre şeması

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> ÇIKIŞ

Önerilen: