Използването на сензори е от съществено значение в много напреднали проекти за електроника. Ако сте в света на Arduino, вероятно сте чували за акселерометъра, устройство, което измерва вариациите в ускорението, и жироскопа, който ви позволява да работите с ъглови измервания. И двете ви позволяват да улавяте движение и ориентация в триизмерни оси, което отваря вселена от интересни възможности.
В тази статия ще обясним в дълбочина какво е акселерометър и как можете да го интегрирате във вашите Arduino проекти. Ще опишем различни модули като MPU6050, ADXL345 и други подобни, като ще опишем подробно как да извлечете максимума от тях. Освен това ви предлагаме материали за това как да свържете тези сензори и примери за кодове, от които можете да се възползвате за вашите проекти.
Какво е акселерометър?
Акселерометърът е сензор, който измерва ускорението на обект в една или повече оси. Това включва както ускорение поради движение, така и ускорение поради гравитация. Ускорението се измерва в метри в секунда на квадрат (m/s²) и като вземем предвид трите му оси (X, Y и Z), можем да разберем в коя посока и с каква сила се движи обектът.
Акселерометрите са от съществено значение за приложения, изискващи откриване на движение, накланяне или вибрации. Например, те се използват в смартфони за откриване на ориентация на екрана, стабилизиране на камерата, откриване на падане в устройства за сигурност и видео игри.
В проектите на Arduino акселерометърът предоставя изобилие от данни, които можете да конвертирате в действия като контролиране на ориентацията на робота или задействане на аларми, когато определени граници на ускорението са превишени. Освен това много модули като напр MPU6050 и ADXL345 Те също така включват жироскопи, позволяващи допълнителни данни за ъглова скорост и стъпка.
Акселерометър MPU6050
El MPU6050 Той е един от най-използваните модули поради голямата си гъвкавост. Това устройство съчетава както триосен акселерометър, така и триосен жироскоп на един чип, осигурявайки общо шест степени на свобода (6DOF). В допълнение, той включва цифров процесор за движение (DMP), който позволява да се комбинират показанията от двата сензора, оптимизирайки производителността на Arduino чрез избягване на сложни изчисления в рамките на микроконтролера.
Диапазонът на измерване на акселерометъра позволява работа с регулируем диапазон между ±2g, ±4g, ±8g и ±16g. Това му дава голяма прецизност, тъй като има 16-битови преобразуватели, които позволяват да се уловят малки вариации във всяка ос. Също така неговият вътрешен жироскоп позволява измерване на ротации с регулируем обхват между ±250°/s до ±2000°/s.
Комуникацията е лесна благодарение на I2C или SPI протокола, който ви позволява ефективно да свързвате MPU6050 към Arduino и получавате данните бързо през шината за данни. Ниската му консумация на енергия (средно около 3,5 mA) го прави идеален за проекти, при които използването на енергия трябва да бъде оптимизирано.
Пример за свързване на MPU6050
Връзката между модул MPU6050 и Arduino е доста проста, благодарение на стандарта I2C, който този сензор използва.
MPU6050 | Arduino Uno (или подобен) |
---|---|
VCC | 5V |
GND | GND |
SCL | A5 |
S.D.A. | A4 |
След като тези връзки бъдат установени, можете да заредите код в Arduino IDE, който ви позволява да четете данните от акселерометъра и жироскопа в реално време.
Четене на данни с Arduino
За да получите показанията от MPU6050, можете да използвате библиотеките MPU6050 y Тел, които улесняват комуникацията между сензора и платката Arduino. По-долу ви показваме прост пример за това как да четете ускоренията и завъртанията и да ги показвате през серийния порт:
#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);
}
Калибриране на акселерометър
След свързване и получаване на данни е важно да калибрирате сензора, за да получите точни показания. Това включва компенсиране на всякакви грешки, дължащи се на наклон на сензора или малки вариации в електрониката.
За да калибрирате вашия модул MPU6050, можете да регулирате стойностите на офсет както на акселерометъра, така и на жироскопа. Тези компенсации ще ви позволят да коригирате показанията и да ги накарате да отразяват по-точно реалните стойности. Ето пример, при който отместванията се коригират автоматично:
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);
}
Този код е само фрагмент, който илюстрира как да коригирате отместванията от няколко повтарящи се четения.
ADXL345 Акселерометър
El ADXL345 е 3-осен капацитивен акселерометър, също много популярен в общността на Arduino. Подобно на MPU6050, този сензор е с ниска мощност и има блок памет FIFO за съхраняване на до 32 комплекта измервания от трите оси.
Една от силните му страни е, че ви позволява да избирате между няколко диапазона на измерване, от ±2g до ±16g, с разделителна способност до 13 бита. Освен това има два щифта за прекъсване, които можете да конфигурирате за откриване на специфични събития като внезапни движения или свободно падане.
Използване на ADXL345 с Arduino
Свързването на ADXL345 към Arduino също е доста просто. По-долу е описано как да свържете сензора с помощта на I2C шината:
ADXL345 | Arduino Uno (или подобен) |
---|---|
VDC | 5V |
GND | GND |
S.D.A. | A4 |
SCL | A5 |
След като сте готови, можете да използвате библиотеката SparkFun_ADXL345 за да стартирате показанията на вашия акселерометър бързо и ефективно. По-долу е даден код за това как да извършите тези показания:
#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);
}
Приложения за акселерометър
Акселерометрите имат голямо разнообразие от приложения. Освен че се използват в хоби проекти с Arduino, те са от съществено значение в електронните устройства като мобилни телефони, камери и навигационни системи. Най-често срещаните приложения включват:
- Откриване на движение във видео игри и контролери.
- Стабилизация на камерата за да избегнете вибрации.
- Предпазни устройства за откриване на падания или внезапни движения.
- Охранителна аларма в превозни средства или системи за достъп.
Независимо дали искате да създадете свой собствен робот, да разработите система за управление, базирана на жестове, или просто да научите повече за сензорите, акселерометърът е една от най-добрите опции, с които да започнете. Чрез практически примери и правилно калибриране можете да получите точни показания, които ще ви позволят да вземате решения в реално време във вашите проекти.