u.n.s.j f acultad de i ngenierÍa

12
U.N.S.J F ACULTAD DE I NGENIERÍA COMPLEMENTOS DE INFORMÁTICA DETECTOR DE DATOS DIGITALES, ANALOGICOS Y TEMPERATURA. GRILLO, BRUNO REG: 23001 MASIERO, RENZO R EG:24228 30 DE OCTUBRE 2014

Upload: others

Post on 23-Jul-2022

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: U.N.S.J F ACULTAD DE I NGENIERÍA

U.N.S.J

F ACULTAD DE I NGENIERÍA

COMPLEMENTOS DE INFORMÁTICA

DETECTOR DE DATOS DIGITALES, ANALOGICOS Y TEMPERATURA.

GRILLO, BRUNO REG: 23001 MASIERO, RENZO R EG:24228

30 DE OCTUBRE 2014

Page 2: U.N.S.J F ACULTAD DE I NGENIERÍA

Especificaciones del software. El programa esta diseñado para que el usuario pueda realizar de forma fácil y precisa la toma de datos analógicos, digitales o de la temperatura ambiente según desee. Es de muy fácil interpretación y solo se debe seleccionar la parte del programa que se desea usar dependiendo del tipo de dato que el usuario pretenda sensar. Descripción General En este trabajo integrador de materia se presentará un algoritmo implementado en el lenguaje de programación C++, utilizando entre otras la librería SerialPort.h, que permite la comunicación a través del puerto serie entre la CPU y el microcontrolador MSP430 (de la empresa Texas de la serie Value Line) por medio del cual se logran capturar los datos digitales, analógicos y la temperatura del mundo exterior. Para realizar dicho proyecto se integraron los conceptos aprendidos en las materias “Microcontroladores” y “Complementos de Informática” con lo que logramos hacer un algoritmo enfocado en simular la base para un data logger de baja frecuencia y muy bajo costo que obtiene los datos a través del microcontrolador para poder analizarlos y/o graficarlos por medio del GNU Octave que es un programa de software libre que permite graficar y realizar cálculos numéricos. Desarrollo En este apartado se describe el funcionamiento general del algoritmo, el cual posee una clase base virtual que brinda las propiedades y métodos capaces de capturar y contener los datos recibidos, mostrarlos por pantalla, generar un archivo en donde se guarden los datos obtenidos y también que permita eliminar aquellos datos no deseados por el usuario. De esta clase base se debe derivar una clase dedicada a tomar datos de la temperatura, otra destinada a tomar señales periódicas y una última clase que detecte señales digitales, las cuales se explicarán detalladamente a continuación. Datos Digitales En esta parte el programa se encarga de capturar los datos digitales que ingresan a través de los seis pines del puerto dos del Microcontrolador MSP430G2553. La clase posee un constructor sin argumentos y otro con argumentos, donde el argumento es la cantidad de datos que se desean capturar. Posee un método “SetCantidadDatos” el cual permite que el usuario ingrese la cantidad de datos a capturar o pueda modificar la cantidad seteada en el constructor. El método “CapturarDatos” utiliza la librería “SerialPort.h” para comunicarse con el microcontrolador. Se crea una clase con el nombre del periférico conectado al puerto que vamos a utilizar y a través de la función “.Open” se establece la velocidad de transmisión, cantidad de bits de información, cantidad de bit de stop, etc. Al escribir el código ASCII del numero “uno” en el microcontrolador a través de la comunicación serie, el mismo devuelve continuamente un numero de ocho bits, de los

Page 3: U.N.S.J F ACULTAD DE I NGENIERÍA

cuales los seis menos significativos contienen la información de los seis pines de entrada del micro. Estos datos son guardados en un contenedor con memoria dinámica previamente asignada denominada “datos”. Para detener el envío se deberá escribir el ASCII correspondiente al numero dos con el método “.Write”. El método “MostrarDatos” permite al usuario visualizar un listado con todos los datos capturados organizados en seis columnas correspondientes a los pines del 0 al 5. Para poder visualizar los datos previamente este método debe convertir los números binarios almacenados en bits que deben tomar valores entre cero y uno. El método “EliminarDatos” exige un argumento entero que indicara el número de orden del dato a eliminar. Una vez eliminado el dato “N” los datos consecutivos ocupan el lugar que dejo libre el dato eliminado y se descuenta en uno la cantidad de datos. El método “GuardarDatos” se encarga de generar el archivo “.m” con las instrucciones necesarias para que el programa GNU Octave lo pueda detectar y plotear de manera correcta y así poder observar mas fácilmente la evolución de los datos en el tiempo. Nuevamente se deben convertir los datos, y luego utilizando las librerías “iostream.h” e “iomanip.h” se genera el archivo deseado. Existen dos métodos “GuardarDatos”, uno con argumento y otro sin argumento, donde el argumento es el nombre que tendrá el archivo con la extensión “.m”. En caso de no poseer argumento el nombre del archivo estará dado por “Año-Mes-Dia-Hora-Min-Seg.m” en que se realizo la toma de datos. Archivo digitales.m: function [retval] = digital (imput1,imput2) x=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ]; bit0=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]; plot(x,bit0) hold on; grid; axis([0,29,0,12]); bit1=[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]; plot(x,bit1) bit2=[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 ]; plot(x,bit2) bit3=[6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ]; plot(x,bit3) bit4=[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ]; plot(x,bit4) bit5=[10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ]; plot(x,bit5) hold off; endfunction

Page 4: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 1: Detección de dos señales digitales de 20 y 75Hz en los pines 2.1 y 2.4

respectivamente del microcontrolador.

Figura 2: Imagen del Osciloscopio de las dos señales digitales.

Datos Analógicos Esta parte del programa se encarga de realizar la captura de cualquier tipo de dato analógico ingresado por el pin 1.3 del microcontrolador, detectar el máximo y el mínimo valor ingresado, mostrar todos los datos por pantalla y generar un archivo .m para posteriormente poder plotear los datos obtenidos. Como la clase anterior esta también posee un constructor con argumentos y otro sin argumentos, donde el argumento sigue siendo la cantidad de datos a capturar. El método

Page 5: U.N.S.J F ACULTAD DE I NGENIERÍA

“SetCantidadDatos” también permite al usuario que ingrese la cantidad de datos que desea. El método “CapturarDatos” procede de la misma forma que en la clase digital, con la diferencia que se deben enviar a través de la función “Write” el código ASCII del numero cinco para iniciar las sucesivas conversiones en el microcontrolador. Este enviara hacia la PC un dato de diez bits correspondiente a un valor analógico entre 0 y 3,3 volts. El mismo se recibe dos bytes, primero el menos significativo y luego el mas significativo. Estos datos serán almacenados en dos memorias auxiliares y luego convertidos a entero teniendo en cuenta el valor que proviene del argumento el cual indica el valor real de la señal (ya que puede ingresarse una señal de 0 a 5 volts con un atenuador al microcontrolador) y finalmente almacenados en el contenedor “datos”. Para detener el envío se debe escribir el ASCII del numero seis en el puerto. Posee dos métodos llamados “Máximo” y “Mínimo” encargados de devolver los valores máximo y mínimo que se hayan encontrado entre los datos capturados. Los métodos “MostrarDatos”, “EliminarDatos” y “GuardarDatos” funcionan de la misma manera que en la clase Digital. Archivo periodica.m: function [retval] = periodica (imput1,imput2) x=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ]; y=[4990 4995 4995 4990 4990 4985 4990 4990 4980 4990 4990 4990 4985 4995 4990 4990 4990 4985 4990 ]; subplot (2,1,1); plot(x,y) hold on; z= [4999 4985 4990 4992 4987 4996 4989 4995 4986 4980 4984 4993 4982 4998 4986 4984 4995 4982 4997 ]; subplot (2,1,2); plot(x,z,'r') endfunction

Page 6: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 3: Ploteo de una señal senodial.

Figura 4: Imagen en el Osciloscopio de la señal senoidal.

Page 7: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 5: Ploteo de una señal triangular.

Figura 6: Imagen en el Osciloscopio de la señal triangular.

Temperatura El microcontrolador MSP430 posee internamente un detector de temperatura el cual permite sensar la temperatura del mundo exterior. El programa permite al usuario ingresar la cantidad de datos y el tiempo de muestreo que desea para el censado de la temperatura. Como en las clases anteriores, esta también posee un constructor con argumentos y otro sin argumentos, donde el argumento sigue siendo la cantidad de datos a capturar. El método “SetCantidadDatos” también permite al usuario que ingrese la cantidad de datos que desea.

Page 8: U.N.S.J F ACULTAD DE I NGENIERÍA

En esta clase el método “CapturarDatos” incluye algunas diferencias importantes con respecto a las clases anteriores. El argumento indica el tiempo de muestreo de la toma de temperatura indicado en segundos. En caso de que el tiempo total de la captura sea excesivo, se da la opción de cancelar la captura. De continuar con la ejecución de la toma de datos se sincroniza con el comienzo del minuto siguiente. En este caso se genera un segundo contenedor y se almacena tanto el dato de temperatura (formula dada por el fabricante del microcontrolador) y el tiempo de la captura del dato. Esta clase posee 4 métodos encargados de reordenar los datos, dos de ellos encargados de ordenar en forma ascendente y descendente por temperatura y dos por tiempo. Los métodos “MostrarDatos”, “EliminarDatos” y “GuardarDatos” funcionan de la misma manera que en las clases Digital y Analógica. Archivo temperatura.m: function [retval] = temperatura (imput1,imput2) x=[194300 194301 194302 194303 194304 194305 194306 194307 194308 194309 194310 194311 194312 194313 194314 194315 194316 194317 194318 194319 194320 194321 194322 194323 194324 194325 194326 194327 194328 194329 194330 194331 194332 194333 194334 194335 194336 194337 194338 194339 194340 194341 194342 194343 194344 194345 194346 194347 194348 194349 194350 194351 194352 194353 194354 194355 194356 194357 194358 194359 ]; y=[22 22 22 22 22 22 23 22 22 22 23 23 23 23 24 26 27 29 32 34 38 40 42 44 47 49 51 53 54 55 57 58 59 59 61 62 63 63 62 61 60 58 56 55 54 53 50 49 48 46 46 45 43 42 42 40 39 40 38 38 ]; plot(x,y,'ob') hold on plot(x,y) axis([194300,194359,0,73]) grid; hold off endfunction

Page 9: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 7: Ploteo de la toma de temperaturas.

Modo de uso de cada una de las clases Este apartado esta exclusivamente dirigido al usuario a modo de simplificarle el modo de uso de cada una de las partes del programa para que le sea más simple la utilización del mismo. Se pueden crear tres tipos de objetos, Digital, temperatura y Periódica. El programador podrá hacerlo mediante los constructores con argumento o sin argumento, en caso de hacerlo con la segunda opción, antes de comenzar con una captura de datos se deberá usar el método SetCantidadDatos de lo contrario generara un error(throw). CapturaDatos comienza la captura de datos, en el caso de Digital y Periódica a frecuencia de muestreo fija y para el caso de Temperatura se deberá indicar en el argumento el tiempo de muestreo en segundos a partir de 1 segundo. El método GuardarDatos genera el archivo con la captura y ofrece la opción de utilizarlo con y sin argumento colocando en este caso como nombre el tipo de datos capturados y aaaa-mm-dd-hh-mm-ss para facilitar la búsqueda y el orden. En caso de hacer el envío de argumento este será el nombre del archivo y deberá llevar “.m” al final. Devuelve un error si los datos no fueron capturados aun. MostrarDatos muestra por pantalla una lista con los datos capturados acompañados del orden de captura. En el caso de Temperatura el dato estará acompañado de la hora de captura. Devuelve un error si los datos no fueron capturados aun. EliminarDatos elimina el dato que el argumento indique siendo este el orden del mismo. Devuelve un error si los datos no fueron capturados aun. Para el caso de Periódicas existe la posibilidad de que el programador usando las funciones máximo y mínimo encuentre estos valores y se los haga saber al usuario. Estas funciones al ser utilizadas devuelven un entero con dicho valor. Para el caso de periódicas la librería brinda la posibilidad de ordenar los datos por temperatura o por tiempo, tanto en orden ascendentes como descendentes, llamando a los métodos: OrdenAscendenteTemp, OrdendescendenteTemp ,OrdenAscendenteFecha, OrdenDescendenteFecha.

Page 10: U.N.S.J F ACULTAD DE I NGENIERÍA

Al momento de crear el proyecto se debe tener en cuenta que se debe agregar la librería “SerialPort.h” para que funcione el puerto serie. Además se le debe indicar al linker la existencia de la librería serial y al compilador los includes correspondientes: “g++ -Wall -lserial –o gen1gen1.cpp string2num.o” y “-Wall –lserial –o gen1 gen1.cpp string2num.o”. Finalmente debemos destacar cada uno de los pines del microcontrolador que se deben utilizar dependiendo del tipo de señal que se vaya a ingresar. Si lo que se quiere medir son señales analógicas se debe utilizar el pin P1.3 (pata 5 del microcontrolador). Por otro lado si se desean medir señales digitales se tienen seis entradas para distintas señales, estos son los pines P2.0, P2.1, P2.2, P2.3, P2.4 y P2.5 (patas 8, 9, 10, 11, 12 y 13 del micro). Por ultimo vale destacar que si lo que se desea sensar es la temperatura no se debe conectar a ningún pin del microcontrolador sino que el mismo posee un sensor interno para poder detectar la temperatura. Posibles mejoras a futuro Uno de los puntos a resaltar en los que se podría mejorar este proyecto a futuro es la velocidad de muestreo ya que la misma esta limitada por el simulador de puerto serie a USB de la placa de desarrollo, por lo que por el momento solo se pueden analizar señales de baja frecuencia. Otro punto a tener en cuenta es que el nivel de tensión de las señales a ingresar debe estar regulado entre los 3.3V que es el voltaje con el que trabaja el micro por lo tanto se podría incluir un regulador de tensión externo para que se puedan medir señales con distintos valores de tensión. Por ultimo podemos destacar que si lo que se desea es utilizar tanto el hard como el software para el sensado de temperaturas se puede agregar un sensor externo que posea más sensibilidad y un mayor rango de amplitud ya que si se quieren medir elevadas temperaturas las mismas podrían dañar el microcontrolador. Conclusiones Luego del trabajo realizado podemos llegar a concluir que por medio del lenguaje de programación en C++ y la utilización del microcontrolador MSP430 se puede llegar a diseñar la base para un data logger de baja frecuencia a muy bajo costo y con muy buena prestaciones para la realización de practicas básicas de laboratorio. Se debería realizar un estudio un poco mas intenso para determinar si el tiempo de envío y recepción de datos a través del puerto serie influyen o no en las mediciones realizadas. En este aspecto debido a las diversas mediciones realizadas podemos decir que en la clase temperatura los posibles errores no afectarían la precisión debido a los grandes tiempos de muestreo pero no así en la toma de datos analógicos y binarios.

Page 11: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 8.

Figura 9.

Page 12: U.N.S.J F ACULTAD DE I NGENIERÍA

Figura 10.