Inhaltsverzeichnis:

Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO - Gunook
Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO - Gunook

Video: Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO - Gunook

Video: Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO - Gunook
Video: Raspberry PI & DHT11 Sensor, schreiben in eine CSV Datei 2024, November
Anonim
Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO
Plotten von DHT11-Daten mit Raspberry Pi und Arduino UNO

Dieses anweisbare erklärt, wie ich Temperatursensor-DHT11-Daten mit Arduino Uno und Raspberry Pi zeichne. In diesem ist der Temperatursensor mit Arduino Uno verbunden und Arduino Uno ist seriell mit Raspberry Pi verbunden. Auf Raspberry Pi Side werden Matplotlib-, Numpy- und Drawow-Bibliotheken verwendet, um Graphen zu zeichnen.

Schritt 1: Für das Projekt benötigte Dinge

Dinge, die für das Projekt benötigt werden
Dinge, die für das Projekt benötigt werden
Dinge, die für das Projekt benötigt werden
Dinge, die für das Projekt benötigt werden
Dinge, die für das Projekt benötigt werden
Dinge, die für das Projekt benötigt werden

1. Himbeer-Pi

2. Arduino Uno

3. DHT11 Temperatursensor

4. Überbrückungsdrähte

5. Steckbrett

Schritt 2: Arduino IDE in Raspberry Pi herunterladen und installieren

Herunterladen und Installieren der Arduino-IDE in Raspberry Pi
Herunterladen und Installieren der Arduino-IDE in Raspberry Pi
Laden Sie die Arduino-IDE in Raspberry Pi herunter und installieren Sie sie
Laden Sie die Arduino-IDE in Raspberry Pi herunter und installieren Sie sie
Herunterladen und Installieren der Arduino-IDE in Raspberry Pi
Herunterladen und Installieren der Arduino-IDE in Raspberry Pi

Hinweis: - Sie können die Arduino IDE von Windows, Linux oder Mac verwenden, um eine Skizze in Arduino UNO hochzuladen.

Der erste Schritt besteht darin, die Arduino IDE für diesen offenen Browser in Raspberry Pi zu installieren und den unten angegebenen Link zu öffnen

Arduino Vorherige IDE

Laden Sie dann die Linux ARM-Version herunter und extrahieren Sie sie mit dem Befehl

tar -xf Dateiname

Nach dem Entpacken sehen Sie ein neues Verzeichnis. Hier verwende ich arduino-1.8.2 IDE. Gehen Sie dann mit dem Befehl zum Verzeichnis.

cd arduino-1.8.1

Um Arduino IDE auszuführen, verwenden Sie diesen Befehl im Verzeichnis arduino-1.8.2

./arduino

So verwenden Sie Bibliotheken

Um Bibliotheken in Arduino zu installieren, laden Sie einfach die Bibliothek herunter und fügen Sie sie in arduino 1.8.2 ==> Bibliotheken ein.

HINWEIS:- Stellen Sie sicher, dass kein (-) im Bibliotheksordner für ex (DHT-Sensor) vorhanden ist. Wenn ein (-) vorhanden ist, benennen Sie es um.

Wir werden zwei Bibliotheken in diesem instructable verwenden, DHT_Sensor und Adafruit_Sensor

Schritt 3: Code für Arduino

Code für Arduino
Code für Arduino

Lassen Sie uns Python und Arduino miteinander sprechen. Zuerst brauchen wir ein einfaches Programm, um den Arduino zu empfangen, der Daten über den seriellen Port sendet. Das folgende Programm ist ein einfaches Programm, das die Arduino-Zählung hat und die Daten an den seriellen Port sendet.

Arduino-Code

#include "DHT.h" float tempC; // Variable oder Haltetemperatur in C float tempF; // Variable für Haltetemperatur in F float Feuchte; //Variable für Haltedruckmessung

#define DHTPIN 7 // mit welchem digitalen Pin wir verbunden sind

#define DHTTYPE DHT11 // DHT 11

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

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

// DHT-Sensor initialisieren.

DHT dht(DHTPIN, DHTTYPE);

Void setup () {Serial.begin (115200); // seriellen Monitor einschalten

dht.begin(); // dht initialisieren}

Void Schleife () {tempC = dht.readTemperature (); // Stellen Sie sicher, dass Sie Ihre Variablen deklarieren

Feuchtigkeit = dht.readHumidity(); // Luftfeuchtigkeit lesen

Serial.print (tempC);

Serial.print (", ");

Serial.print (Luftfeuchtigkeit);

Serial.print("\n"); // für neue Zeilenverzögerung (2000); // Pause zwischen den Lesungen. }

Sobald die Skizze kompiliert ist, wählen Sie Board und Port aus und laden Sie sie hoch.

Schritt 4: Raspberry Pi einrichten

Raspberry Pi einrichten
Raspberry Pi einrichten

Sobald der Code hochgeladen wurde, installieren Sie einige Bibliotheken, damit wir Datendiagramme zeichnen können, die seriell von Arduino Uno stammen.

1. PySerial ist eine Bibliothek, die serielle Verbindungen über eine Vielzahl verschiedener Geräte unterstützt. Um es zu installieren, verwenden Sie den Befehl.

Sudo apt-get install python-serial

2. Numpy ist ein Paket, das ein mehrdimensionales Array-Objekt und zugehörige schnelle mathematische Funktionen definiert, die darauf operieren. Es bietet auch einfache Routinen für lineare Algebra und FFT (Fast Fourier Transform) sowie eine ausgeklügelte Zufallszahlengenerierung. Sie können es auf viele Arten installieren, entweder mit dem apt-Paket oder mit pip. Hier installiere ich mit pip, dafür müssen wir zuerst pip installieren

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

sudo pip install numpy

oder wenn Sie das apt-Paket verwenden möchten

sudo apt installiere python-numpy

3. Matplotlib ist eine 2D-Plotting-Bibliothek, die eine objektorientierte API zum Einbetten von Plots in Anwendungen mit universellen GUI-Toolkits wie Tkinter, wxPython, Qt oder GTK+ bietet. Um es zu installieren, verwenden Sie den Befehl

sudo pip install matplotlib

oder

sudo apt installiere python-matplotlib

4. Drawnow wird im Allgemeinen verwendet, um die Ergebnisse nach jeder Iteration anzuzeigen, da wir in MATLAB "imshow" verwenden. Um es zu installieren, verwenden Sie den Befehl

sudo pip install drawow

Schritt 5: Python-Skript

Python-Skript
Python-Skript
Python-Skript
Python-Skript

Der nächste Schritt besteht darin, ein Python-Skript zu schreiben, das Sie mit einem beliebigen Editor schreiben können.

1. Daten in einem Diagramm darstellen

Seriennummer importieren # Seriennummernbibliothek importieren

import numpy # Import numpy

import matplotlib.pyplot als plt #import matplotlib library

aus gezeichnetem Import *

tempC = #Empty arrayhumidity =

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

plt.ion() # interaktiver Modus zum Zeichnen von Live-Datenanzahl = 0

def makeFig(): #Erstelle eine Funktion, die unseren gewünschten Plot erstellt

plt.ylim(20, 30) #Setze y Min- und Max-Werte

plt.title('Echtzeit-DHT11-Daten') #Plot the title

plt.grid(True) #Schalte das Raster ein

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

plt.plot(tempC, 'b^-', label='Grad C') #Zeige die Temperatur

plt.legend(loc='oben rechts') #plot the legend

plt2=plt.twinx() #Erzeuge eine zweite y-Achse

plt.ylim(50, 70) #Setze Grenzen der zweiten y-Achse

plt2.plot(humidity, 'g*-', label='Humidity') #Druckdaten auftragen

plt2.set_ylabel('Feuchtigkeit') #label zweite y-Achse

plt2.ticklabel_format(useOffset=False)

plt2.legend(loc='oben links')

while True: # While-Schleife, die ewig wiederholt wird

while (arduino.inWaiting()==0): #Warten Sie hier, bis Daten vorhanden sind

pass #nichts tun

arduinoString = arduino.readline()

dataArray = arduinoString.split(', ') #Split es in ein Array

temp = float(dataArray[0])

summen = float(dataArray[1])

tempC.append(temp)

feuchtigkeit.anhängen(brummen)

gezeichnet (machenFig)

plt.pause(.000001)

count=count+1 if(count>20): #Nur die letzten 20 Daten nehmen, wenn mehr Daten vorhanden sind, werden sie zuerst angezeigt

tempC.pop(0)

feuchtigkeit.pop(0)

2. Um Feuchtigkeit und Temperatur getrennt darzustellen

Seriennummer importieren # Seriennummernbibliothek importieren

import numpy # Import numpy

import matplotlib.pyplot als plt #import matplotlib library

aus gezeichnetem Import *

tempC = #Leeres Array

Luftfeuchtigkeit =

arduino = serial. Serial("/dev/ttyACM0", 115200) #Serieller Port, an den arduino angeschlossen ist und Baudrate

plt.ion() #Sagen Sie matplotlib, dass Sie den interaktiven Modus zum Zeichnen von Live-Daten wünschen

def CreatePlot(): #Erstelle eine Funktion, die unseren gewünschten Plot erstellt

plt.subplot(2, 1, 1) #Höhe, Breite, Erster Plot

plt.ylim(22, 34) #Setze y Min- und Max-Werte

plt.title('Echtzeit-DHT11-Daten') #Plot the title

plt.grid(True) #Schalte das Raster ein

plt.ylabel('Temp C') #Ylabels setzen

plt.plot(tempC, 'b^-', label='Grad C') #Zeige die Temperatur

plt.legend(loc='upper center') #plot the legend

plt.subplot(2, 1, 2) # Höhe, Breite, Zweiter Plot

plt.grid(Wahr)

plt.ylim(45, 70) #Setze Grenzen der zweiten y-Achse

plt.plot(humidity, 'g*-', label='Humidity (g/m^3)') #plot Luftfeuchtigkeitsdaten

plt.ylabel('Feuchtigkeit (g/m^3)') #label zweite y-Achse

plt.ticklabel_format(useOffset=False) #um die automatische Skalierung der y-Achse zu stoppen

plt.legend(loc='obere Mitte')

while True: # While-Schleife, die ewig wiederholt wird

while (arduino.inWaiting()==0): #Warten Sie hier, bis Daten passieren #nichts machen

arduinoString = arduino.readline() #lesen Sie die Daten vom seriellen Port

dataArray = arduinoString.split(', ') #Split es in ein Array

temp = float(dataArray[0]) #Konvertieren Sie das erste Element in eine Gleitzahl und geben Sie temp. ein

hum = float(dataArray[1]) #Konvertieren Sie das zweite Element in eine Gleitzahl und setzen Sie hum

tempC.append(temp) #Erstellen Sie unser tempC-Array, indem Sie den Temperaturwert anhängen

feucht.append(hum) #Aufbau unseres Feuchte-Arrays durch Anhängen des Brummwerts

drawow(CreatePlot)

plt.pause(.000001)

zählen=zählen+1

if(count>20): #Nur die letzten 20 Daten nehmen, wenn die Daten größer sind, werden sie zuerst angezeigt

tempC.pop(0) # erstes Element herausspringen

feuchtigkeit.pop(0)

Schritt 6: Schaltplan

Schaltplan
Schaltplan
Schaltplan
Schaltplan
Schaltplan
Schaltplan

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> AUS

Empfohlen: