Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Maligayang pagdating sa aking unang itinuro! Inaasahan kong malaman mo ito na nagbibigay-kaalaman. Mangyaring huwag mag-atubiling mag-iwan ng puna positibo man o negatibo.
Ang proyektong ito ay upang makagawa ng isang arduino at MPU6050 batay sa antas ng digital na espiritu. Habang ang natapos na disenyo at code ay akin, ang orihinal na konsepto at marami sa code na pinaghirapan ko ay hindi. Hindi ako nasa pamamlahiyo, kaya't higit akong nasisiyahan na magbigay ng kredito sa mga naisip kong ideya. Ang 2 pangunahing tao na nais kong bigyan ng isang hiyaw ay ang YouTuber's Paul McWhorter at DroneBot Workshop. Nagsasama ako ng mga link sa kanila sa aking kapaki-pakinabang na mga link na PDF. Salamat din sa EEEnthusiast para sa kanyang nagbibigay-kaalaman na video sa paggamit ng MPU6050 kasama ang pag-set up at pagbabasa mula sa module nang walang isang panlabas na library (ang kanyang link ay nasa parehong PDF).
Ang proyekto na aking nagawa, gumagana 'bilang ay' at tumpak na engkanto, tiyak na hanggang sa 45% sa alinmang direksyon. Maaari mong gamitin ito nang eksakto tulad ng naidisenyo ko ito, o maaari mo itong maiangkop sa iyong sariling kagustuhan. Ang mas matalinong sa iyo ay mapapansin na ang aking proyekto ay mukhang halos magkapareho sa ginawa ng workshop ng DroneBot, ngunit sigurado, may mga pagkakaiba-iba, lalo na pagdating sa code para sa pagkalkula ng mga anggulo, kasama ang pasilidad upang mag-imbak ng mga halaga ng pagkakalibrate sa Eeprom!
Ang ilang mga tampok upang mapukaw ang iyong gana sa pagkain:
Ang mga anggulo ng pitch at roll ay magagamit sa loob ng 0.1 ng isang degree.
Awtomatikong makita ang oryentasyon ng yunit ng gyro (pahalang o patayong)
Ganap na pagkakalibrate na may mga resulta na awtomatikong nakaimbak sa eeprom
Indikasyon ng LED mula -2 hanggang +2 degree (nababago sa code)
Karagdagang maririnig na pahiwatig ng antas (maaaring i-on / i-off sa n the fly)
Compact curcuit na nangangailangan ng kaunting mga bahagi
Magsimula na tayo.
Mga gamit
Ang proyektong ito (tulad ng) ay gumagamit ng mga sumusunod na item:
1 x Arduino nano (ang akin ay isang clone)
1 x MPU6050 module ng gyro / accelerometer
1 x LCD - 16 x 2 + I2C na koneksyon
1 x Push upang gumawa ng switch
1 x Piezo buzzer
1 x Green LED
2 x Yellow LED's
2 x Red LED's
5 x 220 ohm resistors
Iba't ibang mga jumper cable
Breadboard
Power supply (ang minahan ay gumamit ng isang 5v USB power bank, kapag hindi nakakonekta sa aking PC, ngunit maaari mong gamitin ang isang baterya na naaangkop na konektado)
Hakbang 1: Ang Circuit
Ipagpalagay na mayroon ka ng lahat ng mga bahagi, kakailanganin mong itayo ang iyong pisara.
Ipinapakita ko ang aking pag-set up bilang isang gabay, ngunit ang mga koneksyon ay ang mga sumusunod:
Ang Arduino pin D2 ay kumokonekta sa 1 gilid ng push switch. Ang kabilang panig ng push switch ay kumokonekta sa lupa
Ang Arduino pin D3 ay kumokonekta sa 1 gilid ng 220 ohm risistor. Ang iba pang bahagi ng risistor ay kumokonekta sa pag-annode ng Red LED. Ang Cathode of Red LED ay napupunta sa lupa.
Ang Arduino pin D4 ay kumokonekta sa 1 gilid ng 220 ohm risistor. Ang iba pang bahagi ng risistor ay kumokonekta sa pag-annode ng Yellow LED. Ang Cathode of Yellow LED ay pumupunta sa lupa.
Ang Arduino pin D5 ay kumokonekta sa 1 gilid ng 220 ohm risistor. Ang iba pang bahagi ng risistor ay kumokonekta sa pag-annode ng Green LED. Ang Cathode of Green LED ay napupunta sa lupa.
Ang Arduino pin D6 ay kumokonekta sa 1 gilid ng 220 ohm risistor. Ang iba pang bahagi ng risistor ay kumokonekta sa pag-annode ng Yellow LED. Ang Cathode of Yellow LED ay pumupunta sa lupa.
Ang Arduino pin D7 ay kumokonekta sa 1 gilid ng 220 ohm risistor. Ang iba pang bahagi ng risistor ay kumokonekta sa pag-annode ng Red LED. Ang Cathode of Red LED ay napupunta sa lupa.
Ang Arduino pin D8 ay kumokonekta sa isang bahagi ng Piezo buzzer. Ang iba pang bahagi ng buzzer ay kumokonekta sa lupa.
Ang Arduino pin A4 ay kumokonekta sa mga pin ng SDA sa MPU6050 AT sa LCD.
Ang Arduino pin A5 ay kumokonekta sa mga pin ng SCL sa MPU6050 AT sa LCD
Ang 5v lakas at Gnd para sa MPU6050 at LCD ay nagmula sa Arduino Nano 5v at GND pin ayon sa pagkakabanggit.
Kapag kumpleto na, dapat itong maging katulad sa ipinakita kong pag-setup. Inilagay ko ang blu tak sa ilalim ng MPU6050 upang ihinto ang paggalaw nito at sa LCD din upang mapanatili ito sa gilid ng breadboard.
Hakbang 2: Ang Code
Ang nakalakip na code ay ang code na ginamit ko para sa proyektong ito. Ang nag-iisang aklatan na maaaring mayroon ka isyu ay ang
LiquidCrystal_I2C.h library habang ini-import ko ito noong una akong nagsimulang magtrabaho kasama ang LCD. Sa kasamaang palad, mayroong ilang mga aklatan na gumagamit ng parehong # isama ang pahayag, ngunit bahagyang naiiba. Kung mayroon kang mga isyu sa iyo, maghanap ng isa pang LCD code na gagana para sa iyo at baguhin ang code nang naaayon. Malamang na ito ang pag-setup na magkakaiba. Lahat ng mga 'print' na utos ay dapat gumana ng pareho.
Ang lahat ng mga code ay na-puna at ipagpalagay na nagawa ko ito ng tama, magkakaroon din ng isang video na nagpapaliwanag sa lahat, ngunit narito ang ilang mga puntos na dapat tandaan:
LiquidCrystal_I2C lcd (0x27, 16, 2);
Ang code sa itaas ay ang pag-set up para sa aking LCD. Kung ang iyong silid-aklatan ay naiiba, maaaring kailanganin mong baguhin hindi lamang ang iyong silid-aklatan, kundi pati na rin ang linyang ito.
{lcd.setCursor (0, 1); lcd.print ("Pahalang!"); oryentasyon = HORIZONTAL; // Basahin ang raw data ng acc at gyro mula sa MPU-6050 1000 beses para sa (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Idagdag ang gyro x offset sa gyro_x_cal variable na gyro_x_cal + = gyro_x; // Idagdag ang gyro y offset sa gyro_y_cal variable na gyro_y_cal + = gyro_y; // Idagdag ang gyro z offset sa gyro_z_cal variable gyro_z_cal + = gyro_z; // Idagdag ang acc x offset sa acc_x_cal variable acc_x_cal + = acc_x; // Idagdag ang acc y offset sa acc_y_cal variable acc_y_cal + = acc_y; } // Hatiin ang lahat ng mga resulta ng 1000 upang makakuha ng average na 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); // Tandaan na hindi kami nag-iimbak ng isang offset para sa acc_z, dahil sa gravity! pagkaantala (500); }
Ang bloke ng code sa itaas ay nagpapatupad sa gawain sa pagkakalibrate. Ang code na ito ay para sa pahalang na pagkakalibrate. Mayroong malapit na magkaparehong code para sa patayong pagkakalibrate (tala, alam ng code kung ang iyong MPU6050 ay naka-mount nang pahalang o patayo!). Ang MPU6050, ay binabasa ng 1000 beses. naaangkop na mga halaga ay kumulatibong idinagdag pagkatapos ay hinati ng 1000 upang magbigay ng isang average na 'offset' na halaga. Ang mga halagang ito ay pagkatapos ay nakaimbak sa Nano eeprom. Ang lahat ng mga pahalang na halaga ng pagkakalibrate ay nakaimbak simula sa eeprom address 0. Lahat ng mga patayong halaga ay nakaimbak ng startnig sa eeprom address 24. Ang pagkakalibrate DAPAT gawin sa isang ganap na antas sa ibabaw, kung hindi man wala silang ibig sabihin.
/ * * Ang susunod na ilang mga linya ay nagpoproseso ng hilaw na data upang baguhin ito sa mga anggulo na maaaring output sa LCD at LED's. * Ang halaga ng 4096, kung saan ang data ng pagpabilis ay nahahati sa pamamagitan ng kinuha mula sa MPU6050 datasheet at batay sa rate ng sample. * Ang halaga ng 9.8 ay gravity * Ang atan2 function ay mula sa module ng matematika at ginagamit upang makalkula ang mga anggulo mula sa ibinigay na data * / thetaM = -atan2 ((acc_x / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // Raw data phiM = -atan2 ((acc_y / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // Raw data dt = (millis () - millisOld) / 1000.; millisOld = millis (); / * * Ang seksyon na ito ay gumagamit ng data ng gyro upang gawing mas tumutugon ang system * ang halaga ng 65.5, kung saan ang data ng gyro ay nahahati sa pamamagitan ng kinuha mula sa MPU6050 datasheet at batay sa sample rate * / theta = (theta + (gyro_y / 65.5) * dt) *. 96 + thetaM *.04; // Low pass filter phi = (phi + (gyro_x / 65.5) * dt) *. 96 + phiM *.04; // Mababang pass filter
Ang code sa itaas ay ang mga bagay na kinakalkula ang mga anggulo. Sana ang mga komento ay magbigay ng kaunting pananaw sa kung paano ito gumagana, ngunit para sa malalim na paliwanag, suriin ang video na Paul McWhorters na naka-link sa naka-attach na PDF. Gayunpaman, kung ano ang sasabihin ko ay maaari mong baguhin ang rate ng sample para sa gyro at Accelerometer (na ginagawa sa pag-setup ng MPU6050 subroutine sa ilalim ng aking code). Kung binago mo ang rate ng sample, kailangan mo ring baguhin kung gaano nahahati ang hilaw na data. Para sa data ng accelerometer, ang kasalukuyang halaga ay 4096. Para sa gyro, ang kasalukuyang halaga ay 65.5.
Sumangguni sa naka-attach na mga sheet ng data at ang video sa pamamagitan ng EEEntusiast (link sa naka-attach na PDF) para sa higit pang malalim na impormasyon kung paano natagpuan ang mga halimbawang sampling at offset.
Hakbang 3: Susunod na Mga Hakbang
Sa puntong ito sana ay naisagawa ang proyektong ito, ngunit ano ngayon?
Una, bakit hindi mo talaga buuin ito sa antas ng espiritu na maaari mong gamitin. Maaari kang bumili ng murang antas ng espiritu (tiyakin na ito ang uri ng kahon) na maaari mong iakma, o kung mayroon kang kit, i-print ang iyong sariling antas / kahon.
Marahil ay may isang pag-play sa paligid ng mga rate ng sample ng gyro at accelerometer upang makita kung mas mahusay silang gumagana sa isang rate kaysa sa isa pa.
Subukang pinuhin ang code nang higit pa. Halimbawa, sa kasalukuyan, lampas sa 45 degree, ang nakasaad na anggulo ay magaspang upang masabi man lang. Mayroon bang paraan sa paligid nito?
Kung mayroon kang anumang mga katanungan, gaano man kadali ang hitsura ng mga ito, mangyaring magtanong. Kung makakatulong ako, tutulong ako.
Kung gusto mo ito ng pagtuturo, mangyaring bigyan ito ng tulad, upang malaman ko.
Kung gagawin mo ito, mangyaring ipakita sa akin (lalo na kung ito ay nasa isang gumaganang kaso).
SALAMAT