Мазмуну:

Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 Демонстрация: 4 кадам (Сүрөттөр менен)
Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 Демонстрация: 4 кадам (Сүрөттөр менен)

Video: Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 Демонстрация: 4 кадам (Сүрөттөр менен)

Video: Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 Демонстрация: 4 кадам (Сүрөттөр менен)
Video: ҰБТ-ға дайындық. География пәнінен ҰБТ-да кездесетін есептерді шешу. 2024, Июль
Anonim
Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 демонстрация
Arduino атмосфералык лента чарасы/ MS5611 GY63 GY86 демонстрация

Бул чындыгында барометр/бийиктиги, бирок видеону карап аталышынын себебин көрөсүз.

MS5611 басым сенсору, Arduino GY63 жана GY86 сынык такталарында, укмуштуудай аткарууну камсыз кылат. Тынч күнү ал сиздин боюңузду 0,2 мге чейин өлчөйт. Бул сиздин башыңыздан космоско чейинки аралыкты эффективдүү өлчөө жана аны бутуңуздан космоско чейин азайтуу (басымды өлчөө менен - бул абанын салмагы). Бул укмуштуудай аппарат Эвересттин бийиктигин ыңгайлуу өлчөй турган диапазонго ээ - ошондой эле бир нече дюймга чейин өлчөй алат.

Бул долбоор төмөнкүдөй багытталган: мектеп долбоору, Arduino кодун өзгөртүү мисалы жана MS5611 сенсорунун жардамы менен изилдөө үчүн жакшы башталгыч жер. Бул сенсор менен кыйынчылыкка туш болгондордун көптөгөн форум суроолору бар. Бул жердеги мамиле аны колдонууну абдан оңой кылат. Бул долбоорду аткаргандан кийин сиз башка кысымга байланышкан тиркемелерди иштеп чыгуу үчүн жабдылган болосуз.

Ар бир сенсордун өз калибрлөө константалары бар, аларды окуу жана маалыматтарды тууралоо үчүн колдонуу керек. Буларды башкарууга жардам бере турган китепкана бар. Бул жерде көрсөтүлгөн код окуу китепканасын колдонот, андан кийин аларды бийиктикке айландырат жана ЖК калканчында көрсөтөт.

Биринчиден, биз маалыматтарды баштапкы тесттер үчүн PC/ноутбуктун сериялык мониторуна жөнөтөбүз. Булар кандайдыр бир ызы -чууну көрсөтөт, ошондуктан биз аларды тегиздөө үчүн чыпканы кошобуз. Андан кийин биз LCD дисплейди кошобуз, ошондо блок өз алдынча иштей алат жана сиз өзүңүздүн бийиктигиңизди же башка нерсени өлчөп көрүңүз.

Эскертүү GY63 тактасында MS5611 басым сенсору бар. GY86 эркиндиктин 10 даражасы деп аталат, ошондой эле 3 огунун акселерометрин, 3 огунун гиросун жана 3 огунун магнитометрин дагы бир нече долларга камтыйт.

Сага керек болот:

1. Arduino UNO (же стандарттуу pinout менен башка) жана анын USB кабели

2. GY63 үзүлүү тактасы же GY86

3. 4 Дюпон эркек -ургаачы - же туташтыруучу зымды алып барат

4. Arduino LCD клавиатура калканы

5. 9v батарея жана коргошун

6. 2.54мм розетка (милдеттүү эмес, бирок сунушталат)

Даярдоо

Arduino IDEди (интеграцияланган өнүктүрүү чөйрөсү) жүктөп алыңыз:

Кызыгуу үчүн кээ бир техникалык биттер

MS5611 көптөгөн көрсөткүчтөрдү орточо эсепке алуу менен өзүнүн эң сонун аткарылышын камсыздайт. Ал 4096 3 байт (24 бит) аналогдук өлчөөнү 8 мс ичинде жасай алат жана орточо маанини берет. Ал басымдын температурасын да, температурасын да өлчөшү керек, андыктан басымдын маалыматын ички температурага туураласа болот. Ошентип, ал секундасына болжол менен 60 жуп басым жана температура көрсөткүчтөрүн жеткире алат.

Маалымат баракчасы бул жерде жеткиликтүү:

Байланыш I2C аркылуу болот. Ошентип, башка I2C сенсорлору автобусту бөлүшө алышат (GY86 10DOF тактасында болгон сыяктуу, анда бардык чиптер I2Cде).

1 -кадам: MS5611 китепканасын алыңыз

Arduino сенсорлорунун көбү же Arduino IDE менен камтылган стандарттык китепкананы колдонушат же оңой орнотула турган китепканасы бар zip файлы менен камсыз болушат. Бул MS5611 сенсорлору үчүн андай эмес. Бирок издөө табылды: https://github.com/gronat/MS5611, анда MS5611 үчүн китепкана бар, анын ичинде температураны оңдоо.

Option 1

Жогорудагы веб -сайтка өтүңүз, "Клонировать же Жүктөө" баскычын чыкылдатыңыз жана "ZIP жүктөп алууну" тандаңыз. Бул MS5611-master.zipди сиздин жүктөө каталогуна жеткириши керек. Эми, эгер кааласаңыз, аны келечекте таба турган папкага жылдырыңыз. Мен Arduino папкаларыма кошулган "маалыматтар" деп аталган каталогду колдоном.

Тилекке каршы, жүктөлгөн.zip файлы эч кандай мисал эскиздерди камтыбайт жана китепкананы жана мисалдарды Arduino IDEге кошуу жакшы болмок. README.md файлында эскизге көчүрүлүп, чаптала турган жана сактала турган минималдуу мисал бар. Бул кетүүнүн бир жолу.

Опция 2

Бул нускамада кодду иштетүүнү жеңилдетүү үчүн мен жогорудагы минималдуу мисалды жана бул жерде көрсөтүлгөн мисалдарды китепканага коштум жана төмөндө.zip файлын тиркеп койдум, ал Arduino IDEге орнотулат.

Төмөндөгү zip файлын жүктөп алыңыз. Кааласаңыз, муну жакшыраак папкага жылдырыңыз.

Arduino IDE баштаңыз. Эскиз> Китепкананы кошуу> ZIP файлын кошуу жана файлды тандоо. IDEди кайра жүктөө. Эми IDEде экөө тең китепкана орнотулат жана бул жерде көрсөтүлгөн бардык мисалдар болот. Файл> мисалдар >> MS5611-мастерди басып текшериңиз. Үч эскиз тизмелениши керек.

2 -кадам: Сенсорду Arduino менен туташтырып, текшериңиз

Сенсорду Arduino менен туташтырып, сынап көрүңүз
Сенсорду Arduino менен туташтырып, сынап көрүңүз
Сенсорду Arduino менен туташтырып, сынап көрүңүз
Сенсорду Arduino менен туташтырып, сынап көрүңүз

GY63/GY86 тактайлары көбүнчө аталыштар менен келет, бирок ширетилбейт. Демек, сиз баштыктарды ордуна коюп, эркек-ургаачы Дюпон жетектерин колдонууңузду чечесиз, же (мен чечкендей) ширеткичти тактайга алып келип, Arduino'го туташтыруу үчүн коргонго казыктарды кошуңуз. Акыркы вариант, эгер сиз кийинчерээк тактайга долбоорго кошууну кааласаңыз жакшы болот. Эгер эксперимент үчүн тактаны колдонууну кааласаңыз, мурунку жакшы. Жетекчилерди сатпоо пин башына караганда алда канча оңой.

Керектүү байланыштар:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C сааты> SDA - A4 I2C маалыматтары

Сенсордук тактаны жогоруда көрсөтүлгөндөй Arduino -га тиркеп, Arduino -ны USB кабели аркылуу PC/ноутбукка туташтырыңыз. Ошондой эле сенсорду тунук эмес/кара материал менен жаап коюңуз. Сенсор жарыкка сезгич (бул типтеги сенсорлордун көбүндө болгон сыяктуу).

Arduino IDE баштаңыз. Чыкылдатыңыз:

Файл> мисалдар >> MS5611-мастер> MS5611data2serial.

Эскиз менен IDEнин жаңы үлгүсү пайда болот. Жүктөө баскычын чыкылдатыңыз (оң жебе).

Андан кийин сериялык плоттер башталат - Tools> Serial Plotter баскычын чыкылдатыңыз жана эгер керек болсо, бауды 9600 деп коюңуз. Берилүүчү маалыматтар Паскаль тилиндеги басым. Бир секундан кийин сенсорду кайра масштабдаштырып, көтөрүп же түшүрүп, изди төмөндөтүү жана көтөрүү катары көрсөтүү керек (төмөнкү бийиктик-жогору басым).

Маалыматтарда кандайдыр бир ызы -чуу бар. Биринчи сюжетти караңыз. Бул санарип чыпканын жардамы менен тегизделиши мүмкүн (чындап эле пайдалуу курал).

Чыпка теңдемеси:

мааниси = мааниси + K (жаңы мааниси)

бул жерде "маани" - чыпкаланган маалымат, ал эми "жаңы" - эң акыркы өлчөнгөн маалымат. Эгерде K = 1 чыпкасы жок болсо. К -тин төмөнкү баалуулуктары үчүн маалыматтар T/K туруктуу убактысы менен тегизделет, мында T - үлгүлөрдүн ортосундагы убакыт. Бул жерде T болжол менен 17 мс, андыктан 0,1 мааниси убакыттын константасын 170 мс же 1/6с айланасында берет.

Чыпканы кошууга болот:

Орнотуудан мурун чыпкаланган маалыматтар үчүн өзгөрмөнү кошуңуз ():

сүзүлгөн сүзгүч = 0;

Андан кийин = = басымынан кийин чыпка теңдемесин кошуңуз. сызык

чыпкаланган = чыпкаланган + 0,1*(басым менен чыпкаланган);

Фильтрленген маанини биринчи окууга баштоо жакшы идея. Ошентип, жогорудагы сызыктын айланасына 'if' билдирүүсүн кошуңуз, ал окшош:

эгер (чыпкаланган! = 0) {

чыпкаланган = чыпкаланган + 0,1*(басым менен чыпкаланган); } башка {чыпкаланган = басым; // биринчи окуу ушунчалык чыпкаланган бойдон}

Тест "! =" "Барабар эмес". Ошентип, эгер "чыпкаланган" 0ге барабар болбосо, чыпка теңдемеси аткарылат, бирок эгерде ал басымдын көрсөткүчүнө коюлса.

Акырында, Serial.println билдирүүсүндө "кысымды" "чыпкаланган" деп өзгөртүүбүз керек, андыктан чыпкаланган маанини көрөбүз.

Мыкты үйрөнүү жогоруда өзгөртүүлөрдү кол менен жасоо аркылуу ишке ашат. Бирок мен муну MS5611data2serialWfilter мисалына коштум. Ошентип, көйгөйлөр болсо, мисалды жүктөөгө болот.

Эми кодду Arduinoго жүктөп, жакшыртылганын көрүңүз. Жогорудагы экинчи участокту караңыз жана Y шкаласы x2 кеңейтилгенине көңүл буруңуз.

Чыпка константасы үчүн төмөн маанини байкап көрүңүз, 0,1дин ордуна 0,02 деп айтыңыз жана айырманы көрүңүз. Маалыматтар жылмакай, бирок жайыраак жооп менен. Бул бул жөнөкөй чыпканы колдонууда изделиши керек болгон компромисс. Мүнөздөмө электрондук схемаларда кеңири колдонулган RC (каршылык жана сыйымдуулук) чыпкасы менен бирдей.

3 -кадам: Аны өз алдынча кылуу

Эми биз LCD баскыч панелин кошуп, басымды метрге бийиктикке айлантып, дисплейде көрсөтөбүз. Биз ошондой эле "Тандоо" баскычын басуу менен маанини нөлгө салуу мүмкүнчүлүгүн кошобуз.

Arduinoдогу ЖК калканы менен сенсор ЖК калканчына туташтырылышы керек. Тилекке каршы, ЖК калканчтары, адатта, тиешелүү оюгу жок келет. Ошентип, варианттар ширетүүчү байланыштарды жасоо же розетканы алуу. Socket strip ebayде почтанын баасынан көп эмес. "2.54мм розеткада" издеп, Arduinoдогу окшошторун издеңиз. Булар адатта 36 же 40 пин узундугу менен келет. Мен бурулган төөнөгүчтөрдөн оолак болмокмун, анткени алар стандарттык Дюпон жетектери үчүн терең эмес.

Розетка тилкеси узундугуна чейин кесилиши керек жана кесүү кадалган жерде жасалышы керек. Ошентип, 6 -пин тилкеси үчүн - 7 -пинди майда кычкачтар менен алып салыңыз, андан кийин ошол жерден кенже темир уста менен кесип алыңыз. Мен аларды тыкан кылуу үчүн учтарын тапшырам.

Тактайга ширетүүдө эч кандай көпүрөлөр жок экенин текшериңиз.

Сенсорду туташтыруу боюнча тиешелүү чечим менен ЖК калканчын Arduinoго сайыңыз жана сенсорду ошол эле казыктарга туташтырыңыз - бирок азыр ЖК калканчында.

Ошондой эле батарейканы жана коргошунду даярдаңыз. Мен өзүмдүн коргошунду урналарымдагы бөлүктөрдөн түздүм, бирок алар ebayда да бар - батарейканын кутусун жана которгучту камтыган жакшы вариант. "PP3 2.1мм коргошун" издөө.

Учурдагы керектөө 80ma тегерегинде. Демек, эгер сиз бир нече мүнөттөн ашык иштөөнү кааласаңыз, PP3 караганда 9v чоңураак батареяны карап көрүңүз.

4 -кадам: Бийиктиктин жана ЖКнын кодун кошуңуз

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; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // // read readLCD_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 кайтаруу; if (adc_key_in <650) btnLEFT кайтаруу; if (adc_key_in <850) btnSELECT кайтаруу; return 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;

Андан кийин кодду 20га жеткенде иштетүү үчүн 'i' жана 'if' билдирүүсүн кошуңуз, андан кийин аны нөлгө кайтарыңыз жана Serial жана lcd буйруктарын 'if' билдирүүсүнүн ичинде жылдырыңыз, андыктан булар ар бир 20 -окууда гана аткарылат:

i += 1;

if (i> = 20) {Serial.println (mtr); // Сериал (UART) lcd.setCursor (0, 1) аркылуу басым жөнөтүү; // 2 -сап lcd.print (mtr); i = 0; }

Мен кодду кол менен киргизүүгө түрткү берүү үчүн бул акыркы өзгөртүүнүн мисалын киргизген жокмун, бул үйрөнүүгө жардам берет.

Бул долбоор, мисалы, санарип барометр үчүн жакшы башталыш бериши керек. RC моделдеринде колдонууну ойлогусу келгендер үчүн - Frsky жана Turnigy 9x телеметрикалык системалары үчүн альтиметрди жана вариометрди иштетүүчү кодду OpenXvarioдон издеңиз.

Сунушталууда: