Мазмұны:
Бейне: Arduino & MPU6050 негізіндегі цифрлық рух деңгейі: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
Менің бірінші нұсқаулыққа қош келдіңіз! Сіз оны ақпараттандырады деп үміттенемін. Позитивті немесе негативті пікірлер қалдырыңыз.
Бұл жоба arduino мен MPU6050 негізіндегі цифрлық рух деңгейін құрайды. Дайын дизайн мен код менікі болғанымен, мен жұмыс істеген кодтың түпнұсқасы мен түсінігі жоқ. Мен плагиат емеспін, сондықтан мен өз идеяларымды құрғандарға ризашылығымды білдіруге қуаныштымын. Мен айқайлағым келетін 2 негізгі адам - бұл YouTuber Paul McWhorter және DroneBot шеберханасы. Мен оларға сілтемелерді youtube пайдалы сілтемелер PDF -те қосамын. Сондай -ақ, EEEnthusiast -қа MPU6050 -ді қолдану туралы ақпараттық бейне үшін, оның ішінде модульден сыртқы кітапханасыз орнату және оқу туралы рахмет (оның сілтемесі сол PDF форматында).
Мен шығарған жоба «сол күйінде» жұмыс істейді және өте дәл, әрине 45% -ға дейін. Сіз оны дәл мен ойлағандай қолдана аласыз немесе оны өзіңіздің талғамыңызға қарай бейімдей аласыз. Сіз менің жобам DroneBot шеберханасы шығарған жобаға ұқсас екенін байқайсыз, бірақ айтарлықтай айырмашылықтар бар, әсіресе бұрыштарды есептеу коды, сонымен қатар калибрлеу мәндерін сақтауға арналған қондырғы. Эпром!
Тәбетті ашатын кейбір ерекшеліктер:
Қозғалыс және айналу бұрыштары 0,1 градусқа дейін қол жетімді.
Директордың бағытын автоматты түрде анықтау (көлденең немесе тік)
Нәтижелері бар толық калибрлеу eeprom -да автоматты түрде сақталады
Жарықдиодты индикатор -2 -ден +2 градусқа дейін (кодпен ауыстырылады)
Дыбыстың қосымша дыбыстық көрсеткіші (бірден қосуға/өшіруге болады)
Минималды компоненттерді қажет ететін ықшам қисық
Бастайық.
Жабдықтар
Бұл жоба келесідей элементтерді қолданады:
1 x Arduino нано (менікі - бұл клон)
1 x MPU6050 гиро/акселерометр модулі
1 x LCD - 16 x 2 + I2C қосылымы
1 x Ауыстыру үшін басыңыз
1 x пьезо дыбыстық сигнал
1 x Жасыл жарық диоды
2 x сары жарықдиодты шамдар
2 x қызыл жарықдиодты шамдар
5х220 Ом резисторлары
Әр түрлі өтпелі кабельдер
Нан тақтасы
Қуат көзі (менің компьютеріме жалғанбаған кезде, мен 5В USB қуат банкін қолдандым, бірақ батареяны тиісті түрде қосуға болады)
1 -қадам: Цикл
Егер сізде барлық компоненттер бар деп есептесеңіз, сізге нан тақтасын жасау қажет болады.
Мен орнатуды нұсқаулық ретінде көрсетемін, бірақ қосылымдар келесідей:
Arduino түйрегіші D2 басқыштың 1 жағына қосылады. Итергіштің екінші жағы жерге қосылады
Arduino пин D3 220 Ом резистордың 1 жағына қосылады. Резистордың екінші жағы қызыл жарықдиодты аннотацияға қосылады. Қызыл жарықдиодты катод жерге түседі.
Arduino пин D4 220 Ом резистордың 1 жағына қосылады. Резистордың екінші жағы сары жарықдиодты аннотацияға қосылады. Сары жарықдиодты катод жерге түседі.
Arduino пин D5 220 Ом резистордың 1 жағына қосылады. Резистордың екінші жағы жасыл жарықдиодты аннотацияға қосылады. Жасыл жарықдиодты катод жерге түседі.
Arduino пин D6 220 Ом резистордың 1 жағына қосылады. Резистордың екінші жағы сары жарықдиодты аннотацияға қосылады. Сары жарықдиодты катод жерге түседі.
Arduino пин D7 220 Ом резистордың 1 жағына қосылады. Резистордың екінші жағы қызыл жарықдиодты аннотацияға қосылады. Қызыл жарықдиодты катод жерге түседі.
Arduino пин D8 Piezo дыбыстық сигналының бір жағына қосылады. Дыбыстық сигналдың екінші жағы жерге қосылады.
A4 Arduino түйрегіші MPU6050 мен СКД SDA түйреуіштеріне қосылады.
A5 Arduino түйрегіші MPU6050 мен СКД -дегі SCL түйреуіштеріне қосылады
MPU6050 мен LCD үшін 5v қуаты мен Gnd сәйкесінше Arduino Nano 5v және GND түйреуіштерінен келеді.
Аяқтағаннан кейін, ол менің орнатуға ұқсас болуы керек. Мен оны тоқтату үшін MPU6050 астына blu tak қойдым, сонымен қатар оны тақтаның шетінде ұстау үшін СКД -ге қойдым.
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_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; горизонтальді калибрлеу = 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 (өзгермелі); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (өзгермелі); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (өзгермелі); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (өзгермелі); // Назар аударыңыз, біз ауырлық күшіне байланысты acc_z үшін офсетті сақтамаймыз! кешіктіру (500); }
Жоғарыда келтірілген код блогы калибрлеу тәртібін орындайды. Бұл код көлденең калибрлеуге арналған. Тік калибрлеу үшін шамамен бірдей код бар (ескеріңіз, код сіздің MPU6050 көлденең немесе тігінен орнатылғанын біледі!). MPU6050 1000 рет оқылады. сәйкес мәндер кумулятивті түрде қосылады, содан кейін орташа «ығысу» мәнін беру үшін 1000 -ға бөлінеді. Бұл мәндер нано эпромында сақталады. Барлық көлденең калибрлеу мәндері eeprom адресінен бастап 0 -де сақталады. Барлық тік мәндер eeprom 24 мекен -жайында сақталады. Калибрлеуді толық тегіс бетте жасау керек, әйтпесе олар ештеңе білдірмейді.
/ * * Келесі бірнеше жолдар бастапқы деректерді СКД мен жарықдиодты шамдарға шығуға болатын бұрыштарға өзгерту үшін өңдейді. * Жеделдету деректері бөлінген 4096 мәні MPU6050 мәліметтер кестесінен алынады және іріктеу жылдамдығына негізделген. * 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 = миллис (); / * * Бұл бөлімде жүйенің жауаптылығын жоғарылату үшін гиро деректері пайдаланылады * гиро деректері бөлінген 65.5 мәні MPU6050 деректер кестесінен алынған және үлгі жылдамдығына негізделген */ theta = (theta+(gyro_y/ 65.5)*dt)*. 96 + tetaM*.04; // Төмен өту сүзгісі phi = (phi + (gyro_x/65.5)*dt)*. 96 + phiM*.04; // Төмен өту сүзгісі
Жоғарыдағы код - бұл бұрыштарды есептейтін материал. Түсініктемелер оның қалай жұмыс істейтіні туралы аз түсінік береді деп үміттенемін, бірақ терең түсініктеме алу үшін қоса берілген PDF файлына сілтеме жасалған Пол МакВортерс бейнесін қараңыз. Мен айтайын дегенім, сіз гиро мен акселерометрдің үлгі жиілігін өзгерте аласыз (бұл менің кодтың төменгі жағындағы MPU6050 ішкі бағдарламасында орнатылған). Егер сіз іріктеу жылдамдығын өзгертсеңіз, сонымен қатар бастапқы деректер қаншаға бөлінетінін өзгертуіңіз керек. Акселерометр деректері үшін ағымдағы мән 4096. гиро үшін ағымдағы мән - 65,5.
Іріктеу мен ығысу мәндерінің қалай табылатыны туралы егжей -тегжейлі ақпарат алу үшін берілген EEEntusiast (сілтемедегі PDF сілтемесі) деректер парақтары мен бейнесін қараңыз.
3 -қадам: Келесі қадамдар
Осы сәтте бұл жобаны жасайды деп үміттенемін, бірақ енді ше?
Біріншіден, неге оны қолдануға болатын рухани деңгейге көтермеске. Сіз бейімделетін арзан спирт деңгейін (қорап түріне көз жеткізіңіз) сатып ала аласыз, немесе егер сізде жинақ болса, өзіңіздің деңгейіңізді/қорапты басып шығарыңыз.
Мүмкін, гиро мен акселерометрдің мөлшерлемелерімен ойнауға болады, олар бір жылдамдықпен екіншісіне қарағанда жақсы жұмыс істейді.
Кодты одан әрі жетілдіруге тырысыңыз. Мысалы, қазіргі уақытта, 45 градустан жоғары, айтылған бұрыш кем дегенде өрескел. Бұған жол бар ма?
Егер сізде сұрақтар туындаса, олар қаншалықты қарапайым болып көрінсе де, сұраңыз. Егер мен көмектесе алсам, көмектесемін.
Егер сізге бұл нұсқаулық ұнайтын болса, маған ұнауы үшін өтінемін.
Егер сіз мұны жасасаңыз, маған көрсетіңіз (әсіресе егер ол жұмыс жағдайында болса).
РАҚМЕТ СІЗГЕ
Ұсынылған:
DIY Digital Spirit деңгейі: 5 қадам (суреттермен)
DIY Digital Spirit Level: Бұл жобада біз акселерометр IC -лерін мұқият қарастырамыз және оларды Arduino -мен қалай қолдануға болатынын білеміз. Кейін біз цифрлық құрылғыны жасау үшін осындай IC -ді бірнеше қосымша компоненттермен және 3D басып шығарылған корпуспен біріктіреміз
Цифрлық рух деңгейі - электронды сөндірушілердің DIY жобасының модулі: 6 қадам
Цифрлық рух деңгейі - электроника сүйгіштердің DIY жобасының модулі: Үйге жиһаз немесе соған ұқсас нәрсені монтаждау қажет болатын кез бар, және оны тікелей монтаждау үшін әдетте спираль деңгейін қолданыңыз. ElectronicsLovers Tech Team бұл модульді құрды, оның әдеттегіден бір айырмашылығы бар: мен
Arduino негізіндегі байланыссыз инфрақызыл термометр - IR негізіндегі термометр Arduino көмегімен: 4 қадам
Arduino негізіндегі байланыссыз инфрақызыл термометр | Ардуиноны қолданатын инфрақызыл термометр: Сәлеметсіз бе, балалар, біз индуктивті емес термометр жасаймыз, өйткені кейде сұйықтықтың/қатты заттың температурасы тым жоғары немесе төмен болады, содан кейін онымен байланыс жасау және оны оқу қиын. сол кездегі температура
TIVA негізіндегі цифрлық калькулятор: 6 қадам
TIVA негізіндегі цифрлық калькулятор: Сәлеметсіз бе, бұл Tahir Ul Haq сізге тиваға негізделген тағы бір жобаны ұсынады, бұл жоба әр түрлі функцияларды орындайтын СКД негізіндегі цифрлық калькулятор жасауға бағытталған. Калькулятор - бұл әр түрлі математикалық экспресстерді бағалайтын электрондық құрылғы
Электрлік рух деңгейін жасаңыз: 15 қадам
Электрлік рух деңгейін жасаңыз: бекітілген кез келген заттың қисаюын тез және оңай көрсету үшін осы деңгей деңгейін пайдаланыңыз! Кейтлин Raffles институтынан жасаған