- Mga Materyal na Kinakailangan:
- Diagram ng Circuit:
- Pinapagana ang iyong pag-set up:
- Programming ang iyong Arduino:
- Paghahanda ng Android Application gamit ang Pagproseso:
- Paggawa ng Arduino Inclinometer:
Ang MPU6050 ay isang IC 3-axis accelerometer at isang 3-axis gyroscope na pinagsama sa isang yunit. Naglalagay din ito ng isang sensor ng temperatura at isang DCM upang maisagawa ang isang kumplikadong gawain. Ang MPU6050 ay karaniwang ginagamit sa pagbuo ng Drone at iba pang mga remote robot tulad ng isang self-balancing robot. Sa proyektong ito matututunan natin kung paano gamitin ang MPU6050 ay binuo ng isang Inclinometer o Spirit Leveler. Tulad ng alam natin na ginagamit ang isang inclinometer upang suriin kung ang isang ibabaw ay perpektong na-leveled o hindi, magagamit ang mga ito bilang mga sprit bubble o bilang mga digital meter. Sa proyektong ito, magtatayo kami ng isang Digital Inclinometer na maaaring subaybayan gamit ang isang Android application. Ang dahilan para sa paggamit ng isang remote display tulad ng isang mobile phone ay maaari naming subaybayan ang mga halaga mula sa MPU6050 nang hindi kinakailangang tingnan ang hardware, magiging napaka madaling gamiting ito kapag ang MPU6050 ay nakalagay sa isang drone o ilang ibang hindi maa-access na lokasyon.
Mga Materyal na Kinakailangan:
- Arduino Pro-mini (5V)
- MPU6050 Gyro Sensor
- HC-05 o HC-06 Bluetooth module
- Board ng FTDI
- Breadboard
- Mga kumokonekta na mga wire
- Smart Phone
Diagram ng Circuit:
Ang kumpletong diagram ng circuit para sa Arduino Tilt Sensor Project na ito ay ipinapakita sa ibaba. Mayroon lamang itong tatlong mga sangkap at madaling maitayo sa ibabaw ng pisara.
Ang MPU6050 ay nakikipag-usap sa tulong ng I2C at samakatuwid ang SDA pin ay konektado sa A4 pin ng Arduino na kung saan ay ang SDA pin at ang SCL pin ay konektado sa A5 pin ng Arduino. Ang HC-06 Bluetooth Module gumagana sa tulong ng mga serial komunikasyon samakatuwid ay ibinigay ang Rx pin ng Bluetooth ay konektado sa pin D11 at ang Tx pin ng Bluetooth ay konektado sa pin D10 ng Arduino. Ang mga pin D10 at D11 ay mai-configure bilang Serial pin sa pamamagitan ng pagprograma ng Arduino. Ang module na HC-05 at ang module ng MSP6050 ay nagpapatakbo sa + 5V at sa gayon sila ay pinalakas ng Vcc pin ng Arduino tulad ng ipinakita sa itaas.
Gumamit ako ng ilang mga breadboard na kumukonekta sa mga wire at itinayo ang set-up sa isang maliit na breadboard. Kapag tapos na ang mga koneksyon ang aking board ay ganito sa ibaba.
Pinapagana ang iyong pag-set up:
Maaari mong mapagana ang iyong circuit sa pamamagitan ng FTDI programming board tulad ng ginawa ko, o gumamit ng isang 9V na baterya o 12V adapter at ikonekta ito sa Raw pin ng Arduino pro mini. Ang Arduino Pro-mini ay may isang built-in na boltahe regulator na magpapalit ng panlabas na boltahe na kinokontrol + 5V.
Programming ang iyong Arduino:
Kapag handa na ang hardware, maaari naming simulang i-program ang aming Arduino. Gaya ng lagi ang kumpletong code para sa proyektong ito ay matatagpuan sa ilalim ng pahinang ito. Ngunit upang mas maintindihan ang proyekto ay nasira ko ang code sa maliliit na chink at ipinaliwanag ang mga ito bilang mga hakbang sa ibaba.
Ang unang hakbang ay makikisalamuha sa MPU6050 kay Arduino. Para sa proyektong ito gagamitin namin ang library na binuo ni Korneliusz na maaaring ma-download mula sa link sa ibaba
MPU6050 Liberty - Korneliusz Jarzebski
I-download ang ZIP file at idagdag ito sa iyong Arduino IDE. Pagkatapos magtungo sa File-> Mga halimbawa-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Bubuksan nito ang halimbawang programa na gumagamit ng silid-aklatan na na-download lamang namin. Kaya mag-click sa pag-upload at hintaying ma-upload ang programa sa iyong Arduino Pro mini. Kapag tapos na iyon buksan ang iyong serial monitor at itakda ang iyong baud rate sa 115200 at suriin kung nakukuha mo ang sumusunod.
Sa una, ang lahat ng tatlong mga halaga ay magiging bilang zero, ngunit sa paglipat mo ng iyong breadboard maaari mong obserbahan ang mga halagang ito na nabago. Kung binago nila nangangahulugan ito na ang iyong koneksyon ay tama, suriin ang iyong mga koneksyon. Tumagal ng ilang oras dito mapansin kung paano ang tatlong mga halaga ng Pitch Roll at Yaw ay nag- iiba ayon sa paraan ng pagkiling mo ng iyong sensor. Kung naguguluhan ka pindutin ang pindutan ng pag-reset sa Arduino at ang mga halaga ay sisimulan sa zero muli, pagkatapos ikiling ang sensor sa isang direksyon at suriin kung aling mga halaga ang magkakaiba. Ang larawan sa ibaba ay makakatulong sa iyo upang higit na maunawaan.
Sa tatlong parameter na ito interesado lamang kami sa Roll at Pitch. Sasabihin sa amin ng halaga ng Roll ang tungkol sa pagkahilig sa X-axis at sasabihin sa amin ng halagang Pitch ang tungkol sa pagkahilig sa Y-Axis. Ngayon na naintindihan na namin ang mga pangunahing kaalaman hayaan talagang simulan ang pag-program ng Arduino upang basahin ang mga halagang ito ipadala ito sa Arduino sa pamamagitan ng Bluetooth. Gaya ng lagi magsimula tayo sa pamamagitan ng pagsasama ng lahat ng mga aklatan na kinakailangan para sa proyektong ito
# isama
Pagkatapos ay pinasimulan namin ang serial ng software para sa module ng Bluetooth. Posible ito dahil sa library ng Serial Software sa Arduino, ang mga pin ng IO ay maaaring mai-program upang gumana bilang mga Serial pin. Narito ginagamit namin ang mga digital na pin na D10 at D11, kung saan ang D10 id Rx at D11 ay Tx.
SoftwareSerial BT (10, 11); // RX, TX
Sinusundan ng nasisimulan namin ang mga variable at bagay na kinakailangan para sa programa at lumipat sa pag- andar ng () pag- andar kung saan tinukoy namin ang rate ng baud para sa Serial monitor at Bluetooth. Para sa HC-05 at HC-06 ang baud rate ay 9600 kaya sapilitan na gamitin ang pareho. Pagkatapos ay suriin namin kung ang IIC bus ng Arduino ay konektado sa MPU6050 kung hindi nagpi-print kami ng isang mensahe ng babala at mananatili doon hangga't nakakonekta ang aparato. Pagkatapos nito, kinakalibrate namin ang Gyro at itinakda ang mga halagang threshold nito gamit ang kani-kanilang mga function tulad ng ipinakita sa ibaba.
void setup () {Serial.begin (115200); BT.begin (9600); // simulan ang komunikasyon ng Bluetooth sa 9600 baudrate // Initialize MPU6050 habang (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Hindi mahanap ang isang wastong sensor ng MPU6050, suriin ang mga kable!"); pagkaantala (500); } mpu.calibrateGyro (); // Calibrate gyroscope habang nagsisimula mpu.setThreshold (3); // Kinokontrol ang pagkasensitibo}
Ang linya na " mpu.calibrateGyro ();" i-calibrate ang MPU6050 para sa posisyon na kasalukuyang nakalagay. Ang linyang ito ay maaaring tawaging maraming beses sa loob ng programa tuwing ang MPU6050 ay kailangang mai-calibrate at ang lahat ng mga halaga ay maitatakda sa zero. "Mpu.setThreshold (3);" kinokontrol ng pagpapaandar na ito kung magkano ang pagkakaiba-iba ng halaga para sa paggalaw sa sensor ng masyadong mababang halaga ay magpapataas ng ingay kaya maging maingat ka habang kinakalikot ito.
Sa loob ng void loop (), paulit-ulit naming binasa ang mga halaga ng Gyroscope at Temperature sensor na kalkulahin ang halaga ng pitch, roll at yaw, ipadala ito sa module ng Bluetooth. Basahin ng sumusunod na dalawang linya ang mga raw na halaga ng Gyro at ang halagang temperatura
Vector norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Susunod, kinakalkula namin ang pitch, roll, at yaw sa pamamagitan ng pagpaparami ng hakbang sa oras at pagdaragdag nito sa mga nakaraang halaga. Ang isang timeStep ay walang anuman kundi ang agwat sa pagitan ng sunud-sunod na pagbabasa.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Upang maunawaan nang mas mahusay ang hakbang sa oras tingnan natin ang nasa ibaba na linya. Ang linyang ito ay inilalagay upang basahin ang mga halaga mula sa MPU6050 nang eksakto sa isang agwat ng 10mS o 0.01 Pangalawa. Kaya idineklara namin ang halaga ng timeStep bilang 0.01. At gamitin ang linya sa ibaba upang hawakan ang programa kung doon kung may natitirang oras pa. Ang (millis () - timer ()) ay nagbibigay ng oras na ginugol para sa pagpapatupad ng programa sa ngayon. Ibawas lang namin ito sa 0.01 segundo at para sa natitirang oras ay hawak namin doon ang aming programa gamit ang pagpapaandar na pagpapaandar.
antala ((timeStep * 1000) - (millis () - timer));
Kapag tapos na kaming basahin at kalkulahin ang mga halaga, maaari naming ipadala ang mga ito sa aming telepono sa pamamagitan ng Bluetooth. Ngunit may isang catch dito. Ang module ng Bluetooth na ginagamit namin ay maaaring magpadala lamang ng 1 byte (8 bits) na nagpapahintulot sa amin na magpadala lamang ng mga numero mula 0 hanggang 255. Kaya kailangan nating hatiin ang aming mga halaga at mai-map ito sa loob ng saklaw na ito. Ginagawa ito ng mga sumusunod na linya
kung (roll> -100 && roll <100) x = mapa (roll, -100, 100, 0, 100); kung (pitch> -100 && pitch <100) y = mapa (pitch, -100, 100, 100, 200); kung (temp> 0 && temp <50) t = 200 + int (temp);
Tulad ng maaari mong malaman, ang halaga ng roll ay nai-map sa 0 hanggang 100 sa variable x at ang pitch ay nai-map sa 100 hanggang 200 sa variable y at ang temp ay nai-map sa 200 at sa itaas sa variable t. Maaari naming gamitin ang parehong impormasyon upang makuha ang data mula sa ipinadala namin. Sa wakas ay isinusulat namin ang mga halagang ito sa pamamagitan ng Bluetooth gamit ang mga sumusunod na linya.
BT. Magsulat (x); BT. Magsulat (y); BT. Magsulat (t);
Kung naintindihan mo ang kumpletong programa, mag-scroll pababa upang tingnan ang programa at i-upload ito sa Arduino board.
Paghahanda ng Android Application gamit ang Pagproseso:
Ang android application para sa Arduino Inclinometer na ito ay binuo gamit ang Processing IDE. Ito ay halos kapareho sa Arduino at maaaring magamit upang lumikha ng application ng system, Android application, mga disenyo ng web at marami pa. Gumamit na kami ng pagproseso upang makabuo ng ilan sa aming iba pang mga cool na proyekto na nakalista sa ibaba
- Ping Pong Game gamit ang Arduino
- Kinokontrol ng Smart Phone FM Radio gamit ang Pagproseso.
- Arduino Radar System gamit ang Processing at Ultrasonic Sensor
Gayunpaman, hindi posible na ipaliwanag ang kumpletong code kung paano lumikha ng application na ito. Kaya mayroon kang dalawang paraan upang magawa ito. Alinman maaari mong i-download ang APK file mula sa link sa ibaba at direktang mai-install ang android application sa iyong telepono. O mag-scroll sa ibaba upang hanapin ang kumpletong code sa pagproseso at alamin ng iyong sarili kung paano ito gumagana
Sa loob ng ZIP file, maaari kang makahanap ng isang folder na tinatawag na data na binubuo ng lahat ng mga imahe at iba pang mga mapagkukunan na mai-load sa android application. Nagpapasya ang linya sa ibaba kung aling pangalan ang dapat awtomatikong kumonekta sa Bluetooth
bt.connectToDeviceByName ("HC-06");
Sa loob ng paggana ng () pagguhit , ang mga bagay ay paulit-ulit na naisasagawa dito iguhit namin ang mga imahe, ipakita ang teksto at buhayin ang mga bar batay sa mga halagang bumubuo sa module ng Bluetooth. Maaari mong suriin kung ano ang nangyayari sa loob ng bawat pag-andar sa pamamagitan ng pagbabasa sa pamamagitan ng programa.
void draw () // Ang walang katapusang loop {background (0); imageMode (CENTER); imahe (logo, lapad / 2, taas / 1.04, lapad, taas / 12); load_images (); textfun (); getval (); }
Sa wakas, may isa pang mahalagang bagay na ipaliwanag, tandaan na hinati natin ang halaga ng pitch, roll at temp sa 0 hanggang 255. Kaya narito ulit nating ibabalik ito sa normal na mga halaga sa pamamagitan ng pag-reverse sa pagmamapa nito sa mga normal na halaga.
kung (impormasyon <100 && info> 0) x = mapa (impormasyon, 0, 100, - (lapad / 1.5) / 3, + (lapad / 1.5) / 3); // x = impormasyon; iba pa kung (impormasyon <200 && info> 100) y = mapa (impormasyon, 100, 200, - (lapad / 4.5) /0.8, + (lapad / 4.5) /0.8); // y = info; kung hindi man (info> 200) temp = info -200; println (temp, x, y);
Mayroong mas mahusay na mga paraan upang makakuha ng data mula sa isang module ng Bluetooth sa telepono, ngunit dahil ito ay isang proyekto lamang sa libangan na hindi namin sila pinansin, maaari kang maghukay ng malalim kung interesado.
Paggawa ng Arduino Inclinometer:
Pagkatapos mong maghanda sa Hardware at Application, oras na upang magsaya sa itinayo namin. I-upload ang Arduino Code sa board, maaari mo ring alisin ang mga komento sa mga linya ng Serial.println at suriin kung gumagana ang hardware tulad ng inaasahan gamit ang serial monitor. Gayunpaman, iyon ay ganap na opsyonal.
Kapag na-upload na ang code, ilunsad ang Android application sa iyong mobile phone. Ang application ay dapat na awtomatikong kumonekta sa iyong module na HC-06 at ipapakita nito ang "Kumonekta sa: HC-06" sa tuktok ng application tulad ng ipinakita sa ibaba.
Sa una, ang lahat ng mga halaga ay magiging zero maliban sa halagang temperatura. Ito ay dahil na-calibrate ng Arduino ang MPU-6050 para sa posisyon na ito bilang isang sanggunian, ngayon ay maaari mong ikiling ang hardware at suriin na ang mga halaga sa mobile application ay nagbabago din kasama ang animasyon. Ang kumpletong pagtatrabaho ng application ay maaaring matagpuan sa video na ibinigay sa ibaba. Kaya ngayon maaari mong ilagay ang breadboard kahit saan at suriin kung ang ibabaw ay perpektong na-leveled.
Inaasahan kong naintindihan mo ang proyekto at natutunan ang isang bagay na kapaki-pakinabang mula rito. Kung mayroon kang alinlangan mangyaring gamitin ang seksyon ng komento sa ibaba o ang mga forum upang malutas ito.