Skip to main content

Práctica 2.2: Detectamos el movimiento y la posición de nuestro Arduino

Nuestro Nano 33 IoT fue el Arduino elegido porque a parte de tener un tamaño bastante reducido y permitirnos realizar proyectos que incluyesen el internet de las cosas (IoT) lleva integrado un módulo que nos permite medir la posición relativa de nuestro microcontrolador. Este tipo de módulos reciben el nombre de IMU o Inertial Measurement Unit. En el caso de nuestro microcontrolador, el IMU que contiene es el LSM6DS3. Lo encontramos aquí:

image-1663056799562.jpg

Este sensor hace uso de acelerómetros y giroscopios para calcular esa posición relativa. Un acelerómetro se encarga de medir los cambios en la velocidad de un objeto mientras que un giroscopio mide los cambios en la rotación. Ambos permiten detectar el movimiento rotacional en 3 ejes,ejes aunquey que en nuestro ejemplo solamentelo detectaremostraduciremos a los cambios producidos en dos:dos direcciones: de izquierda a derecha y de arriba a abajo.

 

La librería del LSM6DS3

Como ya comentábamos en la página anterior, las librerías nos van a facilitar las cosas a la hora de trabajar con ciertos sensores, y en esta práctica vamos a hacer uso de una de ellas. Para instalarla vamos a seguir los siguientes pasos:

1. En la parte superior de la IDE de Arduino iremos a Programa > Incluir Librería > Administrar Bibliotecas
2. Se nos abrirá una nueva ventana en la que nos apareceran todas las librerías disponibles ordenadas alfabéticamente
3. En la parte superior derecha de esta ventana, escribiremos LSM6DS3

image-1663057572015.25.44.png


4. La primera que nos aparecerá será Arduino_LSM6DS3 y nos dará la opción de instalarla. En la imagen superior me aparece como ya instalada, pero si es la primera vez que realizáis este proceso os la permitirá instalar.

Una vez seguidos estos pasos, la librería ya está incluida en la IDE de Arduino, lista para ser incluida en los proyectos que la necesitemos.

Y... ¿cómo la incluimos?

Aunque para esta práctica, vamos a utilizar un sketch en el que ya aparece incluida, vamos a abrir un sketch en blanco para ver el proceso.

1. Abrimos un nuevo sketch de Arduino en blanco en Archivo > Nuevo.
2. Vamos a Programa > Incluir Librería > Arduino LSMD6DS3.
3. Veremos que en la primera línea de nuestro sketch aparece #include <Arduino_LSM6DS3>. Esa sentencia le indica a nuestro programa que tiene que hacer uso, #include, la librería cuyo nombre se encuentra entre los símbolos < >.

image-1663058313086.37.58.png

Este archivo en blanco no lo guardaremos, solamente lo hemos usado para ver cómo se incluye una librería. A continuación veremos el código que emplearemos en esta práctica y qué hace cada una de sus líneas.

 

Cómo calcular la posición relativa

El código que vamos a utilizar en esta práctica se corresponde a uno de los ejemplos que acompañan a la librería de nuestro IMU, con ligeras modificaciones.

Esta primera parte es un comentario, como ya hemos visto al principio de todos los programas, se utiliza para indicar la finalidad del algoritmo, el autor y aquellas especificaciones que el autor crea convenientes. Como vemos en la última línea, el código se encuentra en el dominio público, lo que significa que podemos utilizarlo y modificarlo libremente en nuestros proyectos.

La siguiente línea que nos encontramos es la que ya hemos visto y que se refiere a la inclusión de la librería en nuestro sketch:

#include <Arduino_LSM6DS3.h>

Posteriormente, antes de comenzar a escribir nuestros bucles void setup() y void loop() encontramos las variables que utilizaremos en nuestro programa. La primera línea nos dice que vamos a tener 3 variables del tipo float (decimal) que van a ser x, y, z. A esas tres variables no les hemos asignado un valor inicial. En cambio, a las dos siguiente, que son del tipo int (entero), sí que les hemos asignado el valor 0. Es decir, nuestro IMU se va a considerar que comienza su movimiento en 0 grados respecto al eje X e Y:

float x, y, z;
int degreesX = 0;
int degreesY = 0;

Lo próximo que nos encontramos es nuestra llamada a void setup(), en ella inicializaremos aquellos procesos que solamente han de ejecutarse una vez. El primero será el puerto serial.

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("Started");

FUENTE:

Tutorial sobre Nano 33 IoT y acelerómetro: https://docs.arduino.cc/tutorials/nano-33-iot/imu-accelerometer