- Nepieciešamie materiāli:
- Ķēdes shēma:
- Iestatījuma barošana:
- Arduino programmēšana:
- Android lietojumprogrammas sagatavošana, izmantojot apstrādi:
- Arduino slīpuma mērītāja darbība:
MPU6050 ir IC 3-ass akselerometru un 3-ass žiroskopa apvienotas vienā vienībā. Tajā ir arī temperatūras sensors un DCM, lai veiktu sarežģītu uzdevumu. MPU6050 parasti izmanto, veidojot Drone un citus tālvadības robotus, piemēram, pašbalansējošu robotu. Šajā projektā mēs uzzināsim, kā izmantot MPU6050 ir iebūvēts slīpuma mērītājs vai līmeņrade. Tā kā mēs zinām, ka slīpuma mērītāju izmanto, lai pārbaudītu, vai virsma ir ideāli izlīdzināta vai nē, tie ir pieejami vai nu kā burbuļbumbas, vai arī kā digitālie skaitītāji. Šajā projektā mēs izveidosim digitālo slīpuma mērītāju, kuru var uzraudzīt, izmantojot Android lietojumprogrammu. Attālināta displeja, piemēram, mobilā tālruņa, izmantošanas iemesls ir tas, ka mēs varam kontrolēt MPU6050 vērtības, neskatoties uz aparatūru, tas būtu ļoti noderīgi, ja MPU6050 novietotu uz drona vai citās nepieejamās vietās.
Nepieciešamie materiāli:
- Arduino Pro-mini (5V)
- MPU6050 žiroskopu sensors
- HC-05 vai HC-06 Bluetooth modulis
- FTDI valde
- Maizes dēlis
- Savienojošie vadi
- Viedtālrunis
Ķēdes shēma:
Pilna šī Arduino Tilt Sensor projekta shēma ir parādīta zemāk. Tam vienkārši ir tikai trīs sastāvdaļas, un to var viegli uzbūvēt virs maizes dēļa.
The MPU6050 sazinās ar palīdzību I2C un līdz ar to SDA pin ir savienots ar A4 pin no Arduino kas ir SDA pin un SCL pin ir savienots ar A5 pin no Arduino. HC-06 Bluetooth modulis strādā ar palīdzību Serial komunikācijas tādējādi Rx pin Bluetooth ir savienots pin D11 un Tx pin Bluetooth ir saistīts ar pin D10 no Arduino. Šīs tapas D10 un D11 tiks konfigurētas kā sērijas tapa, programmējot Arduino. HC-05 modulis un MSP6050 modulis darbojas ar + 5 V, un tāpēc tos darbina Arduino Vcc tapa, kā parādīts iepriekš.
Es izmantoju dažus paneļa savienojuma vadus un izveidoju uzstādījumu virs neliela paneļa. Kad savienojumi ir izdarīti, mans dēlis izskatās šādi.
Iestatījuma barošana:
Jūs varat vai nu barot savu ķēdi caur FTDI programmēšanas paneli, kā es to darīju, vai arī izmantot 9V akumulatoru vai 12V adapteri un savienot to ar Arduino pro mini neapstrādāto tapu. Arduino Pro-mini ir iebūvēts sprieguma regulators, kas pārveidotu šo regulēto ārējo spriegumu + 5V.
Arduino programmēšana:
Kad aparatūra ir gatava, mēs varam sākt programmēt mūsu Arduino. Kā vienmēr pilns šī projekta kods ir atrodams šīs lapas apakšdaļā. Bet, lai labāk izprastu projektu, esmu sadalījis kodu maziem činkiem un paskaidrojis tos kā tālāk norādītās darbības.
Pirmais solis būtu MPU6050 saskarne ar Arduino. Šajā projektā mēs izmantosim Korneliusz izstrādāto bibliotēku, kuru var lejupielādēt no saites zemāk
MPU6050 Liberty - Korneliusz Jarzebski
Lejupielādējiet ZIP failu un pievienojiet to savam Arduino IDE. Pēc tam dodieties uz File-> Piemēri-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Tas atvērs programmas paraugu, kurā tiek izmantota tikko lejupielādētā bibliotēka. Tātad noklikšķiniet uz augšupielādes un gaidiet, kamēr programma tiks augšupielādēta jūsu Arduino Pro mini. Kad tas ir izdarīts, atveriet seriālo monitoru un iestatiet datu pārraides ātrumu uz 115200 un pārbaudiet, vai jūs saņemat sekojošo.
Sākotnēji visas trīs vērtības būs kā nulle, bet, pārvietojot maizes dēli, jūs varat novērot, kā šīs vērtības mainās. Ja viņi mainīs, tas nozīmē, ka savienojums ir pareizs, pārbaudiet savienojumus. Veltiet laiku šeit, lai pamanītu, kā trīs vērtības Pitch Roll un Yaw mainās atkarībā no sensora noliekšanas veida. Ja jūs sajaucaties, nospiediet Arduino atiestatīšanas pogu, un vērtības atkal tiks inicializētas uz nulli, pēc tam noliekiet sensoru vienā virzienā un pārbaudiet, kuras vērtības mainās. Zemāk redzamais attēls palīdzēs jums labāk saprast.
No šiem trim parametriem mūs interesē tikai Roll and Pitch. Vērtība “Roll” mums pastāstīs par slīpumu X asī, bet “Pitch” vērtība - par Y ass slīpumu. Tagad, kad mēs esam sapratuši pamatus, faktiski var sākt programmēt Arduino, lai lasītu šīs vērtības, nosūtīt to uz Arduino, izmantojot Bluetooth. Kā vienmēr, sāksim iekļaut visas šim projektam nepieciešamās bibliotēkas
# iekļaut
Tad mēs inicializējam programmatūras sēriju Bluetooth modulim. Tas ir iespējams, pateicoties programmatūras sērijas bibliotēkai Arduino, IO tapas var ieprogrammēt kā seriālas tapas. Šeit mēs izmantojam digitālās tapas D10 un D11, kur D10 id Rx un D11 ir Tx.
SoftwareSerial BT (10, 11); // RX, TX
Pēc tam mēs inicializējam mainīgos un objektus, kas nepieciešami programmai, un pāriet uz funkciju setup (), kur mēs norādām sērijas monitora un Bluetooth pārraides ātrumu. HC-05 un HC-06 pārraides ātrums ir 9600, tāpēc tas ir obligāti jāizmanto. Tad mēs pārbaudām, vai Arduino IIC kopne ir savienota ar MPU6050, ja ne, mēs izdrukājam brīdinājuma ziņojumu un paliekam tur, kamēr ierīce ir pievienota. Pēc tam mēs kalibrējam žiroskopu un iestatām tā sliekšņa vērtības, izmantojot attiecīgās funkcijas, kā parādīts zemāk.
void setup () {Serial.begin (115200); BT. Sākums (9600); // sāciet Bluetooth sakarus ar 9600 baudratu // Inicializējiet MPU6050, kamēr (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Nevarēja atrast derīgu MPU6050 sensoru, pārbaudiet vadu!"); kavēšanās (500); } mpu.calibrateGyro (); // kalibrēt žiroskopu starta laikā mpu.setThreshold (3); // Kontrolē jutīgumu}
Rinda “ mpu.calibrateGyro ();” kalibrējiet MPU6050 pozīcijai, kurā tā pašlaik atrodas. Šo līniju programmas iekšienē var izsaukt vairākas reizes ikreiz, kad nepieciešams kalibrēt MPU6050 un visām vērtībām jābūt iestatītām uz nulli. “Mpu.setThreshold (3);” šī funkcija kontrolē, cik lielā mērā mainās sensora kustības vērtība. Pārāk maza vērtība palielinās troksni, tāpēc esiet uzmanīgs, kamēr ar to nodarbojaties.
Tukšuma cilpas iekšienē () mēs atkārtoti lasām žiroskopa un temperatūras sensora vērtības, aprēķinām piķa, ripas un šķībuma vērtību, nosūta to uz Bluetooth moduli. Nākamās divas rindas nolasīs neapstrādātās žiroskopu vērtības un temperatūras vērtību
Vektora norma = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Pēc tam mēs aprēķinām piķi, ritējumu un līkumu, reizinot ar laika soli un saskaitot to līdz iepriekšējām vērtībām. TimeStep nav nekas, bet intervāls starp secīgiem lasījumiem.
piķis = piķis + norma. YAxis * timeStep; roll = roll + norma.XAxis * timeStep; yaw = yaw + norma.ZAxis * laiksSolis;
Lai labāk izprastu laika soli, apskatīsim zemāk redzamo rindu. Šī rinda ir novietota, lai precīzi nolasītu MPU6050 vērtības ar 10 mS vai 0,01 sekundes intervālu. Tātad mēs paziņojam timeStep vērtību kā 0,01. Izmantojiet zemāk esošo līniju, lai turētu programmu, ja tur ir vairāk laika. (millis () - taimeris ()) norāda laiku, kas nepieciešams programmas izpildei. Mēs to vienkārši atņemam ar 0,01 sekundi, un atlikušajā laikā mēs vienkārši turam savu programmu tur, izmantojot kavēšanās funkciju.
aizkave ((timeStep * 1000) - (milis () - taimeris));
Kad esam pabeiguši vērtību lasīšanu un aprēķināšanu, mēs tos varam nosūtīt uz mūsu tālruni, izmantojot Bluetooth. Bet šeit ir nozveja. Izmantotais Bluetooth modulis var nosūtīt tikai 1 baitu (8 bitus), kas ļauj mums nosūtīt numurus tikai no 0 līdz 255. Tāpēc mums ir jāsadala savas vērtības un jāapkarto tā šajā diapazonā. To veic šādas rindas
if (roll> -100 && roll <100) x = karte (roll, -100, 100, 0, 100); ja (piķis> -100 && piķis <100) y = karte (piķis, -100, 100, 100, 200); ja (temp> 0 && temp <50) t = 200 + int (temp);
Kā jūs varat to saprast, ruļļa vērtība tiek mainīta no 0 līdz 100 mainīgajā x, un piķis tiek attēlots līdz 100 līdz 200 mainīgajam y, un temp tiek kartēts 200 un vairāk mainīgajam t. Mēs varam izmantot to pašu informāciju, lai izgūtu datus no tā, ko esam nosūtījuši. Visbeidzot, mēs ierakstām šīs vērtības, izmantojot Bluetooth, izmantojot šādas rindas.
BT. Rakstīt (x); BT. Rakstīt (y); BT. Rakstīt (t);
Ja esat sapratis visu programmu, ritiniet uz leju, lai apskatītu programmu, un augšupielādējiet to Arduino dēlī.
Android lietojumprogrammas sagatavošana, izmantojot apstrādi:
Šī Arduino Inclinometer Android lietotne tika izstrādāta, izmantojot Processing IDE. Tas ir ļoti līdzīgs Arduino, un to var izmantot, lai izveidotu sistēmas lietojumprogrammu, Android lietojumprogrammu, tīmekļa dizainu un daudz ko citu. Mēs jau izmantojām apstrādi, lai izstrādātu dažus citus mūsu lieliskos projektus, kas ir uzskaitīti zemāk
- Spēle Ping Pong, izmantojot Arduino
- Viedtālrunis kontrolē FM radio, izmantojot apstrādi.
- Arduino radaru sistēma, izmantojot apstrādes un ultraskaņas sensoru
Tomēr nav iespējams izskaidrot pilnu kodu, kā izveidot šo lietojumprogrammu. Tātad jums ir divi veidi, kā to pārvarēt. Vai nu jūs varat lejupielādēt APK failu no šīs saites un instalēt android lietojumprogrammu tieši tālrunī. Vai arī ritiniet zemāk, lai atrastu pilnu apstrādes kodu un pats uzzinātu, kā tas darbojas
ZIP faila iekšpusē varat atrast mapi ar nosaukumu data, kas sastāv no visiem attēliem un citiem avotiem, kas jāielādē android lietojumprogrammā. Zemāk esošajā rindiņā tiek nolemts, ar kuru vārdu Bluetooth vajadzētu automātiski izveidot savienojumu
bt.connectToDeviceByName ("HC-06");
Funkcijas draw () iekšpusē lietas tiks atkārtoti izpildītas. Šeit mēs zīmējam attēlus, parādām tekstu un animējam joslas, pamatojoties uz Bluetooth moduļa vērtībām. Jūs varat pārbaudīt, kas notiek katras funkcijas iekšpusē, izlasot programmu.
void draw () // Bezgalīgā cilpa {background (0); imageMode (CENTRS); attēls (logotips, platums / 2, augstums / 1,04, platums, augstums / 12); slodzes_attēli (); textfun (); getval (); }
Visbeidzot, ir vēl viena svarīga lieta, kas jāpaskaidro, atcerieties, ka mēs pieveicam piķa, ripas un temp vērtību no 0 līdz 255. Tāpēc šeit mēs atkal to atgriežam pie normālajām vērtībām, pretēji kartējot to ar normālām vērtībām.
if (info <100 && info> 0) x = karte (info, 0, 100, - (platums / 1,5) / 3, + (platums / 1,5) / 3); // x = informācija; cits, ja (info <200 && info> 100) y = karte (info, 100, 200, - (platums / 4,5) /0,8, + (platums / 4,5) /0,8); // y = informācija; cits, ja (info> 200) temp = info -200; println (temp, x, y);
Ir daudz labāki veidi, kā iegūt datus no Bluetooth moduļa uz tālruni, taču, tā kā tas ir tikai hobija projekts, mēs tos esam ignorējuši, ja ir interese, varat to padziļināt.
Arduino slīpuma mērītāja darbība:
Kad esat sagatavojies aparatūrai un lietojumprogrammai, ir pienācis laiks izklaidēties ar mūsu uzbūvēto. Augšupielādējiet Arduino kodu uz tāfeles, jūs varat arī noņemt komentārus par Serial.println līnijām un pārbaudīt, vai aparatūra darbojas, kā paredzēts, izmantojot seriālo monitoru. Jebkurā gadījumā tas ir pilnīgi neobligāti.
Kad kods ir augšupielādēts, palaidiet Android lietojumprogrammu savā mobilajā tālrunī. Lietojumprogrammai vajadzētu automātiski izveidot savienojumu ar jūsu HC-06 moduli, un lietojumprogrammas augšdaļā tā parādīs “Connect to: HC-06”, kā parādīts zemāk.
Sākumā visas vērtības būs nulle, izņemot temperatūras vērtību. Tas ir tāpēc, ka Arduino ir kalibrējis MPU-6050 šai pozīcijai kā atsauci, tagad jūs varat noliekt aparatūru un pārbaudīt, vai mobilajā lietojumprogrammā vērtības mainās arī kopā ar animāciju. Pilnīga pieteikuma darbība ir atrodama zemāk redzamajā video. Tāpēc tagad jūs varat novietot maizes dēli jebkur un pārbaudīt, vai virsma ir ideāli izlīdzināta.
Ceru, ka sapratāt projektu un uzzinājāt no tā kaut ko noderīgu. Ja jums ir kādas šaubas, lūdzu, izmantojiet zemāk esošo komentāru sadaļu vai forumus, lai to atrisinātu.