
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51



Менин эң биринчи үйрөткүчүмө кош келиңиз! Мен муну маалыматтык деп табасыз деп үмүттөнөм. Сураныч, оң же терс пикир калтырыңыз.
Бул долбоор 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


Эгер сизде бардык компоненттер бар деп ойлосоңуз, анда нан тактаңызды курууңуз керек болот.
Мен орнотуумду көрсөтмө катары көрсөтөм, бирок туташуулар төмөнкүчө:
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 градустан ашып, айтылган бурч эң аз дегенде орой. Мунун айласы барбы?
Эгерде сизде кандайдыр бир суроолор болсо, канчалык жөнөкөй көрүнбөсүн, сураңыз. Эгерде мен жардам бере алсам, анда жардам берем.
Эгерде сизге бул көрсөтмө жагып жатса, мага жакса лайк басып коюңуз.
Эгер сиз муну жасасаңыз, мага көрсөтүңүз (айрыкча ал иштөөчү учурда).
РАХМАТ
Сунушталууда:
Батарея менен иштеген суу коллекторунун деңгээл сенсору: 7 кадам (сүрөттөр менен)

Батарея менен иштөөчү Суу Коллекторунун Деңгээл сенсору: Биздин үйдө чатырга жааган жамгырдан суу куюлган жана бакчадагы дааратканага, кир жуугуч машинага жана сугаруучу өсүмдүктөргө колдонулган суу сактагыч бар. Акыркы үч жылдын ичинде жай абдан кургак болгондуктан, биз резервуардагы суунун деңгээлине көз салып турдук. С
Санарип деңгээл лазер менен: 15 кадам (сүрөттөр менен)

Санарип деңгээли Cross-Line Laser менен: Саламатсыздарбы, бүгүн мен сизге интегралдык кайчылаш линия менен санарип деңгээлин кантип жасоону көрсөтөм. Болжол менен бир жыл мурун мен санарип мульти-инструментти жараттым. Бул куралда көптөгөн режимдер бар, бирок мен үчүн эң кеңири таралган жана колдонуучу
Ардуиного негизделген байланышсыз инфракызыл термометр - IR негизделген термометр Arduino колдонуу: 4 кадам

Ардуиного негизделген байланышсыз инфракызыл термометр | IR негизделген термометр Arduino колдонуу: Салам балдар бул көрсөтмөлөрдө биз ардуинону колдонобуз. ошол сахнада температура
Аба ырайына негизделген музыка генератору (ESP8266 негизделген Midi генератору): 4 кадам (сүрөттөр менен)

Аба ырайына негизделген музыка генератору (ESP8266 негизделген Midi генератору): Саламатсызбы, мен бүгүн өзүңүздүн кичинекей аба ырайына негизделген музыкалык генераторду кантип жасоону түшүндүрүп берем. жана жарыктын интенсивдүүлүгү. Бул бүтүндөй ырларды же аккорд программасын түзөт деп күтпөңүз
TIVAга негизделген санариптик эсептегич: 6 кадам

TIVA негизделген санариптик калкулятор: Саламатсызбы, бул Тахир Ул Хак сизге башка tiva долбоорун алып келет. Бул долбоор ар кандай функцияларды аткаруучу ЖКга негизделген санариптик эсептегичти жасоого багытталган. Калькулятор - бул ар кандай математикалык экспресске баа бере турган электрондук түзүлүш