Სარჩევი:

Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია: 4 ნაბიჯი (სურათებით)
Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია: 4 ნაბიჯი (სურათებით)

ვიდეო: Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია: 4 ნაბიჯი (სურათებით)

ვიდეო: Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია: 4 ნაბიჯი (სურათებით)
ვიდეო: Изготовление светодиодных и LDR-оптопары (вещь Vactrol) 2024, ივლისი
Anonim
Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია
Arduino ატმოსფერული ლენტი ღონისძიება/ MS5611 GY63 GY86 დემონსტრაცია

ეს მართლაც ბარომეტრი/ალტიმეტრია, მაგრამ სათაურის მიზეზს ნახავთ ვიდეოს ყურებისას.

MS5611 წნევის სენსორი, ნაპოვნი Arduino GY63 და GY86 გარღვევის დაფებზე, იძლევა საოცარ შესრულებას. წყნარ დღეს ის ზომავს თქვენს სიმაღლეს 0.2 მ -ის ფარგლებში. ეს ეფექტურად გაზომავს მანძილს თქვენი თავიდან გარე სამყაროსთან და გამოაკლებთ მას თქვენი ფეხის მანძილიდან გარე სივრცეში (წნევის გაზომვით - ეს არის ჰაერის წონა ზემოთ). ამ სანახაობრივ მოწყობილობას აქვს დიაპაზონი, რომელიც კომფორტულად შეაფასებს ევერესტის სიმაღლეს - და ასევე შეიძლება შემცირდეს რამდენიმე ინჩამდე.

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

თითოეულ სენსორს აქვს საკუთარი კალიბრაციის მუდმივები, რომლებიც უნდა წაიკითხოთ და გამოიყენოთ მონაცემების გასასწორებლად. არსებობს ბიბლიოთეკა, რომელიც დაეხმარება მათ მართვაში. აქ ნაჩვენები კოდი იყენებს ბიბლიოთეკას წაკითხვისთვის და შემდეგ გარდაქმნის მათ სიმაღლეზე და აჩვენებს მათ LCD ფარს.

პირველ რიგში ჩვენ მონაცემებს გავაგზავნით სერიულ მონიტორზე კომპიუტერზე/ლეპტოპზე საწყისი ტესტებისთვის. ეს აჩვენებს გარკვეულ ხმაურს და ჩვენ ვამატებთ ფილტრს მათ გასასუფთავებლად. შემდეგ ჩვენ დავამატებთ LCD ეკრანს, ასე რომ მოწყობილობა დამოუკიდებლად იმუშავებს და თქვენ შეგიძლიათ სცადოთ თქვენი სიმაღლის გაზომვა - ან სხვა რამ.

გაითვალისწინეთ, რომ GY63 დაფაზე მხოლოდ არის MS5611 წნევის სენსორი. GY86 ეწოდება თავისუფლების დაფის 10 გრადუსს და ასევე მოიცავს 3 ღერძიან აქსელერომეტრს, 3 ღერძიან გიროსა და 3 ღერძიან მაგნიტომეტრს სულ რაღაც რამდენიმე დოლარად.

თქვენ დაგჭირდებათ:

1. Arduino UNO (ან სხვა სტანდარტული პინუტით) და მისი USB კაბელი

2. GY63 გარღვევის დაფა ან GY86

3. 4 Dupont იწვევს მამაკაცი - ქალი - ან დამაკავშირებელი მავთული

4. Arduino LCD კლავიატურის ფარი

5. 9 ვ ბატარეა და ტყვია

6. 2.54 მმ სოკეტის ზოლები (სურვილისამებრ, მაგრამ რეკომენდირებული)

მომზადება

ჩამოტვირთეთ Arduino IDE (ინტეგრირებული განვითარების გარემო):

რამდენიმე ტექნიკური მახასიათებელი ინტერესისთვის

