Datalogger de temperatura con 18F2550 (II)

Luego de varios días de acumular bytes en la memoria EEPROM 24C64, ha llegado la hora de descargar todos esos valiosos datos al ordenador y comprobar si todo ha funcionado según lo esperado. Para descargar la información almacenada en la memoria del datalogger utilizaremos la conectividad USB que nos ofrece el PIC 18F2550 y una sencilla aplicación realizada en VB6 para facilitarnos la tarea. Hasta ahora todo fue un trabajo silencioso de adquisición de datos, aquí comienza la verdadera acción y la obtención de los beneficios que nos brindará el datalogger.

Fue muy fría esta semana por estas tierras australes y los gráficos obtenidos corroboran las gélidas temperaturas que registró el datalogger con su STCN75. La ubicación que decidimos darle al desarrollo fue un pequeño lugar en una de las ventanas que dan a un patio trasero de la casa. Afortunadamente la habitación donde se realizó la acumulación de datos estaba aislada del resto de la casa ya que hubo momentos en que los valores térmicos descendieron a tan sólo 4°C. Durante el día la marcación ascendía y hasta tuvimos situaciones accidentales: por ejemplo, un mediodía, al abrir la ventana para ventilar el cuarto, por descuido el sol comenzó a dar sobre el STCN75 elevando la temperatura a valores que no correspondían con la temperatura real del momento. Es decir, el registro almacenó valores mayores a los 20°C cuando en realidad apenas teníamos 12°C en pleno mediodía.

Otro accidente que tuvimos: una aleatoria falla en la grabación de algunos registros térmicos y horarios. La falla se debió a la lejanía de conexión entre el módulo que abarca al DS1307 y a la memoria 24C64 y el módulo que soporta al STCN75. La captación de ruidos por un bus I2C muy extenso en longitud que cruza por debajo de la placa entrenadora ha provocado este pequeño defecto que no ha complicado en absoluto al funcionamiento global de nuestro datalogger. Una construcción modular, un protoboard y módulos alejados entre sí propiciaron este pequeño defecto que notarán si analizan los archivos de texto que acompañan al software que entregamos en este artículo. Por supuesto, la solución obvia y definitiva a este problema es la construcción de un PCB optimizado para este equipo. Antes de continuar mostrándoles los resultados obtenidos, haremos un breve repaso por el hardware y las partes fundamentales que intervienen y se agregan en esta segunda parte del desarrollo.

Montaje completo del datalogger

Al sistema que hemos visto en el artículo anterior le hemos suprimido la alimentación mediante la conexión USB al ordenador y le hemos agregado al montaje una pequeña fuente de alimentación construida especialmente para protoboard. Con una entrada de 12Volts a partir de una pequeña fuente de pared y dos reguladores fijos, obtenemos una construcción muy simple y efectiva. Un 7805 (5Volts) y un AZ1117 (3,3Volts) en una pequeña placa de menos de 5 centímetros por lado resumen una fuente de energía pequeña y fácil de incrustar en cualquier zona del protoboard. En nuestro caso, hemos elegido un rincón libre donde no moleste para trabajar con libertad y, por sobre todas las cosas, para que no afecte a las lecturas de temperatura del STCN75. Como mencionamos antes, dos reguladores, algunos capacitores, un par de LEDs indicadores de tensión de funcionamiento y allí tenemos nuestra fuente de alimentación para protoboard. De este modo, con una sencilla fuente de pared y un módulo muy fácil y rápido de instalar en cualquier punto del protoboard, resolvemos el tedioso trabajo de armarle a cada desarrollo una fuente incorporada dentro del experimento para usarlo de modo autónomo y ambulante.

Vista en detalle de la pequeña fuente de alimentación para protoboard

Utilizaremos la entrada de 5Volts proveniente desde el puerto USB para informarle al PIC 18F2550 que nos hemos comunicado con el ordenador. La placa entrenadora de Microingenia S.L. trae un pin dedicado a tal fin (USBS), pero en cualquier construcción clásica esto se resuelve con un divisor resistivo que luego se conecta a una entrada digital del microcontrolador. De este modo, con una simple instrucción IF-THEN se interroga en forma periódica para conocer el estado de conexión de nuestro datalogger. A este tipo de desarrollos lo hemos visto con anterioridad en el Receptor NeoTeo, con un PIC 18F4550. El concepto es el mismo: cuando un estado lógico alto aparece en la entrada que hemos escogido para monitorear la conexión, el firmware del PIC pasará a un “modo esclavo” y quedará a merced de las instrucciones que determine el software que utilizaremos en el ordenador.

La detección de la conexión al puerto USB se realiza gracias a un simple divisor resistivo

Este pequeño software que desarrollamos en VB6 detendrá la grabación de datos en la memoria EEPROM y facilitará la transmisión de los datos que ella tenga almacenados hacia el ordenador. Una vez allí, serán interpretados y mostrados en forma adecuada para completar así el trabajo del datalogger. Una vez extraídos los datos almacenados en la EEPROM, la grabación se reinicia desde la posición cero de la memoria lista para ser cargada durante otras dos semanas. No olvidemos que una memoria 24C64 permite almacenar hasta 14 días de nuestra información. El formato de esta grabación se realizaba de la siguiente manera: en el siguiente orden se graban seis bytes: Día, Mes, Hora, Minutos, Signo y Temperatura. Recordemos que “Signo” es un espacio vacío cuando la temperatura se encuentra por encima de los cero grados centígrados y un signo “menos” cuando las temperaturas pasan a ser “bajo cero” (El STCN75 puede medir hasta -55°C). Por el lado de los grados de temperatura, éstos se registran en la EEPROM como un número entero, sin decimales. De este modo, podemos almacenar el valor dentro de un único byte.

La escritura de los bytes mencionados dentro de la memoria se realiza (en Basic) mediante la instrucción BUSOUT, y la lectura a través de BUSIN. Primero escribimos la dirección inicial de escritura/lectura dentro de la memoria y luego procedemos a realizar la acción necesaria. Es decir, primero ubicamos el puntero, luego enviamos o extraemos los bytes uno a uno a partir de la dirección escrita en forma inicial. (Para recordar y refrescar estos conceptos puedes leer el artículo de memorias 24CXX o el anterior artículo del datalogger). Cuando el software del ordenador toma el mando de la situación, organiza mediante mensajes en el display del datalogger las operaciones que se suceden en el sistema. Es decir, nos informará qué está haciendo el datalogger y qué debemos hacer nosotros. Leeremos mensajes como “Esperando pedido de datos” o “Leyendo memoria de datos EEPROM”, entre los principales. Lo que debemos tener presente es que el sistema nos anunciará (a través del display) cuándo comienza la lectura de datos y cuándo termina. No debemos retirar en ese momento el cable USB ya que la comunicación se interrumpirá, la cadena de datos se corromperá y tendremos que ejecutar toda la operación nuevamente.

El programa que hemos preparado consta de muy pocas partes, todas muy importantes. En un sector destacado encontramos un cuadro de texto donde se exhibirán los datos recuperados cual si fuera un listado inmediato que podemos analizar allí mismo sin mayores recursos que la observación del texto mostrado. En el sector derecho encontramos tres botones. El primero (superior) se activa al establecer conexión USB entre el ordenador y el datalogger. Este botón, al activarse, nos permitirá obtener los datos almacenados en la EEPROM que, como dijimos en el párrafo anterior, podemos leer y analizar en la misma aplicación.

La recopilación de datos es la tarea fundamental de un datalogger

Luego encontramos un segundo botón que se activará al momento de desconectarnos del puerto USB. Este botón nos permitirá grabar información en dos archivos del tipo TXT ya predeterminados que se encuentran junto a los ficheros que componen la aplicación. Uno es Datalogger.txt y el otro es Temp.txt. En el primero se graban los datos tal como los vemos en la pantalla de aplicación, mientras que en el segundo archivo sólo se guardarán los valores de temperatura separados por un espacio en blanco cada uno. El primer archivo puede ser impreso y guardado cual si fuera un registro, un libro semanal, un log de datos (datalogger). El segundo archivo puede ser abierto por cualquier software capaz de manejar planillas de cálculo, obteniendo de este modo la posibilidad de conseguir un gráfico de la variación de temperatura en función del tiempo. Un gráfico de barras o de líneas puede ser muy útil para apreciar variaciones y curvas de comportamiento que a veces los fríos números no nos muestran. Un gráfico es mucho más “amigable” y fácil de interpretar.

En este punto debemos tener especial atención ya que la mayoría de los programas que trabajan con planillas de cálculos sólo permiten cargar hasta 256 datos (en el eje X). Esto significa que de las 1365 mediciones de temperatura que puede almacenar una memoria 24C64, sólo podremos “graficar” bloques de 256 datos. De todos modos, este es un período de tiempo importante (256 multiplicado por 15 minutos equivale a 2 días y medio) y en él podemos encontrar muchos eventos dignos de ser analizados. De hecho, en la imagen que te mostramos, son muy claras las variaciones de temperatura del día a la noche y permiten observar con claridad las máximas y las mínimas registradas con su evolución intermedia incluida.

Ejemplo del gráfico obtenido en las pruebas iniciales del datalogger

El tercer y último botón del grupo realiza esta operación: nos muestra en un gráfico las primeras 256 muestras de temperatura, es decir, desde la posición cero de memoria hasta la 255. Si deseamos analizar otros sectores, como mencionamos antes, tendremos que editar el archivo Temp.txt, extraer el sector de datos que nos interesa, crear un nuevo archivo de texto y abrirlo con la aplicación que nos permitirá graficar los parámetros seleccionados. Nada complejo, por supuesto. Lo importante que debemos recordar es lo siguiente: leer los datos almacenados en la memoria no borra ni elimina los datos almacenados en su interior, sólo se salteará la eventual grabación que pudiera tocarle en ese preciso momento que estemos “leyendo” la memoria. El firmware del PIC está preparado para llegar hasta el final de la capacidad de la memoria EEPROM y luego comenzar a sobrescribirla nuevamente como si fuese un círculo de almacenamiento. El firmware que te entregamos está preparado para ser cargado al 18F2550 con el bootloader que ya hemos utilizado en ejemplos anteriores.

Una vez alcanzada la posición 8190 (la memoria tiene capacidad para 8192 bytes), el firmware comienza la grabación desde la posición cero. Es decir, si en 14 días no tuvimos tiempo de ir a obtener los archivos de texto con un sencillo ordenador portátil al menos, la culpa no será del datalogger. Él comenzará su cuenta como si recién se hubiera conectado a la fuente de alimentación. Debemos estar atentos entonces a ese concepto: Los datos no se borran al leerlos, pero sí se reinicia la memoria (a posición cero) al ser leída. También se reiniciará su puntero (comienza a grabar desde posición cero de memoria) si desconectamos la energía del datalogger o si la acumulación de datos supera los 14 días. Imagino que al leer estas líneas ya estarás pensando en una unidad UPS o de energía ininterrumpida para mantener siempre en funcionamiento a este registrador de datos. De todas maneras, al reestablecerse la energía, los datos acumulados no se borran de manera automática. Es decir, podemos leer los datos que lleva acumulado el sistema hasta ese momento y luego dejar que vuelva a comenzar desde cero. De otro modo, también podría modificarse el firmware para conservar la posición de memoria alcanzada al momento de un teórico corte energético y luego rescatar este valor para continuar grabando desde la última posición al momento de interrumpirse la energía. Pero, claro, eso ya es parte de tu genialidad creativa y tu capacidad como desarrollador.

Deja tu voto

0 puntos
Upvote Downvote

Total votes: 0

Upvotes: 0

Upvotes percentage: 0.000000%

Downvotes: 0

Downvotes percentage: 0.000000%

  • mindmaster

    Excelentisimo aporte mil gracias mario una pregunta puedo modificar esto para usarlo con la estacion meteorologia que hiciste en anteriores articulos ??????

    • Mario Sacco

      Hola master!

      Sí, por supuesto!
      Puedes extraer de este proyecto la parte de la acumulación de datos y el beneficio de obtener las curvas gráficas. Observando un poco el programa hecho en VB6 te resultará sencillo extraer la parte de código que realiza ese proceso.

      De eso se trata amigo! De tomar lo que uno necesita para construir sus propios diseños.
      Esa es la idea para esta clase de artículos. Ayudar a la inspiración natural de cada uno de ustedes.

      Gracias por acompañarnos siempre master!
      Saludos!

      • mindmaster

        Gracias mario empezare hoy mismo habia puesto sensores apartes pero no podia recolectar toda la informacion de un solo tiron ahora con esto me resultara mas sencillo

      • Mario Sacco

        Me alegro mucho master!

        Es muy gratificante saber que la información que uno puede brindar sea útil para otros.

        Saludos amigo!

  • gastrowolf

    saludos Mario, bien interesantes y completos los proyectos semanales, puedes indicarme que software ocupas para el diseño de los esquemas, para que quedes de esa forma bien personalizada…

    Gracias por los aporte en la comunidad web

    • Mario Sacco

      Hola gastrowolf !

      No alcanzo a comprender a qué software para esquemas te refieres amigo. Si pudieras explicarlo con otras palabras es probable que pueda comprenderte. Gracias y disculpa.

      Saludos!

  • Yesbond

    Hola Mario:

    Magnifico articulo, manejas tantos conceptos que es imposible dejar de imaginar cuantas cosas se pueden hacer con todo lo que nos enseñas en los articulos tan geniales.
    Seguiremos muy atentos y aprendiendo cada dia.

    Muchas gracias por tu dedicacion y tiempo.

    Un abrazo desde Colombia

  • carlos

    Gracias por compartir y educarnos con cada articulo que nos ofreces. Un abrazo desde Mexico.

    • Mario Sacco

      Hola Carlos!

      Gracias a personas como tú yo estoy aquí intentando hacer de cada sábado una experiencia electrónica diferente.

      Un abrazo amigo! :))

  • NANDO

    Muy buen articulo, lo felicito y agradezco por compartir sus conocimientos.
    Podria asesorame sobre que osciloscopio me conviene adquirir para monitorear el funcionamiento del 18f4550?.
    Saludos cordiales.

    • Mario Sacco

      Hola NANDO!

      En realidad cualquier osciloscopio de más de 20Mhz puede serte útil.
      Siendo un poco más estricto con el pensamiento, te comento que no es tan necesario poseer un osciloscopio para trabajar y estudiar sobre un 18F4550. Quizás una buena placa entrenadora y sumarte a alguna comunidad electrónica de habla hispana (foro) sean más útiles que el mejor de los osciloscopios. Comenzar experimentando y tener a quién preguntarle las dudas, compartiendo experiencias con gente como tú, como yo, como cualquiera, puede ser mi mejor consejo. 😉

      Saludos!

  • jukinch

    Mario: ponele la bufanda al pic que se va a engripar!!!!! Que frio que está haciendo !!!
    Un abrazo.
    Jukinch

    • Mario Sacco

      Esto no es nada! Frío eran los de antes Jukinch !!!!

      Un abrazo amigo! :))

  • boby1356

    Hola señor Mario, mi nombre es Johnny y escribo desde Colombia ; hace varios meses vengo intruyendome con sus artículos,
    que la verdad son muy buenos; quiero agradecerle por su dedicación para siempre tener algo nuevo que aportarnos.
    Este proyecto está buenísimo; voy a estudiarlo muy bien para sacar el máximo provecho de él .
    Mil gracias

    • Mario Sacco

      Hola Johnny!

      Gracias por seguir mis artículos y por tus palabras. Ese es el mejor premio que me pueda llevar. Saber que lo que uno está transmitiendo es comprendido y resulta útil a otros.

      Gracias amigo por estar con nosotros!
      Saludos cordiales!

  • docruzga

    Hola Mario

    Excelente proyecto, gracias por los aportes !!!! Yo lo estoy realizando en CCS C y con un LM35. Saludos

  • juanman

    Excelente artículo, te felicito. Sería bueno, tambien, que algún día nos dejases algún artículo sobre los fascinantes PIC32, en los que apenas comienzo a trabajar.

  • Pic-Codelic Trance

    Hola, excelente Articulo, y gracias por contestar lo del otro sábado,
    si me sirve el link sobre las memorias, muchas gracias por eso
    aunque en los códigos de microingenia no encontré como direcciónar el vector para que mis
    codigos no sobrescriban el bootloader, seguiré buscando para saber
    como se hace eso en CCS.

    una pregunta mas es que no me quedo muy claro la otra vez, es sobre el stcn75, si por ejemplo mi termómetro esta en la dirección "10010010" esta es la que ocupo para escribir en el, lo que no me queda muy claro el que si después de escribirle tengo que ocupar la misma dirección esta "10010001" para leer el sensor o tengo que cambiarla.
    Por cierto apoyo a juanman sobre que hicieras un articulo sobre pic32, los rfpics, o los dspics seria un buen articulo…

    eso es todo y saludos desde México…

    Porcierto a los seguidores de neoteo y sobre todo a los seguidores de Mario y sus grandes articulos pasen por este link hay una agradable sorpresa para todos.

    http://eletronic.creatuforo.com/para-los-seguidores-de-neoteo-tema3.html

    o por este otro:

    http://eletronic.creatuforo.com/electronica-foro1.html

  • ScuderiaMondiale

    Exelente articulo, empezare por armar tooodos los demas circuitos que integran este datalooger…pregunta: para hacer la conexion de un sensor de presencia o movimiento (en lugar del sensore de temperatura), podria hacerse de la misma forma que el sensor de temperatura??, de que podria depender esto??…Salu2

  • lmachuca

    Saludos,

    Lo felicito por tan excelente trabajo. Actualmente estoy haciendo un proyecto similar, pero en este caso estare tomando muestras de seis entradas diferentes de voltaje. Ya exitosamente puedo detectar una de ellas y mostrarla en la computadora utilizando HyperTerminal via comunicacion serial RS232. Creo que con las demas es la misma dinamica. Sucede que en la parte que estoy paralizado es en la aplicacion de VB que precisamente quiero hacer lo mismo que usted hace; extraer los datos, verlos en el ordernador y guardar en un archivo TXT. Actualmente utilizo VB 2010 (en el cual no soy muy ducho, pero aun asi trabajare con el) y baje su archivo de VisualBasic que esta en la pagina, pero al parecer la version de VB 2010 no me los reconoce y por tanto no puedo ver como es la dinamica en cuanto al codigo y a la aplicacion en si. Seria posible el que pudiera recomendar como poder ver este codigo en mi version de VB? O si habria algun archivo de texto en el que este el mismo? Gracias anticipadas.

  • Tanke

    Mario! Saludos!
    Exelente articulo, nada mas queria felicitarte porque esta clase de paginas son las que ayudan a que todos aprendamos un poquito mas cada dia de manera entretenida. Es un gran trabajo el que realizas. Felicitaciones!!!

    Un abrazo!