Sensor de temperatura

Sensor de Temperatura

Objetivo
El objetivo de esta practica es lograr medir con presicion la temperatura de diferentes soluciones o liquidos, haciendo uso de una lcd de 16x2 y de un teclado matricial, para poder definir setpoints, modificarlos y una vez alcanzado el setpoint suene una alarma.

Material
-          1 Sensor de temperatura TPM36
-          1 Tarjeta de Arduino Uno
-          1 Lcd de 16x2
1     1 Teclado matricial de 4x3
 1 Potenciometro de 10k ohm
 1 Resistencia de 220 ohm
 1 buzzer


Sensor de temperatura
Es un sensor que segun la hoja de frabricante (https://www.arduino.cc/en/uploads/Main/TemperatureSensor.pdf) puede medir entre -40° a 125° Celsius  esto es solo para nuestro sensor TPM36 tiene una variación de +-1° de impresición. El pin central es el de señal, pero para saber cuál es GND y 5V, el encapsulado tiene una cara plana y otra curva. Poniendo la cara plana mirando hacia vosotros con las patas hacia abajo,  el pin de la izquierda es alimentación 5V y naturalmente el otro es GND. Hay que tener esto muy encuenta ya que si lo conectamos alrevez esto puede causar que se queme y deje de funcionar, pero no es instantaneo, por lo que hay que observar como se conecta.

Programas

Programa 1  


Programa sencillo para familiarizarse con la lcd

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);

}

Programa 2

Programa para configurar nuestro teclado en la parte de "char hexaKeys" debido a la forma en la que se conecta es como puede variar la forma en la que esta configurado
#include <Keypad.h>
#include <LiquidCrystal.h>
int decenas, unidades;
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
const byte ROWS = 3; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando

char hexaKeys[ROWS][COLS] =  //Aquí pondremos la disposición de los caracteres tal cual están en //nuestro teclado
{
  {'B', '9', '6', '3'},
  {'0', '8', '5', '2'},
  {'A', '7', '4', '1'}
};

byte rowPins[ROWS] = {0, 1, 2}; //Seleccionamos los pines en el arduino donde iran conectadas las //filas
byte colPins[COLS] = {3, 4, 6, 7}; //Seleccionamos los pines en el arduino donde iran conectadas las //filas

void setup(){
  lcd.begin(16, 2);
}
void loop() {
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado
char customKey = customKeypad.getKey();
lcd.setCursor(0, 0);
lcd.print(customKey);
delay(1000);
}

Programa 3

//Programa final en el cual se usa el sensor de temperatura junto la lcd y el teclado matricial
#include <LiquidCrystal.h>
#include <Keypad.h>

int Sensor = 0, tec = 51, buzzer = 5, lectura,t;
double datos = 0, voltaje = 0, temp = 0;
char tecla;
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);


const byte ROWS = 3; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando

char hexaKeys[ROWS][COLS] =  //Aquí pondremos la disposición de los caracteres tal cual están en nuestro tec  1lado
{
  {'B', '9', '6', '3'},
  {'0', '8', '5', '2'},
  {'A', '7', '4', '1'}
};

byte rowPins[ROWS] = {0, 1, 2}; //Seleccionamos los pines en el arduino donde iran conectadas las //filas
byte colPins[COLS] = {3, 4, 6, 7}; //Seleccionamos los pines en el arduino donde iran conectadas las //filas

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado

void setup()
{
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2);
}

void loop() {
  lcd.setCursor(0, 8);
  datos = 0;
  for (int i = 0; i < 10 ; i++) {
    lectura = analogRead(Sensor);
    datos = datos + lectura;
  }
  datos = datos / 10.0;
  voltaje = 5.0 / 1024 * datos ;
  temp = voltaje * 100 - 46;
  lcd.setCursor(0, 0);
  lcd.print("Temp= ");
  lcd.print(temp);
  delay(1000);

  tecla = customKeypad.getKey();
  if (tecla == 'A' || tecla == 'B') {
    t = 0;
    int num = 0;
    for (int i = 0; i <= 1; i++) {
      do {
        tecla = customKeypad.getKey();
        delay(100);
      } while (tecla == NO_KEY);
      if (tecla == '0') {
        num = 0;
      } else if (tecla == '1') {
        num = 1;
      } else if (tecla == '2') {
        num = 2;
      } else if (tecla == '3') {
        num = 3;
      } else if (tecla == '4') {
        num = 4;
      } else if (tecla == '5') {
        num = 5;
      } else if (tecla == '6') {
        num = 6;
      } else if (tecla == '7') {
        num = 7;
      } else if (tecla == '8') {
        num = 8;
      } else if (tecla == '9') {
        num = 9;
      }
      if (i == 0) {
        t = num * 10;
      } else if (i == 1) {
        t = t + num;
        tec = t;
}
    }
  }
  lcd.setCursor(0, 7);
  lcd.print("Set Point= ");
  lcd.print(tec);
if(temp >= tec){

     tone(buzzer, 220, 250);
    }


}

Circuitos





Conclusión

El uso del sensor TPM36 no es un sensor muy preciso pero, usando las formulas podemos llegar a tener una presición bastante aceptable dependiendo de como se requiera utilizae