ნაკვეთი DHT11 მონაცემები ჟოლოს Pi და Arduino UNO გამოყენებით: 7 ნაბიჯი
ნაკვეთი DHT11 მონაცემები ჟოლოს 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: ყველაფერი რაც საჭიროა პროექტისათვის

პროექტისათვის საჭირო ნივთები
პროექტისათვის საჭირო ნივთები
პროექტისათვის საჭირო ნივთები
პროექტისათვის საჭირო ნივთები
პროექტისათვის საჭირო ნივთები
პროექტისათვის საჭირო ნივთები

1. ჟოლო პი

2. არდუინო უნო

3. DHT11 ტემპერატურის სენსორი

4. ჯუმბერის მავთულები

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– ში

შენიშვნა:- თქვენ შეგიძლიათ გამოიყენოთ Arduino IDE ფანჯრების, Linux ან Mac– ის ესკიზის ასატვირთად Arduino UNO– ში.

პირველი ნაბიჯი არის დააინსტალიროთ Arduino IDE იმ ღია ბრაუზერისთვის Raspberry Pi– ში და გახსენით ქვემოთ მოცემული ბმული

Arduino წინა IDE

შემდეგ გადმოწერეთ Linux ARM ვერსია და ამოიღეთ იგი ბრძანების გამოყენებით

tar -xf ფაილის სახელი

ამოღების შემდეგ ნახავთ ახალ დირექტორიას. აქ მე ვიყენებ arduino-1.8.2 IDE- ს. შემდეგ გადადით დირექტორიაში ბრძანების გამოყენებით.

cd arduino-1.8.1

Arduino IDE- ს გასაშვებად გამოიყენეთ ეს ბრძანება arduino-1.8.2 დირექტორიაში

./არდუინო

როგორ გამოვიყენოთ ბიბლიოთეკები

Arduino– ში ნებისმიერი ბიბლიოთეკის დასაყენებლად, უბრალოდ გადმოწერეთ ბიბლიოთეკა და ჩასვით arduino 1.8.2 ==> ბიბლიოთეკების საქაღალდეში.

შენიშვნა:-დარწმუნდით, რომ ბიბლიოთეკის საქაღალდეში არ არის (-) ყოფილი (DHT- სენსორი). თუ არსებობს რაიმე (-), გადაარქვით მას სახელი.

ჩვენ გამოვიყენებთ ორ ბიბლიოთეკას ამ სასწავლო ინსტრუქციაში, DHT_Sensor და Adafruit_Sensor

ნაბიჯი 3: კოდი Arduino– სთვის

კოდი არდუინოსთვის
კოდი არდუინოსთვის

მოდით, პითონი და არდუინო ერთად ვისაუბროთ. პირველ რიგში, ჩვენ გვჭირდება მარტივი პროგრამა Arduino– ს მონაცემების სერიული პორტის გასაგზავნად. შემდეგი პროგრამა არის მარტივი პროგრამა, რომელსაც ექნება Arduino– ს დათვლა და მონაცემების სერიულ პორტში გაგზავნა.

არდუინოს კოდი

#მოიცავს "DHT.h" float tempC; // ცვლადი ან შენახვის ტემპერატურა C float tempF- ში; // ცვლადი ტემპერატურის შესანარჩუნებლად F float ტენიანობაში; // ცვლადი წნევის კითხვის შესანარჩუნებლად

#განსაზღვრეთ 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. დაწყება (); // ინიციალიზაცია dht}

