Introducción

 

En esta ocasión mediremos la temperatura del procesador Quark utilizando el sensor que trae incorporado, y mostraremos la lectura en uno de los instrumentos virtuales que nos proporciona la herramienta Wyliodrin.

En este tutorial aprenderas:

  • Leer la temperatura del procesador.
  • Utilizar los instrumentos virtuales de la plataforma Wyliodrin.

Si no sabes que es Wyliodrin, te invitamos a que le eches un vistazo al Tutorial: Desarrollando proyectos utilizando Wyliodrin - PARTE 1 donde te explicamos que es y como desarrollar tu primera aplicación con ésta plataforma.

 

Sensor de temperatura

 

El chip Quark cuenta con un sensor integrado de temperatura al cual podemos acceder leyendo un archivo desde el SO (sistema operativo), mas adelante explicaremos cual y cómo.

Por el momento comenzaremos creando una nueva aplicación en Wyliodrin dando clic en el botón "Create new application".

New app.png

Le asignamos un nombre al proyecto y seleccionamos el lenguaje "Arduino", después damos clic en "next", como se muestra en la imagen.

proyecto.png

 

En la siguiente ventana dar clic en "submit".

 

submit.png

 

Dar clic en el nombre del archivo para abrirlo en una nueva pestaña.

archivo.png

Se abrirá una nueva pestaña donde se muestra un editor de texto con la plantilla mínima necesaria para comenzar a codificar y varias herramientas para la programación de la tarjeta Galileo.

 

editor.png

 

Antes de modificar el código, vamos a agregar el instrumento virtual donde visualizaremos la temperatura, para ello da clic en el botón "Dashboard"

 

dashboard.png

Se desplegará una paleta con los instrumentos virtuales que tiene disponibles Wyliodrin, entre todas las que nos ofrece, seleccionaremos el "thermometer".

 

paleta.png

 

Nos aparecerá el nuevo instrumento virtual, podemos modificar su tamaño acercando el cursor a la esquina inferior derecha y arrastrando hasta alcanzar el tamaño deseado. También podemos configurarlo utilizando el botón de engrane que aparece en la esquina superior derecha del instrumento.

instrumento.png

Dependiendo el instrumento seleccionado, tendrá mas o menos parámetros para configurar, para el caso del termómetro, los mas importantes son el nombre de la señal, (una señal sirve para comunicar al programa con los instrumentos virtuales), el valor mínimo y el valor máximo del termómetro. En esta ocasión, podemos dejar los parámetros con sus valores predefinidos.

 

señales.png

 

Si modificas el nombre de la señal, tienes que tenerlo en cuenta a la hora de escribir el código, mas adelante te diremos donde. Ya que están configurados los parámetros se puede cerrar la ventana ya que los cambios se guardan automáticamente.

ya que tenemos agregado el instrumento virtual, podemos proceder a programar. Lo primero, será regresar al editor de texto dando clic en la pestaña "main.cpp".

 

main.png

Una vez en el editor de texto podemos comenzar a escribir nuestro código (Al final del tutorial encontrarás de forma adjunta un archivo de texto que contiene el programa completo, el cual podrás copiar y pegar en el editor de Wyliodrin para tu mayor comodidad).

 

En primer lugar vamos a necesitar definir una función que lea el archivo "/sys/class/thermal/thermal_zone0/temp" el cual es un nodo del sistema para el sensor de temperatura y que regrese el valor numérico de la temperatura. La función que proponemos es la siguiente:

 

int getQuarkTemp()
{
  FILE *fp;
  char temp_from_linux[6];

  fp = fopen("/sys/class/thermal/thermal_zone0/temp", "r");
  fgets(temp_from_linux, 5, fp);
  fclose(fp);

  int temp = atoi(temp_from_linux);
  temp /= 100;
  return temp;
}

















 

Dentro de la función, declaramos un descriptor de archivo y una cadena de caractéres donde se almacenará la lectura del archivo en modo texto. Posteriormente se abre el archivo correspondiente al nodo del sistema del sensor de temperatura, se leen 5 caracteres del archivo y se almacenan en la cadena, después cerramos el archivo.

El valor de la temperatura en modo texto se convierte a su valor numérico y se divide entre 100 debido a que el sensor otorga centésimas de grados centígrados, finalmente se regresa el valor numérico de la temperatura.

 

A continuación, vamos a incluir código dentro de la función loop(), la función setup() quedará vacía.

En loop() vamos a utilizar una función propia de Wyliodrin que nos va a servir para enviar datos hacia los instrumentos virtuales, esta función es "sendSignal(const char[] signal, int value)", esta función recibe como argumentos el nombre de la señal y el valor que se desea enviar. Es muy importante remarcar en este momento, que el nombre de la señal que vamos a utilizar, es el nombre de la señal que le indicamos al instrumento virtual al momento de configurarlo, si hasta este punto no lo modificaste, el nombre debería ser "signal1". Finalmente agregamos un pequeño retardo de 100 milisegundos para no saturar al procesador de muchas lecturas.

 

void loop()
{
  sendSignal("signal1", getQuarkTemp());
  delay(100);
}

















 

Ahora ya tenemos el código completo, es hora de programar la tarjeta. Para ello, enciende tu Galileo y conéctala a Internet. Espera un momento hasta que en la página principal de Wyliodrin aparezca el icono de "Online" en verde.

online.png

 

Ahora ya puedes regresar a la pestaña del editor de Wyliodrin y programar tu Galileo, da clic en el cuadro debajo de la leyenda "Run application on:"

 

run.png

 

Una vez presionado, se abrirá una ventana con el instrumento virtual y una consola debajo, si tu instrumento virtual muestra una temperatura entre 55°C y 70°C todo esta funcionando correctamente. En este punto puedes colocar el dedo sobre el procesador Quark y observar como varía la temperatura en el instrumento virtual.

 

resultado.png

 

Hasta aquí el tutorial de esta semana. Esperamos que lo disfrutes.

 

A continuación te dejamos el código fuente completo.

 

#include <Arduino.h>

int getQuarkTemp()
{
  FILE *fp;
  char temp_from_linux[6];

  fp = fopen("/sys/class/thermal/thermal_zone0/temp", "r");
  fgets(temp_from_linux, 5, fp);
  fclose(fp);

  int temp = atoi(temp_from_linux);
  temp /= 100;
  return temp;
}

void setup()
{
}

void loop()
{
  sendSignal("signal1", getQuarkTemp());
  delay(100);
}