Innehållsförteckning:

Plotta DHT11 -data med Raspberry Pi och Arduino UNO: 7 steg
Plotta DHT11 -data med Raspberry Pi och Arduino UNO: 7 steg

Video: Plotta DHT11 -data med Raspberry Pi och Arduino UNO: 7 steg

Video: Plotta DHT11 -data med Raspberry Pi och Arduino UNO: 7 steg
Video: Гончая Плотта. Плюсы и минусы, Цена, Как выбрать, Факты, Уход, История 2024, November
Anonim
Plotta DHT11 -data med Raspberry Pi och Arduino UNO
Plotta DHT11 -data med Raspberry Pi och Arduino UNO

Denna instruerbara förklarar hur jag plottar temperatursensor DHT11 -data med Arduino Uno och Raspberry Pi. I denna temperatursensor är ansluten till Arduino Uno och Arduino Uno är seriellt ansluten med Raspberry Pi. På Raspberry Pi Side används matplotlib-, numpy- och drawow -bibliotek för att plotta diagram.

Steg 1: Saker som behövs för projektet

Saker som behövs för projektet
Saker som behövs för projektet
Saker som behövs för projektet
Saker som behövs för projektet
Saker som behövs för projektet
Saker som behövs för projektet

1. Hallon Pi

2. Arduino Uno

3. DHT11 temperatursensor

4. Bygeltrådar

5. Brödbräda

Steg 2: Ladda ner och installera Arduino IDE i Raspberry Pi

Ladda ner och installera Arduino IDE i Raspberry Pi
Ladda ner och installera Arduino IDE i Raspberry Pi
Ladda ner och installera Arduino IDE i Raspberry Pi
Ladda ner och installera Arduino IDE i Raspberry Pi
Ladda ner och installera Arduino IDE i Raspberry Pi
Ladda ner och installera Arduino IDE i Raspberry Pi

Obs:- Du kan använda Arduino IDE för Windows, Linux eller Mac för att ladda upp skiss i Arduino UNO.

Första steget är att installera Arduino IDE för den öppna webbläsaren i Raspberry Pi och öppna länken nedan

Arduino Tidigare IDE

Ladda sedan ner Linux ARM -versionen och extrahera den med kommandot

tar -xf filnamn

Efter extrahering ser du en ny katalog. Här använder jag arduino-1.8.2 IDE. Gå sedan till katalogen med kommandot.

cd arduino-1.8.1

För att köra Arduino IDE, använd det här kommandot i arduino-1.8.2-katalogen

./arduino

Hur man använder bibliotek

För att installera alla bibliotek i Arduino, ladda bara ner biblioteket och klistra in i arduino 1.8.2 ==> biblioteksmappen.

OBS:-Se till att det inte finns (-) i biblioteksmappen för ex (DHT-sensor). Om det finns något (-), byt namn på det.

vi kommer att använda två bibliotek i denna instruerbara, DHT_Sensor och Adafruit_Sensor

Steg 3: Kod för Arduino

Kod för Arduino
Kod för Arduino

Nu kan vi få python och Arduino att prata tillsammans. För det första behöver vi ett enkelt program för att få Arduino att skicka data över serieporten. Följande program är ett enkelt program som har Arduino -räkningen och skickar data till serieporten.

Arduino -kod

#inkludera "DHT.h" float tempC; // Variabel eller hållande temp i C float tempF; // Variabel för att hålla temp i F floatfuktighet; // Variabel för tryckavläsning

#define DHTPIN 7 // vilken digital pin vi är anslutna till

#define DHTTYPE DHT11 // DHT 11

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

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

// Initiera DHT -sensorn.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // slå på seriell bildskärm

dht.begin (); // initiera dht}

void loop () {tempC = dht.readTemperature (); // Var noga med att deklarera dina variabler

fuktighet = dht.readHumidity (); // Läs Luftfuktighet

Serial.print (tempC);

Serial.print (",");

Seriellt tryck (luftfuktighet);

Serial.print ("\ n"); // för nytt linjedelay (2000); // Pausa mellan avläsningarna. }

När skissen har sammanställts väljer du tavla och port och laddar upp den.

Steg 4: Konfigurera Raspberry Pi

Installera Raspberry Pi
Installera Raspberry Pi

När koden har laddats upp installerar du några bibliotek så att vi kan plotta diagram över data som kommer seriellt från Arduino Uno.

1. PySerial är ett bibliotek som ger stöd för seriella anslutningar över en mängd olika enheter. Använd kommandot för att installera det.

Sudo apt-get install python-serial

2. Numpy är ett paket som definierar ett flerdimensionellt arrayobjekt och tillhörande snabbmatematiska funktioner som fungerar på det. Det ger också enkla rutiner för linjär algebra och FFT (Fast Fourier Transform) och sofistikerad slumpgenerering. Du kan installera det på många sätt, antingen använda apt -paket eller pip. Här installerar jag med pip för att först måste vi installera pip

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

sudo pip installera numpy

eller om du vill använda apt -paketet

sudo apt installera python-numpy

3. Matplotlib är ett 2D-plottbibliotek som tillhandahåller ett objektorienterat API för att bädda in tomter i applikationer med hjälp av GUI-verktygssatser för allmänna ändamål som Tkinter, wxPython, Qt eller GTK+. Använd kommandot för att installera det

sudo pip installera matplotlib

eller

sudo apt installera python-matplotlib

4. Drawnow används vanligtvis för att se resultaten efter varje iteration eftersom vi använder "imshow" i MATLAB. Använd kommandot för att installera det

sudo pip installera drawow

Steg 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Nästa steg är att skriva ett python -skript för att du kan använda valfri editor för att skriva det.

1. Plotta data i en graf

import serial # import Serial Library

import numpy # Import numpy

importera matplotlib.pyplot som plt #import matplotlib bibliotek

från import från *

tempC = #Tom matrisfuktighet =

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

plt.ion () # interaktivt läge för att plotta levande datakonto = 0

def makeFig (): #Skapa en funktion som gör vår önskade tomt

plt.ylim (20, 30) #Ställ in y min och max värden

plt.title ('Real Time DHT11 Data') #Plotta titeln

plt.grid (True) #Slå på rutnätet

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

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

plt.legend (loc = 'övre högra') #planera legenden

plt2 = plt.twinx () #Skapa en andra y -axel

plt.ylim (50, 70) #Ställ in gränser för andra y -axeln

plt2.plot (luftfuktighet, 'g*-', etikett = 'Luftfuktighet') #tomttrycksdata

plt2.set_ylabel ('Luftfuktighet') #etikett andra y -axeln

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'övre vänster')

medan det är sant: # Medan slingan som går för alltid

while (arduino.inWaiting () == 0): #Vänta här tills det finns data

klara #gör ingenting

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Split den i en array

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

fuktighet. lägg till (hum)

drawow (makeFig)

plt.paus (.000001)

count = count+1 if (count> 20): #bara ta de senaste 20 data om data är mer kommer det att dyka upp först

tempC.pop (0)

fuktighet.pop (0)

2. Att rita luftfuktighet och temperatur separat

import serial # import Serial Library

import numpy # Import numpy

importera matplotlib.pyplot som plt #import matplotlib bibliotek

från import från *

tempC = #Tom matris

luftfuktighet =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Seriell port som arduino är ansluten till och Baudrate

plt.ion () #Tala om för matplotlib att du vill att interaktivt läge ska rita levande data

def CreatePlot (): #Skapa en funktion som gör vår önskade tomt

plt.subplot (2, 1, 1) #Höjd, Bredd, Första tomten

plt.ylim (22, 34) #Ställ in y min och max värden

plt.title ('Real Time DHT11 Data') #Plotta titeln

plt.grid (True) #Slå på rutnätet

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

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

plt.legend (loc = 'övre mitten') #planera legenden

plt. delplot (2, 1, 2) # Höjd, bredd, andra tomt

plt.grid (sant)

plt.ylim (45, 70) #Ställ in gränser för andra y -axeln

plt.plot (luftfuktighet, 'g*-', etikett = 'Luftfuktighet (g/m^3)') #tomtfuktighetsdata

plt.ylabel ('Luftfuktighet (g/m^3)') #etikett andra y -axeln

plt.ticklabel_format (useOffset = False) #t för att stoppa autoskalering av y -axeln

plt.legend (loc = 'övre mitten')

medan det är sant: # Medan slingan som går för alltid

while (arduino.inWaiting () == 0): #Vänta här tills det finns data pass #gör ingenting

arduinoString = arduino.readline () #läs data från seriell port

dataArray = arduinoString.split (',') #Split den i en array

temp = float (dataArray [0]) #Konvertera första elementet till flytande tal och sätt in temp

hum = float (dataArray [1]) #Konvertera det andra elementet till flytande tal och sätt in hum

tempC.append (temp) #Bygg vår tempC -array genom att lägga till temp -läsning

luftfuktighet. lägg till (hum) #Bygga vår fuktighetsgrupp genom att lägga till brumläsning

drawow (CreatePlot)

plt.paus (.000001)

count = count+1

if (count> 20): #bara ta de senaste 20 data om data är mer kommer det att dyka upp först

tempC.pop (0) # pop -out första element

fuktighet.pop (0)

Steg 6: Kretsdiagram

Kretsdiagram
Kretsdiagram
Kretsdiagram
Kretsdiagram
Kretsdiagram
Kretsdiagram

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> UT

Rekommenderad: