Satura rādītājs:

Uz Arduino un MPU6050 balstīts digitālais līmeņrādis: 3 soļi
Uz Arduino un MPU6050 balstīts digitālais līmeņrādis: 3 soļi

Video: Uz Arduino un MPU6050 balstīts digitālais līmeņrādis: 3 soļi

Video: Uz Arduino un MPU6050 balstīts digitālais līmeņrādis: 3 soļi
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Jūlijs
Anonim
Image
Image
Ķēde
Ķēde

Laipni lūdzam manā pirmajā pamācībā! Es ceru, ka jums tas šķiet informatīvi. Lūdzu, nekautrējieties atstāt pozitīvas vai negatīvas atsauksmes.

Šī projekta mērķis ir izveidot uz arduino un MPU6050 balstītu digitālo līmeņrādi. Lai gan pabeigtais dizains un kods ir mans, sākotnējā koncepcija un liela daļa koda, no kura esmu strādājis, nav. Es neesmu plaģiāts, tāpēc es ar prieku varu pateikties tiem, kuru idejām esmu balstījies. 2 galvenie cilvēki, kuriem vēlos izsaukties, ir YouTuber's Paul McWhorter un DroneBot Workshop. Es ievietoju saites uz tām savā noderīgajā youtube saitē PDF. Paldies arī uzņēmumam EEEnthusiast par informatīvo video par MPU6050 lietošanu, ieskaitot moduļa iestatīšanu un lasīšanu bez ārējas bibliotēkas (viņa saite ir tajā pašā PDF failā).

Manis izstrādātais projekts darbojas “tāds, kāds tas ir”, un ir patiesi precīzs, noteikti līdz pat 45% abos virzienos. Jūs varat to izmantot tieši tā, kā es to esmu izstrādājis, vai arī varat to pielāgot savai gaumei. Gudrāki no jums pamanīs, ka mans projekts izskatās gandrīz identisks tam, ko izstrādāja DroneBot darbnīca, taču esiet droši, ka pastāv būtiskas atšķirības, it īpaši attiecībā uz leņķu aprēķināšanas kodu, kā arī iespēju saglabāt kalibrēšanas vērtības Eeprom!

Dažas funkcijas, kas izraisa apetīti:

Pieejamie slīpuma un slīpuma leņķi ir 0,1 grāda robežās.

Automātiska žiroskopu ierīces orientācijas noteikšana (horizontāla vai vertikāla)

Pilnīga kalibrēšana, kuras rezultāti tiek automātiski saglabāti eeprom

LED indikators no -2 līdz +2 grādiem (var mainīt kodu)

Papildu skaņas līmeņa indikācija (var ieslēgt/izslēgt, piemēram, lidojot)

Kompakta konstrukcija, kurai nepieciešami minimāli komponenti

Sāksim.

Piegādes

Šajā projektā (kā tas ir) tiek izmantoti šādi elementi:

1 x Arduino nano (mans ir klons)

1 x MPU6050 žiroskopu/akselerometra modulis

1 x LCD - 16 x 2 + I2C savienojums

1 x Nospiediet, lai izveidotu slēdzi

1 x pjezo skaņas signāls

1 x zaļa gaismas diode

2 x dzeltenas gaismas diodes

2 x sarkanas gaismas diodes

5 x 220 omi rezistori

Dažādi džemperu kabeļi

Maizes dēlis

Barošanas avots (manējais izmantoja 5 V USB strāvas banku, kad tas nebija pievienots manam datoram, bet jūs varētu izmantot atbilstoši pievienotu akumulatoru)

1. solis: ķēde

Ķēde
Ķēde
Ķēde
Ķēde

Pieņemot, ka jums ir visas sastāvdaļas, jums būs jāveido maizes dēlis.

Es parādīju savu iestatīšanu kā ceļvedi, bet savienojumi ir šādi:

Arduino tapa D2 savienojas ar spiedpogu 1 pusi. Stumšanas slēdža otra puse ir savienota ar zemi

Arduino tapa D3 savienojas ar 220 omu rezistora 1 pusi. Pretējā rezistora puse tiek savienota ar sarkanās gaismas diodes anodu. Sarkanās gaismas diodes katods iet uz zemes.

Arduino tapa D4 savienojas ar 220 omu rezistora 1 pusi. Otra rezistora puse savienojas ar dzeltenās gaismas diodes anodu. Dzeltenās gaismas diodes katods nokrīt zemē.

Arduino tapa D5 savienojas ar 220 omu rezistora 1 pusi. Pretējā rezistora puse ir savienota ar zaļās gaismas diodes anodu. Zaļā LED katods iet uz zemes.

Arduino tapa D6 savienojas ar 220 omu rezistora 1 pusi. Otra rezistora puse savienojas ar dzeltenās gaismas diodes anodu. Dzeltenās gaismas diodes katods nokrīt zemē.

Arduino tapa D7 savienojas ar 220 omu rezistora 1 pusi. Otra rezistora puse savienojas ar sarkanās gaismas diodes anodu. Sarkanās gaismas diodes katods iet uz zemes.

Arduino tapa D8 savienojas ar Pjezo skaņas signāla vienu pusi. Signāla otrā puse ir savienota ar zemi.

Arduino tapa A4 savienojas ar SDA tapām uz MPU6050 UN LCD.

Arduino tapa A5 savienojas ar MPL6050 UN LCD SCL tapām

MPV6050 un LCD 5V jauda un Gnd nāk attiecīgi no Arduino Nano 5v un GND tapām.

Kad tas ir pabeigts, tam vajadzētu būt līdzīgam manam iestatījumam, kas parādīts. Es ievietoju blu tak zem MPU6050, lai apturētu tā kustību, un arī LCD, lai tas paliktu uz maizes dēļa malas.

2. darbība: kods

Pievienotais kods ir kods, ko esmu izmantojis šim projektam. Vienīgā bibliotēka, ar kuru jums var rasties problēma, ir

LiquidCrystal_I2C.h bibliotēka, kad es to importēju, kad pirmo reizi sāku strādāt ar LCD. Diemžēl ir dažas bibliotēkas, kurās tiek izmantots viens un tas pats #include paziņojums, taču tās ir nedaudz atšķirīgas. Ja jums ir problēmas ar savu, atrodiet citu jums piemērotu LCD kodu un attiecīgi mainiet kodu. Visticamāk, ka iestatījumi atšķiras. Visām drukāšanas komandām vajadzētu darboties vienādi.

Viss kods ir komentēts un, pieņemot, ka esmu to izdarījis pareizi, būs arī video, kurā viss izskaidrots, taču šeit ir jāņem vērā daži punkti:

LiquidCrystal_I2C LCD (0x27, 16, 2);

Iepriekš minētais kods ir mana LCD iestatīšana. Ja jūsu bibliotēka atšķiras, iespējams, būs jāmaina ne tikai bibliotēka, bet arī šī rinda.

