Está en la página 1de 36

Instituto Politécnico Nacional

Escuela Superior de Ingeniería Mecánica y


Eléctrica
Unidad Zacatenco
Ingeniería en Control y Automatización

Interfaces y Microcontroladores

Práctica 5. Envío de datos a pantallas LCD

Alumno: Sánchez Oviedo Edrei Ricardo


Boleta: 2015021226

Grupo: 7AM3

Profesor: Mejía García Adrián Esteban

Fecha de Entrega: 27/Noviembre/2020

1
Índice
Objetivo.................................................................................................................................................................................3
Desarrollo experimental........................................................................................................................................................4
Cuestionario........................................................................................................................................................................ 32

2
Objetivo

Enviar datos de tipo texto y numérico a un display de 16x2 (16 columnas por dos filas)
desde un microcontrolador, para observar los datos obtenidos a través de un
elemento primario de medición.

3
Desarrollo experimental
Empleando un microcontrolador con los pines suficientes realiza los siguientes ejercicios.
1. Elaborar un programa que muestre en el display LCD la activación de tres dispositivos.

Código
#include <LiquidCrystal.h>;
#include <Stepper.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int primero;
int segundo;
int tercero;
int LED=10;
int Motor=A3;
const int stepsPerRevolution=200;
Stepper myStepper(stepsPerRevolution,6,8,7,9);
void setup() {
lcd.begin(16,2);
pinMode(LED,OUTPUT);
pinMode(Motor,OUTPUT);
}
void loop() {
primero=digitalRead(A0);
segundo=digitalRead(A1);
tercero=digitalRead(A2);
if(primero==1 && segundo==0 && tercero==0){
lcd.clear();
lcd.setCursor(3,0);
lcd.print("LED activo");
digitalWrite(LED,HIGH);
}else if(primero==0 && segundo==1 && tercero==0){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Motor activo");
digitalWrite(Motor,LOW);;
}else if(primero==0 && segundo==0 && tercero==1){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Motor a pasos");
lcd.setCursor(6,1);
lcd.print("activo");
myStepper.setSpeed(3);
myStepper.step(2);
}else{
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Combinacion");
lcd.setCursor(2,1);
4
lcd.print("no permitida");
digitalWrite(Motor,HIGH);
digitalWrite(LED,LOW);
myStepper.setSpeed(3);
myStepper.step(0);
}
delay(200);
}

a. Al activar un interruptor se enciende un diodo LED (de cualquier color) y en la pantalla


se muestra el texto “LED activo”.

b. Cuando se activa un segundo interruptor y se desactiva el anterior, se enciende un


motor de CD y en la pantalla se muestra el texto “Motor activo”.

5
c. Finalmente, con los dos interruptores anteriores en estado 0 y un tercero en estado 1,
se energiza un motor a pasos y en la pantalla se muestra el texto “Motor a pasos
activo”.

d. Cualquier combinación de los botones como por ejemplo 101, 110, 011, debe mostrar
un mensaje de error en la pantalla y no se activa nada. EL texto que puede mostrarse
en este caso es “Combinación de botones no permitida”
6
7
2. Simula un proceso de mezclado de dos pinturas, como sigue a continuación:
8
Código
#include <LiquidCrystal.h>;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int LED2=10;
int LED=9;
int Motor=A3;
int potenciometro;
int porcentaje;
int porcentaje2;
int encendido;
int guardar;
int contador=0;
int contador1=0;
int dale=0;
int dale1=0;
int last=0;
int llenado=0;
int p;

void setup() {
lcd.begin(16,2);
pinMode(LED,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(Motor,OUTPUT);
pinMode(A2,INPUT);
pinMode(A1,INPUT);
}

void reset(){
contador=0;
contador1=0;
dale=0;
dale1=0;
last=0;
llenado=0;
lcd.clear();
}

void loop() {
encendido=digitalRead(A1);
guardar=digitalRead(A2);
if(last==0){
digitalWrite(Motor,HIGH);
if(encendido==LOW && contador==0){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("OPRIMA EL BOTON");
lcd.setCursor(3,1);
lcd.print("INICIO PARA");
delay(1000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("AGREGAR PORCEN-");
lcd.setCursor(0,1);
lcd.print("TAJES DE PINTURA");
delay(1000);

9
}

if(encendido==HIGH){
contador=1;
lcd.clear();
}
if(contador==1 && contador1==0){
if(encendido==LOW){
potenciometro=analogRead(A0);
porcentaje=map(potenciometro,0,1023,0,100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AGREGUE PRIMER");
lcd.setCursor(0,1);
lcd.print("PORCENTAJE");
lcd.setCursor(12,1);
lcd.print(porcentaje);
lcd.setCursor(15,1);
lcd.print("%");
delay(1000);
}}
if(guardar==HIGH && contador==1){
if (dale==0){
contador1=1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PORCENTAJE");
lcd.setCursor(13,0);
lcd.print(porcentaje);
lcd.setCursor(4,1);
lcd.print("GUARDADO");
delay(1000);
}}
if(guardar==LOW && contador1>0){
if(dale1==0){
potenciometro=analogRead(A0);
porcentaje2=map(potenciometro,0,1023,0,100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AGREGUE SEGUNDO");
lcd.setCursor(0,1);
lcd.print("PORCENTAJE");
lcd.setCursor(12,1);
lcd.print(porcentaje2);
lcd.setCursor(15,1);
lcd.print("%");
delay(1000);
dale=1;
}}
if(guardar==HIGH && dale==1){
dale1=1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PORCENTAJE");
lcd.setCursor(13,0);
lcd.print(porcentaje2);
lcd.setCursor(4,1);
lcd.print("GUARDADO");
delay(1000);
}}
10
if(dale1==1 && guardar==LOW){
p=porcentaje+porcentaje2;
if(p<=100){
if(llenado==0){
last=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SUMA PORCIENTAJES");
lcd.setCursor(5,1);
lcd.print(p);
delay(2000);
llenado=1;
}else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LLENADO TANQUE");
digitalWrite(LED2,HIGH);
digitalWrite(LED,HIGH);
delay(10000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MEZCLANDO...");
digitalWrite(LED2,LOW);
digitalWrite(LED,LOW);
digitalWrite(Motor,LOW);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MEZCLA FINALIZADA");
digitalWrite(Motor,HIGH);
delay(3000);
reset();
}}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error Porcentaje");
lcd.setCursor(6,1);
lcd.print(p);
delay(2000);
reset();
}}
}

a. Con el circuito alimentado, en la pantalla se muestra el texto “Oprima el botón inicio


para agregar porcentajes de pintura”.

11
b. Haciendo uso de una resistencia variable el usuario agrega el porcentaje de 0 a
100%. En la pantalla se visualiza el texto “Agregue el primer porcentaje”

12
c. Cuando llega al porcentaje deseado, el usuario oprime un botón de Aceptar y
guarda el valor que seleccionó. En la pantalla se pude visualizar la variación del
porcentaje que va agregando y cuando oprime el botón de aceptar se muestra el
texto “Porcentaje guardado”.

d. Se realiza el mismo procedimiento de los incisos b y c, para el segundo porcentaje.

13
e. Si la suma de los dos porcentajes guardados es mayor al 100 % en la pantalla se
muestra un mensaje de error y el procedimiento se repite, regresando al inciso b.

14
f. Si el porcentaje es menor o igual al 100% el proceso sigue con la activación de dos
diodos LED por 10 segundos. Esto simulará la activación de dos electroválvulas. En
la pantalla se muestra el texto “Llenando tanque…”

15
g. Transcurrido el tiempo de llenado, se activa un mezclador. En el circuito se energiza
un motor de CD y en la pantalla se muestra el texto “Mezclando…”. Esto dura 5
segundos.

h. Transcurrido el tiempo de mezclado, se muestra el texto “Mezcla finalizada”.

16
i. Hecho lo anterior, es posible repetir el proceso, mostrando el mensaje del inciso a.

17
18
3. Muestra una mejora del proceso que realizaste en el ejercicio 2.
Para este punto se agregaron 2 alarmas que se ven reflejadas como 2 Leds los cuales nos indican si
hay un error, funcionando como alarma por bajas y altas

Código
#include <LiquidCrystal.h>;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int LED2=10;
int LED=9;
int Baja=1;
int Alta=0;
int Motor=A3;
int potenciometro;
int porcentaje;
int porcentaje2;
int encendido;
int guardar;
int contador=0;
int contador1=0;
int dale=0;
int dale1=0;
int last=0;
int llenado=0;
int p;

void setup() {
lcd.begin(16,2);
pinMode(LED,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(Alta,OUTPUT);
pinMode(Baja,OUTPUT);
pinMode(Motor,OUTPUT);
pinMode(A2,INPUT);
pinMode(A1,INPUT);
}

void reset(){
contador=0;
contador1=0;
dale=0;
dale1=0;
last=0;
llenado=0;
lcd.clear();
}

void loop() {
encendido=digitalRead(A1);
guardar=digitalRead(A2);
if(last==0){
digitalWrite(Motor,HIGH);
if(encendido==LOW && contador==0){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("OPRIMA EL BOTON");
19
lcd.setCursor(3,1);
lcd.print("INICIO PARA");
delay(1000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("AGREGAR PORCEN-");
lcd.setCursor(0,1);
lcd.print("TAJES DE PINTURA");
delay(1000);
}

if(encendido==HIGH){
contador=1;
lcd.clear();
}
if(contador==1 && contador1==0){
if(encendido==LOW){
potenciometro=analogRead(A0);
porcentaje=map(potenciometro,0,1023,0,100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AGREGUE PRIMER");
lcd.setCursor(0,1);
lcd.print("PORCENTAJE");
lcd.setCursor(12,1);
lcd.print(porcentaje);
lcd.setCursor(15,1);
lcd.print("%");
delay(1000);
}}
if(guardar==HIGH && contador==1){
if (dale==0){
contador1=1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PORCENTAJE");
lcd.setCursor(13,0);
lcd.print(porcentaje);
lcd.setCursor(4,1);
lcd.print("GUARDADO");
delay(1000);
}}
if(guardar==LOW && contador1>0){
if(dale1==0){
potenciometro=analogRead(A0);
porcentaje2=map(potenciometro,0,1023,0,100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AGREGUE SEGUNDO");
lcd.setCursor(0,1);
lcd.print("PORCENTAJE");
lcd.setCursor(12,1);
lcd.print(porcentaje2);
lcd.setCursor(15,1);
lcd.print("%");
delay(1000);
dale=1;
}}
if(guardar==HIGH && dale==1){
dale1=1;
20
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PORCENTAJE");
lcd.setCursor(13,0);
lcd.print(porcentaje2);
lcd.setCursor(4,1);
lcd.print("GUARDADO");
delay(1000);
}}
if(dale1==1 && guardar==LOW){
p=porcentaje+porcentaje2;
if(p<=100){
if(llenado==0){
last=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SUMA PORCENTAJES");
lcd.setCursor(5,1);
lcd.print(p);
delay(2000);
llenado=1;
}else{if(p>=50){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LLENADO TANQUE");
digitalWrite(LED2,HIGH);
digitalWrite(LED,HIGH);
delay(10000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MEZCLANDO...");
digitalWrite(LED2,LOW);
digitalWrite(LED,LOW);
digitalWrite(Motor,LOW);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("MEZCLA FINALIZADA");
digitalWrite(Motor,HIGH);
delay(3000);
reset();
}
if(p<50){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("FALTA PINTURA");
lcd.setCursor(0,1);
lcd.print("PARA FUNCIONAR");
digitalWrite(Baja,HIGH);
delay(10000);
digitalWrite(Baja,LOW);
}
}}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ERROR PORCENTAJE");
lcd.setCursor(6,1);
lcd.print(p);
delay(2000);
21
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SOBRE CARGA");
lcd.setCursor(0,1);
lcd.print("DE PINTURA");
digitalWrite(Alta,HIGH);
delay(10000);
digitalWrite(Alta,LOW);
reset();
}}
}
Diagrama de flujo

22
LINK DEL DIAGRAMA DE FLUJO
https://app.diagrams.net/#G11uylUjvykta-VZqchIKh0fTV5LL0_K_3

Esta es la primera secuencia donde metemos 2 valores de 100%, el límite superior es de cien por lo
que se activa la alarma de alta

23
24
25
26
Esta es la primera secuencia donde metemos valores de 9% y 20% , el límite inferior es de
cincuenta por lo que se activa la alarma de baja

27
28
29
30
31
Cuestionario

1. Muestra el diagrama de flujo de un programa que permitiría abrir una puerta a partir de
cinco contraseñas asignadas a cinco usuarios diferentes.

2. Agrega un diagrama descriptivo o conceptual de la elaboración del sistema anterior.


32
3. Explica y justifica la selección de equipo que vayas a utilizar de acuerdo lo que respondiste
en la pregunta 2. Considera que la puerta que se va a mover 1.2 de ancho, 2.2 m de alto y una

33
profundidad de 2.15 cm; además está construida de acero galvanizado y su peso es de 74.56
kg.
Utilizaremos la ASSA ABLOY HS8020P Puerta rápida
Cabezal: Cubierta de cilindro de acero galvanizado
Cubierta de motor de acero galvanizado Guía lateral:
Cubiertas de guías laterales de acero galvanizado Funcionamiento: Acceso y automatización
Funcionamiento: Motor + unidad de control Colores: 8 colores estándar - blanco, amarillo, verde,
naranja, rojo, gris, negro, azul
El perfil del cabezal está extruido de una sola pieza, en los largos que requiera el cliente, entre 1,5 m
y 6 m. Las puertas son auto soportante con sus jambas y requieren de un esfuerzo mínimo de la
estructura de sujeción. No se requiere de ninguna viga horizontal para sostener el cabezal y la
puerta. La altura de la puerta puede variar de 1.5 m a 4 m.
Implementación de la Cerradura Digital CDI55:

Abre tu puerta SIN LLAVES. Utiliza tu huella digital para abrir tu puerta de Seguridad XE más rápido,
sin necesidad de sacar tu llavero. Sincroniza todos los pasadores de tu puerta con Usuario y
contraseña correctas “BIENVENIDO” (acceso a la puerta) 22 un solo movimiento de la manija. Si ya
tienes una puerta XE Seguridad, o apenas vas a adquirir una, el servicio de instalación corre por
nuestra cuenta. Incluye un sistema de alarma de bajo voltaje, y cuenta con un sistema de corriente
de emergencia, utilizando una batería DC9V como respaldo.

Además, se requiere de la implementación de la Cerradura Digital PRO, para el acceso con la


contraseña y usuario correspondiente a nuestra casa:

4. Explica que es un sistema NFC.

34
La tecnología NFC (siglas de Near Field Communication) es un sistema de comunicación
inalámbrico de corto alcance (funciona por proximidad) que se está integrando en smartphones y
tablets.
La idea es que dos dispositivos puedan comunicarse entre sí de manera cómoda y eficaz.
No está pensada para transferir ficheros de gran tamaño sino para identificar o validar a otro
dispositivo. Su virtud sería ahorrar tiempo y esfuerzo al emparejar dos aparatos.
Un ejemplo: conectar nuestro móvil al manos libres del coche. Para conseguirlo sin NFC tenemos
que activar el Bluetooth del teléfono, rastrear dispositivos, conectar con ellos, introducir la clave.
NFC es una plataforma abierta pensada desde el inicio para teléfonos y dispositivos móviles. Su
tasa de transferencia puede alcanzar los 424 kbit/spor lo que su enfoque más que para la
transmisión de grandes cantidades de datos es para comunicación instantánea, es decir,
identificación y validación de equipos/personas.

Su punto fuerte está en la velocidad de comunicación, que es casi instantánea sin necesidad de
emparejamiento previo. Como contrapartida, el alcance de la tecnología NFC es muy reducido, pues
se mueve como máximo en un rango de los 20 cm. A su favor también juega que su uso es
transparente a los usuarios y que los equipos con tecnología NFC son capaces de enviar y recibir
información al mismo tiempo.

La tecnología NFC puede funcionar en dos modos:

 Activo, en el que ambos equipos con chip NFC generan un campo electromagnético e
intercambian datos.

 Pasivo, en el que solo hay un dispositivo activo y el otro aprovecha ese campo para
intercambiar la información.

5. Mejora tu propuesta del sistema planteado en la pregunta dos, empleando un sistema NFC.
Muestra un nuevo diseño conceptual utilizando esta tecnología.

35
6. Explica cómo funcionan los métodos: Cursor, Display, Text Direction, Scroll y Serial
display. Consulta la pagina
https://www.arduino.cc/en/Tutorial/LibraryExamples/LiquidCrystalSetCursor
Cursor: se emplea para que el cursor sea visible en el display como un signo de subrayado.
Display: enciende el Display y pone en blanco rápidamente la pantalla sin perder lo que está en ella.
Text Direction: controla en qué dirección fluye el texto desde el cursor.
 rightToLeft() hace que el texto fluya hacia la izquierda desde el cursor, como si la pantalla
estuviera justificada a la derecha.
 leftToRight() hace que el texto fluya hacia la derecha desde el cursor, como si la pantalla
estuviera justificada a la izquierda.
Scroll: desplaza el texto hacia la izquierda y hacia la derecha. Los métodos scrollDisplayLeft() y
scrollDisplayRight()para invertir la dirección en la que fluye el texto.
Serial display: acepta la entrada en serie de una computadora host y la muestra en la pantalla LCD.

36

También podría gustarte