Makefun-nembo

Makefun MPU6050 Arduino Gesture Ufuatiliaji

Makefun-MPU6050-Arduino-Gesture-Motion-Tracking-bidhaa

Taarifa ya Bidhaa

Vipimo

  • Jina la Bidhaa: Gesture-MotionTracking
  • Toleo: V.1.2
  • Hifadhi ya Github: Kiungo cha Github

Utangulizi wa Orodha ya Vifaa

Vifaa vinavyohitajika kwa kutumia Gesture-MotionTracking ni:

  • Sehemu ya MPU6050
  • Moduli ya Bluetooth ya JDY-16
  • Sehemu ya NRF24L01+
  • Arduino NANO Bodi Kuu ya Udhibiti
  • Bodi ya Mkate Mdogo
  • Kinga
  • Mstari wa DuPont wa Kiume hadi wa Kike
  • Betri

Maagizo ya Matumizi ya Bidhaa

Utangulizi wa Kichakataji cha NANO

Ugavi wa Nguvu

  • Arduino Nano inaweza kuwashwa na kiolesura cha mini-B USB, usambazaji wa umeme wa nje wa 7~12V DC kupitia muunganisho wa vin.

Kumbukumbu

  • ATmega168/ATmega328 kwenye Nano ina kumbukumbu ya Flash 16KB/32KB, 1KB/2KB SRAM, na 0.5KB/1KB EEPROM.

Ingizo na Pato

  • Nano ina bandari 14 za dijiti za I/O, pembejeo 6 za analogi, na pini maalum za utendakazi mbalimbali kama vile mawasiliano ya mfululizo, vikatizo, matokeo ya PWM, SPI, n.k.

Kiolesura cha Mawasiliano

  • Nano inasaidia mawasiliano ya mfululizo kupitia UART na ina violesura vinavyooana vya SPI na I2C.

Kipakua

  • Nano inaweza kupangwa kwa kutumia programu ya Arduino na programu ya bootloader. Vipindi vinaweza pia kupakuliwa kupitia kichwa cha ICSP.

Tahadhari

  • Nano ina muundo wa kuweka upya kiotomatiki kwa uwekaji upya wa programu kwa urahisi bila uingiliaji wa mikono.

Maswali Yanayoulizwa Mara kwa Mara

Maswali Yanayoulizwa Mara Kwa Mara

  • Q: Je, ninaweza kupata wapi masasisho ya hivi punde au nyenzo za ziada za Gesture-MotionTracking?
    • A: Unaweza kuangalia hazina rasmi ya Github kwenye kiungo kilichotolewa kwa sasisho na rasilimali.
  • Q: Ninawezaje kuwasha Arduino Nano?
    • A: Unaweza kuwasha Nano kwa kutumia kiolesura cha mini-B cha USB au umeme wa nje wa 7~12V DC uliounganishwa kupitia pini ya vin.

"`

Kufanya bora furaha

1. Utangulizi wa orodha ya kifaa
Seti zinazohitajika zimeonyeshwa kwenye jedwali hapa chini. Sehemu ya MPU6050
Moduli ya Bluetooth ya JDY-16 NRF24L01+ Moduli
Bodi Kuu ya Udhibiti ya Arduino NANO Glovu za Bodi ya Mkate mini
Betri ya laini ya DuPont ya Kiume hadi Mwanamke

1 1 2 1 2 1 Kadhaa 1

Kielelezo 1: Orodha ya Vifaa
4

Kufanya bora furaha
2. Utangulizi wa Kichakata cha NANO
Kichakataji kidogo cha Arduino Nano ni ATmega328 (Nano3.0) chenye kiolesura cha USB-mini, ambacho kina pini 14 za pembejeo/towe za dijiti (6 kati yake zinaweza kutumika kama pato la PWM), pembejeo 8 za analogi, na resonator ya kauri ya MHz 16, mini 1. -B muunganisho wa USB, kichwa cha ICSP na kitufe cha kuweka upya. Kichakataji ATmega328 Working voltage 5v Ingiza ujazotage (inapendekezwa) 7-12v Ingizo juzuutage (safa) 6-20v Digital IO pini 14 (6 kati yake inaweza kutumika kama pato la PWM) Pini ya analogi ya pembejeo 6 pini ya IO DC 40 mA Flash Kumbukumbu 16 au 32 KB (ambayo 2 KB kwa kipakiaji cha boot) SRAM 1KB au 2KB EEPROM 0.5 KB au 1KB ATmega328 CH340 USB hadi chipu ya bandari ya serial Saa 16 MHz
2.1 Ugavi wa Nguvu
Hali ya ugavi wa umeme ya Arduino Nano: kiolesura cha mini-B USB na unganisho la vin ya nje 7~12V usambazaji wa umeme wa DC wa nje
Kumbukumbu ya 2.2
ATmega168/ATmega328 inajumuisha Flash ya 16KB/32KB kwenye chipu, ambapo 2KB inatumika kwa Bootloader. Pia kuna 1KB/2KB SRAM na 0.5KB/1KB EEPROM.
2.3 Ingizo na Pato
14 bandari za pembejeo na pato za dijiti: Juztage ni 5V, na kila chaneli inaweza kutoa na kufikia kiwango cha juu cha sasa cha 40mA. Kila chaneli ina upinzani wa ndani wa kuvuta-up wa 20-50K ohm (haujaunganishwa kwa chaguo-msingi). Kwa kuongeza, pini zingine zina kazi maalum.
Mawimbi ya serial RX (0), TX (1): Inatoa mawimbi ya kupokea bandari yenye ujazo wa TTLtagkiwango cha e, kilichounganishwa na pini inayolingana ya FT232Rl.
Ukatizaji wa Nje (Na. 2 na Na. 3): Anzisha pini ya kukatiza, ambayo inaweza kuwekwa kwa ukingo unaoinuka, ukingo unaoanguka au kichochezi cha wakati mmoja.
Urekebishaji wa Upana wa Pulse PWM (3, 5, 6, 9, 10, 11): Hutoa chaneli 6, matokeo ya PWM ya biti 8.
5

Kufanya bora furaha
SPI10(SS)11(MOSI)12(MISO)13(SCK):Kiolesura cha Mawasiliano cha SPI. LED (No. 13): Arduino hutumiwa hasa kupima kiolesura kilichohifadhiwa cha LED. Wakati pato ni
juu, LED inawaka. Wakati pato ni chini, LED imezimwa. Ingizo 6 za analogi A0 hadi A5: Kila chaneli ina azimio la biti 10 (yaani, ingizo lina 1024 tofauti.
maadili), anuwai ya mawimbi chaguo-msingi ni 0 hadi 5V, na kikomo cha juu cha pembejeo kinaweza kubadilishwa na AREF. Kwa kuongeza, pini zingine zina kazi maalum. Kiolesura cha TWI (SDA A4 na SCL A5): Inaauni kiolesura cha mawasiliano (kinaotangamana na basi la I2C). AREF: Rejea Juztage ya ishara ya pembejeo ya analogi. Weka upyaChip ya kidhibiti kidogo huwekwa upya wakati mawimbi iko chini.
2.4 Kiolesura cha Mawasiliano
Bandari ya serial: UART iliyojengewa ndani ya ATmega328 inaweza kuwasiliana na bandari ya nje ya serial kupitia bandari ya dijiti 0 (RX) na 1 (TX).
2.5 Kipakua
MCU kwenye Arduino Nano ina programu ya bootloader, hivyo unaweza kupakua programu moja kwa moja kutoka kwa programu ya Arduino. Unaweza pia kupakua programu moja kwa moja kwa MCU kupitia kichwa cha ICSP kwenye Nano.
2.6 Makini
Arduino Nano hutoa muundo wa kuweka upya kiotomatiki ambao unaweza kuwekwa upya na mwenyeji. Kwa njia hii, programu inaweza kuwekwa upya kiotomatiki na programu ya Arduino katika programu hadi Nano, bila kushinikiza kifungo cha upya.

Utangulizi wa Blumodule

Utangulizi wa BlumoduleJDY-16

3.1 Vipengele
Usambazaji wa uwazi wa kasi ya juu wa BLE inasaidia mawasiliano ya kiwango cha 8K. Tuma na upokee data bila kikomo cha baiti, tumia kiwango cha baud 115200 kila wakati kutuma na kupokea data. Saidia njia 3 za kazi (tazama maelezo ya kazi ya maagizo ya AT + STARTEN). Usaidizi (bandari ya serial, IO, APP) kuamsha usingizi Kusaidia WeChat Airsync, applet ya WeChat na mawasiliano ya APP. Inatumia udhibiti wa bandari 4 wa IO na saa ya juu ya RTC. Kusaidia kazi ya PWM (inaweza kudhibitiwa na UART, IIC, APP, nk). Inasaidia hali ya mawasiliano ya UART na IIC, chaguomsingi kwa mawasiliano ya UART. Hali ya iBeacon (inasaidia itifaki ya WeChat kutikisa na itifaki ya Apple iBeacon).
6

