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