Arduino ja MPU6050 põhine digitaalne vesilood: 3 sammu
Arduino ja MPU6050 põhine digitaalne vesilood: 3 sammu
Anonim
Image
Image
Ringkond
Ringkond

Tere tulemast minu esimese õpetatava juurde! Loodan, et leiate selle informatiivseks. Palun jätke julgelt tagasisidet, olgu see positiivne või negatiivne.

Selle projekti eesmärk on teha arduino ja MPU6050 põhinev digitaalne vesilood. Kuigi valmis kujundus ja kood on minu oma, pole algne kontseptsioon ja suur osa koodist, millest olen töötanud, mitte. Ma ei tegele plagiaadiga, nii et mul on hea meel tunnustada neid, kelle ideedele olen tuginenud. 2 peamist inimest, kellele tahan hüüda, on YouTuberi Paul McWhorter ja DroneBot Workshop. Lisan neile viited oma YouTube'i kasulikesse linkidesse PDF. Tänan ka EEEnthusiast'i informatiivse video eest MPU6050 kasutamise kohta, sealhulgas mooduli seadistamise ja lugemise kohta ilma välise raamatukoguta (tema link on samas PDF -is).

Minu koostatud projekt töötab "nagu on" ja on muinasjutuline, kindlasti kuni 45% mõlemas suunas. Saate seda kasutada täpselt nii, nagu ma selle kujundasin, või saate seda kohandada vastavalt oma maitsele. Nutikamad te märkate, et minu projekt näeb välja peaaegu identne DroneBoti töökoja toodanguga, kuid võite olla kindel, et on olulisi erinevusi, eriti nurkade arvutamise koodi ja kalibreerimisväärtuste salvestamise võimaluse osas Eeprom!

Mõned funktsioonid isu äratamiseks:

Pigistus- ja veeremisnurgad on saadaval 0,1 kraadi piires.

Güroskoobi orientatsiooni automaatne tuvastamine (horisontaalne või vertikaalne)

Täielik kalibreerimine, mille tulemused salvestatakse automaatselt eepromi

LED -näidik -2 kuni +2 kraadi (koodis muudetav)

Täiendav helisignaal tasemele (saab lendamise ajal sisse/välja lülitada)

Kompaktne vooluring, mis nõuab minimaalselt komponente

Alustame.

Tarvikud

See projekt (nagu see on) kasutab järgmisi üksusi:

1 x Arduino nano (minu oma on kloon)

1 x MPU6050 güroskoop/kiirendusmõõturi moodul

1 x LCD - 16 x 2 + I2C ühendus

1 x Vajutage lüliti tegemiseks

1 x Piezo summer

1 x roheline LED

2 x kollased LED -id

2 x punast LED -i

5 x 220 oomi takistid

Erinevad hüppajakaablid

Leivalaud

Toiteallikas (minu oma kasutas 5 -voldist USB -toitepanka, kui see pole arvutiga ühendatud, kuid võite kasutada korralikult ühendatud akut)

1. samm: vooluring

Ringkond
Ringkond
Ringkond
Ringkond

Eeldades, et teil on kõik komponendid, peate ehitama oma leivalaua.

Näitan oma seadistust juhendina, kuid ühendused on järgmised:

Arduino tihvt D2 ühendub tõukelüliti 1 küljega. Lülituslüliti teine pool ühendub maandusega

Arduino tihvt D3 ühendatakse 220 -oomise takisti 1 küljega. Takisti teine pool ühendub punase LED -i annoodiga. Punase LED -i katood läheb maapinnale.

Arduino tihvt D4 ühendatakse 220 -oomise takisti 1 küljega. Takisti teine pool ühendub kollase LED -i annoodiga. Kollase LED -i katood läheb maapinnale.

Arduino tihvt D5 ühendatakse 220 -oomise takisti 1 küljega. Takisti teine pool ühendub rohelise LED -i annoodiga. Rohelise LED -i katood läheb maapinnale.

Arduino tihvt D6 ühendatakse 220 -oomise takisti 1 küljega. Takisti teine pool ühendub kollase LED -i annoodiga. Kollase LED -i katood läheb maapinnale.

Arduino tihvt D7 ühendatakse 220 -oomise takisti 1 küljega. Takisti teine pool ühendub punase LED -i annoodiga. Punase LED -i katood läheb maapinnale.

Arduino tihvt D8 ühendatakse Piezo summeri ühe küljega. Signaali teine pool ühendub maapinnaga.

Arduino tihvt A4 ühendatakse MPA6050 JA LCD -ekraani SDA -tihvtidega.

Arduino tihvt A5 ühendatakse MPL6050 JA LCD -ekraani SCL -tihvtidega

MPV6050 ja LCD 5v toide ja Gnd pärinevad vastavalt Arduino Nano 5v ja GND tihvtidelt.

Kui see on valmis, peaks see olema sarnane minu näidatud seadistusega. Panin blu tak MPU6050 alla, et see ei liiguks, ja ka LCD -le, et see leivalaua serval hoida.

2. samm: kood

Lisatud kood on kood, mida olen selle projekti jaoks kasutanud. Ainus raamatukogu, millega teil probleeme võib tekkida, on

LiquidCrystal_I2C.h raamatukogu, kuna importisin selle, kui alustasin LCD -dega töötamist. Kahjuks on mõned teegid, mis kasutavad sama lauset #include, kuid on veidi erinevad. Kui teil on oma probleemidega probleeme, leidke mõni muu teie jaoks sobiv LCD -kood ja muutke koodi vastavalt. Tõenäoliselt erineb ainult seadistus. Kõik 'printimise' käsud peaksid töötama ühtemoodi.

Kogu koodi on kommenteeritud ja eeldusel, et olen seda õigesti teinud, lisatakse ka video, mis selgitab kõike, kuid siin on mõned tähelepanekud:

LiquidCrystal_I2C LCD (0x27, 16, 2);

Ülaltoodud kood on minu LCD seadistus. Kui teie kogu on erinev, peate võib -olla muutma mitte ainult oma kogu, vaid ka seda rida.

{lcd.setCursor (0, 1); lcd.print ("Horisontaalne!"); orientatsioon = HORIZONTAL; // Loe MPU-6050 töötlemata acc ja güroskoopi andmeid 1000 korda (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Lisa güroskoobi x nihe gyro_x_cal muutujale gyro_x_cal += gyro_x; // Lisa güro y nihe gyro_y_cal muutujale gyro_y_cal += gyro_y; // Lisa gyro z nihe gyro_z_cal muutujale gyro_z_cal += gyro_z; // Lisa acc x nihke muutujale acc_x_cal acc_x_cal += acc_x; // Lisa acc y nihke muutujale acc_y_cal acc_y_cal += acc_y; } // Jagage kõik tulemused 1000 -ga, et saada keskmine nihe 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; horisontaalneKalibreerimine = 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); // Pange tähele, et me ei salvesta acc_z jaoks nihkeid gravitatsiooni tõttu! viivitus (500); }

Ülaltoodud koodiplokk täidab kalibreerimisprotseduuri. See kood on horisontaalseks kalibreerimiseks. Vertikaalse kalibreerimise kood on peaaegu identne (pange tähele, et kood teab, kas teie MPU6050 on paigaldatud horisontaalselt või vertikaalselt!). MPU6050, loetakse 1000 korda. asjakohased väärtused lisatakse kumulatiivselt ja jagatakse seejärel 1000 -ga, et saada keskmine nihkeväärtus. Need väärtused salvestatakse seejärel Nano eepromi. Kõik horisontaalsed kalibreerimisväärtused salvestatakse alates eepromi aadressist 0. Kõik vertikaalsed väärtused salvestatakse algusest eepromi aadressile 24. Kalibreerimine PEAB toimuma täiesti tasasel pinnal, vastasel juhul ei tähenda need midagi.

/ * * Järgmised paar rida töötlevad algandmeid, et muuta need nurkadeks, mida saab LCD -le ja LED -idele väljastada. * Väärtus 4096, millega kiirendusandmed on jagatud, on võetud MPU6050 andmelehelt ja põhineb proovivõtu sagedusel. * Väärtus 9,8 on gravitatsioon /2/3.141592656 * 360; // Toorandmed phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Toorandmed dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * See jaotis kasutab güroskoopilisi andmeid, et süsteem paremini reageerida 65,5)*dt)*. 96 + teetaM*.04; // Madalpääsfilter phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Madalpääsfilter

Ülaltoodud kood on see, mis arvutab nurki. Loodetavasti annavad kommentaarid veidi ülevaate selle toimimisest, kuid põhjaliku selgituse saamiseks vaadake Paul McWhortersi videot, mis on lingitud lisatud PDF -is. Kuid ma ütlen, et saate muuta güroskoobi ja kiirendusmõõturi proovivõtu sagedust (seda tehakse minu koodi allosas seadistamise alamprogrammis MPU6050). Kui muudate proovivõtu sagedust, peate muutma ka seda, kui palju algandmeid jagatakse. Kiirendusmõõturi andmete puhul on praegune väärtus 4096. Güroskoobi puhul on praegune väärtus 65,5.

Lisateavet proovivõtu- ja nihkeväärtuste leidmise kohta leiate lisatud andmelehtedelt ja EEEntusiast'i videost (link lisatud PDF -is).

Samm: järgmised sammud

Selleks ajaks on see projekt loodetavasti tehtud, aga mis nüüd?

Esiteks, miks mitte ehitada see tegelikult vesiloodiks, mida saate kasutada. Saate osta odava vesiloodi (veenduge, et see on kasti tüüp), mida saate kohandada, või kui teil on komplekt, printige oma tase/kast.

Võib -olla mängige güroskoopi ja kiirendusmõõturi proovivõtukiirust, et näha, kas need töötavad ühe kiirusega paremini kui teised.

Proovige koodi täpsustada. Näiteks praegu, üle 45 kraadi, on märgitud nurk pehmelt öeldes karm. Kas sellest saab kuidagi mööda?

Kui teil on küsimusi, ükskõik kui lihtsad need ka ei tunduks, küsige. Kui saan aidata, siis aitan.

Kui teile meeldib see juhend, palun andke sellele meeldivaks, et ma teaksin.

Kui teete seda, palun näidake mulle (eriti kui see on töökorpus).

AITÄH