Мазмуну:

Arduino & MPU6050 негизделген санариптик деңгээл: 3 кадам
Arduino & MPU6050 негизделген санариптик деңгээл: 3 кадам

Video: Arduino & MPU6050 негизделген санариптик деңгээл: 3 кадам

Video: Arduino & MPU6050 негизделген санариптик деңгээл: 3 кадам
Video: Урок 96: Датчик атмосферного давления, температуры, приблизительной высоты BMP390 с ЖК-дисплеем 2024, Июль
Anonim
Image
Image
Circuit
Circuit

Менин эң биринчи үйрөткүчүмө кош келиңиз! Мен муну маалыматтык деп табасыз деп үмүттөнөм. Сураныч, оң же терс пикир калтырыңыз.

Бул долбоор arduino жана MPU6050ге негизделген санариптик деңгээлди түзүү. Даяр дизайн жана код меники болсо да, баштапкы түшүнүк жана мен иштеген коддун көбү андай эмес. Мен плагиатка аралашкан жокмун, андыктан мен ойлоп тапкандардын пикирине кубанычтамын. Мен кыйкыргым келген 2 негизги адам - бул YouTuber Пол МакВортер жана DroneBot семинар. Мен аларга шилтемелерди youtube пайдалуу шилтемелерим PDFке киргизем. EEEnthusiastке рахмат, MPU6050ди колдонуу боюнча маалыматтык видеосу үчүн, анын ичинде модулдан тышкы китепканасы жок эле орнотуу жана окуу (анын шилтемеси ошол эле PDFте).

Мен чыгарган долбоор "кандай болсо ошондой" иштейт жана так, албетте, эки тарапта тең 45% га чейин. Сиз муну мен ойлогондой колдоно аласыз, же өзүңүздүн табитиңизге ылайыкташтырсаңыз болот. Сизге караганда, менин долбоорум DroneBot семинары менен бирдей окшош экенин байкайсыз, бирок олуттуу айырмачылыктар бар, айрыкча бурчтарды эсептөө кодуна жана калибрлөө баалуулуктарын сактоочу жайга келгенде Eeprom!

Сиздин табитиңизди ачуучу кээ бир өзгөчөлүктөр:

Pitch and roll бурчтары 0,1 градуска чейин жеткиликтүү.

Гиро бирдигинин багытын автоматтык түрдө аныктоо (горизонталдуу же вертикалдуу)

Автоматтык түрдө eepromго сакталган жыйынтыктары менен толук калибрлөө

LED көрсөткүчү -2ден +2 градуска чейин (коддо өзгөрөт)

Деңгээлдин кошумча үн белгиси (учуп баратканда күйгүзүлүп/өчүрүлүшү мүмкүн)

Минималдуу компоненттерди талап кылган компакт curcuit

Баштайлы.

Жабдуулар

Бул долбоор (ошондой эле) төмөнкү элементтерди колдонот:

1 x Arduino нано (меники клон)

1 x MPU6050 гиро/акселерометр модулу

1 х ЖК - 16 x 2 + I2C байланышы

1 x которуу үчүн басыңыз

1 x Piezo сигнал

1 x Жашыл LED

2 х сары LED

2 x Кызыл LED

5 х 220 Ом каршылыгы

Ар кандай секирүүчү кабелдер

Breadboard

Электр энергиясы менен камсыздоо (менин компьютериме туташпаганда 5v USB кубат банкын колдонгон, бирок сиз туура туташкан батареяны колдонсоңуз болот)

1 -кадам: Circuit

Circuit
Circuit
Circuit
Circuit

Эгер сизде бардык компоненттер бар деп ойлосоңуз, анда нан тактаңызды курууңуз керек болот.

Мен орнотуумду көрсөтмө катары көрсөтөм, бирок туташуулар төмөнкүчө:

Arduino пин D2 баскычтын 1 жагына туташат. Баскычтын экинчи тарабы жерге туташат

Arduino пин D3 220 омдук резистордун 1 тарабына туташат. Резистордун экинчи тарабы Кызыл LED аннодуна туташат. Кызыл LED катоду жерге барат.

Arduino пин D4 220 омдук резистордун 1 тарабына туташат. Резистордун экинчи тарабы сары LED аннодуна туташат. Сары LED катоду жерге барат.

Arduino пин D5 220 ом каршылыгынын 1 тарабына туташат. Резистордун экинчи тарабы Жашыл LED аннодуна туташат. Жашыл LED катоду жерге барат.

Arduino пин D6 220 омдук резистордун 1 тарабына туташат. Резистордун экинчи тарабы сары LED аннодуна туташат. Сары LED катоду жерге барат.

Arduino пин D7 220 омдук резистордун 1 тарабына туташат. Резистордун экинчи тарабы Кызыл LED аннодуна туташат. Кызыл LED катоду жерге барат.

Arduino пин D8 Piezo сигналынын бир жагына туташат. Зумердин башка тарабы жерге туташат.

Arduino пин A4 MPU6050 ЖАНА ЖКдагы SDA казыктарына туташат.

Arduino пин A5 MPU6050 ЖАНА ЖКдеги SCL казыктарына туташат

MPU6050 жана LCD үчүн 5v күчү жана Gnd тиешелүү түрдө Arduino Nano 5v жана GND пиндеринен келет.

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

2 -кадам: Код

Тиркелген код бул долбоор үчүн колдонгон кодум. Сизде көйгөй болушу мүмкүн болгон жалгыз китепкана - бул

LiquidCrystal_I2C.h китепканасы, мен муну биринчи жолу ЖК менен иштей баштаганда импорттодум. Тилекке каршы, бир эле #include билдирүүсүн колдонгон, бирок бир аз башкача китепканалар бар. Эгерде сиздики менен көйгөйлөр болсо, анда сизге ылайыктуу башка ЖК кодун таап, ошого жараша кодду өзгөртүңүз. Бул жөн гана айырмачылыктар болушу мүмкүн. Бардык "басып чыгаруу" буйруктары бирдей иштеши керек.

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

LiquidCrystal_I2C lcd (0x27, 16, 2);

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

{lcd.setCursor (0, 1); lcd.print ("Горизонталдуу!"); багыттоо = горизонталдык; // MPU-6050ден чийки acc жана гиро маалыматтарды 1000 жолу окуу (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // gyro_x_cal өзгөрмөсүнө gyro x офсетин кошуу gyro_x_cal += gyro_x; // gyro_y_cal өзгөрмөсүнө gyro y офсетин кошуу gyro_y_cal += gyro_y; // gyro_z_cal өзгөрмөсүнө gyro z офсетин кошуу gyro_z_cal += gyro_z; // acc_x_cal өзгөрмөсүнө acc xx ордун кошуу acc_x_cal += acc_x; // acc_y_cal өзгөрмөсүнө acc_y_cal += acc_y; } // Бардык жыйынтыктарды 1000ге бөлүңүз, орточо офсеттеги алуу үчүн gyro_x_cal /= 1000.0; gyro_y_cal /= 1000.0; gyro_z_cal /= 1000.0; acc_x_cal /= 1000.0; acc_y_cal /= 1000.0; horizonalCalibration = 255; eeprom_address = 0; EEPROM.put (eeprom_address, horizonalCalibration); eeprom_address += sizeof (int); EEPROM.put (eeprom_address, gyro_x_cal); eeprom_address += sizeof (калкып чыгуу); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (калкып чыгуу); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (калкып чыгуу); // Эскертүү, биз тартылуу күчүнө байланыштуу acc_z үчүн офсетти сактабайбыз! кечигүү (500); }

Жогорудагы код блогу калибрлөө тартибин аткарат. Бул код горизонталдык калибрлөө үчүн. Вертикалдуу калибрлөө үчүн бирдей код бар (эскертүү, код сиздин MPU6050 туурасынан же тигинен орнотулганын билет!). MPU6050, 1000 жолу окулат. тийиштүү маанилер кумулятивдүү түрдө кошулат, андан кийин 1000ге бөлүнүп, орточо "офсеттик" маанини беришет. Бул баалуулуктар Nano eepromдо сакталат. Бардык горизонталдык калибрлөө баалуулуктары 0 eeprom дарегинен баштап сакталат. Бардык вертикалдык маанилер eeprom 24 дарегинде башталат. Калибрлөө толугу менен тегиз жерде жүргүзүлүшү керек, антпесе алар эч нерсени билдирбейт.

/ * * Кийинки бир нече саптар чийки маалыматтарды иштетип, аларды ЖКга жана Светодиоддорго чыгарууга мүмкүн болгон бурчтарга өзгөртөт. * Ылдамдануу маалыматы бөлүнгөн 4096 мааниси MPU6050 маалымат барагынан алынган жана үлгү ылдамдыгына негизделген. * 9.8дин мааниси-тартылуу күчү * Атан2 функциясы математикалык модулдан алынган жана берилген маалыматтан бурчтарды эсептөө үчүн колдонулат */thetaM = -atan2 ((acc_x/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Чийки маалыматтар phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Чийки маалыматтар dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * Бул бөлүм системаны көбүрөөк жооптуу кылуу үчүн гиро маалыматын колдонот *, гироо маалыматтары бөлүнгөн 65.5 мааниси MPU6050 маалымат барагынан алынган жана үлгү ылдамдыгына негизделген */ theta = (theta+(gyro_y/ 65.5)*dt)*. 96 + thetaM*.04; // Төмөн өтүү чыпкасы phi = (phi + (gyro_x/65.5)*dt)*. 96 + phiM*.04; // Төмөн өтүү чыпкасы

Жогорудагы код бурчтарды эсептеген нерсе. Комментарийлер анын кантип иштээри жөнүндө бир аз түшүнүк берет деп үмүттөнөбүз, бирок терең түшүндүрүү үчүн тиркелген PDFте шилтеме кылынган Пол МакВхерс видеосун караңыз. Мен эмнени айтайын, сиз гиро жана акселерометрдин үлгүлөрүнүн ылдамдыгын өзгөртө аласыз (бул менин кодумдун ылдый жагындагы MPU6050 орнотуу суброграммасында жасалат). Эгерде сиз үлгү ылдамдыгын өзгөртсөңүз, анда чийки маалыматтын канчага бөлүнгөнүн да өзгөртүүгө туура келет. Акселерометрдин маалыматы үчүн учурдагы мааниси 4096. гиро үчүн учурдагы мааниси 65,5.

Тандалган маалымат баракчаларына жана EEEntusiast видеосуна (тиркелген PDF шилтемеси) шилтеме жана офсет баалуулуктары кантип табылгандыгы жөнүндө тереңирээк маалымат алуу үчүн кайрылыңыз.

3 -кадам: Кийинки кадамдар

Ушул убакка чейин бул долбоорду жасайт деп үмүттөнөбүз, бирок азыр эмне кылабыз?

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

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

Кодду андан ары өркүндөтүүгө аракет кылыңыз. Мисалы, азыркы учурда, 45 градустан ашып, айтылган бурч эң аз дегенде орой. Мунун айласы барбы?

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

Эгерде сизге бул көрсөтмө жагып жатса, мага жакса лайк басып коюңуз.

Эгер сиз муну жасасаңыз, мага көрсөтүңүз (айрыкча ал иштөөчү учурда).

РАХМАТ

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