Spisu treści:

Wykres danych DHT11 za pomocą Raspberry Pi i Arduino UNO: 7 kroków
Wykres danych DHT11 za pomocą Raspberry Pi i Arduino UNO: 7 kroków

Wideo: Wykres danych DHT11 za pomocą Raspberry Pi i Arduino UNO: 7 kroków

Wideo: Wykres danych DHT11 za pomocą Raspberry Pi i Arduino UNO: 7 kroków
Wideo: Kurs Arduino #4: DHT11/DHT22 - Czujnik temperatury i wilgotności + Stacja pogodowa 2024, Listopad
Anonim
Wykreślanie danych DHT11 za pomocą Raspberry Pi i Arduino UNO
Wykreślanie danych DHT11 za pomocą Raspberry Pi i Arduino UNO

Ta instrukcja wyjaśnia, w jaki sposób wykreślam dane czujnika temperatury DHT11 za pomocą Arduino Uno i Raspberry Pi. W tym czujnik temperatury jest połączony z Arduino Uno a Arduino Uno jest połączony szeregowo z Raspberry Pi. W Raspberry Pi Side do tworzenia wykresów używane są biblioteki matplotlib, numpy i drawow.

Krok 1: Rzeczy potrzebne do projektu

Rzeczy potrzebne do projektu
Rzeczy potrzebne do projektu
Rzeczy potrzebne do projektu
Rzeczy potrzebne do projektu
Rzeczy potrzebne do projektu
Rzeczy potrzebne do projektu

1. Raspberry Pi

2. Arduino Uno

3. Czujnik temperatury DHT11

4. Przewody połączeniowe

5. Deska do krojenia chleba

Krok 2: Pobierz i zainstaluj Arduino IDE w Raspberry Pi

Pobierz i zainstaluj Arduino IDE w Raspberry Pi
Pobierz i zainstaluj Arduino IDE w Raspberry Pi
Pobierz i zainstaluj Arduino IDE w Raspberry Pi
Pobierz i zainstaluj Arduino IDE w Raspberry Pi
Pobierz i zainstaluj Arduino IDE w Raspberry Pi
Pobierz i zainstaluj Arduino IDE w Raspberry Pi

Uwaga:- Możesz użyć Arduino IDE systemu Windows, Linux lub Mac, aby przesłać szkic w Arduino UNO.

Pierwszym krokiem jest zainstalowanie Arduino IDE dla tej otwartej przeglądarki w Raspberry Pi i otwarcie linku podanego poniżej

Poprzednie IDE dla Arduino

Następnie pobierz wersję Linux ARM i rozpakuj ją za pomocą polecenia

tar -xf nazwa pliku

Po rozpakowaniu zobaczysz nowy katalog. Tutaj używam IDE arduino-1.8.2. Następnie przejdź do katalogu za pomocą polecenia.

cd arduino-1.8.1

Aby uruchomić Arduino IDE, użyj tego polecenia w katalogu arduino-1.8.2

./arduino

Jak korzystać z bibliotek

Aby zainstalować dowolne biblioteki w Arduino, wystarczy pobrać bibliotekę i wkleić do folderu arduino 1.8.2 ==> biblioteki.

UWAGA:- Upewnij się, że nie ma (-) w folderze biblioteki dla ex (czujnik DHT). Jeśli istnieje (-), zmień jego nazwę.

użyjemy w tej instrukcji dwóch bibliotek, DHT_Sensor i Adafruit_Sensor

Krok 3: Kod dla Arduino

Kod dla Arduino
Kod dla Arduino

Teraz porozmawiajmy ze sobą pytonem i Arduino. Najpierw potrzebujemy prostego programu, aby Arduino wysyłało dane przez port szeregowy. Poniższy program jest prostym programem, który będzie liczył Arduino i wysyłał dane do portu szeregowego.

Kod Arduino

#include "DHT.h" float tempC; // Zmienna lub utrzymywana temp w C float tempF; // Zmienna dla utrzymywania temp. w F wilgotnośc pływaka; //Zmienna do odczytu ciśnienia trzymania

#define DHTPIN 7 // do jakiego pinu cyfrowego jesteśmy podłączeni

#define DHTTYPE DHT11 // DHT11

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

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

// Zainicjuj czujnik DHT.

DHT dht(DHTPIN, DHTTYPE);

void setup(){Serial.begin(115200); //włącz monitor szeregowy

dht.początek(); //zainicjuj dht }

void loop() {tempC = dht.odczytTemperatura(); // Pamiętaj, aby zadeklarować swoje zmienne

wilgotność = dht.odczytWilgotność(); // Czytaj wilgotność

Serial.print(tempC);

Serial.print(", ");

Serial.print(wilgotność);

Serial.print("\n"); // dla nowego opóźnienia linii(2000); //Pauza między odczytami. }

Po skompilowaniu szkicu wybierz płytę i port i prześlij go.

Krok 4: Skonfiguruj Raspberry Pi

Konfiguracja Raspberry Pi
Konfiguracja Raspberry Pi

Po przesłaniu kodu zainstaluj kilka bibliotek, abyśmy mogli wykreślić wykres danych przychodzących szeregowo z Arduino Uno.

1. PySerial to biblioteka, która zapewnia obsługę połączeń szeregowych na wielu różnych urządzeniach. Aby go zainstalować, użyj polecenia.

Sudo apt-get install python-serial

2. Numpy to pakiet, który definiuje wielowymiarowy obiekt tablicy i powiązane z nim szybkie funkcje matematyczne, które na nim operują. Zapewnia również proste procedury dla algebry liniowej i FFT (szybka transformata Fouriera) oraz wyrafinowane generowanie liczb losowych. Możesz go zainstalować na wiele sposobów, używając pakietu apt lub pip. Tutaj instaluję za pomocą pip do tego najpierw musimy zainstalować pip

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

sudo pip zainstaluj numpy

lub jeśli chcesz użyć pakietu apt

sudo apt zainstaluj python-numpy

3. Matplotlib to biblioteka do kreślenia 2D, która zapewnia zorientowany obiektowo interfejs API do osadzania wykresów w aplikacjach przy użyciu zestawów narzędzi GUI ogólnego przeznaczenia, takich jak Tkinter, wxPython, Qt lub GTK+. Aby go zainstalować, użyj polecenia

sudo pip zainstaluj matplotlib

lub

sudo apt install python-matplotlib

4. Drawnow jest zwykle używany do oglądania wyników po każdej iteracji, ponieważ używamy "imshow" w MATLAB. Aby go zainstalować, użyj polecenia

sudo pip zainstalować drawow

Krok 5: Skrypt Pythona

Skrypt Pythona
Skrypt Pythona
Skrypt Pythona
Skrypt Pythona

Następnym krokiem jest napisanie skryptu Pythona, do którego możesz użyć dowolnego edytora.

1. Wykreśl dane na jednym wykresie

importuj numer seryjny importuj bibliotekę seryjną

importuj numer # Importuj numer

importuj matplotlib.pyplot jako plt #importuj bibliotekę matplotlib

z importu drawow *

tempC = #Pusta tablicawilgotność =

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

plt.ion() # tryb interaktywny do wykreślania liczby danych na żywo = 0

def makeFig(): #Utwórz funkcję, która utworzy pożądany wykres

plt.ylim(20, 30) #Ustaw y min i max wartości

plt.title('Dane DHT11 w czasie rzeczywistym') #Wykreśl tytuł

plt.grid(True) #Włącz siatkę

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

plt.plot(tempC, 'b^-', label='Stopień C') #wykreśl temperaturę

plt.legend(loc='prawy górny') #wykreśl legendę

plt2=plt.twinx() #Utwórz drugą oś y

plt.ylim(50, 70) #Ustaw granice drugiej osi y

plt2.plot(wilgotność, 'g*-', label='Wilgotność') #wykres dane ciśnienia

plt2.set_ylabel('Wilgotność') #etykieta druga oś y

plt2.ticklabel_format(useOffset=False)

plt2.legend(loc='lewy górny')

while True: # Pętla While, która zapętla się w nieskończoność

while (arduino.inWaiting()==0): #Poczekaj, aż pojawią się dane

przekazać #nic nie rób

arduinoString = arduino.readline()

dataArray = arduinoString.split(', ') #Split it into array

temp = float(tablica danych[0])

szum = float(tablica danych[1])

tempC.append(temp)

wilgotność.dołącz(szum)

drawow(makeFig)

plt.pauza(.000001)

count=count+1 if(count>20): #weź tylko 20 ostatnich danych, jeśli danych jest więcej, wyskoczy jako pierwsze

tempC.pop(0)

wilgotność.pop(0)

2. Aby osobno wykreślić wilgotność i temperaturę

importuj numer seryjny importuj bibliotekę seryjną

importuj numer # Importuj numer

importuj matplotlib.pyplot jako plt #importuj bibliotekę matplotlib

z importu drawow *

tempC = #Pusta tablica

wilgotność =

arduino = serial. Serial("/dev/ttyACM0", 115200) #Port szeregowy, do którego podłączone jest arduino i szybkość transmisji

plt.ion() #Powiedz matplotlib, że chcesz, aby tryb interaktywny wykreślił dane na żywo

def CreatePlot(): #Utwórz funkcję, która utworzy pożądany wykres

plt.subplot(2, 1, 1) #Wysokość, Szerokość, Pierwsza działka

plt.ylim(22, 34) #Ustaw y min i max wartości

plt.title('Dane DHT11 w czasie rzeczywistym') #Wykreśl tytuł

plt.grid(True) #Włącz siatkę

plt.ylabel('Temp C') #Ustaw yetykiety

plt.plot(tempC, 'b^-', label='Stopień C') #wykreśl temperaturę

plt.legend(loc='upper center') #wykreśl legendę

plt.subplot(2, 1, 2) # Wysokość, Szerokość, Druga działka

plt.grid(prawda)

plt.ylim(45, 70) #Ustaw granice drugiej osi y

plt.plot(wilgotność, 'g*-', label='Wilgotność (g/m^3)') #wykreśl dane wilgotności

plt.ylabel('Wilgotność (g/m^3)') #etykieta druga oś y

plt.ticklabel_format(useOffset=False) #aby zatrzymać autoskalowanie osi y

plt.legend(loc='górny środek')

while True: # Pętla While, która zapętla się w nieskończoność

while (arduino.inWaiting()==0): #Poczekaj tutaj, aż dane zostaną przekazane #nic nie rób

arduinoString = arduino.readline() #odczytaj dane z portu szeregowego

dataArray = arduinoString.split(', ') #Split it into array

temp = float(dataArray[0]) #Konwertuj pierwszy element na liczbę zmiennoprzecinkową i umieść w temp

hum = float(dataArray[1]) #Przekształć drugi element w liczbę zmiennoprzecinkową i wstaw hum

tempC.append(temp) #Zbuduj naszą tablicę tempC, dołączając odczyt temp

wilgotność.append(hum) #Budowanie naszej tablicy wilgotności poprzez dołączenie odczytu szumu

drawow(Utwórzwykres)

plt.pauza(.000001)

liczba=liczba+1

if(count>20): #weź tylko 20 ostatnich danych, jeśli danych jest więcej, wyskoczy jako pierwsze

tempC.pop(0) # wyskocz pierwszy element

wilgotność.pop(0)

Krok 6: Schemat obwodu

Schemat obwodu
Schemat obwodu
Schemat obwodu
Schemat obwodu
Schemat obwodu
Schemat obwodu

Arduino ==> DHT11

3,3 V ==> VCC

GND ==> GND

D7 ==> OUT

Zalecana: