Está en la página 1de 10

Título de la práctica: Sensor de temperatura, MicroSD y control por botón de escritura y lectura, I2C y

Display de Cristal Líquido


Asignatura: Aplicaciones IoT Fecha de inicio: 03 feb. 20 Hoja: 1 de 10
Unidad temática: Unidad I Fecha de entrega: 03 feb. 20 Grupo: T184 y T186
No. de participantes recomendados: 1 Elaboró: M.en GTI Yolanda Montes Swain
Duración: 1 hr Lugar Asignado: Laboratorio Tema: sensores y medios de almacenamiento
Alumno:

Objetivo de la práctica:

El alumno empleará el sensor Lm35 y un botón para escribir y leer los datos de temperatura en una
Memoria MicroSD y usará un bus I2C para controlar un LCD que muestre la temperatura y los datos
guardados en la SD.

Resultados esperados.

Medición de temperatura por medio del LM35, el almacenamiento de sus datos por medio de una
memoria MicroSD y si visualización por medio de un botón.

Marco teórico.

Sensor LM35

El LM35 es un sensor de temperatura con una precisión calibrada de 1 °C. Su rango de medición abarca
desde -55 °C hasta 150 °C. La salida es lineal y cada grado Celsius equivale a 10 mV, por lo tanto:

 150 °C = 1500 mV
 -55 °C = -550 mV1
 Opera de 4v a 30v.

Sus características más relevantes son:

 Está calibrado directamente en grados Celsius.


 La tensión de salida es proporcional a la temperatura.
 Tiene una precisión garantizada de 0.5 °C a 25 °C.
 Baja impedancia de salida.
 Baja corriente de alimentación (60 μA).
 Bajo costo.

El LM35 no requiere de circuitos adicionales para calibrarlo externamente. La baja impedancia de salida,
su salida lineal y su precisa calibración hace posible que este integrado sea instalado fácilmente en un
circuito de control. Debido a su baja corriente de alimentación se produce un efecto de auto
calentamiento muy reducido.

Temperatura (°C) = (5.0 * valor * 100.0) /1024.0


Tarjeta de memoria SD y bus de comunicación SPI (SERIAL PERIPHERAL INTERFACE)

Esta forma de comunicación es usada por varios dispositivos para el intercambio de información, uno
de ellos es el lector de memorias SD.

En las memorias tenemos tres tamaños que son: Estándar, mini y micro SD.

En cuanto a su capacidad tenemos: Estandar capacity, High Capacity, Extended Capacity y entrada-
salida. Las más utilizadas en Arduino son las dos primeras.

Para conectar el módulo de memoria es necesario emparejar sus pines que marca el sistema SPI para
la comunicación del dispositivo que son básicamente la siguiente

El SPI es un protocolo de comunicación síncrona de 4 hilos, entre dispositivos electrónicos que ha


ganado bastante aceptación en la industria como sistema de comunicación de muy corta distancia,
normalmente dentro la placa de circuito impreso.

Es un protocolo de transmisión que permite alcanzar velocidades muy altas y que se diseñó pensando
en comunicar un micro controlador con distintos periféricos y que funciona a full dúplex.SPI utiliza una
solución síncrona, porque utiliza unas líneas diferentes para los datos y el Clock. El Clock es una señal
que indica al que escucha exactamente cuándo leer las líneas de datos, con lo que el problema de
perdida de sincronía se elimina completamente.

Esta comunicación se establece por medio de:

 MOSI: Master Output-Slave Input


 MISO: Master Input-Slave Output
 SCK: control de reloj síncrono
 SS: Estándar Slave
Y en el cual el único que puede iniciar la comunicación es el Master entre esclavos y no así entre
esclavos y esclavo master.

Para la comunicación de la memoria y el Arduino es necesario conectar estos tres pines más el pin SS
(standard-slave) que es indicada por los fabricantes.

MODELO ARDUINO MOSI MISO SCK SS SLAVE


UNO 11, ICSP-4 12, ICSP-1 13, ICSP-3 10
MEGA 51, ICSP-4 50, ICSP-1 52, ICSP-3 53

Pines asignados para el Arduino Uno y el mega.

I2C ( Inter Intergrad Circuits bus)

Es un estándar creado por Phillips y ofrece una norma que especifica la velocidad, niveles de tensión y
protocolo a seguir para poder realizar la comunicación entre dispositivos. Esa norma se llamó Inter
Integrated Circuits bus, o IIC =I2C, y se convirtió en un estándar en la industria.

Es un protocolo de dos hilos de control, uno para transmitir los datos, SDA y otro, el reloj asíncrono que
indica cuando leer los datos SCL, GND y 5V. Esto nos ahorra puertos y su implementación es más fácil.

Los pines I2C varían de acuerdo al modelo de Arduino, en la siguiente tabla se muestra cuáles son los
pines I2C para cada modelo de Arduino.
Cada dispositivo conectado al bus I2C y cada uno tiene su dirección exclusiva, de 7 bits, con lo que
podemos conectar (2 7 ) 128 dispositivos.

Uno de estos componentes, debe actuar como master, es decir controla el reloj.

No se requiere una velocidad de reloj estricta, ya que es el master quien controla el Clock.

El I2C permite la conexión Master Slave, siendo el microcontrolador el master y los demás dispositivos
los esclavos. Es importante destacar que cada slave tiene una dirección asignada que permitirá indicar
a cuál de ellos se está refiriendo en el control de la información.

También se debe de tener presentes las resistencias de Pull-Up que pueden ser requeridas o no
dependiendo del dispositivo. En nuestro caso para el LCD no son necesarias.

LCD (Liquid Crystal Display)

Las siglas LCD significan “Liquid Cristal Display” ó pantalla de cristal líquido. Es una pantalla plana
basada en el uso de una sustancia líquida atrapada entre dos placas de vidrio, haciendo pasar por este
una corriente eléctrica a una zona específica, para que así esta se vuelva opaca, y además cuenta
(generalmente) con iluminación trasera.
También hay las pantallas LCD de color, cada pixel individual se divide en tres cédulas o sub pixeles
con los colores RGB (Rojo, Verde y Azul) respectivamente. Y así cada pixel puede controlarse para
producir una gran variedad de colores distintos.

Son una opción muy sencilla de usar, y por eso los displays LCD, han ganado terreno en los proyectos
electrónicos de todo tipo. Esto se debe a que:

 Tienen varios tamaños y configuraciones.


 No son caros
 Son de bajo consumo.
 Pueden mostrar texto y caracteres especiales si se diseñan en su interface.

Pueden ser configurados en su forma normal conectando todos sus pines hacia el Arduino más un
potenciómetro externo para controlar el brillo del display. También se puede usar el I2C, que nos
permite ahorrar puertos de conexión.

Para usar este tipo de dispositivo es necesario descargar su librería tanto para conexión normal como
en base a I2C. Por el momento, se hará usando el I2C debido a que permitirá hacer más fácil la conexión
para la continuación del ejercicio del lector de SD.

Librería para el LCD con I2C

LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows)

Método o función que crea un objeto de la clase LiquidCrystal_I2C, con dirección, columnas y filas
indicadas.

lcd.init()
Inicializa el módulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C y el
LCD.

lcd.clear()
Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)).

lcd.setCursor(col, row)
Posiciona el cursor del LCD en la posición indicada por col y row(x,y); es decir, establecer la ubicación
en la que se mostrará posteriormente texto escrito para la pantalla LCD.

lcd.print() o lcd.write()
Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print

lcd.scrollDisplayLeft()
Desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.

lcd.scrollDisplayRight()
Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.
lcd.backlight();
Enciende la Luz del Fondo del LCD

lcd.noBacklight();
Apaga la Luz del Fondo del LCD

lcd.createChar (num, datos)


Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho caracteres de
5x8 píxeles (numeradas del 0 al 7). Dónde: num es el número de carácter y datos es una matriz que
contienen los pixeles del carácter. Se verá un ejemplo de esto más adelante.

Material requerido.

Computadora, Arduino Uno, Cables, sensor LM35, memoria microSD, adaptador o lector, protoboard,
cable USB y cables dupont, resistencia de 10 kohms y 220 ohms

Desarrollo de la práctica

1) Armar el siguiente circuito con Arduino, lector de microSD y sensor de temperatura


LM35
2) Continuar armando del siguiente circuito al anterior con el botón e implementar
la conexión con la tarjeta lectora.
3) Armar por último el siguiente circuito a los tres anteriores, cuidando que los
pines del I2C estén conectados al LCD como indica la figura siguiente. El pin
SCL (slave clock) va al pin A5 de arduino y el pin SDA (Slave Data) al A4 del
arduino, el Vcc a 5v y el GND a tierra.

a) Descargar la librería para el I2C de la siguiente dirección


https://www.resistorpark.com/arduino-wire-library-download/

b) Descargar la librería para el LCD


https://codeload.github.com/marcoschwartz/LiquidCrystal_I2C/zip/master

c) Escritura y lectura de datos del sensor LM35 a la memoria microSD por medio de
un botón y mostrar la escritura y lectura por medio de un Display de Cristal
Líquido (lcd) utilizando el bus I2C ( inter integrated

#include <SD.h>
#include <Wire.h> // librería para el I2C
#include <LiquidCrystal_I2C.h> //librería para el LCD e I2C
LiquidCrystal_I2C lcd(0x27,16,2); //lcd(dirección para I2C, 16 caracteres, 2 renglones)
// por lo general 0x27 es la dirección asignada para el lcd
File archivo;
float tempC;
int LED =7;
int BOTON =8;
int val = 0;
int estado = 0;
int viejo_estado = 0;
void setup(){
pinMode(LED,OUTPUT);
pinMode(BOTON,INPUT);
lcd.init(); // iniciamos el lcd
lcd.backlight(); // método que indica si se prende la luz de atrás.
Serial.println("Iniciando la MicroSD");
if (!SD.begin(4)) {
Serial.println("No se pudo leer la SD");
return;
}
Serial.begin(9600);
}
void loop() {
val= digitalRead(BOTON);
if ((val == HIGH) && (viejo_estado == LOW)){
estado=1-estado;
delay(1000);
}

viejo_estado = val; // valor del antiguo estado


if (estado==1){
digitalWrite(LED, HIGH);

Serial.println("Lectura exitosa de la MicroSD");


archivo = SD.open("calor.txt");
float dato;
if (archivo) {
lcd.clear();
lcd.setCursor(0,0);
while(estado==1){
while (archivo.available()){ // se verifica que el archivo esté correcto
lcd.write(archivo.read()); // se escribe en el LCD la temperatura obtenida
delay(50);
}
archivo.close(); //cerramos el archivo
estado=0; // regresamos el estado a cero
}
}
}
else{
lcd.clear();
lcd.setCursor(0, 0);
digitalWrite(LED,LOW);
archivo=SD.open("calor.txt",FILE_WRITE);
if (archivo){
tempC=analogRead(A0);
tempC=(5.0 * tempC * 100.0)/1024.0;
lcd.print(tempC); // mostramos el valor en el lcd
archivo.print(tempC); //Escribimos el valor en la memoria
archivo.println(); //salto de línea para el siguiente valor
archivo.close(); //Se cierra el archivo
Serial.print("sensor="); // se escribe en el monitor serial "sensor="
Serial.print(tempC); // Se muestra el valor de la temperatura
Serial.print("°C"); // se muestran los grados celsius
Serial.println(); // se da salto de linea para ver el siguiente valor
} // cierre de if
delay(1000); // se espera 1 segundo para la siguiente lectura.
} // cierre de else
} // cierre de loop()

a) Investigar cómo se puede poner el carácter ° (grados centígrados) el final de la


temperatura que se muestra en le LCD