MS5611 აჩვენებს თავის შესანიშნავ მუშაობას საშუალო რაოდენობის გაზომვით. მას შეუძლია 4096 3 ბაიტიანი (24 ბიტიანი) ანალოგური გაზომვები სულ რაღაც 8 ms- ში და მისცეს საშუალო მნიშვნელობა. მას უნდა გავზომოთ წნევაც და ტემპერატურაც, რათა წნევის მონაცემები შესწორდეს შიდა ტემპერატურაზე. ამრიგად, მას შეუძლია უზრუნველყოს 60 წყვილი წნევისა და ტემპერატურის მაჩვენებელი წამში.

მონაცემთა ფურცელი ხელმისაწვდომია:

კომუნიკაცია ხდება I2C საშუალებით. ასე რომ, სხვა I2C სენსორებს შეუძლიათ ავტობუსის გაზიარება (როგორც ეს ხდება GY86 10DOF დაფაზე, სადაც ყველა ჩიპი არის I2C- ზე).

ნაბიჯი 1: მიიღეთ MS5611 ბიბლიოთეკა

Arduino– ს ბევრი სენსორი ან იყენებს სტანდარტულ ბიბლიოთეკას, რომელიც მოყვება Arduino IDE– ს, ან მიეწოდება zip ფაილი ბიბლიოთეკით, რომლის ინსტალაციაც ადვილია. ეს არ ეხება MS5611 სენსორებს. თუმცა, მოიძებნა: https://github.com/gronat/MS5611, რომელსაც აქვს ბიბლიოთეკა MS5611– ისთვის, ტემპერატურის კორექციის ჩათვლით.

ვარიანტი 1

გადადით ზემოთ მოცემულ ვებსაიტზე, დააწკაპუნეთ "კლონირება ან ჩამოტვირთვა" და აირჩიეთ "ჩამოტვირთვის ZIP". ამან უნდა გადმოგცეთ MS5611-master.zip თქვენს გადმოტვირთვის დირექტორიაში. თუ გსურთ, გადაიტანეთ იგი საქაღალდეში, სადაც მომავალში ნახავთ. მე ვიყენებ დირექტორიას სახელწოდებით "მონაცემები", რომელიც დამატებულია ჩემს Arduino საქაღალდეებში.

სამწუხაროდ გადმოწერილი.zip ფაილი არ შეიცავს ესკიზების მაგალითს და კარგი იქნებოდა ბიბლიოთეკის და მაგალითების დამატება Arduino IDE- ში. README.md ფაილში არის მინიმალური მაგალითი, რომლის კოპირება და ჩასმა ესკიზში და შენახვა შესაძლებელია. ეს არის ერთ -ერთი გზა წასასვლელად.

ვარიანტი 2

იმისათვის, რომ გაადვილდეს კოდის გაშვება ამ ინსტრუქტაციაში მე დავამატე ზემოთ მოყვანილი მინიმალური მაგალითი და ბიბლიოთეკაში აქ ნაჩვენები მაგალითები და ქვემოთ მიმაგრებულია.zip ფაილი, რომელიც დაინსტალირდება Arduino IDE– ში.

ჩამოტვირთეთ zip ფაილი ქვემოთ. სურვილის შემთხვევაში გადაიტანეთ ეს უკეთეს საქაღალდეში.

დაიწყეთ Arduino IDE. დააწკაპუნეთ ჩანახატზე> ბიბლიოთეკის ჩართვა> zip ფაილის დამატება და აირჩიეთ ფაილი. გადატვირთეთ IDE. IDE– ს ახლა ორივე ექნება ბიბლიოთეკა და აქ ნაჩვენები ყველა მაგალითი. შეამოწმეთ ფაილი> მაგალითები >> MS5611-master. სამი ესკიზი უნდა იყოს ჩამოთვლილი.

ნაბიჯი 2: შეაერთეთ სენსორი არდუინოსთან და შეამოწმეთ

შეაერთეთ სენსორი არდუინოსთან და შეამოწმეთ
შეაერთეთ სენსორი არდუინოსთან და შეამოწმეთ
შეაერთეთ სენსორი არდუინოსთან და შეამოწმეთ
შეაერთეთ სენსორი არდუინოსთან და შეამოწმეთ

GY63/GY86 დაფები, როგორც წესი, მოყვება სათაურებს, მაგრამ არ არის გასაყიდი. ასე რომ, თქვენი არჩევანია ან ჩასვათ სათაურები ადგილზე და გამოიყენოთ მამაკაცი-ქალი დიუპონტი, ან (როგორც მე გადავწყვიტე) შემაერთებელი მიმაგრება უშუალოდ დაფაზე და დაამატეთ ქინძისთავები ტყვიაში არდუინოში ჩასართავად. ეს უკანასკნელი ვარიანტი უკეთესია, თუ ფიქრობთ, რომ დაგჭირდებათ მოგვიანებით დაფის პროექტში ჩადება. პირველი უკეთესია, თუ გსურთ დაფა გამოიყენოთ ექსპერიმენტებისთვის. არამყარი ლიდერი ბევრად უფრო ადვილია, ვიდრე პინ ჰედერი.

საჭირო კავშირებია:

GY63/GY86 არდუინო

VCC - 5v Power GND - GND Ground SCL - A5 I2C საათი> SDA - A4 I2C მონაცემები

მიამაგრეთ სენსორული დაფა Arduino– ზე ზემოთ და შეაერთეთ Arduino კომპიუტერთან/ლეპტოპთან მისი USB კაბელის საშუალებით. ასევე დაფარეთ სენსორი რაღაც გაუმჭვირვალე/შავი მასალით. სენსორი მგრძნობიარეა სინათლის მიმართ (როგორც ეს ამ ტიპის სენსორების უმეტესობის შემთხვევაშია).

დაიწყეთ Arduino IDE. დააწკაპუნეთ:

ფაილი> მაგალითები >> MS5611-master> MS5611data2serial.

IDE– ს ახალი მაგალითი გამოჩნდება ესკიზთან ერთად. დააწკაპუნეთ ატვირთვის ღილაკზე (ისარი მარჯვნივ).

შემდეგ დაიწყეთ სერიული პლოტერი - დააწკაპუნეთ ინსტრუმენტები> სერიული შემგროვებელი და საჭიროების შემთხვევაში დააყენეთ ბაუდი 9600 -ზე. მონაცემები, რომლებიც იგზავნება არის წნევა პასკალებში. ერთი წამის შემდეგ ის ხელახლა მასშტაბირდება და სენსორის ამაღლება და დაწევა 0.3 მ-ით უნდა გამოჩნდეს როგორც კვალის შემცირება და ამაღლება (ქვედა სიმაღლე უფრო მაღალი წნევაა).

მონაცემებს აქვს გარკვეული ხმაური. იხილეთ პირველი ნაკვეთი ზემოთ. ამის გამოსწორება შესაძლებელია ციფრული ფილტრის გამოყენებით (მართლაც სასარგებლო ინსტრუმენტი).

ფილტრის განტოლებაა:

მნიშვნელობა = მნიშვნელობა + K (ახალი მნიშვნელობა)

სადაც "მნიშვნელობა" არის გაფილტრული მონაცემები და "ახალი" არის უახლესი გაზომვა. თუ K = 1 არ არის გაფილტვრა. K– ის ქვედა მნიშვნელობებისთვის მონაცემები გათლილია T/K– ის დროის მუდმივობით, სადაც T არის დრო ნიმუშებს შორის. აქ T არის დაახლოებით 17ms, ასე რომ 0.1 მნიშვნელობა იძლევა დროის მუდმივობას 170ms ან დაახლოებით 1/6 წმ.

ფილტრი შეიძლება დაემატოს:

დაამატეთ ცვლადი გაფილტრული მონაცემების დაყენებამდე ():

float გაფილტრული = 0;

შემდეგ დაამატეთ ფილტრის განტოლება ზეწოლის შემდეგ =…. ხაზი.

გაფილტრული = გაფილტრული + 0.1*(წნევით გაფილტრული);

