Агуулгын хүснэгт:

Arduino агаар мандлын соронзон хальсны хэмжүүр/ MS5611 GY63 GY86 Жагсаал: 4 алхам (зурагтай)
Arduino агаар мандлын соронзон хальсны хэмжүүр/ MS5611 GY63 GY86 Жагсаал: 4 алхам (зурагтай)

Видео: Arduino агаар мандлын соронзон хальсны хэмжүүр/ MS5611 GY63 GY86 Жагсаал: 4 алхам (зурагтай)

Видео: Arduino агаар мандлын соронзон хальсны хэмжүүр/ MS5611 GY63 GY86 Жагсаал: 4 алхам (зурагтай)
Видео: Алхамт хөдөлгүүрийн ажиллах зарчим 2024, Оны зургадугаар сарын
Anonim
Arduino агаар мандлын соронзон хальсны хэмжилт/ MS5611 GY63 GY86 жагсаал
Arduino агаар мандлын соронзон хальсны хэмжилт/ MS5611 GY63 GY86 жагсаал

Энэ бол үнэхээр барометр/өндөр хэмжигч боловч та видеог үзээд гарчигны шалтгааныг олж мэдэх болно.

MS5611 даралт мэдрэгч нь Arduino GY63 ба GY86 таслагч самбар дээр байрладаг бөгөөд гайхалтай гүйцэтгэлийг өгдөг. Амар тайван өдөр энэ нь таны өндрийг 0.2м дотор хэмжих болно. Энэ нь таны толгойноос огторгуй хүртэлх зайг үр дүнтэй хэмжиж, хөлийнхөө зайнаас огторгуй хүртэлх зайгаа хасах явдал юм (даралтыг хэмжих нь дээрх агаарын жин юм). Энэхүү гайхалтай төхөөрөмж нь Эверестийн өндрийг тухтай хэмжих хүрээтэй бөгөөд хэдхэн инч хүртэл хэмжих боломжтой юм.

Энэхүү төсөл нь дараахь зорилготой байв: сургуулийн төсөл, Arduino кодыг өөрчлөх жишээ, MS5611 мэдрэгч ашиглан судлах сайн эхлэл. Энэхүү мэдрэгчтэй ажиллахад бэрхшээлтэй байгаа хүмүүсийн форумын олон асуултууд байдаг. Энд байгаа арга нь үүнийг ашиглахад маш хялбар болгодог. Энэ төслийг хийсний дараа та даралттай холбоотой бусад програмуудыг хөгжүүлэхэд сайн тоноглогдсон болно.

Мэдрэгч бүр өөрийн тохируулгын тогтмолтой байдаг бөгөөд өгөгдлийг засахын тулд үүнийг уншиж, ашиглах шаардлагатай байдаг. Эдгээрийг удирдахад туслах номын сан байдаг. Энд үзүүлсэн код нь номын санг ашиглан уншиж, дараа нь өндөр болгон хөрвүүлж, LCD бамбай дээр харуулна.

Эхлээд бид өгөгдлийг PC/зөөврийн компьютер дээрх цуваа монитор руу илгээж, анхны туршилтыг явуулна. Эдгээр нь чимээ шуугиан үүсгэдэг тул бид тэдгээрийг арилгахын тулд шүүлтүүр нэмдэг. Дараа нь бид LCD дэлгэц нэмэх бөгөөд ингэснээр төхөөрөмж бие даан ажиллах боломжтой бөгөөд та өндрөө эсвэл бусад зүйлийг хэмжихийг оролдож болно.

GY63 самбар нь MS5611 даралт мэдрэгчтэй болохыг анхаарна уу. GY86 -ийг 10 градусын эрх чөлөөний самбар гэж нэрлэдэг бөгөөд 3 тэнхлэгт акселерометр, 3 тэнхлэгт гиро, 3 тэнхлэгт соронзон хэмжигчийг хэдхэн доллараар худалдаж авдаг.

Танд хэрэгтэй болно:

1. Arduino UNO (эсвэл бусад стандарт холбогчтой) ба түүний USB кабель

2. GY63 таслах самбар эсвэл GY86

3. 4 Дюпон эрэгтэй, эмэгтэй - эсвэл холбох утсыг удирддаг

4. Arduino LCD товчлуурын бамбай

5. 9в батерей ба хар тугалга

6. 2.54 мм залгууртай тууз (заавал биш боловч санал болгож байна)

Бэлтгэл

Arduino IDE (хөгжүүлэлтийн нэгдсэн орчин) -ыг татаж авах:

Сонирхлын үүднээс зарим техникийн битүүд

MS5611 нь олон тооны хэмжилтийг дунджаар хийснээр гайхалтай гүйцэтгэлийг үзүүлдэг. Энэ нь 4096 3 байт (24 бит) аналог хэмжилтийг ердөө 8 м -ийн дотор хийж, дундаж утгыг өгөх боломжтой. Энэ нь даралт ба температурыг хэмжих ёстой бөгөөд ингэснээр даралтын өгөгдлийг дотоод температурт тохируулж болно. Тиймээс секундэд 60 хос даралт, температурын уншилт өгөх боломжтой.

Мэдээллийн хуудсыг дараах хаягаар авах боломжтой:

Харилцаа холбоо нь I2C -ээр дамждаг. Тиймээс бусад I2C мэдрэгч нь автобусыг хуваалцах боломжтой (бүх чипүүд I2C дээр байдаг GY86 10DOF самбар дээрх шиг).

Алхам 1: MS5611 номын сан авах

Arduino -ийн олон мэдрэгч нь Arduino IDE -д багтсан стандарт номын санг ашигладаг эсвэл номын сантай зип файлаар хангадаг. Энэ нь MS5611 мэдрэгчийн хувьд тийм биш юм. Гэсэн хэдий ч хайлтыг олсон: https://github.com/gronat/MS5611, MS5611 -ийн номын сантай бөгөөд үүнд температурын залруулга хийх боломжтой.

Сонголт 1

Дээрх вэбсайт руу ороод "Clone or Download" дээр дараад "ZIP татаж авах" -ыг сонгоно уу. Энэ нь MS5611-master.zip-ийг таны татаж авах лавлах руу хүргэх ёстой. Хэрэв та хүсвэл үүнийг ирээдүйд олох боломжтой хавтас руу зөөнө үү. Би Arduino фолдерууд дээрээ нэмсэн 'өгөгдөл' гэсэн лавлахыг ашигладаг.

Харамсалтай нь татаж авсан.zip файлд ямар ч ноорог байдаггүй бөгөөд номын сан болон жишээг Arduino IDE -д нэмэхэд таатай байх болно. README.md файлд ноорог хэлбэрээр хуулж хадгалж болох хамгийн бага жишээ бий. Энэ бол урагшлах нэг арга юм.

Сонголт 2

Энэхүү зааварчилгааны кодыг ажиллуулахад хялбар болгохын тулд би дээрх хамгийн бага жишээ болон энд үзүүлсэн жишээг номын санд нэмж, доорхи.zip файлыг Arduino IDE -д суулгах болно.

Доорх zip файлыг татаж аваарай. Хэрэв та хүсвэл үүнийг илүү сайн хавтас руу зөөнө үү.

Arduino IDE -ийг ажиллуулна уу. Ноорог> Номын санг оруулах> Зип файл нэмэх дээр дарж файлыг сонгоно уу. IDE -г дахин эхлүүлнэ үү. IDE одоо хоёуланд нь номын сан суулгаж, энд үзүүлсэн бүх жишээг авах болно. Файл> жишээ >> MS5611-мастер дээр дарж шалгана уу. Гурван ноорог жагсаасан байх ёстой.

Алхам 2: Мэдрэгчийг Arduino руу холбож, туршина уу

