Мазмұны:

Arduino атмосфералық таспа шарасы/ MS5611 GY63 GY86 Демонстрация: 4 қадам (суреттермен)
Arduino атмосфералық таспа шарасы/ MS5611 GY63 GY86 Демонстрация: 4 қадам (суреттермен)

Бейне: Arduino атмосфералық таспа шарасы/ MS5611 GY63 GY86 Демонстрация: 4 қадам (суреттермен)

Бейне: Arduino атмосфералық таспа шарасы/ MS5611 GY63 GY86 Демонстрация: 4 қадам (суреттермен)
Бейне: Arduino негіздері қазақша курсы (25 сабақ - BMP180) Атмосфералық қысым. Барометр 2024, Шілде
Anonim
Arduino атмосфералық таспа өлшемі/ MS5611 GY63 GY86 демонстрациясы
Arduino атмосфералық таспа өлшемі/ MS5611 GY63 GY86 демонстрациясы

Бұл шын мәнінде барометр/биіктік өлшегіш, бірақ сіз бейнеден тақырыптың себебін көресіз.

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

Бұл жоба: мектеп жобасы, Arduino кодын өзгерту үлгісі және MS5611 сенсорының көмегімен зерттеу үшін жақсы бастама. Бұл сенсормен жұмыс жасауда қиындықтары бар адамдардың көптеген сұрақтары бар. Мұндағы тәсіл оны қолдануды өте қарапайым етеді. Бұл жобаны жасағаннан кейін сіз қысыммен байланысты басқа қосымшаларды әзірлеу үшін жақсы жабдықталған боласыз.

Әрбір сенсордың жеке калибрлеу тұрақтылары бар, оларды оқу және деректерді түзету үшін қолдану қажет. Оларды басқаруға көмектесетін кітапхана бар. Мұнда көрсетілген код оқуды алу үшін кітапхананы пайдаланады, содан кейін оларды биіктікке түрлендіреді және оларды LCD қалқанында көрсетеді.

Алдымен біз деректерді компьютерге/ноутбуктағы сериялық мониторға бастапқы сынақтар үшін жібереміз. Олар шу шығарады, сондықтан біз оларды тазарту үшін сүзгіні қосамыз. Содан кейін біз LCD дисплейді қосамыз, осылайша құрылғы дербес жұмыс істей алады және сіз өзіңіздің биіктігіңізді немесе басқа нәрсені өлшеп көре аласыз.

GY63 тақтасында MS5611 қысым сенсоры бар екенін ескеріңіз. GY86 10 градус еркіндік тақтасы деп аталады, сонымен қатар 3 осьті акселерометр, 3 осьті гиро және 3 осьті магнитометр бар, тек бірнеше долларға.

Саған қажет болады:

1. Arduino UNO (немесе басқа стандартты түйіспесі бар) және оның USB кабелі

2. GY63 үзіліс тақтасы немесе GY86

3. 4 Дюпон еркек -аналық - немесе қосушы сымды жүргізеді

4. Arduino СКД пернетақта қалқаны

5. 9в батарея мен сым

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 кітапханасы бар, оның ішінде температураны түзету.

1 -нұсқа

Жоғарыдағы веб -сайтқа өтіңіз, «Клондау немесе жүктеу» түймесін басып, «ZIP жүктеуді» таңдаңыз. Бұл MS5611-master.zip файлын жүктеу каталогына жеткізуі керек. Енді, егер қаласаңыз, оны болашақта таба алатын қалтаға жылжытыңыз. Мен Arduino қалталарына қосылған «деректер» деп аталатын каталогты қолданамын.

Өкінішке орай, жүктелген.zip файлында ешқандай мысалдар жоқ, сондықтан кітапхана мен мысалдарды Arduino IDE -ге қосу жақсы болар еді. README.md файлында нобайға көшіруге және қоюға және сақтауға болатын минималды мысал бар. Бұл іске кірісудің бір әдісі.

2 -нұсқа

Бұл нұсқаулықта кодты іске қосуды жеңілдету үшін мен жоғарыда келтірілген ең аз мысалды және мұнда көрсетілген мысалдарды кітапханаға қостым және төменде Arduino IDE -ге орнатылатын.zip файлын тіркедім.

Төмендегі zip файлын жүктеңіз. Қаласаңыз, оны жақсы қалтаға жылжытыңыз.

Arduino IDE іске қосыңыз. Эскиз> Кітапхананы қосу> zip файлын қосу түймешігін басып, файлды таңдаңыз. IDE қайта іске қосыңыз. Енді IDE екеуінде де кітапхана орнатылған, сонымен қатар мұнда көрсетілген барлық мысалдар болады. Файл> мысалдар >> MS5611-master түймесін басу арқылы тексеріңіз. Үш эскиз тізімделуі керек.

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 сымы арқылы қосыңыз. Сонымен қатар сенсорды мөлдір емес/қара материалмен жабыңыз. Сенсор жарыққа сезімтал (бұл сенсордың көпшілігінде сияқты).

Arduino IDE іске қосыңыз. Басыңыз:

Файл> мысалдар >> MS5611-master> MS5611data2serial.

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

Содан кейін сериялық плоттерді іске қосыңыз - Tools> Serial Plotter түймесін басыңыз және қажет болса, бауды 9600 -ге орнатыңыз. Жіберілетін деректер - Паскаль тіліндегі қысым. Бірнеше секундтан кейін ол сенсордың өлшемі 0,3 метрге көтеріліп, төмен түсуі іздің төмендеуі мен жоғарылауын көрсетуі керек (төменгі биіктік-жоғары қысым).

Деректерде біраз шу бар. Жоғарыдағы бірінші сюжетті қараңыз. Мұны сандық сүзгі көмегімен тегістеуге болады (шынымен пайдалы құрал).

Сүзгі теңдеуі:

мән = мән + K (жаңа мән)

мұнда «мән» - сүзілген деректер, ал «жаңа» - соңғы өлшенген. Егер K = 1 болса, сүзу болмайды. K -ның төменгі мәндері үшін деректер T/K уақыт тұрақтысымен тегістеледі, мұнда T - үлгілер арасындағы уақыт. Мұнда T шамамен 17 мс құрайды, сондықтан 0,1 мәні 170 мс немесе 1/6 сек уақыт тұрақтысын береді.

Сүзгіні келесі жолмен қосуға болады:

Орнату алдында сүзілген деректер үшін айнымалы қосыңыз ():

фильтрленген сүзгі = 0;

Содан кейін қысымнан кейін сүзгі теңдеуін қосыңыз …… түзу.

фильтрленген = сүзілген + 0,1*(қысыммен сүзілген);

Сүзілген мәнді бірінші оқылымға инициализациялау жақсы. Сонымен, жоғарыдағы жолдың айналасына 'if' операторын қосыңыз, ол келесідей көрінеді:

егер (сүзілген! = 0) {

сүзгіленген = сүзілген + 0,1*(қысыммен сүзілген); } else {сүзілген = қысым; // бірінші оқылым осылай сүзгіленіп оқылады}

«! =» Сынағы «тең емес». Егер «сүзілген» 0 -ге тең болмаса, сүзгі теңдеуі орындалады, бірақ егер ол болса, онда ол қысым көрсеткішіне орнатылады.

Ақырында, біз Serial.println мәлімдемесінде «қысымды» «сүзілгенге» өзгертуіміз керек, сондықтан біз сүзілген мәнді көреміз.

Ең жақсы оқу жоғарыдағы өзгерістерді қолмен енгізу арқылы жүзеге асады. Бірақ мен оларды MS5611data2serialWfilter мысалына қостым. Егер проблемалар туындаса, мысалды жүктеуге болады.

Енді кодты Arduino -ға жүктеп, жақсартуды көріңіз. Жоғарыдағы екінші сюжетті қараңыз және Y шкаласы x2 кеңейтілгенін ескеріңіз.

Сүзгі тұрақтысы үшін төмен мәнді қолданып көріңіз, 0,1 емес, 0,02 деп айтыңыз және айырмашылықты көріңіз. Деректер тегіс, бірақ баяу жауап береді. Бұл қарапайым сүзгіні пайдалану кезінде іздеу керек компромисс. Сипаттама электронды тізбектерде кеңінен қолданылатын RC (кедергі мен сыйымдылық) сүзгісімен бірдей.

3 -қадам: оны дербес күйге келтіріңіз

Енді біз СКД пернетақтасын қосамыз, қысымды метрге биіктікке түрлендіреміз және оны дисплейде көрсетеміз. Біз сондай -ақ «Таңдау» пернетақтасын басу арқылы мәнді нөлге келтіру мүмкіндігін қосамыз.

СКД қалқаны Arduino -да болған кезде сенсорды СКД қалқанына жалғау қажет болады. Өкінішке орай, СКД қалқандары әдетте тиісті розеткаларсыз келеді. Сондықтан опциялар - дәнекерлеу қосылыстарын орнату немесе розетканы алу. Розетка жолағы ebay -де пошта шығынынан көп емес. «2.54 мм розетка» бойынша іздеңіз және Arduino -дағыға ұқсайтындарды іздеңіз. Олар әдетте 36 немесе 40 істікшелі ұзындықтарда келеді. Мен бұралған түйреуіштерден аулақ болар едім, себебі олар Dupont стандартты сымдары үшін жеткілікті терең емес.

Розетка жолағын ұзындығы бойынша кесу керек және кесу түйреуішпен бір жерде орындалуы керек. Сонымен, 6 істікшелі жолақ үшін - 7 -ші түйреуішті кішкене қысқышпен алып тастаңыз, содан кейін кіші темір араны пайдаланып сол жерден кесіңіз. Мен оларды ұқыпты ету үшін ұштарын жазамын.

Тақтаға дәнекерлеу кезінде дәнекерлеу көпірлері жоқ екеніне көз жеткізіңіз.

Сенсорды қосу туралы тиісті шешіммен СКД қалқанын Arduino -ға қосыңыз және сенсорды сол түйреуіштерге қосыңыз, бірақ қазір СКД қалқанында.

Сондай -ақ, аккумулятор мен қорғанысты алыңыз. Мен қоқыс жәшігіндегі бөлшектерден өзімнің жетекшілігімді жасадым, бірақ олар ebay -де қол жетімді, оның ішінде батарея қорабы мен қосқышы бар жақсы нұсқа бар. «PP3 2.1 мм қорғасыннан» іздеңіз.

Қазіргі тұтыну шамамен 80мм құрайды. Сондықтан, егер сіз бірнеше минуттан көп жұмыс жасағыңыз келсе, PP3 -ке қарағанда 9В үлкен батареяны қарастырыңыз.

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; #dinefine btnRIGHT 0 #detine btnUP 1 #detine btnDOWN 2 #deftine 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 қайтарады; if (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» жіберу үшін өзгертіңіз және СКД -ге «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 кодын іздеңіз.

Ұсынылған: