Com utilitzar un Acceleròmetre amb Arduino

  • El MPU6050 és un sensor que combina acceleròmetre i giroscopi, amb un processador DMP que optimitza el rendiment.
  • El MPU6050 permet mesurar moviment en 3 eixos i es comunica amb Arduino usant I2C o SPI, sent òptim per mesurar acceleració i rotació.
  • L'ADXL345 és un altre acceleròmetre popular que disposa de pins d'interrupció i és altament precís amb la resolució de 13 bits.

acceleròmetre

Lús de sensors és fonamental en nombrosos projectes delectrònica avançada. Si sou al món d'Arduino, probablement heu sentit a parlar de l'acceleròmetre, un dispositiu que mesura variacions en l'acceleració, i del giroscopi, que us permet treballar amb mesuraments angulars. Tots dos possibiliten que puguis capturar el moviment i l'orientació en eixos tridimensionals, cosa que obre un univers de possibilitats interessants.

En aquest article t'explicarem a fons què és un acceleròmetre i com el pots integrar en els teus projectes amb Arduino. Descriurem diferents mòduls com el MPU6050, l'ADXL345 i altres de similars, detallant com treure-li el màxim profit. A més, us oferim material sobre com connectar aquests sensors i exemples de codi que podeu aprofitar per als vostres projectes.

Què és un acceleròmetre?

acceleròmetre

Un acceleròmetre és un sensor que mesura l‟acceleració d‟un objecte en un o més eixos. Això inclou tant l‟acceleració deguda al moviment com l‟acceleració deguda a la gravetat. L'acceleració es mesura en metres per segon al quadrat (m/s²), i en tenir en compte els tres eixos (X, Y i Z), podem saber en quina direcció i amb quina força s'està movent l'objecte.

Els acceleròmetres són essencials per a aplicacions que requereixin detecció de moviment, inclinació o vibració. Per exemple, s'utilitzen en telèfons intel·ligents per detectar l'orientació de la pantalla, estabilització de càmeres, detecció de caigudes en dispositius de seguretat i videojocs.

En projectes amb Arduino, l'acceleròmetre ofereix una gran quantitat de dades que podeu convertir en accions com controlar l'orientació d'un robot o activar alarmes quan se superen certs límits d'acceleració. A més, molts mòduls com el MPU6050 i ADXL345 també inclouen giroscopis, cosa que permet obtenir dades addicionals sobre la velocitat angular i la inclinació.

L'acceleròmetre MPU6050

El MPU6050 és un dels mòduls més utilitzats degut a la seva gran versatilitat. Aquest dispositiu combina tant un acceleròmetre de tres eixos com un giroscopi de tres eixos en un sol xip, cosa que proporciona un total de sis graus de llibertat (6DOF). A més, inclou un Digital Motion Processor (DMP) que permet combinar les lectures dels dos sensors, optimitzant el rendiment de l'Arduino en evitar càlculs complexos dins del microcontrolador.

El rang de mesura de l'acceleròmetre permet treballar amb un rang ajustable entre ±2g, ±4g, ±8g i ±16g. Això li atorga una gran precisió, ja que disposa de convertidors de 16 bits que permeten captar petites variacions a cada eix. També el seu giroscopi intern permet el mesurament de rotacions amb un rang ajustable entre ±250°/sa ±2000°/s.

La comunicació és senzilla gràcies al protocol I2C o SPI, cosa que permet connectar de manera eficient el MPU6050 a un Arduino i obtenir les dades ràpidament a través del bus de dades. El baix consum d'energia (uns 3,5mA de mitjana) el fa ideal per a projectes on s'ha d'optimitzar l'ús d'energia.

Exemple de connexió del MPU6050

La connexió entre un mòdul MPU6050 i Arduino és força senzilla, gràcies a l'estàndard I2C que utilitza aquest sensor.

MPU6050 Arduino Uno (o semblant)
VCC 5V
GND GND
SCL A5
SDA A4

Un cop establertes aquestes connexions, podeu carregar un codi a l'IDE d'Arduino que us permeti llegir les dades de l'acceleròmetre i el giroscopi en temps real.

Lectura de dades amb Arduino

Per obtenir les lectures del MPU6050, pots fer servir les biblioteques MPU6050 y filferro, que faciliten la comunicació entre el sensor i la placa Arduino. A continuació us mostrem un exemple senzill de com llegir les acceleracions i rotacions i mostrar-les pel port sèrie:

#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);
}

Calibratge de l'acceleròmetre

Un cop connectat i rebent dades, és important calibrar el sensor per obtenir lectures precises. Això implica compensar qualsevol error a causa de la inclinació del sensor o petites variacions als components electrònics.

Per calibrar el teu mòdul MPU6050, pots ajustar els valors de offset tant de l'acceleròmetre com del giroscopi. Aquests òfsets et permetran corregir les lectures i fer que reflecteixin amb més precisió els valors reals. Aquí tens un exemple on els òfsets són ajustats automàticament:

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);
  }

Aquest codi és només un fragment per il·lustrar com ajustar els òfsets a partir de diverses lectures repetides.

Acceleròmetre ADXL345

El ADXL345 és un acceleròmetre capacitiu de 3 eixos també molt popular a la comunitat d'Arduino. Com el MPU6050, aquest sensor és de baix consum i disposa d'un bloc de memòria FIFO per emmagatzemar fins a 32 conjunts de mesuraments dels tres eixos.

Un dels seus punts forts és que permet escollir entre diversos rangs de mesura, des de ±2g fins a ±16g, amb una resolució de fins a 13 bits. Té també dues pins d'interrupcions que pots configurar per detectar esdeveniments específics com ara moviments bruscos o caigudes lliures.

Ús de l'ADXL345 amb Arduino

La connexió de l'ADXL345 a un Arduino també és força senzilla. A continuació es mostra com connectar el sensor usant el bus I2C:

ADXL345 Arduino Uno (o semblant)
Vcc 5V
GND GND
SDA A4
SCL A5

Quan estiguis llest, pots fer servir la biblioteca SparkFun_ADXL345 per llançar les lectures de l'acceleròmetre de forma ràpida i eficient. A continuació es mostra un codi de com fer aquestes lectures:

#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);
}

Aplicacions de l'acceleròmetre

Els acceleròmetres tenen una gran varietat d'aplicacions. A més de ser emprats en projectes de hobby amb Arduino, són essencials en dispositius electrònics com ara telèfons mòbils, càmeres i sistemes de navegació. Les aplicacions més comunes inclouen:

  • Detecció de moviment en videojocs i controladors.
  • Estabilització de càmeres per evitar vibracions.
  • Dispositius de seguretat per detectar caigudes o moviments bruscs.
  • Alarma de seguretat vehicles o sistemes d'accés.

Ja sigui que vulguis construir el teu propi robot, desenvolupar un sistema de control basat en gestos o simplement aprendre'n més sobre sensors, l'acceleròmetre és una de les millors opcions per començar. A través d'exemples pràctics i un calibratge correcte, pots obtenir lectures precises que et permetran prendre decisions en temps real en els teus projectes.