Arduino LabVIEW Sensor de temperatura NTC SNS TMP10K

Arduino LabVIEW Sensor de temperatura NTC SNS TMP10K

Primeramente, en este tutorial se presenta el funcionamiento del sensor de temperatura NTC SNS-TMP10K. Básicamente, este sensor de temperatura, cuando le aplicamos calor, el sensor regresa una salida proporcional a dicha temperatura. Este tutorial del sensor de temperatura NTC SNS-TMP10K estará enlazado con la combinación de Arduino  LabVIEW. En primer lugar cabe señalar que la comunicación se gestionara desde LabVIEW.

Sensor NTC SNS-TMP10K de temperatura

En primer lugar, como el titulo lo menciona, este es un sensor de temperatura. El rango de medición de este sensor es de -30 a 110°C. La precisión con la que lee los datos es del 1%. En función a su presentación, podemos encontrarlo como empaquetado tipo IC o con cubierta metálica. En el caso de el sensor cubierto se considera ideal para medir además la temperatura en fluidos. Su resistencia es 10K + -1% a 25ºC. Debido a que este sensor de temperatura es NTC, la resistencia baja cuando la temperatura incrementa. La resistencia incrementa si la temperatura baja. El objetivo del sistema a diseñar es visualizar, por ejemplo, temperatura ambiente con Arduino LabVIEW. Haciendo uso de las capacidades gráficas de este sistema o entorno de programación.

Materiales para sensor de temperatura Arduino LabVIEW

Diagrama esquemático sensor NTC SNS-TMP10K

TMP10K Sensor de temperatura Arduino LabVIEW

Programación Arduino LabVIEW del sensor de temperatura NTC SNS-TMP10K

En primer lugar, se muestra como realizar el diagrama en labview. Cabe señalara que si no cuentas con el software NI VISA o tienes problemas con la selección de COM puede ser por que no tienes instalado el software para la comunicación de E/S. A continuación te dejamos el link de descarga. https://www.ni.com/download/ni-visa-15.0.1/5693/en/ Una vez que tengamos listo e instalado el módulo de VISA tenemos todo lo necesario para comenzar.

Abrimos nuestro programa de LabVIEW y en las opciones nos aparece el apartado makerhub. Seleccionamos el makerhub y nos arroja otra ventana,  en donde seleccionamos linx. Por consiguiente nos arroja otra ventana, y elegimos en esta, la opción open vi.

Arduino LabVIEW

A continuación se presenta una figura con el menú desplegado para entablar la comunicación Arduino LabVIEW.

Arduino LabVIEW

Implementando el módulo Analgo Read 1 Chan, podemos leer la información de Arduino. El módulo extrae, en este caso la información del sensor de temperatura conectado al canal 0 analógico.

Sin título2

Acondicionamiento de la señal del sensor TMP10K

Además de leer la información de Arduino se acondiciona la señal. En este caso, se puede observar en la siguiente figura que se tomaron en consideración diferentes tipos de escalas. Tomamos las temperaturas en centígrados, kelvin y farenheit. A continuación se proporciona la etapa de acondicionamiento de Arduino LabVIEW. Las operaciones aritméticas las pueden obtener en el menú principal de LabVIEW. En la parte de Programming y Numeric.  Esto se puede ver en la segunda imagen de a continuación.

Sin título5

Sin título8

Por último se define el botón de paro, este se conecta directamente a la condición de paro de el ciclo principal. El contador de ciclo se visualiza con una ventana de números. Además insertamos un retardo, esto define la velocidad de muestreo del sistema. La velocidad de muestreo, es que tan rápido se toma una lectura en el ADC y le llega al sistema. Por ejemplo, si Arduino LabVIEW toman una captura cada segundo, la frecuencia de muestre es de 1Hz. Si Arduino LabVIEW toman 1000 capturas por segundo, entonces nuestra frecuencia de muestreo es de 1KHz.

TMP10K

Arduino LabVIEW

Temperatura del sensor TMP10K

Por último se presenta una ventana con los elementos básicos de control y de monitoreo. En este caso de la comunicación de Arduino LabVIEW asi como la temperatura que el sensor TMP10K proporciona. Esperamos que utilices este termistor en diferentes proyectos, si tienes una duda porfavor escríbenos.

Arduino LabVIEW

 

 

Medición de temperatura DS18B20 Arduino y Visual

Medición de temperatura DS18B20 Arduino y Visual Studio

En primer lugar, Visual Studio con DS18B20 Arduino, en este caso puede ser muy conveniente al momento de querer crear una aplicación que te ayude a la medición de  temperatura. Por ejemplo para darle la presentación visual que tú desees. Ademas puedes representar la temperatura con graficas o texto.

Sensor DS18B20 Arduino

Ten en cuenta que el sensor DS18B20 Arduino maneja los rangos de medición de  -55 °C hasta 125 °C. Además este sensor cuenta con 3 pines, que son: Gnd, in/out, VDD.

DS18B20 Arduino

Características del DS18B20 Arduino

  • Trabaja de 3.0v a 5.5v.
  • Su calibración está dada en Grados Celsius.
  • De 9 a 12 bits.

Conexión DS18B20 Arduino

 DS18B20 Arduino

Conexión DS18B20 con Arduino

Materiales

Visual Studio

En primer lugar, para este ejemplo de DS18B20 Arduino. Explicaremos los pasos para crear un proyecto, el código sobre todo en donde encontrar los objetos que necesitaremos. El tamaño de los objetos tipo de letra y diseño puede ser el que tu gustes darle en el apartado de propiedades.

 DS18B20 Arduino

Cuadro de propiedades para el diseño

En visual, sobre todo, nos iremos al apartado nuevo proyecto y pondremos aplicación Windows forms. También le asignamos un nombre y la ubicación donde queremos que se guarde y en aceptar.

DS18B20 Arduino

Crear nuevo proyecto

Además, es necesario poner un nombre para que sea más fácil encontrar después el archivo que hemos hecho.

Medición

Una vez que estemos en nuestra hoja de trabajo damos clic en Cuadro de herramientas. Mientras que de ahí seleccionaremos un textbox y dos botones les asignamos el nombre con el que se identificaran.

Medición

Diseño

Comenzaremos con el código de visual, damos doble clic en Iniciar conexión. Mientras que colocaremos el siguiente código. Inicia el serial port y el timer.

Medición

Abrir o conectar puerto

Enseguida, además, ponemos el siguiente código en detener conexión:

Medición

Cerrar puerto

Para poder trabajar con DS18B20 Arduino es necesario utilizar un Serial Port. Ten en cuenta que lo encontraremos en el cuadro de herramientas, en este caso lo llamaremos SP1.

Medición

Finalmente, para mostrar los resultados de la medición en el textbox cada cierto tiempo utilizaremos un timer. Por lo tanto este lo encontraremos igual en el cuadro de herramientas una vez hecho esto pondremos el siguiente código.

Medición

Código para leer el puerto

Puerto serie

Mientras que una vez, teniendo todo esto nos vamos a Arduino y verificamos en que puerto esta conectado. Ten en cuenta que lo puedes revisar en el panel de control Hadware y sonido, finalmente damos clic en Administrador de dispositivos debemos de tener uno que diga Puertos lo desplegamos y  ahí saldrá nuestro puerto.

Medicion

Además, en nuestro proyecto de visual damos clic en el serial port y en propiedades. Ten en cuenta que tal vez nos saldrá COM1 nosotros debemos de cambiarlo al puerto en el que nos indica que esta el Arduino.

Medicion

Como resultado, le damos en iniciar y empezara a dar la medición del sensor en el cuadro de texto. Finalmente, podemos tomar este ejemplo como referencia para iniciar nuestra propia aplicación. Por lo tanto, si tienes comentarios o dudas dejamos un mensaje. Es especialmente relevante si nos sigues en face o escribes en este blog.

Medición

Código en visual

Código en Arduino

Arduino Octopus LCD I2C 20×4

Para empezar, en este tutorial se elaboró un programa en el cual tomamos la lectura de un sensor de  humedad octopus. Esta misma que se muestra en una pantalla LCD 20 x 4 por medio del protocolo  I2C.

Materiales :

El sensor de humedad Octopus  para suelo puede leer la cantidad de humedad presente en el suelo que lo rodea. Es un sensor de baja tecnología, pero es ideal para el seguimiento de un jardín urbano. Este sensor utiliza las dos sondas para pasar corriente a través del suelo, y luego lee la resistencia para obtener el nivel de humedad. Más agua hace que la conducción eléctrica del suelo se lea más fácilmente (menos resistencia), mientras que el suelo seco es mal conductor de la electricidad (mayor resistencia).

Para este tutorial es necesario descargar la librería :

#include <LiquidCrystal_I2C.h>

Link de descarga :https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

 

Programación con el sensor Octopus

Ya que se tiene la librería , se programo para poder leer el valor del sensor Octopus en el puerto serial de la siguiente manera :

 

void setup()
{ Serial.begin(57600); }
void loop(){ 
Serial.print("Valor del sensor de Humedad:"); 
Serial.println(analogRead(0)); 
delay(100); 
} 

Lectura Octopus

Lectura Octopus

 

Se conectó de la siguiente forma el sensor a el Arduino  como se muestra en la siguiente imagen:

Conexión Octopus

Conexión Octopus

Programación pantalla LCD I2C

Una vez ya conectado el sensor de la anterior forma, se programó  para poder mostrar la lectura del mismo de la siguiente forma:

Como se muestra en el código, se utilizaron las 4 filas de la pantalla LCD , la lectura del sensor lo estará mostrando con un retardo de 500 milisegundos en la segunda fila por medio del protocolo I2C.

 

Pantalla LCD 16x4 I2C

Pantalla LCD 20×4 I2C

 

Octopus LCD 16X4

Octopus LCD 16X4

Arduino I2C ADS1115 I2C LCD

Arduino I2C ADS1115 I2C LCD

Para esto utilizaremos 1 Arduino, 1 ADC 16-Bit ADS1115 4 canales,
1  Interfaz I2C IIC para LCD1602 y 1 LCD 16×2 Luz de fondo Blanca,
1/2 proto, 1 juego de Jumpers y 1 potenciomertro de 10k.

 “Ya que no sabemos que tiene cargado el Arduino
es importante primero programarlo
y así prevenir voltajes de entrada

indeseados a nuestros componentes.”

Este proyecto consistirá en un Arduino I2C ADS1115 I2C LCD, leer la tensión de un potenciómetro con el módulo ADC1115 y retransmitir la información a la LCD todo por el protocolo I2C.

El ADS1115 constan de cuatro entradas etiquetadas A0-A3 toda la resolución de 15 bits. Además de las funciones de ADC finalizadas simples también son posibles una serie de funciones de comparación. Para más información sobre las funciones de programación del ADS1115 ver lo siguiente:

Datasheet LCD I2C

Datasheet ADS I2C

Gracias a la biblioteca #include <Wire.h> en este caso, Arduino UNO
usaremos los PIN A5-SCL y A4-SDA para la  comunicación I2C.

#include <Adafruit_ADS1015.h>

Descargar la Liberia:
https://github.com/adafruit/Adafruit_ADS1X15
#include <LiquidCrystal_I2C.h>

Descargar la Liberia:
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Arduino I2C ADS1115 I2C LCD

Arduino I2C ADS1115 I2C LCD leer la tensión de un potenciómetro con el modulo ADC1115 y transmitir la información al Monitor Serial todo por el protocolo I2C.


Rápidamente mencionaré los principales códigos a programar:

Para probar que las liberas fueron instaladas correctamente en nuestra carpeta de “lib” en “Equipo c:/ Programas / Arduino”.
Compilaremos los siguientes códigos por individual.

Paso 1 Programar Arduino “ADS1115 I2C”:

Compilar y esperar “Subido” de lo contrario cerrar todas las ventanas ID y re intentar.


#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads(0x48);
float Voltage = 0.0;

void setup(void)
{
Serial.begin(9600);
ads.begin();
}

void loop(void)
{
int16_t adc0; // Leemos el ADC, con 16 bits 
adc0 = ads.readADC_SingleEnded(0);
Voltage = (adc0 * 0.1875)/1000;

Serial.print("AIN0: ");
Serial.print(adc0);
Serial.print("\tVoltage: ");
Serial.println(Voltage, 7);
Serial.println();

delay(1000);
}


Paso 2 Programar Arduino:

Compilar y esperar “Subido” de lo contrario cerrar todas las ventanas ID y re intentar.


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Iniciar LCD address con 0x27 para 16x2 Display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{  // initializar la LCD
lcd.begin();
// Encender Pantalla e imprimir en pantalla.
lcd.backlight();
lcd.setCursor(0,0); lcd.print("         ");
lcd.setCursor(0,0); lcd.print(" HetPro  ");
lcd.setCursor(0,1); lcd.print("         ");
lcd.setCursor(0,1); lcd.print(" i2C LCD ");
}

void loop()
{  // Colocar el cursor en columna 0, linea 1
   // (note: linea 1 es la segunda, como la primera es la 0):
lcd.setCursor(0, 1);

// Imprimir el tiempo de actividad
lcd.print(millis()/1000); 
// Variable a imprimir "millis()/1000" sin comillas.
}


Cambiando su dirección I2C:

La ventaja del I2C no solo es el ahorro de puertos y la facilidad de cableado,  también el poner múltiples LCD´s y sensores cambiando su dirección I2C.

Arduino I2C ADS1115 I2C LCD, Module Addressing

Arduino I2C ADS1115, I2C LCD, Arduino LCD Module Addressing

Cambiar la dirección I2C “I2C ADDRESSES” :
ALHUNOS I2C tienen pins (o pads de soldadura) de tal manera que su disección puede ser cambiada. Usualmente están etiquetadas como A0-A1-A2 .
De fábrica esta default 0x27. (1 = SIN Conectar. 0 = Conectado):

A0 A1 A2 HEX Address
1     1     1       0x27
0    1     1       0x26
1    0     1       0x25
0   0     1       0x24
1    1     0       0x23
0   1     0       0x22
1   0     0       0x21
0   0    0       0x20


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Iniciar LCD address con 0x27 para 16x2 Display
LiquidCrystal_I2C lcd(0x27, 16, 2);

Arduino I2C ADS1115 I2C LCD. Module Addressing

Arduino I2C ADS1115 I2C LCD, Arduino ADS1115 Module Addressing

Cambiar la dirección I2C “I2C ADDRESSES” :


#include <Wire.h>
#include <Adafruit_ADS1015.h>

// Iniciar ADS address con 0x48
Adafruit_ADS1115 ads(0x48); 


Arduino I2C ADS1115 I2C LCD

Finalmente programamos y cableamos los módulos,
para  hacer la lectura analógica A0
y visualizarla en al LCD todo por el protocolo I2C.

Paso 3 Programar Arduino:


#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
// Iniciar address 0x27 y 0x48 
LiquidCrystal_I2C lcd(0x27, 16, 2); 
Adafruit_ADS1115 ads(0x48);
float Voltage = 0.0;

void setup(void) 
{  // initializar Serial/ADS/LCD 
  Serial.begin(9600);  
  ads.begin();
  lcd.begin();

  // Encender Pantalla e imprimir en pantalla.
  lcd.backlight(); 
  lcd.setCursor(0,0); lcd.print("                ");
  lcd.setCursor(0,0); lcd.print("  HetPro  ADS   "); 
  lcd.setCursor(0,1); lcd.print("                ");
  lcd.setCursor(0,1); lcd.print("        i2C LCD ");
}

void loop(void) 
{
  int16_t adc0;  
  adc0 = ads.readADC_SingleEnded(0);
  Voltage = (adc0 * 0.1875)/1000;
  
  Serial.print("AIN0: ");        
  Serial.print(adc0);
  Serial.print("\tVoltage: ");  
  Serial.println(Voltage, 4);  
    
  delay(100);
  lcd.setCursor(0, 1);
  lcd.print(Voltage, 4); // Variable a imprimir.
}


Arduino I2C ADS1115 I2C LCD

Arduino I2C ADS1115 I2C LCD, leer la tensión de un potenciómetro con el modulo ADC1115 y transmitir la información a la LCD todo por el protocolo I2C.

Arduino I2C ADS1115 I2C LCD

Arduino I2C ADS1115 I2C LCD, leer la tensión de un potenciómetro con el modulo ADC1115 y transmitir la información a la LCD todo por el protocolo I2C.

LCD Nextion y Graficas

LCD Nextion y graficas

En el siguiente tutorial vamos a graficar en una LCD Nextion las temperaturas de tres sensores distintos y que trabajan con diferentes protocolos de comunicación (One-Wire, I2C, Analògico), las gráficas y los valores numèricos los mostraremos en la Pantalla Nextion de 2.4″.

Es importante mencionar que Las librerías para la pantalla Nextion están configuradas para trabajar con el Arduino Mega 2560 con los pines Serial 2 (Rx2, Tx2). Si desea utilizar otra Tarjeta Arduino es necesario modificar el archivo NexConfig.h, ver archivo readme.md en la carpeta de la libreria Nextion de Itead.

Las librerías para la Pantalla Nextion podrán descargarlas en el enlace de abajo.

Materiales 

  • Arduino Mega 2560
  • DS18B20 (Sensor de Temperatura One-Wire)
  • MCP9808 (Sensor de Temperatura I2C)
  • MCP9700 (Sensor de Temperatura Analògico)
  • Pantalla Nextion 2.4″
  • Protoboard

Código de Arduino

En el còdigo de Arduino esta comentado donde conectar cada sensor de Temperatura y la Pantalla Nextion.


/*HeTPro Herramientas Tecnològicas Profecionles*/
/*Tutorial para graficar Temperaturas de 3 sensores distintos*/
/*Protocolos de comunicacion I2C, One-Wire y Analògico*/ç
/*
                       Conexiones
    Nextion: Conectar a SERIAL 2 TX2 RX2(Librerias por default funciona en SERIAL 2)
    DS18B20: Conectar pin de Salida a pin Digital 3 de Arduino Mega(Sensor Digital One-Wire)
    MCP9808: Conectar a Pines I2C (20, 21) (Sensor Digital I2C)
    MCP9700:: Conectar a PIN Analògico A0 (Sensor Analògico)
*/
/*Sensor de Temperatura MCP9808 con Comunicacion I2C */
#include <Wire.h>;
#include "Adafruit_MCP9808.h"
/*Crea El Sensor MCP9808 un objeto*/
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
/*********************************************************/
/*Sensor de Temperatura DS18B20 ONE-WIRE*/
#include &lt;OneWire.h&gt;
#include &lt;DallasTemperature.h&gt;
#define ONE_WIRE_BUS 3 //Pin 3 a Salida DS18B20
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
/**********************************************************/
/*Nextion*/
#include "Nextion.h" /*Libreria para Pantalla Nexion*/
/*Funcion para Graficar las Temperaturas en la Nextion*/
NexWaveform s0 = NexWaveform(0, 1, "s0");
/*Funciones para mostrar las temperaturas numericamente*/
NexNumber n0 = NexNumber(0, 1, "n0");
NexNumber n1 = NexNumber(0, 1, "n1");
NexNumber n2 = NexNumber(0, 1, "n2");
int i;
/*********************************************************/
/* Sensor de Temperatura Analògico MCP9700*/
int mcp1 = A0;
float mcpT1 = 0;

void setup()
{
 Serial.begin(9600);
 /*Inicializacion de LCD nextion 2.4"*/
 nexInit();
 /*Inicializacion de Sensor DS18B20*/
 sensors.begin();
 /*Inicializacion MCP9808*/
 /* Direccion tempsensor.begin(0x19)*/
  if (!tempsensor.begin(0x19)) {
    Serial.println("No se enconto MCP9808!");
    while (1);
  }//end if(MCP9808)  
}//end void setup()

void loop()
{
  /*Lectura del sensor I2C MCP9808*/ 
tempsensor.shutdown_wake(0);//prepata el sensor para leer temperatura en MCP9808
float c = tempsensor.readTempC();//lee la temperatura en MCP9808
delay(5);
  /*Lectura del sensor DS18B20 ONE-WIRE*/ 
sensors.requestTemperatures(); //lee temperatura en ds18b20
delay(5);
i= sensors.getTempCByIndex(0);// lee la temperatura y asigna el valor en i
/*Lectura del sensor Analògico MCP9700*/ 
  mcpT1 = analogRead(mcp1)*5 / 1024.0;
  mcpT1 = mcpT1 - 0.5;
  mcpT1 = mcpT1 / 0.01;
  delay(5); 

/*Funciones para enviar las lecturas de los sensores a la Nextion */
/*DS18B20*/
 s0.addValue(0, i);/*Graficar Temperatura de DS18B20*/
 n2.setValue(i);/*Mostrar el Valor de DS18B20*/
 /*MCP9700*/
 s0.addValue(1, mcpT1);
 n1.setValue(mcpT1);
 /*MCP9808*/
 s0.addValue(2, c);
 n0.setValue(c);

tempsensor.shutdown_wake(1); // shutdown MSP9808 - power consumption ~0.1 mikro Ampere
 
}// end loop

Imagenes y video del Tutorial
En el siguiente link se encuentra el video del Funcionamiento completo del Tutorial: https://www.youtube.com/watch?v=LGWgJ3lgcFw&spfreload=5

LCD Nextion

Sensores de Temperatura y Nextion de 2.4″

 

LCD Nextion

Gráficas de los sensores de temperatura.

 

LCD Nextion

En la imagen podemos apreciar las gráficas y los valores de las temperaturas.

LCD Nextion

Valores para los tres sensores de temperatura

Enlaces de Interés

– Hoja de Datos MCP9808
– Hoja de Datos MCP9700
– Tutorial Editor de Nextion y Arduino UNO
– Tutorial DS18B20
– Nextion Editor
-Librterias Nextion