Sisällysluettelo:

Arduino- ja MPU6050 -pohjainen digitaalinen vesivaaka: 3 vaihetta
Arduino- ja MPU6050 -pohjainen digitaalinen vesivaaka: 3 vaihetta

Video: Arduino- ja MPU6050 -pohjainen digitaalinen vesivaaka: 3 vaihetta

Video: Arduino- ja MPU6050 -pohjainen digitaalinen vesivaaka: 3 vaihetta
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Marraskuu
Anonim
Image
Image
Piiri
Piiri

Tervetuloa ensimmäiseen opetettavaani! Toivon, että pidät sitä informatiivisena. Voit vapaasti antaa palautetta, joko positiivista tai negatiivista.

Tämän projektin tarkoituksena on tehdä arduino- ja MPU6050 -pohjainen digitaalinen vesivaaka. Vaikka valmis malli ja koodi on minun, alkuperäinen käsite ja suuri osa koodista, josta olen työskennellyt, eivät ole. En harrasta plagiointia, joten kiitän enemmän kuin mielelläni niitä, joiden ideoita olen rakentanut. Kaksi tärkeintä ihmistä, joille haluan huutaa, ovat YouTuberin Paul McWhorter ja DroneBot Workshop. Lisään linkit niihin YouTube -hyödyllisiin PDF -linkkeihini. Kiitos myös EEEnthusiastille hänen informatiivisesta videostaan MPU6050: n käytöstä, mukaan lukien moduulin määrittäminen ja lukeminen ilman ulkoista kirjastoa (linkki on samassa PDF -tiedostossa).

Projektini, jonka olen tuottanut, toimii sellaisenaan ja on satumaisen tarkka, varmasti jopa 45% kumpaankin suuntaan. Voit käyttää sitä juuri sellaisena kuin olen suunnitellut sen, tai voit räätälöidä sen oman makusi mukaan. Älykkäämmät huomaavat, että projektini näyttää lähes identtiseltä DroneBot -työpajan tuottaman kanssa, mutta voit olla varma, että eroja on merkittäviä, varsinkin kun on kyse kulmien laskentakoodista sekä mahdollisuudesta tallentaa kalibrointiarvot Eeprom!

Jotkut ominaisuudet herättävät ruokahalua:

Pitch and roll -kulmat käytettävissä 0,1 asteen tarkkuudella.

Gyro -yksikön suunnan automaattinen tunnistus (vaaka- tai pystysuora)

Täysi kalibrointi ja tulokset tallennetaan automaattisesti eepromiin

LED -ilmaisin -2 … +2 astetta (vaihdettavissa koodissa)

Muu äänimerkki tasosta (voidaan kytkeä päälle/pois lennon aikana)

Kompakti virtapiiri, joka vaatii vain vähän komponentteja

Aloitetaan.

Tarvikkeet

Tämä projekti (sellaisenaan) käyttää seuraavia kohteita:

1 x Arduino nano (minun on klooni)

1 x MPU6050 gyro/kiihtyvyysmittari

1 x LCD - 16 x 2 + I2C -liitäntä

1 x Paina kytkeäksesi

1 x pietsosummeri

1 x vihreä LED

2 x keltaista LEDiä

2 x punaista LEDiä

5 x 220 ohmin vastukset

Erilaiset kytkentäkaapelit

Leipälauta

Virtalähde (omani käytti 5 voltin USB -virtalähdettä, kun sitä ei ollut kytketty tietokoneeseen, mutta voit käyttää asianmukaisesti liitettyä akkua)

Vaihe 1: Piiri

Piiri
Piiri
Piiri
Piiri

Olettaen, että sinulla on kaikki komponentit, sinun on rakennettava leipälauta.

Näytän asennukseni oppaana, mutta liitännät ovat seuraavat:

Arduino -nasta D2 yhdistetään painokytkimen 1 puolelle. Painokytkimen toinen puoli on kytketty maahan

Arduino -nasta D3 kytketään 220 ohmin vastuksen yhdelle puolelle. Vastuksen toinen puoli kytkeytyy punaisen LED -valon annodeen. Punaisen LED -katodi menee maahan.

Arduino -nasta D4 kytketään 220 ohmin vastuksen yhdelle puolelle. Vastuksen toinen puoli kytkeytyy keltaisen LED -valon annodeen. Keltaisen LED -katodi menee maahan.

Arduino -nasta D5 kytketään 220 ohmin vastuksen yhdelle puolelle. Vastuksen toinen puoli kytkeytyy vihreän LED -valon annodiin. Vihreän LED -katodi menee maahan.

Arduino -nasta D6 kytketään 220 ohmin vastuksen yhdelle puolelle. Vastuksen toinen puoli kytkeytyy keltaisen LED -valon annodiin. Keltaisen LED -katodi menee maahan.

Arduino -nasta D7 kytketään 220 ohmin vastuksen yhdelle puolelle. Vastuksen toinen puoli kytkeytyy punaisen LED -valon annodeen. Punaisen LED -katodi menee maahan.

Arduino -nasta D8 yhdistetään Piezo -summerin toiselle puolelle. Summerin toinen puoli on kytketty maahan.

Arduino -nastainen A4 -liitin liitetään SDA -nastoihin MPU6050- JA LCD -näytössä.

Arduino -nasta A5 yhdistetään MPL6050: n ja nestekidenäytön SCL -nastoihin

5 V: n teho ja Gnd MPU6050: lle ja LCD: lle tulevat Arduino Nano 5v- ja GND -nastoista.

Kun se on valmis, sen pitäisi olla samanlainen kuin näytetyt asetukset. Laitoin blu takin MPU6050: n alle pysäyttääksesi sen liikkumisen ja myös nestekidenäytölle, jotta se pysyy leipälaudan reunalla.

Vaihe 2: Koodi

Liitteenä oleva koodi on koodi, jota olen käyttänyt tässä projektissa. Ainoa kirjasto, jossa sinulla voi olla ongelma, on

LiquidCrystal_I2C.h -kirjasto, kun toin tämän, kun aloin työskennellä nestekidenäytöillä. Valitettavasti on muutamia kirjastoja, jotka käyttävät samaa #include -lausetta, mutta ovat hieman erilaisia. Jos sinulla on ongelmia omasi kanssa, etsi toinen sinulle sopiva LCD -koodi ja muuta sitä vastaavasti. Todennäköisesti vain kokoonpano eroaa toisistaan. Kaikkien tulostuskomentojen pitäisi toimia samalla tavalla.

Kaikki koodi on kommentoitu ja olettaen, että olen tehnyt sen oikein, siellä on myös video, joka selittää kaiken, mutta tässä on muutamia huomioitavia kohtia:

LiquidCrystal_I2C lcd (0x27, 16, 2);

Yllä oleva koodi on nestekidenäytön asetukset. Jos kirjasto on erilainen, sinun on ehkä muutettava paitsi kirjastoasi myös tätä riviä.

{lcd.setCursor (0, 1); lcd.print ("Vaakasuora!"); suunta = HORIZONTAL; // Lue raaka acc- ja gyro-tiedot MPU-6050-laitteesta 1000 kertaa (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Lisää gyro x -poikkeama gyro_x_cal -muuttujaan gyro_x_cal += gyro_x; // Lisää gyro y -siirtymä gyro_y_cal -muuttujaan gyro_y_cal += gyro_y; // Lisää gyro z -poikkeama gyro_z_cal -muuttujaan gyro_z_cal += gyro_z; // Lisää acc x -poikkeama acc_x_cal -muuttujaan acc_x_cal += acc_x; // Lisää acc y -siirtymä acc_y_cal -muuttujaan acc_y_cal += acc_y; } // Jaa kaikki tulokset 1000: lla saadaksesi keskimääräinen offset 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); // Huomaa, ettemme tallenna poikkeamaa acc_z: lle painovoiman vuoksi! viive (500); }

Yllä oleva koodilohko suorittaa kalibrointirutiinin. Tämä koodi on vaakasuuntaista kalibrointia varten. Pystysuoran kalibroinnin koodi on lähes identtinen (huomaa, koodi tietää onko MPU6050 asennettu vaakasuoraan vai pystysuoraan!). MPU6050, luetaan 1000 kertaa. sopivat arvot lisätään kumulatiivisesti ja jaetaan sitten 1000: lla keskimääräisen "offset" -arvon saamiseksi. Nämä arvot tallennetaan sitten Nano eepromiin. Kaikki vaakasuuntaiset kalibrointiarvot tallennetaan eeprom -osoitteesta 0. Kaikki pystysuuntaiset arvot tallennetaan alusta alkaen eeprom -osoitteesta 24. Kalibrointi TÄYTYY tehdä täysin tasaisella pinnalla, muuten ne eivät merkitse mitään.

/ * * Seuraavat rivit käsittelevät raakatiedot muuttaakseen ne kulmiksi, jotka voidaan lähettää nestekidenäytölle ja LED -valolle. * Arvo 4096, jolla kiihtyvyystiedot on jaettu, on otettu MPU6050 -taulukosta ja perustuu näytteenottotaajuuteen. * Arvo 9,8 on painovoima /2/3.141592656 * 360; // Raakatiedot phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Raakatiedot dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * Tässä osassa käytetään gyrossa olevia tietoja järjestelmän reagointikyvyn parantamiseksi * arvo 65,5, jolla gyrotiedot on jaettu, on otettu MPU6050 -lomakkeesta ja perustuu näytteenottotaajuuteen */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + teetaM*.04; // Alipäästösuodatin phi = (phi + (gyro_x/65,5)*dt)*.96 + phiM*.04; // Alipäästösuodatin

Yllä oleva koodi on kulmat laskeva aineisto. Toivottavasti kommentit antavat hieman käsitystä siitä, miten se toimii, mutta tarkempia selityksiä varten tutustu Paul McWhortersin videoon, joka on linkitetty liitteenä olevaan PDF -tiedostoon. Sanon kuitenkin, että voit muuttaa gyroskoopin ja kiihtyvyysmittarin näytteenottotaajuutta (joka tehdään asennuksen MPU6050 -aliohjelmassa koodini alaosassa). Jos muutat näytteenottotaajuutta, sinun on myös muutettava raakadatan jakamismäärä. Kiihtyvyysmittarin tiedoille nykyinen arvo on 4096. Gyroskoopille nykyinen arvo on 65,5.

Katso liitteenä olevista tietolomakkeista ja EEEntusiastin videosta (linkki liitteenä olevassa PDF -tiedostossa) saadaksesi tarkempia tietoja näytteenotto- ja offset -arvojen löytämisestä.

Vaihe 3: Seuraavat vaiheet

Tässä vaiheessa on toivottavasti tehty tämä projekti, mutta mitä nyt?

Ensinnäkin, miksi et itse rakenna sitä vesivaakaksi, jota voit käyttää. Voit ostaa halvan vesivaa'an (varmista, että se on laatikkotyyppi), jota voit mukauttaa, tai jos sinulla on sarja, tulosta oma vesivaaka/laatikko.

Ehkä leikkiä gyroskoopin ja kiihtyvyysanturin näytteenottotaajuuksilla nähdäksesi, toimivatko ne paremmin yhdellä nopeudella kuin toisella.

Yritä tarkentaa koodia edelleen. Esimerkiksi tällä hetkellä yli 45 astetta ilmoitettu kulma on lievästi sanottuna karkea. Onko olemassa keino kiertää se?

Jos sinulla on kysyttävää, olipa se kuinka yksinkertainen tahansa, kysy. Jos voin auttaa, niin autan.

Jos pidät tästä ohjeesta, anna tykkäys, jotta tiedän.

Jos teet tämän, näytä minulle (varsinkin jos se on toimiva kotelo).

KIITOS

Suositeltava: