- Būtini komponentai
- ADXL335 akselerometras
- Grandinės schema
- Kaip veikia žingsniamatis?
- „Arduino Step Counter“ programavimas
- „Arduino“ žingsniamačio bandymas
Šiuo metu labai populiarėja kūno rengybos grupės, kurios ne tik skaičiuoja žingsnius, bet ir seka jūsų sudegintas kalorijas, rodo širdies plakimo dažnį, pasirodymo laiką ir daug daugiau. Šie IoT įrenginiai yra sinchronizuojami su debesimi, kad išmaniajame telefone galėtumėte lengvai gauti visą savo fizinės veiklos istoriją. Mes taip pat sukūrėme IoT pagrįstą pacientų stebėjimo sistemą, kur svarbiausi duomenys buvo nusiųsti į „ThingSpeak“, kad būtų galima juos stebėti iš bet kur.
Žingsniamačiai yra prietaisai, kuriais buvo skaičiuojami tik žingsniai. Taigi šioje pamokoje mes sukursime lengvą ir pigų „ pasidaryk pats“ žingsniamažį naudodami „Arduino“ ir akselerometrą. Šis žingsniamatis suskaičiuos žingsnių skaičių ir parodys juos 16x2 LCD modulyje. Šis žingsniamatis gali būti integruotas su šiuo „Arduino Smart Watch“.
Būtini komponentai
- „Arduino Nano“
- ADXL 335 akselerometras
- 16 * 2 skystųjų kristalų ekranas
- LCD I2C modulis
- Baterija
ADXL335 akselerometras
ADXL335 yra pilnas 3 ašių analoginis akselerometras, veikiantis talpinio jutimo principu. Tai mažas, plonas, mažos galios modulis su daugiasluoksniu paviršiaus apdorotu jutikliu ir signalų kondicionavimo schema. ADXL335 akselerometras gali išmatuoti statinį ir dinaminį pagreitį. Šiame „Arduino“ žingsniamačio projekte ADXL335 akselerometras veiks kaip žingsniamačio jutiklis.
Pagreičio yra įtaisas, kuris gali konvertuoti pagreitį bet kuria kryptimi, kad jos atitinkamo kintamojo įtampos. Tai pasiekiama naudojant kondensatorius (žr. Paveikslėlį), nes judant „Accel“, jo viduje esantis kondensatorius, atsižvelgiant į judėjimą, taip pat pasikeis (žr. Vaizdą), nes talpa yra įvairi, taip pat galima gauti kintamą įtampą.
Žemiau yra akselerometro vaizdai iš priekio ir užpakalinės pusės kartu su kaiščio aprašymu.
Kaištis Akselerometro aprašymas:
- Vcc- 5 voltų maitinimas turėtų jungtis ties šiuo kaiščiu.
- X-OUT - Šis kaištis suteikia analoginę išvestį x kryptimi
- Y-OUT - Šis kaištis suteikia analoginę išvestį y kryptimi
- Z-OUT - Šis kaištis suteikia analoginę išvestį z kryptimi
- GND - žemė
- ST - šis kaištis naudojamas nustatyti jutiklio jautrumą
Mes statome daugybę projektų naudodami akselerometrą ADXL335, įskaitant gestais valdomą robotą, žemės drebėjimo detektoriaus pavojaus signalą, stalo teniso žaidimą ir kt.
Grandinės schema
Žemiau pateikiama „ Arduino“ akselerometro žingsnių skaitiklio schema.
Šioje grandinėje mes sąveikaujame su „Arduino Nano“ su ADXL335 akselerometru. X, Y ir Z akselerometro kaiščiai yra sujungti su „Arduino Nano“ analoginiais kaiščiais (A1, A2 ir A3). Norėdami susieti 16x2 LCD modulius su „Arduino“, mes naudojame „I2C“ modulį. „I2C“ modulio SCL ir SDA kaiščiai yra atitinkamai prijungti prie „Arduino Nano“ A5 ir A4 kaiščių. Visi ryšiai pateikti žemiau esančioje lentelėje:
„Arduino Nano“ | ADXL335 |
3.3V | VCC |
BND | BND |
A1 | X |
A2 | Y |
A3 | Z |
„Arduino Nano“ | LCD I2C modulis |
5V | VCC |
BND | BND |
A4 | SDA |
A5 | SCL |
Pirmiausia mes sukūrėme šį žingsniamatį naudodami „Arduino“ sąranką ant duonos
Po sėkmingo bandymo mes pakartojome jį „Perfboard“, lydydami visus „Perfboard“ komponentus, kaip parodyta žemiau:
Kaip veikia žingsniamatis?
Žingsniamatis apskaičiuoja bendrą žingsnių, kuriuos asmuo atliko naudodamas tris judėjimo komponentus, esančius į priekį, vertikaliai ir iš šono, skaičių. Žingsniamačio sistema naudoja akselerometrą, kad gautų šias vertes. Akselerometras nuolat atnaujina didžiausias ir mažiausias 3 ašių pagreičio reikšmes po kiekvieno apibrėžto Nr. mėginių. Vidutinė šių 3 ašių vertė („Max + Min“ / 2) vadinama dinaminio slenksčio lygiu, ir ši ribinė vertė naudojama nuspręsti, ar žengtas žingsnis, ar ne.
Bėgant žingsniamatis gali būti bet kokios krypties, todėl žingsniamatis apskaičiuoja žingsnius pagal ašį, kurios pagreičio pokytis yra didžiausias.
Dabar leiskite man jums greitai susipažinti su šio „Arduino“ žingsniamačio veikimu:
- Pirmiausia žingsniamatis pradeda kalibruoti, kai tik jis įjungiamas.
- Tuomet „ void loop loop“ funkcijoje jis nuolat gauna duomenis iš X, Y ir Z ašių.
- Po to jis apskaičiuoja bendrą pagreičio vektorių nuo pradinio taško.
- Pagreičio vektorius yra kvadratinė šaknis (x ^ 2 + y ^ 2 + z ^ 2) iš X, Y ir Z ašių reikšmių.
- Tada, norint suskaičiuoti žingsnio skaičių, vidutinės pagreičio vertės lyginamos su ribinėmis vertėmis.
- Jei pagreičio vektorius peržengia ribinę vertę, jis padidina žingsnių skaičių; priešingu atveju jis pašalina netinkamas vibracijas.
„Arduino Step Counter“ programavimas
Visas „ Arduino Step Counter“ kodas pateikiamas šio dokumento pabaigoje. Čia mes paaiškiname keletą svarbių šio kodo fragmentų.
Kaip įprasta, pradėkite kodą įtraukdami visas reikalingas bibliotekas. ADXL335 akselerometrui nereikia jokios bibliotekos, nes jis suteikia analoginę išvestį.
# įtraukti
Po to nustatykite „Arduino Pins“, kur prijungtas akselerometras.
const int xpin = A1; const int ypin = A2; const int zpin = A3;
Apibrėžkite akselerometro slenkstinę vertę. Ši ribinė vertė bus lyginama su pagreičio vektoriu, kad būtų galima apskaičiuoti žingsnių skaičių.
plūduriuojantis slenkstis = 6;
Tuščios sąrankos funkcija kalibruoja sistemą, kai ji maitinama.
kalibruoti ();
Viduje „ void loop loop“ funkcija ji nuskaitys 100 mėginių X, Y ir Z ašių vertes.
už (int a = 0; a <100; a ++) {xaccl = plūduriuojantis (analogRead (xpin) - 345); vėlavimas (1); yaccl = plūdė (analogasRead (ypin) - 346); vėlavimas (1); zaccl = plūdė (analogasRead (zpin) - 416); vėlavimas (1);
Gavę 3 ašių reikšmes, apskaičiuokite bendrą pagreičio vektorių, imdami kvadratinę šaknį iš X, Y ir Z ašių reikšmių.
totvect = sqrt (((xaccl - xavg) * (xaccl - xavg)) + ((yaccl - yavg) * (yaccl - yavg)) + ((zval - zavg) * (zval - zavg)));
Tada apskaičiuokite didžiausio ir mažiausio pagreičio vektoriaus verčių vidurkį.
totave = (totvect + totvect) / 2;
Dabar palyginkite vidutinį pagreitį su riba. Jei vidurkis yra didesnis už slenkstį, padidinkite žingsnių skaičių ir pakelkite vėliavą.
if (totave> slenkstis && flag == 0) {žingsniai = žingsniai + 1; vėliava = 1; }
Jei vidurkis yra didesnis už slenkstį, bet vėliava iškelta, tada nieko nedarykite.
else if (totave> slenkstis && flag == 1) {// Neskaičiuoti}
Jei bendras vidurkis yra mažesnis už slenkstį ir vėliava yra iškelta, tada padėkite vėliavą.
if (totave <slenkstis && flag == 1) {flag = 0; }
Nuspausdinkite žingsnių skaičių serijiniame monitoriuje ir LCD.
Serial.println (žingsniai); lcd.print ("Žingsniai:"); lcd.print (žingsniai);
„Arduino“ žingsniamačio bandymas
Kai jūsų aparatinė įranga ir kodas bus paruošti, prijunkite „Arduino“ prie nešiojamojo kompiuterio ir įkelkite kodą. Dabar paimkite žingsniamačio nustatymą į rankas ir pradėkite vaikščioti žingsnis po žingsnio, LCD ekrane turėtų būti rodomas žingsnių skaičius. Kartais žingsnių skaičius padidėja, kai žingsniamatis vibruoja labai greitai arba labai lėtai.
Visas darbinis vaizdo įrašas ir ADXL335 žingsniamatis Arduino kodas pateikiami žemiau.