Kufanya bora furaha
Njia ya uwasilishaji ya uwazi ya mwenyeji (usambazaji wa data kati ya moduli za programu, mawasiliano ya mwenyeji na watumwa).
Usanidi wa moduli ya mawasiliano isiyo na waya

Makefun-MPU6050-Arduino-Gesture-Motion-Tracking-fig-1

Kielelezo cha 2: Ramani halisi ya moduli ya JDY-16 (1) Kebo ya Nano na JDY-16

Moduli ya JDY-16

Arduino NANO

VCC

5V

GND

GND

RXD

D2

TXD

D3

STAT

NC

PWRC

NC

Pakua programu ya MotionTrackJDY-16AT_CMD AT_CMD.ino

(2) Mahitaji ya usanidi:

Tekeleza ufungaji wa bwana-mtumwa wa moduli mbili za Bluetooth za JDY-16.

3.2 Hatua za Uendeshaji

1. Unganisha moduli za Nano na JDY-16 na laini ya DuPont. 2. Ingiza hali ya amri ya AT Unganisha kipakuzi kwenye kompyuta na ufungue msaidizi wa bandari ya serial. Weka kiwango cha baud hadi 9600, data biti biti 8, stop biti 1, na hakuna kidogo usawa.

7

Kufanya bora furaha
Mawasiliano ya majaribio: Tuma: AT Nyuma: Sawa
Kielelezo cha 3: Tuma Mchoro wa AT Amri 3. Tuma: AT+HOSTEN1rn ————– Weka Bluetooth kama modi kuu Nyuma: Sawa Rudi: SAWA
8

Kufanya bora furaha
Kielelezo cha 4: Kuweka Hali ya Mwenyeji 4. Changanua Bluetooth inayozunguka JDY-16: 1. Utumaji wa watumwa: AT+SCANrn ————— Uliza anwani ya mtumwa mwenyewe Nyuma: OK +DEV:1=3CA5090A160F, -62, JDY-16 +SIMAMA:CHANGANUA
Kielelezo 5: Kuuliza vifaa vya Bluetooth vya pembeni 5. Unganisha Bluetooth
Mpangishi hutuma: AT+CONN3CA5090A160Frn ————— Anwani ya mtumwa inayomfunga mwenyeji Nyuma: SAWA Imeunganishwa kwenye usambazaji wa nishati, Bluetooth mbili zinaweza kuunganishwa, kutuma data kupitia Bluetooth mwenyeji, Bluetooth ya mtumwa inaweza kupokea data sawa. Au unaweza kupanga moja kwa moja utaratibu wa usanidi wa bwana-mtumwa ulioandaliwa ili kuweka Bluetooth ya bwana-mtumwa, kisha mwenyeji hupanga utaratibu wa uunganisho na kuunganisha moja kwa moja. (Kumbuka kuwa ni moduli ya Bluetooth pekee ya JDY-16 inayoweza kuunganishwa kiotomatiki kwa sasa)
9

Kufanya bora furaha
3.3 Njia ya uunganisho ya Nano na JDY-16
Kielelezo cha 6: Nano na mchoro wa uunganisho wa JDY-16

Makefun-MPU6050-Arduino-Gesture-Motion-Tracking-fig-2
10

Kufanya bora furaha

Utangulizi wa Moduli Isiyo na Waya ya NRF24L01

Utangulizi wa Moduli Isiyo na Waya ya NRF24L01

Moduli ya nRF24L01+ ni moduli ya mawasiliano isiyo na waya ya 2.4G iliyotengenezwa na Nordic kulingana na chip ya nRF24L01. Pitisha urekebishaji wa FSK na uunganishe itifaki ya Nordic mwenyewe ya Kupasuka kwa Muda Mfupi. Pointto-point au 1-to-6 mawasiliano ya wireless yanaweza kupatikana. Kasi ya mawasiliano bila waya inaweza kufikia hadi 2M (bps). NRF24L01 ina njia nne za uendeshaji: hali ya transceiver, modi ya usanidi, hali ya kutofanya kitu, na hali ya kuzima. Ramani halisi iliyotumika katika jaribio hili iko upande wa kushoto wa Mchoro 7. Kwa upokeaji thabiti wa risiti ya Nrf24L01, inashauriwa kuunganisha capacitor 10uf kati ya VCC na GUD kama inavyoonyeshwa upande wa kulia.
Kielelezo cha 7: Ramani halisi ya Nrf24l01+ na mchoro wa solder
4.1 Sifa za Moduli
GHz 2.4, ukubwa mdogo 15x29m ikiwa ni pamoja na antena Saidia mapokezi ya data ya njia sita Kiwango cha chini cha kufanya kazitage: 1.93.6V Kiwango cha uhamishaji data kinaauni: 1Mbps2Mbps Matumizi ya chini ya nishati ya kubuni kazi ya sasa ya kupokea ni 12.3mA, 11.3mA kwa nguvu ya 0dBm
uzalishaji, 900nA katika hali ya chini-chini Kazi ya uwasilishaji otomatiki, ugunduzi wa kiotomatiki na uwasilishaji wa pakiti za data zilizopotea,
wakati wa kutuma tena na nyakati za urejeshaji zinaweza kudhibitiwa na programu Kazi ya majibu ya kiotomatiki, baada ya kupokea data halali, moduli hutuma jibu kiatomati.
Ugunduzi wa hitilafu ya maunzi ya CRC iliyojengwa ndani na udhibiti wa anwani ya mawasiliano kutoka kwa uhakika hadi pointi nyingi maelezo ya chipu ya NRF24L01 tafadhali rejelea tonRF24L01 Datasheet.pdf
11

Kufanya bora furaha
Bandika habari

Kielelezo 8: Mchoro wa maelezo ya pini ya Nrf24L01

Alama ya Pini

Kazi

Mwelekeo

1 GND

GND

2

+5V

Ugavi wa Nguvu

3

CE

Mstari wa Kudhibiti Katika Hali ya Kufanya Kazi

IN

4

CSN Chip Chagua Mawimbi, Kiwango cha Chini Inafanya kazi

IN

5

KITABU

Saa ya SPI

IN

6 MOSI

Ingizo la SPI

IN

7 MISO

Pato la SPI

NJE

8

IPQ

Sitisha Pato

NJE+

4.2 Madhumuni ya Majaribio
1. Jifunze kuhusu nRF24L01+moduli na jinsi ya kuunganishwa na Arduino. 2. Jinsi ya kutumia moduli ya arduino na nRF24L01+ kumaliza kupokea na kutuma data.

4.3 Vipengele vinavyohitajika kwa jaribio hili
Arduino UNO R3 Motherboard Arduino NANO Motherboard nRF24L01 Moduli*2 waya kadhaa
12

Kufanya bora furaha
4.4 Mchoro wa mpangilio wa majaribio

Kielelezo 9: Mchoro wa uunganisho wa Nano na Nrf24L01

Njia ya uunganisho ya Arduino na NRF24L01

arduino Nano

nRF24L01

+3.3V

VCC

GND

GND

7 pini

Pini 4 CSN

4 pini

Pini 3 CE

11 pini

6 pini MOSI

12 pini

Pini 7 za MISO

13 pini

SCK ya pini 5

arduino Uno +3.3V GND 7 4 11pin 12pin

nRF24L01
VCC GND 4pin CSN 3pin CE 6pin MOSI 7pin MISO

13

Kufanya bora furaha

13 pini

SCK ya pini 5

4.4 Kanuni ya programu
Kuzindua mchakato 1Kwanza, sanidi nRF24L01 ili kusambaza modi. 2Kisha andika anwani TX_ADDR ya mwisho wa kupokea na data TX_PLD kutumwa katika eneo la bafa la nRF24L01 na mlango wa SPI katika mfuatano wa saa. 3Arduino husanidi CE kuwa ya juu kwa angalau s 10 na kusambaza data baada ya kuchelewa kwa 130 s. Ikiwa jibu la kiotomatiki limewashwa, nRF24L01 huingia kwenye hali ya kupokea mara baada ya kusambaza data na kupokea ishara ya jibu. Ikiwa jibu limepokelewa, mawasiliano yanazingatiwa kuwa yamefaulu. 4NRF24L01 itaweka TX_DS juu kiotomatiki na TX_PLD itafutwa kutoka kwa rafu ya kusambaza. Ikiwa hakuna jibu lililopokelewa, data itatumwa tena kiotomatiki. Ikiwa idadi ya utumaji upya (ARC_CNT) itafikia kikomo cha juu, MAX_RT imewekwa juu na TX_PLD haitafutwa; MAX_RT Wakati TX_DS imewekwa juu, IRQ hupungua ili kusababisha kukatizwa kwa MCU. Wakati maambukizi ya mwisho yamefanikiwa, ikiwa CE ni ya chini, nRF24L01 itaingia katika hali ya kusubiri. 5Ikiwa kuna data katika mrundikano wa upokezi na CE iko juu, usambazaji unaofuata unaanza; ikiwa hakuna data katika mrundikano wa maambukizi na CE ni ya juu, nRF24L01 itaingia katika hali ya kusubiri 2. Pokea mchakato wa data 1Wakati nRF24L01 inapokea data, tafadhali sanidi nRF24L01 ili kupokea modi kwanza. 2Kisha ucheleweshe 130s katika hali ya kupokea ili kusubiri kuwasili kwa data. Mpokeaji anapogundua anwani halali na CRC, huhifadhi pakiti ya data kwenye rafu ya kipokezi. Wakati huo huo, ishara ya kukatiza RX_DR imewekwa juu na IRQ inashuka ili kuarifu MCU kuleta data. 3Iwapo jibu la kiotomatiki limewashwa kwa wakati huu, mpokeaji ataingiza ishara ya majibu ya mwangwi wa hali ya kusambaza kwa wakati mmoja. Mapokezi ya mwisho yakifaulu, ikiwa CE itapungua, nRF24L01 itaingia katika hali ya 1 ya kutofanya kazi.
Programu ya majaribio ya transceiver ya nRF24L01 tafadhali rejelea "programu ya MotionTracknRF24l01+"

14

Kufanya bora furaha

Utangulizi wa Mpu6050

MPU6050 ndicho kijenzi cha kwanza duniani cha kuchakata mwendo wa mhimili 6 chenye gyroscope ya mhimili-3 iliyounganishwa na kichapuzi cha mhimili-3. Inaweza kuunganisha kwa vitambuzi vingine vya sumaku au uchakataji wa mwendo wa kidijitali wa vitambuzi vingine (DMP) kupitia mlango wa pili wa I2C. Injini ya kuongeza kasi ya maunzi hutoa mbinu kamili ya kukokotoa muunganisho wa mhimili 9 kwa MCU mwenyeji katika mfumo wa mtiririko mmoja wa data na bandari ya I2C.
Chip ya MPU6050 inakuja na moduli ndogo ya usindikaji wa data ya DMP, ina algorithm ya kuchuja maunzi iliyojengwa ndani, kwa kutumia data ya matokeo ya DMP imeweza kukidhi mahitaji vizuri katika programu nyingi. Hatuhitaji programu yetu kufanya uchujaji. Kozi hii itaunda glavu kamili za michezo kulingana na kusoma DMP kama data ya pato kupitia Arduino.
Kielelezo cha 10: ramani ya kimwili ya moduli ya mpu6050
Vipengele vya data iliyojumuishwa ya calculus ya matokeo ya dijiti ya mhimili 6 au matriki ya mzunguko wa mhimili 9, quaternion na Euler
umbizo la pembe. Sensa ya kasi ya angular ya mhimili 3 (gyroscope) yenye unyeti 131 LSBs/°/sekunde na masafa kamili ya hisia
ya ±250, ±500, ±1000, na ±2000°/sekunde. Udhibiti unaoweza kupangwa, kichapuzi cha mhimili-3 chenye safu ya udhibiti wa programu ya ±2g, ±4g, ±8g, na ±16g. Injini ya Digital Motion Processing (DMP) inapunguza mzigo wa data changamano ya hesabu ya muunganisho,
maingiliano ya kihisi, na hisia za ishara.
15

Kufanya bora furaha
Hifadhidata ya usindikaji wa mwendo inasaidia Android, Linux, na Windows. Mbinu za urekebishaji zilizojengwa ndani za kupotoka kwa wakati wa kufanya kazi na kihisi cha sumaku huondoa matumizi'
haja ya ziada ya calibration. Sensor ya joto ya pato la dijiti. Ugavi ujazotage ya VDD ni 2.5V±5%3.0V±5%3.3V±5%, na VDDIO ni 1.8V±5%. Gyro ya sasa ya uendeshaji: 5mA, gyroscope ya sasa ya kusubiri: 8A; kiongeza kasi cha sasa cha kufanya kazi: 8A,
hali ya sasa ya kuokoa nguvu ya kiongeza kasi: 8A@10Hz. Hadi 400kHz hali ya haraka ya I2C, au hadi kiolesura cha seva pangishi cha mfululizo cha 20MHz SPI. Kifurushi kidogo na nyembamba zaidi kilicholengwa cha bidhaa inayobebeka (4x4x0.9mm QFN).
5.2 Mpangilio wa Moduli

Kielelezo 11: Mchoro wa moduli ya mpu6050
5.3 Mawasiliano kati ya Nano na mpu6050

5.3.1 Muunganisho wa Mzunguko
Kiolesura cha data cha moduli jumuishi ya MPU6050 hutumia itifaki ya basi ya I2C, kwa hivyo tunahitaji usaidizi wa maktaba ya Waya ili kuwasiliana kati ya NANO na MPU6050. Uunganisho unaolingana wa bodi ya NANO ni kama ifuatavyo:

Sehemu ya MPU6050 VCC

Arduino NANO 5V

16

Kufanya bora furaha

GND SCL SDA XDA XCL ADD INT

GND A5 A4 NC NC NC/GND

Kielelezo 12: Mchoro wa uunganisho wa Nano na mpu6050
Data ya kuandika na kusoma ya MPU6050 inatambuliwa na rejista za ndani za chip, anwani za rejista zote ni 1 byte, yaani, bits 8 za nafasi ya anwani. Tafadhali rejelea “RMMPU-6000A.pdf” 1.1. Kabla ya kuandika data kwa kifaa kila wakati, kwanza washa hali ya uhamishaji wa waya na ueleze anwani ya basi ya kifaa. Anwani ya basi ya MPU6050 ni 0x68 (anwani ni 0x69 wakati pini ya AD0 iko juu). Kisha andika byte ya anwani ya kuanza kwa rejista, na kisha uandike data ya urefu wowote. Data hizi zitaendelea kuandikwa kwa anwani maalum ya kuanza, na urefu wa sasa wa rejista utaandikwa kwa rejista ya anwani ifuatayo. Zima hali ya kuhamisha kielektroniki baada ya kuandika kukamilika. Ifuatayo sample code huandika byte 0 kwa rejista ya 0x6B ya MPU6050.
Wire.beginTransmission(0x68); // Weka usambazaji wa MPU6050
17

Kufanya bora furaha
Waya.andika(0x6B); // Bainisha anwani ya usajili Wire.write(0); // Andika baiti moja ya data Wire.endTransmission(true); // Maliza uhamishaji, kweli inamaanisha basi ya kutolewa
Kusoma Data kutoka MPU-6050
Kusoma na kuandika ni sawa, kwanza kufungua hali ya uhamishaji wa Waya, na kisha kuandika baiti ya anwani ya kuanza kwa rejista. Ifuatayo, soma data ya anwani maalum kwenye kashe ya maktaba ya Waya na uzima hali ya usafirishaji. Hatimaye, kusoma data kutoka cache. Ex ifuatayoample code huanza na rejista ya 0x3B ya MPU6050 na inasoma baiti 2 za data:
Wire.beginTransmission(0x68); // Weka usambazaji wa Wire ya MPU6050. andika(0x3B); // Bainisha anwani ya usajili Wire.requestFrom(0x68, 2, kweli); // Soma data kwenye kache Wire.endTransmission(true); // Funga hali ya maambukizi int val = Wire.read() << 8 | Waya.soma(); // Baiti mbili huunda nambari kamili ya 16-bit
Utekelezaji Maalum
Maktaba ya Waya kwa kawaida inapaswa kuanzishwa katika kitendakazi cha usanidi: Wire.begin();
Lazima uanzishe kifaa kabla ya kufanya shughuli zozote kwenye MPU6050, na kuandika byte kwa 0x6B yake itakuwa ya kutosha. Kawaida hufanywa katika kazi ya usanidi, kama inavyoonyeshwa katika sehemu ya 1.1.
Umbizo la data la MPU6050
Data tunayovutiwa nayo iko katika rejista ya baiti 14 ya 0x3B hadi 0x48. Data hizi zitasasishwa kwa kasi kwa masasisho ya hadi 1000HZ. Anwani ya rejista ya msingi na jina la data zimeorodheshwa hapa chini. Kumbuka kuwa kila data ni baiti 2.
0x3B, sehemu ya mhimili wa X wa accelerometer ni ACC_X 0x3D, sehemu ya mhimili wa Y wa accelerometer ni ACC_Y 0x3F, sehemu ya mhimili wa Z wa accelerometer ni ACC_Z 0x41, joto la sasa ni TEMP 0x43 angu-0 axisx G45, karibu na TEMP XNUMXxXNUMX axisx XNUMX angulocity XNUMX GXNUMX, mhimili wa Z wa accelerometer. , kasi ya angular kuzunguka mhimili wa Y GYR_Y
18

Kufanya bora furaha
0x47, kasi ya angular kuzunguka mhimili wa Z GYR_Z Ufafanuzi wa kuratibu wa chipu ya MPU6050 ni: kabili chip kuelekea yenyewe na ugeuze maandishi ya uso kwenye pembe sahihi. Kwa wakati huu, katikati ya chip inachukuliwa kama asili, mlalo wa kulia ni mhimili wa X, na wima ni mhimili wa Y, unaoelekeza yako mwenyewe ni mhimili wa Z, kama inavyoonyeshwa hapa chini:
Kielelezo 13: mzunguko wa mpu6050 na mchoro wa kasi ya angular Tunajali tu kuhusu maana ya data ya mita ya kasi ya kasi na angular. Sasa tunafahamu matumizi ya mpu6050 kupitia majaribio mawili. 5.3.2 Jaribio la Kipima Kasi cha Kusoma 1
Vipengele vitatu vya shoka za accelerometer, ACC_X, ACC_Y na ACC_Z zote ni nambari kamili za 16-bit, ambazo zinaonyesha kuongeza kasi ya kifaa katika pande tatu za axial. Wakati thamani hasi inachukuliwa, kuongeza kasi ni hasi kando ya mhimili wa kuratibu na thamani nzuri ni chanya.
Vipengee vitatu vya kuongeza kasi vyote viko katika wingi wa kuongeza kasi ya mvuto g, na anuwai ya kuongeza kasi inayoweza kuonyeshwa, yaani, ukuzaji unaweza kuwekwa sawa, na kuna ukuzaji wa hiari nne: 2g, 4g, 8g na 16g. Kuchukua ACC_X kama example, ikiwa ukuzaji umewekwa kwa 2g (chaguo-msingi), inamaanisha kwamba wakati ACC_X inachukua thamani ya chini -32768, kasi ya sasa ni mara 2 ya kuongeza kasi ya mvuto pamoja na mwelekeo mzuri wa mhimili wa X, na kadhalika. Ni wazi,
19

Kufanya bora furaha

chini ya ukuzaji, bora usahihi, na juu ya ukuzaji, kubwa mbalimbali, ambayo ni kuweka kulingana na maombi maalum.

AFS_SEL 0 1 2 3

Kiwango Kamili cha Kiwango ±2g ±4g ±8g ±16g

Unyeti wa LSB 16384LSB/g 8192LSB/g 4096LSB/g 2048LSB/g

Uhusiano kati ya mwelekeo wa mzunguko wa accelerometer ya mhimili-tatu na moduli ni kama ifuatavyo.

Mchoro 14: Mzunguko wa moduli ya Mpu6050 na muundo wa kuongeza kasi Data iliyosomwa na MPU6050 inabadilikabadilika, kwa hivyo inahitaji kuthibitishwa. Hiyo ni, wakati chip iko katika hali ya kusimama, usomaji huu unapaswa kuwa sifuri kinadharia. Lakini inaelekea kuwa na kukabiliana. Kwa mfanoampna, tunasoma maadili 200 kwa vipindi vya 10ms na kisha kuwa wastani. Thamani hii inaitwa zero offset. Usomaji uliorekebishwa unapatikana kwa kuondoa sifuri kutoka kwa kila usomaji. Kwa kuwa thamani ya kinadharia ya ACC_X na ACC_Y inapaswa kuwa sifuri, mihimili miwili ya usomaji inaweza kusawazishwa kwa maana ya takwimu. ACC_Z inahitaji kuchakatwa kwa hatua moja. Katika mchakato wa kurekebisha takwimu, kuongeza kasi ya uvutano g ya mhimili wa Z hutolewa kwa kila usomaji. Ikiwa ukuzaji wa kasi ni 2g, basi 16384 inatolewa, na kisha urekebishaji wa maana wa takwimu unafanywa. Urekebishaji wa jumla unaweza kufanywa kila wakati mfumo unapoanzishwa, basi unapaswa kufanya biashara kati ya usahihi na wakati wa kuanza.
20

Kufanya bora furaha
5.3.2.1 Madhumuni ya Majaribio
Kwa kuzungusha mpu6050 ili kuona uhusiano wa data ya pato kati ya shoka tatu za kiongeza kasi.
5.3.2.2 Msimbo wa Majaribio LocationMotionTrackLessonmpu6050_accel mpu6050_accel.ino
21

Kufanya bora furaha

#pamoja na “Wire.h” // I2Cdev na MPU6050 lazima zisakinishwe kama maktaba, la sivyo .cpp/.h files // kwa madarasa yote mawili lazima iwe katika njia inayojumuisha ya mradi wako #ikiwemo “I2Cdev.h” #jumuisha “MPU6050.h” #define LED_PIN 13 MPU6050 accelgyro; tengeneza RAW_aina {
uint8_t x; uint8_t y; uint8_t z; }; int16_t ax, ay, az; int16_t gx, gy, gz; tengeneza RAW_aina accel_zero_offsent; char str[512]; bool blinkState = uongo; kuelea AcceRatio = 16384.0; kuelea accx,accy,accz;

usanidi utupu() {

int i;

int32_t ax_zero = 0,ay_zero = 0,az_zero = 0;

// jiunge na basi la I2C (maktaba ya I2Cdev haifanyi hivi kiotomatiki)

Waya.anza();

Serial.begin(115200);

// anzisha kifaa

Serial.println(“Inaanzisha vifaa vya I2C…”);

accelgyro.initialize();

kuchelewa (500);

accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);

Serial.println(“Inajaribu miunganisho ya kifaa…”);

Serial.println(accelgyro.testConnection() ?“Muunganisho wa MPU6050

2 2

mafanikio" : "Muunganisho wa MPU6050 umeshindwa");

Kufanya bora furaha
kwa(i = 0; i <200; i++) {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); ax_sifuri += shoka; ay_zero += ay ; az_zero += az ; } accel_zero_offsent.x = ax_zero/200 ; accel_zero_offsent.y = ay_zero/200 ; accel_zero_offsent.z = az_zero/200 ; Serial.print(accel_zero_offsent.x); Serial.print("t"); Serial.print(accel_zero_offsent.y); Serial.print("t"); Serial.print(accel_zero_offsent.z); Serial.print("n"); pinMode(LED_PIN, OUTPUT); }
void loop() {// soma vipimo ghafi vya accel/gyro kutokana na kuchelewa kwa kifaa (1000); accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); sprintf(str,”%d,%d,%dn”,ax-accel_zero_offsent.x, ayaccel_zero_offsent.y ,az-accel_zero_offsent.z); Serial.print(str); accx = (float)( ax-accel_zero_offsent.x )/AcceRatio; accy = (float)( ay-accel_zero_offsent.y )/AcceRatio ; accz = (float)( az-accel_zero_offsent.z )/AcceRatio ; Serial.print(accx);Serial.print(“gt”); Serial.print(accy);Serial.print("gt"); Serial.print(accz);Serial.print("gn");
blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }
23

Kufanya bora furaha
1. Zungusha digrii 90 kuzunguka mhimili wa X Wakati mhimili wa X unapozungushwa digrii 90, mhimili wa Y huelekea juu polepole na mhimili wa Z ni
polepole kushuka. Wakati mhimili unafikia digrii 90 haswa, kwa kuwa mhimili wa Y uko katika mwelekeo tofauti na mvuto, matokeo ya mhimili wa Y ni 1g (1g==9.8m/s^2), wakati thamani ya mhimili wa Z inapungua kutoka. 1 hadi 0. 2. Rudi kwenye nafasi ya awali na ubadilishe mzunguko wa digrii 90
Unaporudi kwenye nafasi ya awali, thamani ya mhimili wa Y hupunguzwa polepole hadi 0, wakati mhimili wa Z unaongezeka polepole hadi 1. Kisha ugeuke digrii 90 kwa mwelekeo wa nyuma, na mhimili wa Y hupungua hatua kwa hatua hadi -1, kwa sababu Y. mhimili ni kwa mujibu wa mwelekeo wa mvuto, na thamani ya kuongeza kasi inapaswa kuwa hasi. Mhimili wa Z hupungua polepole hadi 0. 3. Rudi kwenye nafasi ya awali
Eleza kama ifuatavyo: Kisha rudi kwenye nafasi ya awali kutoka kwa nyuzi 90 za kinyume. Kwa wakati huu, data ya mhimili wa Y na mhimili wa Z hurejeshwa polepole kwa thamani ya awali, mhimili wa Y ni 0, na mhimili wa Z ni 1.
Baada ya kuchambua mzunguko wa mhimili wa X, mzunguko wa mhimili wa Y ni sawa, kwa hivyo hatutazungumza juu yake kwa undani. Sasa hebu tuzungumze kuhusu mhimili wa Z, kwa sababu wakati wa kuzunguka karibu na mhimili wa Z, ni sawa na kupiga digrii 90 kwa kushoto na kulia. Kwa wakati huu, pato la mhimili wa Z daima ni 1, na mhimili wa X na mhimili wa Y ni orthogonal kwa mhimili wa mvuto, kwa hivyo maadili ya pato ni yote Ni 0, bila shaka, hii ni thamani chini ya hali ya tuli. . Ikiwa kifaa kimesakinishwa kwenye gari, shoka X na Y huenda zisiwe 0 wakati gari linapogeuka kushoto na kulia.
24

Kufanya bora furaha
Matokeo ya Majaribio

5.3.3 Jaribio la 2 Kusoma data kutoka kwa Gyro

Vipengee vya kasi ya angular GYR_X, GYR_Y na GYR_Z, ambavyo huzunguka mihimili mitatu ya kuratibu ya X, Y na Z, vyote ni nambari kamili zilizotiwa saini kwa biti 1. Kutoka asili hadi mhimili wa mzunguko, thamani ni chanya kwa mzunguko wa saa na hasi kwa mzunguko wa kinyume. Vipengele vitatu vya kasi ya angular vyote viko katika digrii/sekunde. Kiwango cha kasi cha angular ambacho kinaweza kuonyeshwa, yaani, ukuzaji unaweza kuwekwa kwa usawa. Kuna vikuzaji 4 vya hiari: digrii 250/sekunde, digrii 500/sekunde, digrii 1000/sekunde, 2000. Digrii/pili. Kuchukua GYR_X kama example, ikiwa ukuzaji umewekwa kwa digrii 250 / pili, inamaanisha kwamba wakati GYR inachukua thamani ya juu chanya ya 32768, kasi ya sasa ya angular ni digrii 250 / pili kwa saa; ikiwa imewekwa kwa digrii 500 / pili, thamani ya sasa ya 32768 inaonyesha sasa kasi ya angular ni digrii 500 / pili kwa saa. Kwa wazi, jinsi ukuzaji wa chini, usahihi zaidi, na ukuzaji wa juu, safu kubwa zaidi.

AFS_SEL 0 1 2 3

Kiwango Kamili cha Kiwango ±250°/s ±500°/s ±1000°/s ±2000°/s

Unyeti wa LSB
131LSB/°/s 65.5LSB/°/s 32.8LSB/°/s 16.4LSB/°/s

25

Kufanya bora furaha
Mahali pa Mpango “MotionTrackLessonmpu6050_gryo mpu6050_gryo.ino” Msimbo wa Majaribio
#pamoja na "Waya.h"
// I2Cdev na MPU6050 lazima zisakinishwe kama maktaba, au sivyo .cpp/.h files // kwa madarasa yote mawili lazima iwe katika njia inayojumuisha ya mradi wako #pamoja na "I2Cdev.h" #jumuisha "MPU6050.h" #define LED_PIN 13
MPU6050 accelgyro;
tengeneza RAW_aina {
uint8_t x; uint8_t y; uint8_t z; };
int16_t ax, ay, az; int16_t gx, gy, gz; tengeneza RAW_aina accel_zero_offsent ,gyro_zero_offsent;
bool blinkState = uongo; char str[512];
26

Kufanya bora furaha
kuelea pi = 3.1415926; kuelea AcceRatio = 16384.0; kuelea GyroRatio = 131.0; kuelea Rad = 57.3; //180.0/pi; float gyrox,gyroy,gyroz;
usanidi utupu() { int i ; int32_t ax_zero = 0,ay_zero = 0,az_zero = 0,gx_zero =0 ,gy_zero =
0,gz_zero = 0; // jiunge na basi la I2C (maktaba ya I2Cdev haifanyi hivi kiotomatiki) Wire.begin();
Serial.begin(115200);
// anzisha kifaa // Serial.println(“Kuanzisha vifaa vya I2C…”);
accelgyro.initialize(); kuchelewa (500); accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_250);
Serial.println(“Inajaribu miunganisho ya kifaa…”); Serial.println(accelgyro.testConnection() ?“Muunganisho wa MPU6050 umefaulu” : “Muunganisho wa MPU6050 umeshindwa”); kwa(i = 0; i <200; i++) {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); gx_zero += gx ; gy_zero += gy ; gz_zero += gz ; } gyro_zero_offsent.x = gx_zero/200 ; gyro_zero_offsent.y = gy_zero/200 ;
27

Kufanya bora furaha
gyro_zero_offsent.z = gz_zero/200; pinMode(LED_PIN, OUTPUT); }
void loop() {// soma vipimo ghafi vya accel/gyro kutoka kwa kifaa accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//sprintf(str,”%d,%d,%dn”, gx-gyro_zero_offsent.x ,gygyro_zero_offsent.y, gz-gyro_zero_offsent.z);
//Serial.print(str); gyrox = (float)(gx-gyro_zero_offsent.x)/AcceRatio; gyroy = (float)(gy-gyro_zero_offsent.y)/AcceRatio ; gyroz = (float)(gz-gyro_zero_offsent.z)/AcceRatio ; Serial.print(gyrox);Serial.print(“gt”); Serial.print(gyroy);Serial.print(“gt”); Serial.print(gyroz);Serial.print("gn");
kuchelewa (100); // blink LED kuonyesha shughuli blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }
Tunapozunguka katika mwelekeo mzuri wa mhimili wa x, tunaona kwamba data iliyochapishwa ya gyrox ni chanya, vinginevyo ni hasi.
28

Kufanya bora furaha
5.4 Uchambuzi wa Data Mwendo
Baada ya kubadilisha data ya kusoma ya accelerometer na mita ya kasi ya angular na wao kwa maadili ya kimwili, data hutafsiriwa tofauti kulingana na maombi tofauti. Katika sura hii, mfano wa mwendo wa ndege unachukuliwa kama wa zamaniample kuhesabu mtazamo wa sasa wa ndege kulingana na kuongeza kasi na kasi ya angular.
5.4.1 Mfano wa Accelerometer
Tunaweza kufikiria kipima mchapuko kama mpira katika kisanduku cha mchemraba chanya ambacho kinashikiliwa katikati ya mchemraba na chemchemi. Wakati sanduku linasonga, thamani ya kuongeza kasi ya sasa inaweza kuhesabiwa kutoka kwa nafasi ya mpira wa kufikiria kama inavyoonyeshwa hapa chini:
29

Kufanya bora furaha
Kielelezo 15: Thamani ya kuongeza kasi ya hali ya kupoteza uzito
Ikiwa tunaweka nguvu ya kushoto ya usawa kwenye sanduku, basi ni wazi sanduku litakuwa na kasi ya kushoto, basi mpira wa kufikiria kwenye sanduku utashika upande wa kulia wa sanduku kutokana na inertia. Kama inavyoonyeshwa kwenye takwimu ifuatayo:
Kielelezo cha 16: Kuongeza kasi ya kitu kinachohamia kulia
Ili kuhakikisha maana halisi ya data, kipima kasi cha MPU6050 kinaashiria thamani tofauti katika shoka tatu za mpira wa kufikiria kama kuongeza kasi ya kweli. Wakati nafasi ya mpira wa kufikirika inaegemezwa kuelekea mbele ya mhimili, uharakishaji wa mhimili ni hasi, na wakati nafasi ya mpira wa kufikirika inaegemea upande wa mhimili hasi, kuongeza kasi ya mhimili huo.
30

Kufanya bora furaha
kusoma ni chanya. Kulingana na uchambuzi hapo juu, tunapoweka chip ya MPU6050 kwenye kiwango cha ndani, uso wa chip unaelekea angani, kwa wakati huu kwa sababu ya mvuto, nafasi ya mpira iko kuelekea mwelekeo mbaya wa mhimili wa Z, kwa hivyo Z. usomaji wa kuongeza kasi ya mhimili unapaswa kuwa chanya, na kwa hakika unapaswa kuwa "g". Kumbuka kwamba hii si kuongeza kasi ya mvuto lakini kuongeza kasi ya mwendo wa kimwili, hii inaweza kueleweka: kuongeza kasi ya mvuto ni sawa na thamani yake ya kuongeza kasi ya harakati, lakini kwa upande mwingine, ndiyo sababu chip inaweza kubaki stationary.
5.4.2 Kielelezo cha Roll-pitch-yaw na hesabu ya mtazamo
Mfano wa jumla wa kuwakilisha mtazamo wa sasa wa ndege ni kuanzisha mfumo wa kuratibu kama inavyoonyeshwa hapa chini na kuwakilisha mzunguko wa mhimili wa X na "Roll", mzunguko wa mhimili wa Y kwa "Pitch", mzunguko wa Z. mhimili kwa "Yaw".
Kielelezo cha 17: Mfano wa Roll-pitch-yaw
Kwa kuwa MPU6050 inaweza kupata kuongeza kasi ya juu ya shoka tatu na mvuto daima ni wima chini, tunaweza kuhesabu mtazamo wa sasa kulingana na kuongeza kasi ya mvuto.
31

Kufanya bora furaha
kuhusiana na chip. Kwa ajili ya urahisi, tuna chip inayoelekea chini kwenye ndege iliyoonyeshwa hapo juu, na kuratibu ziko katika sanjari kamili na mfumo wa kuratibu wa ndege. Kuongeza kasi katika axes tatu huunda vector ya kuongeza kasi "a (x, y, z)". Kwa kuchukulia kuwa chipu iko katika hali ya mwendo wa mstari unaofanana, basi “a” inapaswa kuwa sawa na ardhi, yaani, mwelekeo hasi wa mhimili wa Z, na urefu ni |a|=g=sqrt{x^2+ y^2+z^2} (sawa na kuongeza kasi ya mvuto lakini mwelekeo kinyume, ukiona katika Sehemu ya 3.1). Ikiwa chipu (mfumo wa kuratibu) itazunguka, mwelekeo hasi wa mhimili wa Z hautaambatana tena na "a" kwa sababu vekta ya kuongeza kasi bado iko juu kiwima. Kuona hapa chini.

Kielelezo 18: Muundo wa kukokotoa pembe ya mtazamo
Kwa ajili ya urahisi, mwelekeo mzuri wa mhimili wa Z wa mfumo wa kuratibu hapo juu ni (tumbo na mbele ya chip) kuelekea chini, na mhimili wa X unaelekea kulia (mwelekeo wa ndege inayoruka). Katika hatua hii, pembe ya Roll "" (njano) ya chip huundwa na vector ya kuongeza kasi na makadirio yake (x, 0, z) kwenye ndege ya XZ, angle ya Pitch "" (kijani) huundwa na vector ya kuongeza kasi. na makadirio yake kwenye ndege ya YZ. Kitone

formula ya bidhaa inaweza kuhesabu pembe kati ya vekta mbili: punguzo rahisi:

. Baada ya

na

.

32

Kufanya bora furaha
Kumbuka kwamba kwa kuwa kipengele cha kukokotoa cha arccos kinaweza tu kurudisha thamani chanya, unahitaji kuchukua maadili chanya na hasi ya pembe kulingana na hali tofauti. Wakati mhimili y ni chanya, angle ya Roll inachukua thamani hasi, na wakati mhimili wa X ni hasi, angle ya Pitch ni hasi.
5.4.3 Tatizo la Pembe ya Mikono
Kwa kuwa hakuna marejeleo, pembe kamili ya sasa ya Yaw haiwezi kuhesabiwa, tunaweza tu kupata tofauti ya Yaw, yaani, kasi ya angular GYR_Z. Bila shaka, tunaweza kutumia njia ya GYR_Z muhimu kuhesabu angle ya sasa ya Yaw (kulingana na thamani ya awali), kwa mujibu wa usahihi wa kipimo, thamani iliyohesabiwa inateleza, haina maana kabisa baada ya muda. Hata hivyo, katika programu nyingi, kama vile UAVs, ni GRY_Z pekee inayohitajika.
Ikiwa unapaswa kupata pembe kamili ya Yaw, kisha uchague MPU9250, chipu ya kufuatilia mwendo wa mhimili 9, inaweza kutoa dira ya 3-axis data ya ziada, ili tuweze kuhesabu angle ya Yaw kulingana na mwelekeo wa shamba la magnetic ya dunia, njia maalum haijatajwa hapa.
5.5 Utayarishaji na Utekelezaji wa Takwimu
Chip ya MPU6050 hutoa data kwa kelele kubwa, wakati chip inasindika katika hali tuli, data inaweza swing zaidi ya 2%. Kwa kuongezea kelele, bado kuna marekebisho mengine, ambayo ni kusema, data haizunguki karibu na sehemu tuli ya kufanya kazi, kwa hivyo urekebishaji wa data unapaswa kusawazishwa kwanza, na kisha kuondoa kelele kwa kuchuja algorithm. Athari ya kichujio cha Kalman bila shaka ni bora zaidi kwa data yenye kiasi kikubwa cha kelele. Hapa hatuzingatii maelezo ya algorithmic, unaweza kurejelea http://www.starlino.com/imu_guide.html.
5.5.1 Jaribio la 3 imu_kalman anapata Roll and Lami Lengo ni kuonyesha hali ya mwendo wa 3D ya mpu6050 katika muda halisi kwa kusoma mpu6050, na kusambaza mchapuko wa wakati halisi ACCEL_X, ACCEL_Y, ACCEL_Z data na data ya gyro GYRO_X, GYRO_X, , na GYRO_Z kwa programu ya usindikaji.
5.5.2 Msimbo wa Majaribio Msimbo wa majaribio wa Arduino "MotionTrackLessonmpu6050mpu6050.ino" unaweza kupata matokeo ya kukimbia ni kama ifuatavyo:
33

Kufanya bora furaha
Baada ya kupakia programu kwenye bodi kuu ya udhibiti ya Arduino NANO, fungua programu ya Uchakataji "MotionTrackProcessing_demompu6050mpu6050.pde"
na programu ya usindikaji (anwani ya kupakua https://www.processing.org) Kumbuka kwamba nambari iliyo katika “[]” si nambari ya mlango wa Arduino NANO, lakini nambari ya mfululizo ya mlango wa mawasiliano. Unahitaji kufungua kidhibiti cha kifaa cha kompyuta view nambari ya serial. Kwa mfanoampna, onyesho langu ni COM1, na mlango wa serial unaotumika kwa uchakataji wetu. Inaanza na usajili 0. Kwa hivyo nilibadilisha thamani katika “[ ]” katika programu kuu ya Uchakataji hadi 0. Mara tu mabadiliko yatakapokamilika, bofya Endesha Mchoro ili kuendesha Uchakataji..
34

Kufanya bora furaha
35

Kufanya bora furaha
kuagiza usindikaji.serial.*;
Serial myPort; // bandari ya serila numble
kuelea [] RwEst = kuelea mpya[3]; byte[] inBuffer = byte mpya[100];
fonti ya PFonti; int ya mwisho VIEW_SIZE_X = 1080,VIEW_SIZE_Y = 720;
usanidi utupu() {
ukubwa (1080, 720, P3D); myPort = Serial mpya(hii, Serial.list()[0], 9600); // myPort = Serial mpya (hii, “/dev/ttyUSB0”, 9600); // pakia Fonti CourierAina mpya / fonti ya tarehe = loadFont(“CourierNewPSMT-32.vlw”); }
void readSensors() { if (myPort.available() > 0) { if (myPort.readBytesUntil('n', inBuffer) > 0) { String inputString = new String(inBuffer); Kamba [] inputStringArr = split(inputString,','); RwEst[0] = kuelea(inputStringArr[0]); RwEst[1] = float(inputStringArr[1]); RwEst[2] = kuelea(inputStringArr[2]); }}
}
36

Kufanya bora furaha
utupu buildBoxShape() {//box(60, 10, 40); noStroke(); startShape(QUADS);
//Z+ jaza(#00ff00); kipeo (-30, -5, 20); kipeo (30, -5, 20); kipeo (30, 5, 20); kipeo (-30, 5, 20);
//Zfill(#0000ff); kipeo (-30, -5, -20); kipeo (30, -5, -20); kipeo (30, 5, -20); kipeo (-30, 5, -20);
//Xfill(#ff0000); kipeo (-30, -5, -20); kipeo (-30, -5, 20); kipeo (-30, 5, 20); kipeo (-30, 5, -20);
//X+ jaza(#ffff00); kipeo (30, -5, -20); kipeo (30, -5, 20); kipeo (30, 5, 20); kipeo (30, 5, -20);
//Yjaza(#ff00ff); kipeo (-30, -5, -20); kipeo (30, -5, -20); kipeo (30, -5, 20); kipeo (-30, -5, 20);
37

Kufanya bora furaha
//Y+ jaza(#00ffff); kipeo (-30, 5, -20); kipeo (30, 5, -20); kipeo (30, 5, 20); kipeo (-30, 5, 20);
mwishoShape(); }
utupu drawCube() { pushMatrix(); // normalize3DVec(RwEst); tafsiri(300, 450, 0); kipimo (4, 4, 4); rotateX(HALF_PI * -RwEst[1]); //zungushaY(NUSU_PI * -0.5); zungushaZ(HALF_PI * -RwEst[0]); buildBoxShape(); popMatrix();
}
void draw() {// getInclination(); somaSensorer(); mandharinyuma(#214565); jaza(#ffffff); maandishiFont(fonti, 20); maandishi(“RwEst :n” + RwEst[0] + “n” + RwEst[1] + “n” + RwEst[2], 220, 180); // onyesha shoka pushMatrix(); tafsiri(450, 250, 0); kiharusi (#ffffff); // kiwango (100, 100, 100); mstari (0, 0, 0, 100, 0, 0); mstari (0, 0, 0, 0, -100, 0); mstari (0, 0, 0, 0, 0, 100); mstari(0, 0, 0, -RwEst[0], RwEst[1], RwEst[2]); popMatrix(); drawCube();
} 38

Kufanya bora furaha
Tunaweza kuona kuwa matokeo yetu ya mbio ni kama ifuatavyo.
Kielelezo cha 19: Inachakata uwasilishaji wa wasilisho

Kanuni ya udhibiti wa ufuatiliaji wa mwendo

Kupitia upataji wa data uliopita wa mpu6050 ili kupata pembe ya Roll na Lami, tunaanzisha mawasiliano yafuatayo. Dhibiti kifaa cha chini cha kusongesha cha mashine: Tunaweza kudhibiti kifaa chochote cha chini cha mashine kwa kupata kasi na mwelekeo kupitia mpu6050.
Kwa kusoma data ya mpu6050 iliyothibitishwa kwa wakati halisi ACCEL_X, ACCEL_Y, ACCEL_Z data na data ya gyroscope GYRO_X, GYRO_Y, GYRO_Z data hupitishwa kwa kazi ya usindikaji ya quaternion, programu inaonyesha hali ya Roller na Pitch angle ya mpu6050 kwa wakati halisi.
6.1 Mwelekeo wa mbio kuratibu mfano wa pembe
Ili kuwezesha udhibiti wa gari, sasa tunaanzisha mfano ufuatao wa mwelekeo wa gari na pembe ya kuratibu.
39

Kufanya bora furaha
Mchoro 20: Viwianishi vya mwelekeo wa mbio Kama inavyoonyeshwa hapo juu, tunafafanua sehemu ya mbele ya gari kama digrii 90, digrii 270 hadi nyuma, digrii 180 kulia, na digrii 0/360 kushoto. 0 ~ 90 inasimama kwa mwelekeo sahihi wa mbele. 90 ~ 180 inasimama mbele ya kushoto 180 ~ 270 kwa nyuma ya kushoto na 270 ~ 360 kwa nyuma ya kulia. Vile vile, tuliweka mpu6050 kwenye kinga za michezo. Tulijenga mfano wa mwendo unaofuata.
40

Kufanya bora furaha
Mchoro 21: Viwianishi vya mwelekeo vya glavu za michezo Kupitia mfano wa data wa 5.5.2 Roll-pitch-yaw, glavu za michezo zinazunguka takwimu Y (kugeuza nyuma ya mkono kushoto na kulia) na tunapata angle ya lami. Kuzunguka karibu na X (pindua nyuma na mbele) tunapata angle ya Roll. Sasa kwa kuwa tuna ufahamu wa kuratibu za angle ya mtazamo na kuratibu za angular za gari, sasa tutaielezea kwa eneo. Wakati glavu za michezo zimeelekezwa kwa mwelekeo wa mbele wa kulia, kama inavyoonyeshwa kwenye takwimu hapa chini, ikiwa ziko kwenye mfumo wa kuratibu, zinaelekezwa kwa eneo la digrii 0 hadi 90.
41

Kufanya bora furaha
Mchoro wa 22: Mchoro wa mpangilio wa glavu za michezo zinazoinamisha kuelekea upande wa mbele wa kulia Kona inayolingana na gari iliyo chini ni kama ifuatavyo.
42

Kufanya bora furaha
Mchoro wa 23: Mchoro wa mchoro wa harakati ya mbele ya kulia ya gari Kupitia mtazamo wa kinga za michezo, tunahitaji kuhesabu shahada ya angle ya harakati ya mashine ya chini. Kwa hivyo tulijenga mfano wa tatu-dimensional ifuatayo
Mchoro 24: Mchoro wa kielelezo cha stereo kulingana na glavu za michezo Kwa urahisi wa uwakilishi, mwelekeo chanya wa mhimili wa Z wa mfumo wa juu wa kuratibu (mbele ya glavu inayosonga) uko juu, na mwelekeo chanya wa mhimili wa X (upande wa kulia wa mhimili wa Z. glavu ya michezo) iko kulia. Katika hali ya awali, glavu za michezo zinabaki lever sawa na XY. Kwa wakati huu, mwelekeo ambao glavu za michezo zimeelekezwa inawakilishwa na OB, na pembe ya Roll (nyeusi) ni pembe kati ya vector ya kuongeza kasi OB na makadirio yake (x, 0, z) kwenye ndege ya XZ, na Pembe ya lami (zambarau) ni makadirio yake kwenye ndege ya YZ ( Pembe kati ya 0, y, na z). Rangi ya samawati ni kiwango ambacho glavu za michezo huonyesha makadirio (x, o, y) kwenye ndege ya XY. Tunatumia pembe hii ili kudhibiti angle ya uendeshaji wa gari la chini. Tayari tumepata Roll and Pitch kupitia jaribio la awali la 5.6.1. Sasa tunahesabu digrii kwa formula ifuatayo. Katika Kielelezo BA OA AB OB sin(Pitch) BD OD BD OBsin(Roll)
43

Kufanya bora furaha
tandegree FE BD sin(Roll) Roll
OE AB sin(Lami) Pitch deg ree arctan( Roll)
Lami Juu tumepata angle ya usukani ya cosine, tunahitaji kuzidisha mgawo katika shahada ya kuratibu. 180 57.3 Uchanganuzi ulio hapo juu ni uchanganuzi wa pembe unapoinamishwa kama sehemu ya juu kulia. Vile vile, wakati glavu za michezo zimewekwa mbele ya kushoto
Mchoro 25: Mchoro wa mpangilio wa glavu za michezo zinazoinamia upande wa mbele wa kushoto deg ree arctan( Pitch)*57.3 900
Pindua Vile vile, wakati glavu za michezo zimeelekezwa upande wa kushoto
44

Kufanya bora furaha
Mchoro 26: Mchoro wa kielelezo cha mwelekeo wa nyuma wa kushoto wa glavu za michezo deg ree arctan( Roll)*57.3 1800
Lami Vivyo hivyo, wakati glavu za michezo zimeelekezwa upande wa chini wa kulia
Mchoro wa 27: Mchoro wa mpangilio wa mwelekeo wa nyuma wa kulia wa glavu za michezo
45

Kufanya bora furaha
deg ree arctan( Lami)*57.3 2700 Roll
Sasa hebu tuzungumze kuhusu jinsi ya kudhibiti kasi ya gari. Kutoka kwa takwimu hapo juu tunaweza kuona kwamba kwa glavu za michezo kwenye mpu6050 na pembe ya ndege ya XY ya ndege, tunatumia ndege ifuatayo kuwakilisha.

B'OBNi pembe ya mwelekeo inayohusiana na hali ya awali inayotumia kiwango hiki cha kuinamisha kudhibiti kasi ya

gari.

B'OB=OBF arcsin( YA ) arcsin( OE2 EF 2 )

OB

OB

EF=BD OE=AB

OBF arcsin( sin2 (Roll) sin2 (Lami)) arcsin( Roll2 Pitch2 )

Ya juu ni pembe ya arc. Tunahitaji pia kuzidisha mgawo. Masafa ya pembe hii ni (0~90). Tunatumia pembe hii moja kwa moja kama kasi ya udhibiti wa gari.

46

Kufanya bora furaha

kuelea CalculateSpeed(kuelea roll, kuelea lami) {
mwelekeo wa kuelea = asin(sqrt(roll*roll +pitch*pitch))*Rad; mwelekeo wa kurudi; }

Mwelekeo tupu wa Mkono (utupu)

{

hesabu ya int tuli = 0;

tuli int SendSpeed ​​= 0, SendDegree = 0;

hesabu ++;

kasi = CalculateSpeed(roll, lami);

ikiwa ((-0.2 <= lami) && (pitch <= 0.2) && (-0.2 <= roll) && (roll <= 0.2)) {

shahada = 90;

SendSpeed ​​= 0;

SendDegree += 90;

} vinginevyo ikiwa (pitch < 0 && roll < 0) {

shahada = atan(roll/pitch)*Rad;

SendDegree += ((int haijasainiwa)(shahada/10))*10;

} vinginevyo ikiwa (pitch > 0 && roll < 0) {

shahada = atan(-pitch/roll)*Rad + 90;

SendDegree += ((int haijasainiwa)(shahada/10))*10;

} vinginevyo ikiwa (pitch > 0 && roll > 0) {

shahada = atan(roll/pitch)*Rad + 180;

} vinginevyo ikiwa (pitch < 0 && roll > 0) {

shahada = atan(-pitch/roll)*Rad + 270;

SendDegree += ((int haijasainiwa)(shahada/10))*10;

} nyengine {

shahada = 90;

SendSpeed ​​= 0;

SendDegree = 90;

}

SendDegree = (int)(kasi/10)*10;

ikiwa (shahada <30 || shahada > 330) {

SendDegree = 0;

}

ikiwa (hesabu> = 3) {

hesabu = 0;

Send_Direction(SendDegree/3);

Send_Speed(SendSpeed);

SendDegree = 0;

SendSpeed ​​= 0;

4 7

}

Kufanya bora furaha

Itifaki

Tumia Bluetooth kudhibiti gari, kwa kweli inatumia programu ya Android kutuma maagizo kwa Arduino

mlango wa serial kupitia Bluetooth ili kudhibiti gari. Kwa kuwa inahusisha mawasiliano ya wireless, moja ya muhimu

matatizo ni mawasiliano kati ya vifaa viwili. Lakini hakuna "lugha" ya kawaida kati yao,

kwa hivyo ni muhimu kubuni itifaki za mawasiliano ili kuhakikisha mwingiliano kamili kati ya Android na

Arduino. Mchakato kuu ni: Android inatambua amri ya udhibiti na kuiweka kwenye faili ya

pakiti inayolingana, kisha kutumwa kwa moduli ya Bluetooth (JDY-16), JDY-16 ilipokea data na kutuma kwa

Arduino, kisha Arduino kuchambua data kisha kufanya hatua inayolingana. Muundo wa tarehe ambayo

Android kutuma kama ilivyo hapo chini, haswa ina sehemu 8.

Itifaki ya Urefu wa Data ya Kifaa Aina ya Itifaki ya Kudhibiti Utendakazi wa Kifaa

Kijajuu

Msimbo wa Mwisho wa Data ya Anwani

Katika nyanja 8 zilizo hapo juu, tunatumia muundo wa muundo kuwakilisha.

muundo wa typedef {
msimbo wa mwanzo wa herufi ambao haujatiwa saini; char len isiyotiwa saini; aina ya char isiyosajiliwa; kiongeza char ambacho hakijasainiwa; utendakazi wa int mfupi ambao haujasajiliwa; char *data ambayo haijatiwa saini; jumla ya int fupi isiyosajiliwa; msimbo wa mwisho wa herufi ambao haujatiwa saini; }Itifaki_ya_ST;

// 8bit 0xAA
// 16 kidogo // n kidogo // angalia jumla // 8bit 0x55

"Kichwa cha Itifaki" kinamaanisha mwanzo wa pakiti, kama vile uteuzi sawa wa 0xAA. "Urefu wa data" unamaanisha isipokuwa urefu sahihi wa data wa misimbo ya mwanzo na mwisho ya data. "Aina ya kifaa" inamaanisha aina ya kifaa "Anwani ya kifaa" inamaanisha anwani ambayo imewekwa kwa udhibiti "Msimbo wa utendakazi" inamaanisha aina ya utendakazi wa kifaa unaohitaji kudhibitiwa, aina za utendakazi tunazotumia hivi sasa kama ifuatavyo.

48

Kufanya bora furaha
typedef enum {
E_BATTERY = 1, E_LED = 2, E_BUZZER = 3, E_INFO = 4, E_ROBOT_CONTROL = 5, E_ROBOT_CONTROL_SPEED = 6, E_TEMPERATURE = 7, E_IR_TRACKING = 8, E_ULTRASONIC = E_ROBOT_CONTROL = E_ROBOT_CONTROL_SPEED = 9, E_TEMPERATURE = 10, E_IR_TRACKING = 11, E_ULTRASONIC = XNUMX, XNUMX, XNUMX, XNUMX, XNUMX_ FUNC ;
"Data" inamaanisha thamani mahususi ya udhibiti wa gari, kama vile kasi, pembe. "Checksum" ni matokeo ya biti tofauti za data au zilizokokotwa za maagizo ya udhibiti. "Msimbo wa mwisho wa itifaki" ni sehemu ya mwisho ya mfuko wa data wakati wa kupokea data hii, ina maana kwamba kifurushi cha data kimetumwa, na kiko tayari kupokea kifurushi cha data kinachofuata, hapa tumekibainisha kama 0x55. Kwa mfanoample, pakiti kamili inaweza kuwa kama vile "AA 070101065000 5F55", ambayo: "07" ni Urefu wa Data ya Usambazaji baiti 7. "06" ni "aina ya kifaa", kama vile motor, LED, buzzer na kadhalika. 06 hapa inahusu kasi ya maambukizi, na 05 inahusu mwelekeo wa maambukizi. "50 (au 0050)" ni data ya kudhibiti, 0x50 katika hexadesimoli ni 80 wakati inabadilishwa kuwa binary, ambayo ina maana thamani ya kasi ni 80. Ikiwa data ni 05, inamaanisha mwelekeo wa kudhibiti, yaani digrii 80 (mbele). "005F" ni cheki ambayo ni 0x07+0x01+0x01+0x06+0x50=0x5F. "55" ni msimbo wa mwisho wa Itifaki, inayoonyesha mwisho wa uhamisho wa data.
49

Kufanya bora furaha

Jaribio la kina

8.1 Nrf24L01 udhibiti wa wireless
8.1.1 Kidhibiti kwa ishara gari mahiri la Hummer-bot Unganisha kulingana na laini ya unganisho ya sura iliyotangulia, kisha unganisha betri kavu ya 9v kwenye
Arduino NANO, na pakua programu. Baada ya kuwasha, moduli ya Nrf24L01 hutuma data kwa Hummer-Bot Nrf24L01, na kisha kurekebisha nafasi ya glavu ili kudhibiti gari la kazi nyingi la Hummer-Bot, ili gari linalodhibitiwa na glavu za michezo kuzaliwa!
50

Kufanya bora furaha
Mchoro 28: Kidhibiti cha ishara cha hummer-bot Kiungo cha programu cha kompyuta ya chini: https://github.com/keywish/keywish-hummer-bot-Hummer-Bot-Multi-function kiungo cha ununuzi wa gari Nunua kwenye Amazon
https://www.amazon.com/dp/B078WM15DK Dhibiti video ya onyesho Gesture-MotionTrackingvideoControl_Hunner-bot.mp4 8.1.2 Gesture Control Beetle-bot Smart Car
Mchoro 29: Udhibiti wa Ishara Maelezo ya Mende-boti kuhusu Beetle-bot https://github.com/keywish/keywish-beetle-bot
51

Kufanya bora furaha
8.2 Udhibiti wa hali ya mawasiliano ya Bluetooth
Unganisha kulingana na kebo ya Bluetooth, kisha unganisha betri kavu ya 9v kwenye Arduino NANO na upakue programu (MotionTrackLessonMotionTrack_Bluetooth MotionTrack_Bluetooth.ino). Kumbuka kwamba unahitaji kurekebisha anwani ya MAC ya Bluetooth ya kompyuta ya chini. Baada ya kuwasha, glavu za michezo huunganishwa kiotomatiki kwenye moduli ya Bluetooth ya gari.
52

Kufanya bora furaha
8.2.1 Udhibiti wa ishara Mbio za Aurora
Kielelezo cha 30: Udhibiti wa Ishara Taarifa za Bidhaa za Mashindano ya Aurora: https://github.com/keywish/Aurora-Racing Video ya uzalishaji: giteeMotionTrackvideo Control_RacingCar.mp4
53

Kufanya bora furaha
8.2.2 Udhibiti wa ishara Panther-tank
Kielelezo 31: Udhibiti wa Ishara Tangi ya Pather-tangi Kwa nyenzo za uzalishaji za tanki, tafadhali rejelea https://github.com/keywish/keywish-panther-tank
54

Kufanya bora furaha
8.2.3 Gari la mizani ya kudhibiti ishara
Kielelezo cha 32: Udhibiti wa Ishara Mini mizani-gari Kwa habari ya bidhaa ya Mizani, tafadhali rejelea https://github.com/keywish/mini-balance-car
55

Nyaraka / Rasilimali

Makefun MPU6050 Arduino Gesture Ufuatiliaji [pdf] Mwongozo wa Maelekezo
Moduli ya MPU6050, Moduli ya Bluetooth ya JDY-16, Moduli ya NRF24L01, MPU6050 Arduino Ufuatiliaji wa Gesture, MPU6050, Ufuatiliaji wa Mwendo wa Ishara ya Arduino, Ufuatiliaji wa Mwendo wa Ishara, Ufuatiliaji Mwendo, Ufuatiliaji

Marejeleo

Acha maoni

Barua pepe yako haitachapishwa. Sehemu zinazohitajika zimetiwa alama *