Instituto Politécnico Nacional Unidad Profesional Interdisciplinaria en Ingeniería y Tecnologías Avanzadas Tópicos avanzados de sensores Practica 3: Conguración y uso del sensor !PU"#$#% Profesora: A&arca 'i(énez )riselda *tep+any Integrantes: ,-lanco Corona .duardo ,.via Ur&an .ric/ Alfredo ,)alindo 0uentes Ale1andro )rupo: 3!!2
Introducción
Para esta práctica se utilizará el sensor MPU6050 el cual contiene un acelerómetro y un giroscopio. Su protocolo de comunicación es mediante El protocolo de comunicación
2
I C
2
I C
.
es una forma de comunicación serial. La caracterstica principal
de este protocolo es el uso de dos lneas para la comunicación! una de ellas es para transmitir los datos y otra para controlar la se"al de relo#. La se"al de relo# se encuentra en el pin con el nom$re S%L y la de los datos en el pin S&'. Para esta práctica se utilizara la tar#eta de desarrollo 'rduino U()! una *enta#a es +ue tiene puertos especiales para este tipo de protocolo y li$reras +ue facilitan el mane#o de este sensor. Para configurar este sensor primeramente se re+uiere conocer la dirección del sensor y configurarla en 'rduino! en este caso es 0,6-. Una *ez conocida la dirección! 'rduino en*a un $it a dica dirección para iniciar la comunicación! luego en*a la dirección del registro +ue se +uiere leer o escri$ir para despu/s reci$ir o en*iar el dato deseado. %ada +ue se ace una lectura el registro se autoincrementa para continuar con el siguiente dato. Mediante la o#a de registros del sensor podemos configurar los parámetros de inter/s! como lo son la resolución del acelerómetro y el giroscopio o el filtro interno. Una *ez +ue se tienen los datos deseados estos se mandan a MatLa$ y se grafican en tiempo real *isualizando el cam$io de las aceleraciones con e#es coordenados. En la siguiente imagen tenemos el sensor MPU6050
1igura 2. Sensor MPU6050
Desarrollo
Para la práctica es necesario +ue el 'rduino en*e datos constantemente acia MatLa$! este 3ltimo será el encargado de procesar los datos reci$idos de tal forma +ue pueda graficar los e#es coordenados en función de la información +ue reci$e del acelerómetro. El siguiente código es para programar 'rduino! el sensor se configura a 4! lo +ue nos interesa sa$er son los ángulos relacionados a las aceleraciones de los 7 e#es del sensor. 8include 9:ire.; 8include 9mat.; <<=egistros de acuerdo a la o#a de especificaciones 8define MPU6050>%)(1? 0,2' 8define MPU6050>@=)>%)(1? 0,2A 8define MPU6050>'%%EL>%)(1? 0,2% 8define MPU6050>'%%EL>B)UC>D 0,7A 8define MPU6050>'%%EL>B)UC>L 0,7% 8define MPU6050>'%%EL>@)UC>D 0,7& 8define MPU6050>'%%EL>@)UC>L 0,7E 8define MPU6050>'%%EL>)UC>D 0,71 8define MPU6050>'%%EL>)UC>L 0,F0 8define MPU6050>CEMP>)UC>D 0,F2 8define MPU6050>CEMP>)UC>L 0,F 8define MPU6050>@=)>B)UC>D 0,F7 8define MPU6050>@=)>B)UC>L 0,FF 8define MPU6050>@=)>@)UC>D 0,F5 8define MPU6050>@=)>@)UC>L 0,F6 8define MPU6050>@=)>)UC>D 0,FG 8define MPU6050>@=)>)UC>L 0,F8define MPU6050>P:=>MDC>2 0,6A 8define MPU6050>'&&=ESS 0,6*oid setupH*oidIJ Serial.$eginHK600I :ire.$eginHI delayH50I <
configuracionHMPU6050>%)(1?!0,07I MPU6050>configuracionHMPU6050>@=)>%)(1?!0,20I MPU6050>configuracionHMPU6050>'%%EL>%)(1?!0,00I MPU6050>configuracionHMPU6050>P:=>MDC>2!0,00I delayH50I
*oid loopH*oidIJ <<&eclaración de *aria$les unsigned sort int accel>,>N0! accel>,>lN0! accel>y>N0! accel>y>lN0! accel>z>N0! accel>z>lN0 long int accel>,N0! accel>yN0! accel>zN0 dou$le alpaN0! $etaN0! gamaN0 <'&&=ESSI :ire.OriteHMPU6050>'%%EL>B)UC>DI :ire.re+uest1romHMPU6050>'&&=ESS! 6I accel>,> N :ire.readHI accel>,>l N :ire.readHI accel>y> N :ire.readHI accel>y>l N :ire.readHI accel>z> N :ire.readHI accel>z>l N :ire.readHI :ire.endCransmissionHI <<)$tencion de *alores y cali$racion accel>,NHlong intIHHHHintIaccel>,>I99- I HHintIaccel>,>lIIQ75 accel>yNHlong intIHHHHintIaccel>y>I99- I HHintIaccel>y>lIIR50 accel>zNHlong intIHHHHintIaccel>z>I99- I HHintIaccel>z>lIIQK00 <<%alculo de angulos alpaNHaccel>,K0I<26500 $etaNHaccel>yK0I<26500 gamaNHHaccel>zK0I<26500IQK0 <configuracionHint r2! int rIJ :ire.$eginCransmissionHMPU6050>'&&=ESSI :ire.OriteHr2I :ire.OriteHrI :ire.endCransmissionHI delayMicrosecondsH0I
Los siguientes códigos son para graficar los e#es coordenados en MatLa$! se incluye el programa principal y la función encargada de rotar la figura dados los datos +ue en*a el sensor. El programa principal es el siguiente
clear; close all; clc; % Inicialización del puerto serial delete(instrfind({'Port'},{'COM3'})); s serial('COM3','!aud"ate',#$); &arnin('off','M*!+serial+fscanf+unsucesful"ead'); fopen(s); % Inicialización de los par-etros de la .iura f fiure('/a-e','Inclinó-etro'); a a0es('1*i-',24 45,'6*i-',24 45,'7*i-',24 45); 8 8ie&(439,3); title('Inclinó-etro MP:$9'); rid on; old on; l; &ile l for i4+4+< %*ectura de los 8alores en8iados desde rduino anfscanf(s,'%f,%f,%f'); end dean'; cla; %*la-a la función "otación, usando co-o par-etros %los 8alores le=dos del puerto serial "otacion(de(4),de(<),de(3)); dra&no& end % .in de la co-unicación serial fclose(s); delete(s);
El código de la función +ue rota los e#es coordenados es la siguiente function "otacion(a, >, c) % .unción para rotar e?es coordenados, reci>e co-o par-etros % el nulo rotado en los e?es 1 6 7 % a > c
Con8ersión de rados a radianes pi@aA4B; pi@>A4B; pi@cA4B;
% e construDe la -atriz para rotar "0 24 ; cos(a) sin(a); sin(a) cos(a)5; "D 2cos(>) sin(>); 4 ; sin(>) cos(>)5; "z 2cos(c) sin(c) ; sin(c) cos(c) ; 45; " "0@"D@"z; "o "'; % O>tiene los co-ponentes de cada nue8o e?e
1 "o@24 5'; 6 "o@2 4 5'; 7 "o@2 45'; % ConstruDe los pares de puntos para di>u?ar los e?es O 2 5'; 1a0is 2O 15; 6a0is 2O 65; 7a0is 2O 75; plot3(1a0is(4,+), 1a0is(<,+), 1a0is(3,+),'r','*ineEidt',<); plot3(6a0is(4,+), 6a0is(<,+), 6a0is(3,+),'','*ineEidt',<); plot3(7a0is(4,+), 7a0is(<,+), 7a0is(3,+),'*ineEidt',<); end
Resultados
Los datos +ue en*a 'rduino se pueden *er en el monitor serial
1igura . isualización de los datos en el monitor serial de 'rduino.
Los 7 *alores +ue se pueden *er son los ángulos relacionados con las aceleraciones! el primero de ellos es alpa! el segundo $eta y el tercero es gama.
Los e#es coordenados se grafican de la siguiente manera en MatLa$
1igura 7. E#es coordenados en función de los ángulos del acelerómetro.
En la primera imagen se pueden *er los e#es coordenados cuando el sensor está en su posición original. La segunda imagen tiene una inclinación de$ido a +ue el sensor tam$i/n fue inclinado de la misma manera. Conclusiones Blanco Corona Eduardo
Para este sensor se tienen *arios parámetros para configurar! en esta práctica se izo /nfasis en la parte de la resolución! ya +ue al re+uerir mediciones de aceleraciones pe+ue"as se optó por usar la resolución de . La cali$ración tam$i/n es importante y 3nica para cada sensor! esta nos permite realizar mediciones correctamente. Por 3ltimo es necesario darle sentido a los *alores +ue se están o$teniendo! en este caso el cálculo de los ángulos es lo +ue nos permite acer esta interpretación. Evia Urban Erick Alfredo
En esta práctica pude acer uso del sensor digital MPU6050! configurando algunos de los registros más importantes para poder modificar el rango y acer uso de las lecturas del acelerómetro! giroscopio y termómetro +ue están incluidos en el sensor. La aplicación +ue realizamos como inclinómetro izo uso de las mediciones del acelerómetro en los diferentes e#es! so$re los cuales se realizó la cali$ración y as poder con*ertir el *alor medido a un ángulo en grados y poder representar la inclinación so$re el e#e coordenada. Galindo Fuentes David Alejandro
'l finalizar esta práctica se conoce la configuración $ásica del sensor MPU6050 para la ad+uisición de datos de este y posteriormente se implementan mediante relaciones matemáticas +ue permitan generar parámetros con interpretación fsica! para nuestro caso se implementó en un inclinómetro! para usos especficos del sensor ya +ue sus mediciones permiten una gran di*ersidad de aplicaciones. 1inalmente un parámetro importante en este tipo de sensores es la cali$ración ya +ue cada sensor re+uiere una propia.