
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48



Բարի գալուստ իմ առաջին երբևէ ուսանելի: Հուսով եմ, որ այն տեղեկատվական կգտնեք: Խնդրում ենք ազատ զգալ թողնել դրական կամ բացասական կարծիքներ:
Այս նախագիծը պետք է դարձնի arduino- ի և MPU6050- ի վրա հիմնված թվային ոգու մակարդակ: Մինչ պատրաստի դիզայնը և ծածկագիրը իմն են, սկզբնական հայեցակարգը և այն կոդի մեծ մասը, որից ես աշխատել եմ, այդպիսին չեն: Ես գրագողության մեջ չեմ, ուստի ավելի քան ուրախ եմ գնահատական տալ նրանց, ում գաղափարների վրա եմ կառուցել: Երկու հիմնական մարդիկ, ում ես ուզում եմ բացականչել, են YouTuber- ի Paul McWhorter- ը և DroneBot Workshop- ը: Ես դրանց հղումները ներառում եմ իմ youtube- ի օգտակար PDF հղումներում: Շնորհակալություն նաև EEEnthusiast- ին ՝ MPU6050- ի օգտագործման վերաբերյալ տեղեկատվական տեսանյութի համար, ներառյալ մոդուլից առանց արտաքին գրադարանի տեղադրման և ընթերցման (նրա հղումը նույն PDF- ում է):
Իմ պատրաստած նախագիծը աշխատում է «ինչպես կա» և հեքիաթային ճշգրիտ է, անշուշտ մինչև 45% երկու ուղղություններով: Դուք կարող եք օգտագործել այն այնպես, ինչպես ես եմ այն նախագծել, կամ կարող եք այն հարմարեցնել ձեր սեփական ճաշակին: Ձեզանից առավել խորաթափանց կնկատեք, որ իմ նախագիծը գրեթե նույնական է DroneBot- ի արտադրամասի նախագծին, բայց վստահ եղեք, որ կան էական տարբերություններ, հատկապես, երբ խոսքը վերաբերում է անկյունների հաշվարկման կոդին, գումարած հարմարեցումը `կալիբրացիոն արժեքներ պահելու համար: Եփրոմ
Ձեր ախորժակը բացելու որոշ առանձնահատկություններ.
Պտտման և գլորման անկյունները մատչելի են 0.1 աստիճանի սահմաններում:
Գիրո միավորի կողմնորոշման ավտոմատ հայտնաբերում (հորիզոնական կամ ուղղահայաց)
Ամբողջական ճշգրտում ՝ արդյունքներով ավտոմատ կերպով պահվող eeprom- ում
LED ցուցիչ -2 -ից +2 աստիճան (փոփոխելի է կոդով)
Մակարդակի լրացուցիչ լսելի ցուցում (կարելի է միացնել/անջատել ինքնաթիռում)
Կոմպակտ ճարմանդ, որը պահանջում է նվազագույն բաղադրիչներ
Եկեք սկսենք.
Պարագաներ
Այս նախագիծը (ինչպես կա) օգտագործում է հետևյալ տարրերը.
1 x Arduino nano (իմը կլոն է)
1 x MPU6050 գիրո/արագացուցիչի մոդուլ
1 x LCD - 16 x 2 + I2C միացում
1 x Անցում կատարելու համար սեղմեք
1 x Պիեզո ազդանշան
1 x Կանաչ LED
2 x դեղին LED
2 x կարմիր LED
5 x 220 ohm դիմադրիչներ
Տարբեր jumper մալուխներ
Breadboard
Էլեկտրաէներգիայի մատակարարում (իմն օգտագործել է 5 վ USB հզորության բանկ, երբ միացված չէ իմ համակարգչին, բայց կարող եք օգտագործել մարտկոցը համապատասխան միացված)
Քայլ 1: Շղթան


Ենթադրելով, որ դուք ունեք բոլոր բաղադրիչները, ձեզ հարկավոր է կառուցել ձեր հացահատիկը:
Ես ցույց եմ տալիս իմ կարգավորումը որպես ուղեցույց, բայց կապերը հետևյալն են.
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 ազդանշանի մի կողմին: Buանգիչի մյուս կողմը միանում է գետնին:
Arduino pin A4- ը միանում է MPU6050- ի և LCD- ի SDA կապումներին:
Arduino pin A5- ը միանում է MPU6050- ի և LCD- ի SCL կապերին
5v հոսանքը և Gnd MPU6050- ի և LCD- ի համար գալիս են համապատասխանաբար Arduino Nano 5v և GND կապումներից:
Ավարտելուց հետո այն պետք է նման լինի իմ ցուցադրած կարգավորմանը: Ես Blu takak- ը դնում եմ MPU6050- ի տակ, որպեսզի այն չշարժվի, ինչպես նաև LCD- ի վրա `այն պահելու եզրին:
Քայլ 2: Կոդ
Կցված կոդը այն ծածկագիրն է, որը ես օգտագործել եմ այս նախագծի համար: Միակ գրադարանը, որի հետ կարող եք խնդիր ունենալ, դա է
LiquidCrystal_I2C.h գրադարանը, քանի որ այն ներմուծեցի, երբ առաջին անգամ սկսեցի աշխատել LCD- ների հետ: Unfortunatelyավոք, կան մի քանի գրադարաններ, որոնք օգտագործում են նույն #Include հայտարարությունը, բայց մի փոքր տարբեր են: Եթե ձեր հետ խնդիրներ ունեք, գտեք մեկ այլ LCD կոդ, որն աշխատում է ձեզ համար և համապատասխանաբար փոխեք ծածկագիրը: Ամենայն հավանականությամբ, դա տարբերվող կարգավորումն է: Բոլոր «տպման» հրամանները պետք է աշխատեն նույնը:
Ամբողջ ծածկագիրը մեկնաբանված է և ենթադրելով, որ ես դա ճիշտ եմ արել, կլինի նաև ամեն ինչ բացատրող տեսանյութ, բայց ահա մի քանի կետ պետք է նշել.
LiquidCrystal_I2C LCD (0x27, 16, 2);
Վերոնշյալ կոդը իմ LCD- ի կարգավորումն է: Եթե ձեր գրադարանը տարբեր է, գուցե անհրաժեշտ լինի փոխել ոչ միայն ձեր գրադարանը, այլև այս տողը:
{lcd.setCursor (0, 1); lcd.print («Հորիզոնական»); կողմնորոշում = ՀՈՐԻZՈՆԱԿԱՆ; // Կարդացեք MPU-6050- ի չմշակված acc և gyro տվյալները 1000 անգամ (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // gyro_x_cal փոփոխականին ավելացնել gyro_x_cal += gyro_x; // ավելացնել gyro y offset- ը gyro_y_cal փոփոխականին gyro_y_cal += gyro_y; // ավելացնել gyro z offset- ը gyro_z_cal փոփոխականին gyro_z_cal += gyro_z; // Ավելացնել acc x օֆսեթը acc_x_cal փոփոխականին acc_x_cal += acc_x; // Ավելացնել acc y օֆսեթը 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 (float); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (float); // Ուշադրություն դարձրեք, մենք չենք պահում օֆսեթ acc_z- ի համար, ծանրության պատճառով: ուշացում (500); }
Կոդի վերը նշված բլոկը կատարում է ստուգաչափման ռեժիմը: Այս ծածկագիրը հորիզոնական ճշգրտման համար է: Գոյություն ունի գրեթե նույնական ծածկագիր ուղղահայաց տրամաչափման համար (նշեք, ծածկագիրը գիտի ՝ ձեր MPU6050- ը տեղադրված է հորիզոնական թե՞ ուղղահայաց): MPU6050, կարդացվել է 1000 անգամ: համապատասխան արժեքները կուտակային կերպով ավելացվում են, ապա բաժանվում 1000 -ի `միջին« փոխհատուցված »արժեք տալու համար: Այս արժեքները պահվում են Nano eeprom- ում: Բոլոր հորիզոնական տրամաչափման արժեքները պահվում են eeprom հասցեից սկսած: Բոլոր ուղղահայաց արժեքները սկզբից պահվում են eeprom 24 հասցեում: Կալիբրացիան ՊԵՏՔ է կատարվի ամբողջովին հարթ մակերևույթի վրա, հակառակ դեպքում դրանք ոչինչ չեն նշանակում:
/ * * Հաջորդ մի քանի տողերը մշակում են չմշակված տվյալները ՝ դրանք վերածելով անկյունների, որոնք կարող են թողարկվել LCD- ի և LED- ների վրա: * 4096 արժեքը, որով բաժանվում են արագացման տվյալները, վերցված է MPU6050 տվյալների թերթից և հիմնված է ընտրանքի արագության վրա: * 9.8 արժեքը ինքնահոս է * Atan2 ֆունկցիան մաթեմատիկական մոդուլից է և օգտագործվում է տվյալ տվյալներից */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)*դտ)*. 96 + thetaM*.04; // passածր անցումային ֆիլտր phi = (phi + (gyro_x/65.5)*dt)*. 96 + phiM*.04; // passածր փոխանցման զտիչ
Վերը նշված ծածկագիրը այն անկյուններն են, որոնք հաշվարկում են: Հուսանք, որ մեկնաբանությունները մի փոքր պատկերացում կտան, թե ինչպես է այն աշխատում, բայց խորը բացատրության համար տես Փոլ ՄաքՎորթերսի տեսանյութը, որը կցված է կցված PDF- ում: Այն, ինչ ես կասեմ, այն է, որ դուք կարող եք փոխել նմուշառման արագությունը գիրոյի և արագացուցիչի համար (ինչը կատարվում է MPU6050 ենթածրագրում ՝ իմ ծածկագրի ներքևում): Եթե դուք փոխում եք նմուշի տոկոսադրույքը, դուք նույնպես պետք է փոխեք, թե որքանով են բաժանվում հումքի տվյալները: Արագացուցիչի տվյալների համար ներկայիս արժեքը 4096 է: theիրոյի համար ընթացիկ արժեքը 65.5 է:
Անդրադառնացեք կից տվյալների թերթերին և EEEntusiast- ի տեսանյութին (հղումը կցված PDF- ում) `ավելի մանրամասն տեղեկությունների համար, թե ինչպես են հայտնաբերվում ընտրանքային և փոխհատուցված արժեքները:
Քայլ 3: Հաջորդ քայլերը
Այս պահին, հուսով եմ, որ այս նախագիծը կկատարվեր, բայց հիմա ի՞նչ:
Նախ, ինչու իրականում այն չդարձնել հոգևոր մակարդակի, որը կարող եք օգտագործել: Դուք կարող եք գնել էժան ոգու մակարդակ (համոզվեք, որ դա տուփի տեսակն է), որը կարող եք հարմարեցնել, կամ եթե ունեք հավաքածուն, տպեք ձեր սեփական մակարդակը/տուփը:
Թերևս խաղացեք գիրո և արագացուցիչի ընտրանքային դրույքաչափերի հետ `տեսնելու, թե արդյոք դրանք ավելի լավ են աշխատում, քան մյուսը:
Փորձեք ավելի ճշգրտել ծածկագիրը: Օրինակ, ներկայումս, 45 աստիճանից այն կողմ, նշված անկյունը մեղմ ասած կոպիտ է: Կա՞ արդյոք դրա շուրջ միջոց:
Եթե ունեք որևէ հարց, որքան էլ դրանք պարզ թվան, խնդրեք: Եթե կարողանամ օգնել, կանեմ:
Եթե ձեզ դուր է գալիս այս խրատը, խնդրում եմ դրեք լայք, որպեսզի ես իմանամ:
Եթե դուք պատրաստում եք սա, խնդրում եմ ցույց տվեք ինձ (հատկապես, եթե դա աշխատանքային պատյանում է):
ՇՆՈՐՀԱԿԱԼՈՒԹՅՈՒՆ
Խորհուրդ ենք տալիս:
DIY թվային ոգու մակարդակ. 5 քայլ (նկարներով)

DIY թվային ոգու մակարդակ. Այս նախագծում մենք ավելի սերտորեն կանդրադառնանք արագացուցիչի IC- ներին և կպարզենք, թե ինչպես կարող ենք դրանք օգտագործել Arduino- ով: Այնուհետև մենք նման IC- ն կհամատեղենք մի քանի լրացուցիչ բաղադրիչներով և 3D տպված պարիսպով ՝ թվային ստեղծելու համար
Թվային ոգու մակարդակ DIY ծրագրի մոդուլ `Electronicslovers- ի կողմից. 6 քայլ

Թվային ոգու մակարդակ DIY նախագծի մոդուլ Electronicslovers- ի կողմից. Գալիս է պահ, երբ դուք պետք է ձեր տանը տեղադրեք կահույք կամ նման բան, իսկ բոլորի համար սովորական ուղիղ տեղադրման համար սովորաբար օգտագործեք ոգու մակարդակ: ElectronicsLovers Tech Team- ը կառուցեց այս մոդուլը, որն ունի մեկ տարբերություն սովորականից. Ես
Arduino- ի վրա հիմնված ոչ կոնտակտային ինֆրակարմիր ջերմաչափ - IR- ով հիմնված ջերմաչափ Arduino- ի միջոցով. 4 քայլ

Arduino- ի վրա հիմնված ոչ կոնտակտային ինֆրակարմիր ջերմաչափ | IR- ով հիմնված ջերմաչափ Arduino- ի միջոցով. Բարև ձեզ, այս հրահանգների մեջ մենք կդարձնենք ոչ կոնտակտային ջերմաչափ arduino- ով: Քանի որ երբեմն հեղուկի/պինդի ջերմաստիճանը չափազանց բարձր է կամ ցածր, ապա դժվար է դրա հետ կապ հաստատել և կարդալ այդ դեպքում ջերմաստիճանը
Եղանակի վրա հիմնված երաժշտության գեներատոր (ESP8266 վրա հիմնված միջինի գեներատոր). 4 քայլ (նկարներով)

Եղանակի վրա հիմնված երաժշտության գեներատոր (ESP8266 Based Midi Generator). Բարև, այսօր ես կբացատրեմ, թե ինչպես պատրաստել ձեր սեփական եղանակի վրա հիմնված փոքր երաժշտության գեներատոր: Այն հիմնված է ESP8266- ի վրա, որը նման է Arduino- ին և արձագանքում է ջերմաստիճանին, անձրևին: և լույսի ուժգնություն: Մի ակնկալեք, որ այն ամբողջ երգեր կամ ակորդներ կհաղորդի
Ստեղծեք էլեկտրական ոգու մակարդակ. 15 քայլ

Ստեղծեք էլեկտրական ոգու մակարդակ. Օգտագործեք այս ոգու մակարդակը ՝ արագ և հեշտությամբ կցված ցանկացած առարկայի թեքությունը ցուցադրելու համար: Ստեղծվել է Քեյթլինի կողմից ՝ Raffles ինստիտուտից