{lcd.setCursor (0, 1); lcd.print ("Horizontāli!"); orientācija = HORIZONTĀLA; // 1000 reizes nolasiet neapstrādātos acc un žiroskopu datus no MPU-6050 (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Pievienojiet žiroskopu x nobīdi mainīgajam mainīgajam gyro_x_cal gyro_x_cal += gyro_x; // Pievienojiet žiroskopu y nobīdi žiroskopa mainīgajam mainīgajam giro_y_cal += gyro_y; // Pievienojiet žiroskopu z nobīdei žiro_z_cal mainīgajam gyro_z_cal += gyro_z; // Pievienot acc x nobīdi mainīgajam acc_x_cal acc_x_cal += acc_x; // Pievienot acc y nobīdi mainīgajam acc_y_cal acc_y_cal += acc_y; } // Sadaliet visus rezultātus ar 1000, lai iegūtu vidējo nobīdi 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 (pludiņš); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (pludiņš); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (pludiņš); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (pludiņš); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (pludiņš); // Ņemiet vērā, ka smaguma dēļ mēs nesaglabājam nobīdi acc_z! kavēšanās (500); }

Iepriekš minētais koda bloks tiek izpildīts kalibrēšanas režīmā. Šis kods ir paredzēts horizontālai kalibrēšanai. Vertikālajai kalibrēšanai ir gandrīz identisks kods (ņemiet vērā, ka kods zina, vai jūsu MPU6050 ir uzstādīts horizontāli vai vertikāli!). MPU6050, tiek lasīts 1000 reizes. atbilstošās vērtības summē un pēc tam dala ar 1000, lai iegūtu vidējo “nobīdes” vērtību. Pēc tam šīs vērtības tiek saglabātas Nano eeprom. Visas horizontālās kalibrēšanas vērtības tiek saglabātas, sākot ar eeprom adresi 0. Visas vertikālās vērtības tiek saglabātas no eeprom adreses 24. Kalibrēšana OBLIGĀTI jāveic uz pilnīgi līdzenas virsmas, pretējā gadījumā tās neko nenozīmē.

/ * * Dažas nākamās rindas apstrādā neapstrādātus datus, lai tos mainītu leņķos, kurus var izvadīt uz LCD un gaismas diodēm. * Vērtība 4096, ar kuru paātrinājuma dati ir dalīti, ir ņemta no MPU6050 datu lapas un ir balstīta uz izlases ātrumu. * Vērtība 9,8 ir gravitācija /2/3.141592656 * 360; // Neapstrādāti dati phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Neapstrādāti dati dt = (millis ()-millisOld)/1000.; millisOld = milis (); / * * Šajā sadaļā tiek izmantoti žiroskopu dati, lai padarītu sistēmu atsaucīgāku * vērtība 65,5, ar kuru žiroskopu dati ir sadalīti, ir ņemta no MPU6050 datu lapas un ir balstīta uz izlases ātrumu */ theta = (theta+(gyro_y/ 65.5)*dt)*. 96 + tetaM*.04; // Zemas caurlaidības filtrs phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Zemas caurlaides filtrs

Iepriekš minētais kods ir tas, kas aprēķina leņķus. Cerams, ka komentāri sniegs nelielu ieskatu par to, kā tas darbojas, bet, lai iegūtu padziļinātu skaidrojumu, skatiet Pola Makvortera video, kas saistīts ar pievienoto PDF failu. Tomēr es teikšu, ka varat mainīt žiroskopa un akselerometra paraugu ņemšanas ātrumu (kas tiek darīts iestatīšanas MPU6050 apakšprogrammā mana koda apakšā). Ja maināt izlases biežumu, jums ir jāmaina arī tas, cik daudz neapstrādāto datu ir sadalīts. Akselerometra datiem pašreizējā vērtība ir 4096. Žiroskopam pašreizējā vērtība ir 65,5.

Plašāku informāciju par paraugu ņemšanas un nobīdes vērtību atrašanu skatiet pievienotajās datu lapās un EEEntusiast videoklipā (saite pievienotajā PDF failā).

3. darbība. Nākamās darbības

Līdz šim brīdim, cerams, būs izveidots šis projekts, bet ko tagad?

Pirmkārt, kāpēc neveidot to par līmeņrādi, kuru varat izmantot. Jūs varat iegādāties lētu līmeņrādi (pārliecinieties, vai tas ir kastes tips), kuru varat pielāgot, vai, ja jums ir komplekts, izdrukājiet savu līmeni/kasti.

Varbūt paspēlējieties ar žiroskopu un akselerometra paraugu ņemšanas ātrumu, lai noskaidrotu, vai tie darbojas labāk nekā viens.

Mēģiniet sīkāk precizēt kodu. Piemēram, šobrīd, pārsniedzot 45 grādus, norādītais leņķis ir rupjš, lai neteiktu vairāk. Vai ir kāds veids, kā to apiet?

Ja jums ir kādi jautājumi, lai cik vienkārši tie šķistu, lūdzu, jautājiet. Ja varu palīdzēt, palīdzēšu.

Ja jums patīk šī pamācība, lūdzu, atzīmējiet to ar Patīk, lai es zinātu.

Ja jūs to darāt, lūdzu, parādiet man (īpaši, ja tas ir darba gadījumā).

PALDIES

Ieteicams: