

ABX00087 UNO R4 വൈഫൈ ഡെവലപ്മെന്റ് ബോർഡ്
Arduino UNO R4 WiFi + ADXL345 + Edge ഉപയോഗിച്ചുള്ള ക്രിക്കറ്റ് ഷോട്ട് തിരിച്ചറിയൽ.
പ്രേരണ
ADXL345 ആക്സിലറോമീറ്ററും എഡ്ജ് ഇംപൾസ് സ്റ്റുഡിയോയും ഉപയോഗിച്ച് Arduino UNO R4 WiFi ഉപയോഗിച്ച് ഒരു ക്രിക്കറ്റ് ഷോട്ട് തിരിച്ചറിയൽ സംവിധാനം നിർമ്മിക്കുന്നതിനുള്ള ഒരു പൂർണ്ണ വർക്ക്ഫ്ലോ ഈ ഡോക്യുമെന്റ് നൽകുന്നു. ആക്സിലറോമീറ്റർ ഡാറ്റ ശേഖരിക്കുക, ഒരു മെഷീൻ ലേണിംഗ് മോഡലിന് പരിശീലനം നൽകുക, പരിശീലനം ലഭിച്ച മോഡലിനെ റിയൽ-ടൈം ഷോട്ട് വർഗ്ഗീകരണത്തിനായി Arduino-യിലേക്ക് തിരികെ വിന്യസിക്കുക എന്നിവയാണ് ഈ പദ്ധതിയിൽ ഉൾപ്പെടുന്നത്.
ഈ പ്രോജക്റ്റിൽ പരിഗണിക്കുന്ന ക്രിക്കറ്റ് ഷോട്ടുകൾ:
– കവർ ഡ്രൈവ്
– നേരായ ഡ്രൈവ്
– പുൾ ഷോട്ട്
ഘട്ടം 1: ഹാർഡ്വെയർ ആവശ്യകതകൾ
– അർഡുനോ UNO R4 വൈഫൈ
– ADXL345 ആക്സിലറോമീറ്റർ (I2C)
– ജമ്പർ വയറുകൾ
– ബ്രെഡ്ബോർഡ് (ഓപ്ഷണൽ)
- യുഎസ്ബി ടൈപ്പ്-സി കേബിൾ
ഘട്ടം 2: സോഫ്റ്റ്വെയർ ആവശ്യകതകൾ
– അർഡ്വിനോ ഐഡിഇ (ഏറ്റവും പുതിയത്)
– എഡ്ജ് ഇംപൾസ് സ്റ്റുഡിയോ അക്കൗണ്ട് (സൗജന്യമായി)
– എഡ്ജ് ഇംപൾസ് CLI ടൂളുകൾ (Node.js ആവശ്യമാണ്)
– അഡാഫ്രൂട്ട് ADXL345 ലൈബ്രറി
ഘട്ടം 3: ADXL345 വയറിംഗ്
ADXL345 സെൻസർ Arduino UNO R4 WiFi-യുമായി ബന്ധിപ്പിക്കുക:
വിസിസി → 3.3വി
GND → GND
എസ്.ഡി.എ → എസ്.ഡി.എ (A4)
എസ്സിഎൽ → എസ്സിഎൽ (എ5)
CS → 3.3V (ഓപ്ഷണൽ, I2C മോഡിനായി)
SDO → ഫ്ലോട്ടിംഗ് അല്ലെങ്കിൽ GND
ഘട്ടം 4: IDE സെൻസർ തയ്യാറാക്കുക
ആർഡ്വിനോ ഐഡിഇയിൽ സെൻസർ ലൈബ്രറികൾ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം?
ആർഡ്വിനോ IDE തുറക്കുക
ടൂളുകൾ തുറന്ന് ലൈബ്രറികൾ കൈകാര്യം ചെയ്യുക... എന്നിട്ട് ഇൻസ്റ്റാൾ ചെയ്യുക: Adafruit ADXL345 Unified Adafruit Unified Sensor
(നിങ്ങൾക്ക് പകരം LSM6DSO അല്ലെങ്കിൽ MPU6050 ഉണ്ടെങ്കിൽ: SparkFun LSM6DSO, Adafruit LSM6DS അല്ലെങ്കിൽ MPU6050 എന്നിവ ഇൻസ്റ്റാൾ ചെയ്യുക.)
ഘട്ടം 5: ഡാറ്റ ശേഖരണത്തിനായുള്ള ആർഡ്വിനോ സ്കെച്ച്
ഈ സ്കെച്ച് നിങ്ങളുടെ Arduino UNO R4 WiFi-യിലേക്ക് അപ്ലോഡ് ചെയ്യുക. ഇത് Edge Impulse-നായി ~18 Hz-ൽ CSV ഫോർമാറ്റിൽ (x,y,z) ആക്സിലറോമീറ്റർ ഡാറ്റ സ്ട്രീം ചെയ്യുന്നു.
#ഉൾപ്പെടുത്തുക
#ഉൾപ്പെടുന്നു
അഡാഫ്രൂട്ട്_ADXL345_യൂണിഫൈഡ് ആക്സിൽ =
അഡാഫ്രൂട്ട്_എഡിഎക്സ്എൽ345_യൂണിഫൈഡ്(12345);
അസാധുവായ സജ്ജീകരണം() {
Serial.begin(115200);
(!accel.begin()) ആണെങ്കിൽ {
Serial.println(“ADXL345 കണ്ടെത്തിയില്ല”);
അതേസമയം (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
അസാധുവായ ലൂപ്പ്() {
സെൻസറുകൾ_ഇവന്റ്_ടി ഇ;
accel.getEvent(&e); (ആക്സൽ.ഇവന്റ് നേടുക)
സീരിയൽ.പ്രിന്റ് (e.acceleration.x);
സീരിയൽ.പ്രിന്റ്(“,”);
സീരിയൽ.പ്രിന്റ്(e.acceleration.y);
സീരിയൽ.പ്രിന്റ്(“,”);
Serial.println(e.acceleration.z);delay(55); // ~18 Hz
}
എഡ്ജ് ഇംപൾസ് സജ്ജമാക്കുക

ഘട്ടം 6: എഡ്ജ് ഇംപൾസിലേക്ക് കണക്റ്റുചെയ്യുന്നു
- ആർഡ്വിനോ സീരിയൽ മോണിറ്റർ അടയ്ക്കുക.
- കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: edge-impulse-data-forwarder –frequency 18
- അച്ചുതണ്ട് നാമങ്ങൾ നൽകുക: accX, accY, accZ
- നിങ്ങളുടെ ഉപകരണത്തിന് പേര് നൽകുക: Arduino-Cricket-Board
- 'Devices' എന്നതിന് കീഴിലുള്ള Edge Impulse Studio-യിൽ കണക്ഷൻ സ്ഥിരീകരിക്കുക.


ഘട്ടം 7: ഡാറ്റ ശേഖരണം
എഡ്ജ് ഇംപൾസ് സ്റ്റുഡിയോയിൽ → ഡാറ്റ ഏറ്റെടുക്കൽ:
– ഉപകരണം: ആർഡ്വിനോ-ക്രിക്കറ്റ്-ബോർഡ്
– സെൻസർ: ആക്സിലറോമീറ്റർ (3 അക്ഷങ്ങൾ)
– എസ്ampനീളം: 2000 മി.സെക്കൻഡ് (2 സെക്കൻഡ്)
– ആവൃത്തി: 18 Hz
കുറഞ്ഞത് 40 സെക്കൻഡ് റെക്കോർഡ് ചെയ്യുകampക്ലാസ്സ് അനുസരിച്ച്:
– കവർ ഡ്രൈവ്
– നേരായ ഡ്രൈവ്
– പുൾ ഷോട്ട്
ഡാറ്റ ശേഖരിക്കുക മുൻampലെസ്
കവർ ഡ്രൈവ്
ഉപകരണം: അർഡ്വിനോ-ക്രിക്കറ്റ്-ബോർഡ്
ലേബൽ: കവർ ഡ്രൈവ്
സെൻസർ: 3 അക്ഷങ്ങളുള്ള സെൻസർ (accX, accY, accZ)
Sampനീളം: 10000ms
ആവൃത്തി: 18 Hz
Exampഅസംസ്കൃത ഡാറ്റ:
എസിസിഎക്സ് -0.32
അക്വൈ 9.61
എസിസിഇസഡ് -0.12
സ്ട്രെയിറ്റ് ഡ്രൈവ്
ഉപകരണം: അർഡ്വിനോ-ക്രിക്കറ്റ്-ബോർഡ്
ലേബൽ: സ്ട്രെയിറ്റ് ഡ്രൈവ്
സെൻസർ: 3 അക്ഷങ്ങളുള്ള സെൻസർ (accX, accY, accZ)
Sampനീളം: 10000ms
ആവൃത്തി: 18 Hz
Exampഅസംസ്കൃത ഡാറ്റ:
എസിസിഎക്സ് 1.24
അക്വൈ 8.93
എസിസിഇസഡ് -0.42
പുൾ ഷോട്ട്
ഉപകരണം: അർഡ്വിനോ-ക്രിക്കറ്റ്-ബോർഡ്
ലേബൽ: പുൾ ഷോട്ട്
സെൻസർ: 3 അക്ഷങ്ങളുള്ള സെൻസർ (accX, accY, accZ)
Sampനീളം: 10000 മി.സെ.
ആവൃത്തി: 18 Hz
Exampഅസംസ്കൃത ഡാറ്റ:
എസിസിഎക്സ് 2.01
അക്വൈ 7.84
എസിസിഇസഡ് -0.63 
ഘട്ടം 8: ഇംപൾസ് ഡിസൈൻ
ക്രിയേറ്റ് ഇംപൾസ് തുറക്കുക:
ഇൻപുട്ട് ബ്ലോക്ക്: സമയ ശ്രേണി ഡാറ്റ (3 അക്ഷങ്ങൾ).
വിൻഡോ വലുപ്പം: 1000 ms വിൻഡോ വർദ്ധനവ് (സ്ട്രൈഡ്): 200 ms പ്രവർത്തനക്ഷമമാക്കുക: അച്ചുതണ്ടുകൾ, മാഗ്നിറ്റ്യൂഡ് (ഓപ്ഷണൽ), ഫ്രീക്വൻസി 18.
പ്രോസസ്സിംഗ് ബ്ലോക്ക്: സ്പെക്ട്രൽ വിശകലനം (ചലനത്തിനുള്ള സ്പെക്ട്രൽ സവിശേഷതകൾ എന്നും അറിയപ്പെടുന്നു). വിൻഡോ വലുപ്പം: 1000 ms വിൻഡോ വർദ്ധനവ് (സ്ട്രൈഡ്): 200 ms പ്രവർത്തനക്ഷമമാക്കുക: അച്ചുതണ്ടുകൾ, മാഗ്നിറ്റ്യൂഡ് (ഓപ്ഷണൽ), എല്ലാ ഡിഫോൾട്ടുകളും ആദ്യം സൂക്ഷിക്കുക.
പഠന ബ്ലോക്ക്: വർഗ്ഗീകരണം (കേരസ്).
ഇംപൾസ് സംരക്ഷിക്കുക ക്ലിക്ക് ചെയ്യുക. 
സവിശേഷതകൾ സൃഷ്ടിക്കുക:
സ്പെക്ട്രൽ വിശകലനത്തിലേക്ക് പോയി, പാരാമീറ്ററുകൾ സംരക്ഷിക്കുക ക്ലിക്കുചെയ്യുക, തുടർന്ന് പരിശീലന സെറ്റിനായി സവിശേഷതകൾ സൃഷ്ടിക്കുക.

ഒരു ചെറിയ മോഡലിനെ പരിശീലിപ്പിക്കുക
ക്ലാസിഫയറിലേക്ക് (കെരാസ്) പോയി ഇതുപോലുള്ള ഒരു കോംപാക്റ്റ് കോൺഫിഗറേഷൻ ഉപയോഗിക്കുക:
ന്യൂറൽ നെറ്റ്വർക്ക്: 1–2 സാന്ദ്രമായ പാളികൾ (ഉദാ. 60 → 30), ReLU
യുഗങ്ങൾ: 40–60
പഠന നിരക്ക്: 0.001–0.005
ബാച്ച് വലുപ്പം: 32
ഡാറ്റ വിഭജനം: 80/20 (ട്രെയിൻ/ടെസ്റ്റ്)
ഡാറ്റ സംരക്ഷിച്ച് പരിശീലിപ്പിക്കുക
ഹോൾഡ്ഔട്ട് സെറ്റ് ഉപയോഗിച്ച് മോഡൽ പരിശോധന വിലയിരുത്തുകയും പരിശോധിക്കുകയും ചെയ്യുക.
കൺഫ്യൂഷൻ മാട്രിക്സ് പരിശോധിക്കുക; വൃത്തവും മുകളിലേക്കും ഓവർലാപ്പ് ചെയ്യുകയാണെങ്കിൽ, കൂടുതൽ വൈവിധ്യമാർന്ന ഡാറ്റ ശേഖരിക്കുക അല്ലെങ്കിൽ മാറ്റങ്ങൾ വരുത്തുക.
സ്പെക്ട്രൽ പാരാമീറ്ററുകൾ (വിൻഡോ വലുപ്പം / ശബ്ദ നില).
ഘട്ടം 9: ആർഡ്വിനോയിലേക്ക് വിന്യാസം
വിന്യാസത്തിലേക്ക് പോകുക:
Arduino ലൈബ്രറി തിരഞ്ഞെടുക്കുക (C++ ലൈബ്രറിയും പ്രവർത്തിക്കുന്നു).
മോഡൽ വലുപ്പം ചുരുക്കാൻ EON കംപൈലർ (ലഭ്യമെങ്കിൽ) പ്രാപ്തമാക്കുക.
.zip ഡൗൺലോഡ് ചെയ്യുക, തുടർന്ന് Arduino IDE-യിൽ: Sketch → Include Library → Add .ZIP Library… ഇത് ex ചേർക്കുന്നുampസ്റ്റാറ്റിക് ബഫർ, തുടർച്ചയായത് എന്നിവ പോലുള്ളവ File → ഉദാampലെസ് →
നിങ്ങളുടെ പ്രോജക്റ്റ് നാമം - എഡ്ജ് ഇംപൾസ്. Arduino UNO EK R4 WiFi + ADXL345-നുള്ള ഇൻഫറൻസ് സ്കെച്ച്.
ഘട്ടം 10: ആർഡ്വിനോ ഇൻഫെരൻസ് സ്കെച്ച്
#ഉൾപ്പെടുത്തുക
#ഉൾപ്പെടുന്നു
#ഉൾപ്പെടുന്നു // എഡ്ജ് ഇംപൾസ് ഹെഡർ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക
അഡാഫ്രൂട്ട്_ADXL345_യൂണിഫൈഡ് ആക്സിൽ =
അഡാഫ്രൂട്ട്_എഡിഎക്സ്എൽ345_യൂണിഫൈഡ്(12345);
സ്റ്റാറ്റിക് ബൂൾ ഡീബഗ്_എൻഎൻ = തെറ്റ്;
അസാധുവായ സജ്ജീകരണം() {
Serial.begin(115200);
(!സീരിയൽ) {}
(!accel.begin()) ആണെങ്കിൽ {
Serial.println(“പിശക്: ADXL345 കണ്ടെത്തിയില്ല”);
അതേസമയം (1);
}
accel.setRange(ADXL345_RANGE_4_G);
}
അസാധുവായ ലൂപ്പ്() {
ഫ്ലോട്ട് ബഫർ[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = {0};
(size_t ix = 0; ix <EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix +=) എന്നതിന്
3) {
uint64_t അടുത്ത_ടിക്ക് = മൈക്രോസ്() + (EI_CLASSIFIER_INTERVAL_MS *
1000);
സെൻസറുകൾ_ഇവന്റ്_ടി ഇ;
accel.getEvent(&e); (ആക്സൽ.ഇവന്റ് നേടുക)
ബഫർ[ix + 0] = e.aceleration.x;
ബഫർ[ix + 1] = e.aceleration.y;
ബഫർ[ix + 2] = e.aceleration.z;
int32_t കാത്തിരിക്കുക = (int32_t)(അടുത്ത_ടിക്ക് – മൈക്രോസ്());
(കാത്തിരിക്കുക > 0) വൈകിയാൽ മൈക്രോസെക്കൻഡ്സ്(കാത്തിരിക്കുക);
}
സിഗ്നൽ_ടി സിഗ്നൽ;
int err = നമ്പർ::signal_from_buffer(ബഫർ,
EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &സിഗ്നൽ);
(പിശക് != 0) റിട്ടേൺ ചെയ്താൽ;
ei_impulse_result_t ഫലം = {0};
EI_IMPULSE_ERROR res = റൺ_ക്ലാസിഫയർ(&സിഗ്നൽ, &ഫലം,
ഡീബഗ്_എൻഎൻ);
(res != EI_IMPULSE_OK) റിട്ടേൺ ചെയ്താൽ;
(വലുപ്പം_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix++) എന്നതിന് {
ei_printf(“%s: %3f”, ഫലം.വർഗ്ഗീകരണം[ix].ലേബൽ,
ഫലം.വർഗ്ഗീകരണം[ix].മൂല്യം);
}
#EI_CLASSIFIER_ANOMALY ഉണ്ടെങ്കിൽ == 1
ei_printf(“അനോമലി: %.3f”, ഫലം.അനോമലി);
#endif
ei_printf(“\n”);
}
ഔട്ട്പുട്ട് മുൻampLe:
നുറുങ്ങുകൾ:
നിങ്ങളുടെ ഡാറ്റ ഫോർവേഡർ ഫ്രീക്വൻസിയുമായി (ഉദാ: 100 Hz → 10 ms) EI_CLASSIFIER_INTERVAL_MS സമന്വയിപ്പിച്ച് നിലനിർത്തുക. എഡ്ജ് ഇംപൾസ് ലൈബ്രറി നിങ്ങളുടെ ഇംപൾസിൽ നിന്ന് ഈ സ്ഥിരാങ്കം യാന്ത്രികമായി സജ്ജമാക്കുന്നു.
നിങ്ങൾക്ക് തുടർച്ചയായ കണ്ടെത്തൽ (സ്ലൈഡിംഗ് വിൻഡോ) വേണമെങ്കിൽ, തുടർച്ചയായ എക്സ് എന്നതിൽ നിന്ന് ആരംഭിക്കുക.ample EI ലൈബ്രറിയിൽ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, കൂടാതെ ADXL345 റീഡുകളിൽ സ്വാപ്പും ഉണ്ട്.
ഞങ്ങൾ ഉടൻ തന്നെ വീഡിയോ ട്യൂട്ടോറിയലുകൾ ചേർക്കുന്നതായിരിക്കും; അതുവരെ, തുടരുക – https://www.youtube.com/@RobuInlabs
നിങ്ങൾക്ക് ഇപ്പോഴും ചില സംശയങ്ങളുണ്ടെങ്കിൽ, എഡ്ജ്ഡ് ഇംപൾസിന്റെ ഈ വീഡിയോ നിങ്ങൾക്ക് പരിശോധിക്കാം: https://www.youtube.com/watch?v=FseGCn-oBA0&t=468s

പ്രമാണങ്ങൾ / വിഭവങ്ങൾ
![]() |
Arduino ABX00087 UNO R4 വൈഫൈ ഡെവലപ്മെന്റ് ബോർഡ് [pdf] ഉപയോക്തൃ ഗൈഡ് R4 വൈഫൈ, ADXL345, ABX00087 UNO R4 വൈഫൈ ഡെവലപ്മെന്റ് ബോർഡ്, ABX00087, UNO R4 വൈഫൈ ഡെവലപ്മെന്റ് ബോർഡ്, വൈഫൈ ഡെവലപ്മെന്റ് ബോർഡ്, ഡെവലപ്മെന്റ് ബോർഡ്, ബോർഡ് |
