sábado, 26 de septiembre de 2015

Un sencillo termómetro con Visualino y Arduino

Hoy os ofrezco mi primera experiencia con un entorno visual de programación para Arduino: Visualino. Es software libre y está basado en Google Blockly y bitbloq de BQ. Es muy fácil de usar y está disponible para varios sistemas operativos, entre ellos para Ubuntu. Genera y carga en la placa, en mi caso Arduino-UNO, el código nativo para que funcione de forma autónoma. 
Primero debemos instalar el entorno IDE de Arduino 1.6.5 para poder usar Visualino, ya que Visualino utiliza el IDE de Arduino para transferir a las placas de Arduino los programas. Para instalar Visualino consultamos en su página la documentación al respecto.
Después de instalado el entorno IDE de Arduino y Visualino , configuramos Visualino en File -> Preferences, vinculando el entorno IDE de Arduino añadiendo el ejecutable de Arduino en la carpeta donde está ubicado. También podemos cambiar el lenguaje de los robo blocks al español.


En la imagen anterior marqué en recuadros rojos los elementos más importantes de este entorno, entre los que destacan la mesa de trabajo donde programamos con los robo blocks, la pantalla de la derecha donde nos va presentando el código fuente del programa para Arduino, en el extremo inferior derecho está el puerto USB (importante para poder comunicarse debidamente con la placa) y el tipo de placa Arduino utilizada, que en mi caso es la UNO.
Para este proyecto necesitamos el siguiente hardware: 

El esquema es el siguiente:



Como ejemplo de cálculo y funcionamiento vamos a presumir que tenemos una temperatura de ambiente de 25ºC. A 25ºC el sensor LM335 nos ofrece en su salida una tensión de 2980 mV. Si la resolución en mV de la entrada analógica A0 del Arduino UNO es de 5 mV, el valor de la entrada será de 2980mV : 5mV = 596. Si a este valor le restamos el correspondiente a 0ºC, que es de 546, el resultado es de 50. Como la resolución en mV de la entrada A0 es la mitad (5 mV) de la del coeficiente por grado centígrado del sensor LM335 (10 mV), dividimos el valor entre 2, obteniendo un valor de 50 : 2 = 25 (25ºC). Así obtengo el valor de la temperatura en la variable "termo" del programa:


termo = (leerSensor - 546) / 2

En el programa uso el valor de 552 en vez de 546 para compensar la tensión de Offset del sensor LM335, y evitar así usar su patilla de ajuste ADJ.


El código generado para Arduino es el siguiente:

/***   Global variables   ***/
int pinSensor=0;

/***   Function declaration   ***/

void setup()
{

  Serial.begin(9600);

}


void loop()
{
  pinMode(pinSensor,INPUT);
  int leerSensor=analogRead(pinSensor);
  int termo=(leerSensor - 552) / 2;
  Serial.print("La temperatura de ambiente es de ");
  Serial.print(termo);
  Serial.print(" C");
  Serial.println(" ");
  delay(5000);

}

/***   Function definition   ***/

Como Visualino no dispone de variables con punto flotante (float), es decir, con decimales, con una ligera modificación copiando el código en el editor del entorno IDE de Arduino, logramos que la resolución sea de 0.5 grados en vez de 1 grado.


Para visualizar el resultado usamos el MONITOR de Visualino (en Arduino IDE el Monitor también).

En el siguiente vídeo os muestro el resultado. También se puede apreciar como, a veces, Visualino carga el código dos veces, y si no echamos a la basura una de las copias el programa dará error. En el vídeo también podéis apreciar como modificando el código en el editor de Arduino, sustituyendo las variables enteras por flotantes, obtenemos una mayor precisión, concretamente de medio grado. Los oportunos incrementos de temperatura que se visualizan en el vídeo son producto de tocar el LM335 con los dedos. El ajuste lo llevé a cabo con un termómetro digital, ajustando el valor de la constante que aplico en la variable termo (552) para que ofreciera la temperatura de referencia.



La música del vídeo es gentileza de Serakina, Blooming Chill. Gracias.

2 comentarios:

  1. Muy interesante. Muchas gracias por publicar

    ResponderEliminar
    Respuestas
    1. Gracias a ti por interesarte por este blog. Saludos

      Eliminar