រូបសញ្ញា ArduinoArduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ

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 → អណ្តែត ឬ GNDArduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ចប់view

ជំហានទី 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

Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ដំឡើង

ជំហានទី 6: ភ្ជាប់ទៅ Edge Impulse

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

ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ Arduino ABX00087 UNO R4 - ភ្ជាប់ទៅ Edge Impulseក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ Arduino ABX00087 UNO R4 - ភ្ជាប់ទៅ Edge Impulse 1

ជំហានទី 7: ការប្រមូលទិន្នន័យ

នៅក្នុង Edge Impulse Studio → ការទិញទិន្នន័យ៖
- ឧបករណ៍៖ Arduino-Cricket-Board
- ឧបករណ៍ចាប់សញ្ញា៖ ឧបករណ៍វាស់ល្បឿន (៣ អ័ក្ស)
– សampប្រវែង៖ 2000 ms (2 វិនាទី)
- ប្រេកង់៖ ៥០ ហឺត
កត់ត្រាយ៉ាងហោចណាស់ 40 វិនាទីamples ក្នុងមួយថ្នាក់៖
- គម្របថាស
- ដ្រាយត្រង់
- ទាញបាញ់Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ការប្រមូលទិន្នន័យប្រមូលទិន្នន័យ 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 Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ការប្រមូលទិន្នន័យ ១

ជំហានទី 8: ការរចនា Impulse

បើកបង្កើតកម្លាំងជំរុញ៖
ប្លុកបញ្ចូល៖ ទិន្នន័យស៊េរីពេលវេលា (3 អ័ក្ស)។
ទំហំបង្អួច៖ 1000 ms ការកើនឡើងបង្អួច (ជំហាន): 200 ms បើកដំណើរការ៖ អ័ក្ស ទំហំ (ស្រេចចិត្ត) ប្រេកង់ 18 ។
ប្លុកដំណើរការ៖ ការវិភាគវិចារណកថា (ហៅថា Spectral Features for motion)។ ទំហំបង្អួច៖ 1000 ms ការកើនឡើងបង្អួច (ជំហាន): 200 ms បើក៖ អ័ក្ស ទំហំ (ស្រេចចិត្ត) រក្សាលំនាំដើមទាំងអស់ជាមុនសិន។
បណ្តុំការសិក្សា៖ ចំណាត់ថ្នាក់ (កេរ៉ាស)។
ចុច Save Impulse។ Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ការរចនា Impulse

បង្កើតមុខងារ៖
ចូលទៅកាន់ការវិភាគ Spectral ចុច Save parameters បន្ទាប់មកបង្កើតលក្ខណៈពិសេសសម្រាប់សំណុំបណ្តុះបណ្តាល។

Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - សំណុំបណ្តុះបណ្តាល

ហ្វឹកហាត់គំរូតូចមួយ
ចូលទៅកាន់ Classifier (Keras) ហើយប្រើ config បង្រួមដូចជា៖
បណ្តាញសរសៃប្រសាទ៖ 1–2 ស្រទាប់ក្រាស់ (ឧ, 60 → 30), ReLU
សម័យ៖ ៤០–៦០
អត្រាសិក្សា៖ 0.001–0.005
ទំហំបាច់៖ ៣២
ការបំបែកទិន្នន័យ៖ ៨០/២០ (រថភ្លើង/តេស្ត)
រក្សាទុកនិងបណ្តុះបណ្តាលទិន្នន័យArduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - រក្សាទុកនិងបណ្តុះបណ្តាលទិន្នន័យ

វាយតំលៃ និងពិនិត្យមើលការធ្វើតេស្តគំរូជាមួយនឹងសំណុំនៃការទុកចោល។
ពិនិត្យម៉ាទ្រីសច្របូកច្របល់; ប្រសិនបើរង្វង់ និងឡើងលើត្រួតលើគ្នា ប្រមូលទិន្នន័យចម្រុះ ឬកែប្រែ
ប៉ារ៉ាម៉ែត្រវិសាលគម (ទំហំបង្អួច / ជាន់សំលេងរំខាន) ។

ជំហានទី 9: ការដាក់ឱ្យដំណើរការទៅ Arduino

ចូលទៅកាន់ការដាក់ពង្រាយ៖
ជ្រើសរើសបណ្ណាល័យ Arduino (បណ្ណាល័យ C ++ ក៏ដំណើរការផងដែរ) ។
បើកដំណើរការ EON Compiler (ប្រសិនបើមាន) ដើម្បីបង្រួមទំហំគំរូ។ Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - ការដាក់ឱ្យដំណើរការទៅ Arduinoទាញយក .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លេ៖

Arduino ABX00087 UNO R4 ក្រុមប្រឹក្សាអភិវឌ្ឍន៍វ៉ាយហ្វាយ - Arduino Inference Sketchគន្លឹះ៖
រក្សា 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

ឯកសារ/ធនធាន

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

ឯកសារយោង

ទុកមតិយោបល់

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