void loop () {tempC = dht.readTemperature (); // აუცილებლად გამოაცხადეთ თქვენი ცვლადები

ტენიანობა = dht.readHumidity (); // წაიკითხეთ ტენიანობა

Serial.print (tempC);

Serial.print (",");

სერიული. ბეჭდვა (ტენიანობა);

Serial.print ("\ n"); // ახალი ხაზისათვის (2000); // კითხვას შორის პაუზა. }

ესკიზის შედგენის შემდეგ შეარჩიეთ დაფა და პორტი და ატვირთეთ იგი.

ნაბიჯი 4: დააინსტალირეთ Raspberry Pi

ჟოლოს პი
ჟოლოს პი

მას შემდეგ, რაც კოდი აიტვირთება, დააინსტალირეთ რამდენიმე ბიბლიოთეკა ისე, რომ ჩვენ შეგვიძლია დავხატოთ მონაცემთა გრაფიკი, რომელიც სერიულად მოდის Arduino Uno– დან.

1. PySerial არის ბიბლიოთეკა, რომელიც უზრუნველყოფს სერიული კავშირების მხარდაჭერას სხვადასხვა მოწყობილობებზე. მისი ინსტალაციისთვის გამოიყენეთ ბრძანება.

Sudo apt-get დააინსტალირეთ პითონი-სერიული

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: პითონის სკიპტი

პითონ სკიპტი
პითონ სკიპტი
პითონ სკიპტი
პითონ სკიპტი

შემდეგი ნაბიჯი არის პითონის სკრიპტის დაწერა, რომლის დასაწერად შეგიძლიათ გამოიყენოთ ნებისმიერი რედაქტორი.

1. შეადგინეთ მონაცემები ერთ გრაფაში

იმპორტი სერიული # იმპორტი სერიული ბიბლიოთეკა

იმპორტის numpy # იმპორტის numpy

იმპორტი matplotlib.pyplot როგორც plt #იმპორტი matplotlib ბიბლიოთეკა

უშუალო იმპორტიდან *

tempC = #ცარიელი მასივი ტენიანობა =

arduino = სერიული. სერიული ("/dev/ttyACM0", 115200)

plt.ion () # ინტერაქტიული რეჟიმი ცოცხალი მონაცემის = 0 -ის გამოსახვისთვის

def makeFig (): #შექმენით ფუნქცია, რომელიც ქმნის ჩვენს სასურველ ნაკვეთს

plt.ylim (20, 30) #მითითებული წთ და მაქსიმალური მნიშვნელობები

plt.title ("რეალურ დროში DHT11 მონაცემები") #სათაური

plt.grid (მართალია) #ჩართეთ ქსელი

plt.ylabel ('Temp C') #დააყენეთ ylabel

plt.plot (tempC, 'b^-', label = 'ხარისხი C') #შეადგინეთ ტემპერატურა

plt.legend (loc = 'ზედა მარჯვენა') #დავხატოთ ლეგენდა

plt2 = plt.twinx () #შექმენით მეორე y ღერძი

plt.ylim (50, 70) #მეორე y ღერძის ლიმიტების დაყენება

plt2.plot (ტენიანობა, 'g*-', label = 'ტენიანობა') #ნაკვეთი წნევის მონაცემები

plt2.set_ylabel ('Humidity') #label მეორე y ღერძი

plt2.ticklabel_format (useOffset = ყალბი)

plt2.legend (loc = 'ზედა მარცხენა')

ხოლო True: # while მარყუჟი რომ მარყუჟებს სამუდამოდ

while (arduino.inWaiting () == 0): #დაელოდეთ აქ სანამ არ იქნება მონაცემები

გაიაროს #არაფერი

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #გაყოფა მასივში

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

ტენიანობა. დამატება (ჰუმ)

drawnow (makeFig)

pl. პაუზა (.000001)

ითვლიან = ითვლიან+1 თუ (ითვლიან> 20): #მიიღეთ მხოლოდ ბოლო 20 მონაცემი, თუ მონაცემები მეტია, ის პირველად გამოჩნდება

tempC.pop (0)

ტენიანობა. პოპ (0)

2. ტენიანობისა და ტემპერატურის ცალკე შედგენა

იმპორტი სერიული # იმპორტი სერიული ბიბლიოთეკა

იმპორტის numpy # იმპორტის numpy

იმპორტი matplotlib.pyplot როგორც plt #იმპორტი matplotlib ბიბლიოთეკა

უშუალო იმპორტიდან *

tempC = #ცარიელი მასივი

ტენიანობა =

arduino = სერიული. სერიული ("/dev/ttyACM0", 115200) #სერიული პორტი, რომელთანაც დაკავშირებულია arduino და Baudrate

plt.ion () #უთხარი matplotlib გსურთ ინტერაქტიული რეჟიმი ცოცხალი მონაცემების გამოსახატად

def CreatePlot (): #შექმენით ფუნქცია, რომელიც ქმნის ჩვენს სასურველ ნაკვეთს

plt.subplot (2, 1, 1) #სიმაღლე, სიგანე, პირველი ნაკვეთი

plt.ylim (22, 34) #მითითებული წთ და მაქსიმალური მნიშვნელობები

plt.title ("რეალურ დროში DHT11 მონაცემები") #სათაური

plt.grid (მართალია) #ჩართეთ ქსელი

plt.ylabel ('Temp C') #დააყენეთ ილაბელები

plt.plot (tempC, 'b^-', label = 'ხარისხი C') #შეადგინეთ ტემპერატურა

plt.legend (loc = 'ზედა ცენტრი') #დავხატოთ ლეგენდა

plt.subplot (2, 1, 2) # სიმაღლე, სიგანე, მეორე ნაკვეთი

plt.grid (მართალია)

plt.ylim (45, 70) #მეორე y ღერძის ლიმიტების დაყენება

plt.plot (ტენიანობა, 'g*-', label = 'ტენიანობა (გ/მ^3)') #ნაკვეთი ტენიანობის მონაცემები

plt.ylabel ("ტენიანობა (გ/მ^3)" #ეტიკეტი მეორე y ღერძი

plt.ticklabel_format (useOffset = false) #ავტომატური მასშტაბის y ღერძის შესაჩერებლად

plt.legend (loc = 'ზედა ცენტრი')

ხოლო True: # while მარყუჟი რომ მარყუჟებს სამუდამოდ

while (arduino.inWaiting () == 0): #დაელოდეთ აქ სანამ არ იქნება მონაცემთა გადაცემა #არაფერი

arduinoString = arduino.readline () #წაიკითხეთ მონაცემები სერიული პორტიდან

dataArray = arduinoString.split (',') #გაყოფა მასივში

temp = float (dataArray [0]) #გადააკეთეთ პირველი ელემენტი მცურავ რიცხვად და ჩადეთ temp

hum = float (dataArray [1]) #გადააკეთეთ მეორე ელემენტი მცურავ რიცხვში და ჩადეთ hum

tempC.append (temp) #ავაშენოთ ჩვენი tempC მასივი temp კითხვის დამატებით

ტენიანობა. დამატება (hum) #ჩვენი ტენიანობის მასივის აშენება დამატებით კითხვის დამატებით

drawnow (CreatePlot)

pl. პაუზა (.000001)

დათვლა = დათვლა+1

if (რაოდენობა> 20): #მიიღეთ მხოლოდ ბოლო 20 მონაცემი, თუ მონაცემები მეტია, ის პირველად გამოჩნდება

tempC.pop (0) # ამოიღეთ პირველი ელემენტი

ტენიანობა. პოპ (0)

ნაბიჯი 6: წრიული დიაგრამა

Წრიული დიაგრამა
Წრიული დიაგრამა
Წრიული დიაგრამა
Წრიული დიაგრამა
Წრიული დიაგრამა
Წრიული დიაგრამა

არდუინო ==> DHT11

3.3V ==> VCC

GND ==> GND

D7 ==> OUT

გირჩევთ: