Daugelyje pažangių elektronikos projektų būtina naudoti jutiklius. Jei esate „Arduino“ pasaulyje, tikriausiai girdėjote apie akselerometrą – prietaisą, kuris matuoja pagreičio pokyčius, ir giroskopą, leidžiantį dirbti su kampiniais matavimais. Abu leidžia užfiksuoti judėjimą ir orientaciją trimatėmis ašimis, o tai atveria įdomių galimybių visatą.
Šiame straipsnyje mes išsamiai paaiškinsime, kas yra akselerometras ir kaip galite jį integruoti į savo Arduino projektus. Aprašysime skirtingus modulius, tokius kaip MPU6050, ADXL345 ir kitus panašius, išsamiai paaiškindami, kaip išnaudoti visas jų galimybes. Be to, siūlome jums medžiagą, kaip prijungti šiuos jutiklius, ir kodų pavyzdžius, kuriuos galite naudoti savo projektams.
Kas yra akselerometras?
Akselerometras yra jutiklis, matuojantis objekto pagreitį vienoje ar keliose ašyse. Tai apima ir pagreitį dėl judesio, ir pagreitį dėl gravitacijos. Pagreitis matuojamas metrais per sekundę kvadratu (m/s²), o atsižvelgdami į tris jo ašis (X, Y ir Z) galime žinoti, kuria kryptimi ir kokia jėga juda objektas.
Pagreičio matuokliai yra būtini programoms, kuriose reikia aptikti judesį, posvyrį ar vibraciją. Pavyzdžiui, jie naudojami išmaniuosiuose telefonuose ekrano orientacijai nustatyti, kameros stabilizavimui, kritimo aptikimui apsaugos įrenginiuose ir vaizdo žaidimuose.
„Arduino“ projektuose akselerometras pateikia daugybę duomenų, kuriuos galite paversti tokiais veiksmais kaip roboto orientacijos valdymas arba pavojaus signalų įjungimas, kai viršijamos tam tikros pagreičio ribos. Be to, daugelis modulių, pvz MPU6050 ir ADXL345 Juose taip pat yra giroskopai, leidžiantys gauti papildomų duomenų apie kampinį greitį ir žingsnį.
MPU6050 akselerometras
El MPU6050 Tai vienas iš dažniausiai naudojamų modulių dėl didelio universalumo. Šiame įrenginyje viename luste sujungiamas ir trijų ašių akselerometras, ir trijų ašių giroskopas, suteikiantis iš viso šešis laisvės laipsnius (6DOF). Be to, jame yra skaitmeninis judesio procesorius (DMP), kuris leidžia sujungti abiejų jutiklių rodmenis, optimizuojant Arduino veikimą išvengiant sudėtingų skaičiavimų mikrovaldiklyje.
Akselerometro matavimo diapazonas leidžia dirbti su reguliuojamu diapazonu tarp ±2g, ±4g, ±8g ir ±16g. Tai suteikia didelį tikslumą, nes jame yra 16 bitų keitikliai, leidžiantys užfiksuoti nedidelius kiekvienos ašies pokyčius. Taip pat jo vidinis giroskopas leidžia matuoti apsisukimus reguliuojamu diapazonu nuo ±250°/s iki ±2000°/s.
Ryšys yra paprastas dėl I2C arba SPI protokolo, kuris leidžia efektyviai prijungti MPU6050 į Arduino ir greitai gaukite duomenis per duomenų magistralę. Dėl mažo energijos suvartojimo (vidutiniškai apie 3,5 mA) jis idealiai tinka projektams, kuriuose reikia optimizuoti energijos naudojimą.
MPU6050 prijungimo pavyzdys
Ryšys tarp MPU6050 modulio ir Arduino yra gana paprastas dėl I2C standarto, kurį naudoja šis jutiklis.
MPU6050 | Arduino Uno (ar panašiai) |
---|---|
VCC | 5V |
GND | GND |
LAT | A5 |
gamtos turtai | A4 |
Užmezgę šiuos ryšius, galite įkelti kodą į „Arduino IDE“, leidžiantį nuskaityti akselerometro ir giroskopo duomenis realiuoju laiku.
Duomenų skaitymas naudojant Arduino
Norėdami gauti rodmenis iš MPU6050, galite naudoti bibliotekas MPU6050 y Laidas, kurios palengvina ryšį tarp jutiklio ir Arduino plokštės. Žemiau pateikiame paprastą pavyzdį, kaip skaityti pagreičius ir sukimus ir rodyti juos per nuoseklųjį prievadą:
#include
#include
MPU6050 accelGyro;
int ax, ay, az;
int gx, gy, gz;
void setup() {
Serial.begin(9600);
Wire.begin();
accelGyro.initialize();
if (accelGyro.testConnection()) {
Serial.println("Sensor conectado correctamente");
} else {
Serial.println("Error al conectar el sensor");
}
}
void loop() {
accelGyro.getAcceleration(&ax, &ay, &az);
accelGyro.getRotation(&gx, &gy, &gz);
Serial.print("Accel: ");
Serial.print(ax); Serial.print(" ");
Serial.print(ay); Serial.print(" ");
Serial.print(az); Serial.print(" ");
Serial.print("Gyro: ");
Serial.print(gx); Serial.print(" ");
Serial.print(gy); Serial.print(" ");
Serial.println(gz);
delay(100);
}
Akselerometro kalibravimas
Prijungus ir gavus duomenis, svarbu sukalibruoti jutiklį, kad būtų gauti tikslūs rodmenys. Tai apima bet kokių klaidų, atsiradusių dėl jutiklio posvyrio arba nedidelių elektronikos svyravimų, kompensavimą.
Norėdami sukalibruoti savo MPU6050 modulį, galite reguliuoti jo reikšmes kompensuoti ir akselerometras, ir giroskopas. Šie poslinkiai leis jums pakoreguoti rodmenis ir tiksliau atspindėti tikrąsias reikšmes. Štai pavyzdys, kai poslinkiai koreguojami automatiškai:
void calibrateMPU6050() {
int16_t ax, ay, az, gx, gy, gz;
int ax_offset = 0, ay_offset = 0, az_offset = 0;
int gx_offset = 0, gy_offset = 0, gz_offset = 0;
// Inicia con valores de ejemplo...
for(int i=0; i<100; i++) {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
ax_offset += ax; ay_offset += ay; az_offset += az;
gx_offset += gx; gy_offset += gy; gz_offset += gz;
delay(100);
}
Šis kodas yra tik fragmentas, iliustruojantis, kaip koreguoti kelių kartotinių skaitymų poslinkius.
ADXL345 akselerometras
El ADXL345 yra 3 ašių talpinis akselerometras, taip pat labai populiarus Arduino bendruomenėje. Kaip ir MPU6050, šis jutiklis yra mažos galios ir turi FIFO atminties bloką, kuriame galima saugoti iki 32 matavimų rinkinių iš visų trijų ašių.
Viena iš jo stipriųjų pusių yra tai, kad jis leidžia pasirinkti iš kelių matavimo diapazonų, nuo ±2 g iki ±16 g, su iki 13 bitų skiriamąja geba. Jame taip pat yra du pertraukimo kaiščiai, kuriuos galite sukonfigūruoti, kad aptiktumėte konkrečius įvykius, tokius kaip staigūs judesiai ar laisvi kritimai.
ADXL345 naudojimas su Arduino
ADXL345 prijungimas prie Arduino taip pat yra gana paprastas. Žemiau parodyta, kaip prijungti jutiklį naudojant I2C magistralę:
ADXL345 | Arduino Uno (ar panašiai) |
---|---|
VCC | 5V |
GND | GND |
gamtos turtai | A4 |
LAT | A5 |
Kai būsite pasiruošę, galėsite naudotis biblioteka SparkFun_ADXL345 greitai ir efektyviai paleisti akselerometro rodmenis. Žemiau pateikiamas kodas, kaip atlikti šiuos rodmenis:
#include
ADXL345 adxl;
void setup() {
Serial.begin(9600);
adxl.powerOn();
adxl.setRangeSetting(8); // Selecciona el rango de ±8g
}
void loop() {
int x, y, z;
adxl.readAccel(&x, &y, &z);
Serial.print("X:"); Serial.print(x);
Serial.print(" Y:"); Serial.print(y);
Serial.print(" Z:"); Serial.println(z);
delay(500);
}
Akselerometro programos
Akselerometrai turi platų pritaikymo spektrą. Be to, kad jie naudojami hobio projektuose su Arduino, jie yra būtini elektroniniuose įrenginiuose, tokiuose kaip mobilieji telefonai, fotoaparatai ir navigacijos sistemos. Dažniausiai pasitaikančios programos apima:
- Judesio aptikimas vaizdo žaidimuose ir valdikliuose.
- Kameros stabilizavimas kad būtų išvengta vibracijos.
- Saugos įtaisai aptikti kritimus ar staigius judesius.
- Apsaugos signalizacija transporto priemonėse ar prieigos sistemose.
Nesvarbu, ar norite sukurti savo robotą, sukurti gestais pagrįstą valdymo sistemą, ar tiesiog sužinoti daugiau apie jutiklius, akselerometras yra vienas geriausių pasirinkimų pradėti. Remdamiesi praktiniais pavyzdžiais ir teisingu kalibravimu, galite gauti tikslius rodmenis, kurie leis priimti sprendimus įgyvendindami projektus realiuoju laiku.