კარგი იდეაა გაფილტრული მნიშვნელობის ინიციალიზაცია პირველ კითხვაზე. ასე რომ, დაამატეთ "თუ" განცხადება ზემოთ ხაზის გარშემო, რომელიც ასე გამოიყურება:

თუ (გაფილტრული! = 0) {

გაფილტრული = გაფილტრული + 0.1*(წნევით გაფილტრული); } else {გაფილტრული = წნევა; // პირველი კითხვა ასე გაფილტრული კითხვისთვის}

ტესტი "! =" არ არის "თანაბარი". ასე რომ, თუ "გაფილტრული" არ არის 0 -ის ტოლი, ფილტრის განტოლება შესრულებულია, მაგრამ თუ ეს არის, მაშინ ის დაყენებულია წნევის მაჩვენებელზე.

დაბოლოს, ჩვენ უნდა შევცვალოთ "ზეწოლა" "გაფილტრული" Serial.println განცხადებაში, ასე რომ ჩვენ ვნახავთ გაფილტრულ მნიშვნელობას.

საუკეთესო სწავლა მიიღწევა ზემოაღნიშნული ცვლილებების ხელით განხორციელებით. თუმცა ესენი ჩავრთე MS5611data2serialWfilter მაგალითში. ასე რომ, თუ პრობლემები არსებობს, მაგალითის ჩატვირთვა შესაძლებელია.

ახლა ატვირთეთ კოდი Arduino– ში და ნახეთ გაუმჯობესება. იხილეთ მეორე ნაკვეთი ზემოთ და გაითვალისწინეთ, რომ Y მასშტაბი გაფართოვებულია x2.

სცადეთ ფილტრის მუდმივობის უფრო დაბალი მნიშვნელობა, თქვით 0,02 ნაცვლად 0,1 და ნახეთ სხვაობა. მონაცემები უფრო რბილია, მაგრამ ნელი პასუხით. ეს არის კომპრომისი, რომელიც უნდა ვეძებოთ ამ მარტივი ფილტრის გამოყენებისას. მახასიათებელი იგივეა, რაც RC (წინააღმდეგობა და ტევადობა) ფილტრი, რომელიც ფართოდ გამოიყენება ელექტრონულ სქემებში.

ნაბიჯი 3: გახადეთ იგი დამოუკიდებელი

ახლა ჩვენ დავამატებთ LCD კლავიატურის ფარს, გადავაქცევთ წნევას სიმაღლეზე მეტრში და ვაჩვენებთ მას ეკრანზე. ჩვენ ასევე დავამატებთ მნიშვნელობის ნულოვანი მნიშვნელობას კლავიატურის ‘Select’ დაჭერით.

Arduino– ს LCD ფარის საშუალებით, სენსორი უნდა იყოს დაკავშირებული LCD ფართან. სამწუხაროდ LCD ფარები ჩვეულებრივ მოდის შესაბამისი სოკეტების გარეშე. ასე რომ, ვარიანტებია შედუღების კავშირების გაკეთება ან სოკეტის ზოლის მიღება. სოკეტის ზოლები ხელმისაწვდომია ebay– ზე არა უმეტეს საფოსტო ფასისა. მოძებნეთ '2.54 მმ სოკეტის ზოლზე' და მოძებნეთ ის, რაც არდუინოს მსგავსია. ეს ჩვეულებრივ მოდის 36 ან 40 პინის სიგრძეში. თავიდან ავიცილებდი გადატრიალებულ პინებს, რადგან ისინი არ არიან საკმარისად ღრმა სტანდარტული დიუპონტის ლიდერებისთვის.

სოკეტის ზოლები უნდა გაიჭრას სიგრძემდე და დაჭრილი უნდა გაკეთდეს იმავე ადგილას, როგორც პინი. ასე რომ, 6 პინიანი ზოლისთვის - ამოიღეთ მე -7 ქინძისთავი რამდენიმე წვრილი პლიუსით, შემდეგ გაჭერით იმ ადგილას უმცროსი ხერხის გამოყენებით. მე ვასრულებ ბოლოებს, რათა ისინი სისუფთავე იყოს.

დაფაზე შედუღებისას დარწმუნდით, რომ არ არის გამაგრებული ხიდები.

სენსორის დაკავშირების შესახებ შესაბამისი გადაწყვეტილებით შეაერთეთ LCD ფარი არდუინოზე და შეაერთეთ სენსორი იგივე ქინძისთავებით - ახლა კი LCD ფარზე.

ასევე მოამზადეთ ბატარეა და ტყვია. მე შევქმენი ჩემი ტყვიის ნაწილები ჩემი ჯართის ყუთში, მაგრამ ისინი ასევე ხელმისაწვდომია ebay– ზე - მათ შორის ლამაზი ვარიანტი, რომელიც შეიცავს ბატარეის ყუთს და გადამრთველს. მოძებნეთ 'PP3 2.1 მმ ტყვიით'.

ამჟამინდელი მოხმარება დაახლოებით 80 მმ -ია. ამიტომ, თუ გსურთ რამდენიმე წუთზე მეტხანს გაშვება, განიხილეთ უფრო დიდი 9 ვ ბატარეა, ვიდრე PP3.

ნაბიჯი 4: დაამატეთ კოდი სიმაღლისა და LCD– ისთვის

Image
Image

ჩვენ უნდა გავაკეთოთ ცოტა მეტი კოდირება ზეწოლის სიმაღლეზე გადასაყვანად და დისპლეის მართვისთვის.

ესკიზის დასაწყისში დაამატეთ ჩვენების ბიბლიოთეკა და უთხარით რა ქინძისთავები გამოიყენება:

#ჩართეთ

// ბიბლიოთეკის ინიციალიზაცია LiquidCrystal lcd (8, 9, 4, 5, 6, 7) ინტერფეისის ქინძისთავებით;

შემდეგ ჩვენ გვჭირდება რამდენიმე ცვლადი და ფუნქცია კლავიატურის ღილაკების წასაკითხად. ეს ყველაფერი დაკავშირებულია ანალოგურ შესასვლელთან A0. თითოეული ღილაკი განსხვავებულ ძაბვას აძლევს A0- ს. "Arduino lcd ფარის ღილაკების კოდის" ძიებამ იპოვა რამდენიმე კარგი კოდი:

www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)##Sample_Code

დაამატეთ ეს კოდი დაყენებამდე ():

// განსაზღვრეთ პანელისა და ღილაკების მიერ გამოყენებული ზოგიერთი მნიშვნელობა

int lcd_key = 0; int adc_key_in = 0; #განსაზღვრეთ btnRIGHT 0 #განსაზღვრეთ btnUP 1 #განსაზღვრეთ btnDOWN 2 #განსაზღვრეთ btnLEFT 3 #განსაზღვრეთ btn აირჩიეთ 4 #განსაზღვრეთ btn არცერთი 5 // წაიკითხეთ ღილაკები int read_LCD_buttons () {adc_key_in = analogRead (0); // მნიშვნელობის წაკითხვა სენსორიდან // ჩემი ღილაკები წაკითხვისას ორიენტირებულია ამ ველებზე: 0, 144, 329, 504, 741 // ჩვენ ვამატებთ დაახლოებით 50 ამ მნიშვნელობებს და ვამოწმებთ ახლოს ვართ თუ არა (adc_key_in> 1000) დააბრუნე არავინაა; // ჩვენ ვაკეთებთ ამ პირველ ვარიანტს სიჩქარის მიზეზების გამო, რადგან ეს იქნება ყველაზე სავარაუდო შედეგი, თუ (adc_key_in <50) დაბრუნდება btnRIGHT; თუ (adc_key_in <250) დააბრუნე btnUP; if (adc_key_in <450) დაბრუნება btnDOWN; თუ (adc_key_in <650) დააბრუნეთ btnLEFT; თუ (adc_key_in <850) დააბრუნეთ btnSELECT; დააბრუნე არავინაა; // როდესაც ყველა სხვა ვერ მოხერხდება, დააბრუნე ეს …}

სიმაღლე ჩვეულებრივ ნულოვანია საწყის წერტილში. ასე რომ, ჩვენ გვჭირდება ცვლადები სიმაღლისა და მითითებისთვის. დაამატეთ ეს დაყენებამდე () და ზემოთ ფუნქცია:

float mtr;

float ref = 0;

პასკალში წნევადან მეტრზე გადაყვანა თითქმის ზუსტად იყოფა ზღვის დონეზე 12 -ზე. ეს ფორმულა შესაფერისია უმეტეს გაზომვებისთვის. არსებობს უფრო ზუსტი ფორმულები, რომლებიც უფრო შესაფერისია მაღალ სიმაღლეებზე გადასაყვანად. გამოიყენეთ ეს, თუ თქვენ აპირებთ ამის გამოყენებას ბუშტის ფრენის სიმაღლეზე.

მითითება უნდა იყოს მითითებული პირველი წნევის კითხვაზე, ასე რომ ჩვენ ვიწყებთ ნულოვან სიმაღლეზე და როდესაც SELECT ღილაკს დაჭერით. დაამატეთ ფილტრის კოდის შემდეგ და Serial.println განცხადებამდე:

თუ (ref == 0) {

ref = გაფილტრული/12.0; } if (read_LCD_buttons () == btnSELECT) {ref = გაფილტრული/12.0; }

ამის შემდეგ დაამატეთ სიმაღლის გაანგარიშება:

mtr = ref - გაფილტრული/12.0;

ბოლოს შეცვალეთ Serial.println განცხადება, რომ გაგზავნოთ „mtr“ნაცვლად „გაფილტრული“და დაამატეთ კოდი „mtr“LCD– ზე გასაგზავნად:

Serial.println (mtr); // ზეწოლის გაგზავნა სერიული საშუალებით (UART)

lcd.setCursor (0, 1); // სტრიქონი 2 lcd.print (mtr);

აქ ყველა ცვლილება შედის მაგალითში MS5611data2lcd. ჩატვირთეთ ეს, როგორც მე –2 ნაბიჯში.

არსებობს ერთი ბოლო მოდა, რომელიც გამოსადეგია. ეკრანის წაკითხვა ძნელია, როდესაც ის წამში 60 -ჯერ განახლდება. ჩვენი ფილტრი ათანაბრებს მონაცემებს დროის მუდმივობით დაახლოებით 0.8 წმ. ასე რომ, ჩვენების განახლება ყოველ 0.3 წამში საკმაოდ საკმარისი ჩანს.

ასე რომ დაამატეთ მრიცხველი ესკიზის დასაწყისში ყველა სხვა ცვლადი განმარტების შემდეგ (მაგ. Float ref = 0;):

int i = 0;

შემდეგ დაამატეთ კოდი დამატებით 'i' და 'if' განაცხადში, როდესაც ის 20 -ს მიაღწევს და შემდეგ დააბრუნეთ ის ნულამდე და გადაიტანეთ სერიული და lcd ბრძანებები 'if' განცხადებაში, ასე რომ ეს მხოლოდ მე -20 მოსმენითაა შესრულებული:

i += 1;

if (i> = 20) {Serial.println (mtr); // ზეწოლის გაგზავნა სერიული (UART) lcd.setCursor (0, 1) საშუალებით; // სტრიქონი 2 lcd.print (mtr); i = 0; }

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

ამ პროექტმა უნდა მისცეს კარგი საწყისი წერტილი, მაგალითად ციფრული ბარომეტრისთვის. მათთვის, ვისაც სურს განიხილოს RC მოდელებში გამოყენება - მოძებნეთ OpenXvario კოდი, რომელიც საშუალებას აძლევს სიმაღლეზე და ვარიომეტრზე Frsky და Turnigy 9x ტელემეტრიული სისტემებისთვის.

გირჩევთ: