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 1 Teclado matricial de 4x3
1 Potenciometro de 10k ohm
1 Resistencia de 220 ohm
1 buzzer
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.
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 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);
}
}
#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);
}
}
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