Makefun MPU6050 Arduino Jès Mouvman Suivi
Enfòmasyon sou pwodwi
Espesifikasyon
- Non pwodwi: Jès-MotionTracking
- Vèsyon: V.1.2
- Repozitwa Github: Lyen Github
Lis Aparèy Entwodiksyon
Twous obligatwa pou itilize Gesture-MotionTracking yo se:
- MPU6050 Modil
- JDY-16 Bluetooth Modil
- NRF24L01+ Modil
- Arduino NANO Prensipal Komisyon Kontwòl
- Mini pen Komisyon Konsèy
- Gan
- Liy DuPont Gason ak Fi
- Batri
Enstriksyon Itilizasyon Pwodwi
NANO Processeur Entwodiksyon
Pwovizyon pou pouvwa
- Arduino Nano a ka mache ak mini-B USB koòdone, ekstèn 7 ~ 12V DC ekipman pou pouvwa atravè koneksyon vin.
memwa
- ATmega168/ATmega328 sou Nano a gen 16KB/32KB memwa Flash, 1KB/2KB SRAM, ak 0.5KB/1KB EEPROM.
Antre ak Sòti
- Nano a gen 14 pò I/O dijital, 6 entrées analòg, ak broch espesifik pou divès fonksyon tankou kominikasyon seri, entèwonp, pwodiksyon PWM, SPI, elatriye.
Entèfas kominikasyon
- Nano a sipòte kominikasyon seri atravè UART e li gen koòdone konpatib otobis SPI ak I2C.
Downloader
- Nano ka pwograme lè l sèvi avèk lojisyèl Arduino ak pwogram bootloader la. Yo ka telechaje pwogram yo tou atravè antèt ICSP.
Atansyon
- Nano a gen yon konsepsyon reset otomatik pou reset lojisyèl fasil san entèvansyon manyèl.
FAQ
Kesyon yo poze souvan
- Q: Ki kote mwen ka jwenn dènye mizajou oswa resous adisyonèl pou Gesture-MotionTracking?
- A: Ou ka tcheke depo Github ofisyèl la nan lyen yo bay la pou mizajou ak resous yo.
- Q: Kouman pou mwen pouvwa Arduino Nano a?
- A: Ou ka pouvwa Nano a lè l sèvi avèk yon koòdone mini-B USB oswa yon ekstèn 7 ~ 12V DC ekipman pou pouvwa ki konekte atravè pin vin la.
"`
Fè ou plezi ideyal
1. Aparèy lis entwodiksyon
Twous obligatwa yo montre nan tablo ki anba a. MPU6050 Modil
JDY-16 Bluetooth Modil NRF24L01+ Modil
Arduino NANO Prensipal Komisyon Konsèy Mini Pen Komisyon Konsèy Gan
Gason ak Fi DuPont line Battery
1 1 2 1 2 1 Plizyè 1
Figi 1: Lis Aparèy
4
Fè ou plezi ideyal
2. NANO Processeur Entwodiksyon
Mikwoprosesè Arduino Nano a se ATmega328 (Nano3.0) ak koòdone USB-mini, ki gen 14 broch dijital opinyon / pwodiksyon (6 nan yo ka itilize kòm pwodiksyon PWM), 8 entrain analòg, ak yon resonator seramik 16 MHz, 1 mini. -B USB koneksyon, yon header ICSP ak yon bouton reset. Processeur ATmega328 k ap travay voltage 5v Antre voltage (rekòmande) 7-12v Antre voltage (ranje) 6-20v Dijital IO PIN 14 (6 nan yo ki ka itilize kòm pwodiksyon PWM) Pinch antre analòg 6 IO PIN DC 40 mA Flash memwa 16 oswa 32 KB (nan ki 2 KB pou bootloader) SRAM 1KB oswa 2KB EEPROM 0.5 KB oswa 1KB ATmega328 CH340 USB nan pò seri chip Revèy 16 MHz
2.1 Pwovizyon pou pouvwa
Arduino Nano mòd ekipman pou pouvwa: mini-B USB koòdone ekipman pou pouvwa ak ekstèn vin koneksyon 7 ~ 12V ekstèn DC ekipman pou pouvwa
2.2 memwa
ATmega168/ATmega328 gen ladan sou-chip 16KB/32KB Flash, nan ki 2KB yo itilize pou Bootloader. Genyen tou 1KB/2KB SRAM ak 0.5KB/1KB EEPROM.
2.3 Antre ak Sòti
14 dijital D 'ak pwodiksyon pò: Voltage se 5V, ak chak chanèl ka pwodiksyon ak aksè nan maksimòm aktyèl la nan 40mA. Chak chanèl ekipe ak yon rezistans rale entèn 20-50K ohm (pa konekte pa default). Anplis de sa, kèk broch gen fonksyon espesifik.
Serial siyal RX (0), TX (1): Li bay pò seri siyal k ap resevwa ak TTL voltage nivo, konekte ak peny ki koresponn lan nan FT232Rl.
Entèwonp ekstèn (No 2 ak No 3): Peny entèwonp deklanche, ki ka mete sou kwen k ap monte, kwen tonbe oswa deklanche similtane.
Pulse Width Modulation PWM (3, 5, 6, 9, 10, 11): Bay 6 chanèl, 8-bit PWM sorties.
5
Fè ou plezi ideyal
SPI10(SS)11(MOSI)12(MISO)13(SCK):Entèfas kominikasyon SPI. Dirije (No 13): Arduino se espesyalman itilize pou teste koòdone rezève ki ap dirije a. Lè pwodiksyon an se
segondè, dirije a limen. Lè pwodiksyon an ba, dirije a koupe. 6 antre analòg A0 a A5: Chak chanèl gen yon rezolisyon 10 bit (ki vle di, opinyon an gen 1024 diferan.
valè), ranje siyal opinyon default la se 0 a 5V, epi AREF ka ajiste limit siperyè opinyon an. Anplis de sa, kèk broch gen fonksyon espesifik. TWI koòdone (SDA A4 ak SCL A5): Sipòte koòdone kominikasyon (konpatib ak otobis I2C). AREF: Voltage nan siyal la opinyon analòg. Reyajiste chip mikrokontwolè a reset lè siyal la ba.
2.4 Entèfas kominikasyon
Pò seri: UART entegre nan ATmega328 ka kominike ak pò seri ekstèn nan pò dijital 0 (RX) ak 1 (TX).
2.5 Telechajè
MCU a sou Arduino Nano a gen yon pwogram bootloader, kidonk, ou ka telechaje pwogram nan dirèkteman nan lojisyèl Arduino a. Ou kapab tou telechaje dirèkteman pwogram nan nan MCU a atravè header ICSP sou Nano a.
2.6 Atansyon
Arduino Nano a bay yon konsepsyon reset otomatik ki ka reset pa lame a. Nan fason sa a, lojisyèl an ka otomatikman Reyajiste pa lojisyèl an Arduino nan pwogram nan Nano a, san yo pa peze bouton an Reyajiste.
Entwodiksyon Blumodule
Entwodiksyon BlumoduleJDY-16
3.1 Karakteristik
Transmisyon transparan gwo vitès BLE sipòte kominikasyon pousantaj 8K Bytes. Voye ak resevwa done san limit byte, sipòte 115200 baud vitès kontinyèlman voye ak resevwa done. Sipòte 3 mòd travay (gade deskripsyon fonksyon enstriksyon AT+STARTEN). Sipò (pò seri, IO, APP) dòmi reveye Sipòte WeChat Airsync, WeChat applet ak kominikasyon APP. Sipòte 4 kanal IO kontwòl pò ak gwo presizyon RTC revèy. Sipòte fonksyon PWM (ka kontwole pa UART, IIC, APP, elatriye). Sipòte mòd kominikasyon UART ak IIC, default kominikasyon UART. iBeacon mòd (sipòte WeChat souke pwotokòl ak Apple iBeacon pwotokòl).
6
Fè ou plezi ideyal
Lame transparan transmisyon mòd (transmisyon done ant modil aplikasyon, lame ak kominikasyon esklav).
Konfigirasyon modil kominikasyon san fil
Figi 2: JDY-16 modil kat fizik (1) kab Nano ak JDY-16
JDY-16 Modil
Arduino NANO
VCC
5V
GND
GND
RXD
D2
TXD
D3
STAT
NC
PWRC
NC
Telechaje pwogram MotionTrackJDY-16AT_CMD AT_CMD.ino
(2) Kondisyon konfigirasyon:
Aplike mèt-esklav obligatwa de modil Bluetooth JDY-16.
3.2 Etap Fonksyònman
1. Konekte modil Nano ak JDY-16 ak liy DuPont la. 2. Antre nan mòd lòd AT Konekte telechaje a nan òdinatè a epi louvri asistan pò seri a. Mete vitès baud la a 9600, ti jan done a 8 bit, ti bit la sispann a 1 bit, epi pa gen okenn ti jan parite.
7
Fè ou plezi ideyal
Tès kominikasyon: Voye: AT Retounen: OK
Figi 3: Voye dyagram kòmand AT 3. Voye: AT+HOSTEN1rn ————– Mete Bluetooth kòm mòd prensipal Retounen: OK Retounen: OK
8
Fè ou plezi ideyal
Figi 4: Anviwònman Mòd Lame 4. Fè rechèch sou Bluetooth JDY-16 ki antoure a: 1. Transmisyon esklav: AT+SCANrn ————— Demand pwòp adrès esklav la Retounen: OK +DEV:1=3CA5090A160F, -62, JDY-16 +STOP:ESKANE
Figi 5: Rekèt aparèy periferik Bluetooth 5. Konekte Bluetooth
Lame voye: AT+CONN3CA5090A160Frn ————— Adrès esklav obligatwa lame Retounen: OK Konekte ak ekipman pou pouvwa a, de Bluetooth yo ka konekte youn ak lòt, voye done atravè Bluetooth lame a, Bluetooth esklav la ka resevwa menm done yo. Oswa ou ka dirèkteman pwograme pwosedi konfigirasyon mèt-esklav la pou mete Bluetooth mèt-esklav la, Lè sa a, lame a pwograme pwosedi koneksyon an epi otomatikman konekte. (Remake byen ke sèlman modil Bluetooth nan JDY-16 ka otomatikman konekte kounye a)
9
Fè ou plezi ideyal
3.3 Metòd koneksyon nan Nano ak JDY-16
Figi 6: Nano ak JDY-16 dyagram koneksyon
10
Fè ou plezi ideyal
NRF24L01 Wireless Modil Entwodiksyon
NRF24L01 Wireless Modil Entwodiksyon
Modil nRF24L01+ la se yon modil kominikasyon san fil 2.4G ki devlope pa Nordic ki baze sou chip nRF24L01 la. Adopte modulation FSK epi entegre pwòp pwotokòl Enhanced Short Burst Nordic la. Pointto-point oswa 1-a-6 kominikasyon san fil ka reyalize. Vitès kominikasyon san fil ka rive jiska 2M (bps). NRF24L01 a gen kat mòd opere: mòd transceiver, mòd konfigirasyon, mòd san fè anyen konsa, ak mòd fèmen. Kat fizik yo itilize nan eksperyans sa a se sou bò gòch Figi 7. Pou resepsyon ki estab resi Nrf24L01, li rekòmande pou konekte kondansateur 10uf ant VCC ak GUD jan yo montre sou bò dwat la.
Figi 7: Nrf24l01+ kat fizik ak dyagram soude
4.1 Modil Karakteristik
2.4GHz, ti gwosè 15x29mm ki gen ladan antèn Sipò resepsyon done sis-chanèl Low k ap travay voltage: 1.93.6V Done transfè pousantaj sipòte: 1Mbps2Mbps Konsomasyon pouvwa ba konsepsyon travay aktyèl nan resevwa se 12.3mA, 11.3mA nan 0dBm pouvwa
emisyon, 900nA nan mòd pouvwa-desann Fonksyon retransmisyon otomatik, deteksyon otomatik ak retransmisyon pake done pèdi,
tan retransmisyon ak tan retransmisyon ka kontwole pa lojisyèl fonksyon repons otomatik, apre li fin resevwa done valab, modil la otomatikman voye yon repons
siyal Materyèl entegre Deteksyon erè CRC ak kontwòl adrès kominikasyon pwen-a-multipwen NRF24L01 detay chip tanpri al gade tonRF24L01 Datasheet.pdf
11
Fè ou plezi ideyal
Pin enfòmasyon
Figi 8: Nrf24L01 pin enfòmasyon dyagram
Senbòl PIN
Fonksyon
Direksyon
1 GND
GND
2
+5V
Pwovizyon pou pouvwa
3
CE
Liy kontwòl nan mòd travay
IN
4
CSN Chip Chwazi Siyal, Ba Nivo Travay
IN
5
SCK
SPI Revèy
IN
6 MOSI
SPI Antre
IN
7 MISO
Sòti SPI
SOTI
8
IPQ
Entèwonp Sòti
SOTI+
4.2 Objektif Eksperimantal
1. Aprann sou nRF24L01+modil ak kijan pou konekte avèk Arduino. 2. Ki jan yo sèvi ak arduino ak nRF24L01 + modil pou fini resevwa ak voye done.
4.3 Konpozan ki nesesè pou eksperyans sa a
Arduino UNO R3 Plak Mè Arduino NANO Plak Mè nRF24L01 Modil * 2 Plizyè fil
12
Fè ou plezi ideyal
4.4 Dyagram chematik eksperimantal
Figi 9: Nano ak Nrf24L01 dyagram koneksyon
Arduino ak NRF24L01 mòd koneksyon
arduino Nano
nRF24L01
+3.3V
VCC
GND
GND
7pin
4pin CSN
4pin
3pin CE
11pin
6pin MOSI
12pin
7pin MISO
13pin
5pin SCK
arduino Uno +3.3V GND 7 4 11pin 12pin
nRF24L01
VCC GND 4pin CSN 3pin CE 6pin MOSI 7pin MISO
13
Fè ou plezi ideyal
13pin
5pin SCK
4.4 Prensip pwogram lan
Pwosesis lansman 1Premyèman, konfigirasyon nRF24L01 pou transmèt mòd. 2 Lè sa a, ekri adrès TX_ADDR nan fen k ap resevwa a ak done yo TX_PLD yo dwe voye nan zòn nan tanpon nRF24L01 pa pò a SPI nan sekans tan. 3Arduino konfigirasyon CE a wo pou omwen 10 s epi transmèt done apre yon reta nan 130 s. Si repons oto a limen, nRF24L01 antre nan mòd resevwa imedyatman apre li fin transmèt done yo epi li resevwa siyal repons lan. Si yo resevwa yon repons, yo konsidere kominikasyon an reyisi. 4NRF24L01 pral otomatikman mete TX_DS segondè epi TX_PLD a pral retire nan pil transmèt la. Si yo pa resevwa okenn repons, done yo pral otomatikman retransmèt. Si kantite retransmisyon (ARC_CNT) rive nan limit siperyè a, MAX_RT mete wo epi TX_PLD pa pral efase; MAX_RT Lè TX_DS mete wo, IRQ ale ba pou deklanche MCU entèwonp. Lè dènye transmisyon an reyisi, si CE a ba, nRF24L01 a pral antre nan mòd sibstiti. 5Si gen done nan pil transmisyon an ak CE wo, pwochen transmisyon an kòmanse; si pa gen okenn done nan pil transmisyon an ak CE wo, nRF24L01 a pral antre nan mòd sibstiti 2. Resevwa pwosesis done 1Lè nRF24L01 a resevwa done, tanpri konfigirasyon nRF24L01 a resevwa mòd premyèman. 2 Lè sa a, retade 130s nan eta k ap resevwa a pou tann pou rive done yo. Lè reseptè a detekte yon adrès valab ak CRC, li estoke pake done a nan pil reseptè a. An menm tan an, siy entèwonp RX_DR la mete wo epi IRQ la ba pou notifye MCU a chache done yo. 3Si oto-repons limen nan moman sa a, reseptè a pral antre nan siyal repons eko transmèt an menm tan an. Lè dènye resepsyon an reyisi, si CE a ba, nRF24L01 a pral antre nan mòd san fè anyen konsa 1.
Pwogram tès transceiver nRF24L01 tanpri al gade "MotionTracknRF24l01+pwogram"
14
Fè ou plezi ideyal
Mpu6050 Entwodiksyon
MPU6050 se premye eleman pwosesis mouvman 6-aks nan mond lan ak jiroskop 3-aks entegre ak akseleratè 3-aks. Li ka konekte ak lòt detèktè mayetik oswa pwosesis mouvman dijital lòt detèktè (DMP) atravè yon dezyèm pò I2C. Motè akselerasyon pyès ki nan konpitè sitou pwodui yon teknik kalkil fizyon konplè 9-aks nan MCU lame a nan fòm yon kouran done sèl pa pò I2C la.
MPU6050 chip vini ak yon modil DMP pwosesis done, li te bati-an algorithm filtraj pyès ki nan konpitè, lè l sèvi avèk done pwodiksyon DMP te kapab satisfè kondisyon yo byen nan anpil aplikasyon. Nou pa bezwen lojisyèl nou an pou fè filtraj la. Kou sa a pral bati yon gan espò konplè ki baze sou lekti DMP kòm done pwodiksyon atravè Arduino.
Figi 10: kat fizik modil mpu6050
Karakteristik done yo kalkil entegre nan pwodiksyon dijital nan 6 aks oswa 9 aks matris wotasyon, quaternion ak Euler
fòma ang. 3-aks Capteur vitès angilè (jiroskop) ak 131 LSBs/°/sec sansiblite ak ranje deteksyon konplè
nan ± 250, ± 500, ± 1000, ak ± 2000 ° / sec. Kontwòl pwogramasyon, 3-aks akseleratè ak ranje kontwòl pwogram nan ± 2g, ± 4g, ± 8g, ak ± 16g. Motè Digital Motion Processing (DMP) diminye chaj done kalkil fizyon konplèks la,
senkronizasyon detèktè, ak deteksyon jès.
15
Fè ou plezi ideyal
Baz done pwosesis mouvman an sipòte Android, Linux, ak Windows. Teknik kalibrasyon entegre pou devyasyon tan opere ak Capteur mayetik elimine itilizasyon yo.
bezwen adisyonèl pou kalibrasyon. Capteur tanperati pwodiksyon dijital. Ekipman an voltage nan VDD se 2.5V±5%3.0V±5%3.3V±5%, ak VDDIO se 1.8V±5%. Aktyèl fonksyònman jiroskop: 5mA, aktyèl sibstiti jiroskop: 8A; Akseleratè opere aktyèl: 8A,
akseleratè pouvwa ekonomize mòd aktyèl: 8A@10Hz. Jiska 400kHz mòd rapid I2C, oswa jiska 20MHz SPI seri koòdone lame. Pake ki pi piti ak pi mens pwepare pou pwodwi pòtab (4x4x0.9mm QFN).
5.2 Chema modil
Figi 11: Chema modil mpu6050 la
5.3 Kominikasyon ant Nano ak mpu6050
5.3.1 Koneksyon Awondisman
Koòdone done nan modil la MPU6050 entegre itilize pwotokòl otobis I2C, kidonk nou bezwen èd nan bibliyotèk la Fil pou kominike ant NANO ak MPU6050 la. Koneksyon ki koresponn nan tablo NANO a se jan sa a:
MPU6050 Modil VCC
Arduino NANO 5V
16
Fè ou plezi ideyal
GND SCL SDA XDA XCL ADD INT
GND A5 A4 NC NC NC NC/GND
Figi 12: Dyagram koneksyon Nano ak mpu6050
MPU6050 ekri ak lekti done yo reyalize pa rejis entèn chip la, adrès yo enskri yo tout 1 byte, sètadi, 8 Bits nan espas adrès la. Tanpri gade nan "RMMPU-6000A.pdf" 1.1. Anvan ekri done nan aparèy la chak fwa, premyèman vire sou mòd nan transfè fil epi presize adrès otobis la nan aparèy la. Adrès otobis la nan MPU6050 la se 0x68 (adrès la se 0x69 lè PIN AD0 a wo). Lè sa a, ekri yon byte nan adrès la kòmanse anrejistre, ak Lè sa a, ekri done ki gen nenpòt longè. Done sa yo pral kontinyèlman ekri nan adrès kòmanse espesifye a, epi longè rejis aktyèl la pral ekri nan rejis adrès sa a. Etenn mòd transfè fil la apre ekri a fini. Sa ki annapre yo sample kòd ekri yon byte 0 nan rejis 0x6B nan MPU6050 la.
Wire.beginTransmission(0x68); // Strat transmisyon MPU6050 la
17
Fè ou plezi ideyal
Wire.write(0x6B); // Espesifye adrès enskri Wire.write(0); // Ekri yon byte done Wire.endTransmission(true); // Fini transfè, vre vle di lage bis
Lekti Done ki soti nan MPU-6050
Lekti ak ekri yo sanble, premyèman louvri mòd nan transfè Fil, ak Lè sa a, ekri yon byte nan adrès la kòmanse enskri. Apre sa, li done adrès espesifye yo nan kachèt bibliyotèk Wire la epi fèmen mòd transpò a. Finalman, li done ki soti nan kachèt la. Egzanp sa aampKòd la kòmanse ak rejis 0x3B MPU6050 epi li 2 octets done:
Wire.beginTransmission(0x68); // Strat transmisyon MPU6050 Wire.write(0x3B); // Espesifye adrès enskri Wire.requestFrom(0x68, 2, true); // Li done yo nan kachèt Wire.endTransmission(true); // Fèmen mòd transmisyon int val = Wire.read() << 8 | Wire.read(); // De byte fòme yon nonb antye relatif 16-bit
Aplikasyon espesifik
Bibliyotèk la Fil anjeneral yo ta dwe inisyalize nan fonksyon an konfigirasyon: Wire.begin();
Ou dwe kòmanse aparèy la anvan ou fè nenpòt operasyon sou MPU6050 a, epi ekri yon byte nan 0x6B li yo pral ase. Li anjeneral fè nan fonksyon konfigirasyon an, jan yo montre nan seksyon 1.1.
MPU6050 Done Fòma
Done nou enterese yo se nan rejis 14 byte 0x3B rive 0x48. Done sa yo pral mete ajou dinamikman ak yon frekans aktyalizasyon ki rive jiska 1000HZ. Adrès rejis ki kache a ak non done yo ki nan lis anba a. Remake byen ke chak done se 2 byte.
0x3B, eleman aks X nan akseleromètr la se ACC_X 0x3D, eleman aks Y nan akseleromètr la se ACC_Y 0x3F, eleman aks Z nan akseleromètr la se ACC_Z 0x41, tanperati aktyèl la se TEMP 0x43, vitès angilè GXY0_X axi45 ozalantou XYXNUMX_X. , vitès angilè alantou aks Y GYR_Y
18
Fè ou plezi ideyal
0x47, vitès angilè alantou aks Z GYR_Z Definisyon kowòdone chip MPU6050 la se: fè fas a chip nan direksyon tèt li epi vire tèks sifas la nan ang ki kòrèk la. Nan moman sa a, sant chip la pran kòm orijin, orizontal la sou bò dwat la se aks X la, ak vètikal la se aks Y la, lonje dwèt ou se aks Z la, jan sa montre anba a:
Figi 13: wotasyon mpu6050 ak dyagram vitès angilè Nou sèlman pran swen siyifikasyon akseleromètr ak done mèt vitès angilè. Koulye a, nou abitye ak itilizasyon mpu6050 atravè de eksperyans. 5.3.2 Eksperyans 1 Akseleromèt lekti
Twa aks konpozan akseleromètr, ACC_X, ACC_Y ak ACC_Z yo tout 16-bit siyen nonb antye relatif, ki endike akselerasyon aparèy la nan twa direksyon axial. Lè yo pran valè negatif la, akselerasyon an negatif sou aks kowòdone a epi valè pozitif la pozitif.
Twa konpozan akselerasyon yo tout nan miltip akselerasyon gravitasyonèl g, ak seri akselerasyon ki ka eksprime, se sa ki ka agrandisman an inifòm, epi gen kat agrandisman si ou vle: 2g, 4g, 8g, ak 16g. Pran ACC_X kòm yon ansyenample, si agrandisman yo mete sou 2g (default), sa vle di ke lè ACC_X pran valè minimòm-32768, akselerasyon aktyèl la se 2 fwa akselerasyon gravitasyonèl nan direksyon pozitif aks X la, ak sou sa. Li evidan,
19
Fè ou plezi ideyal
pi ba a agrandisman, pi bon an presizyon, ak pi wo a agrandisman, pi gwo a ranje a, ki se mete dapre aplikasyon an espesifik.
AFS_SEL 0 1 2 3
Ranje Echèl konplè ±2g ±4g ±8g ±16g
LSB sansiblite 16384LSB/g 8192LSB/g 4096LSB/g 2048LSB/g
Relasyon ki genyen ant direksyon wotasyon akseleromèt twa aks ak modil la se jan sa a:
Figi 14: Modil wotasyon Mpu6050 ak modèl akselerasyon Done MPU6050 li li yo ap varye, kidonk li bezwen verifye. Sa vle di, lè chip la nan yon eta estasyonè, lekti sa a ta dwe teyorikman zewo. Men, li gen tandans gen yon konpanse. Pou egzanpample, nou li 200 valè nan entèval 10ms ak Lè sa a, mwayèn yo. Yo rele valè sa a zewo konpanse. Lekti kalibre a jwenn lè w retire konpanse zewo a nan chak lekti. Depi valè teyorik ACC_X ak ACC_Y yo ta dwe zewo, de konpanse lekti yo ka kalibre pa mwayen estatistik. ACC_Z bezwen trete nan yon sèl etap. Nan pwosesis la nan konpanse estatistik, akselerasyon gravitasyon g nan aks Z a soustraksyon pou chak lekti. Si agrandisman akselerasyon an se 2g, Lè sa a, 16384 yo soustraksyon, ak Lè sa a, kalibrasyon an mwayèn estatistik fèt. Kalibrasyon jeneral ka fèt chak fwa sistèm lan kòmanse, Lè sa a, ou ta dwe fè yon komès ant presizyon ak tan kòmanse.
20
Fè ou plezi ideyal
5.3.2.1 Objektif Eksperimantal
Pa wotasyon mpu6050 a pou voye lèzye sou pwodiksyon done relasyon ant twa aks akseleromètr la.
5.3.2.2 Kòd Eksperyans Kòd LocationMotionTrackLessonmpu6050_accel mpu6050_accel.ino
21
Fè ou plezi ideyal
#include "Wire.h" // I2Cdev ak MPU6050 dwe enstale kòm bibliyotèk, oswa sinon .cpp/.h la files // pou tou de klas yo dwe nan chemen enkli pwojè w la #include “I2Cdev.h” #include “MPU6050.h” #define LED_PIN 13 MPU6050 accelgyro; struct RAW_type {
uint8_t x; uint8_t y; uint8_t z; }; int16_t rach, ay, az; int16_t gx, gy, gz; struct RAW_type accel_zero_offsent; char str[512]; bool blinkState = fo ; flote AcceRatio = 16384.0; flote accx, accy, accz;
konfigirasyon anile () {
int mwen ;
int32_t ax_zero = 0,ay_zero = 0,az_zero = 0 ;
// rantre nan otobis I2C (bibliyotèk I2Cdev pa fè sa otomatikman)
Wire.begin();
Serial.begin(115200);
// inisyalize aparèy la
Serial.println ("Inisyalize aparèy I2C...");
accelgyro.initialize();
reta (500);
accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
Serial.println ("Tès koneksyon aparèy...");
Serial.println(accelgyro.testConnection() ? “MPU6050 koneksyon
2 2
siksè": "Koneksyon MPU6050 echwe");
Fè ou plezi ideyal
pou( mwen = 0 ; mwen < 200 ; mwen ++) {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); ax_zero += ax ; 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 () { // li anvan tout koreksyon aksèl / gyro mezi soti nan aparèy reta (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 = (flote) (ax-accel_zero_offsent.x)/AcceRatio; accy = (flote) (ay-accel_zero_offsent.y)/AcceRatio; accz = (flote) (az-accel_zero_offsent.z)/AcceRatio; Serial.print(accx);Serial.print(“gt”); Serial.print(akcy);Serial.print(“gt”); Serial.print(accz);Serial.print(“gn”);
blinkState = !blinkState; digitalWrite (LED_PIN, blinkState); }
23
Fè ou plezi ideyal
1. Wotasyon 90 degre alantou aks X la Lè aks X la vire 90 degre, aks Y la tou dousman anwo epi aks Z la se.
tou dousman desann. Lè aks la rive egzakteman 90 degre, depi aks Y a nan direksyon opoze ak gravite a, pwodiksyon aks Y a se 1g (1g ==9.8m/s ^ 2), pandan y ap valè aks Z a diminye soti nan. 1 a 0. 2. Retounen nan pozisyon inisyal la ak ranvèse wotasyon 90 degre
Lè ou tounen nan pozisyon inisyal la, valè aks Y a tou dousman redwi a 0, pandan y ap aks Z la tou dousman ogmante a 1. Lè sa a, vire 90 degre nan direksyon ranvèse, ak aks Y a diminye piti piti jiska -1, paske Y a. aks se an akò ak direksyon gravite a, ak valè akselerasyon an ta dwe negatif. Aks Z a diminye tou dousman a 0. 3. Retounen nan pozisyon inisyal la
Eksplike jan sa a: Lè sa a, retounen nan pozisyon inisyal la soti nan ranvèse 90 degre yo. Nan moman sa a, done yo nan aks Y a ak aks Z yo tou dousman retabli nan valè inisyal la, aks Y a se 0, ak aks Z a se 1.
Apre w fin analize wotasyon X-aks la, wotasyon Y-aks la sanble, kidonk nou pa pral pale sou li an detay. Koulye a, ann pale sou aks Z a, paske lè w ap vire toutotou aks Z la, li ekivalan a balanse 90 degre sou bò gòch ak sou bò dwat. Nan moman sa a, pwodiksyon aks Z la se toujou 1, ak aks X ak aks Y yo orthogonal ak aks gravite a, kidonk valè pwodiksyon yo se tout Li se 0, nan kou, sa a se valè a nan kondisyon relativman estatik. . Si aparèy la enstale sou yon machin, aks X ak Y yo ka pa nesesèman 0 lè machin nan vire agoch ak adwat.
24
Fè ou plezi ideyal
Rezilta eksperimantal
5.3.3 Eksperyans 2 Lekti done ki soti nan Gyro
Konpozan vitès angilè GYR_X, GYR_Y ak GYR_Z, ki vire toutotou twa aks kowòdone X, Y ak Z, se tout nonm antye ki siyen 1-bit. Soti nan orijin nan aks wotasyon an, valè a se pozitif pou wotasyon nan goch ak negatif pou wotasyon nan goch. Twa konpozan vitès angilè yo tout an degre/dezyèm. Ranje a vitès angilè ki ka eksprime, se sa ki, agrandisman an ka mete inifòm. Gen 4 agrandisman opsyonèl: 250 degre / segonn, 500 degre / segonn, 1000 degre / segonn, 2000. Degre / dezyèm. Pran GYR_X kòm yon ansyenample, si agrandisman an mete nan 250 degre / segonn, sa vle di ke lè GYR a pran yon valè maksimòm pozitif nan 32768, aktyèl vitès angilè a se 250 degre / dezyèm goch; si li mete sou 500 degre / segonn, valè aktyèl la nan 32768 endike aktyèl la vitès angilè a se 500 degre / dezyèm nan goch. Li evidan, pi ba a agrandisman, pi bon an presizyon, ak pi wo a agrandisman, se pi gwo a ranje.
AFS_SEL 0 1 2 3
Ranje Echèl konplè ± 250 ° / s ± 500 ° / s ± 1000 ° / s ± 2000 ° / s
LSB sansiblite
131LSB/°/s 65.5LSB/°/s 32.8LSB/°/s 16.4LSB/°/s
25
Fè ou plezi ideyal
Kote pwogram "MotionTrackLessonmpu6050_gryo mpu6050_gryo.ino" Kòd Eksperyans
#include "Wire.h"
// I2Cdev ak MPU6050 dwe enstale kòm bibliyotèk, oswa sinon .cpp/.h la files // pou tou de klas yo dwe nan chemen enkli pwojè w la #include “I2Cdev.h” #include “MPU6050.h” #define LED_PIN 13
MPU6050 akselere;
struct RAW_type {
uint8_t x; uint8_t y; uint8_t z; };
int16_t rach, ay, az; int16_t gx, gy, gz; struct RAW_type accel_zero_offsent ,gyro_zero_offsent;
bool blinkState = fo; char str[512];
26
Fè ou plezi ideyal
flote pi = 3.1415926; flote AcceRatio = 16384.0; flote GyroRatio = 131.0; flote Rad = 57.3 ; //180.0/pi; flote gyrox, gyroy, gyroz;
void konfigirasyon () { int i ; int32_t ax_zero = 0,ay_zero = 0,az_zero = 0,gx_zero =0 ,gy_zero =
0,gz_zero = 0 ; // rantre nan otobis I2C (bibliotèk I2Cdev pa fè sa otomatikman) Wire.begin();
Serial.begin(115200);
// inisyalize aparèy // Serial.println ("Inisyalize aparèy I2C...");
accelgyro.initialize(); reta (500); accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_250);
Serial.println ("Tès koneksyon aparèy..."); Serial.println(accelgyro.testConnection() ? “MPU6050 koneksyon siksè” : “MPU6050 koneksyon echwe”); pou( mwen = 0 ; mwen < 200 ; mwen ++) {
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
Fè ou plezi ideyal
gyro_zero_offsent.z = gz_zero/200; pinMode (LED_PIN, OUTPUT); }
void loop() { // li mezi aksèl/gyro anvan tout koreksyon nan aparèy accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//sprintf(str,”%d,%d,%dn”, gx-gyro_zero_offsent.x ,gyro_zero_offsent.y, gz-gyro_zero_offsent.z);
//Serial.print(str); gyrox = (flote) (gx-gyro_zero_offsent.x)/AcceRatio; gyroy = (flote) (gy-gyro_zero_offsent.y)/AcceRatio ; gyroz = (flote) (gz-gyro_zero_offsent.z)/AcceRatio ; Serial.print (gyrox); Serial.print ("gt"); Serial.print(gyroy);Serial.print("gt"); Serial.print(gyroz);Serial.print(“gn”);
reta (100); // blink LED pou endike aktivite blinkState = !blinkState; digitalWrite (LED_PIN, blinkState); }
Lè nou vire nan direksyon pozitif aks x la, nou wè done gyrox enprime yo pozitif, otreman li negatif.
28
Fè ou plezi ideyal
5.4 Analiz done Mouvman
Apre konvèti done lekti akseleromètr la ak mèt vitès angilè ak yo nan valè fizik, done yo entèprete yon fason diferan selon aplikasyon diferan. Nan chapit sa a, yo pran modèl mouvman avyon an kòm yon ansyenample pou kalkile atitid vòl aktyèl la baze sou akselerasyon ak vitès angilè.
5.4.1 Modèl akseleromètr
Nou ka panse akseleromèt la kòm yon boul nan yon bwat kib pozitif ki kenbe nan sant kib la pa yon sous. Lè bwat la ap deplase, yo ka kalkile valè akselerasyon aktyèl la nan pozisyon boul imajinè a jan yo montre pi ba a:
29
Fè ou plezi ideyal
Figi 15: Valè akselerasyon eta pèdi pwa
Si nou enpoze yon fòs gòch orizontal sou bwat la, Lè sa a, evidamman bwat la pral gen yon akselerasyon gòch, Lè sa a, boul la imajinè nan bwat la ap bwa sou bò dwat la nan bwat la akòz inèsi. Jan yo montre nan figi sa a:
Figi 16: Akselerasyon yon objè k ap deplase sou bò dwat la
Yo nan lòd yo asire siyifikasyon fizik done yo, akseleromètr MPU6050 la make valè opoze yo nan twa aks nan boul imajinè kòm akselerasyon reyèl. Lè pozisyon boul imajinè an patipri nan direksyon pi devan nan yon aks, akselerasyon an nan aks la se negatif, epi lè pozisyon nan boul imajinè se patipri nan direksyon yon aks negatif, akselerasyon aks la.
30
Fè ou plezi ideyal
lekti pozitif. Dapre analiz ki anwo a, lè nou mete chip MPU6050 la sou nivo lokal la, sifas chip la se nan direksyon syèl la, nan moman sa a akòz gravite a, pozisyon boul la se nan direksyon negatif aks Z, kidonk Z la. lekti akselerasyon aks yo ta dwe pozitif, e depreferans yo ta dwe "g". Remake byen ke sa a se pa akselerasyon gravitasyonèl la men akselerasyon mouvman fizik la, sa a ka konprann: akselerasyon gravite a egal a valè akselerasyon mouvman pwòp li yo, men nan direksyon opoze a, se poutèt sa chip la ka rete estasyonè.
5.4.2 Woule-pitch-yaw modèl ak kalkil atitid
Yon modèl jeneral pou reprezante atitid vòl aktyèl la nan yon avyon se etabli sistèm kowòdone jan yo montre anba a epi reprezante wotasyon aks X la pa "Woule", wotasyon aks Y la pa "Pitch", wotasyon Z la. aks pa "Yaw".
Figi 17: Woule-pitch-yaw modèl
Depi MPU6050 ka jwenn akselerasyon anlè twa aks ak gravite toujou vètikal desann, nou ka kalkile atitid aktyèl la dapre akselerasyon gravite a.
31
Fè ou plezi ideyal
parapò ak chip la. Pou dedomajman pou la konvenyans, nou gen chip la fè fas a desann sou avyon an montre pi wo a, ak kowòdone yo se nan konyensidans pafè ak sistèm kowòdone nan avyon an. Akselerasyon an nan twa aks yo fòme yon vektè akselerasyon "a (x, y, z)". Sipoze chip la nan yon eta mouvman lineyè inifòm, Lè sa a, "a" ta dwe pèpandikilè ak tè a, sètadi, direksyon negatif nan aks Z, ak longè a se |a|=g=sqrt{x^2+. y^2+z^2} (egal ak akselerasyon gravite a men direksyon opoze a, gade nan Seksyon 3.1). Si chip la (sistèm kowòdone) wotasyon, direksyon negatif aks Z a p ap kowenside ak "a" ankò paske vektè akselerasyon a toujou kanpe vètikal. Gade anba a.
Figi 18: Modèl kalkil ang atitid
Pou rezon konvenyans, direksyon pozitif nan aks Z nan sistèm kowòdone ki anwo a se (vant la ak devan chip la) anba, ak aks X la se nan direksyon adwat (direksyon avyon an vole). Nan pwen sa a, ang Roll "" (jòn) chip la fòme pa vektè akselerasyon an ak pwojeksyon li (x, 0, z) sou avyon XZ la, ang Pitch "" (vèt) fòme pa vektè akselerasyon an. ak pwojeksyon li yo sou avyon YZ la. Pwen an
fòmil pwodwi ka kalkile ang ki genyen ant de vektè: dediksyon senp:
. Apre
epi
.
32
Fè ou plezi ideyal
Remake byen ke depi fonksyon arccos la ka sèlman retounen valè pozitif, ou bezwen pran valè pozitif ak negatif ang lan selon diferan sikonstans. Lè aks y a pozitif, ang woule a pran yon valè negatif, epi lè aks X a negatif, ang anplasman an negatif.
5.4.3 Pwoblèm ang Yaw
Depi pa gen okenn referans, ang aktyèl absoli Yaw la pa ka kalkile, nou ka sèlman jwenn varyasyon Yaw, sètadi vitès angilè GYR_Z. Natirèlman, nou ka sèvi ak metòd GYR_Z entegral pou kalkile ang Yaw aktyèl la (selon valè inisyal la), grasa presizyon mezi, valè kalkile a se derive, li konplètman san sans apre yon peryòd de tan. Sepandan, nan pifò aplikasyon yo, tankou UAV, sèlman GRY_Z obligatwa.
Si ou gen jwenn ang absoli Yaw, Lè sa a, chwazi MPU9250, yon chip swiv mouvman 9-aks, li ka bay konpa 3-aks done adisyonèl, pou nou ka kalkile ang Yaw la dapre direksyon jaden mayetik latè a, metòd espesifik la pa mansyone isit la.
5.5 Pwosesis done ak aplikasyon
MPU6050 chip bay done ak yon bri grav, lè chip la ap trete nan yon eta estatik, done yo ka balanse plis pase 2%. Anplis de bri a, toujou egziste lòt konpanse, sa vle di, done yo pa balanse alantou pwen travay la estatik, kidonk konpanse done yo ta dwe kalibre premyèman, ak Lè sa a, elimine bri a pa algorithm filtraj. Efè a nan filtè Kalman se san dout pi bon an pou done ak yon gwo kantite bri. Isit la nou pa konsidere detay algoritmik, ou ka fè referans a http://www.starlino.com/imu_guide.html.
5.5.1 Eksperyans 3 imu_kalman jwenn Roll and Pitch Objektif la se montre eta mouvman 3D mpu6050 a an tan reyèl lè w li mpu6050 la, epi transmèt done akselerasyon an tan reyèl ACCEL_X, ACCEL_Y, ACCEL_Z ak done gyro GYRO_X, GYRO_Y. , ak GYRO_Z nan pwogram pwosesis la.
5.5.2 Kòd Eksperyans Arduino kòd eksperyans "MotionTrackLessonmpu6050mpu6050.ino" ka jwenn woule ak anplasman Rezilta kouri se jan sa a:
33
Fè ou plezi ideyal
Apre w fin telechaje pwogram nan sou tablo kontwòl prensipal Arduino NANO, louvri pwogram Processing "MotionTrackProcessing_demompu6050mpu6050.pde"
ak lojisyèl Processing (adrès telechaje https://www.processing.org). Remake byen ke nimewo ki nan "[]" se pa nimewo pò Arduino NANO, men nimewo seri pò kominikasyon an. Ou bezwen louvri manadjè a aparèy nan òdinatè a view nimewo seri a. Pou egzanpample, ekspozisyon mwen an se COM1, ak pò a seri yo itilize pou pwosesis nou an. Li kòmanse ak enskripsyon an 0. Se konsa, mwen chanje valè a nan "[ ]" nan pwogram prensipal la Processing a 0. Yon fwa chanjman yo fini, klike sou Run Sketch pou kouri Processing..
34
Fè ou plezi ideyal
35
Fè ou plezi ideyal
enpòte pwosesis.serial.*;
Serial myPort; // serila pò numble
float [] RwEst = float nouvo [3]; byte [] inBuffer = nouvo byte [100];
Font PFont; antyè final la VIEW_GWOSÈ_X = 1080,VIEW_GWOSÈ_Y = 720;
konfigirasyon anile () {
gwosè (1080, 720, P3D); myPort = nouvo Serial (sa a, Serial.list () [0], 9600); // myPort = nouvo Serial (sa a, "/dev/ttyUSB0", 9600); // chaje Font CourierNew tip /date font = loadFont(“CourierNewPSMT-32.vlw”); }
void readSensors () { if (myPort.available () > 0) { if (myPort.readBytesUntil ('n', inBuffer) > 0) { String inputString = nouvo String (inBuffer); String [] inputStringArr = divize (inputString,','); RwEst[0] = flote(inputStringArr[0]); RwEst[1] = float(inputStringArr[1]); RwEst[2] = float(inputStringArr[2]); } }
}
36
Fè ou plezi ideyal
void buildBoxShape () { // bwat (60, 10, 40); noStroke(); beginShape(QUADS);
//Z+ ranpli (#00ff00); somè (-30, -5, 20); somè (30, -5, 20); somè (30, 5, 20); somè (-30, 5, 20);
//Zfill(#0000ff); somè (-30, -5, -20); somè (30, -5, -20); somè (30, 5, -20); somè (-30, 5, -20);
//Xfill(#ff0000); somè (-30, -5, -20); somè (-30, -5, 20); somè (-30, 5, 20); somè (-30, 5, -20);
//X+ ranpli (#ffff00); somè (30, -5, -20); somè (30, -5, 20); somè (30, 5, 20); somè (30, 5, -20);
//Yfill(#ff00ff); somè (-30, -5, -20); somè (30, -5, -20); somè (30, -5, 20); somè (-30, -5, 20);
37
Fè ou plezi ideyal
//Y+ ranpli (#00ffff); somè (-30, 5, -20); somè (30, 5, -20); somè (30, 5, 20); somè (-30, 5, 20);
endShape(); }
void drawCube () { pushMatrix (); // nòmalize3DVec (RwEst); tradui (300, 450, 0); echèl (4, 4, 4); rotateX(HALF_PI * -RwEst[1]); //rotateY(HALF_PI * -0.5); vireZ(HALF_PI * -RwEst[0]); buildBoxShape(); popMatrix();
}
void trase() { // getInclination(); readSensors(); background (#214565); ranpli (#ffffff); textFont(font, 20); text(“RwEst:n” + RwEst[0] + “n” + RwEst[1] + “n” + RwEst[2], 220, 180); // montre aks pushMatrix(); tradui (450, 250, 0); konjesyon serebral (#ffffff); // echèl (100, 100, 100); liy (0, 0, 0, 100, 0, 0); liy (0, 0, 0, 0, -100, 0); liy (0, 0, 0, 0, 0, 100); liy (0, 0, 0, -RwEst[0], RwEst[1], RwEst[2]); popMatrix(); drawCube();
} 38
Fè ou plezi ideyal
Nou ka wè rezilta kouri nou yo jan sa a:
Figi 19: Pwosesis rann prezantasyon yo
Prensip kontwòl mouvman swiv
Atravè akizisyon done anvan mpu6050 pou jwenn ang woulo liv la ak anplasman, nou etabli korespondans sa a. Kontwole objè ki pi ba machin k ap deplase: Nou ka kontwole nenpòt objè machin ki pi ba lè nou jwenn vitès la ak direksyon atravè mpu6050.
Lè w li mpu6050 an tan reyèl verifye akselerasyon ACCEL_X, ACCEL_Y, ACCEL_Z done ak done jiroskop GYRO_X, GYRO_Y, GYRO_Z yo transmèt nan fonksyon pwosesis quaternion, pwogram nan montre eta ang roulo ak Pitch nan mpu6050 an tan reyèl.
6.1 Kous direksyon kowòdone modèl ang
Yo nan lòd yo fasilite kontwòl machin nan, kounye a nou etabli modèl sa a nan direksyon motè a ak ang kowòdone.
39
Fè ou plezi ideyal
Figi 20: Kowòdone ang direksyon kous Jan yo montre pi wo a, nou defini devan machin nan kòm 90 degre, 270 degre dèyè, 180 degre sou bò dwat, ak 0/360 degre sou bò gòch la. 0 ~ 90 kanpe pou direksyon devan dwat. 90 ~ 180 kanpe pou devan gòch 180 ~ 270 pou dèyè a gòch ak 270 ~ 360 pou dèyè a dwat. Menm jan an tou, nou enstale mpu6050 a sou gan espò yo. Nou bati modèl mouvman sa a.
40
Fè ou plezi ideyal
Figi 21: Kowòdone direksyon gan espò yo Atravè modèl done Roll-pitch-yaw 5.5.2, gan espò yo vire toutotou figi Y (vire do men an goch ak adwat) epi nou jwenn ang Pitch la. Wotasyon alantou X (baskile retounen ak lide) nou jwenn ang woulo liv la. Kounye a ke nou gen yon konpreyansyon sou kowòdone yo nan ang atitid la ak kowòdone yo angilè nan machin nan, nou pral kounye a dekri li nan sèn nan. Lè gan espò yo panche nan direksyon dwat devan, jan yo montre nan figi ki anba a, si yo nan sistèm kowòdone yo, yo enkline nan zòn nan 0 a 90 degre.
41
Fè ou plezi ideyal
Figi 22: Dyagram chema gan espò yo panche nan direksyon dwat devan Kwen ki koresponn ak machin ki anba a se jan sa a.
42
Fè ou plezi ideyal
Figi 23: Dyagram chema mouvman devan machin lan Atravè atitid gan espò yo, nou bezwen kalkile degre ang mouvman machin ki pi ba a. Se konsa, nou bati modèl twa dimansyon sa a
Figi 24: Dyagram modèl estereo ki baze sou gan espò Pou konvenyans nan reprezantasyon, direksyon pozitif aks Z nan sistèm kowòdone anwo a (devan gan k ap deplase a) anlè, ak direksyon aks X pozitif (bò dwat la nan gan an). gan espò) se sou bò dwat la. Nan eta inisyal la, gan espò yo rete menm levye ak XY . Nan moman sa a, direksyon gan espò yo panche reprezante pa OB, ak ang Roll (nwa) se ang ki genyen ant vektè akselerasyon OB ak pwojeksyon li (x, 0, z) sou avyon XZ la, ak ang lan. Ang anplasman (koulè wouj violèt) se pwojeksyon li sou plan YZ la ( Ang ant 0, y, ak z). Koulè ble a se degre nan ki gan espò yo pwojte pwojeksyon an (x, o, y) sou avyon XY la. Nou itilize ang sa a pou kontwole ang volan machin ki pi ba a. Nou deja gen Roll and Pitch atravè eksperyans 5.6.1 anvan an. Koulye a, nou kalkile degre nan fòmil sa a. Nan figi a BA OA AB OB sin(Pitch) BD OD BD OBsin(Roll)
43
Fè ou plezi ideyal
tandegree FE BD sin(Roll) Woule
OE AB sin(Pitch) Pitch deg ree arctan( Roll )
Anplasman Pi wo a nou gen ang kosinen volan an, nou bezwen miltipliye koyefisyan an nan degre kowòdone. 180 57.3 Analiz ki anwo a se sèlman yon analiz ang lè yo panche tankou anwo adwat la. Menm jan an tou, lè gan espò yo panche sou devan gòch la
Figi 25: Dyagram chema gan espò yo ap panche sou direksyon goch devan deg ree arctan( Pitch)*57.3 900
Woule Menm jan an tou, lè gan espò yo panche sou bò gòch la
44
Fè ou plezi ideyal
Figi 26: Dyagram chema direksyon dèyè bò gòch gan espò yo deg ree arctan( Roll )*57.3 1800
Anplasman Menm jan an tou, lè gan espò yo panche sou bò dwat ki pi ba a
Figi 27: Dyagram chema nan direksyon dèyè dwat gan espò yo
45
Fè ou plezi ideyal
deg ree arctan(Pitch)*57.3 2700 Woule
Koulye a, kite a pale sou ki jan yo kontwole vitès la nan machin nan. Soti nan figi ki anwo a nou ka wè ke pou gan espò yo nan mpu6050 la ak ang lan enklinezon avyon XY avyon an, nou itilize plan sa a pou reprezante
B'OB se ang enklinezon an parapò ak eta inisyal la lè l sèvi avèk degre enklinezon sa a pou kontwole vitès la.
machin nan.
B'OB=OBF arcsin( OF ) arcsin( OE2 EF 2 )
OB
OB
EF=BD OE=AB
OBF arcsin( sin2 (Roll) sin2 (Pitch)) arcsin( Roll2 Pitch2 )
Pi wo a se ang arc. Nou bezwen tou miltipliye koyefisyan an. Ranje ang sa a se (0 ~ 90). Nou dirèkteman itilize ang sa a kòm vitès kontwòl machin nan.
46
Fè ou plezi ideyal
float CalculateSpeed(flote woule, flote anplasman) {
flote inclination = asin(sqrt(woule*woule +pitch*pitch))*Rad; enklinasyon retounen; }
Void HandInclination (anile)
{
konte antye estatik = 0;
static int SendSpeed = 0, SendDegree = 0;
konte++;
vitès = Kalkile Vitès (woule, anplasman);
si ((-0.2 <= anplasman) && (anplasman <= 0.2) && (-0.2 <= woule) && (woule <= 0.2)) {
degre = 90;
SendSpeed = 0;
SendDegree += 90;
} lòt moun si (ton < 0 && woule < 0) {
degre = atan(woule/pitch)*Rad;
SendDegree += ((unsigned int)(degre/10))*10;
} lòt moun si (ton > 0 && woule < 0) {
degre = atan(-pitch/woule)*Rad + 90;
SendDegree += ((unsigned int)(degre/10))*10;
} lòt moun si (ton > 0 && woule > 0) {
degre = atan(woule/pitch)*Rad + 180;
} sinon si (ton < 0 && woule > 0) {
degre = atan(-pitch/woule)*Rad + 270;
SendDegree += ((unsigned int)(degre/10))*10;
} lòt bagay {
degre = 90;
SendSpeed = 0;
SendDegree = 90;
}
SendDegree = (int)(vitès/10)*10;
si (degre < 30 || degre > 330) {
SendDegree = 0;
}
si (konte >= 3) {
konte = 0;
Send_Direction(SendDegree/3);
Send_Speed(SendSpeed);
SendDegree = 0;
SendSpeed = 0;
4 7
}
Fè ou plezi ideyal
Pwotokòl
Sèvi ak Bluetooth kontwole machin nan, an reyalite se lè l sèvi avèk app android a voye enstriksyon nan Arduino la
pò seri atravè Bluetooth pou kontwole machin nan. Depi li enplike kominikasyon san fil, youn nan esansyèl la
pwoblèm se kominikasyon ki genyen ant de aparèy yo. Men, pa gen okenn "lang" komen ant yo,
kidonk li nesesè pou konsepsyon pwotokòl kominikasyon pou asire entèraksyon pafè ant android ak
Arduino. Pwosesis prensipal la se: Android a rekonèt kòmandman an kontwòl ak pake li nan la
pake ki koresponn, Lè sa a, voye nan modil la Bluetooth (JDY-16), JDY-16 te resevwa done epi voye bay
Arduino, Lè sa a, Arduino analize done yo Lè sa a, fè aksyon ki koresponn lan. Fòma dat ki la
Android voye kòm pi ba a, sitou gen 8 jaden.
Pwotokòl Done Longè Aparèy Kalite Aparèy Fonksyon Kontwòl Tcheke Pwotokòl
Header
Kòd Adrès Done Sòm Fin Kòd
Nan 8 jaden ki anwo yo, nou itilize yon kò estriktirèl pou reprezante.
estrikti typedef {
unsigned char start_code; unsigned char len; kalite char ki pa siyen; unsigned char addr; unsigned kout fonksyon int; char * done ki pa siyen; unsigned kout int sòm; unsigned char end_code; }ST_pwotokòl;
// 8bit 0xAA
// 16 bit // n bit // tcheke sòm // 8bit 0x55
"Tèt Pwotokòl" vle di kòmansman pake a, tankou deziyasyon inifòm 0xAA. "Lontè done" vle di eksepte longè done ki valab nan kòd kòmansman ak fen done yo. "Kalite aparèy" vle di ki kalite ekipman aparèy "Adrès aparèy" vle di adrès ki mete pou kontwòl "Kod fonksyon" vle di ki kalite fonksyon ekipman ki bezwen kontwole, kalite fonksyon nou sipòte kounye a jan sa a.
48
Fè ou plezi ideyal
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 = 9, E_VERSION =, E_VERSION = 10, 11 }E_CONTOROL_FUNC ;
"Done" vle di valè kontwòl espesifik yon machin, tankou vitès, ang. "Checksum" se rezilta done diferan oswa kalkile enstriksyon kontwòl la. "Kod fen pwotokòl" se pati nan fen sak done lè w ap resevwa done sa yo, sa vle di ke yo te voye pake done a, epi li pare pou resevwa pwochen pake done a, isit la nou espesifye li kòm 0x55. Pou egzanpample, yon pake konplè ka tankou "AA 070101065000 5F55", nan ki: "07" se Transmisyon Done Longè 7 bytes. "06" se "kalite aparèy", tankou motè, dirije, buzzer ak sou sa. 06 isit la refere a vitès transmisyon an, ak 05 la refere a direksyon transmisyon an. "50 (oswa 0050)" se done yo kontwole, 0x50 nan egzadesimal se 80 lè konvèti nan binè, ki vle di valè vitès la se 80. Si done yo se 05, sa vle di direksyon an kontwole, se sa ki 80 degre (pi devan). "005F" se yon sòm chèk ki se 0x07+0x01+0x01+0x06+0x50=0x5F. "55" se kòd fen Pwotokòl la, ki endike fen transfè done.
49
Fè ou plezi ideyal
Eksperyans konplè
8.1 Nrf24L01 san fil kontwòl
8.1.1 Kontwòl jès Hummer-bot machin entelijan Konekte dapre liy koneksyon chapit anvan an, Lè sa a, konekte batri a sèk 9v ak la.
Arduino NANO, epi telechaje pwogram nan. Apre pouvwa-sou, modil la Nrf24L01 voye done nan Hummer-Bot Nrf24L01 a, ak Lè sa a, ajiste pozisyon nan gan an kontwole machin nan milti-fonksyon Hummer-Bot, se konsa machin nan kontwole pa gan espò yo fèt!
50
Fè ou plezi ideyal
Figi 28: Kontwòl jès Hummer-bot Lyen pwogram nan òdinatè ki pi ba a: https://github.com/keywish/keywish-hummer-bot-Hummer-Bot-Multi-function lyen achte machinAchte sou Amazon
https://www.amazon.com/dp/B078WM15DK Kontwòl videyo demo Gesture-MotionTrackingvideoControl_Hunner-bot.mp4 8.1.2 Gesture Control Beetle-bot Smart Machin
Figi 29: Kontwòl jès Beetle-bot Enfòmasyon sou Beetle-bot https://github.com/keywish/keywish-beetle-bot
51
Fè ou plezi ideyal
8.2 Bluetooth kontwòl mòd kominikasyon
Konekte dapre kab Bluetooth la, Lè sa a, konekte batri sèk 9v la nan Arduino NANO a epi telechaje pwogram nan (MotionTrackLessonMotionTrack_Bluetooth MotionTrack_Bluetooth.ino). Remake byen ke ou bezwen modifye adrès MAC Bluetooth nan òdinatè ki pi ba a. Apre pouvwa-sou, gan espò yo otomatikman konekte nan modil Bluetooth machin nan.
52
Fè ou plezi ideyal
8.2.1 Kontwòl jès Aurora-Racing
Figi 30: Kontwòl jès Enfòmasyon sou pwodwi Aurora-Racing: https://github.com/keywish/Aurora-Racing Pwodiksyon videyo: giteeMotionTrackvideo Control_RacingCar.mp4
53
Fè ou plezi ideyal
8.2.2 Kontwòl jès Panther-tank
Figi 31: Kontwòl jès Pather-tank Pou materyèl pwodiksyon Panther-tank, tanpri al gade https://github.com/keywish/keywish-panther-tank
54
Fè ou plezi ideyal
8.2.3 Machin balans kontwòl jès
Figi 32: Kontwòl jès Mini balans-machin Pou enfòmasyon pwodwi Balans, tanpri al gade https://github.com/keywish/mini-balance-car
55
Dokiman / Resous
![]() |
Makefun MPU6050 Arduino Jès Mouvman Suivi [pdfManyèl Enstriksyon MPU6050 Modil, JDY-16 Modil Bluetooth, NRF24L01 Modil, MPU6050 Arduino Jès Mouvman Suivi, MPU6050, Arduino Jès Mouvman Suivi, Jès Mouvman Suivi, Suivi Mouvman, Suivi |