និមិត្តសញ្ញា Makefun

Makefun MPU6050 Arduino ការតាមដានចលនាកាយវិការ

Makefun-MPU6050-Arduino-កាយវិការ-ចលនា-តាមដាន-ផលិតផល

ព័ត៌មានអំពីផលិតផល

លក្ខណៈបច្ចេកទេស

  • ឈ្មោះផលិតផល៖ Gesture-MotionTracking
  • កំណែ៖ V.1.2
  • ឃ្លាំង Github៖ តំណ Github

ការណែនាំអំពីបញ្ជីឧបករណ៍

ឧបករណ៍ដែលត្រូវការសម្រាប់ប្រើ Gesture-MotionTracking គឺ៖

  • ម៉ូឌុល MPU6050
  • ម៉ូឌុលប៊្លូធូស JDY-16
  • ម៉ូឌុល NRF24L01+
  • ក្រុមប្រឹក្សាភិបាលចម្បង Arduino NANO
  • បន្ទះនំបុ័ងខ្នាតតូច
  • ស្រោមដៃ
  • បន្ទាត់ DuPont ពីបុរសទៅស្ត្រី
  • ថ្ម

ការណែនាំអំពីការប្រើប្រាស់ផលិតផល

ការណែនាំអំពីដំណើរការ NANO

ការផ្គត់ផ្គង់ថាមពល

  • Arduino Nano អាចត្រូវបានបំពាក់ដោយចំណុចប្រទាក់ mini-B USB ការផ្គត់ផ្គង់ថាមពលខាងក្រៅ 7 ~ 12V DC តាមរយៈការតភ្ជាប់ vin ។

ការចងចាំ

  • ATmega168/ATmega328 នៅលើ Nano មានអង្គចងចាំ Flash 16KB/32KB, 1KB/2KB SRAM និង 0.5KB/1KB EEPROM។

ការបញ្ចូលនិងទិន្នផល

  • ណាណូមានច្រក I/O ឌីជីថលចំនួន 14 រន្ធបញ្ចូលអាណាឡូកចំនួន 6 និងម្ជុលជាក់លាក់សម្រាប់មុខងារផ្សេងៗដូចជាការទំនាក់ទំនងសៀរៀល ការរំខាន លទ្ធផល PWM SPI ជាដើម។

ចំណុចប្រទាក់ទំនាក់ទំនង

  • Nano គាំទ្រការទំនាក់ទំនងសៀរៀលតាមរយៈ UART និងមាន SPI និង I2C bus ចំណុចប្រទាក់ដែលត្រូវគ្នា។

កម្មវិធីទាញយក

  • Nano អាចត្រូវបានសរសេរកម្មវិធីដោយប្រើកម្មវិធី Arduino និងកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ។ កម្មវិធីក៏អាចទាញយកបានតាមរយៈបឋមកថា ICSP ផងដែរ។

ការយកចិត្តទុកដាក់

  • Nano មានលក្ខណៈពិសេសការរចនាកំណត់ឡើងវិញដោយស្វ័យប្រវត្តិសម្រាប់ការកំណត់កម្មវិធីឡើងវិញយ៉ាងងាយស្រួលដោយមិនចាំបាច់មានអន្តរាគមន៍ដោយដៃ។

សំណួរគេសួរញឹកញាប់

សំណួរដែលសួរញឹកញាប់

  • Q: តើខ្ញុំអាចស្វែងរកបច្ចុប្បន្នភាពចុងក្រោយបំផុត ឬធនធានបន្ថែមសម្រាប់ Gesture-MotionTracking នៅឯណា?
    • A: អ្នកអាចពិនិត្យមើលឃ្លាំង Github ផ្លូវការនៅតំណដែលបានផ្តល់សម្រាប់ការធ្វើបច្ចុប្បន្នភាព និងធនធាន។
  • Q: តើខ្ញុំផ្តល់ថាមពលដល់ Arduino Nano យ៉ាងដូចម្តេច?
    • A: អ្នកអាចផ្តល់ថាមពលដល់ Nano ដោយប្រើចំណុចប្រទាក់ mini-B USB ឬការផ្គត់ផ្គង់ថាមពលខាងក្រៅ 7 ~ 12V DC ដែលភ្ជាប់តាមរយៈ pin pin ។

“`

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

1. ការណែនាំអំពីបញ្ជីឧបករណ៍
ឧបករណ៍ដែលត្រូវការត្រូវបានបង្ហាញក្នុងតារាងខាងក្រោម។ ម៉ូឌុល MPU6050
ម៉ូឌុលប៊្លូធូស JDY-16 NRF24L01+
ស្រោមដៃក្តារនំបុ័ងខ្នាតតូច Arduino NANO Main Control Board
ថ្មខ្សែ DuPont ពីបុរសទៅស្ត្រី

1 1 2 1 2 1 ច្រើន 1

រូបភាពទី 1: បញ្ជីឧបករណ៍
4

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
2. ការណែនាំអំពីដំណើរការ NANO
Arduino Nano microprocessor គឺ ATmega328 (Nano3.0) ជាមួយនឹង USB-mini interface ដែលមាន 14 digital input/output pins (6 ដែលអាចប្រើជា PWM output) 8 analog inputs និង 16 MHz ceramic resonator, 1 mini-B USB connection, an ICSP header និងប៊ូតុងកំណត់ឡើងវិញ។ ប្រព័ន្ធដំណើរការ ATmega328 Working voltage 5v បញ្ចូលវ៉ុលtage (បានណែនាំ) 7-12v បញ្ចូលវ៉ុលtage (ជួរ) 6-20v ឌីជីថល IO pin 14 (6 ដែលអាចប្រើជាលទ្ធផល PWM) រន្ធបញ្ចូលអាណាឡូក 6 IO pin DC 40 mA Flash Memory 16 ឬ 32 KB (ក្នុងនោះ 2 KB សម្រាប់កម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ) SRAM 1KB ឬ 2KB EEPROM 0.5 KB ទៅ ច្រក USB 1KB ឬ 328KB នាឡិកា 340 MHz
2.1 ការផ្គត់ផ្គង់ថាមពល
របៀបផ្គត់ផ្គង់ថាមពល Arduino Nano៖ ការផ្គត់ផ្គង់ថាមពលចំណុចប្រទាក់ USB mini-B និងការតភ្ជាប់ vin ខាងក្រៅ 7 ~ 12V ការផ្គត់ផ្គង់ថាមពល DC ខាងក្រៅ
2.2 ការចងចាំ
ATmega168/ATmega328 រួមបញ្ចូលនៅលើបន្ទះឈីប 16KB/32KB Flash ដែលក្នុងនោះ 2KB ត្រូវបានប្រើសម្រាប់ Bootloader ។ វាក៏មាន 1KB/2KB SRAM និង 0.5KB/1KB EEPROM ផងដែរ។
2.3 ការបញ្ចូលនិងទិន្នផល
ច្រកបញ្ចូល និងទិន្នផលឌីជីថលចំនួន 14៖ វ៉ុលការងារtage គឺ 5V ហើយឆានែលនីមួយៗអាចបញ្ចេញនិងចូលប្រើចរន្តអតិបរមា 40mA ។ ឆានែលនីមួយៗត្រូវបានបំពាក់ដោយភាពធន់នឹងការទាញខាងក្នុង 20-50K ohm (មិនភ្ជាប់តាមលំនាំដើម) ។ លើសពីនេះទៀតម្ជុលខ្លះមានមុខងារជាក់លាក់។
សញ្ញាសៀរៀល RX (0), TX (1): វាផ្តល់សញ្ញាទទួលច្រកសៀរៀលជាមួយ TTL voltagកម្រិត e ភ្ជាប់ទៅម្ជុលដែលត្រូវគ្នានៃ FT232Rl ។
ការរំខានខាងក្រៅ (លេខ 2 និងលេខ 3)៖ ម្ជុលរំខានដែលអាចត្រូវបានកំណត់ទៅជាគែមកើនឡើង គែមធ្លាក់ ឬកេះក្នុងពេលដំណាលគ្នា។
Pulse Width Modulation PWM (3, 5, 6, 9, 10, 11): ផ្តល់ 6 channel, 8-bit PWM outputs។
5

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
SPI10(SS)11(MOSI)12(MISO)13(SCK): SPI ចំណុចប្រទាក់ទំនាក់ទំនង។ LED (លេខ 13): Arduino ត្រូវបានប្រើជាពិសេសដើម្បីសាកល្បងចំណុចប្រទាក់ដែលបានបម្រុងទុកនៃ LED ។ នៅពេលដែលទិន្នផលគឺ
ខ្ពស់ LED ត្រូវបានភ្លឺ។ នៅពេលដែលទិន្នផលទាប LED ត្រូវបានបិទ។ 6 ការបញ្ចូលអាណាឡូក A0 ទៅ A5: ឆានែលនីមួយៗមានគុណភាពបង្ហាញ 10 ប៊ីត (នោះគឺការបញ្ចូលមាន 1024 ផ្សេងគ្នា
តម្លៃ) ជួរសញ្ញាបញ្ចូលលំនាំដើមគឺ 0 ទៅ 5V ហើយដែនកំណត់ខាងលើនៃធាតុបញ្ចូលអាចត្រូវបានកែតម្រូវដោយ AREF ។ លើសពីនេះទៀតម្ជុលខ្លះមានមុខងារជាក់លាក់។ ចំណុចប្រទាក់ TWI (SDA A4 និង SCL A5): គាំទ្រចំណុចប្រទាក់ទំនាក់ទំនង (អាចប្រើបានជាមួយឡានក្រុង I2C) ។ AREF: ឯកសារយោងលេខtage នៃសញ្ញាបញ្ចូលអាណាឡូក។ កំណត់ឡើងវិញបន្ទះឈីប microcontroller ត្រូវបានកំណត់ឡើងវិញនៅពេលដែលសញ្ញាមានកម្រិតទាប។
2.4 ចំណុចប្រទាក់ទំនាក់ទំនង
ច្រកសៀរៀល៖ UART ដែលភ្ជាប់មកជាមួយនៃ ATmega328 អាចទំនាក់ទំនងជាមួយច្រកសៀរៀលខាងក្រៅតាមរយៈច្រកឌីជីថល 0 (RX) និង 1 (TX) ។
2.5 កម្មវិធីទាញយក
MCU នៅលើ Arduino Nano មានកម្មវិធី bootloader ដូច្នេះអ្នកអាចទាញយកកម្មវិធីដោយផ្ទាល់ពីកម្មវិធី Arduino ។ អ្នកក៏អាចទាញយកកម្មវិធីដោយផ្ទាល់ទៅ MCU តាមរយៈបឋមកថា ICSP នៅលើ Nano ។
2.6 យកចិត្តទុកដាក់
Arduino Nano ផ្តល់នូវការរចនាកំណត់ឡើងវិញដោយស្វ័យប្រវត្តិដែលអាចកំណត់ឡើងវិញដោយម៉ាស៊ីន។ នៅក្នុងវិធីនេះ កម្មវិធីអាចកំណត់ឡើងវិញដោយស្វ័យប្រវត្តិដោយកម្មវិធី Arduino នៅក្នុងកម្មវិធីទៅជា Nano ដោយមិនចាំបាច់ចុចប៊ូតុងកំណត់ឡើងវិញនោះទេ។

ការណែនាំអំពី Blumodule

សេចក្តីផ្តើម Blumodule JDY-16

3.1 លក្ខណៈពិសេស
ការបញ្ជូនថ្លាល្បឿនលឿន BLE គាំទ្រការទំនាក់ទំនងអត្រា 8K Bytes ។ ផ្ញើ និងទទួលទិន្នន័យដោយគ្មានដែនកំណត់បៃ គាំទ្រអត្រា baud 115200 បន្តបញ្ជូន និងទទួលទិន្នន័យ។ គាំទ្ររបៀបការងារចំនួន 3 (សូមមើលការពិពណ៌នានៃមុខងារការណែនាំ AT+STARTEN)។ ការគាំទ្រ (ច្រកសៀរៀល, IO, APP) ការគេងភ្ញាក់ឡើង ការគាំទ្រ WeChat Airsync, អាប់ភ្លេត WeChat និងការទំនាក់ទំនង APP ។ គាំទ្រការគ្រប់គ្រងច្រក IO 4 ឆានែល និងនាឡិកា RTC ភាពជាក់លាក់ខ្ពស់។ គាំទ្រមុខងារ PWM (អាចត្រូវបានគ្រប់គ្រងដោយ UART, IIC, APP ។ល។) គាំទ្ររបៀបទំនាក់ទំនង UART និង IIC ដែលជាលំនាំដើមចំពោះការទំនាក់ទំនង UART ។ របៀប iBeacon (គាំទ្រពិធីការអង្រួន WeChat និងពិធីការ iBeacon របស់ Apple) ។
6

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
របៀបបញ្ជូនតម្លាភាពរបស់ម្ចាស់ផ្ទះ (ការបញ្ជូនទិន្នន័យរវាងម៉ូឌុលកម្មវិធី ទំនាក់ទំនងម៉ាស៊ីន និងទាសករ)។
ការកំណត់រចនាសម្ព័ន្ធម៉ូឌុលទំនាក់ទំនងឥតខ្សែ

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

រូបភាពទី 2៖ ផែនទីរូបវន្តម៉ូឌុល JDY-16 (1) ខ្សែនៃ Nano និង JDY-16

ម៉ូឌុល JDY-16

Arduino NANO

វី.ស៊ី.ស៊ី

5V

GND

GND

RXD

D2

TXD

D3

STAT

NC

PWRC

NC

ទាញយកកម្មវិធី MotionTrackJDY-16AT_CMD AT_CMD.ino

(2) តម្រូវការកំណត់រចនាសម្ព័ន្ធ៖

អនុវត្តការចងមេ-ទាសករនៃម៉ូឌុលប៊្លូធូស JDY-16 ចំនួនពីរ។

3.2 ជំហានប្រតិបត្តិការ

1. ភ្ជាប់ម៉ូឌុល Nano និង JDY-16 ជាមួយនឹងបន្ទាត់ DuPont ។ 2. បញ្ចូលរបៀបបញ្ជា AT ភ្ជាប់កម្មវិធីទាញយកទៅកុំព្យូទ័រ ហើយបើកជំនួយការច្រកសៀរៀល។ កំណត់អត្រា baud ទៅ 9600 ប៊ីតទិន្នន័យទៅ 8 ប៊ីត ប៊ីតឈប់ទៅ 1 ប៊ីត និងមិនមានប៊ីតស្មើ។

7

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
ការទំនាក់ទំនងសាកល្បង៖ ផ្ញើ៖ នៅខាងក្រោយ៖ យល់ព្រម
រូបភាពទី 3៖ Send AT Command Diagram 3. Send: AT+HOSTEN1rn ————– កំណត់ Bluetooth ជាទម្រង់សំខាន់ ត្រលប់ក្រោយ៖ OK Back: OK
8

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
រូបភាពទី 4៖ ការកំណត់របៀបម៉ាស៊ីន 4. ស្កេនប៊្លូធូស JDY-16 ជុំវិញ៖ 1. ការបញ្ជូនទាសករ៖ AT+SCANrn ————— សួរអាសយដ្ឋានផ្ទាល់ខ្លួនរបស់ទាសករ ត្រឡប់មកវិញ៖ យល់ព្រម +DEV:1=3CA5090A160F, -62, JDY-16 +STOP:SCAN
រូបភាពទី 5៖ ការសាកសួរឧបករណ៍ប៊្លូធូស 5. ភ្ជាប់ប៊្លូធូស
ម៉ាស៊ីនផ្ញើ៖ AT+CONN3CA5090A160Frn ————— Host binding slave address ត្រលប់ក្រោយ៖ យល់ព្រម ភ្ជាប់ទៅការផ្គត់ផ្គង់ថាមពល ប៊្លូធូសទាំងពីរអាចភ្ជាប់ទៅគ្នាទៅវិញទៅមក បញ្ជូនទិន្នន័យតាមរយៈ host Bluetooth slave Bluetooth អាចទទួលទិន្នន័យដូចគ្នា។ ឬអ្នកអាចសរសេរកម្មវិធីដោយផ្ទាល់នូវនីតិវិធីកំណត់រចនាសម្ព័ន្ធមេ-ទាសករដែលបានរៀបចំ ដើម្បីកំណត់ Master-slave Bluetooth បន្ទាប់មកម៉ាស៊ីនកម្មវិធីដំណើរការនីតិវិធីតភ្ជាប់ និងភ្ជាប់ដោយស្វ័យប្រវត្តិ។ (ចំណាំថាមានតែម៉ូឌុលប៊្លូធូសរបស់ JDY-16 ប៉ុណ្ណោះដែលអាចភ្ជាប់ដោយស្វ័យប្រវត្តិនៅពេលបច្ចុប្បន្ន)
9

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
3.3 វិធីសាស្រ្តតភ្ជាប់នៃ Nano និង JDY-16
រូបភាពទី 6: ដ្យាក្រាមតភ្ជាប់ Nano និង JDY-16

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

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

ការណែនាំអំពីម៉ូឌុលឥតខ្សែ NRF24L01

ការណែនាំអំពីម៉ូឌុលឥតខ្សែ NRF24L01

ម៉ូឌុល nRF24L01+ គឺជាម៉ូឌុលទំនាក់ទំនងឥតខ្សែ 2.4G ដែលបង្កើតឡើងដោយ Nordic ដោយផ្អែកលើបន្ទះឈីប nRF24L01 ។ ទទួលយកការកែប្រែ FSK និងរួមបញ្ចូលពិធីការការផ្ទុះខ្លីដែលប្រសើរឡើងផ្ទាល់របស់ Nordic ។ ការទំនាក់ទំនងឥតខ្សែ Pointto-point ឬ 1-to-6 អាចសម្រេចបាន។ ល្បឿនទំនាក់ទំនងឥតខ្សែអាចឡើងដល់ 2M (bps)។ NRF24L01 មានរបៀបប្រតិបត្តិការចំនួនបួន៖ របៀបបញ្ជូនសញ្ញា របៀបកំណត់រចនាសម្ព័ន្ធ របៀបទំនេរ និងរបៀបបិទ។ ផែនទីរូបវន្តដែលប្រើក្នុងការពិសោធន៍នេះគឺនៅផ្នែកខាងឆ្វេងនៃរូបភាពទី 7 ។ សម្រាប់ការទទួលប្រកបដោយស្ថេរភាពនៃបង្កាន់ដៃ Nrf24L01 វាត្រូវបានណែនាំឱ្យភ្ជាប់កុងទ័រ 10uf រវាង VCC និង GUD ដូចដែលបានបង្ហាញនៅខាងស្តាំ។
រូបភាពទី 7៖ ផែនទីរូបវន្ត Nrf24l01+ និងដ្យាក្រាម solder
4.1 លក្ខណៈពិសេសម៉ូឌុល
2.4GHz ទំហំតូច 15x29mm រួមទាំងអង់តែន គាំទ្រការទទួលទិន្នន័យប្រាំមួយឆានែល វ៉ុលដំណើរការទាបtage: 1.93.6V អត្រាផ្ទេរទិន្នន័យគាំទ្រ៖ 1Mbps2Mbps ការប្រើប្រាស់ថាមពលទាប ការរចនាបច្ចុប្បន្នកំពុងដំណើរការនៅពេលទទួលគឺ 12.3mA, 11.3mA នៅថាមពល 0dBm
ការបំភាយ 900nA នៅរបៀបបិទថាមពល មុខងារបញ្ជូនឡើងវិញដោយស្វ័យប្រវត្តិ ការរកឃើញដោយស្វ័យប្រវត្តិ និងការបញ្ជូនឡើងវិញនៃកញ្ចប់ទិន្នន័យដែលបាត់។
ពេលវេលាបញ្ជូនបន្ត និងពេលវេលាបញ្ជូនបន្តអាចត្រូវបានគ្រប់គ្រងដោយកម្មវិធី មុខងារឆ្លើយតបដោយស្វ័យប្រវត្តិ បន្ទាប់ពីទទួលបានទិន្នន័យត្រឹមត្រូវ ម៉ូឌុលនឹងផ្ញើចម្លើយដោយស្វ័យប្រវត្តិ។
សញ្ញាការរកឃើញកំហុសផ្នែករឹង CRC ដែលភ្ជាប់មកជាមួយ និងការគ្រប់គ្រងអាសយដ្ឋានទំនាក់ទំនងពីចំណុចទៅពហុចំណុច ព័ត៌មានលម្អិតអំពីបន្ទះឈីប NRF24L01 សូមយោងទៅ tonRF24L01 Datasheet.pdf
11

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
ខ្ទាស់ព័ត៌មាន

រូបភាពទី 8៖ ដ្យាក្រាមព័ត៌មានម្ជុល Nrf24L01

និមិត្តសញ្ញាពិន

មុខងារ

ទិសដៅ

៣ ជី

GND

2

+5V

ការផ្គត់ផ្គង់ថាមពល

3

CE

បន្ទាត់ត្រួតពិនិត្យនៅក្នុងរបៀបធ្វើការ

IN

4

បន្ទះឈីប CSN ជ្រើសរើសសញ្ញា, កម្រិតទាបធ្វើការ

IN

5

អេសខេ

នាឡិកាអេសអាយ

IN

6 MOSI

ការបញ្ចូល SPI

IN

៧ MISO

លទ្ធផល SPI

ចេញ

8

IPQ

រំខានទិន្នផល

ចេញ+

4.2 គោលបំណងពិសោធន៍
1. ស្វែងយល់អំពីម៉ូឌុល nRF24L01+ និងរបៀបភ្ជាប់ជាមួយ Arduino ។ 2. របៀបប្រើម៉ូឌុល arduino និង nRF24L01+ ដើម្បីបញ្ចប់ការទទួល និងបញ្ជូនទិន្នន័យ។

4.3 សមាសធាតុដែលត្រូវការសម្រាប់ការពិសោធន៍នេះ។
Arduino UNO R3 Motherboard Arduino NANO Motherboard nRF24L01 ម៉ូឌុល * 2 ខ្សែជាច្រើន
12

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
4.4 ដ្យាក្រាមគំនូសតាងពិសោធន៍

រូបភាពទី 9: ដ្យាក្រាមតភ្ជាប់ Nano និង Nrf24L01

របៀបនៃការតភ្ជាប់ Arduino និង NRF24L01

អាឌុយណូណាណូ

nRF24L01

+3.3V

វី.ស៊ី.ស៊ី

GND

GND

7 ម្ជុល

4pin CSN

4 ម្ជុល

3 pin CE

11 ម្ជុល

6 pin MOSI

12 ម្ជុល

7 pin MISO

13 ម្ជុល

5 pin SCK

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

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

13

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

13 ម្ជុល

5 pin SCK

4.4 គោលការណ៍កម្មវិធី
ដំណើរការដំណើរការ 1 ជាដំបូង កំណត់រចនាសម្ព័ន្ធ nRF24L01 ដើម្បីបញ្ជូនមុខងារ។ 2 បន្ទាប់មកសរសេរអាសយដ្ឋាន TX_ADDR នៃចុងទទួល និងទិន្នន័យ TX_PLD ដែលត្រូវបញ្ជូនទៅតំបន់បណ្ដោះអាសន្ន nRF24L01 ដោយច្រក SPI តាមលំដាប់ពេលវេលា។ 3Arduino កំណត់រចនាសម្ព័ន្ធ CE ឱ្យខ្ពស់យ៉ាងហោចណាស់ 10 វិនាទី ហើយបញ្ជូនទិន្នន័យបន្ទាប់ពីការពន្យារពេល 130 វិនាទី។ ប្រសិនបើចម្លើយដោយស្វ័យប្រវត្តិបើក នោះ nRF24L01 ចូលទៅក្នុងរបៀបទទួលភ្លាមៗបន្ទាប់ពីបញ្ជូនទិន្នន័យ និងទទួលសញ្ញាចម្លើយ។ ប្រសិនបើការឆ្លើយតបត្រូវបានទទួល ការទំនាក់ទំនងត្រូវបានចាត់ទុកថាជោគជ័យ។ 4NRF24L01 នឹងកំណត់ TX_DS ខ្ពស់ដោយស្វ័យប្រវត្តិ ហើយ TX_PLD នឹងត្រូវបានជម្រះចេញពីជង់បញ្ជូន។ ប្រសិនបើគ្មានការឆ្លើយតបទេ ទិន្នន័យនឹងត្រូវបានបញ្ជូនឡើងវិញដោយស្វ័យប្រវត្តិ។ ប្រសិនបើចំនួននៃការបញ្ជូនឡើងវិញ (ARC_CNT) ឈានដល់ដែនកំណត់ខាងលើ MAX_RT ត្រូវបានកំណត់ខ្ពស់ ហើយ TX_PLD នឹងមិនត្រូវបានសម្អាតទេ។ MAX_RT នៅពេលដែល TX_DS ត្រូវបានកំណត់ខ្ពស់ IRQ ថយចុះដើម្បីបង្កការរំខាន MCU ។ នៅពេលដែលការបញ្ជូនចុងក្រោយបានជោគជ័យ ប្រសិនបើ CE ទាប នោះ nRF24L01 នឹងចូលទៅក្នុងរបៀបរង់ចាំ។ 5 ប្រសិនបើមានទិន្នន័យនៅក្នុងជង់បញ្ជូន ហើយ CE មានកម្រិតខ្ពស់ ការបញ្ជូនបន្ទាប់ត្រូវបានចាប់ផ្តើម។ ប្រសិនបើមិនមានទិន្នន័យនៅក្នុងជង់បញ្ជូន ហើយ CE ខ្ពស់នោះ nRF24L01 នឹងចូលទៅក្នុងរបៀបរង់ចាំ 2. ទទួលដំណើរការទិន្នន័យ 1នៅពេល nRF24L01 ទទួលបានទិន្នន័យ សូមកំណត់រចនាសម្ព័ន្ធ nRF24L01 ដើម្បីទទួលបានរបៀបដំបូង។ 2 បន្ទាប់មកពន្យារពេល 130s ចូលទៅក្នុងស្ថានភាពទទួល ដើម្បីរង់ចាំការមកដល់នៃទិន្នន័យ។ នៅពេលអ្នកទទួលរកឃើញអាសយដ្ឋានត្រឹមត្រូវ និង CRC វារក្សាទុកកញ្ចប់ទិន្នន័យនៅក្នុងជង់អ្នកទទួល។ ក្នុងពេលជាមួយគ្នានោះ សញ្ញារំខាន RX_DR ត្រូវបានកំណត់ខ្ពស់ ហើយ IRQ ថយចុះដើម្បីជូនដំណឹងដល់ MCU ដើម្បីទាញយកទិន្នន័យ។ 3 ប្រសិនបើការឆ្លើយតបដោយស្វ័យប្រវត្តិត្រូវបានបើកនៅពេលនេះ អ្នកទទួលនឹងបញ្ចូលស្ថានភាពបញ្ជូនសញ្ញាឆ្លើយតបអេកូក្នុងពេលតែមួយ។ នៅពេលដែលការទទួលចុងក្រោយបានជោគជ័យ ប្រសិនបើ CE ធ្លាក់ចុះ នោះ nRF24L01 នឹងចូលទៅក្នុងរបៀបទំនេរ 1។
កម្មវិធីតេស្តឧបករណ៍បញ្ជូនសញ្ញា nRF24L01 សូមយោងទៅ “កម្មវិធី MotionTracknRF24l01+”

14

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

Mpu6050 សេចក្តីផ្តើម

MPU6050 គឺជាសមាសធាតុដំណើរការចលនា 6 អ័ក្សដំបូងគេរបស់ពិភពលោក ជាមួយនឹង gyroscope 3-axis រួមបញ្ចូលគ្នា និង 3-axis accelerator ។ វាអាចភ្ជាប់ទៅឧបករណ៍ចាប់សញ្ញាម៉ាញេទិក ឬដំណើរការចលនាឌីជីថល (DMP) របស់ឧបករណ៍ចាប់សញ្ញាផ្សេងទៀតតាមរយៈច្រក I2C ទីពីរ។ ម៉ាស៊ីនបង្កើនល្បឿនផ្នែករឹងចេញជាចម្បងនូវបច្ចេកទេសគណនា 9-axis fusion fusion ទៅកាន់ host MCU ក្នុងទម្រង់នៃការស្ទ្រីមទិន្នន័យតែមួយដោយច្រក I2C ។
បន្ទះឈីប MPU6050 ភ្ជាប់មកជាមួយម៉ូឌុលរងដំណើរការទិន្នន័យ DMP មានក្បួនដោះស្រាយតម្រងផ្នែករឹងដែលភ្ជាប់មកជាមួយ ដោយប្រើទិន្នន័យលទ្ធផល DMP អាចបំពេញតម្រូវការបានយ៉ាងល្អនៅក្នុងកម្មវិធីជាច្រើន។ យើងមិនត្រូវការកម្មវិធីរបស់យើងដើម្បីធ្វើការត្រងទេ។ វគ្គសិក្សានេះនឹងបង្កើតស្រោមដៃកីឡាពេញលេញដោយផ្អែកលើការអាន DMP ជាទិន្នន័យលទ្ធផលតាមរយៈ Arduino ។
រូបភាពទី 10៖ ផែនទីរូបវន្តរបស់ម៉ូឌុល mpu6050
លក្ខណៈពិសេស ទិន្នន័យគណនារួមបញ្ចូលគ្នានៃលទ្ធផលឌីជីថលនៃ 6 axis ឬ 9 axis rotation matrix, quaternion និង Euler
ទម្រង់មុំ។ ឧបករណ៍ចាប់សញ្ញាល្បឿនមុំ 3-axis (gyroscope) ជាមួយនឹង 131 LSBs/°/sec sensitivity and full-rangesensing range
នៃ ±250, ±500, ±1000, និង ±2000°/វិ។ ការគ្រប់គ្រងកម្មវិធីបាន ឧបករណ៍បង្កើនល្បឿន 3 អ័ក្សដែលមានជួរគ្រប់គ្រងកម្មវិធីនៃ ± 2g, ± 4g, ± 8g និង ± 16g ។ ម៉ាស៊ីន Digital Motion Processing (DMP) កាត់បន្ថយបន្ទុកនៃទិន្នន័យគណនាស្មុគស្មាញ
ការធ្វើសមកាលកម្មឧបករណ៍ចាប់សញ្ញា និងការចាប់សញ្ញាកាយវិការ។
15

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
មូលដ្ឋានទិន្នន័យដំណើរការចលនាគាំទ្រ Android, Linux និង Windows ។ បច្ចេកទេសក្រិតតាមខ្នាតដែលភ្ជាប់មកជាមួយសម្រាប់គម្លាតពេលវេលាប្រតិបត្តិការ និងឧបករណ៍ចាប់សញ្ញាម៉ាញេទិកលុបបំបាត់ការប្រើប្រាស់'
តម្រូវការបន្ថែមសម្រាប់ការក្រិតតាមខ្នាត។ ឧបករណ៍ចាប់សញ្ញាសីតុណ្ហភាពទិន្នផលឌីជីថល។ វ៉ុលផ្គត់ផ្គង់tage នៃ VDD គឺ 2.5V±5% 3.0V±5% 3.3V±5% ហើយ VDDIO គឺ 1.8V±5%។ ចរន្តប្រតិបត្តិការ gyro: 5mA, gyroscope standby current: 8A; ចរន្តដំណើរការរបស់ឧបករណ៍បង្កើនល្បឿន៖ 8A,
របៀបសន្សំថាមពលរបស់ឧបករណ៍បង្កើនល្បឿនបច្ចុប្បន្ន៖ 8A@10Hz ។ របៀបលឿនរហូតដល់ 400kHz I2C ឬរហូតដល់ 20MHz SPI serial host interface។ កញ្ចប់តូចបំផុត និងស្តើងបំផុតសម្រាប់ផលិតផលចល័ត (4x4x0.9mm QFN) ។
5.2 គ្រោងការណ៍ម៉ូឌុល

រូបភាពទី 11៖ គ្រោងការណ៍នៃម៉ូឌុល mpu6050
5.3 ការទំនាក់ទំនងរវាង Nano និង mpu6050

5.3.1 ការតភ្ជាប់សៀគ្វី
ចំណុចប្រទាក់ទិន្នន័យនៃម៉ូឌុល MPU6050 រួមបញ្ចូលគ្នាប្រើពិធីការឡានក្រុង I2C ដូច្នេះយើងត្រូវការជំនួយពីបណ្ណាល័យ Wire ដើម្បីទំនាក់ទំនងរវាង NANO និង MPU6050 ។ ការតភ្ជាប់ដែលត្រូវគ្នានៃបន្ទះ NANO មានដូចខាងក្រោម៖

ម៉ូឌុល MPU6050 VCC

Arduino NANO 5V

16

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

GND SCL SDA XDA XCL បន្ថែម INT

GND A5 A4 NC NC NC NC NC/GND

រូបភាពទី 12: ដ្យាក្រាមតភ្ជាប់នៃ Nano និង mpu6050
ការសរសេរ និងអានទិន្នន័យ MPU6050 ត្រូវបានដឹងដោយការចុះឈ្មោះខាងក្នុងរបស់បន្ទះឈីប អាសយដ្ឋានចុះឈ្មោះគឺទាំងអស់ 1 បៃ ពោលគឺ 8 ប៊ីតនៃទំហំអាសយដ្ឋាន។ សូមយោងទៅ “RMMPU-6000A.pdf” 1.1. មុនពេលសរសេរទិន្នន័យទៅឧបករណ៍រាល់ពេល សូមបើករបៀបផ្ទេរខ្សែ និងបញ្ជាក់អាសយដ្ឋានឡានក្រុងរបស់ឧបករណ៍។ អាសយដ្ឋានឡានក្រុងរបស់ MPU6050 គឺ 0x68 (អាសយដ្ឋានគឺ 0x69 នៅពេលម្ជុល AD0 ខ្ពស់)។ បន្ទាប់មកសរសេរបៃនៃអាសយដ្ឋានចាប់ផ្តើមចុះឈ្មោះ ហើយបន្ទាប់មកសរសេរទិន្នន័យនៃប្រវែងណាមួយ។ ទិន្នន័យទាំងនេះនឹងត្រូវបានសរសេរជាបន្តបន្ទាប់ទៅកាន់អាសយដ្ឋានចាប់ផ្តើមដែលបានបញ្ជាក់ ហើយរយៈពេលចុះឈ្មោះបច្ចុប្បន្ននឹងត្រូវបានសរសេរទៅកាន់ការចុះឈ្មោះអាសយដ្ឋានខាងក្រោម។ បិទរបៀបផ្ទេរខ្សែបន្ទាប់ពីបញ្ចប់ការសរសេរ។ សample code សរសេរបៃ 0 ទៅ 0x6B register នៃ MPU6050។
Wire.beginTransmission(0x68); // Strat ការបញ្ជូន MPU6050
17

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
Wire.write(0x6B); // បញ្ជាក់អាសយដ្ឋានចុះឈ្មោះ Wire.write(0); // សរសេរមួយបៃនៃទិន្នន័យ Wire.endTransmission(true); // បញ្ចប់ការផ្ទេរ, ពិតមានន័យថាដោះលែងឡានក្រុង
ការអានទិន្នន័យពី MPU-6050
ការអាន និងការសរសេរគឺដូចគ្នា ដោយដំបូងបើករបៀបផ្ទេរខ្សែ ហើយបន្ទាប់មកសរសេរបៃនៃអាសយដ្ឋានចាប់ផ្តើមចុះឈ្មោះ។ បន្ទាប់មកអានទិន្នន័យនៃអាសយដ្ឋានដែលបានបញ្ជាក់ទៅក្នុងឃ្លាំងសម្ងាត់នៃបណ្ណាល័យ Wire ហើយបិទរបៀបដឹកជញ្ជូន។ ទីបំផុតការអានទិន្នន័យពីឃ្លាំងសម្ងាត់។ ខាងក្រោមនេះ example កូដចាប់ផ្តើមជាមួយនឹងការចុះឈ្មោះ 0x3B នៃ MPU6050 ហើយអានទិន្នន័យ 2 បៃ៖
Wire.beginTransmission(0x68); // Strat ការបញ្ជូននៃ MPU6050 Wire.write(0x3B); // បញ្ជាក់អាសយដ្ឋានចុះឈ្មោះ Wire.requestFrom(0x68, 2, true); // អានទិន្នន័យទៅកាន់ឃ្លាំងសម្ងាត់ Wire.endTransmission(true); // បិទរបៀបបញ្ជូន int val = Wire.read() << 8 | Wire.read(); // ពីរបៃបង្កើតជាចំនួនគត់ 16 ប៊ីត
ការអនុវត្តជាក់លាក់
បណ្ណាល័យ Wire ជាធម្មតាគួរតែត្រូវបានចាប់ផ្តើមនៅក្នុងមុខងារដំឡើង៖ Wire.begin();
អ្នកត្រូវតែចាប់ផ្តើមឧបករណ៍ មុនពេលអ្នកធ្វើប្រតិបត្តិការណាមួយនៅលើ MPU6050 ហើយការសរសេរបៃទៅ 0x6B របស់វានឹងគ្រប់គ្រាន់។ ជាធម្មតាវាត្រូវបានធ្វើនៅក្នុងមុខងារដំឡើង ដូចបង្ហាញក្នុងផ្នែក 1.1។
ទម្រង់ទិន្នន័យ MPU6050
ទិន្នន័យដែលយើងចាប់អារម្មណ៍គឺនៅក្នុងការចុះឈ្មោះ 14 បៃនៃ 0x3B ដល់ 0x48 ។ ទិន្នន័យទាំងនេះនឹងត្រូវបានអាប់ដេតថាមវន្តជាមួយនឹងប្រេកង់អាប់ដេតរហូតដល់ 1000HZ។ អាស័យដ្ឋាននៃការចុះឈ្មោះមូលដ្ឋាន និងឈ្មោះទិន្នន័យត្រូវបានរាយខាងក្រោម។ ចំណាំថាទិន្នន័យនីមួយៗគឺ 2 បៃ។
0x3B សមាសធាតុអ័ក្ស X របស់ឧបករណ៍វាស់ល្បឿនគឺ ACC_X 0x3D សមាសធាតុអ័ក្ស Y របស់ឧបករណ៍វាស់ស្ទង់ល្បឿនគឺ ACC_Y 0x3F សមាសធាតុអ័ក្ស Z របស់ឧបករណ៍វាស់ល្បឿនគឺ ACC_Z 0x41 សីតុណ្ហភាពបច្ចុប្បន្នគឺ TEMP 0x43 ល្បឿនអ័ក្ស Y0x45 ជុំវិញមុំ ល្បឿនមុំជុំវិញអ័ក្ស Y GYR_Y
18

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
0x47, ល្បឿនមុំជុំវិញអ័ក្ស Z GYR_Z និយមន័យកូអរដោនេនៃបន្ទះឈីប MPU6050 គឺ៖ ប្រឈមមុខនឹងបន្ទះឈីបឆ្ពោះទៅរកខ្លួនវា ហើយបង្វែរអត្ថបទផ្ទៃទៅមុំត្រឹមត្រូវ។ នៅពេលនេះ ចំណុចកណ្តាលនៃបន្ទះឈីបត្រូវបានយកជាប្រភពដើម ផ្ដេកទៅខាងស្តាំគឺជាអ័ក្ស X ហើយបញ្ឈរគឺជាអ័ក្ស Y ដែលចង្អុលរបស់អ្នកផ្ទាល់គឺជាអ័ក្ស Z ដូចដែលបានបង្ហាញខាងក្រោម៖
រូបភាពទី 13៖ ការបង្វិល mpu6050 និងដ្យាក្រាមល្បឿនមុំ យើងខ្វល់តែអំពីអត្ថន័យនៃ accelerometer និង angular velocity meter data. ឥឡូវនេះ យើងស៊ាំនឹងការប្រើប្រាស់ mpu6050 តាមរយៈការពិសោធន៍ពីរ។ 5.3.2 ការពិសោធន៍ទី 1 ការអាន Accelerometer
សមាសធាតុអ័ក្សទាំងបីនៃ accelerometer ACC_X, ACC_Y និង ACC_Z គឺជាចំនួនគត់ដែលបានចុះហត្ថលេខា 16 ប៊ីត ដែលបង្ហាញពីការបង្កើនល្បឿននៃឧបករណ៍ក្នុងទិសដៅអ័ក្សបី។ នៅពេលដែលតម្លៃអវិជ្ជមានត្រូវបានគេយក ការបង្កើនល្បឿនគឺអវិជ្ជមានតាមអ័ក្សកូអរដោនេ ហើយតម្លៃវិជ្ជមានគឺវិជ្ជមាន។
សមាសធាតុបង្កើនល្បឿនទាំងបីគឺនៅក្នុងពហុគុណនៃការបង្កើនល្បឿនទំនាញ g ហើយជួរនៃការបង្កើនល្បឿនដែលអាចបង្ហាញបាន នោះគឺការពង្រីកអាចត្រូវបានកំណត់ស្មើៗគ្នា ហើយមានជម្រើសពង្រីកចំនួនបួនគឺ 2g, 4g, 8g និង 16g។ យក ACC_X ជាអតីតample ប្រសិនបើការពង្រីកត្រូវបានកំណត់ទៅ 2g (លំនាំដើម) វាមានន័យថានៅពេលដែល ACC_X យកតម្លៃអប្បបរមា -32768 ការបង្កើនល្បឿនបច្ចុប្បន្នគឺ 2 ដងនៃការបង្កើនល្បឿនទំនាញតាមទិសវិជ្ជមាននៃអ័ក្ស X ហើយដូច្នេះនៅលើ។ ជាក់ស្តែង
19

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

ការពង្រីកកាន់តែទាប ភាពត្រឹមត្រូវកាន់តែប្រសើរ ហើយការពង្រីកកាន់តែខ្ពស់ ជួរកាន់តែធំ ដែលត្រូវបានកំណត់ទៅតាមកម្មវិធីជាក់លាក់។

AFS_SEL 0 1 2 3

ជួរមាត្រដ្ឋានពេញ ± 2g ± 4g ± 8g ± 16g

ភាពរសើប LSB 16384LSB/g 8192LSB/g 4096LSB/g 2048LSB/g

ទំនាក់ទំនងរវាងទិសបង្វិលរបស់ឧបករណ៍វាស់ល្បឿនអ័ក្សបី និងម៉ូឌុលមានដូចខាងក្រោម៖

រូបភាពទី 14៖ ការបង្វិលម៉ូឌុល និងលំនាំការបង្កើនល្បឿន Mpu6050 ទិន្នន័យដែលអានដោយ MPU6050 មានភាពប្រែប្រួល ដូច្នេះចាំបាច់ត្រូវផ្ទៀងផ្ទាត់។ នោះគឺនៅពេលដែលបន្ទះឈីបស្ថិតនៅក្នុងស្ថានភាពស្ថានី ការអាននេះតាមទ្រឹស្តីគួរតែជាសូន្យ។ ប៉ុន្តែវាទំនងជាមានអុហ្វសិត។ សម្រាប់អតីតampដូច្នេះ យើងអានតម្លៃ 200 នៅចន្លោះពេល 10ms ហើយបន្ទាប់មកជាមធ្យមពួកវា។ តម្លៃនេះត្រូវបានគេហៅថាសូន្យអុហ្វសិត។ ការអានដែលបានក្រិតតាមខ្នាតគឺទទួលបានដោយការដកសូន្យអុហ្វសិតពីការអាននីមួយៗ។ ដោយសារតម្លៃទ្រឹស្តីនៃ ACC_X និង ACC_Y គួរតែជាសូន្យ អុហ្វសិតនៃការអានទាំងពីរអាចត្រូវបានក្រិតតាមខ្នាតដោយមធ្យមភាគស្ថិតិ។ ACC_Z ត្រូវតែដំណើរការក្នុងមួយជំហាន។ នៅក្នុងដំណើរការនៃអុហ្វសិតស្ថិតិ ការបង្កើនល្បឿនទំនាញ g នៃអ័ក្ស Z ត្រូវបានដកសម្រាប់ការអាននីមួយៗ។ ប្រសិនបើការពង្រីកការបង្កើនល្បឿនគឺ 2g នោះ 16384 ត្រូវបានដក ហើយបន្ទាប់មកការក្រិតតាមខ្នាតស្ថិតិត្រូវបានអនុវត្ត។ ការក្រិតតាមខ្នាតទូទៅអាចត្រូវបានធ្វើរាល់ពេលដែលប្រព័ន្ធត្រូវបានចាប់ផ្តើម បន្ទាប់មកអ្នកគួរតែធ្វើការដោះដូររវាងភាពត្រឹមត្រូវ និងពេលវេលាចាប់ផ្តើម។
20

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
5.3.2.1 គោលបំណងពិសោធន៍
ដោយការបង្វិល mpu6050 ដើម្បីសង្កេតមើលទំនាក់ទំនងទិន្នន័យលទ្ធផលរវាងអ័ក្សទាំងបីនៃ accelerometer ។
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 ax, ay, az; int16_t gx, gy, gz; រចនាសម្ព័ន្ធ RAW_type accel_zero_offsent; char str[512]; bool blinkState = មិនពិត ; អណ្តែត AcceRatio = 16384.0; float accx,accy,accz;

ការ​កំណត់​ទុក​ជា​មោឃៈ () {

int ខ្ញុំ ;

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

// ចូលរួមជាមួយឡានក្រុង I2C (បណ្ណាល័យ 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 បានបរាជ័យ");

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
សម្រាប់ ( 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() { // អានការវាស់វែង accel/gyro ឆៅពីការពន្យាពេលឧបករណ៍(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 = (អណ្តែត)( ax-accel_zero_offsent.x )/AcceRatio; accy = (អណ្តែត)( ay-accel_zero_offsent.y )/AcceRatio ; accz = (អណ្តែត)( 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. បង្វិល 90 ដឺក្រេជុំវិញអ័ក្ស X នៅពេលដែលអ័ក្ស 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 ពីព្រោះអ័ក្ស Y ស្របតាមទិសដៅទំនាញ ហើយតម្លៃបង្កើនល្បឿនគួរតែអវិជ្ជមាន។ អ័ក្ស Z ថយចុះបន្តិចម្តងៗដល់ 0. 3. ត្រឡប់ទៅទីតាំងដំបូងវិញ។
ពន្យល់ដូចខាងក្រោមៈ បន្ទាប់មកត្រឡប់ទៅទីតាំងដំបូងពី 90 ដឺក្រេបញ្ច្រាស។ នៅពេលនេះទិន្នន័យនៃអ័ក្ស Y និងអ័ក្ស Z ត្រូវបានស្ដារឡើងវិញបន្តិចម្តងៗទៅតម្លៃដំបូង អ័ក្ស Y គឺ 0 និងអ័ក្ស Z គឺ 1 ។
បន្ទាប់ពីការវិភាគការបង្វិលអ័ក្ស X ការបង្វិលអ័ក្ស Y គឺស្រដៀងគ្នា ដូច្នេះយើងនឹងមិននិយាយអំពីវាលម្អិតទេ។ ឥឡូវនេះសូមនិយាយអំពីអ័ក្ស Z ព្រោះនៅពេលបង្វិលជុំវិញអ័ក្ស Z វាស្មើនឹងការបង្វិល 90 ដឺក្រេទៅឆ្វេង និងស្តាំ។ នៅ​ពេល​នេះ លទ្ធផល​នៃ​អ័ក្ស Z គឺ​តែងតែ​ជា 1 ហើយ​អ័ក្ស X និង​អ័ក្ស Y គឺ​ស្រប​ទៅ​នឹង​អ័ក្ស​ទំនាញ ដូច្នេះ​តម្លៃ​លទ្ធផល​គឺ​ទាំងអស់​គឺ 0 ជា​ការ​ពិត​ណាស់​នេះ​ជា​តម្លៃ​ស្ថិត​ក្រោម​លក្ខខណ្ឌ​ឋិតិវន្ត​ដែល​ទាក់ទង។ ប្រសិនបើឧបករណ៍ត្រូវបានដំឡើងនៅលើយានជំនិះ អ័ក្ស X និង Y ប្រហែលជាមិនចាំបាច់ជា 0 នៅពេលដែលរថយន្តកំពុងបត់ឆ្វេង និងស្តាំ។
24

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
លទ្ធផលពិសោធន៍

5.3.3 ការពិសោធន៍ទី 2 ការអានទិន្នន័យពី Gyro

សមាសធាតុល្បឿនមុំ GYR_X, GYR_Y និង GYR_Z ដែលបង្វិលជុំវិញអ័ក្សកូអរដោនេបីនៃ X, Y និង Z គឺជាចំនួនគត់ដែលបានចុះហត្ថលេខា 1 ប៊ីត។ ពីប្រភពដើមទៅអ័ក្សនៃការបង្វិលតម្លៃគឺវិជ្ជមានសម្រាប់ការបង្វិលតាមទ្រនិចនាឡិកានិងអវិជ្ជមានសម្រាប់ការបង្វិលច្រាសទ្រនិចនាឡិកា។ សមាសធាតុល្បឿនមុំបីគឺទាំងអស់គិតជាដឺក្រេ/វិនាទី។ ជួរល្បឿនមុំដែលអាចបង្ហាញបាន ពោលគឺការពង្រីកអាចត្រូវបានកំណត់ស្មើៗគ្នា។ មានការពង្រីកជាជម្រើសចំនួន 4៖ 250 ដឺក្រេ/វិនាទី, 500 ដឺក្រេ/វិនាទី, 1000 ដឺក្រេ/វិនាទី, 2000. ដឺក្រេ/វិនាទី។ យក GYR_X ជាអតីតample ប្រសិនបើការពង្រីកត្រូវបានកំណត់ទៅ 250 ដឺក្រេ/វិនាទី វាមានន័យថានៅពេលដែល GYR យកតម្លៃអតិបរមាវិជ្ជមាននៃ 32768 នោះល្បឿនមុំបច្ចុប្បន្នគឺ 250 ដឺក្រេ/វិនាទីតាមទ្រនិចនាឡិកា។ ប្រសិនបើវាត្រូវបានកំណត់ទៅ 500 ដឺក្រេ / វិនាទី តម្លៃបច្ចុប្បន្ននៃ 32768 បង្ហាញថាបច្ចុប្បន្នល្បឿនមុំគឺ 500 ដឺក្រេ / វិនាទីតាមទ្រនិចនាឡិកា។ ជាក់ស្តែង ការពង្រីកកាន់តែទាប ភាពត្រឹមត្រូវកាន់តែប្រសើរ ហើយការពង្រីកកាន់តែខ្ពស់ ជួរកាន់តែធំ។

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 ax, ay, az; int16_t gx, gy, gz; រចនាសម្ព័ន្ធ RAW_type accel_zero_offsent , gyro_zero_offsent;
bool blinkState = មិនពិត; char str[512];
26

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
float pi = 3.1415926; អណ្តែត AcceRatio = 16384.0; អណ្តែត GyroRatio = 131.0; អណ្តែត Rad = 57.3 ; //180.0/pi; អណ្តែត gyrox, gyroy, gyroz;
ការដំឡើងចាត់ទុកជាមោឃៈ () { int i ; int32_t ax_zero=0,ay_zero=0,az_zero=0,gx_zero=0,gy_zero=
0,gz_zero = 0 ; // ចូលរួមជាមួយឡានក្រុង I2C (បណ្ណាល័យ 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 បានបរាជ័យ"); សម្រាប់ ( 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() { // អានការវាស់វែង accel/gyro ឆៅពីឧបករណ៍ 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 = (អណ្តែត)(gx-gyro_zero_offsent.x)/AcceRatio; gyroy = (អណ្តែត)(gy-gyro_zero_offsent.y)/AcceRatio ; gyroz = (អណ្តែត)(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 យើងឃើញថាទិន្នន័យ gyrox ដែលបានបោះពុម្ពគឺវិជ្ជមាន បើមិនដូច្នេះទេវាគឺអវិជ្ជមាន។
28

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
5.4 ការវិភាគទិន្នន័យចលនា
បន្ទាប់ពីបំប្លែងទិន្នន័យអានរបស់ឧបករណ៍វាស់ល្បឿន និងឧបករណ៍វាស់ល្បឿនមុំ ហើយពួកវាទៅជាតម្លៃរូបវន្ត ទិន្នន័យត្រូវបានបកស្រាយខុសៗគ្នាទៅតាមកម្មវិធីផ្សេងៗ។ នៅក្នុងជំពូកនេះ គំរូចលនាយន្តហោះត្រូវបានយកជាអតីតample ដើម្បីគណនាឥរិយាបថហោះហើរបច្ចុប្បន្នដោយផ្អែកលើការបង្កើនល្បឿន និងល្បឿនមុំ។
5.4.1 គំរូឧបករណ៍វាស់ល្បឿន
យើង​អាច​គិត​អំពី​ឧបករណ៍​វាស់​ល្បឿន​ជា​បាល់​ក្នុង​ប្រអប់​គូប​វិជ្ជមាន​ដែល​ត្រូវ​បាន​កាន់​នៅ​កណ្តាល​គូប​ដោយ​និទាឃរដូវ។ នៅពេលប្រអប់កំពុងផ្លាស់ទី តម្លៃនៃការបង្កើនល្បឿនបច្ចុប្បន្នអាចត្រូវបានគណនាពីទីតាំងនៃបាល់ស្រមៃដូចបានបង្ហាញខាងក្រោម៖
29

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
រូបភាពទី 15: តម្លៃបង្កើនល្បឿនរដ្ឋនៃការសម្រកទម្ងន់
ប្រសិនបើយើងដាក់កម្លាំងខាងឆ្វេងផ្ដេកលើប្រអប់នោះ ជាក់ស្តែងប្រអប់នឹងមានការបង្កើនល្បឿនខាងឆ្វេង នោះបាល់ក្នុងប្រអប់នឹងនៅជាប់នឹងផ្នែកខាងស្តាំនៃប្រអប់ ដោយសារនិចលភាព។ ដូចបង្ហាញក្នុងរូបខាងក្រោម៖
រូបភាពទី 16: ការបង្កើនល្បឿននៃវត្ថុដែលផ្លាស់ទីទៅខាងស្តាំ
ដើម្បីធានាបាននូវអត្ថន័យជាក់ស្តែងនៃទិន្នន័យ ឧបករណ៍វាស់ល្បឿន MPU6050 សម្គាល់តម្លៃផ្ទុយគ្នានៅក្នុងអ័ក្សបីនៃបាល់ដែលស្រមៃថាជាការបង្កើនល្បឿនពិតប្រាកដ។ នៅពេលដែលទីតាំងបាល់ស្រមើលស្រមៃគឺលំអៀងឆ្ពោះទៅរកអ័ក្សខាងមុខ ការបង្កើនល្បឿននៃអ័ក្សគឺអវិជ្ជមាន ហើយនៅពេលដែលទីតាំងបាល់ស្រមើលស្រមៃគឺលំអៀងទៅអ័ក្សអវិជ្ជមាន ការបង្កើនល្បឿននៃអ័ក្ស
30

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
ការអានគឺវិជ្ជមាន។ យោងតាមការវិភាគខាងលើ នៅពេលដែលយើងដាក់បន្ទះឈីប MPU6050 នៅលើមូលដ្ឋាន ផ្ទៃបន្ទះឈីបគឺឆ្ពោះទៅរកមេឃ នៅពេលនេះដោយសារតែទំនាញផែនដី ទីតាំងរបស់បាល់គឺឆ្ពោះទៅទិសអវិជ្ជមាននៃអ័ក្ស Z ដូច្នេះការអានការបង្កើនល្បឿនអ័ក្ស Z គួរតែវិជ្ជមាន ហើយតាមឧត្ដមគតិគួរតែជា "g" ។ ចំណាំថានេះមិនមែនជាការបង្កើនល្បឿនទំនាញទេ ប៉ុន្តែជាការបង្កើនល្បឿននៃចលនារាងកាយ នេះអាចយល់បាន: ការបង្កើនល្បឿននៃទំនាញគឺស្មើនឹងតម្លៃនៃការបង្កើនល្បឿនចលនារបស់វា ប៉ុន្តែក្នុងទិសដៅផ្ទុយ នោះហើយជាមូលហេតុដែលបន្ទះឈីបអាចនៅស្ងៀម។
5.4.2 គំរូ Roll-pitch-yaw និងការគណនាអាកប្បកិរិយា
គំរូទូទៅសម្រាប់តំណាងឱ្យឥរិយាបទហោះហើរបច្ចុប្បន្នរបស់យន្តហោះគឺបង្កើតប្រព័ន្ធកូអរដោណេដូចបានបង្ហាញខាងក្រោម និងតំណាងឱ្យការបង្វិលអ័ក្ស X ដោយ "វិល" ការបង្វិលអ័ក្ស Y ដោយ "ទីលាន" ការបង្វិលអ័ក្ស Z ដោយ "យ៉ាវ" ។
រូបភាពទី 17: គំរូវិលជុំ
ចាប់តាំងពី MPU6050 អាចទទួលបានការបង្កើនល្បឿនឡើងលើនៃអ័ក្សបី ហើយទំនាញគឺតែងតែបញ្ឈរចុះក្រោម យើងអាចគណនាឥរិយាបទបច្ចុប្បន្នដោយយោងតាមការបង្កើនល្បឿននៃទំនាញ។
31

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
ទាក់ទងទៅនឹងបន្ទះឈីប។ សម្រាប់ជាប្រយោជន៍នៃភាពងាយស្រួល យើងមានបន្ទះឈីបដែលប្រឈមមុខនឹងយន្តហោះដែលបានបង្ហាញខាងលើ ហើយកូអរដោនេគឺស្របគ្នាល្អឥតខ្ចោះជាមួយនឹងប្រព័ន្ធកូអរដោនេនៃយន្តហោះ។ ការបង្កើនល្បឿននៅក្នុងអ័ក្សទាំងបីបង្កើតជាវ៉ិចទ័របង្កើនល្បឿន "a (x, y, z)" ។ ដោយសន្មត់ថាបន្ទះឈីបស្ថិតក្នុងស្ថានភាពនៃចលនាលីនេអ៊ែរឯកសណ្ឋាន នោះ "a" គួរតែកាត់កែងទៅនឹងដី ពោលគឺទិសដៅអវិជ្ជមាននៃអ័ក្ស Z ហើយប្រវែងគឺ |a|=g=sqrt{x^2+y^2+z^2} (ស្មើនឹងការបង្កើនល្បឿនទំនាញ ប៉ុន្តែទិសដៅផ្ទុយ ដោយមើលឃើញក្នុងផ្នែកទី 3.1)។ ប្រសិនបើបន្ទះឈីប (ប្រព័ន្ធសំរបសំរួល) បង្វិល នោះទិសដៅអវិជ្ជមាននៃអ័ក្ស Z នឹងមិនស្របគ្នាជាមួយ "a" ទៀតទេ ដោយសារវ៉ិចទ័របង្កើនល្បឿន a នៅតែឡើងបញ្ឈរ។ ឃើញខាងក្រោម។

រូបភាពទី 18៖ គំរូគណនាមុំអាកប្បកិរិយា
សម្រាប់ជាប្រយោជន៍នៃភាពងាយស្រួល ទិសដៅវិជ្ជមាននៃអ័ក្ស Z នៃប្រព័ន្ធកូអរដោណេខាងលើគឺ (ក្បាលពោះ និងផ្នែកខាងមុខនៃបន្ទះឈីប) ចុះក្រោម ហើយអ័ក្ស X គឺឆ្ពោះទៅខាងស្តាំ (ទិសដៅនៃយន្តហោះដែលកំពុងហោះហើរ)។ នៅចំណុចនេះ មុំវិល “” (ពណ៌លឿង) នៃបន្ទះឈីបត្រូវបានបង្កើតឡើងដោយវ៉ិចទ័របង្កើនល្បឿន និងការព្យាកររបស់វា (x, 0, z) នៅលើយន្តហោះ XZ មុំទីលាន “” (ពណ៌បៃតង) ត្រូវបានបង្កើតឡើងដោយវ៉ិចទ័របង្កើនល្បឿន និងការព្យាករណ៍របស់វានៅលើយន្តហោះ YZ ។ ចំណុច

រូបមន្តផលិតផលអាចគណនាមុំរវាងវ៉ិចទ័រពីរ៖ ការកាត់សាមញ្ញ៖

. បន្ទាប់ពី

និង

.

32

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
ចំណាំថាចាប់តាំងពីអនុគមន៍ arccos អាចត្រឡប់តែតម្លៃវិជ្ជមាន អ្នកត្រូវយកតម្លៃវិជ្ជមាន និងអវិជ្ជមាននៃមុំទៅតាមកាលៈទេសៈផ្សេងៗគ្នា។ នៅពេលដែលអ័ក្ស y គឺវិជ្ជមាន មុំវិលត្រូវយកតម្លៃអវិជ្ជមាន ហើយនៅពេលដែលអ័ក្ស X គឺអវិជ្ជមាន មុំ Pitch គឺអវិជ្ជមាន។
5.4.3 បញ្ហាមុំយ៉ាវ
ដោយសារគ្មានឯកសារយោង មុំបច្ចុប្បន្នដាច់ខាតនៃយ៉ាវមិនអាចគណនាបានទេ យើងអាចទទួលបានតែការប្រែប្រួលនៃយ៉ាវប៉ុណ្ណោះ ពោលគឺល្បឿនមុំ GYR_Z ។ ជាការពិតណាស់ យើងអាចប្រើវិធីសាស្រ្តនៃអាំងតេក្រាល GYR_Z ដើម្បីគណនាមុំយ៉ាវបច្ចុប្បន្ន (យោងទៅតាមតម្លៃដំបូង) ដោយគុណធម៌នៃភាពត្រឹមត្រូវនៃការវាស់វែង តម្លៃដែលបានគណនាគឺរសាត់ វាគ្មានន័យទាំងស្រុងបន្ទាប់ពីមួយរយៈពេល។ ទោះយ៉ាងណាក៏ដោយ នៅក្នុងកម្មវិធីភាគច្រើនដូចជា UAVs ត្រូវការតែ GRY_Z ប៉ុណ្ណោះ។
ប្រសិនបើអ្នកត្រូវតែទទួលបានមុំដាច់ខាតនៃ Yaw បន្ទាប់មកជ្រើសរើស MPU9250 ដែលជាបន្ទះឈីបតាមដានចលនា 9 អ័ក្ស វាអាចផ្តល់ទិន្នន័យបន្ថែមត្រីវិស័យ 3-axis ដូច្នេះយើងអាចគណនាមុំ Yaw តាមទិសដៅនៃដែនម៉ាញេទិចរបស់ផែនដី វិធីសាស្ត្រជាក់លាក់មិនត្រូវបានលើកឡើងនៅទីនេះទេ។
5.5 ដំណើរការទិន្នន័យ និងការអនុវត្ត
បន្ទះឈីប MPU6050 ផ្តល់ទិន្នន័យជាមួយនឹងសំលេងរំខានធ្ងន់ធ្ងរ នៅពេលដែលបន្ទះឈីបកំពុងដំណើរការក្នុងស្ថានភាពឋិតិវន្ត ទិន្នន័យអាចប្រែប្រួលលើសពី 2% ។ បន្ថែមពីលើសំលេងរំខាន វានៅតែមានអុហ្វសិតផ្សេងទៀត ពោលគឺទិន្នន័យមិនវិលជុំវិញចំណុចធ្វើការឋិតិវន្តទេ ដូច្នេះ អុហ្វសិតទិន្នន័យគួរតែត្រូវបានក្រិតតាមខ្នាតជាមុនសិន ហើយបន្ទាប់មកលុបបំបាត់សំលេងរំខានដោយក្បួនដោះស្រាយតម្រង។ ឥទ្ធិពលនៃតម្រង Kalman គឺពិតជាល្អបំផុតសម្រាប់ទិន្នន័យដែលមានចំនួនសំឡេងរំខានច្រើន។ នៅទីនេះយើងមិនពិចារណាលម្អិតអំពីក្បួនដោះស្រាយ អ្នកអាចយោងទៅ http://www.starlino.com/imu_guide.html.
5.5.1 ការពិសោធន៍ 3 imu_kalman ទទួលបាន Roll and Pitch គោលបំណងគឺដើម្បីបង្ហាញស្ថានភាពចលនា 3D នៃ mpu6050 ក្នុងពេលវេលាជាក់ស្តែងដោយការអាន mpu6050 និងបញ្ជូនការបង្កើនល្បឿនតាមពេលវេលាជាក់ស្តែង ACCEL_X, ACCEL_Y, ACCEL_Z និងទិន្នន័យ gyro ដំណើរការកម្មវិធី GYRO_X និង GYRO_Y
5.5.2 កូដពិសោធន៍ Arduino លេខកូដពិសោធន៍ “MotionTrackLessonmpu6050mpu6050.ino” អាចទទួលបាន roll និង pitch លទ្ធផលដំណើរការមានដូចខាងក្រោម៖
33

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
បន្ទាប់ពីបញ្ចូលកម្មវិធីទៅក្នុងផ្ទាំងបញ្ជាមេ Arduino NANO សូមបើកកម្មវិធីដំណើរការ “MotionTrackProcessing_demompu6050mpu6050.pde”
ជាមួយកម្មវិធីដំណើរការ (អាសយដ្ឋានទាញយក https://www.processing.org) ចំណាំថាលេខនៅក្នុង “[]” មិនមែនជាលេខច្រករបស់ Arduino NANO ទេ ប៉ុន្តែជាលេខស៊េរីនៃច្រកទំនាក់ទំនង។ អ្នកត្រូវបើកកម្មវិធីគ្រប់គ្រងឧបករណ៍របស់កុំព្យូទ័រ view លេខស៊េរី។ សម្រាប់អតីតample, ការបង្ហាញរបស់ខ្ញុំគឺ COM1 ហើយច្រកសៀរៀលដែលប្រើសម្រាប់ដំណើរការរបស់យើង។ វាចាប់ផ្តើមដោយ subscript 0. ដូច្នេះខ្ញុំបានប្តូរតម្លៃក្នុង “[ ]” នៅក្នុងកម្មវិធី Processing main program ទៅជា 0. នៅពេលដែលការកែប្រែត្រូវបានបញ្ចប់សូមចុច Run Sketch ដើម្បីដំណើរការ Processing..
34

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
35

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
នាំចូល processing.serial.*;
សៀរៀល myPort; // ច្រក serila numble
float [] RwEst = អណ្តែតថ្មី[3]; byte[] inBuffer = បៃថ្មី[100];
ពុម្ពអក្សរ PFont; int ចុងក្រោយ VIEW_SIZE_X = 1080,VIEW_SIZE_Y = 720;
ការ​កំណត់​ទុក​ជា​មោឃៈ () {
ទំហំ (1080, 720, P3D); myPort = ស៊េរីថ្មី(នេះ, Serial.list()[0], 9600); // myPort = ស៊េរីថ្មី (នេះ, “/dev/ttyUSB0”, 9600); // ផ្ទុកពុម្ពអក្សរ CourierNew type /date font = loadFont(“CourierNewPSMT-32.vlw”); }
void readSensors() { if (myPort.available() > 0) { if (myPort.readBytesUntil('n', inBuffer) > 0) { String inputString = new String(inBuffer); String [] inputStringArr = បំបែក(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); កំពូល (-30, -5, 20); កំពូល (30, -5, 20); កំពូល (30, 5, 20); កំពូល (-30, 5, 20);
// Zfill(#0000ff); កំពូល (-30, -5, -20); កំពូល (30, -5, -20); កំពូល (30, 5, -20); កំពូល (-30, 5, -20);
// Xfill(#ff0000); កំពូល (-30, -5, -20); កំពូល (-30, -5, 20); កំពូល (-30, 5, 20); កំពូល (-30, 5, -20);
// X+ បំពេញ(#ffff00); កំពូល (30, -5, -20); កំពូល (30, -5, 20); កំពូល (30, 5, 20); កំពូល (30, 5, -20);
// Yfill(#ff00ff); កំពូល (-30, -5, -20); កំពូល (30, -5, -20); កំពូល (30, -5, 20); កំពូល (-30, -5, 20);
37

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
// Y+ បំពេញ(#00ffff); កំពូល (-30, 5, -20); កំពូល (30, 5, -20); កំពូល (30, 5, 20); កំពូល (-30, 5, 20);
endShape(); }
void drawCube() { pushMatrix(); // normalize3DVec(RwEst); បកប្រែ(៣០០, ៤៥០, ០); មាត្រដ្ឋាន (300, 450, 0); បង្វិល X(HALF_PI * -RwEst[4]); //rotateY(HALF_PI * -4); បង្វិលZ(HALF_PI * -RwEst[4]); buildBoxShape(); popMatrix();
}
void draw() { // getInclination(); readSensors(); ផ្ទៃខាងក្រោយ (#214565); បំពេញ(#ffffff); textFont (ពុម្ពអក្សរ, 20); អត្ថបទ(“RwEst :n” + RwEst[0] + “n” + RwEst[1] + “n” + RwEst[2], 220, 180); // បង្ហាញអ័ក្ស pushMatrix(); បកប្រែ(450, 250, 0); ជំងឺដាច់សរសៃឈាមខួរក្បាល (#ffffff); // មាត្រដ្ឋាន (100, 100, 100); បន្ទាត់(0, 0, 0, 100, 0, 0); បន្ទាត់(0, 0, 0, 0, -100, 0); បន្ទាត់(0, 0, 0, 0, 0, 100); បន្ទាត់(0, 0, 0, -RwEst[0], RwEst[1], RwEst[2]); popMatrix(); drawCube();
} ៣៨

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
យើង​អាច​មើល​ឃើញ​ថា​លទ្ធផល​រត់​របស់​យើង​មាន​ដូច​ខាង​ក្រោម៖
រូបភាពទី 19៖ ដំណើរការការបង្ហាញការបង្ហាញ

គោលការណ៍នៃការត្រួតពិនិត្យចលនា

តាមរយៈការទទួលបានទិន្នន័យពីមុននៃ mpu6050 ដើម្បីទទួលបានមុំវិល និងទីលាន យើងបង្កើតការឆ្លើយឆ្លងដូចខាងក្រោម។ គ្រប់គ្រងវត្ថុផ្លាស់ទីម៉ាស៊ីនទាប៖ យើងអាចគ្រប់គ្រងវត្ថុម៉ាស៊ីនទាបណាមួយដោយទទួលបានល្បឿន និងទិសដៅតាមរយៈ mpu6050។
ដោយការអានការបង្កើនល្បឿនដែលបានផ្ទៀងផ្ទាត់តាមពេលវេលាជាក់ស្តែង mpu6050 ACCEL_X, ACCEL_Y, ACCEL_Z ទិន្នន័យ និងទិន្នន័យ gyroscope GYRO_X, GYRO_Y, GYRO_Z ត្រូវបានបញ្ជូនទៅមុខងារដំណើរការ quaternion កម្មវិធីបង្ហាញស្ថានភាព Roller និង Pitch angle នៃ mpu6050 ក្នុងពេលវេលាជាក់ស្តែង។
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 ។ ការបង្វិលជុំវិញ X (ត្រឡប់ថយក្រោយ) យើងទទួលបានមុំវិល។ ឥឡូវនេះយើងមានការយល់ដឹងអំពីកូអរដោនេនៃមុំឥរិយាបទ និងកូអរដោនេមុំនៃរថយន្តនោះ ឥឡូវនេះយើងនឹងពណ៌នាវាដល់កន្លែងកើតហេតុ។ នៅពេលដែលស្រោមដៃកីឡាត្រូវបានផ្អៀងទៅទិសខាងមុខខាងស្តាំ ដូចបង្ហាញក្នុងរូបភាពខាងក្រោម ប្រសិនបើពួកវាស្ថិតនៅក្នុងប្រព័ន្ធកូអរដោណេ ពួកគេមានទំនោរទៅតំបន់ពី 0 ទៅ 90 ដឺក្រេ។
41

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
រូបភាពទី 22៖ ដ្យាក្រាមគំនូសតាងនៃស្រោមដៃកីឡាដែលបត់ទៅទិសខាងមុខខាងស្តាំ ជ្រុងដែលត្រូវនឹងរថយន្តខាងក្រោមមានដូចខាងក្រោម
42

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
រូបភាពទី 23: ដ្យាក្រាមគំនូសតាងនៃចលនាខាងមុខខាងស្តាំនៃរថយន្ត តាមរយៈអាកប្បកិរិយានៃស្រោមដៃកីឡា យើងត្រូវគណនាមុំនៃចលនារបស់ម៉ាស៊ីនទាប។ ដូច្នេះ​យើង​បាន​បង្កើត​គំរូ​បី​វិមាត្រ​ខាង​ក្រោម
រូបភាពទី 24៖ ដ្យាក្រាមគំរូស្តេរ៉េអូផ្អែកលើស្រោមដៃកីឡា ដើម្បីភាពងាយស្រួលនៃការតំណាង ទិសដៅវិជ្ជមានអ័ក្ស Z នៃប្រព័ន្ធកូអរដោណេខាងលើ (ផ្នែកខាងមុខនៃស្រោមដៃដែលកំពុងផ្លាស់ទី) គឺឡើងលើ ហើយទិសដៅអ័ក្ស X វិជ្ជមាន (ផ្នែកខាងស្តាំនៃស្រោមដៃកីឡា) គឺទៅខាងស្តាំ។ នៅក្នុងស្ថានភាពដំបូង ស្រោមដៃកីឡានៅតែដដែលជាមួយ XY ។ នៅពេលនេះ ទិសដៅដែលស្រោមដៃកីឡាត្រូវបានផ្អៀងត្រូវបានតំណាងដោយ OB ហើយមុំវិល (ខ្មៅ) គឺជាមុំរវាងវ៉ិចទ័របង្កើនល្បឿន OB និងការព្យាកររបស់វា (x, 0, z) នៅលើយន្តហោះ XZ ហើយមុំទីលាន (ពណ៌ស្វាយ) គឺជាការព្យាកររបស់វានៅលើយន្តហោះ YZ (មុំរវាង 0, y, និង z)។ ពណ៌ខៀវគឺជាកម្រិតដែលស្រោមដៃកីឡាធ្វើការព្យាករណ៍ (x, o, y) នៅលើយន្តហោះ XY ។ យើងប្រើមុំនេះដើម្បីគ្រប់គ្រងមុំចង្កូតរបស់រថយន្តទាប។ យើងបានទទួល Roll and Pitch រួចហើយតាមរយៈការពិសោធន៍ 5.6.1 មុន។ ឥឡូវនេះយើងគណនាដឺក្រេដោយរូបមន្តខាងក្រោម។ នៅក្នុងរូបភាព BA OA AB OB sin(Pitch) BD OD BD OBsin(Roll)
43

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
tandegree FE BD sin(Roll) Roll
OE AB sin(Pitch) Pitch deg ree arctan( Roll )
Pitch ខាងលើ យើងទទួលបានមុំចង្កូត យើងត្រូវគុណមេគុណទៅជាដឺក្រេកូអរដោណេ។ 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)

ខាងលើគឺជាមុំធ្នូ។ យើងក៏ត្រូវគុណមេគុណផងដែរ។ ជួរនៃមុំនេះគឺ (0 ~ 90) ។ យើងប្រើមុំនេះដោយផ្ទាល់ជាការត្រួតពិនិត្យល្បឿនរបស់រថយន្ត។

46

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

អណ្តែត គណនាល្បឿន (វិលអណ្តែត ទីលានអណ្តែត) {
ទំនោរអណ្តែត = asin(sqrt(roll*roll +pitch*pitch))*Rad; ទំនោរត្រឡប់មកវិញ; }

មោឃៈ​ការ​ទំនោរ​ចិត្ត (ទុក​ជា​មោឃៈ)

{

ចំនួនឋិតិវន្ត int = 0;

ឋិតិវន្ត int SendSpeed ​​= 0, SendDegree = 0;

រាប់ ++;

ល្បឿន = គណនាល្បឿន (វិល, ទីលាន);

ប្រសិនបើ ((-0.2 <= pitch) && (pitch <= 0.2) && (-0.2 <= roll) && (roll <= 0.2)) {

ដឺក្រេ = 90;

SendSpeed ​​= 0;

SendDegree += 90;

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

ដឺក្រេ = atan (វិល / ទីលាន) * រ៉ាដ;

SendDegree += ((unsigned int)(degree/10))*10;

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

ដឺក្រេ = atan(-pitch/roll)* Rad + 90;

SendDegree += ((unsigned int)(degree/10))*10;

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

ដឺក្រេ = atan (វិល / ទីលាន) * រ៉ាដ + 180;

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

ដឺក្រេ = atan(-pitch/roll)* Rad + 270;

SendDegree += ((unsigned int)(degree/10))*10;

} ផ្សេងទៀត {

ដឺក្រេ = 90;

SendSpeed ​​= 0;

SendDegree = 90;

}

SendDegree = (int)(ល្បឿន/10)*10;

ប្រសិនបើ (ដឺក្រេ < 30 || ដឺក្រេ > 330) {

SendDegree = 0;

}

ប្រសិនបើ (រាប់ >= 3) {

រាប់ = 0;

Send_Direction(SendDegree/3);

Send_Speed(SendSpeed);

SendDegree = 0;

SendSpeed ​​= 0;

៦៧ ៨

}

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

ពិធីការ

ប្រើប៊្លូធូសដើម្បីគ្រប់គ្រងឡាន តាមពិតគឺប្រើកម្មវិធី Android ដើម្បីផ្ញើការណែនាំទៅ Arduino

ច្រកសៀរៀលតាមរយៈប៊្លូធូសដើម្បីគ្រប់គ្រងរថយន្ត។ ដោយសារវាពាក់ព័ន្ធនឹងការទំនាក់ទំនងឥតខ្សែ ដែលជាកត្តាសំខាន់មួយ។

បញ្ហាគឺការទំនាក់ទំនងរវាងឧបករណ៍ទាំងពីរ។ ប៉ុន្តែមិនមាន "ភាសា" ធម្មតារវាងពួកគេទេ

ដូច្នេះ ចាំបាច់ត្រូវរៀបចំពិធីការទំនាក់ទំនង ដើម្បីធានាបាននូវអន្តរកម្មដ៏ល្អឥតខ្ចោះរវាង Android និង

អាឌូណូ។ ដំណើរការសំខាន់គឺ៖ ប្រព័ន្ធប្រតិបត្តិការ Android ទទួលស្គាល់ពាក្យបញ្ជាបញ្ជា ហើយខ្ចប់វាទៅក្នុង

កញ្ចប់ព័ត៌មានដែលត្រូវគ្នា បន្ទាប់មកផ្ញើទៅម៉ូឌុលប៊្លូធូស (JDY-16) JDY-16 បានទទួលទិន្នន័យហើយផ្ញើទៅ

Arduino បន្ទាប់មក Arduino វិភាគទិន្នន័យបន្ទាប់មកអនុវត្តសកម្មភាពដែលត្រូវគ្នា។ ទម្រង់កាលបរិច្ឆេទដែល

ប្រព័ន្ធប្រតិបត្តិការ Android ផ្ញើដូចខាងក្រោម ភាគច្រើនមាន 8 វាល។

ពិធីការទិន្នន័យប្រវែងឧបករណ៍ ប្រភេទឧបករណ៍ត្រួតពិនិត្យមុខងារត្រួតពិនិត្យពិធីការ

បឋមកថា

អាស័យដ្ឋាន ទិន្នន័យ លេខ កូដ ចុង

នៅក្នុងវាលទាំង 8 ខាងលើ យើងប្រើតួរចនាសម្ព័ន្ធដើម្បីតំណាង។

typedef struct {
unsigned char start_code; មិនចុះហត្ថលេខា char len; ប្រភេទតួអក្សរដែលមិនបានចុះហត្ថលេខា; unsigned char addr; មុខងារ int ខ្លីដែលមិនបានចុះហត្ថលេខា; ទិន្នន័យ char * ដែលមិនបានចុះហត្ថលេខា; unsigned short int sum; unsigned char end_code; ពិធីការ ST_;

// ៨ ប៊ីត ០xAA
// ១៦ ប៊ីត // n ប៊ីត // ពិនិត្យផលបូក // ៨ ប៊ីត ០x៥៥

"បឋមកថាពិធីការ" មានន័យថាការចាប់ផ្តើមនៃកញ្ចប់ព័ត៌មានដូចជាការកំណត់ឯកសណ្ឋាននៃ 0xAA ។ "ប្រវែងទិន្នន័យ" មានន័យថាលើកលែងតែប្រវែងទិន្នន័យត្រឹមត្រូវនៃកូដចាប់ផ្តើម និងចុងបញ្ចប់នៃទិន្នន័យ។ "ប្រភេទឧបករណ៍" មានន័យថាប្រភេទនៃឧបករណ៍ឧបករណ៍ "អាសយដ្ឋានឧបករណ៍" មានន័យថាអាសយដ្ឋានដែលត្រូវបានកំណត់សម្រាប់ការគ្រប់គ្រង "លេខកូដមុខងារ" មានន័យថាប្រភេទនៃមុខងារឧបករណ៍ដែលត្រូវគ្រប់គ្រង ប្រភេទមុខងារដែលយើងបច្ចុប្បន្នគាំទ្រដូចខាងក្រោម។

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_ULTRASONGRA = 9 10, }E_CONTOROL_FUNC ;
"ទិន្នន័យ" មានន័យថាតម្លៃត្រួតពិនិត្យជាក់លាក់របស់រថយន្ត ដូចជាល្បឿន មុំ។ "Checksum" គឺជាលទ្ធផលនៃប៊ីតទិន្នន័យផ្សេងគ្នា ឬគណនានៃការណែនាំត្រួតពិនិត្យ។ “Protocol end code” គឺជាផ្នែកចុងក្រោយនៃ data bag នៅពេលទទួលបានទិន្នន័យនេះ វាមានន័យថាកញ្ចប់ទិន្នន័យត្រូវបានផ្ញើ ហើយរួចរាល់សម្រាប់ការទទួលកញ្ចប់ទិន្នន័យបន្ទាប់ នៅទីនេះយើងបញ្ជាក់វាជា 0x55។ សម្រាប់អតីតample កញ្ចប់ព័ត៌មានពេញលេញអាចមានដូចជា “AA 070101065000 5F55” ដែលក្នុងនោះ៖ “07” គឺជាប្រវែងបញ្ជូនទិន្នន័យ 7 បៃ។ "06" គឺជា "ប្រភេទឧបករណ៍" ដូចជាម៉ូទ័រ LED buzzer ជាដើម។ លេខ 06 នៅទីនេះសំដៅទៅលើល្បឿនបញ្ជូន ហើយលេខ 05 សំដៅលើទិសដៅបញ្ជូន។ “50 (ឬ 0050)” គឺជាទិន្នន័យគ្រប់គ្រង 0x50 ក្នុងគោលដប់ប្រាំមួយគឺ 80 នៅពេលបំប្លែងទៅជាគោលពីរ ដែលមានន័យថាតម្លៃល្បឿនគឺ 80។ ប្រសិនបើទិន្នន័យគឺ 05 វាមានន័យថាទិសដៅគ្រប់គ្រងនោះគឺ 80 ដឺក្រេ (ទៅមុខ)។ “005F” គឺជាមូលប្បទានប័ត្រដែលមាន 0x07+0x01+0x01+0x06+0x50=0x5F។ “55” គឺជាលេខកូដបញ្ចប់នៃពិធីសារ ដែលបង្ហាញពីការបញ្ចប់នៃការផ្ទេរទិន្នន័យ។
49

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ

ការពិសោធន៍ដ៏ទូលំទូលាយ

8.1 Nrf24L01 ការគ្រប់គ្រងឥតខ្សែ
8.1.1 ការគ្រប់គ្រងដោយកាយវិការ Hummer-bot smart car Connect យោងតាមខ្សែតភ្ជាប់នៃជំពូកមុន បន្ទាប់មកភ្ជាប់ថ្មស្ងួត 9v ទៅ
Arduino NANO ហើយទាញយកកម្មវិធី។ បន្ទាប់ពីបើកថាមពល ម៉ូឌុល Nrf24L01 បញ្ជូនទិន្នន័យទៅ Hummer-Bot Nrf24L01 ហើយបន្ទាប់មកកែសម្រួលទីតាំងនៃស្រោមដៃដើម្បីគ្រប់គ្រងរថយន្តពហុមុខងារ Hummer-Bot ដូច្នេះរថយន្តដែលគ្រប់គ្រងដោយស្រោមដៃកីឡាបានកើតមក!
50

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
រូបភាពទី 28៖ តំណកម្មវិធីគ្រប់គ្រងកាយវិការ hummer-bot នៃកុំព្យូទ័រខាងក្រោម៖ https://github.com/keywish/keywish-hummer-bot-Hummer-Bot-Multi-function តំណភ្ជាប់ការទិញរថយន្ត ទិញនៅលើ Amazon
https://www.amazon.com/dp/B078WM15DK គ្រប់គ្រងវីដេអូសាកល្បង Gesture-MotionTrackingvideoControl_Hunner-bot.mp4 8.1.2 Gesture Control Beetle-bot Smart Car
រូបភាពទី 29៖ Gesture Control Beetle-bot ព័ត៌មាននៅលើ Beetle-bot https://github.com/keywish/keywish-beetle-bot
51

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
8.2 ការគ្រប់គ្រងរបៀបទំនាក់ទំនងតាមប៊្លូធូស
ភ្ជាប់តាមខ្សែ Bluetooth បន្ទាប់មកភ្ជាប់ថ្មស្ងួត 9v ទៅ Arduino NANO ហើយទាញយកកម្មវិធី (MotionTrackLessonMotionTrack_Bluetooth MotionTrack_Bluetooth.ino)។ ចំណាំថាអ្នកត្រូវកែប្រែអាសយដ្ឋាន MAC នៃប៊្លូធូសនៃកុំព្យូទ័រខាងក្រោម។ បន្ទាប់ពីបើកភ្លើង ស្រោមដៃកីឡាភ្ជាប់ដោយស្វ័យប្រវត្តិទៅម៉ូឌុលប៊្លូធូសរបស់រថយន្ត។
52

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
8.2.1 ការគ្រប់គ្រងកាយវិការ Aurora-Racing
រូបភាពទី 30៖ Gesture Control Aurora-Racing Product ព័ត៌មាន៖ https://github.com/keywish/Aurora-Racing វីដេអូផលិតកម្ម៖ giteeMotionTrackvideo Control_RacingCar.mp4
53

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
8.2.2 ការគ្រប់គ្រងដោយកាយវិការ Panther-tank
រូបភាពទី 31៖ Gesture Control Pather-tank សម្រាប់សម្ភារៈផលិតធុង Panther សូមយោងទៅ https://github.com/keywish/keywish-panther-tank
54

ធ្វើឱ្យអ្នកមានភាពសប្បាយរីករាយ
8.2.3 កាយវិការគ្រប់គ្រងតុល្យភាពរថយន្ត
រូបភាពទី 32៖ Gesture Control Mini balance-car សម្រាប់ព័ត៌មានអំពីផលិតផលតុល្យភាព សូមយោងទៅ https://github.com/keywish/mini-balance-car
55

ឯកសារ/ធនធាន

Makefun MPU6050 Arduino ការតាមដានចលនាកាយវិការ [pdf] សៀវភៅណែនាំ
MPU6050 Module, JDY-16 Bluetooth Module, NRF24L01 Module, MPU6050 Arduino Gesture Motion Tracking, MPU6050, Arduino Gesture Motion Tracking, Gesture Motion Tracking, Motion Tracking, តាមដាន

ឯកសារយោង

ទុកមតិយោបល់

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ វាលដែលត្រូវការត្រូវបានសម្គាល់ *