Мэдрэгчийг Arduino руу холбож, туршина уу
Мэдрэгчийг Arduino руу холбож, туршина уу
Мэдрэгчийг Arduino руу холбож, туршина уу
Мэдрэгчийг Arduino руу холбож, туршина уу

GY63/GY86 хавтангууд нь ихэвчлэн толгойтой ирдэг боловч гагнахгүй. Толгойнуудыг гагнах, эрэгтэй эмэгтэй Dupont утас ашиглах, эсвэл (миний шийдсэнчлэн) гагнуурыг шууд самбар дээр байрлуулж, Arduino-д залгахын тулд тугалган дээр зүү нэмэх нь таны сонголт юм. Хэрэв та дараа нь самбарыг төсөл дээр гагнах хүсэлтэй байж магадгүй гэж бодож байвал сүүлчийн сонголт нь илүү дээр юм. Хэрэв та самбарыг туршилтанд ашиглахыг хүсч байвал эхнийх нь илүү дээр юм. Гагнуурыг гагнах нь зүү толгойноос хамаагүй хялбар юм.

Шаардлагатай холболтууд нь:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C цаг> SDA - A4 I2C өгөгдөл

Дээрх шиг Arduino -д мэдрэгч самбарыг холбож, USB залгуураар дамжуулан Arduino -г компьютер/зөөврийн компьютерт холбоно уу. Мөн мэдрэгчийг тунгалаг бус/хар материалаар бүрхэнэ. Мэдрэгч нь гэрэлд мэдрэмтгий байдаг (энэ төрлийн ихэнх мэдрэгчийн адил).

Arduino IDE -ийг ажиллуулна уу. Дарна уу:

Файл> жишээ >> MS5611-мастер> MS5611data2serial.

IDE -ийн шинэ жишээ ноорогоор гарч ирнэ. Байршуулах товчийг дарна уу (баруун сум).

Дараа нь цуваа плоттерыг эхлүүлнэ үү - Tools> Serial Plotter дээр дарж, шаардлагатай бол baud -ийг 9600 болгож тохируулна уу. Илгээж буй өгөгдөл нь Паскал дахь даралт юм. Хэдэн секундын дараа мэдрэгчийг дахин хэмжиж, 0.3 м-ээр дээшлүүлж, багасгах нь ул мөрийг бууруулж, өсгөж байгааг харуулах ёстой (доод өндөр нь өндөр даралт).

Өгөгдөл нь бага зэрэг дуу чимээтэй байдаг. Дээрх эхний хэсгийг үзнэ үү. Үүнийг тоон шүүлтүүр (үнэхээр хэрэгтэй хэрэгсэл) ашиглан тэгшлэх боломжтой.

Шүүлтүүрийн тэгшитгэл нь:

утга = утга + K (шинэ утга)

энд "утга" нь шүүсэн өгөгдөл, "шинэ" нь хамгийн сүүлийн хэмжигдэхүүн юм. Хэрэв K = 1 бол шүүлтүүр байхгүй болно. K -ийн бага утгуудын хувьд өгөгдлийг T/K -ийн тогтмол тогтмолоор тэгшитгэдэг бол T нь дээжийн хоорондох хугацаа юм. Энд T нь 17ms орчим байдаг тул 0.1 -ийн утга нь 170ms буюу 1/6s орчим хугацааны тогтмолыг өгдөг.

Шүүлтүүрийг дараах байдлаар нэмж болно.

Тохируулахаас өмнө шүүсэн өгөгдөлд хувьсагч нэмнэ үү ():

float шүүсэн = 0;

Дараа нь даралтын дараа шүүлтүүрийн тэгшитгэлийг нэмнэ үү ……. шугам

шүүсэн = шүүсэн + 0.1*(даралтаар шүүсэн);

Шүүлтүүрийн утгыг эхний уншлагад оруулах нь зүйтэй юм. Дээрх шугамын эргэн тойронд 'if' гэсэн мэдэгдэл нэмж оруулаарай.

хэрэв (шүүсэн! = 0) {

шүүсэн = шүүсэн + 0.1*(даралтаар шүүсэн); } өөр {шүүсэн = даралт; // анхны уншлагыг шүүж уншихаар тохируулсан болно}

Туршилт '! =' Нь "тэнцүү биш" байна. Тиймээс хэрэв "шүүсэн" нь 0 -тэй тэнцүү биш бол шүүлтүүрийн тэгшитгэлийг гүйцэтгэнэ, гэхдээ хэрэв тийм бол даралтын уншилтанд тохируулна.

Эцэст нь бид Serial.println мэдэгдэлд "даралтыг" "шүүсэн" болгож өөрчлөх хэрэгтэй бөгөөд ингэснээр шүүгдсэн утгыг харж болно.

Дээрх өөрчлөлтүүдийг гараар хийснээр хамгийн сайн суралцах боломжтой болно. Гэхдээ би эдгээрийг MS5611data2serialWfilter жишээнд оруулсан болно. Хэрэв асуудал гарвал жишээг ачаалж болно.

Одоо кодыг Arduino руу оруулаад сайжруулалтыг үзээрэй. Дээрх хоёр дахь хэсгийг үзээд Y масштаб x2 томорсон болохыг анхаарна уу.

Шүүлтүүрийн тогтмол утгын доод утгыг туршиж үзээд 0.1 -ийн оронд 0.02 гэж хэлээд ялгааг нь хараарай. Өгөгдөл нь илүү зөөлөн боловч илүү удаан хариу үйлдэл үзүүлдэг. Энэ бол энэхүү энгийн шүүлтүүрийг ашиглахдаа хайх ёстой буулт юм. Онцлог нь электрон хэлхээнд өргөн хэрэглэгддэг RC (эсэргүүцэл ба багтаамж) шүүлтүүртэй адил юм.

Алхам 3: Үүнийг дангаар нь хий

Одоо бид LCD товчлуурын бамбай нэмж, даралтыг метрээр өндөр болгож, дэлгэц дээр харуулна. Бид мөн "Сонгох" товчлуурыг дарж утгыг тэглэх чадварыг нэмэх болно.

LCD бамбай Arduino дээр байгаа бол мэдрэгчийг LCD бамбай руу холбох шаардлагатай болно. Харамсалтай нь LCD бамбай нь ихэвчлэн зохих залгуургүй ирдэг. Тиймээс сонголтууд нь гагнуурын холболт хийх эсвэл залгуур авах явдал юм. Залгуурын зурвасыг ebay дээр шуудангийн үнээс хэтрэхгүй үнээр авах боломжтой. '2.54mm сокет тууз' дээр хайлт хийж, Arduino дээрхтэй ижил төстэй хэсгийг хайж олоорой. Эдгээр нь ихэвчлэн 36 эсвэл 40 зүү урттай байдаг. Дупонтын стандарт утаснуудын хувьд хангалттай гүн биш тул би эргэсэн зүүгээс зайлсхийх болно.

Залгуурын туузыг уртаар нь огтолж, зүсэлтийг зүүтэй ижил газарт хийх ёстой. Тиймээс 6 зүү бүхий туузны хувьд 7 -р зүүг хэд хэдэн нарийн бахө ашиглан арилгаж, дараа нь тэр газарт жижиг төмөр хусуур ашиглан хайчилж ав. Би тэдгээрийг цэгцтэй болгохын тулд төгсгөлүүдийг нь гаргаж өгдөг.

Самбар дээр гагнахдаа гагнуурын гүүр байхгүй эсэхийг шалгаарай.

Мэдрэгчийг холбох зохих шийдвэрийн дагуу LCD бамбайг Arduino -д залгаж, мэдрэгчийг ижил зүүгээр холбоно уу, гэхдээ одоо LCD бамбай дээр.

Мөн батерей болон тугалга бэлэн болно. Би хог хаягдлын хайрцган дахь хэсгүүдээс хар тугалга хийсэн боловч тэдгээрийг ebay дээрээс авах боломжтой бөгөөд үүнд батерейны хайрцаг, унтраалга багтсан сайхан сонголт багтсан болно. 'PP3 2.1 мм тугалга' -аас хайна уу.

Одоогийн хэрэглээ ойролцоогоор 80 м байна. Тиймээс, хэрэв та хэдэн минутаас илүү удаан ажиллахыг хүсч байвал PP3 -ээс 9V илүү том батерейг бодоорой.

Алхам 4: Өндөр болон LCD дэлгэцийн кодыг нэмнэ үү

Image
Image

Даралтыг өндөр болгож хөрвүүлэхийн тулд бид жаахан илүү кодлох хэрэгтэй.

Ноорогны эхэнд дэлгэцийн санг нэмж, ямар тээглүүр ашигладаг болохыг хэлнэ үү.

#оруулах

// номын санг LiquidCrystal lcd (8, 9, 4, 5, 6, 7) интерфэйсийн зүү тоогоор эхлүүлэх;

Дараа нь бидэнд товчлуурын товчлууруудыг уншихын тулд зарим хувьсагч, функц хэрэгтэй болно. Эдгээр нь бүгд A0 аналог оролтонд холбогдсон байна. Товчлуур бүр A0 -д өөр өөр хүчдэл өгдөг. "Arduino lcd shield button code" дээр хийсэн хайлт дээр дараах хэдэн сайн кодыг олсон.

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

Тохируулахын өмнө энэ кодыг нэмнэ үү ():

// самбар болон товчлууруудын ашигладаг зарим утгыг тодорхойлох

int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #debine btnUP 1 #detine btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #detine btnNONE 5 // // int read_LCD_buttons () {adc_key_in = analogRead (0); // мэдрэгчийн утгыг уншина уу // унших үед миний товчлуурууд эдгээр хөндийд төвлөрдөг: 0, 144, 329, 504, 741 // бид эдгээр утгуудад ойролцоогоор 50 -г нэмээд ойрхон байгаа эсэхийг шалгана уу (adc_key_in> 1000) буцах btnNONE; // Бид үүнийг хурдны шалтгаанаар 1 -р сонголт болгож байна, учир нь (adc_key_in <50) btnRIGHT буцаах тохиолдолд хамгийн их үр дүн гарах болно. if (adc_key_in <250) btnUP буцаана; if (adc_key_in <450) btnDOWN буцах; хэрэв (adc_key_in <650) btnLEFT буцаана; if (adc_key_in <850) btnSELECT буцах; буцах btnNONE; // бусад бүх зүйл бүтэлгүйтсэн тохиолдолд үүнийг буцааж өгнө үү …}

Өндөрийг ихэвчлэн эхлэх цэг дээр тэглэнэ. Тиймээс бидэнд өндөр ба лавлагааны аль алинд нь хувьсагч хэрэгтэй. Тохиргоо () болон дээрх функцийг хийхийн өмнө эдгээрийг нэмнэ үү.

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" илгээхээр өөрчилж, LCD рүү "mtr" илгээх кодыг нэмнэ үү.

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 болгож нэмэгдүүлсний дараа кодыг нэмээд тэг рүү буцааж тохируулаад Serial болон lcd командыг 'if' мэдэгдэлд шилжүүлээрэй.

i += 1;

if (i> = 20) {Serial.println (mtr); // Даралтыг цуваа (UART) lcd.setCursor (0, 1) -ээр дамжуулах; // мөр 2 lcd.print (mtr); би = 0; }

Сургалтанд туслах кодыг гараар оруулахыг уриалахын тулд би энэхүү сүүлийн өөрчлөлтийн жишээг оруулаагүй болно.

Энэ төсөл нь дижитал барометрийн сайн эхлэлийг өгөх ёстой. RC загварт ашиглахыг хүсч буй хүмүүсийн хувьд Frsky болон Turnigy 9x телеметрийн системийн өндөр хэмжигч ба вариометрийг идэвхжүүлэх кодыг OpenXvario -оос хайж олоорой.

Зөвлөмж болгож буй: