Makefun-လိုဂို

Makefun MPU6050 Arduino Gesture Motion Tracking

Makefun-MPU6050-Arduino-Gesture-Motion-ခြေရာခံခြင်း-ထုတ်ကုန်

ထုတ်ကုန်အချက်အလက်

သတ်မှတ်ချက်များ

  • ထုတ်ကုန်အမည်- Gesture-MotionTracking
  • ဗားရှင်း- V.1.2
  • Github Repository- Github လင့်ခ်

စက်ပစ္စည်းစာရင်း မိတ်ဆက်

Gesture-MotionTracking အသုံးပြုရန် လိုအပ်သော ကိရိယာများမှာ-

  • MPU6050 မော်ဂျူး
  • JDY-16 ဘလူးတုသ် မော်ဂျူး
  • NRF24L01+ မော်ဂျူး
  • Arduino NANO Main Control Board
  • မီနီပေါင်မုန့်ဘုတ်
  • မှာပေါ့။
  • Male to Female DuPont လိုင်း
  • ဘက်ထရီ

ထုတ်ကုန်အသုံးပြုမှု ညွှန်ကြားချက်များ

NANO ပရိုဆက်ဆာမိတ်ဆက်

လျှပ်စစ်ဓာတ်အားထုတ်ပေးသောကိရိယာ

  • Arduino Nano ကို mini-B USB interface၊ vin ချိတ်ဆက်မှုမှတစ်ဆင့် ပြင်ပ 7 ~ 12V DC ပါဝါထောက်ပံ့မှုဖြင့် ပါဝါသုံးနိုင်သည်။

ဉာဏ်

  • နာနိုပေါ်ရှိ ATmega168/ATmega328 တွင် 16KB/32KB Flash memory၊ 1KB/2KB SRAM နှင့် 0.5KB/1KB EEPROM ရှိသည်။

Input နှင့် Output

  • Nano တွင် ဒစ်ဂျစ်တယ် I/O အပေါက် 14 ခု၊ analog inputs 6 ခုနှင့် serial communication၊ interrupts၊ PWM outputs၊ SPI အစရှိသည့် လုပ်ဆောင်ချက်အမျိုးမျိုးအတွက် သီးခြား pins များ ပါရှိသည်။

ဆက်သွယ်ရေးအင်တာဖေ့စ်

  • Nano သည် UART မှတစ်ဆင့် နံပါတ်စဉ်ဆက်သွယ်မှုကို ပံ့ပိုးထားပြီး SPI နှင့် I2C ဘတ်စ်ကားများ တွဲဖက်အသုံးပြုနိုင်သည့် အင်တာဖေ့စ်များပါရှိသည်။

ဒေါင်းလုဒ်လုပ်သူ

  • Nano ကို Arduino software နှင့် bootloader ပရိုဂရမ်ကို အသုံးပြု၍ ပရိုဂရမ်ပြုလုပ်နိုင်သည်။ ပရိုဂရမ်များကို ICSP ခေါင်းစီးမှတစ်ဆင့် ဒေါင်းလုဒ်လုပ်နိုင်သည်။

အာရုံ

  • Nano တွင် လူကိုယ်တိုင်ဝင်ရောက်စွက်ဖက်မှုမရှိဘဲ ဆော့ဖ်ဝဲလ်ပြန်လည်သတ်မှတ်ရာတွင် လွယ်ကူစေရန် အလိုအလျောက်ပြန်လည်သတ်မှတ်ခြင်းဒီဇိုင်းကို ပါရှိသည်။

အမြဲမေးလေ့ရှိသောမေးခွန်းများ

အမေးများသောမေးခွန်းများ

  • Q: Gesture-MotionTracking အတွက် နောက်ဆုံးထွက်မွမ်းမံမှုများ သို့မဟုတ် နောက်ထပ်အရင်းအမြစ်များကို ကျွန်ုပ်ဘယ်မှာ ရှာတွေ့နိုင်မည်နည်း။
    • A: အပ်ဒိတ်များနှင့် အရင်းအမြစ်များအတွက် ပေးထားသည့် လင့်ခ်တွင် တရားဝင် Github သိုလှောင်မှုကို သင်စစ်ဆေးနိုင်သည်။
  • Q: Arduino Nano ကို ဘယ်လိုအားသွင်းရမလဲ။
    • A: Mini-B USB မျက်နှာပြင် သို့မဟုတ် vin pin မှတစ်ဆင့် ချိတ်ဆက်ထားသော ပြင်ပ 7~12V DC ပါဝါထောက်ပံ့မှုကို အသုံးပြု၍ Nano အား ပါဝါပေးနိုင်သည်။

“`

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

1. စက်ပစ္စည်းစာရင်း မိတ်ဆက်
လိုအပ်သောပစ္စည်းများကို အောက်ပါဇယားတွင် ပြထားသည်။ MPU6050 မော်ဂျူး
JDY-16 ဘလူးတုသ် မော်ဂျူး NRF24L01+ မော်ဂျူး
Arduino NANO Main Control Board အသေးစား ပေါင်မုန့်ဘုတ် လက်အိတ်
Male to Female DuPont လိုင်းဘက်ထရီ

၁ ၁ ၂ ၁ ၂ ၁ ပေါင်းများစွာ ၁

ပုံ 1- စက်ပစ္စည်းစာရင်း
4

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
2. NANO ပရိုဆက်ဆာ မိတ်ဆက်
Arduino Nano microprocessor သည် USB-mini interface ပါရှိသော ATmega328 (Nano3.0) ဖြစ်ပြီး၊ ဒစ်ဂျစ်တယ် အဝင်/အထွက် ပင်နံပါတ် 14 ခု (6 ခုကို PWM အထွက်အဖြစ်သုံးနိုင်သည်)၊ 8 analog inputs နှင့် 16 MHz ceramic resonator၊ 1 mini -B USB ချိတ်ဆက်မှု၊ ICSP ခေါင်းစီးနှင့် ပြန်လည်သတ်မှတ်ရန် ခလုတ်။ ပရိုဆက်ဆာသည် ATmega328 အလုပ်လုပ်သည့် voltage 5v Input voltage (အကြံပြုထားသည်) 7-12v Input voltage (အကွာအဝေး) 6-20v ဒစ်ဂျစ်တယ် IO ပင်နံပါတ် 14 (6 ခုကို PWM အထွက်အဖြစ် သုံးနိုင်သည်) အင်နာလော့ရိုက်ထည့်သွင်းမှု ပင်နံပါတ် 6 IO ပင်နံပါတ် DC 40 mA Flash Memory 16 သို့မဟုတ် 32 KB (စတင်အသုံးပြုသူအတွက် 2 KB) SRAM 1KB သို့မဟုတ် 2KB EEPROM 0.5 KB သို့မဟုတ် 1KB ATmega328 CH340 USB to serial port ချစ်ပ်နာရီ 16 MHz
2.1 Power Supply
Arduino Nano ပါဝါထောက်ပံ့မှုမုဒ်- mini-B USB ကြားခံပါဝါထောက်ပံ့မှုနှင့် ပြင်ပ vin ချိတ်ဆက်မှု 7~12V ပြင်ပ DC ပါဝါထောက်ပံ့မှု
2.2 အမှတ်တရ
ATmega168/ATmega328 တွင် 16KB ကို Bootloader အတွက် အသုံးပြုသည့် on-chip 32KB/2KB Flash ပါဝင်သည်။ 1KB/2KB SRAM နှင့် 0.5KB/1KB EEPROM တို့လည်း ရှိပါသည်။
2.3 အဝင်နှင့်အထွက်
ဒစ်ဂျစ်တယ် အဝင်နှင့် အထွက်ပေါက် ၁၄ ခု- အလုပ်လုပ်သည့် အတွဲtage သည် 5V ဖြစ်ပြီး ချန်နယ်တစ်ခုစီသည် အမြင့်ဆုံး လက်ရှိ 40mA ကို အထွက်နှင့် ဝင်ရောက်နိုင်သည်။ ချန်နယ်တစ်ခုစီတွင် 20-50K ohm အတွင်းပိုင်း ဆွဲငင်အား ခုခံမှု (မူရင်းဖြင့် မချိတ်ဆက်ပါ)။ ထို့အပြင်၊ အချို့ pins များတွင် သီးခြားလုပ်ဆောင်ချက်များရှိသည်။
အမှတ်စဉ်အချက်ပြ RX (0), TX (1)- ၎င်းသည် TTL vol ဖြင့် အမှတ်စဉ် port လက်ခံအချက်ပြမှုကို ပေးဆောင်သည်။tagFT232Rl ၏ သက်ဆိုင်ရာ pin နှင့် ချိတ်ဆက်ထားသော e အဆင့်။
ပြင်ပနှောက်ယှက်ခြင်း (နံပါတ် 2 နှင့် နံပါတ် 3)- အစပျိုးခြင်း အစွန်းထွက်ခြင်း၊ ပြုတ်ကျသည့်အစွန်း သို့မဟုတ် တစ်ပြိုင်နက်တည်း ဖြတ်တောက်ခြင်းဟု သတ်မှတ်နိုင်သည့် အနှောင့်အယှက်ပင်ကို အစပျိုးပါ။
Pulse Width Modulation PWM (3, 5, 6, 9, 10, 11): 6 ချန်နယ်၊ 8-bit PWM အထွက်များကို ပေးသည်။
5

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
SPI10(SS)11(MOSI)12(MISO)13(SCK):SPI ဆက်သွယ်ရေး အင်တာဖေ့စ်။ LED (နံပါတ် 13): Arduino ကို LED ၏ သီးသန့် interface ကို စမ်းသပ်ရန် အထူးအသုံးပြုပါသည်။ အထွက်နှုန်းက ဘယ်အချိန်လဲ။
မြင့်မားသော၊ LED သည်အလင်းဖြစ်သည်။ အထွက်နည်းသောအခါ LED ပိတ်ထားသည်။ 6 analog inputs သည် A0 မှ A5 ဖြစ်သည်- ချန်နယ်တစ်ခုစီတွင် 10 bits resolution ရှိသည် (ဆိုလိုသည်မှာ၊ input သည် 1024 ကွဲပြားသည်။
တန်ဖိုးများ)၊ ပုံသေထည့်သွင်းသည့်အချက်ပြမှုအပိုင်းသည် 0 မှ 5V ဖြစ်ပြီး၊ ထည့်သွင်းမှုအပေါ်ပိုင်းကန့်သတ်ချက်ကို AREF မှ ချိန်ညှိနိုင်သည်။ ထို့အပြင်၊ အချို့ pins များတွင် သီးခြားလုပ်ဆောင်ချက်များရှိသည်။ TWI အင်တာဖေ့စ် (SDA A4 နှင့် SCL A5): ဆက်သွယ်ရေးမျက်နှာပြင်ကိုပံ့ပိုးသည် (I2C ဘတ်စ်ကားနှင့်သဟဇာတ) ။ AREF: ရည်ညွှန်းချက်tage ၏ analog input signal ကို။ အချက်ပြမှုနည်းသောအခါ မိုက်ခရိုကွန်ထရိုလာ ချစ်ပ်ကို ပြန်လည်သတ်မှတ်သည်။
2.4 ဆက်သွယ်ရေး အင်တာဖေ့စ်
အမှတ်စဉ် ပို့တ်- ATmega328 ၏ built-in UART သည် ဒစ်ဂျစ်တယ် ပို့တ် 0 (RX) နှင့် 1 (TX) မှတဆင့် ပြင်ပ အမှတ်စဉ် ပို့တ်နှင့် ဆက်သွယ်နိုင်သည်။
2.5 ဒေါင်းလုဒ်လုပ်သူ
Arduino Nano ရှိ MCU တွင် bootloader ပရိုဂရမ်တစ်ခုပါရှိသည်၊ ထို့ကြောင့် သင်သည် ပရိုဂရမ်ကို Arduino software မှ တိုက်ရိုက်ဒေါင်းလုဒ်လုပ်နိုင်ပါသည်။ Nano ရှိ ICSP ခေါင်းစီးမှတဆင့် ပရိုဂရမ်ကို MCU သို့ တိုက်ရိုက်ဒေါင်းလုဒ်လုပ်နိုင်သည်။
2.6 အာရုံစူးစိုက်မှု
Arduino Nano သည် host မှပြန်လည်သတ်မှတ်နိုင်သည့်အလိုအလျောက်ပြန်လည်သတ်မှတ်သည့်ဒီဇိုင်းကိုပေးသည်။ ဤနည်းအားဖြင့် ဆော့ဖ်ဝဲလ်အား ပြန်လည်သတ်မှတ်ရန် ခလုတ်ကို မနှိပ်ဘဲ ပရိုဂရမ်ရှိ Arduino ဆော့ဖ်ဝဲမှ Nano သို့ အလိုအလျောက် ပြန်လည်သတ်မှတ်နိုင်သည်။

Blumodule မိတ်ဆက်

Blumodule မိတ်ဆက်JDY-16

3.1 အင်္ဂါရပ်များ
BLE သည် မြန်နှုန်းမြင့် ဖောက်ထွင်းမြင်ရသည့် ဂီယာကို 8K Bytes နှုန်းဖြင့် ဆက်သွယ်မှုကို ပံ့ပိုးပေးသည်။ byte ကန့်သတ်ချက်မရှိဘဲ ဒေတာပေးပို့ခြင်းနှင့် လက်ခံခြင်း၊ 115200 baud နှုန်းကို စဉ်ဆက်မပြတ် ဒေတာပေးပို့ခြင်းနှင့် လက်ခံခြင်းကို ပံ့ပိုးပါ။ အလုပ်မုဒ် 3 ခုကို ပံ့ပိုးပါ (AT+STARTEN ညွှန်ကြားချက်လုပ်ဆောင်ချက်ကို ကြည့်ပါ)။ ပံ့ပိုးမှု (serial port၊ IO၊ APP) အိပ်စက်ခြင်း နိုးထခြင်း ပံ့ပိုးမှု WeChat Airsync၊ WeChat applet နှင့် APP ဆက်သွယ်မှု။ 4 ချန်နယ် IO အပေါက်ထိန်းချုပ်မှုနှင့် တိကျသော RTC နာရီကို ပံ့ပိုးပါ။ PWM လုပ်ဆောင်ချက်ကို ပံ့ပိုးပေးသည် (UART၊ IIC၊ APP စသည်ဖြင့်) ထိန်းချုပ်နိုင်သည်။ UART နှင့် IIC ဆက်သွယ်ရေးမုဒ်ကို ပံ့ပိုးပေးသည်၊ မူရင်း UART ဆက်သွယ်မှုတွင်ရှိသည်။ iBeacon မုဒ် (WeChat shake protocol နှင့် Apple iBeacon ပရိုတိုကောကို ပံ့ပိုးသည်)။
6

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပွင့်လင်းမြင်သာသော ထုတ်လွှင့်မှုမုဒ်ကို လက်ခံဆောင်ရွက်ပေးသည် (အပလီကေးရှင်း မော်ဂျူးများ၊ လက်ခံဆောင်ရွက်ပေးသူနှင့် ကျွန်ဆက်သွယ်ရေးကြားတွင် ဒေတာပေးပို့ခြင်း)။
ကြိုးမဲ့ဆက်သွယ်ရေး မော်ဂျူးပုံစံ ဖွဲ့စည်းမှု

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

ပုံ 2- JDY-16 module ရုပ်ပိုင်းဆိုင်ရာမြေပုံ (1) Nano နှင့် JDY-16 ကြိုး၊

JDY-16 မော်ဂျူး

Arduino NANO

VCC

5V

GND

GND

RXD

D2

TXD

D3

STAT

NC

PWRC

NC

MotionTrackJDY-16AT_CMD AT_CMD.ino ပရိုဂရမ်ကို ဒေါင်းလုဒ်လုပ်ပါ။

(၂) ဖွဲ့စည်းမှုလိုအပ်ချက်များ-

JDY-16 Bluetooth module နှစ်ခု၏ master-slave binding ကို အကောင်အထည်ဖော်ပါ။

3.2 လည်ပတ်မှုအဆင့်များ

1. Nano နှင့် JDY-16 module များကို DuPont လိုင်းဖြင့် ချိတ်ဆက်ပါ။ 2. AT အမိန့်ပေးမုဒ်ကို ထည့်သွင်းပြီး ဒေါင်းလုဒ်ဆွဲသူကို ကွန်ပျူတာနှင့် ချိတ်ဆက်ပြီး အမှတ်စဉ် ပို့တ်လက်ထောက်ကို ဖွင့်ပါ။ baud နှုန်းကို 9600၊ ဒေတာဘစ်ကို 8 ဘစ်၊ ရပ်တန့်ဘစ်မှ 1ဘစ်၊ နှင့် ပါရီဘစ်ဟူ၍ သတ်မှတ်ပါ။

7

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
စမ်းသပ်ဆက်သွယ်မှု- ပို့ရန်- AT Back- အိုကေ
ပုံ 3- AT Command Diagram 3 ပေးပို့ရန်- AT+HOSTEN1rn ————– Bluetooth ကို ပင်မမုဒ် Back အဖြစ် သတ်မှတ်ပါ- OK Back- OK
8

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 4- ဟို့မုဒ်ကို သတ်မှတ်ခြင်း 4. ပတ်ဝန်းကျင်ရှိ JDY-16 Bluetooth ကို စကင်န်ဖတ်ပါ- 1. Slave ထုတ်လွှင့်မှု- AT+SCANrn ————— ကျွန်၏ကိုယ်ပိုင်လိပ်စာကို မေးမြန်းရန် နောက်ကျော- OK +DEV:1=3CA5090A160F၊ -62၊ JDY-16 +STOP-စကင်န်ဖတ်ပါ။
ပုံ 5- အရံဘလူးတုသ်ကိရိယာများကို စုံစမ်းမေးမြန်းခြင်း 5. Bluetooth ချိတ်ဆက်ပါ။
လက်ခံဆောင်ရွက်ပေးသူ ပေးပို့သည်- AT+CONN3CA5090A160Frn ————— Host binding slave လိပ်စာ နောက်သို့- OK ပါဝါထောက်ပံ့မှုသို့ ချိတ်ဆက်ထားပြီး၊ Bluetooth နှစ်ခုကို တစ်ခုနှင့်တစ်ခု ချိတ်ဆက်နိုင်ပြီး host Bluetooth မှတစ်ဆင့် ဒေတာပေးပို့နိုင်ပြီး၊ slave Bluetooth သည် တူညီသောဒေတာကို လက်ခံရရှိနိုင်ပါသည်။ သို့မဟုတ် master-slave Bluetooth ကို သတ်မှတ်ရန် ပြင်ဆင်ထားသော master-slave configuration လုပ်ငန်းစဉ်ကို တိုက်ရိုက် အစီအစဉ်ဆွဲနိုင်ပြီး၊ ထို့နောက် host ပရိုဂရမ်များသည် ချိတ်ဆက်မှုလုပ်ငန်းစဉ်နှင့် အလိုအလျောက်ချိတ်ဆက်သည်။ (လက်ရှိတွင် JDY-16 ၏ Bluetooth module တစ်ခုသာ အလိုအလျောက်ချိတ်ဆက်နိုင်သည်ကို သတိပြုပါ)
9

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
3.3 Nano နှင့် JDY-16 ၏ ချိတ်ဆက်မှုနည်းလမ်း
ပုံ 6- Nano နှင့် JDY-16 ချိတ်ဆက်မှု ပုံကြမ်း

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

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

NRF24L01 Wireless Module မိတ်ဆက်

NRF24L01 Wireless Module မိတ်ဆက်

nRF24L01+ မော်ဂျူးသည် nRF2.4L24 ချစ်ပ်ကိုအခြေခံ၍ Nordic မှတီထွင်ထားသော 01G ကြိုးမဲ့ဆက်သွယ်ရေး module တစ်ခုဖြစ်သည်။ FSK modulation ကို လက်ခံပြီး Nordic ၏ ကိုယ်ပိုင် Enhanced Short Burst protocol ကို ပေါင်းစပ်ပါ။ Pointto-point သို့မဟုတ် 1-to-6 ကြိုးမဲ့ဆက်သွယ်ရေးကို ရရှိနိုင်သည်။ ကြိုးမဲ့ဆက်သွယ်ရေးအမြန်နှုန်းသည် 2M (bps) အထိရောက်ရှိနိုင်သည်။ NRF24L01 တွင် လည်ပတ်မှုမုဒ် လေးခုပါရှိသည်- transceiver mode၊ configuration mode၊ idle mode နှင့် shutdown mode တို့ဖြစ်သည်။ ဤစမ်းသပ်မှုတွင်အသုံးပြုသည့် ရုပ်ပိုင်းဆိုင်ရာမြေပုံသည် ပုံ 7 ၏ဘယ်ဘက်တွင်ဖြစ်သည်။ Nrf24L01 ပြေစာ၏တည်ငြိမ်သောလက်ခံမှုအတွက်၊ ညာဘက်တွင်ပြထားသည့်အတိုင်း VCC နှင့် GUD အကြား 10uf capacitor ကိုချိတ်ဆက်ရန် အကြံပြုထားသည်။
ပုံ 7- Nrf24l01+ ရုပ်ပိုင်းဆိုင်ရာမြေပုံနှင့် ဂဟေပုံကားချပ်
4.1 Module အင်္ဂါရပ်များ
2.4GHz ၊ အရွယ်အစား 15x29mmmin ပါဝင်သည့် အင်တင်နာ အပါအဝင် ခြောက်လိုင်း ဒေတာ လက်ခံရရှိမှု ပံ့ပိုးမှု နည်းပါးသော ပမာဏtage- 1.93.6V ဒေတာလွှဲပြောင်းမှုနှုန်းကို ပံ့ပိုးပေးသည်- 1Mbps2Mbps လက်ခံရရှိချိန်တွင် ပါဝါသုံးစွဲမှုနည်းသော ဒီဇိုင်းအလုပ်လက်ရှိသည် 12.3mA၊ 11.3mA 0dBm ပါဝါ
ထုတ်လွှတ်မှု၊ ပါဝါချမုဒ်တွင် 900nA အလိုအလျောက် ပြန်လည်ထုတ်လွှင့်ခြင်း လုပ်ဆောင်ချက်၊ ပျောက်ဆုံးသွားသော ဒေတာပက်ကတ်များကို အလိုအလျောက် သိရှိခြင်းနှင့် ပြန်လည်ထုတ်လွှတ်ခြင်း၊
ပြန်လည်ပေးပို့ချိန်နှင့် ပြန်လည်ပေးပို့မှုအချိန်များကို ဆော့ဖ်ဝဲအလိုအလျောက်တုံ့ပြန်မှုလုပ်ဆောင်ချက်ဖြင့် ထိန်းချုပ်နိုင်ပြီး၊ မှန်ကန်သောဒေတာကို လက်ခံရရှိပြီးနောက်၊ မော်ဂျူးမှ အဖြေတစ်ခု အလိုအလျောက် ပေးပို့သည်။
အချက်ပြပါ၀င်သော ဟာ့ဒ်ဝဲ CRC အမှားရှာဖွေတွေ့ရှိခြင်းနှင့် point-to-multipoint ဆက်သွယ်ရေးလိပ်စာထိန်းချုပ်မှု NRF24L01 ချစ်ပ်အသေးစိတ်အချက်အလက်များကို ကျေးဇူးပြု၍ tonRF24L01 Datasheet.pdf ကို ကိုးကားပါ။
11

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပင်ထိုးအချက်အလက်

ပုံ 8- Nrf24L01 ပင်နံပါတ် အချက်အလက် ပုံကြမ်း

Pin သင်္ကေတ

လုပ်ဆောင်ချက်

ဦးတည်ချက်

၃ GND

GND

2

+5V

လျှပ်စစ်ဓာတ်အားထုတ်ပေးသောကိရိယာ

3

CE

အလုပ်မုဒ်တွင် လိုင်းကို ထိန်းချုပ်ပါ။

IN

4

CSN Chip သည် Signal, Low Level Working ကို ရွေးပါ။

IN

5

SCK

SPI နာရီ

IN

6 MOSI

SPI ထည့်သွင်းမှု

IN

7 MISO

SPI ထုတ်ပေးမှု

ထုတ်လိုက်

8

IPQ

Interrupt Output

ထွက်+

4.2 စမ်းသပ်မှုရည်ရွယ်ချက်
1. nRF24L01+module အကြောင်းနှင့် Arduino နှင့် မည်သို့ချိတ်ဆက်ရမည်ကို လေ့လာပါ။ 2. ဒေတာလက်ခံခြင်းနှင့် ပေးပို့ခြင်း အပြီးသတ်ရန် arduino နှင့် nRF24L01+ မော်ဂျူးကို အသုံးပြုပုံ။

4.3 ဤစမ်းသပ်မှုအတွက် လိုအပ်သော အစိတ်အပိုင်းများ
Arduino UNO R3 မားသားဘုတ် Arduino NANO Motherboard nRF24L01 Module*2 ဝိုင်ယာများစွာ
12

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
4.4 စမ်းသပ်မှုပုံစံဇယား

ပုံ 9- နာနို နှင့် Nrf24L01 ချိတ်ဆက်မှု ပုံကြမ်း

Arduino နှင့် NRF24L01 ချိတ်ဆက်မှုမုဒ်

arduino နာနို

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

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

13pin

5pin SCK

4.4 ပရိုဂရမ် နိယာမ
စတင်ခြင်းလုပ်ငန်းစဉ် 1 ပထမဦးစွာ၊ ထုတ်လွှင့်မုဒ်သို့ nRF24L01 ကို configure လုပ်ပါ။ 2 ထို့နောက် လက်ခံရရှိသည့်အဆုံး၏ TX_ADDR လိပ်စာနှင့် ဒေတာ TX_PLD ကို အချိန်အစီအစဥ်အလိုက် nRF24L01 ကြားခံဧရိယာသို့ SPI ပို့တ်သို့ ပေးပို့ရန် ဒေတာကို ရေးပါ။ 3Arduino သည် CE ကို အနည်းဆုံး 10 s အထိ မြင့်မားစေရန် စီစဉ်ပေးပြီး 130 s နှောင့်နှေးပြီးနောက် ဒေတာကို ပို့လွှတ်ပါသည်။ အလိုအလျောက်အဖြေကိုဖွင့်ထားပါက nRF24L01 သည် ဒေတာထုတ်လွှင့်ပြီးနောက် ချက်ချင်းလက်ခံရရှိသည့်မုဒ်သို့ ဝင်ရောက်ကာ အဖြေအချက်ပြမှုကို လက်ခံရရှိမည်ဖြစ်သည်။ အကြောင်းပြန်မှုရရှိပါက ဆက်သွယ်မှု အောင်မြင်သည်ဟု ယူဆပါသည်။ 4NRF24L01 သည် TX_DS အမြင့်ကို အလိုအလျောက် သတ်မှတ်ပေးမည်ဖြစ်ပြီး TX_PLD အား ထုတ်လွှင့်မှုအစုမှ ရှင်းသွားပါမည်။ တုံ့ပြန်မှုမရရှိပါက ဒေတာကို အလိုအလျောက် ပြန်လည်ပေးပို့ပါမည်။ ပြန်လည်ထုတ်လွှင့်မှုအရေအတွက် (ARC_CNT) သည် အထက်ကန့်သတ်ချက်သို့ရောက်ရှိပါက MAX_RT ကို မြင့်မားစွာသတ်မှတ်ထားပြီး TX_PLD ကို ရှင်းလင်းမည်မဟုတ်ပါ။ MAX_RT TX_DS ကို မြင့်သတ်မှတ်ထားသောအခါ၊ IRQ သည် MCU နှောင့်ယှက်မှုကို အစပျိုးရန် နိမ့်သွားပါသည်။ နောက်ဆုံးထုတ်လွှင့်မှုအောင်မြင်သောအခါ၊ CE နိမ့်ပါက၊ nRF24L01 သည် standby မုဒ်သို့ဝင်ရောက်လိမ့်မည်။ 5 transmission stack တွင် data များရှိနေပြီး CE သည် မြင့်မားပါက၊ နောက်တစ်ခု ထုတ်လွှင့်မှုကို စတင်ပါသည်။ transmission stack တွင်ဒေတာမရှိပါနှင့် CE မြင့်မားပါက nRF24L01 သည် standby မုဒ် 2 သို့ဝင်ရောက်ပါမည်။ ဒေတာလက်ခံခြင်းလုပ်ငန်းစဉ် 1 nRF24L01 ဒေတာလက်ခံရရှိသောအခါ၊ ကျေးဇူးပြု၍ ဦးစွာမုဒ်လက်ခံရရှိရန် nRF24L01 ကို configure လုပ်ပါ။ 2 ထို့နောက် ဒေတာရောက်ရှိမှုကို စောင့်ဆိုင်းရန် လက်ခံအခြေအနေသို့ 130s နှောင့်နှေးပါ။ လက်ခံသူသည် တရားဝင်လိပ်စာနှင့် CRC ကိုတွေ့ရှိသောအခါ၊ ၎င်းသည် လက်ခံသူအစုအဝေးတွင် ဒေတာပက်ကေ့ခ်ျကို သိမ်းဆည်းသည်။ တစ်ချိန်တည်းမှာပင်၊ ကြားဖြတ်နိမိတ်လက္ခဏာ RX_DR ကို မြင့်မားစွာသတ်မှတ်ထားပြီး ဒေတာရယူရန် MCU အား အကြောင်းကြားရန် IRQ နိမ့်သွားပါသည်။ 3ဤအချိန်တွင် အလိုအလျောက်တုံ့ပြန်မှုကို ဖွင့်ထားပါက လက်ခံသူသည် တစ်ချိန်တည်းတွင် ထုတ်လွှင့်မှုအခြေအနေ ပဲ့တင်သံ တုံ့ပြန်မှုအချက်ပြမှုကို ထည့်သွင်းမည်ဖြစ်သည်။ နောက်ဆုံး reception အောင်မြင်သောအခါ CE နိမ့်သွားပါက nRF24L01 သည် idle mode 1 သို့ရောက်သွားပါမည်။
nRF24L01 transceiver စမ်းသပ်မှုပရိုဂရမ် "MotionTracknRF24l01+ ပရိုဂရမ်" ကိုကိုးကားပါ။

14

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

Mpu6050 နိဒါန်း

MPU6050 သည် ပေါင်းစပ် 6-ဝင်ရိုး gyroscope နှင့် 3-ဝင်ရိုး အရှိန်မြှင့်စက် ပါရှိသော ကမ္ဘာ့ပထမဆုံး 3-ဝင်ရိုး ရွေ့လျားမှု လုပ်ဆောင်ခြင်း အစိတ်အပိုင်း ဖြစ်သည်။ ၎င်းသည် အခြားသံလိုက်အာရုံခံကိရိယာများ သို့မဟုတ် အခြားအာရုံခံကိရိယာများ၏ ဒစ်ဂျစ်တယ်လှုပ်ရှားမှုလုပ်ဆောင်ခြင်း (DMP) ကို ဒုတိယ I2C အပေါက်မှတစ်ဆင့် ချိတ်ဆက်နိုင်သည်။ ဟာ့ဒ်ဝဲအရှိန်မြှင့်အင်ဂျင်သည် I9C အပေါက်မှ ဒေတာစီးကြောင်းတစ်ခုတည်းပုံစံဖြင့် 2-ဝင်ရိုး ပေါင်းစပ်တွက်ချက်မှုနည်းပညာကို host MCU သို့ အဓိကအားဖြင့်ထုတ်ပေးပါသည်။
MPU6050 ချစ်ပ်သည် data processing sub module DMP ပါ၀င်သည်၊ built-in hardware filtering algorithm ပါရှိသည်၊ DMP output data ကိုအသုံးပြု၍ application များစွာတွင် လိုအပ်ချက်များကို ကောင်းစွာဖြည့်ဆည်းပေးနိုင်ခဲ့သည်။ စစ်ထုတ်ခြင်းပြုလုပ်ရန် ကျွန်ုပ်တို့၏ဆော့ဖ်ဝဲလ်မလိုအပ်ပါ။ ဤသင်တန်းသည် Arduino မှတစ်ဆင့် အထွက်ဒေတာအဖြစ် DMP ကိုဖတ်ရှုခြင်းအပေါ် အခြေခံ၍ ပြီးပြည့်စုံသော အားကစားလက်အိတ်များကို တည်ဆောက်ပေးမည်ဖြစ်ပါသည်။
ပုံ 10: mpu6050 module ရုပ်ပိုင်းဆိုင်ရာမြေပုံ
အင်္ဂါရပ်များ 6 ဝင်ရိုး သို့မဟုတ် 9 ဝင်ရိုးလည်ပတ်မှု matrix၊ quaternion နှင့် Euler တို့၏ ဒစ်ဂျစ်တယ်အထွက်၏ ပေါင်းစပ်တွက်ချက်မှုဒေတာ
ထောင့်ပုံစံ။ 3 LSBs/°/sec sensitivity နှင့် full-range အာရုံခံနိုင်စွမ်းရှိသော 131-axis angular velocity sensor (gyroscope)
±250၊ ±500၊ ±1000 နှင့် ±2000°/sec ပရိုဂရမ်ထိန်းချုပ်နိုင်သော၊ ±3g၊ ±2g၊ ±4g နှင့် ±8g ရှိသော ပရိုဂရမ်ထိန်းချုပ်မှုအကွာအဝေးပါရှိသော 16-ဝင်ရိုးအရှိန်မြှင့်စက်။ Digital Motion Processing (DMP) အင်ဂျင်သည် ရှုပ်ထွေးသော ပေါင်းစပ်တွက်ချက်မှုဒေတာ၏ဝန်ကို လျှော့ချပေးသည်၊
အာရုံခံကိရိယာ ထပ်တူပြုခြင်း နှင့် လက်ဟန်ခြေဟန် အာရုံခံခြင်း။
15

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
လှုပ်ရှားမှုလုပ်ဆောင်ခြင်းဒေတာဘေ့စ်သည် Android၊ Linux နှင့် Windows တို့ကို ပံ့ပိုးပေးသည်။ လည်ပတ်ချိန်သွေဖည်မှုများနှင့် သံလိုက်အာရုံခံကိရိယာများအတွက် တပ်ဆင်ထားသော ချိန်ညှိခြင်းနည်းပညာများသည် အသုံးပြုမှုများကို ဖယ်ရှားပေးသည်'
calibration အတွက် ထပ်လောင်းလိုအပ်သည်။ ဒစ်ဂျစ်တယ်အထွက်အပူချိန်အာရုံခံကိရိယာ။ ထောက်ပံ့မှု voltage ၏ VDD သည် 2.5V±5% 3.0V±5% 3.3V±5%, VDDIO သည် 1.8V±5%. Gyro လည်ပတ်မှု လက်ရှိ- 5mA၊ gyroscope အသင့်အနေအထား- 8A; အရှိန်မြှင့်စက်လည်ပတ်မှု လက်ရှိ: 8A၊
အရှိန်မြှင့် ပါဝါချွေတာရေးမုဒ် လက်ရှိ- 8A@10Hz။ 400kHz အမြန်မုဒ် I2C အထိ၊ သို့မဟုတ် 20MHz SPI အမှတ်စဉ် လက်ခံဆောင်ရွက်ပေးသူ အင်တာဖေ့စ်အထိ။ ခရီးဆောင်ထုတ်ကုန်အတွက် အသေးဆုံးနှင့် အပါးလွှာဆုံး အံဝင်ခွင်ကျ ပက်ကေ့ဂျ် (4x4x0.9mm QFN)။
5.2 Module Schematic

ပုံ 11- mpu6050 module ၏ ဇယားကွက်
5.3 Nano နှင့် mpu6050 ကြား ဆက်သွယ်ရေး

5.3.1 ပတ်လမ်းချိတ်ဆက်မှု
ပေါင်းစည်းထားသော MPU6050 module ၏ဒေတာကြားခံသည် I2C ဘတ်စ်ကားပရိုတိုကောကိုအသုံးပြုသည်၊ ထို့ကြောင့် NANO နှင့် MPU6050 အကြားဆက်သွယ်ရန်အတွက် Wire library ၏အကူအညီလိုအပ်ပါသည်။ NANO ဘုတ်၏ ဆက်စပ်ချိတ်ဆက်မှုမှာ အောက်ပါအတိုင်းဖြစ်သည်။

MPU6050 Module VCC

Arduino NANO 5V

16

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

GND SCL SDA XDA XCL ADD INT

GND A5 A4 NC NC NC NC/GND

ပုံ 12- Nano နှင့် mpu6050 ၏ ချိတ်ဆက်မှု ပုံကြမ်း
MPU6050 သည် ချစ်ပ်၏အတွင်းပိုင်း မှတ်ပုံတင်မှုများဖြင့် ဒေတာရေးသားခြင်းနှင့် စာဖတ်ခြင်းကို သိရှိနိုင်ပြီး မှတ်ပုံတင်လိပ်စာများအားလုံးသည် 1 byte ဖြစ်သည်၊ အတိအကျပြောရလျှင် လိပ်စာနေရာ၏ 8 bits ဖြစ်သည်။ “RMMPU-6000A.pdf” 1.1 ကို ကိုးကားပါ။ စက်ပစ္စည်းသို့ ဒေတာများကို အချိန်တိုင်းမရေးမီ၊ ဦးစွာပထမဦးစွာ ဝိုင်ယာလွှဲပြောင်းမုဒ်ကိုဖွင့်ပြီး စက်ပစ္စည်း၏ ဘတ်စ်ကားလိပ်စာကို သတ်မှတ်ပါ။ MPU6050 ၏ဘတ်စ်ကားလိပ်စာသည် 0x68 (AD0 ပင်နံပါတ်မြင့်သောအခါ လိပ်စာသည် 69x0)။ ထို့နောက် register start address ၏ byte ကိုရေးပါ၊ ထို့နောက် မည်သည့်အရှည်၏ data ကိုမဆိုရေးပါ။ ဤဒေတာများကို သတ်မှတ်ထားသော စတင်သည့်လိပ်စာသို့ စဉ်ဆက်မပြတ်ရေးသားသွားမည်ဖြစ်ပြီး လက်ရှိ မှတ်ပုံတင်သည့် အရှည်အား အောက်ပါလိပ်စာ၏ မှတ်ပုံတင်ရန်အတွက် ရေးပေးမည်ဖြစ်သည်။ စာရေးပြီးသည်နှင့် ဝိုင်ယာလွှဲပြောင်းမုဒ်ကို ပိတ်ပါ။ အောက်ပါ sample ကုဒ်သည် MPU0 ၏ 0x6B မှတ်ပုံတင်ရန်အတွက် byte 6050 ကိုရေးသည်။
Wire.beginTransmission(0x68); // MPU6050 ၏ ဂီယာကို ဖြတ်ပါ။
17

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
Wire.write(0x6B); // မှတ်ပုံတင်လိပ်စာ Wire.write(0); // ဒေတာတစ်ဘိုက်ကို Wire.endTransmission(true); // End transfer, true ဆိုသည်မှာ ဘတ်စ်ကားများကို လွှတ်ပေးခြင်း ဖြစ်သည်။
MPU-6050 မှဒေတာဖတ်ခြင်း။
စာဖတ်ခြင်းနှင့် စာရေးခြင်းတို့သည် တူညီသည်၊ ပထမဦးစွာ Wire transfer mode ကိုဖွင့်ပြီးနောက် မှတ်ပုံတင်စတင်သည့်လိပ်စာ၏ byte ကိုရေးပါ။ ထို့နောက် Wire library ၏ cache တွင် သတ်မှတ်ထားသော လိပ်စာ၏ ဒေတာကို ဖတ်ပြီး သယ်ယူပို့ဆောင်ရေးမုဒ်ကို ပိတ်ပါ။ နောက်ဆုံးတွင်၊ ကက်ရှ်မှဒေတာကိုဖတ်ပါ။ အောက်ပါ example ကုဒ်သည် MPU0 ၏ 3x6050B မှတ်ပုံတင်ခြင်းဖြင့် စတင်ပြီး ဒေတာ 2 bytes ကို ဖတ်သည်-
Wire.beginTransmission(0x68); // MPU6050 Wire.write(0x3B); // မှတ်ပုံတင်လိပ်စာ Wire.requestFrom(0x68၊ 2၊ true); // ဒေတာကို ကက်ရှ် Wire.endTransmission(true); // ဂီယာမုဒ်ကိုပိတ်ပါ int val = Wire.read() << 8 | Wire.read(); // နှစ်ဘိုက်သည် 16-ဘစ် ကိန်းပြည့်ကို ဖွဲ့စည်းသည်။
တိကျသောအကောင်အထည်ဖော်မှု
Wire library ကို အများအားဖြင့် စတင်သတ်မှတ်သင့်သည်- Wire.begin();
MPU6050 တွင် မည်သည့်လုပ်ဆောင်ချက်များ မလုပ်ဆောင်မီ စက်ကို စတင်ရမည်ဖြစ်ပြီး ၎င်း၏ 0x6B သို့ ဘိုက်တစ်ခုရေးခြင်းသည် လုံလောက်မည်ဖြစ်သည်။ အပိုင်း 1.1 တွင် ပြထားသည့်အတိုင်း ၎င်းကို စနစ်ထည့်သွင်းမှုလုပ်ဆောင်ချက်တွင် များသောအားဖြင့် လုပ်ဆောင်သည်။
MPU6050 ဒေတာဖော်မတ်
ကျွန်ုပ်တို့စိတ်ဝင်စားသောဒေတာသည် 14x0B မှ 3x0 ၏ 48 byte မှတ်ပုံတင်ခြင်းတွင်ဖြစ်သည်။ ဤဒေတာများကို 1000HZ အထိ အပ်ဒိတ်အကြိမ်ရေဖြင့် ဒိုင်းနမစ်ဖြင့် အပ်ဒိတ်လုပ်ပါမည်။ အရင်းခံ မှတ်ပုံတင်လိပ်စာနှင့် ဒေတာအမည်ကို အောက်တွင်ဖော်ပြထားပါသည်။ ဒေတာတစ်ခုစီသည် 2 bytes ဖြစ်သည်ကို သတိပြုပါ။
0x3B၊ accelerometer ၏ X ဝင်ရိုး အစိတ်အပိုင်းသည် ACC_X 0x3D၊ accelerometer ၏ Y ဝင်ရိုး အစိတ်အပိုင်းသည် ACC_Y 0x3F၊ accelerometer ၏ Z ဝင်ရိုး အစိတ်အပိုင်းသည် ACC_Z 0x41 ဖြစ်ပြီး လက်ရှိ အပူချိန်မှာ G TEMP 0x43၊ angular X 0x45 ဝန်းကျင် အလျင် Y ဝင်ရိုး GYR_Y ပတ်လည် ထောင့်ကွေးအလျင်
18

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
0x47၊ Z ဝင်ရိုးတစ်ဝိုက် GYR_Z ထောင့်ကွေးအလျင် MPU6050 ချစ်ပ်၏ သြဒိနိတ်အဓိပ္ပာယ်ဖွင့်ဆိုချက်မှာ- ချစ်ပ်ပြားကို သူ့ဘာသာသူမျက်နှာပြုပြီး မျက်နှာပြင်စာသားကို ထောင့်မှန်သို့ ပြောင်းပေးသည်။ ဤအချိန်တွင် ချစ်ပ်၏အလယ်ဗဟိုကို မူရင်းအဖြစ်ယူသည်၊ ညာဘက်တွင် အလျားလိုက်သည် X ဝင်ရိုးဖြစ်ပြီး၊ ဒေါင်လိုက်သည် Y ဝင်ရိုးဖြစ်ပြီး၊ သင့်ကိုယ်ပိုင်မှာ အောက်ပါပုံအတိုင်း Z ဝင်ရိုးဖြစ်ကြောင်း ညွှန်ပြသည်-
ပုံ 13- mpu6050 လည်ပတ်မှုနှင့် angular velocity diagram ကျွန်ုပ်တို့သည် accelerometer နှင့် angular velocity meter data တို့၏အဓိပ္ပာယ်ကိုသာ အာရုံစိုက်ပါသည်။ ယခုအခါတွင် ကျွန်ုပ်တို့သည် စမ်းသပ်မှု နှစ်ခုမှတစ်ဆင့် mpu6050 ကိုအသုံးပြုခြင်းနှင့် ရင်းနှီးနေပါသည်။ 5.3.2 စမ်းသပ်မှု 1 Reading Accelerometer
accelerometer၊ ACC_X၊ ACC_Y နှင့် ACC_Z ၏ axes အစိတ်အပိုင်းသုံးခုစလုံးသည် 16-bit ရေးထိုးထားသော ကိန်းပြည့်များဖြစ်ပြီး axial direction သုံးခုတွင် စက်၏အရှိန်ကိုညွှန်ပြသော XNUMX-bit များဖြစ်သည်။ အနုတ်တန်ဖိုးကို ယူသောအခါ၊ သြဒီနိတ်ဝင်ရိုးတစ်လျှောက် အရှိန်သည် အနှုတ်ဖြစ်ပြီး အပြုသဘောတန်ဖိုးမှာ အပေါင်းဖြစ်သည်။
အရှိန်အဟုန်သုံး အစိတ်အပိုင်းအားလုံးသည် ဆွဲငင်အားအရှိန် g ၏ အဆများဖြစ်ပြီး အရှိန်အဟုန်ဖြင့် ဖော်ပြနိုင်သော အကွာအဝေး၊ ဆိုလိုသည်မှာ ချဲ့ထွင်မှုကို တူညီစွာ သတ်မှတ်နိုင်ပြီး ရွေးချယ်နိုင်သော ချဲ့ထွင်မှု လေးခုရှိသည်- 2g၊ 4g၊ 8g နှင့် 16g။ ACC_X ကို ဟောင်းအဖြစ် ယူခြင်း။ample၊ အကယ်၍ ချဲ့ထွင်မှုကို 2g (မူလ) ဟု သတ်မှတ်ပါက ACC_X သည် အနိမ့်ဆုံးတန်ဖိုး -32768 ကို ယူသောအခါ၊ လက်ရှိအရှိန်သည် X ဝင်ရိုး၏ အပြုသဘောဆောင်သော ဦးတည်ရာတစ်လျှောက် ဒြပ်ဆွဲအား၏ 2 ဆ၊ စသည်တို့ဖြစ်သည်။ သိသာသည်၊
19

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

ချဲ့ထွင်မှု နိမ့်လေ၊ တိကျမှု ပိုကောင်းလေ၊ ချဲ့ထွင်မှု မြင့်မားလေ၊ တိကျသော အပလီကေးရှင်းအလိုက် သတ်မှတ်ထားသည့် အကွာအဝေး ကြီးမားလေဖြစ်သည်။

AFS_SEL 0 1 2 3

စကေးအပိုင်းအခြား ±2g ±4g ±8g ±16g

LSB အာရုံခံနိုင်စွမ်း 16384LSB/g 8192LSB/g 4096LSB/g 2048LSB/g

ဝင်ရိုးသုံးဝင်ရိုး အရှိန်မြှင့်မီတာနှင့် မော်ဂျူး၏ လှည့်ပတ်လမ်းကြောင်းကြား ဆက်ဆံရေးမှာ အောက်ပါအတိုင်းဖြစ်သည်။

ပုံ 14- Mpu6050 မော်ဂျူးလည်ပတ်မှုနှင့် အရှိန်မြှင့်မှုပုံစံ MPU6050 မှဖတ်သောဒေတာသည် အတက်အကျဖြစ်နေသောကြောင့် ၎င်းကို အတည်ပြုရန် လိုအပ်သည်။ ဆိုလိုသည်မှာ၊ ချစ်ပ်သည် ငုတ်လျှိုးနေသည့်အခြေအနေတွင်၊ ဤစာဖတ်ခြင်းကို သီအိုရီအရ သုညဖြစ်သင့်သည်။ ဒါပေမယ့် နှိမ်ဖို့ များပါတယ်။ ဟောင်းအတွက်ampထို့ကြောင့်၊ ကျွန်ုပ်တို့သည် 200ms ကြားကာလတွင် တန်ဖိုး 10 ကိုဖတ်ပြီးနောက် ၎င်းတို့ကို ပျမ်းမျှကြည့်သည်။ ဤတန်ဖိုးကို သုည offset ဟုခေါ်သည်။ စာဖတ်ခြင်းတစ်ခုစီမှ သုညအော့ဖ်ဆက်ကို နုတ်ခြင်းဖြင့် ချိန်ညှိဖတ်ခြင်းအား ရရှိသည်။ ACC_X နှင့် ACC_Y ၏ သီအိုရီတန်ဖိုးသည် သုညဖြစ်သင့်သောကြောင့် ဖတ်ရှုခြင်းအော့ဖ်ဆက်နှစ်ခုကို ကိန်းဂဏန်းဆိုင်ရာဆိုလိုရင်းဖြင့် ချိန်ညှိနိုင်သည်။ ACC_Z ကို အဆင့်တစ်ဆင့်တွင် လုပ်ဆောင်ရန် လိုအပ်သည်။ ကိန်းဂဏန်း အော့ဖ်ဆက်၏ လုပ်ငန်းစဉ်တွင်၊ ဖတ်တိုင်းအတွက် Z ဝင်ရိုး၏ ဆွဲငင်အားအရှိန် g ကို နုတ်သည်။ အရှိန်ချဲ့ခြင်းသည် 2g ဖြစ်ပါက၊ ထို့နောက် 16384 ကို နုတ်ပြီး ကိန်းဂဏန်း ပျမ်းမျှ ချိန်ညှိခြင်းကို လုပ်ဆောင်သည်။ စနစ်စတင်ချိန်တိုင်း အထွေထွေ ချိန်ညှိခြင်းကို လုပ်ဆောင်နိုင်သည်၊ ထို့နောက် တိကျမှုနှင့် စတင်ချိန်ကြားတွင် အပေးအယူလုပ်သင့်သည်။
20

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
5.3.2.1 စမ်းသပ်မှုရည်ရွယ်ချက်
accelerometer ၏ axes သုံးခုကြားရှိ output data ဆက်စပ်မှုကို စောင့်ကြည့်ရန် mpu6050 ကို လှည့်ခြင်းဖြင့်။
5.3.2.2 စမ်းသပ်ကုဒ် ကုဒ်တည်နေရာMotionTrackLessonmpu6050_accel mpu6050_accel.ino
21

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

#include “Wire.h” // I2Cdev နှင့် MPU6050 ကို စာကြည့်တိုက်များအဖြစ် ထည့်သွင်းရမည် သို့မဟုတ် အခြား .cpp/.h files // အတန်းနှစ်ခုစလုံးအတွက် သင့်ပရောဂျက်၏ #include “I2Cdev.h” #include “MPU6050.h” #define LED_PIN 13 MPU6050 accelgyro၊ တည်ဆောက်ပုံ RAW_type {
uint8_t x; uint8_t y; uint8_t z; }; int16_t ပုဆိန်၊ ay၊ az; int16_t gx၊ gy၊ gz; struct RAW_type accel_zero_offsent; char str[512]; bool blinkState = မှား ; float AcceRatio = 16384.0; float accx၊accy၊accz;

ပျက်ပြယ်သော setup() {

ငါ ;

int32_t ax_zero = 0၊ay_zero = 0၊az_zero = 0 ;

// I2C bus (I2Cdev စာကြည့်တိုက်သည် ၎င်းကို အလိုအလျောက်လုပ်ဆောင်မည်မဟုတ်ပါ)

Wire.begin();

Serial.begin(115200);

// စက်ပစ္စည်းကို စတင်လုပ်ဆောင်ပါ။

Serial.println(“I2C စက်ပစ္စည်းများကို စတင်ခြင်း…”);

accelgyro.initialize();

ကြန့်ကြာမှု (500);

accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);

Serial.println(“စက်ချိတ်ဆက်မှုများကို စမ်းသပ်နေသည်…”);

Serial.println(accelgyro.testConnection() ? “MPU6050 ချိတ်ဆက်မှု

၇၁၄၀၅ ၀.၀၃၅

အောင်မြင်သည်" : "MPU6050 ချိတ်ဆက်မှု မအောင်မြင်ပါ");

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
for( i = 0 ; i < 200 ; i++ ) {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); ax_zero += ပုဆိန် ; 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() { // စက်နှောင့်နှေးမှု (1000) မှ အကြမ်း accel/gyro တိုင်းတာချက်များကို ဖတ်ပါ။ 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

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
1. X ဝင်ရိုးတဝိုက် 90 ဒီဂရီ လှည့်ပါ X ဝင်ရိုး 90 ဒီဂရီ လှည့်သောအခါ၊ Y ဝင်ရိုးသည် ဖြည်းညှင်းစွာ အထက်နှင့် Z ဝင်ရိုးဖြစ်သည်
ဖြည်းဖြည်းချင်း အောက်သို့ဆင်းပါ။ ဝင်ရိုး 90 ဒီဂရီ အတိအကျ ရောက်သောအခါ Y ဝင်ရိုးသည် ဆွဲငင်အားနှင့် ဆန့်ကျင်ဘက် ဖြစ်နေသောကြောင့် Y ဝင်ရိုး၏ အထွက်သည် 1g (1g==9.8m/s^2) ဖြစ်ပြီး Z ဝင်ရိုး၏တန်ဖိုးမှ ကျဆင်းသွားပါသည်။ 1 မှ 0. 2. မူလအနေအထားသို့ ပြန်သွားပြီး နောက်ပြန်လှည့်ခြင်း 90 ဒီဂရီ
မူလအနေအထားသို့ ပြန်ရောက်သွားသောအခါ၊ Y ဝင်ရိုးတန်ဖိုးသည် 0 သို့ ဖြည်းညှင်းစွာ လျော့ကျသွားပြီး Z ဝင်ရိုးသည် 1 သို့ ဖြည်းညှင်းစွာ တိုးလာပါသည်။ ထို့နောက် 90 ဒီဂရီ ပြောင်းပြန်သို့ လှည့်ကာ Y ဝင်ရိုးသည် -1 အထိ တဖြည်းဖြည်း လျော့ကျသွားသောကြောင့်၊ ဝင်ရိုးသည် ဆွဲငင်အားဦးတည်ချက်နှင့်အညီဖြစ်ပြီး အရှိန်တန်ဖိုးသည် အနှုတ်ဖြစ်သင့်သည်။ Z ဝင်ရိုးသည် 0 သို့ ဖြည်းညှင်းစွာ လျော့ကျသွားသည်။ 3. မူလအနေအထားသို့ ပြန်သွားရန်
အောက်ပါအတိုင်း ရှင်းပြပါ- ထို့နောက် 90 ဒီဂရီပြောင်းပြန်မှ မူလအနေအထားသို့ ပြန်သွားပါ။ ဤအချိန်တွင်၊ Y-ဝင်ရိုးနှင့် Z-ဝင်ရိုး၏ဒေတာများကို မူလတန်ဖိုးသို့ ဖြည်းညှင်းစွာပြန်လည်ရယူသည်၊ Y-ဝင်ရိုးသည် 0၊ နှင့် Z-ဝင်ရိုးသည် 1 ဖြစ်သည်။
X-axis ၏လည်ပတ်မှုကို ပိုင်းခြားစိတ်ဖြာပြီးနောက် Y-axis ၏လည်ပတ်မှုသည်ဆင်တူသည်၊ ထို့ကြောင့်အသေးစိတ်အချက်အလက်များကိုကျွန်ုပ်တို့မပြောပါ။ အခု Z ဝင်ရိုးအကြောင်း ပြောကြရအောင်၊ ဘာကြောင့်လဲ ဆိုတော့ Z ဝင်ရိုးကို ပတ်ပြီး လှည့်တဲ့အခါ ဘယ်ညာ 90 ဒီဂရီ လှည့်တာနဲ့ ညီမျှပါတယ်။ ဤအချိန်တွင်၊ Z ဝင်ရိုး၏အထွက်သည် အမြဲတမ်း 1 ဖြစ်ပြီး X ဝင်ရိုးနှင့် Y ဝင်ရိုးသည် ဆွဲငင်အားဝင်ရိုးနှင့် အံဝင်ခွင်ကျဖြစ်နေသောကြောင့် အထွက်တန်ဖိုးများသည် 0 ဖြစ်သည်၊ ဟုတ်ပါတယ်၊ ဤသည်အတော်လေးတည်ငြိမ်သောအခြေအနေအောက်တွင်တန်ဖိုးဖြစ်သည် . စက်ပစ္စည်းကို ယာဉ်တစ်စီးပေါ်တွင် တပ်ဆင်ထားပါက၊ ကားသည် ဘယ်ညာလှည့်သည့်အခါ X နှင့် Y axes များသည် 0 ဖြစ်လိမ့်မည်မဟုတ်ပါ။
24

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
စမ်းသပ်မှုရလဒ်

5.3.3 စမ်းသပ်မှု 2 Gyro မှ ဒေတာကို ဖတ်ခြင်း။

X၊ Y နှင့် Z ၏ သြဒီနိတ်ဝင်ရိုးသုံးခုပတ်ပတ်လည်လှည့်နေသည့် GYR_X၊ GYR_Y နှင့် GYR_Z အစိတ်အပိုင်းများသည် 1-bit ရေးထိုးထားသော ကိန်းပြည့်များဖြစ်သည်။ မူလအစမှ လည်ပတ်ဝင်ရိုးအထိ၊ တန်ဖိုးသည် နာရီလက်တံအတိုင်းလှည့်ခြင်းအတွက် အပြုသဘောဖြစ်ပြီး နာရီလက်တံပြန်လှည့်ခြင်းအတွက် အနုတ်ဖြစ်သည်။ angular velocity အစိတ်အပိုင်း သုံးခုစလုံးသည် ဒီဂရီ/စက္ကန့်တွင် ရှိသည်။ ဖော်ပြနိုင်သော ထောင့်အလျင်အကွာအဝေး၊ ဆိုလိုသည်မှာ ချဲ့ထွင်မှုကို တူညီစွာ သတ်မှတ်နိုင်သည်။ ရွေးချယ်နိုင်သော ချဲ့ထွင်မှု 4 ခု ရှိသည်- 250 ဒီဂရီ/စက္ကန့်၊ 500 ဒီဂရီ/စက္ကန့်၊ 1000 ဒီဂရီ/စက္ကန့်၊ 2000။ ဒီဂရီ/စက္ကန့်။ GYR_X ကို ဟောင်းအဖြစ် ယူခြင်း။ample၊ ချဲ့ထွင်မှုကို 250 ဒီဂရီ/စက္ကန့်တွင် သတ်မှတ်ထားပါက၊ GYR သည် အပြုသဘောဆောင်သော အမြင့်ဆုံးတန်ဖိုး 32768 ကို ယူသောအခါ၊ လက်ရှိ angular velocity သည် 250 degree/second နာရီလက်တံအတိုင်းဖြစ်သည်၊ 500 ဒီဂရီ/စက္ကန့်တွင် သတ်မှတ်ထားပါက၊ လက်ရှိတန်ဖိုး 32768 သည် လက်ရှိ angular velocity သည် 500 degree/second ကို လက်ယာရစ်ဖြင့် ညွှန်ပြသည်။ ချဲ့ထွင်မှု နိမ့်လေ၊ တိကျမှု ပိုကောင်းလေ၊ ချဲ့ထွင်မှု ပိုမြင့်လေ၊ အကွာအဝေး ပိုကြီးလေ ဖြစ်သည်မှာ ထင်ရှားပါသည်။

AFS_SEL 0 1 2 3

စကေးအပိုင်းအခြား ±250°/s ±500°/s ±1000°/s ±2000°/s

LSB အာရုံခံနိုင်စွမ်း
131LSB/°/s 65.5LSB/°/s 32.8LSB/°/s 16.4LSB/°/s

25

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပရိုဂရမ်တည်နေရာ “MotionTrackLessonmpu6050_gryo mpu6050_gryo.ino” စမ်းသပ်ကုဒ်
"Wire.h" ပါဝင်သည်
// I2Cdev နှင့် MPU6050 ကို ဒစ်ဂျစ်တိုက်များအဖြစ် ထည့်သွင်းရမည် သို့မဟုတ် အခြား .cpp/.h files // အတန်းနှစ်ခုစလုံးအတွက် သင့်ပရောဂျက်၏ #include “I2Cdev.h” #include “MPU6050.h” #define LED_PIN 13 လမ်းကြောင်းတွင် ရှိရပါမည်။
MPU6050 accelgyro;
တည်ဆောက်ပုံ RAW_type {
uint8_t x; uint8_t y; uint8_t z; };
int16_t ပုဆိန်၊ ay၊ az; int16_t gx၊ gy၊ gz; struct RAW_type accel_zero_offsent ၊gyro_zero_offsent;
bool blinkState = မှားယွင်းသော၊ char str[512];
26

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
float pi = 3.1415926; float AcceRatio = 16384.0; float GyroRatio = 131.0; float Rad = 57.3 ; //180.0/pi; float gyrox၊gyroy၊gyroz;
void setup() { int i ; int32_t ax_zero=0၊ay_zero=0၊az_zero=0၊gx_zero=0 ၊gy_zero=
0၊gz_zero = 0 ; // I2C bus (I2Cdev စာကြည့်တိုက်သည် ၎င်းကို အလိုအလျောက်လုပ်ဆောင်မည်မဟုတ်ပါ) Wire.begin();
Serial.begin(115200);
// စက်ပစ္စည်းကို စတင်ခြင်း // Serial.println(“I2C စက်များကို စတင်ခြင်း…”);
accelgyro.initialize(); ကြန့်ကြာမှု (500); accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_250);
Serial.println(“စက်ချိတ်ဆက်မှုများ စမ်းသပ်နေသည်…”); Serial.println(accelgyro.testConnection() ? "MPU6050 ချိတ်ဆက်မှု အောင်မြင်သည်" : "MPU6050 ချိတ်ဆက်မှု မအောင်မြင်ပါ"); for( 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

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
gyro_zero_offsent.z = gz_zero/200; pinMode(LED_PIN၊ OUTPUT); }
void loop() { // စက် 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");
နှောင့်နှေး(100); လှုပ်ရှားမှုကိုညွှန်ပြရန် // မျက်တောင်ခတ် LED blinkState = !blinkState; digitalWrite(LED_PIN၊ blinkState); }
ကျွန်ုပ်တို့သည် x-axis ၏ အပြုသဘောဆောင်သော ဦးတည်ရာသို့ လှည့်သောအခါ၊ ပုံနှိပ်ထားသော gyrox ဒေတာသည် အပြုသဘောဖြစ်နေသည်၊ သို့မဟုတ်ပါက ၎င်းသည် အနုတ်လက္ခဏာဖြစ်နေသည်ကို တွေ့ရပါသည်။
28

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
5.4 ရွေ့လျားမှုဒေတာ ခွဲခြမ်းစိတ်ဖြာခြင်း။
accelerometer နှင့် angular speed meter ၏ ဖတ်ရှုခြင်းဒေတာကို ရုပ်ပိုင်းဆိုင်ရာတန်ဖိုးများအဖြစ် ပြောင်းလဲပြီးနောက်၊ ဒေတာများကို မတူညီသောအသုံးချပရိုဂရမ်များအလိုက် ကွဲပြားစွာအဓိပ္ပာယ်ပြန်ဆိုကြသည်။ ဤအခန်းတွင်၊ လေယာဉ်ရွေ့လျားမှုပုံစံကို ဟောင်းတစ်ခုအဖြစ် ယူထားသည်။ample သည် အရှိန်နှင့် angular velocity ကိုအခြေခံ၍ လက်ရှိပျံသန်းမှုသဘောထားကို တွက်ချက်ရန်။
5.4.1 Accelerometer မော်ဒယ်
accelerometer ကို စပရိန်ဖြင့် cube ၏ အလယ်ဗဟိုတွင် ဆုပ်ကိုင်ထားသော positive cube box တွင် ball တစ်ခုဟု တွေးနိုင်ပါသည်။ အကွက်ရွေ့လျားနေချိန်တွင်၊ အောက်ဖော်ပြပါအတိုင်း စိတ်ကူးယဉ်ဘောလုံး၏ အနေအထားမှ လက်ရှိအရှိန်နှုန်းကို တွက်ချက်နိုင်သည်-
29

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 15- ကိုယ်အလေးချိန် ကျဆင်းမှု အခြေအနေ အရှိန်မြှင့်မှု တန်ဖိုး
အကယ်၍ ကျွန်ုပ်တို့သည် ဘောက်စ်ပေါ်တွင် အလျားလိုက် ဘယ်ဘက်သို့ တွန်းအားအား သွင်းပါက၊ ဘောက်စ်သည် ဘယ်ဘက်သို့ အရှိန်တက်လာမည်မှာ ထင်ရှားသည်၊ ထို့နောက် ဘောက်စ်အတွင်းရှိ စိတ်ကူးယဉ်ဘောလုံးသည် inertia ကြောင့် အကွက်၏ ညာဘက်ခြမ်းတွင် ကပ်နေမည်ဖြစ်သည်။ အောက်ပါပုံတွင်ပြထားသည့်အတိုင်း
ပုံ 16- ညာဘက်သို့ရွေ့နေသော အရာဝတ္ထုတစ်ခု၏အရှိန်
ဒေတာ၏ရုပ်ပိုင်းဆိုင်ရာအဓိပ္ပာယ်ကိုသေချာစေရန်အတွက် MPU6050 အရှိန်မြှင့်ကိရိယာသည် စိတ်ကူးယဉ်ဘောလုံး၏ axes သုံးခုရှိ ဆန့်ကျင်ဘက်တန်ဖိုးများကို အစစ်အမှန်အရှိန်ဟု သတ်မှတ်သည်။ စိတ်ကူးယဉ်ဘောလုံး အနေအထားသည် ဝင်ရိုးတစ်ခု၏ ရှေ့ဘက်သို့ ဘက်လိုက်သောအခါ ဝင်ရိုး၏အရှိန်သည် အနှုတ်ဖြစ်ပြီး စိတ်ကူးယဉ်ဘောလုံးအနေအထားသည် အနှုတ်ဝင်ရိုးဆီသို့ ဘက်လိုက်သောအခါ ဝင်ရိုး၏အရှိန်
30

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
စာဖတ်ခြင်းသည် အကောင်းမြင်သည်။ အထက်ဖော်ပြပါ ခွဲခြမ်းစိတ်ဖြာချက်များအရ MPU6050 ချစ်ပ်ပြားကို ဒေသအဆင့်တွင် ထားသောအခါ ချစ်ပ်မျက်နှာပြင်သည် ကောင်းကင်သို့ ဦးတည်နေပြီး၊ ဤအချိန်တွင် မြေဆွဲအားကြောင့် ဘောလုံး၏ အနေအထားသည် Z ဝင်ရိုး၏ အနုတ်ဘက်သို့ ဦးတည်နေသည်၊ ထို့ကြောင့် Z ဝင်ရိုးအရှိန်မြှင့်ဖတ်ခြင်းသည် အပြုသဘောဖြစ်သင့်ပြီး အကောင်းဆုံးအားဖြင့် "g" ဖြစ်သင့်သည်။ ၎င်းသည် ဆွဲငင်အားအရှိန်မဟုတ်သော်လည်း ရုပ်ပိုင်းဆိုင်ရာလှုပ်ရှားမှု၏အရှိန်ကို သတိပြုပါ၊ ၎င်းကိုနားလည်နိုင်သည်- ဆွဲငင်အား၏အရှိန်သည် ၎င်း၏ကိုယ်ပိုင်ရွေ့လျားမှုအရှိန်နှုန်းတန်ဖိုးနှင့် တူညီသော်လည်း ဆန့်ကျင်ဘက်ဦးတည်ချက်ဖြစ်သောကြောင့် ချစ်ပ်သည် ငုတ်လျှိုးနေနိုင်သည်။
5.4.2 Roll-pitch-yaw မော်ဒယ်နှင့် သဘောထား တွက်ချက်ခြင်း။
လေယာဉ်တစ်စီး၏ လက်ရှိပျံသန်းမှုသဘောထားကို ကိုယ်စားပြုခြင်းအတွက် ယေဘူယျစံနမူနာသည် အောက်တွင်ဖော်ပြထားသည့်အတိုင်း သြဒီနိတ်စနစ်ကို တည်ထောင်ရန်နှင့် "Roll" ဖြင့် X ဝင်ရိုး၏လည်ပတ်မှုကို ကိုယ်စားပြုခြင်း၊ "Pitch" ဖြင့် Y ဝင်ရိုး၏လှည့်ခြင်း၊ Z ၏လည်ပတ်ခြင်း “ယော်” ဖြင့် ဝင်ရိုး။
ပုံ 17- လိပ်-စေး-ယော် မော်ဒယ်
MPU6050 သည် ပုဆိန်သုံးချောင်း၏ အထက်အရှိန်ကို ရယူနိုင်ပြီး ဆွဲငင်အားသည် အမြဲတမ်းဒေါင်လိုက်ဖြစ်နေသောကြောင့်၊ ကျွန်ုပ်တို့သည် ဒြပ်ဆွဲအားအရှိန်အရ လက်ရှိသဘောထားကို တွက်ချက်နိုင်ပါသည်။
31

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
chip နှင့် ပတ်သက်. အဆင်ပြေစေရန်အတွက်၊ ကျွန်ုပ်တို့တွင် အထက်ဖော်ပြပါ လေယာဉ်ပေါ်တွင် မှောက်လျက်သားရှိသော ချစ်ပ်ကို ထားရှိထားပြီး သြဒိနိတ်များသည် လေယာဉ်၏ သြဒီနိတ်စနစ်နှင့် ပြီးပြည့်စုံသော တိုက်ဆိုင်မှုဖြစ်သည်။ axes သုံးခုရှိ အရှိန်သည် acceleration vector “a (x, y, z)” ကို ဖြစ်ပေါ်စေသည်။ ချစ်ပ်သည် ညီညီညာညာ ရွေ့လျားမှု အခြေအနေတွင် ရှိနေသည်ဟု ယူဆပါက၊ ထို့နောက် "a" သည် မြေပြင်နှင့် ထောင့်ညီစွာ တူညီရမည်၊ အတိအကျပြောရလျှင် Z ဝင်ရိုး၏ အနုတ်လက္ခဏာ ဦးတည်ချက်၊ အရှည်မှာ |a|=g=sqrt{x^2+ ဖြစ်သည်။ y^2+z^2} (အပိုင်း 3.1 တွင်တွေ့ရသော ဒြပ်ဆွဲအား၏အရှိန်နှင့် ဆန့်ကျင်ဘက်ဦးတည်ချက်)။ ချစ်ပ် (coordinate system) လည်ပတ်နေပါက၊ Z ဝင်ရိုး၏ အနုတ်လက္ခဏာ ဦးတည်ချက်သည် “a” နှင့် ထပ်တူမည်မဟုတ်တော့ဘဲ အရှိန်ဗို့အား a သည် ဒေါင်လိုက်တက်နေသေးသောကြောင့် ဖြစ်သည်။ အောက်မှာကြည့်တယ်။

ပုံ 18- သဘောထားထောင့် တွက်ချက်မှု မော်ဒယ်
အဆင်ပြေစေရန်အတွက်၊ အထက်သြဒီနိတ်စနစ်၏ Z ဝင်ရိုး၏ အပြုသဘောဆောင်သော ဦးတည်ချက်မှာ (ဝမ်းနှင့် ချစ်ပ်၏ရှေ့) အောက်ဘက်ဖြစ်ပြီး X ဝင်ရိုးသည် ညာဘက်သို့ (လေယာဉ်ပျံ၏ ဦးတည်ချက်) ဖြစ်သည်။ ဤအချိန်တွင် ချစ်ပ်၏ Roll angle “” (အဝါ) ကို အရှိန်ဗက်ဂတ်နှင့် XZ လေယာဉ်ပေါ်ရှိ ၎င်း၏ဆွဲငင်ပုံ (x, 0, z) ဖြင့် ဖွဲ့စည်းထားပြီး၊ Pitch angle “” (အစိမ်းရောင်) သည် အရှိန်ဗို့အားဖြင့် ဖွဲ့စည်းထားသည်။ YZ လေယာဉ်ပေါ်တွင်၎င်း၏ခန့်မှန်းချက်။ အစက်

ထုတ်ကုန်ဖော်မြူလာသည် vector နှစ်ခုကြားရှိ ထောင့်ကို တွက်ချက်နိုင်သည်- ရိုးရှင်းသော နုတ်ယူခြင်း-

. ပြီးနောက်

နှင့်

.

32

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
arccos function သည် အပြုသဘောဆောင်သောတန်ဖိုးများကိုသာ ပြန်ပေးနိုင်သောကြောင့်၊ မတူညီသောအခြေအနေများအလိုက် angle ၏ positive နှင့် negative values ​​များကို ယူရန်လိုအပ်ပါသည်။ y ဝင်ရိုးသည် အပြုသဘောဆောင်သောအခါ၊ Roll Angle သည် အနုတ်တန်ဖိုးကိုခံယူပြီး X ဝင်ရိုးသည် အနှုတ်ရှိသောအခါ၊ Pitch ထောင့်သည် အနှုတ်ဖြစ်သည်။
5.4.3 Yaw Angle ပြဿနာ
အကိုးအကားမရှိသောကြောင့်၊ Yaw ၏ ပကတိလက်ရှိထောင့်ကို တွက်ချက်၍မရပါ၊ ဥပမာအားဖြင့်၊ ထောင့်အလျင် GYR_Z ၏ ပြောင်းလဲမှုကိုသာ ကျွန်ုပ်တို့ ရရှိနိုင်ပါသည်။ ဟုတ်ပါတယ်၊၊ တိုင်းတာမှုတိကျမှုအရ၊ လက်ရှိ Yaw angle (ကနဦးတန်ဖိုးအရ) ကိုတွက်ချက်ရန် GYR_Z integral ၏နည်းလမ်းကိုအသုံးပြု၍ တွက်ချက်ထားသောတန်ဖိုးသည် လွင့်နေသည်၊ အချိန်အတိုင်းအတာတစ်ခုကြာပြီးနောက် လုံးဝအဓိပ္ပါယ်မရှိပေ။ သို့သော်လည်း UAV ကဲ့သို့သော အပလီကေးရှင်းအများစုတွင် GRY_Z သာ လိုအပ်သည်။
Yaw ၏ absolute angle ကိုရရန်လိုအပ်ပါက၊ 9250-axis motion tracking chip ဖြစ်သော MPU9 ကိုရွေးချယ်ပါ၊ ၎င်းသည် 3-axis သံလိုက်အိမ်မြှောင်နောက်ထပ်ဒေတာကိုပေးစွမ်းနိုင်သောကြောင့် Yaw angle ကိုကမ္ဘာ၏သံလိုက်စက်ကွင်း၏ဦးတည်ချက်နှင့်အညီတွက်ချက်နိုင်သည်။ တိကျသောနည်းလမ်းကို ဤနေရာတွင် မဖော်ပြထားပါ။
5.5 ဒေတာ ထုတ်ယူခြင်းနှင့် အကောင်အထည်ဖော်ခြင်း။
MPU6050 ချစ်ပ်သည် ပြင်းထန်သော ဆူညံသံဖြင့် ဒေတာကို ပံ့ပိုးပေးသည်၊၊ ချစ်ပ်သည် တည်ငြိမ်သော အခြေအနေတွင် လုပ်ဆောင်နေသောအခါ၊ ဒေတာသည် 2% ထက်ပို၍ လွှဲသွားနိုင်သည်။ ဆူညံသံများအပြင် အခြားသော အော့ဖ်ဆက်များပါရှိပါသေးသည်၊ ဆိုလိုသည်မှာ ဒေတာသည် static အလုပ်လုပ်သည့်နေရာတစ်ဝိုက်တွင် မရွေ့လျားသောကြောင့် ဒေတာအော့ဖ်ဆက်ကို ပထမဦးစွာ ချိန်ညှိသင့်ပြီး စစ်ထုတ်သည့် အယ်လဂိုရီသမ်ဖြင့် ဆူညံသံကို ဖယ်ရှားပေးသည်။ Kalman filter ၏အကျိုးသက်ရောက်မှုသည်ဆူညံသံပမာဏများစွာရှိသောဒေတာအတွက်အကောင်းဆုံးဖြစ်သည်မှာသေချာသည်။ ဤနေရာတွင် ကျွန်ုပ်တို့သည် အယ်လဂိုရီသမ်အသေးစိတ်များကို ထည့်သွင်းစဉ်းစားခြင်းမရှိပါ၊ သင်ကိုးကားနိုင်ပါသည်။ http://www.starlino.com/imu_guide.html.
5.5.1 Experiment 3 imu_kalman သည် Roll and Pitch ရရှိသည် ရည်ရွယ်ချက်မှာ mpu3 ၏ 6050D ရွေ့လျားမှုအခြေအနေကို mpu6050 ကိုဖတ်ရှုခြင်းဖြင့် အချိန်နှင့်တပြေးညီပြသရန်နှင့် အချိန်နှင့်တစ်ပြေးညီ အရှိန်မြှင့်ခြင်း ACCEL_X၊ ACCEL_Y၊ ACCEL_Z ဒေတာနှင့် gyro ဒေတာ GYRO_X တို့ကို ထုတ်လွှင့်ရန်ဖြစ်သည်။ ၊ နှင့် GYRO_Z သည် စီမံဆောင်ရွက်ဆဲပရိုဂရမ်သို့။
5.5.2 စမ်းသပ်ကုဒ် Arduino စမ်းသပ်ကုဒ် “MotionTrackLessonmpu6050mpu6050.ino” သည် roll and pitch အပြေးရလဒ်ကို အောက်ပါအတိုင်း ရရှိနိုင်သည်-
33

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပရိုဂရမ်ကို Arduino NANO ပင်မထိန်းချုပ်ဘုတ်သို့ အပ်လုဒ်တင်ပြီးနောက်၊ လုပ်ဆောင်နေသည့် ပရိုဂရမ် “MotionTrackProcessing_demompu6050mpu6050.pde” ကိုဖွင့်ပါ။
Processing software ဖြင့် (ဒေါင်းလုဒ်လိပ်စာ https://www.processing.org) “[]” ရှိ နံပါတ်သည် Arduino NANO ၏ ပို့တ်နံပါတ်မဟုတ်သော်လည်း ဆက်သွယ်ရေးပို့တ်၏ အမှတ်စဉ်နံပါတ်ဖြစ်ကြောင်း သတိပြုပါ။ ကွန်ပျူတာ၏ စက်ပစ္စည်းမန်နေဂျာကို ဖွင့်ရန် လိုအပ်သည်။ view နံပါတ်စဉ်။ ဟောင်းအတွက်ampကျွန်ုပ်၏ မျက်နှာပြင်သည် COM1 ဖြစ်ပြီး ကျွန်ုပ်တို့၏ လုပ်ဆောင်မှုအတွက် အသုံးပြုသည့် အမှတ်စဉ် ဆိပ်ကမ်းဖြစ်သည်။ ၎င်းသည် subscript 0 ဖြင့် စတင်သည်။ ထို့ကြောင့် ကျွန်ုပ်သည် “[ ]” ကို စီမံဆောင်ရွက်နေသော ပင်မပရိုဂရမ်ရှိ “[ ]” မှ တန်ဖိုးကို 0 သို့ ပြောင်းလိုက်သည် ။ အပြောင်းအလဲများ ပြီးသည်နှင့်၊ စီမံဆောင်ရွက်မှုကို လုပ်ဆောင်ရန် Run Sketch ကို နှိပ်ပါ။
34

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
35

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
သွင်းကုန် processing.serial.*;
အမှတ်စဉ် myPort; // serila port numble
float [] RwEst = new float[3]; byte[] inBuffer = new byte[100];
PFon ဖောင့်; နောက်ဆုံး int VIEW_SIZE_X = 1080၊VIEW_SIZE_Y = 720;
ပျက်ပြယ်သော setup() {
အရွယ်အစား (1080၊ 720၊ P3D); myPort = အမှတ်စဉ်အသစ်(ဤ၊ Serial.list()[0]၊ 9600); // myPort = အသစ်အမှတ်စဉ်(ဤ၊ “/dev/ttyUSB0”၊ 9600); // ဖောင့်ကို တင်ပါ ပို့ခအသစ် အမျိုးအစား /date font = loadFont(“CourierNewPSMT-32.vlw”); }
readSensors() { if (myPort.available() > 0) { if (myPort.readBytesUntil('n', inBuffer) > 0) { String inputString = new String(inBuffer); String [] inputStringArr = split(inputString,','); RwEst[0] = float(inputStringArr[0]); RwEst[1] = float(inputStringArr[1]); RwEst[2] = float(inputStringArr[2]); } }
}
36

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
buildBoxShape() { //box(60၊ 10၊ 40); noStroke(); beginShape(QUADS);
//Z+ ဖြည့်စွက်(#00ff00); vertex(-30၊ -5၊ 20); vertex(30၊ -5၊ 20); vertex(30၊ 5၊ 20); vertex(-30၊ 5၊ 20);
//Zfill(#0000ff); vertex(-30၊ -5၊ -20); vertex(30၊ -5၊ -20); vertex(30၊ 5၊ -20); vertex(-30၊ 5၊ -20);
//Xfill(#ff0000); vertex(-30၊ -5၊ -20); vertex(-30၊ -5၊ 20); vertex(-30၊ 5၊ 20); vertex(-30၊ 5၊ -20);
//X+ ဖြည့်စွက်(#ffff00); vertex(30၊ -5၊ -20); vertex(30၊ -5၊ 20); vertex(30၊ 5၊ 20); vertex(30၊ 5၊ -20);
//Yfill(#ff00ff); vertex(-30၊ -5၊ -20); vertex(30၊ -5၊ -20); vertex(30၊ -5၊ 20); vertex(-30၊ -5၊ 20);
37

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
//Y+ ဖြည့်စွက်(#00ffff); vertex(-30၊ 5၊ -20); vertex(30၊ 5၊ -20); vertex(30၊ 5၊ 20); vertex(-30၊ 5၊ 20);
endShape(); }
drawCube() { pushMatrix(); // normalize3DVec(RwEst); ဘာသာပြန်ဆိုခြင်း(၃၀၀၊ ၄၅၀၊ ၀); စကေး(၄၊ ၄၊ ၄); rotateX(HALF_PI * -RwEst[300]); //rotateY(HALF_PI * -450); rotateZ(HALF_PI * -RwEst[0]); buildBoxShape(); popMatrix();
}
void draw() { // getInclination(); readSensors(); နောက်ခံ(#214565); ဖြည့်စွက်(#ffffff); textFont(ဖောင့်၊ 20); စာသား(“RwEst :n” + RwEst[0] + “n” + RwEst[1] + “n” + RwEst[2]၊ 220၊ 180); // display axes pushMatrix(); ဘာသာပြန်ဆိုခြင်း(၄၅၀၊ ၂၅၀၊ ၀); လေဖြတ်ခြင်း(#ffffff); // စကေး(450၊ 250၊ 0); လိုင်း(100၊ 100၊ 100၊ 0၊ 0၊ 0); လိုင်း(100၊ 0၊ 0၊ 0၊ -0၊ 0); လိုင်း(0၊ 100၊ 0၊ 0၊ 0၊ 0); လိုင်း(0၊ 0၊ 100၊ -RwEst[0]၊ RwEst[0]၊ RwEst[0]); popMatrix(); drawCube();
} ၃၈

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ကျွန်ုပ်တို့၏ အပြေးရလဒ်များကို အောက်ပါအတိုင်း တွေ့မြင်နိုင်သည်-
ပုံ 19- တင်ပြချက် တင်ဆက်မှုများကို လုပ်ဆောင်နေပါသည်။

ရွေ့လျားမှုကို ခြေရာခံထိန်းချုပ်ခြင်းဆိုင်ရာ သဘောတရား

Roll angle နှင့် Pitch ကိုရရှိရန် ယခင် mpu6050 ၏ဒေတာရယူမှုမှတစ်ဆင့်၊ ကျွန်ုပ်တို့သည် အောက်ပါစာပေးစာယူကို တည်ဆောက်ပါသည်။ အောက်စက်ရွေ့လျားနေသော အရာဝတ္တုကို ထိန်းချုပ်ပါ- mpu6050 မှတဆင့် အမြန်နှုန်းနှင့် ဦးတည်ရာကို ရယူခြင်းဖြင့် ကျွန်ုပ်တို့သည် မည်သည့် အောက်စက်အရာဝတ္တုကိုမဆို ထိန်းချုပ်နိုင်သည်။
mpu6050 ကို အချိန်နှင့်တပြေးညီ အတည်ပြုထားသော အရှိန်အဟုန်ဖြင့် ACCEL_X၊ ACCEL_Y၊ ACCEL_Z ဒေတာနှင့် gyroscope ဒေတာ GYRO_X၊ GYRO_Y၊ GYRO_Z ဒေတာကို quaternion လုပ်ဆောင်ခြင်း လုပ်ဆောင်ချက်သို့ ပို့လိုက်ခြင်းဖြင့်၊ ပရိုဂရမ်သည် mpu6050 ၏ Roller နှင့် Pitch angle အခြေအနေများကို အချိန်နှင့်တပြေးညီ ပြသပေးပါသည်။
6.1 ပြိုင်ကားဦးတည်ချက် သြဒိနိတ်ထောင့် မော်ဒယ်
ကား၏ထိန်းချုပ်မှုကို လွယ်ကူချောမွေ့စေရန်အတွက်၊ ယခု ကျွန်ုပ်တို့သည် မော်တာ၏ ဦးတည်ချက်ကို သြဒီနိတ်ထောင့်ဖြင့် အောက်ဖော်ပြပါ မော်ဒယ်ကို တည်ဆောက်ထားပါသည်။
39

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 20- ပြိုင်ကားဦးတည်ချက်ထောင့်သြဒီနိတ်များကို အထက်တွင်ပြထားသည့်အတိုင်း၊ ကျွန်ုပ်တို့သည် ကား၏အရှေ့ဘက်ကို 90 ဒီဂရီ၊ နောက်ဘက်မှ 270 ဒီဂရီ၊ ညာဘက်မှ 180 ဒီဂရီနှင့် ဘယ်ဘက် 0/360 ဒီဂရီအဖြစ် သတ်မှတ်ပါသည်။ 0 ~ 90 သည် မှန်ကန်သော ရှေ့ဦးတည်ချက်ကို ကိုယ်စားပြုသည်။ 90 ~ 180 သည် ဘယ်ဘက်ရှေ့ 180 ~ 270 နှင့် ဘယ်ဘက်အနောက်အတွက် 270 ~ 360 ကို ကိုယ်စားပြုသည်။ အလားတူ၊ ကျွန်ုပ်တို့သည် အားကစားလက်အိတ်ပေါ်တွင် mpu6050 ကို တပ်ဆင်ထားသည်။ ကျွန်ုပ်တို့သည် အောက်ပါ ရွေ့လျားမှုပုံစံကို တည်ဆောက်ခဲ့သည်။
40

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 21- အားကစားလက်အိတ်များ၏ လမ်းညွှန်သြဒိနိတ်များကို 5.5.2 Roll-pitch-yaw ဒေတာမော်ဒယ်မှတစ်ဆင့်၊ အားကစားလက်အိတ်များသည် ပုံ Y ပုံတစ်ဝိုက် (လက်၏နောက်သို့ဘယ်ညာလှည့်) နှင့် Pitch angle ကိုရရှိသည်။ X ပတ်ပတ်လည်ကို လှည့်ခြင်း (နောက်ပြန်လှန်) ကျွန်ုပ်တို့သည် Roll angle ကို ရရှိသည်။ ယခု ကျွန်ုပ်တို့သည် ကား၏ သဘောထားထောင့်၏ သြဒိနိတ်များနှင့် ကား၏ ထောင့်ကို သြဒိနိတ်များကို နားလည်သဘောပေါက်ထားပြီး၊ ယခုအခါ ၎င်းကို အခင်းဖြစ်ပွားရာသို့ ဖော်ပြပါမည်။ အားကစားလက်အိတ်များသည် အောက်ဖော်ပြပါပုံတွင်ပြထားသည့်အတိုင်း ညာဘက်ရှေ့ဦးတည်ရာသို့ စောင်းသောအခါ၊ ၎င်းတို့သည် သြဒီနိတ်စနစ်တွင်ရှိနေပါက၊ ၎င်းတို့သည် 0 မှ 90 ဒီဂရီဧရိယာသို့ တိမ်းစောင်းသွားမည်ဖြစ်သည်။
41

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 22- အားကစားလက်အိတ်များ၏ ဇယားကွက် သည် ရှေ့ဦးတည်ရာသို့ တိမ်းစောင်းနေသော အားကစားလက်အိတ်၏ ဇယားကွက် အောက်ကားနှင့် သက်ဆိုင်သည့် ထောင့်မှာ အောက်ပါအတိုင်း ဖြစ်ပါသည်။
42

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 23- ကား၏ ညာဘက်ရှေ့ရွေ့လျားမှု၏ ဇယားကွက် သည် အားကစားလက်အိတ်များ၏ သဘောထားအရ၊ အောက်စက်၏ ရွေ့လျားမှု၏ ထောင့်ဒီဂရီကို တွက်ချက်ရန် လိုအပ်သည်။ ထို့ကြောင့် ကျွန်ုပ်တို့သည် အောက်ပါသုံးဖက်မြင်ပုံစံကို တည်ဆောက်ခဲ့သည်။
ပုံ 24- အားကစားလက်အိတ်များကိုအခြေခံ၍ စတီရီယိုမော်ဒယ်ပုံစံကားချပ်ကို ကိုယ်စားပြုရန်အဆင်ပြေစေရန်၊ Z-axis ၏အပေါ်ဘက်သြဒီနိတ်စနစ်၏ အပြုသဘောဆောင်သော ဦးတည်ချက် (ရွေ့လျားနေသောလက်အိတ်၏အရှေ့ဘက်) သည် အထက်နှင့် အပြုသဘောဆောင်သော X-axis ဦးတည်ချက် (ညာဘက်ခြမ်း အားကစားလက်စွပ်) ညာဘက်။ ကနဦးအခြေအနေတွင်၊ အားကစားလက်အိတ်များသည် XY နှင့် တူညီသောလီဗာဖြစ်သည်။ ယခုအချိန်တွင် အားကစားလက်အိတ်များ စောင်းနေသည့် ဦးတည်ချက်ကို OB က ကိုယ်စားပြုပြီး Roll Angle (အနက်ရောင်) သည် acceleration vector OB နှင့် XZ လေယာဉ်ပေါ်ရှိ ၎င်း၏ projection (x, 0, z) ကြားထောင့်ဖြစ်ပြီး၊ Pitch angle (ခရမ်းရောင်) သည် YZ လေယာဉ်ပေါ်ရှိ ၎င်း၏ဆွဲအား (0၊ y နှင့် z ကြားထောင့်) ဖြစ်သည်။ အပြာရောင်သည် အားကစားလက်အိတ်များသည် XY လေယာဉ်ပေါ်တွင် ပရိုဂျက်တာ (x, o, y) ကို ပြသသည့် အတိုင်းအတာဖြစ်သည်။ ကားအောက်ပိုင်း၏ စတီယာရင်ထောင့်ကို ထိန်းချုပ်ရန် ဤထောင့်ကို အသုံးပြုသည်။ ယခင် 5.6.1 စမ်းသပ်မှုမှတဆင့် ကျွန်ုပ်တို့သည် Roll and Pitch ကို ရရှိပြီးဖြစ်သည်။ ယခု ကျွန်ုပ်တို့သည် အောက်ပါပုံသေနည်းဖြင့် ဒီဂရီကို တွက်ချက်ပါသည်။ ပုံတွင် BA OA AB OB sin(Pitch) BD OD BD OBsin(Roll)၊
43

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
tandegree FE BD sin(Roll) Roll
OE AB sin(Pitch) Pitch deg deg ree Arctan( Roll )
အပေါ်က Pitch မှာ steering cosine angle ကိုရထားပြီး coefficient ကို သြဒီနိတ်ဒီဂရီအဖြစ် မြှောက်ရပါမယ်။ 180 57.3 အထက်ဖော်ပြပါ ခွဲခြမ်းစိတ်ဖြာမှုသည် ညာဘက်အပေါ်ပိုင်းကဲ့သို့ စောင်းသည့်အခါ ထောင့်ခွဲခြမ်းစိတ်ဖြာမှုတစ်ခုသာဖြစ်သည်။ အလားတူ အားကစားလက်အိတ်ကို ဘယ်ဘက်အရှေ့ဘက်သို့ စောင်းထားသည့်အခါ၊
ပုံ 25- ဘယ်ဘက်အရှေ့ဦးတည်ရာသို့ စောင်းနေသည့် အားကစားလက်အိတ်၏ ဇယားကွက် deg ree arctan( Pitch)*57.3 900
အလားတူ အားကစားလက်အိတ်များကို ဘယ်ဘက်သို့ စောင်းထားသည့်အခါတွင်လည်း လှိမ့်ပါ။
44

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 26- အားကစားလက်အိတ်များ၏ ဘယ်ဘက်အနောက်ဘက်သို့ ဦးတည်သည့် ဇယားကွက် deg ree arctan( Roll )*57.3 1800
Pitch အလားတူ အားကစားလက်အိတ်များကို ညာဘက်အောက်ဘက်သို့ စောင်းထားသည့်အခါတွင်လည်း အလားတူပါပဲ။
ပုံ 27- အားကစားလက်အိတ်များ၏ ညာဘက်အနောက်ဘက်သို့ ဦးတည်သည့် ဇယားကွက်
45

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
deg ree arctan( Pitch)*57.3 2700 လိပ်
အခု ကားရဲ့ အရှိန်ကို ဘယ်လိုထိန်းရမလဲ ဆိုတာ ပြောကြရအောင်။ အထက်ဖော်ပြပါပုံမှ mpu6050 ရှိ အားကစားလက်အိတ်များနှင့် လေယာဉ် XY လေယာဉ်စောင်းထောင့်အတွက်၊ ကျွန်ုပ်တို့သည် အောက်ဖော်ပြပါ လေယာဉ်ကို ကိုယ်စားပြုရန် အသုံးပြုသည်ကို တွေ့နိုင်ပါသည်။

B'OBis သည် အရှိန်ကို ထိန်းချုပ်ရန် ဤစောင်း၏ဒီဂရီကို အသုံးပြုသည့် ကနဦးအခြေအနေနှင့် ဆက်စပ်နေသည့် ယိုင်ခြင်းထောင့်

ကား။

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

OB

OB

EF=BD OE=AB

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

အပေါ်က Arc Angle ပါ။ ကိန်းဂဏန်းကိုလည်း မြှောက်ရန်လိုသည်။ ဤထောင့်၏အကွာအဝေးသည် (0 ~ 90) ဖြစ်သည်။ ကျွန်ုပ်တို့သည် ဤထောင့်ကို ကား၏အရှိန်ထိန်းချုပ်မှုအဖြစ် တိုက်ရိုက်အသုံးပြုသည်။

46

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

float CalculateSpeed(float roll၊ float pitch) {
float inclination = asin(sqrt(roll*roll +pitch*pitch))*Rad; ပြန်လာယိုင်; }

လက်ယိုင်ခြင်း(ပျက်ပြယ်)

{

static int count = 0;

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

ရေတွက် ++;

မြန်နှုန်း = CalculateSpeed(roll, pitch);

if ((-0.2 <= pitch) && (pitch <= 0.2) && (-0.2 <= roll) && (roll <= 0.2)) {

ဒီဂရီ = 90;

SendSpeed ​​= 0;

SendDegree += 90;

} else if ( pitch < 0 && roll < 0 ) {

degree = atan(roll/pitch)*Rad;

SendDegree += ((လက်မှတ်မထိုးထားသော int)(ဒီဂရီ/10))*10;

} else if ( pitch > 0 && roll < 0) {

ဒီဂရီ = atan(-pitch/roll)*Rad + 90;

SendDegree += ((လက်မှတ်မထိုးထားသော int)(ဒီဂရီ/10))*10;

} else if ( pitch > 0 && roll > 0) {

ဒီဂရီ = atan(roll/pitch)*Rad+180;

} else if ( pitch < 0 && roll > 0) {

ဒီဂရီ = atan(-pitch/roll)*Rad + 270;

SendDegree += ((လက်မှတ်မထိုးထားသော int)(ဒီဂရီ/10))*10;

} အခြား {

ဒီဂရီ = 90;

SendSpeed ​​= 0;

SendDegree = 90;

}

SendDegree = (int)(မြန်နှုန်း/10)*10;

အကယ်၍ (ဒီဂရီ < 30 || ဒီဂရီ > 330) {

SendDegree = 0;

}

အကယ်၍ (ရေတွက် >= 3) {

count = 0;

Send_Direction(SendDegree/3);

Send_Speed(SendSpeed);

SendDegree = 0;

SendSpeed ​​= 0;

၇၁၄၀၅ ၀.၀၃၅

}

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

ပရိုတိုကော

ကားကိုထိန်းချုပ်ရန် Bluetooth ကိုသုံးပါ၊ တကယ်တော့ Arduino သို့ ညွှန်ကြားချက်များပေးပို့ရန် Android အက်ပ်ကို အသုံးပြုခြင်းဖြစ်သည်။

ကားကို ထိန်းချုပ်ရန် Bluetooth မှတဆင့် အမှတ်စဉ် အပေါက်။ ကြိုးမဲ့ဆက်သွယ်မှုတွင် မရှိမဖြစ်လိုအပ်သော အရာတစ်ခုဖြစ်သည်။

ပြဿနာက စက်ပစ္စည်းနှစ်ခုကြားက ဆက်သွယ်မှုပါ။ ဒါပေမယ့် သူတို့ကြားမှာ တူညီတဲ့ “ဘာသာစကား” မရှိဘူး၊

ထို့ကြောင့် Android နှင့် အကြား ပြီးပြည့်စုံသော အပြန်အလှန် ဆက်သွယ်မှုကို သေချာစေရန် ဆက်သွယ်ရေး ပရိုတိုကောများကို ဒီဇိုင်းဆွဲရန် လိုအပ်ပါသည်။

ချိတ်ထားတဲ့။ အဓိက လုပ်ငန်းစဉ်မှာ- Android သည် ထိန်းချုပ်မှု အမိန့်ကို အသိအမှတ်ပြုပြီး ၎င်းကို ဖိုင်ထဲတွင် ထည့်သွင်းထားသည်။

သက်ဆိုင်ရာ ပက်ကတ်ကို Bluetooth module (JDY-16) သို့ ပေးပို့ပြီး JDY-16 မှ ဒေတာရရှိပြီး ပေးပို့ရန်၊

Arduino၊ ထို့နောက် Arduino သည် data ကိုခွဲခြမ်းစိတ်ဖြာပြီးနောက်သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကိုလုပ်ဆောင်သည်။ ရက်စွဲပုံစံ

Android တွင် အောက်ပါအတိုင်း ပေးပို့ပါ၊ အဓိကအားဖြင့် အကွက် ၈ ခုပါရှိသည်။

Protocol Data Length Device Type Device Function Control Check Protocol

ခေါင်းစီး

လိပ်စာကုဒ် ဒေတာ အစုလိုက် အဆုံးကုဒ်

အထက်ဖော်ပြပါ နယ်ပယ် 8 ခုတွင်၊ ကိုယ်စားပြုရန်အတွက် ဖွဲ့စည်းတည်ဆောက်ပုံကိုယ်ထည်ကို အသုံးပြုသည်။

typedef struct {
လက်မှတ်မထိုးထားသော char start_code; လက်မှတ်မထိုးထားသော char len; လက်မှတ်မထိုးထားသော char အမျိုးအစား၊ လက်မှတ်မထိုးထားသော char addr; လက်မှတ်မထိုးထားသော short int function; လက်မှတ်မထိုးထားသော char *ဒေတာ; လက်မှတ်မထိုးထားသော အတိုကောက် int sum; လက်မှတ်မထိုးထားသော char end_code; }ST_protocol;

// 8bit 0xAA
// 16 bit // n bit // check sum // 8bit 0x55

“Protocol Header” ဆိုသည်မှာ 0xAA ၏ ယူနီဖောင်းသတ်မှတ်ခြင်းကဲ့သို့သော packet ၏အစဖြစ်သည်။ “ဒေတာအရှည်” ဆိုသည်မှာ ဒေတာ၏အစနှင့်အဆုံးကုဒ်များ၏ တရားဝင်ဒေတာအရှည်မှလွဲ၍ ဆိုလိုသည်။ “စက်ပစ္စည်းအမျိုးအစား” ဆိုသည်မှာ စက်ကိရိယာအမျိုးအစား “စက်ပစ္စည်းလိပ်စာ” ဆိုသည်မှာ ထိန်းချုပ်ရန်အတွက် သတ်မှတ်ထားသည့်လိပ်စာ “Function code” ဆိုသည်မှာ ထိန်းချုပ်ရန်လိုအပ်သည့် စက်ကိရိယာအမျိုးအစားဖြစ်ပြီး၊ ကျွန်ုပ်တို့ လက်ရှိပံ့ပိုးပေးနေသည့် လုပ်ဆောင်ချက်အမျိုးအစားများမှာ အောက်ပါအတိုင်းဖြစ်သည်။

48

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
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 _CONTOROL_FUNC ;
“ဒေတာ” ဆိုသည်မှာ အမြန်နှုန်း၊ ထောင့်ကဲ့သို့သော ကားတစ်စီး၏ သီးခြားထိန်းချုပ်မှုတန်ဖိုးကို ဆိုလိုသည်။ “Checksum” သည် ထိန်းချုပ်မှုညွှန်ကြားချက်၏ မတူညီသော သို့မဟုတ် တွက်ချက်ထားသော ဒေတာဘစ်များ၏ ရလဒ်ဖြစ်သည်။ “ပရိုတိုကော အဆုံးကုဒ်” သည် ဤဒေတာကို လက်ခံရရှိသည့်အခါ ဒေတာအိတ်၏ အဆုံးအပိုင်းဖြစ်သည်၊ ဆိုလိုသည်မှာ ဒေတာပက်ကေ့ကို ပေးပို့ပြီး နောက်ဒေတာပက်ကေ့ကို လက်ခံရန်အတွက် အဆင်သင့်ဖြစ်နေပြီဖြစ်သည်၊ ဤနေရာတွင် ကျွန်ုပ်တို့က ၎င်းကို 0x55 ဟု သတ်မှတ်ထားပါသည်။ ဟောင်းအတွက်ampပြီးပြည့်စုံသော ပက်ကေ့ခ်ျတစ်ခုသည် “AA 070101065000 5F55” ကဲ့သို့ဖြစ်နိုင်သည်၊ ယင်းတွင်- “07” သည် Transmission Data Length 7 bytes ဖြစ်သည်။ “06” သည် မော်တာ၊ LED၊ buzzer ကဲ့သို့သော “စက်ပစ္စည်းအမျိုးအစား” ဖြစ်သည်။ ဤနေရာတွင် 06 သည် ဂီယာအမြန်နှုန်းကို ရည်ညွှန်းပြီး 05 သည် ဂီယာလမ်းကြောင်းကို ရည်ညွှန်းသည်။ “50 (သို့မဟုတ် 0050)” သည် ထိန်းချုပ်ဒေတာဖြစ်ပြီး၊ 0x50 သည် ဆဋ္ဌမကိန်းဂဏန်းတွင် 80 ဖြစ်သည်၊ ဆိုလိုသည်မှာ အမြန်နှုန်းတန်ဖိုးမှာ 80 ဖြစ်သည်။ ဆိုလိုသည်မှာ ဒေတာသည် 05 ဖြစ်ပါက ထိန်းချုပ်မှုလမ်းကြောင်းကို ဆိုလိုသည်မှာ 80 ဒီဂရီ (ရှေ့သို့) ဖြစ်သည်။ “005F” သည် 0x07+0x01+0x01+0x06+0x50=0x5F ဖြစ်သည့် checksum ဖြစ်သည်။ “55” သည် ဒေတာလွှဲပြောင်းမှုအဆုံးသတ်ကို ညွှန်ပြသည့် ပရိုတိုကော၏ အဆုံးကုဒ်ဖြစ်သည်။
49

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။

ပြည့်စုံသောစမ်းသပ်မှု

8.1 Nrf24L01 ကြိုးမဲ့ထိန်းချုပ်မှု
8.1.1 လက်ဟန်ခြေဟန် ထိန်းချုပ်မှု Hummer-bot စမတ်ကားကို ယခင်အခန်း၏ ချိတ်ဆက်မှုမျဉ်းအတိုင်း ချိတ်ဆက်ပါ၊ ထို့နောက် 9v ခြောက်သွေ့သောဘက်ထရီအား ချိတ်ဆက်ပါ
Arduino NANO နှင့် ပရိုဂရမ်ကို ဒေါင်းလုဒ်လုပ်ပါ။ ပါဝါဖွင့်ပြီးနောက်၊ Nrf24L01 မော်ဂျူးသည် Hummer-Bot Nrf24L01 သို့ဒေတာပေးပို့ပြီး Hummer-Bot ဘက်စုံသုံးကားကိုထိန်းချုပ်ရန် လက်အိတ်အနေအထားကို ချိန်ညှိပေးသည့်အတွက် အားကစားလက်အိတ်များဖြင့် ထိန်းချုပ်ထားသည့်ကားကို မွေးဖွားလာပါသည်။
50

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
ပုံ 28- အောက်ကွန်ပြူတာ၏ Gesture control hummer-bot ပရိုဂရမ်လင့်ခ်- https://github.com/keywish/keywish-hummer-bot-Hummer-Bot-Multi-function ကားဝယ်ယူမှု link ကို Amazon တွင်ဝယ်ယူပါ။
https://www.amazon.com/dp/B078WM15DK ထိန်းချုပ်သရုပ်ပြဗီဒီယို Gesture-MotionTrackingvideoControl_Hunner-bot.mp4 8.1.2 လက်ဟန်ထိန်းချုပ်မှု Beetle-bot စမတ်ကား
ပုံ 29- Beetle-bot ပေါ်ရှိ Beetle-bot အချက်အလက်ကို လက်ဟန်ခြေဟန်ဖြင့် ထိန်းချုပ်ပါ။ https://github.com/keywish/keywish-beetle-bot
51

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
8.2 ဘလူးတုသ် ဆက်သွယ်မှုမုဒ် ထိန်းချုပ်မှု
Bluetooth ကြိုးအတိုင်းချိတ်ဆက်ပါ၊ ထို့နောက် 9v ခြောက်သွေ့သောဘက်ထရီကို Arduino NANO သို့ ချိတ်ဆက်ပြီး ပရိုဂရမ် (MotionTrackLessonMotionTrack_Bluetooth MotionTrack_Bluetooth.ino) ကို ဒေါင်းလုဒ်လုပ်ပါ။ အောက်ကွန်ပြူတာ၏ Bluetooth ၏ MAC လိပ်စာကို ပြင်ဆင်ရန် လိုအပ်ကြောင်း သတိပြုပါ။ ပါဝါဖွင့်ပြီးနောက်၊ အားကစားလက်အိတ်များသည် ကား၏ဘလူးတုသ် module သို့ အလိုအလျောက်ချိတ်ဆက်သည်။
52

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
8.2.1 Gesture ထိန်းချုပ်မှု Aurora-Racing
ပုံ 30- Gesture Control Aurora-Racing ထုတ်ကုန်အချက်အလက်- https://github.com/keywish/Aurora-Racing ထုတ်လုပ်ရေး ဗီဒီယို- giteeMotionTrackvideo Control_RacingCar.mp4
53

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
8.2.2 အမူအရာထိန်းချုပ်မှု Panther-tank
ပုံ 31- လက်ဟန်ခြေဟန်ဖြင့် ထိန်းချုပ်ခြင်း Pather-tank Panther-tank ထုတ်လုပ်ရေးပစ္စည်းများအတွက်၊ https://github.com/keywish/keywish-panther-tank
54

သင့်အား စံပြပျော်စရာဖြစ်စေပါ။
8.2.3 လက်ဟန်ခြေဟန်ချက်ထိန်း ဟန်ချက်ထိန်းကားတစ်စီး
ပုံ 32- လက်ဟန်ခြေဟန်ဖြင့် ထိန်းချုပ်မှု Mini balance-car Balance ထုတ်ကုန်အချက်အလက်အတွက် ကျေးဇူးပြု၍ ကိုးကားပါ။ https://github.com/keywish/mini-balance-car
55

စာရွက်စာတမ်းများ / အရင်းအမြစ်များ

Makefun MPU6050 Arduino Gesture Motion Tracking [pdf] ညွှန်ကြားချက်လက်စွဲ
MPU6050 Module၊ JDY-16 Bluetooth Module၊ NRF24L01 Module၊ MPU6050 Arduino Gesture Motion Tracking၊ MPU6050၊ Arduino Gesture Motion Tracking၊ Gesture Motion Tracking၊ Motion Tracking၊ ခြေရာခံခြင်း

ကိုးကား

မှတ်ချက်တစ်ခုချန်ထားပါ။

သင့်အီးမေးလ်လိပ်စာကို ထုတ်ပြန်မည်မဟုတ်ပါ။ လိုအပ်သောအကွက်များကို အမှတ်အသားပြုထားသည်။ *