Հողամաս DHT11 տվյալները ՝ օգտագործելով Raspberry Pi և Arduino UNO ՝ 7 քայլ
Հողամաս DHT11 տվյալները ՝ օգտագործելով Raspberry Pi և Arduino UNO ՝ 7 քայլ
Anonim
Հավաքեք DHT11 տվյալները ՝ օգտագործելով Raspberry Pi և Arduino UNO
Հավաքեք DHT11 տվյալները ՝ օգտագործելով Raspberry Pi և Arduino UNO

Այս հրահանգը բացատրում է, թե ինչպես եմ ես գծագրում ջերմաստիճանի տվիչի DHT11 տվյալները ՝ օգտագործելով Arduino Uno- ն և Raspberry Pi- ն: Այս ջերմաստիճանում սենսորը միացված է Arduino Uno- ի հետ, իսկ Arduino Uno- ն սերիականորեն `Raspberry Pi- ի հետ: Raspberry Pi Side- ում matplotlib, numpy և drawnow գրադարաններն օգտագործվում են գծապատկերներ գծելու համար:

Քայլ 1. ingsրագրի համար անհրաժեշտ բաներ

Նախագծի համար անհրաժեշտ իրեր
Նախագծի համար անհրաժեշտ իրեր
Նախագծի համար անհրաժեշտ իրեր
Նախագծի համար անհրաժեշտ իրեր
Նախագծի համար անհրաժեշտ իրեր
Նախագծի համար անհրաժեշտ իրեր

1. Ազնվամորի Պի

2. Արդուինո Ունո

3. DHT11 ջերմաստիճանի տվիչ

4. Jumper լարերը

5. Հացաթուղթ

Քայլ 2: Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում

Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում
Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում
Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում
Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում
Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում
Ներբեռնեք և տեղադրեք Arduino IDE- ն Raspberry Pi- ում

Նշում.

Առաջին քայլը Raspberry Pi- ում այդ բաց դիտարկիչի համար տեղադրել Arduino IDE- ն և բացել ստորև տրված հղումը

Arduino Նախորդ IDE

Այնուհետև ներբեռնեք Linux ARM տարբերակը և հանեք այն ՝ օգտագործելով հրամանը

tar -xf ֆայլի անունը

Հանելուց հետո դուք կտեսնեք նոր գրացուցակ: Այստեղ ես օգտագործում եմ arduino-1.8.2 IDE: Այնուհետև հրամանի միջոցով գնացեք գրացուցակ:

cd arduino-1.8.1

Arduino IDE- ն գործարկելու համար օգտագործեք այս հրամանը arduino-1.8.2 գրացուցակում

./arduino

Ինչպես օգտագործել գրադարանները

Arduino- ում ցանկացած գրադարան տեղադրելու համար պարզապես ներբեռնեք գրադարանը և տեղադրեք arduino 1.8.2 ==> գրադարանների թղթապանակում:

ՆՇՈՄ. Եթե կա (-), անվանափոխեք այն:

մենք ուսուցանելու համար կօգտագործենք երկու գրադարան ՝ DHT_Sensor և Adafruit_Sensor

Քայլ 3. Կոդ Arduino- ի համար

Կոդ Arduino- ի համար
Կոդ Arduino- ի համար

Եկեք պիթոնին և Արդուինոյին միասին խոսենք: Նախ մեզ պետք է մի պարզ ծրագիր ՝ Arduino- ն սերիական նավահանգստով տվյալներ ուղարկելու համար: Հետևյալ ծրագիրը պարզ ծրագիր է, որը կունենա Arduino- ի հաշվարկը և տվյալները կուղարկի սերիական նավահանգիստ:

Arduino կոդ

#ներառել «DHT.h» float tempC; // փոփոխական կամ պահող ջերմաստիճան C float tempF- ում; // F բոց խոնավության ջերմաստիճանը պահելու համար փոփոխական; // iableնշման ընթերցում պահելու համար փոփոխական

#սահմանեք DHTPIN 7 // ինչ թվային կապի հետ ենք կապված

#սահմանել DHTTYPE DHT11 // DHT 11

//#սահմանել DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

//#սահմանել DHTTYPE DHT21 // DHT 21 (AM2301)

// Նախնականացնել DHT սենսորը:

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // միացնել սերիական մոնիտորը

dht.begin (); // սկզբնականացնել dht}

void loop () {tempC = dht.readTemperature (); // Համոզվեք, որ հայտարարեք ձեր փոփոխականների մասին

խոնավություն = dht.readHumidity (); // Կարդացեք Խոնավություն

Serial.print (tempC);

Serial.print (",");

Serial.print (խոնավություն);

Serial.print ("\ n"); // նոր տողերի համար (2000); // Ընդմիջում ընթերցումների միջև: }

Էսքիզը կազմելուց հետո ընտրեք տախտակ և նավահանգիստ և վերբեռնեք այն:

Քայլ 4: Կարգավորեք Raspberry Pi- ն

Կարգավորեք Raspberry Pi- ն
Կարգավորեք Raspberry Pi- ն

Երբ կոդը վերբեռնվի, տեղադրեք որոշ գրադարաններ, որպեսզի մենք կարողանանք գծել Arduino Uno- ի սերիականորեն ստացվող տվյալների գրաֆիկը:

1. PySerial- ը գրադարան է, որն ապահովում է տարբեր սարքերի սերիական կապերի աջակցություն: Տեղադրելու համար օգտագործեք հրամանը:

Sudo apt-get տեղադրել python- սերիալ

2. Numpy- ը փաթեթ է, որը սահմանում է բազմաչափ զանգվածի օբյեկտ և դրա վրա գործող արագ մաթեմատիկական գործառույթներ: Այն նաև ապահովում է գծային հանրահաշվի և FFT- ի (Արագ Ֆուրյեի արագ փոխակերպում) պարզ ընթացակարգեր և բարդ պատահական թվերի սերունդ: Դուք կարող եք այն տեղադրել բազմաթիվ եղանակներով ՝ օգտագործելով apt փաթեթ կամ pip: Այստեղ ես տեղադրում եմ pip օգտագործելով, դրա համար նախ պետք է տեղադրել pip

sudo apt-get տեղադրել python-pip python-dev build-essential

sudo pip տեղադրել numpy

կամ եթե ցանկանում եք օգտագործել համապատասխան փաթեթ

sudo apt տեղադրել python-numpy

3. Matplotlib- ը 2D գծագրման գրադարան է, որն ապահովում է օբյեկտային կողմնորոշված API ՝ ծրագրերի մեջ սյուժեներ ներդնելու համար ՝ օգտագործելով ընդհանուր նշանակության GUI գործիքակազմեր, ինչպիսիք են Tkinter, wxPython, Qt կամ GTK+: Տեղադրելու համար օգտագործեք հրամանը

sudo pip տեղադրել matplotlib

կամ

sudo apt տեղադրել python-matplotlib

4. Drawnow- ը հիմնականում օգտագործվում է արդյունքները յուրաքանչյուր կրկնությունից հետո տեսնելու համար, քանի որ մենք օգտագործում ենք «imshow» - ը MATLAB- ում: Տեղադրելու համար օգտագործեք հրամանը

sudo pip տեղադրել drawnow

Քայլ 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Հաջորդ քայլը պիթոնի սցենար գրելն է, որի համար կարող եք օգտագործել ցանկացած խմբագիր:

1. Հողամասի տվյալները մեկ գրաֆիկի մեջ

ներմուծել սերիա # ներմուծել սերիական գրադարան

ներմուծել numpy # Ներմուծել numpy

ներմուծել matplotlib.pyplot որպես plt #import matplotlib գրադարան

անհապաղ ներմուծումից *

tempC = #Դատարկ զանգվածային խոնավություն =

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

plt.ion () # ինտերակտիվ ռեժիմ ՝ կենդանի տվյալների հաշվարկ = 0 գծագրելու համար

def makeFig (): #Ստեղծեք գործառույթ, որը դարձնում է մեր ցանկալի գծապատկերը

plt.ylim (20, 30) #Սահմանել y min և առավելագույն արժեքները

plt.title ('Իրական ժամանակի DHT11 տվյալներ') #Կազմեք վերնագիրը

plt.grid (True) #Միացրեք ցանցը

plt.ylabel ('Temp C') #Սահմանել ylabel

plt.plot (tempC, 'b^-', label = 'Degree C') #ցույց ջերմաստիճանը

plt.legend (loc = 'վերին աջ') #գրեք լեգենդը

plt2 = plt.twinx () #Ստեղծեք երկրորդ y առանցքը

plt.ylim (50, 70) #Երկրորդ y առանցքի սահմաններ

plt2.plot (խոնավություն, 'g*-', label = 'Խոնավություն') #հողամաս ճնշման տվյալներ

plt2.set_ylabel («Խոնավություն») #պիտակի երկրորդ y առանցք

plt2.ticklabel_format (useOffset = Կեղծ)

plt2.legend (loc = 'վերին ձախ')

while True: # while loop- ը, որը հավերժ պտտվում է

while (arduino.inWaiting () == 0): #Սպասեք այստեղ, մինչև տվյալներ չլինեն

անցնել #ոչինչ չանել

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Պառակտել այն զանգվածի մեջ

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (ջերմաստիճան)

խոնավություն: կցել (բզզոց)

drawnow (makeFig)

plt. դադար (.000001)

հաշվել = հաշվել+1 եթե (հաշվել> 20). #միայն վերցրեք վերջին 20 տվյալները, եթե տվյալները ավելի շատ լինեն, այն առաջինը կհայտնվի

tempC.pop (0)

խոնավություն: pop (0)

2. Խոնավության և ջերմաստիճանի առանձին գծագրման համար

ներմուծել սերիա # ներմուծել սերիական գրադարան

ներմուծել numpy # Ներմուծել numpy

ներմուծել matplotlib.pyplot որպես plt #import matplotlib գրադարան

անհապաղ ներմուծումից *

tempC = #Դատարկ զանգված

խոնավություն =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Սերիական նավահանգիստ, որին arduino- ն միացված է և Baudrate

plt.ion () #Ասեք matplotlib- ին, որ ցանկանում եք ինտերակտիվ ռեժիմ ՝ կենդանի տվյալների գծագրման համար

def CreatePlot (). #Ստեղծեք գործառույթ, որը կազմում է մեր ցանկալի գծապատկերը

plt.subplot (2, 1, 1) #Բարձրություն, Լայնություն, Առաջին սյուժե

plt.ylim (22, 34) #Սահմանել y min և առավելագույն արժեքները

plt.title ('Իրական ժամանակի DHT11 տվյալներ') #Կազմեք վերնագիրը

plt.grid (True) #Միացրեք ցանցը

plt.ylabel ('Temp C') #Սահմանել ylabels

plt.plot (tempC, 'b^-', label = 'Degree C') #ցույց ջերմաստիճանը

plt.legend (loc = 'վերին կենտրոն') #գրեք լեգենդը

plt.subplot (2, 1, 2) # Բարձրություն, Լայնություն, Երկրորդ հողամաս

plt.grid (Trueշմարիտ)

plt.ylim (45, 70) #Երկրորդ y առանցքի սահմաններ

plt.plot (խոնավություն, 'g*-', label = 'Խոնավություն (գ/մ^3)') #հողամասի խոնավության տվյալներ

plt.ylabel ('Խոնավություն (գ/մ^3)') #պիտակի երկրորդ y առանցք

plt.ticklabel_format (useOffset = False) #կանգնեցնել autoscale y առանցքը

plt.legend (loc = 'վերին կենտրոն')

while True: # while loop- ը, որը հավերժ պտտվում է

while (arduino.inWaiting () == 0): #Սպասեք այստեղ, մինչև տվյալների փոխանցումը լինի #ոչինչ չանել

arduinoString = arduino.readline () #կարդալ տվյալները սերիական նավահանգստից

dataArray = arduinoString.split (',') #Պառակտել այն զանգվածի մեջ

temp = float (dataArray [0]) #Փոխարկել առաջին տարրը լողացող համարի և տեղադրել ջերմաստիճանի մեջ

hum = float (dataArray [1]) #Փոխարկեք երկրորդ տարրը լողացող համարի և դրեք բզզոցի մեջ

tempC.append (temp) #Կառուցեք մեր tempC զանգվածը `կցելով temp ընթերցմանը

խոնավություն. կցել (բզզոց) #Կառուցել մեր խոնավության զանգվածը `կցելով բզզոց ընթերցում

drawnow (CreatePlot)

plt. դադար (.000001)

հաշվել = հաշվել+1

if (count> 20): #միայն վերցրեք վերջին 20 տվյալները, եթե տվյալները ավելի շատ լինեն, այն առաջինը կհայտնվի

tempC.pop (0) # բացեք առաջին տարրը

խոնավություն: pop (0)

Քայլ 6: Շղթայի դիագրամ

Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ
Շղթայի դիագրամ

Arduino ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> ԴՈUTՐՍ

Խորհուրդ ենք տալիս: