

ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ
Cricket Shot Recognition ដោយប្រើ Arduino UNO R4 WiFi + ADXL345 + Edge
កម្លាំងរុញច្រាន
ឯកសារនេះផ្តល់នូវដំណើរការការងារពេញលេញសម្រាប់ការកសាងប្រព័ន្ធទទួលស្គាល់ការបាញ់កីឡា cricket ដោយប្រើ Arduino UNO R4 WiFi ជាមួយនឹងឧបករណ៍វាស់ល្បឿន ADXL345 និង Edge Impulse Studio ។ គម្រោងនេះពាក់ព័ន្ធនឹងការប្រមូលទិន្នន័យ accelerometer បណ្តុះបណ្តាលគំរូរៀនម៉ាស៊ីន និងការដាក់ពង្រាយគំរូដែលបានបណ្តុះបណ្តាលត្រឡប់ទៅ Arduino វិញសម្រាប់ការចាត់ថ្នាក់ការបាញ់តាមពេលវេលាជាក់ស្តែង។
ការបាញ់កីឡាគ្រីឃីតត្រូវបានពិចារណាក្នុងគម្រោងនេះ៖
- គម្របថាស
- ដ្រាយត្រង់
- ទាញបាញ់
ជំហានទី 1: តម្រូវការផ្នែករឹង
- វ៉ាយហ្វាយ Arduino UNO R4
- ADXL345 Accelerometer (I2C)
- ខ្សែភ្លើងលោត
- ក្តារខៀន (ស្រេចចិត្ត)
- ខ្សែ USB Type-C
ជំហានទី 2: តម្រូវការកម្មវិធី
- Arduino IDE (ចុងក្រោយបំផុត)
- គណនី Edge Impulse Studio (ឥតគិតថ្លៃ)
- ឧបករណ៍ Edge Impulse CLI (ទាមទារ Node.js)
- បណ្ណាល័យ Adafruit ADXL345
ជំហានទី 3: ភ្ជាប់ ADXL345
ភ្ជាប់ឧបករណ៍ចាប់សញ្ញា ADXL345 ទៅ Arduino UNO R4 WiFi ដូចខាងក្រោម៖
VCC → 3.3V
GND → GND
SDA → SDA (A4)
SCL → SCL (A5)
CS → 3.3V (ជាជម្រើស សម្រាប់របៀប I2C)
SDO → អណ្តែត ឬ GND
ជំហានទី 4៖ រៀបចំឧបករណ៍ចាប់សញ្ញា IDE រួចរាល់
តើធ្វើដូចម្តេចដើម្បីដំឡើង Sensor Libraries នៅក្នុង Arduino IDE?
បើក Arduino IDE
បើក Tools → Manage Libraries… ហើយដំឡើង៖ Adafruit ADXL345 Unified Adafruit Unified Sensor
(ប្រសិនបើអ្នកមាន LSM6DSO ឬ MPU6050 ជំនួសវិញ៖ ដំឡើង SparkFun LSM6DSO , Adafruit LSM6DS ឬ MPU6050 តាមនោះ។)
ជំហានទី 5: Arduino Sketch សម្រាប់ការប្រមូលទិន្នន័យ
បង្ហោះរូបភាពនេះទៅ Arduino UNO R4 WiFi របស់អ្នក។ វាចាក់ផ្សាយទិន្នន័យ accelerometer ជាទម្រង់ CSV (x,y,z) នៅ ~18 Hz សម្រាប់ Edge Impulse។
# រួមបញ្ចូល
# រួមបញ្ចូល
Adafruit_ADXL345_Unified accel =
Adafruit_ADXL345_Unified(12345);
ការកំណត់ទុកជាមោឃៈ () {
Serial.begin(115200);
ប្រសិនបើ (!accel.begin()) {
Serial.println(“រកមិនឃើញ ADXL345”);
ខណៈពេលដែល (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
void loop() {
sensors_event_t អ៊ី;
accel.getEvent(&e);
Serial.print (e.acceleration.x);
Serial.print(“,”);
Serial.print(e.acceleration.y);
Serial.print(“,”);
Serial.println(e.acceleration.z);ពន្យាពេល(55); // ~ 18 ហឺត
}
ដំឡើង Edge Impulse

ជំហានទី 6: ភ្ជាប់ទៅ Edge Impulse
- បិទ Arduino Serial Monitor ។
- ដំណើរការពាក្យបញ្ជា៖ edge-impulse-data-forwarder –frequency 18
- បញ្ចូលឈ្មោះអ័ក្ស៖ accX, accY, accZ
- ដាក់ឈ្មោះឧបករណ៍របស់អ្នក៖ Arduino-Cricket-Board
- បញ្ជាក់ការតភ្ជាប់នៅក្នុង Edge Impulse Studio នៅក្រោម 'ឧបករណ៍'។


ជំហានទី 7: ការប្រមូលទិន្នន័យ
នៅក្នុង Edge Impulse Studio → ការទិញទិន្នន័យ៖
- ឧបករណ៍៖ Arduino-Cricket-Board
- ឧបករណ៍ចាប់សញ្ញា៖ ឧបករណ៍វាស់ល្បឿន (៣ អ័ក្ស)
– សampប្រវែង៖ 2000 ms (2 វិនាទី)
- ប្រេកង់៖ ៥០ ហឺត
កត់ត្រាយ៉ាងហោចណាស់ 40 វិនាទីamples ក្នុងមួយថ្នាក់៖
- គម្របថាស
- ដ្រាយត្រង់
- ទាញបាញ់
ប្រមូលទិន្នន័យ Examples
គម្របថាស
ឧបករណ៍៖ Arduino-Cricket-Board
ស្លាក: គម្របថាស
ឧបករណ៍ចាប់សញ្ញា៖ ឧបករណ៍ចាប់សញ្ញាដែលមានអ័ក្ស 3 (accX, accY, accZ)
Sampប្រវែង៖ 10000ms
ប្រេកង់៖ 18 ហឺត
Exampទិន្នន័យឆៅ៖
accX -0.32
accY 9.61
accZ -0.12
ដ្រាយត្រង់
ឧបករណ៍៖ Arduino-Cricket-Board
ស្លាក: ដ្រាយត្រង់
ឧបករណ៍ចាប់សញ្ញា៖ ឧបករណ៍ចាប់សញ្ញាដែលមានអ័ក្ស 3 (accX, accY, accZ)
Sampប្រវែង៖ 10000ms
ប្រេកង់៖ 18 ហឺត
Exampទិន្នន័យឆៅ៖
accX 1.24
accY 8.93
accZ -0.42
ទាញបាញ់
ឧបករណ៍៖ Arduino-Cricket-Board
ស្លាក: ទាញបាញ់
ឧបករណ៍ចាប់សញ្ញា៖ ឧបករណ៍ចាប់សញ្ញាដែលមានអ័ក្ស 3 (accX, accY, accZ)
Sampប្រវែង: 10000 ms
ប្រេកង់៖ 18 ហឺត
Exampទិន្នន័យឆៅ៖
accX 2.01
accY 7.84
accZ -0.63 
ជំហានទី 8: ការរចនា Impulse
បើកបង្កើតកម្លាំងជំរុញ៖
ប្លុកបញ្ចូល៖ ទិន្នន័យស៊េរីពេលវេលា (3 អ័ក្ស)។
ទំហំបង្អួច៖ 1000 ms ការកើនឡើងបង្អួច (ជំហាន): 200 ms បើកដំណើរការ៖ អ័ក្ស ទំហំ (ស្រេចចិត្ត) ប្រេកង់ 18 ។
ប្លុកដំណើរការ៖ ការវិភាគវិចារណកថា (ហៅថា Spectral Features for motion)។ ទំហំបង្អួច៖ 1000 ms ការកើនឡើងបង្អួច (ជំហាន): 200 ms បើក៖ អ័ក្ស ទំហំ (ស្រេចចិត្ត) រក្សាលំនាំដើមទាំងអស់ជាមុនសិន។
បណ្តុំការសិក្សា៖ ចំណាត់ថ្នាក់ (កេរ៉ាស)។
ចុច Save Impulse។ 
បង្កើតមុខងារ៖
ចូលទៅកាន់ការវិភាគ Spectral ចុច Save parameters បន្ទាប់មកបង្កើតលក្ខណៈពិសេសសម្រាប់សំណុំបណ្តុះបណ្តាល។

ហ្វឹកហាត់គំរូតូចមួយ
ចូលទៅកាន់ Classifier (Keras) ហើយប្រើ config បង្រួមដូចជា៖
បណ្តាញសរសៃប្រសាទ៖ 1–2 ស្រទាប់ក្រាស់ (ឧ, 60 → 30), ReLU
សម័យ៖ ៤០–៦០
អត្រាសិក្សា៖ 0.001–0.005
ទំហំបាច់៖ ៣២
ការបំបែកទិន្នន័យ៖ ៨០/២០ (រថភ្លើង/តេស្ត)
រក្សាទុកនិងបណ្តុះបណ្តាលទិន្នន័យ
វាយតំលៃ និងពិនិត្យមើលការធ្វើតេស្តគំរូជាមួយនឹងសំណុំនៃការទុកចោល។
ពិនិត្យម៉ាទ្រីសច្របូកច្របល់; ប្រសិនបើរង្វង់ និងឡើងលើត្រួតលើគ្នា ប្រមូលទិន្នន័យចម្រុះ ឬកែប្រែ
ប៉ារ៉ាម៉ែត្រវិសាលគម (ទំហំបង្អួច / ជាន់សំលេងរំខាន) ។
ជំហានទី 9: ការដាក់ឱ្យដំណើរការទៅ Arduino
ចូលទៅកាន់ការដាក់ពង្រាយ៖
ជ្រើសរើសបណ្ណាល័យ Arduino (បណ្ណាល័យ C ++ ក៏ដំណើរការផងដែរ) ។
បើកដំណើរការ EON Compiler (ប្រសិនបើមាន) ដើម្បីបង្រួមទំហំគំរូ។
ទាញយក .zip បន្ទាប់មកនៅក្នុង Arduino IDE៖ Sketch → Include Library → Add .ZIP Library… វាបន្ថែម examples ដូចជាឋិតិវន្តបណ្តោះអាសន្ន និងបន្តនៅក្រោម File → ឧamples →
ឈ្មោះគម្រោងរបស់អ្នក - Edge Impulse ។ គំនូរព្រាងសេចក្តីសន្និដ្ឋានសម្រាប់ Arduino UNO EK R4 WiFi + ADXL345 ។
ជំហានទី 10: Arduino Inference Sketch
# រួមបញ្ចូល
# រួមបញ្ចូល
# រួមបញ្ចូល // ជំនួសដោយបឋមកថា Edge Impulse
Adafruit_ADXL345_Unified accel =
Adafruit_ADXL345_Unified(12345);
static bool debug_nn = មិនពិត;
ការកំណត់ទុកជាមោឃៈ () {
Serial.begin(115200);
ខណៈ (!សៀរៀល) {}
ប្រសិនបើ (!accel.begin()) {
Serial.println(“កំហុស៖ ADXL345 មិនបានរកឃើញទេ”);
ខណៈពេលដែល (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
void loop() {
បណ្តែតបណ្តែត[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
សម្រាប់ (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=
3) {
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS *
៦);
sensors_event_t អ៊ី;
accel.getEvent(&e);
buffer[ix + 0] = e.acceleration.x;
buffer[ix + 1] = e.acceleration.y;
សតិបណ្ដោះអាសន្ន[ix + 2] = e.acceleration.z;
int32_t wait = (int32_t)(next_tick – micros());
ប្រសិនបើ (រង់ចាំ > 0) ពន្យាពេលមីក្រូវិនាទី (រង់ចាំ);
}
សញ្ញា signal_t;
int err = numpy::signal_from_buffer(buffer,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
ប្រសិនបើ (err != 0) ត្រឡប់;
ei_impulse_result_t លទ្ធផល = {0};
EI_IMPULSE_ERROR res = run_classifier(&signal, &result,
debug_nn);
ប្រសិនបើ (res != EI_IMPULSE_OK) ត្រឡប់;
សម្រាប់ (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(“%s: %.3f”, result.classification[ix].label,
result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY == ១
ei_printf(“anomaly៖ %.3f”, result.anomaly);
#endif
ei_printf(“\n”);
}
ទិន្នផល ឧampលេ៖
គន្លឹះ៖
រក្សា EI_CLASSIFIER_INTERVAL_MS ឱ្យធ្វើសមកាលកម្មជាមួយប្រេកង់បញ្ជូនទិន្នន័យរបស់អ្នក (ឧ. 100 Hz → 10 ms) ។ បណ្ណាល័យ Edge Impulse កំណត់ថេរនេះដោយស្វ័យប្រវត្តិពីការជំរុញរបស់អ្នក។
ប្រសិនបើអ្នកចង់បានការរកឃើញជាបន្តបន្ទាប់ (បង្អួចរអិល) ចាប់ផ្តើមពី Continuous example រួមបញ្ចូលជាមួយបណ្ណាល័យ EI និងប្តូរនៅក្នុងការអាន ADXL345 ។
យើងនឹងបន្ថែមការបង្រៀនវីដេអូក្នុងពេលឆាប់ៗនេះ។ រហូតមកដល់ពេលនេះ, បន្តតាមដាន - https://www.youtube.com/@RobuInlabs
ហើយប្រសិនបើអ្នកនៅតែមានការសង្ស័យខ្លះ អ្នកអាចពិនិត្យមើលវីដេអូនេះដោយ Edge Impulse៖ https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

ឯកសារ/ធនធាន
![]() |
Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ [pdf] ការណែនាំអ្នកប្រើប្រាស់ R4 WiFi, ADXL345, ABX00087 UNO R4 WiFi ក្រុមប្រឹក្សាអភិវឌ្ឍន៍, ABX00087, ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ UNO R4, ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ, ក្រុមប្រឹក្សាអភិវឌ្ឍន៍, ក្រុមប្រឹក្សាភិបាល |
