12
1 LSM303DLHC magnetómetro / ace magnetó LSM30 Microel elerómetro Como usar el ómetro/acelerómetr 03DLHC con Arduino lectronicos Bogotá ro

Como usar el magnetómetro/acelerómetro LSM3 03DLHC … · Con este documento llega un driver para arduino que facilita El driver es una clase de C++ que principalmente hace lo siguiente:

  • Upload
    ngothuy

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

1 LSM303DLHC magnetómetro / acelerómetro

magnetómetro/acelerómetro

LSM303DLHC

Microelectronicos Bogotá

magnetómetro / acelerómetro

Como usar el

magnetómetro/acelerómetro

03DLHC con Arduino

Microelectronicos Bogotá

magnetómetro/acelerómetro

2 LSM303DLHC magnetómetro / acelerómetro

Indicé

El LSM303DLHC ................................

Brújula electrónica ................................

La libreria para arduino ................................

Instalación ................................................................

Propiedades públicas ................................

Funciones públicas ................................

Ejemplo ................................................................

Esquema ................................................................

Sketches ................................................................

Serial................................................................

Calibrate ................................................................

Heading ................................................................

Referencias / links ................................

Microelectronicos Bogotá

magnetómetro / acelerómetro

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................

................................................................................................

................................................................................................

................................................................................................

................................................................................................

................................................................................................

................................................................................................................................

Microelectronicos Bogotá

............................................. 3

........................................ 4

................................. 5

................................................. 6

................................ 6

.................................... 7

......................................................... 9

.................................................... 9

.................................................. 10

.................................................... 10

.............................................. 10

............................................... 10

....................................... 12

3 LSM303DLHC magnetómetro / acelerómetro

El LSM303DLHC The LSM303DLHC is a system-in-package featuring a 3D digital linear acceleration sensor and a 3D digital magnetic

sensor. LSM303DLHC has linear acceleration full

±1.3 / ±1.9 / ±2.5 / ±4.0 / ±4.7 / ±5.6 / ±8.1 gauss. All full

user.LSM303DLHC includes an I2C serial bus interface that supports standard and fast mode 100 kHz and 400kHz.

The system can be configured to generate interrupt signals by in

position of the device itself. Thresholds and timing of interrupt generators are programmable by the end user on

the fly. Magnetic and accelerometer parts can be enabled or put into power

LSM303DLHC is available in a plastic land grid array package (LGA) and is guaranteed to operate over an extended

temperature range from -40 °C to +85 °C.

Features

■ 3 magnetic field channels and 3 acceleration channels

■ From ±1.3 to ±8.1 gauss magnetic field full

■ ±2g/±4g/±8g/±16g selectable full-scale

■ 16 bit data output

■ I2C serial interface

■ Analog supply voltage 2.16 V to 3.6 V

■ Power-down mode/ low-power mode

■ 2 independent programmable interrupt generators for free

■ Embedded temperature sensor

■ Embedded FIFO

■ 6D/4D orientation detection

■ ECOPACK® RoHS and “Green” compliant

Applications

■ Compensated compass

■ Map rotation

■ Position detection

■ Motion-activated functions

■ Free-fall detection

■ Click/double click recognition

■ Pedometer

■ Intelligent power-saving for handheld devices

■ Display orientation

■ Gaming and virtual reality input devices

■ Impact recognition and logging

■ Vibration monitoring and compensation

Complete datasheet

Microelectronicos Bogotá

magnetómetro / acelerómetro

package featuring a 3D digital linear acceleration sensor and a 3D digital magnetic

sensor. LSM303DLHC has linear acceleration full-scales of ±2g / ±4g / ±8g / ±16g and a magnetic field full

/ ±4.7 / ±5.6 / ±8.1 gauss. All full-scales available are fully selectable by the

user.LSM303DLHC includes an I2C serial bus interface that supports standard and fast mode 100 kHz and 400kHz.

The system can be configured to generate interrupt signals by inertial wake-up/free-fall events as well as by the

position of the device itself. Thresholds and timing of interrupt generators are programmable by the end user on

the fly. Magnetic and accelerometer parts can be enabled or put into power-down mode separate

LSM303DLHC is available in a plastic land grid array package (LGA) and is guaranteed to operate over an extended

40 °C to +85 °C.

3 magnetic field channels and 3 acceleration channels

netic field full-scale

scale

Analog supply voltage 2.16 V to 3.6 V

power mode

2 independent programmable interrupt generators for free-fall and motion detection

ECOPACK® RoHS and “Green” compliant

saving for handheld devices

Gaming and virtual reality input devices

Vibration monitoring and compensation

Microelectronicos Bogotá

package featuring a 3D digital linear acceleration sensor and a 3D digital magnetic

scales of ±2g / ±4g / ±8g / ±16g and a magnetic field full-scale of

scales available are fully selectable by the

user.LSM303DLHC includes an I2C serial bus interface that supports standard and fast mode 100 kHz and 400kHz.

fall events as well as by the

position of the device itself. Thresholds and timing of interrupt generators are programmable by the end user on

down mode separately.The

LSM303DLHC is available in a plastic land grid array package (LGA) and is guaranteed to operate over an extended

4 LSM303DLHC magnetómetro / acelerómetro

Brújula electrónica

Te gusta la brújula en el iPhone?

Pues construimos una brújula electrónica

Si vemos la hoja de datos, vemos que el LSM303DLHC cuenta c

ejes y un acelerómetro con 3 ejes. Mientras

preguntémonos para que necesitamos 3 ejes y un acelerómetro para una brújula?

Tu también tenias una de estas brújulas cuando

Este es un aparatico maravilloso, pero tiene sus problemas:

• Tiene que ser usada horizontalmente

• No muestra el norte geográfico

• Una brújula que compras en Europa no funciona bien en

• La brújula es muy sensible a metales e imanes que se encuentran cerca

Todas estas imperfecciones no son verdader

• Si inclinamos una brújula magnética, la aguja va a tener contacto con la base a partir de un

ángulo bastante pequeño y así no

electrónica. Pero sin embargo las líneas magnéticas del campo terrestre van a cruzar el

magnetómetro en un ángulo diferente, que tiene como consecuencia una medición errónea.

Pero si medimos el ángulo de est

medición.

• Si uno dice “Norte” casi siempre se

indica es el polo norte magnético. La diferencia entre

donde uno se encuentra y se llama declinación

encuentran listas con estos

adicionar la declinación magnética a la orientación medida. Como una brújula magnética

siempre cuenta con un computador o controlador es fácil calcular la orientación geográfica.

Microelectronicos Bogotá

magnetómetro / acelerómetro

electrónica!

Si vemos la hoja de datos, vemos que el LSM303DLHC cuenta con 2 sensores, un magnetómetro con 3

ejes y un acelerómetro con 3 ejes. Mientras que es obvio para que necesitamos el magnetómetro,

preguntémonos para que necesitamos 3 ejes y un acelerómetro para una brújula?

de estas brújulas cuando niño?

es un aparatico maravilloso, pero tiene sus problemas:

Tiene que ser usada horizontalmente

No muestra el norte geográfico

Una brújula que compras en Europa no funciona bien en Sur América

a metales e imanes que se encuentran cerca

imperfecciones no son verdaderos problemas para la brújula electrónica!

mos una brújula magnética, la aguja va a tener contacto con la base a partir de un

ángulo bastante pequeño y así no se puede mover más. Obvio que esto no pasa en una brújula

electrónica. Pero sin embargo las líneas magnéticas del campo terrestre van a cruzar el

magnetómetro en un ángulo diferente, que tiene como consecuencia una medición errónea.

ulo de esta inclinación con el acelerómetro, podemos compensar nuestra

Si uno dice “Norte” casi siempre se refiere al polo norte geográfico, pero lo que la brújula nos

indica es el polo norte magnético. La diferencia entre estos dos puntos depend

donde uno se encuentra y se llama declinación magnética(ver figura 1). En internet se

s ángulos. Para calcular la orientación al polo geográfico

clinación magnética a la orientación medida. Como una brújula magnética

siempre cuenta con un computador o controlador es fácil calcular la orientación geográfica.

Microelectronicos Bogotá

2 sensores, un magnetómetro con 3

es obvio para que necesitamos el magnetómetro,

mos una brújula magnética, la aguja va a tener contacto con la base a partir de un

. Obvio que esto no pasa en una brújula

electrónica. Pero sin embargo las líneas magnéticas del campo terrestre van a cruzar el

magnetómetro en un ángulo diferente, que tiene como consecuencia una medición errónea.

podemos compensar nuestra

, pero lo que la brújula nos

depende de la latitud en

. En internet se

geográfico se debe

clinación magnética a la orientación medida. Como una brújula magnética

siempre cuenta con un computador o controlador es fácil calcular la orientación geográfica.

5 LSM303DLHC magnetómetro / acelerómetro

• La forma del campo magnético de la tierra es di

cruzan las líneas magnéticas la horizontal se denomina inclinación magnética. En los polos este

ángulo tiene 90°, en el ecuador 0° y en Europa alrededor de unos 60°. Por eso las agujas de las

brújulas magnéticas siempre son balanceadas, y este balan

tierra. Como una brújula electrónica cuenta con 3 ejes es simple proyectar el vector de la

medición en un plano horizontal.

• También la brújula electrónica

Pero esto también se puede solucionar fácilmente. Podemos compensar los efectos, si

evaluamos todas las magnitudes del

representación en 3 dimensiones de estas mediciones deben resultar en una esfera c

la esfera no está centrada un campo magnético cercan

(hard-iron). Si la figura no es una esfera

causas en metales o conductores (soft

las alteraciones hard-iron, las alteraciones soft

diseño de la placa PCB se pueden minimizar. Si

compensación para estos efectos vas

compass

La librería para arduino Con este documento llega un driver para arduino que facilita

El driver es una clase de C++ que principalmente hace lo siguiente:

• Abstraer la comunicación de I

• Compensar las alteraciones causad

• Calcular la orientación con una compensación de inclinación del dispositivo (un poco de

matemática)

Microelectronicos Bogotá

magnetómetro / acelerómetro

La forma del campo magnético de la tierra es distinto en diferentes latitudes. El ángulo

s líneas magnéticas la horizontal se denomina inclinación magnética. En los polos este

ángulo tiene 90°, en el ecuador 0° y en Europa alrededor de unos 60°. Por eso las agujas de las

brújulas magnéticas siempre son balanceadas, y este balanceo solo sirve para una región de la

tierra. Como una brújula electrónica cuenta con 3 ejes es simple proyectar el vector de la

medición en un plano horizontal.

electrónica es sensible a metales e imanes que se encuentran cerca de ella.

Pero esto también se puede solucionar fácilmente. Podemos compensar los efectos, si

s magnitudes del magnetómetro cuando lo giramos por todos sus ejes. La

representación en 3 dimensiones de estas mediciones deben resultar en una esfera c

centrada un campo magnético cercano, de un imán, alterará

figura no es una esfera sino más bien un elipsoide, las alteraciones tienen sus

causas en metales o conductores (soft-iron). La librería que hemos diseñado puede compensar

iron, las alteraciones soft-iron en general son muy pequeña

se pueden minimizar. Si de todas formas quieres aplicar una

compensación para estos efectos vas a encontrar buena información aquí: Tilt compensated

Con este documento llega un driver para arduino que facilita el uso del LSM303DLHC.

El driver es una clase de C++ que principalmente hace lo siguiente:

Abstraer la comunicación de I2C con el sensor

s alteraciones causadas por imanes (hard-iron)

Calcular la orientación con una compensación de inclinación del dispositivo (un poco de

Microelectronicos Bogotá

en diferentes latitudes. El ángulo en que

s líneas magnéticas la horizontal se denomina inclinación magnética. En los polos este

ángulo tiene 90°, en el ecuador 0° y en Europa alrededor de unos 60°. Por eso las agujas de las

ceo solo sirve para una región de la

tierra. Como una brújula electrónica cuenta con 3 ejes es simple proyectar el vector de la

es sensible a metales e imanes que se encuentran cerca de ella.

Pero esto también se puede solucionar fácilmente. Podemos compensar los efectos, si

cuando lo giramos por todos sus ejes. La

representación en 3 dimensiones de estas mediciones deben resultar en una esfera centrada. Si

nuestra medición

s bien un elipsoide, las alteraciones tienen sus

puede compensar

iron en general son muy pequeñas y con un buen

todas formas quieres aplicar una

Tilt compensated

Calcular la orientación con una compensación de inclinación del dispositivo (un poco de

6 LSM303DLHC magnetómetro / acelerómetro

Este driver consiste de una carpeta denominada “LSM303DLHC” que contiene dos archivos:

• LSM303.h

• LSM303.cpp

estos son los archivos driver. También hay una c

ejemplo sobre cómo usar el driver.

Instalación

Para instalar esta librería, llega a tu carpeta de instalación de arduino y copia toda la carpeta

“LSM303DLHC” en la carpeta “libraries

driver.

Propiedades públicas

Las propiedades públicas de este driver son:

vector a

La última medición del acelerómetro

vector m

La última medición del magnetómetro

vector m_min

Los valores mínimos del magnetómetro de cada eje. Se usa para la calibración de

vector m_max

Microelectronicos Bogotá

magnetómetro / acelerómetro

una carpeta denominada “LSM303DLHC” que contiene dos archivos:

estos son los archivos driver. También hay una carpeta “examples” que contiene un sketch de un

a, llega a tu carpeta de instalación de arduino y copia toda la carpeta

“LSM303DLHC” en la carpeta “libraries”. Después debes reiniciar el IDE Arduino para tener acceso al

públicas de este driver son:

medición del acelerómetro.

magnetómetro.

magnetómetro de cada eje. Se usa para la calibración de

Microelectronicos Bogotá

una carpeta denominada “LSM303DLHC” que contiene dos archivos:

arpeta “examples” que contiene un sketch de un

a, llega a tu carpeta de instalación de arduino y copia toda la carpeta

Arduino para tener acceso al

magnetómetro de cada eje. Se usa para la calibración de heading().

7 LSM303DLHC magnetómetro / acelerómetro

Los valores máximos del magnetómetro de cada eje. Se usa para la calibración de

byte last_status

El estado de la última transacción del bus I2C. Mira aquí para los códigos de errores:

Wire.endTransmission()

magGain magGain_?

Una enumeración con posibles valores de amplificación del magnetómetro

magGain_13 = ±1,3Gauss

magGain_19 = ±1,9 Gauss

magGain_25 = ±2,5 Gauss

magGain_40 = ±4,0 Gauss

magGain_47 = ±4,7 Gauss

magGain_56 = ±5,6 Gauss

magGain_81 = ±8,1 Gauss

Funciones públicas

Las funciones públicas de este driver son:

LSM303(void)

El constructor de la clase

void enableDefault(void)

Inicializa el acelerómetro y el

void writeAccReg(byte reg, byte value)

Escribe un byte a un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

byte readAccReg(byte reg)

Lee un byte de un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

void writeMagReg(byte reg, byte value)

Escribe un byte a un registro del

byte readMagReg(int reg)

Lee un byte de un registro del

void setMagGain(magGain value)

Ajusta la amplificación del magnetómetro. Usa los elementos de la enumeración

Microelectronicos Bogotá

magnetómetro / acelerómetro

Los valores máximos del magnetómetro de cada eje. Se usa para la calibración de

transacción del bus I2C. Mira aquí para los códigos de errores:

Wire.endTransmission() documentation

Una enumeración con posibles valores de amplificación del magnetómetro.

Las funciones públicas de este driver son:

void enableDefault(void)

el acelerómetro y el magnetómetro en la configuración básica.

void writeAccReg(byte reg, byte value)

Escribe un byte a un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

yte readAccReg(byte reg)

Lee un byte de un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

void writeMagReg(byte reg, byte value)

Escribe un byte a un registro del magnetómetro. Mira LSM303.h para nombres de los registros.

MagReg(int reg)

Lee un byte de un registro del magnetómetro. Mira LSM303.h para nombres de los registros.

void setMagGain(magGain value)

Ajusta la amplificación del magnetómetro. Usa los elementos de la enumeración

Microelectronicos Bogotá

Los valores máximos del magnetómetro de cada eje. Se usa para la calibración de heading().

transacción del bus I2C. Mira aquí para los códigos de errores:

Escribe un byte a un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

Lee un byte de un registro del acelerómetro. Mira LSM303.h para nombres de los registros.

. Mira LSM303.h para nombres de los registros.

. Mira LSM303.h para nombres de los registros.

Ajusta la amplificación del magnetómetro. Usa los elementos de la enumeración magGain

8 LSM303DLHC magnetómetro / acelerómetro

void readAcc(void)

Lee los valores de aceleración momentánea y los graba en el vector

void readMag(void)

Lee los valores momentáneas del magnetómetro y los graba en el vector

void read(void)

Ejecuta readAcc y readMag

int heading(void)

Vuelve con la orientación compensada y calibrada como ángulo con respeto al norte

Microelectronicos Bogotá

magnetómetro / acelerómetro

Lee los valores de aceleración momentánea y los graba en el vector a.

Lee los valores momentáneas del magnetómetro y los graba en el vector m.

readMag

compensada y calibrada como ángulo con respeto al norte

Microelectronicos Bogotá

compensada y calibrada como ángulo con respeto al norte

9 LSM303DLHC magnetómetro / acelerómetro

Ejemplo

Esquema

Para usar el sketch del ejemplo se debe conectar el sensor LSM303DLHC como se ve en el esquema

siguiente:

Microelectronicos Bogotá

magnetómetro / acelerómetro

Para usar el sketch del ejemplo se debe conectar el sensor LSM303DLHC como se ve en el esquema

(Una versión mas

grande de este

esquema se

encuentra como

PDF en la carpeta

“examples” del

driver.)

Nota que no es

necesario conectar

el display LCD,

porque el

funcionamiento

también se puede

ver a través del

Microelectronicos Bogotá

Para usar el sketch del ejemplo se debe conectar el sensor LSM303DLHC como se ve en el esquema

(Una versión mas

grande de este

esquema se

encuentra como

PDF en la carpeta

“examples” del

driver.)

Nota que no es

necesario conectar

el display LCD,

porque el

funcionamiento

también se puede

ver a través del

10 LSM303DLHC magnetómetro / acelerómetro

puerto USB y en el IDE de Arduino.

Sketches

Hay tres programas de ejemplo en “examples

Serial

Este ejemplo imprime los datos sin tratamiento

con este :

Calibrate

Este programa es una ayuda para calibrar

“Heading”. Antes de usar “heading” debes ejecutar este sketch y seguir los siguientes pasos:

1. Carga el Arduino con este sketch

2. Arranque el monitor serial

3. Coge el circuito y gíralo en todos los direcciones hasta

monitor serial no cambian mas. Esto se hace para obtener un centro de referencia el cuál debe

estar sobre una esfera imaginaria.

4. Anota estos valores.

Heading

Esto es el ejemplo principal. Imprim

Antes de cargar este sketch debes pasar los valores que has obtenido a través del sketch “calibrate” a

este sketch.

Microelectronicos Bogotá

magnetómetro / acelerómetro

“examples”:

sin tratamiento de todos los 6 ejes en el puerto serial. Debes empezar

es una ayuda para calibrar los valores de orientación que se pueden ver en el ejempl

“Heading”. Antes de usar “heading” debes ejecutar este sketch y seguir los siguientes pasos:

Carga el Arduino con este sketch

Coge el circuito y gíralo en todos los direcciones hasta que los valores que se pueden ver en e

monitor serial no cambian mas. Esto se hace para obtener un centro de referencia el cuál debe

estar sobre una esfera imaginaria.

el ejemplo principal. Imprime el valor y el punto cardinal al puerto serial y a un displa

Antes de cargar este sketch debes pasar los valores que has obtenido a través del sketch “calibrate” a

Microelectronicos Bogotá

de todos los 6 ejes en el puerto serial. Debes empezar

s valores de orientación que se pueden ver en el ejemplo

“Heading”. Antes de usar “heading” debes ejecutar este sketch y seguir los siguientes pasos:

los valores que se pueden ver en el

monitor serial no cambian mas. Esto se hace para obtener un centro de referencia el cuál debe

el valor y el punto cardinal al puerto serial y a un display LCD

Antes de cargar este sketch debes pasar los valores que has obtenido a través del sketch “calibrate” a

11 LSM303DLHC magnetómetro / acelerómetro

Microelectronicos Bogotá

magnetómetro / acelerómetro

Microelectronicos Bogotá

12 LSM303DLHC magnetómetro / acelerómetro

Referencias / links

• LSM303DLHC en microelectronicos.com

http://www.microelectronicos.com/shopexd.asp?id=380

• datasheet LSM303DLHC http://www.microelectronicos.com/shopexd.asp?id=380

• Application note Tilt compensated compass

http://www.spacegrant.colorado.edu/COSGC_Files/Robotics/Workshop%20Resources/LSM303

%20AppNote.pdf

• Arduino nano en microelectronicos.com

http://www.microelectronicos.com/shopexd.asp?id=296

• Arduino web page http://arduino.cc/

• Wikipedia about the compass

Microelectronicos Bogotá

magnetómetro / acelerómetro

microelectronicos.com

http://www.microelectronicos.com/shopexd.asp?id=380

http://www.microelectronicos.com/shopexd.asp?id=380

Tilt compensated compass

http://www.spacegrant.colorado.edu/COSGC_Files/Robotics/Workshop%20Resources/LSM303

microelectronicos.com

http://www.microelectronicos.com/shopexd.asp?id=296

http://arduino.cc/

compass http://en.wikipedia.org/wiki/Compass

Microelectronicos Bogotá

http://www.microelectronicos.com/shopexd.asp?id=380

http://www.spacegrant.colorado.edu/COSGC_Files/Robotics/Workshop%20Resources/LSM303