20 de maig 2015

Sensor d'acceleració i camp magnètic



El sensor d'acceleració i camp magnètic LSM303 ens permet conèixer el camp magnètic i, per tant, actuar com a brúixola així com l'acceleració i, per tant, determinar la verticalitat. Té un diàmetre de menys de 17 mm (com una moneda de dos cèntims) i un gruix inferior als 2 mm. Això facilita el seu us incorporant-los a elements tèxtils.

Avís: En el moment d'escriure aquesta pàgina no es podien compilar les llibreries d'aquest sensor en les plaques Gemma.

Aquest sensor es connecta amb la placa del microcontrolador fent servir una comunicació i2c que ens permet transferir la informació fent servir només dos fils (més els dos d'alimentació). Cada placa de microcontrolador només pot tenir connectat un sensor LSM303 però sí admet altres elements i2c coexistint amb ell. Per això, la placa del sensor té duplicades les connexions i2c de manera que sigui fàcil encadenar els dispositius.
LSM303


A la placa hi ha representades unes fletxes que ens indiquen quines són les direccions X i Y considerades. La direcció Z és perpendicular a la placa.

Per fer servir aquest sensor cal connectar el born 3V (inferior a la foto) al born 3,3 V de la placa del microcontrolador (ATENCIÓ: No al born VBATT), el born gnd (superior a la foto) al negatiu de l'alimentació i els borns SDA i SCL amb els del mateix nom de la placa del microcontrolador. A la placa del sensor aquests dos borns hi apareixen dos cops de manera que podem triar la disposició que ens sigui més còmoda.

Per fer servir el sensor ens caldrà la Adafruit_LSM303 library i també la Adafruit Unified Sensor Driver. Un cop ja tinguem les llibreries, podem fer els nostres programes. A la part inicial, hem de carregar les llibreries connesponents. A la part de declaració de variables, hem de crear dos objectes; un Adafruit_LSM303_Accel_Unified i un Adafruit_LSM303_Mag_Unified. Els números 54321 i 12453 poden ser qualsevols però han de ser diferents per a cada sensor. En aquest cas els objectes s'anomenen accel i mag.


En la inicialització del programa, cal inicialitzar les dues parts del sensor. D'aquesta manera el nostre microcontrolador hi estableix connexió i convé preveure que la connexió no sigui possible. En el programa cal definir dos objectes del tipus sensors_event_t, un per a cada part del sensor i cridem a la funció que llegeix els valors indicant-li que guardi els valors a l'event corresponent. El signe & indica que el que posem no és un paràmetre de la funció sinó la variable on ha de guardar els resultats.

Un cop feta la lectura, tenim els resultats a les següents variables (considerant que als events els hem donat el nom que surt al programa que hi ha més avall):

Acceleració (m/s2)
event1
Component Variable
Coordenada X event1.acceleration.x
Coordenada Y event1.acceleration.y
Coordenada Z event1.acceleration.z

Camp magnètic (μT)
event2
Component Variable
Coordenada X event2.magnetic.x
Coordenada Y event2.magnetic.y
Coordenada Z event2.magnetic.z

A continuació hi ha un programa de prova. En aquest cas, obrim també un canal sèrie que ens permeti veure si la connexió ha anat bé i les lectures del sensor al monitor sèrie. El nostre programa de prova llegirà els valors del sensor i els mostrarà. També calcularà l'angle de l'eix X del sensor respecte al nord i el posarem en graus (el valor de sortida de la funció són radians.



Per calcular l'angle hem de tenir present que la tangent de l'angle és igual a Y dividit per X. Però si fem la funció arctangent de Y dividit per X tindrem un problema ja que perdem informació. Per exemple, les tangents de 30° i 210° són totes dues 0,577 i, per tant, sabent la tangent no podem saber l'angle de forma segura ja que hi ha més d'una resposta. Per això fem servir la funció atan2 que rep els dos valors (X i Y) i els fa servir conjuntament per determinar l'angle correcte.

Per provar el programa és recomanable posar la placa del sensor horitzontal i amb la fletxa X apuntant aproximadament cap al nord. A la pantalla del monitor sèrie podrem veure les lectures del sensor que són el camp magnètic en microtesla (μT) multiplicat per 10 i l'acceleració en metres per segon al quadrat (m/s2) multiplicada per 100. També veure el valor de l'angle del nord.

Observeu el valor de l'angle i gireu la placa fins aconseguir un angle proper a zero. Si l'angle és negatiu heu de girar la placa en el sentit de les agulles del rellotge; si es positiu, en sentit contrari.

Hauríeu de tenir un valor d'acceleració a l'eix Z similar a 9,81 (l'acceleració de la gravetat és, aproximadament, de 9,81 m/s2) i valors molt més petits en els altres dos eixos.

Pel que fa al camp magnètic, a l'eix X hauríeu de veure un valor entre 25 i 65 (el camp magnètic terrestre sol estar entre 25 i 65 μT) i un valor molt petit a l'eix Y (si realment el sensor apunta l'eix X cap al nord).

En un sistema estàtic (que no es desplaça significativament), el sensor d'acceleració ens pot servir per saber la verticalitat. És el que fan servir les càmeres fotogràfiques i els telèfons per saber si estan en vertical o en horitzontal. En sistemes en moviment, ens pot servir per saber si el sistema s'accelera (augmenta de velocitat) o es frena i en quina direcció. Atès que la majoria de les persones no estem acostumades al concepte d'acceleració, caldrà fer proves a l'hora de fer servir el sensor en aquesta aplicació.

El camp magnètic que rep el sensor es pot veure molt influït per la proximitat de metalls o d'elements elèctrics (motors, cables, transformadors, etc.) o electrònics (carregadors, alimentadors, telèfons, etc.). Per això no sol ser recomanable intentar tenir en compte els valors del camp magnètic. Sí ens pot servir per saber cap on està el nord. Si existeix la possibilitat que la placa del sensor no estigui horitzontal, és convenient fer servir la indicació del sensor d'acceleració per saber com està la placa i després agafar els eixos corresponents per determinar cap a on està el nord.

En aquesta pàgina podeu trobar més informació sobre el sensor.

Cap comentari:

Publica un comentari a l'entrada

Deixa el teu comentari