Uploaded by maximocv56

INFORME 4 MICROCONTROALDORES

advertisement
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
ÍNDICE
PRACTICA 2: PROGRAMACION DE E/S ............................................................................. 2
1.
OBJETIVOS DIDACTICOS: ............................................................................................ 2
2.
MARCO TEORICO: .......................................................................................................... 2
2.1. ENTRADAS Y SALIDAS EN EL ATMEGA 328P: ...................................................... 2
3.
MATERIAL Y EQUIPO: .......................................... Ошибка! Закладка не определена.
4.
PROCEDIMIENTO: .......................................................................................................... 4
4.1.LECTURA DE UN PULSADOR ..................................................................................... 4
5.
ACTIVIDADES ......................................................... Ошибка! Закладка не определена.
6.
CONCLUSIONES:............................................................................................................ 19
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
1
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
PRACTICA 4: TEMPORIZADORES Y LCD
1. OBJETIVOS DIDACTICOS:
•Aprender a manejar los temporizadores.
• Conectar Pantalla LCD a una placa Arduino.
• Emplear comunicación serial para mostrar los valores (monitor serial).
2. MARTERIAL Y EQUIPO:
• Computador.
• Placa Arduino (Uno, Leonardo, Mega, Nano, etc).
• Pantalla LCD.
• Buzzer.
• Componentes varios.
• Software Proteus.
3. MARCO TEORICO:
3.1. PANTALLA LCD:
LCD significa Liquid Crystal Display o Pantalla de Cristal Líquido. Es una tecnología utilizada
en monitores de computadoras, televisores, cámaras digitales y otros dispositivos electrónicos,
que permite una pantalla más delgada y plana, además de una excelente definición y más ahorro
de energía con respecto a los viejos monitores de tubos de rayos catódicos (CRT).
Básicamente estas pantallas están integradas por diminutos puntos. Poseen dos capas de material
polarizante. Entre las capas se introduce una solución de cristal líquido. Luego una señal eléctrica
hace que los cristales se alineen de tal manera que impidan o no el paso de la luz.
Cuando la pantalla se pone negra, todos sus cristales están alineados para que no pase luz. Los
LCD tienen una vida promedio de entre 50 y 60 mil horas de uso.
Figura 1 Pantalla LCD 16 x2
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
2
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Arduino nos facilita enormemente la comunicación con los Displays mediante la librería
“LiquidCrystal” la cual está optimizada de tal manera que nos permite comunicarnos por tan solo
4 pines de salida digital, con cualquier Display compatible con el Driver Hitachi HD44780.
Podemos encontrar en el mercado muchos modelos de Display compatibles con este Driver.
El pinout de la pantalla LCD se muestra a continuación, en el que se distinguen los siguientes
grupos:

Energia: Vcc, GND, Vo (Contraste), A y C(ánodo y cátodo de luz de fondo)

Datos: Pines del 7 al 14 (D0 al D7).

Control: RS (Selección de registro), R/W (Lectura/Escritura) y EN (habilitación).
Figura 2 Pines de la Pantalla LCD
3.2. LIBRERÍA LDC:
La librería para el manejo del LCD es la librería LiquidCrystal.H que viene en el IDE de
Arduino, la que contiene las siguientes funciones principales.
LiquidCrystal(Rs, En, D4, D5, D6, D7)

Función que permite crear una variable de la clase LiquidCrystal, con los pines indicados.
Begin(Cols, Rows)

Inicializa el LCD, se debe especificar número de columnas (cols) y filas (rows) del LCD.
Clear()
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
3
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica

Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición
(0,0)).
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.
Write()

Escribir un carácter en la pantalla LCD, en la ubicación actual del cursor.
Print()

Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print
ScrollDisplayLeft()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.
ScrollDisplayRight()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.
CreateChar (Num, Datos)

Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho
caracteres de 5×8 pixeles (numeradas del 0 al 7). Donde: num es el número de carácter
y datos es una matriz que contienen
4. PROCEDIMIENTO:
4.1. PROBANDO LA PANTALLA LCD
Arme el siguiente circuito.
a. ARME EL SIGUIENTE CIRCUITO:
Figura 3 diagrama de circuito con pantalla LCD y un
potenciómetro
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
4
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 4 Circuito realizado en casa
b. ESCRIBA EL SIGUIENTE CÓDIGO
#include <LiquidCrystal.h>; // Llamamos a la librería del LCD
LiquidCrystal lcd(12,11,5,4,3,2); // Definimos los pines a utilizar
void setup()
{
lcd.begin(16, 2); // Cantidad de columnas y filas es el Display
pinMode(10, OUTPUT); //Activamos la retroiluminación *Ver CKT
digitalWrite(10, HIGH);
}
void loop()
{
lcd.setCursor(0,0); //Establecemos la posicion del cursor
lcd.print("Hola: ");
lcd.setCursor(1,1); //Establecemos la posicion del cursor
lcd.print("Ingenieria Mecatrónica");
delay(200);
}
4.2. PREPARANDO LA PANTALLA Y FIJANDO EL TIEMPO:
a. Dado el siguiente circuito.
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
5
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 5 Temporizador con LCD
b. Implemente previamente el circuito del LCD con la placa Arduino y compruebe su
correcto funcionamiento mostrando el mensaje:
c. Escriba y explique el programa en Arduino IDE para conseguir visualizar en la pantalla
lo requerido en el punto 4.
d. Conecte los cuatro pulsadores con las resistencias Pull Down de 10KΩ a la placa Arduino
e. Los pulsadores con cable naranja deberán seleccionar las Horas, Minutos y Segundos.
d. Escriba y explique el programa en Arduino IDE para conseguir visualizar en la pantalla
lo requerido por el circuito. Al presionar los pulsadores deberá incrementarse el número de
horas, minutos o segundos visualizados
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
6
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
4.3. Controlando el tiempo.
a. El cuarto pulsador deberá servir para iniciar el temporizador en cuenta regresiva.
b. Al finalizar el tiempo se deberá activar el Buzzer.
c. Escriba el siguiente código para conseguir lo señalado en los dos puntos anteriores.:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Inicializamos la librería con el número de
los pines a utilizar
int buzzer = 13; // Alarma
int ahoras = 0; // Variable para mostrar por LCD las horas
int aminutos = 0; // Variable para mostrar por LCD los minutos
int asegundos = 0; // Variable para mostrar por LCD los segundos
int segundostotal = 0; // Tiempo total
int msg = 0;
int start = A1; // Pulsador de arranque
int empieza = 1024; // Variable para almacenar el valor del pulsador de arranque
int buth = A5; // Pulsador de Horas
int butm = A4; // Pulsador de Minutos
int buts = A3; // Pulsador de segundos
int varbuth = 0; // Variable para almacenar el valor del pulsador de horas
int varbutm = 0; // Variable para almacenar el valor del pulsador de minutos
int varbuts = 0; // Variable para almacenar el valor del pulsador de segundos
int varbuthAnt = 0;
int varbutmAnt = 0;
int varbutsAnt = 0;
void setup() {
lcd.begin(16, 2); // Configuramos el número de columnas y filas del LCD.
pinMode(buzzer, OUTPUT); // Pin de alarma -> Salida
pinMode(buth, INPUT); // Pin de pulsador de horas -> Entrada
pinMode(butm, INPUT); // Pin de pulsador de minutos -> Entrada
pinMode(buts, INPUT); // Pin de pulsador de segundos -> Entrada
pinMode(start, INPUT); // Pin de pulsador de arranque -> Entrada
msg = 0;
empieza = 1024;
varbuth = 1; // Barrera de horas
varbutm = 1; // Barrera de minutos
varbuts = 1; // Barrera de segundos
lcd.setCursor(0, 0);
lcd.print("Temporizador con");
lcd.setCursor(0, 1);
lcd.print("Arduino + LCD");
delay(2500);
lcd.clear();
}
void loop() {
// LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR
// EL BOTON DE ARRANQUE
13 de setiembre de 2023
do {
varbuth
digitalRead(buth);
NOMBRE:= BRAYAN
CUETO QUICHCA // Leemos el botón de horas
varbutm = digitalRead(butm); // Leemos el botón de minutos
7
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
void loop() {
// LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR
// EL BOTON DE ARRANQUE
do {
varbuth = digitalRead(buth); // Leemos el botón de horas
varbutm = digitalRead(butm); // Leemos el botón de minutos
varbuts = digitalRead(buts); // Leemos el botón de segundos
if (!varbuth && varbuthAnt) { // Si el botón es pulsado, aumentamos las horas
ahoras++;
if (ahoras > 23) ahoras = 0;
delay(50);
}
varbuthAnt = varbuth;
if (!varbutm && varbutmAnt) { // Si el botón es pulsado, aumentamos los minutos
aminutos++;
if (aminutos > 59) aminutos = 0;
delay(50);
}
varbutmAnt = varbutm;
if (!varbuts && varbutsAnt) { // Si el botón es pulsado, aumentamos los segundos
asegundos++;
if (asegundos > 59) asegundos = 0;
delay(50);
}
varbutsAnt = varbuts;
lcd.setCursor(0, 0);
lcd.print("Digite el Tiempo"); // Mensaje y las HH:MM:SS que vayamos aumentando
lcd.setCursor(4, 1);
char buffer[30];
sprintf(buffer, "%02d:%02d:%02d", ahoras, aminutos, asegundos);
lcd.print(buffer);
} while (digitalRead(start) == 0);
segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); // Convierte el
tiempo elegido en segundos
while (segundostotal > 0) {
delay(1000);
segundostotal--;
ahoras = (segundostotal / 3600); // Convierte los segundos totales en horas
aminutos = (segundostotal / 60) % 60; // Convierte los segundos totales en
minutos
asegundos = segundostotal % 60; // Convierte los segundos totales en segundos
lcd.setCursor(0, 0);
lcd.print("Tiempo restante"); // Mostramos mensaje de tiempo restante
lcd.setCursor(4, 1);
char buffer[30];
sprintf(buffer, "%02d:%02d:%02d", ahoras, aminutos, asegundos);
lcd.print(buffer);
if (segundostotal == 0) { // Si finaliza el tiempo
13 de setiembre
de 2023
while (1) { // Bucle infinito mostrando mensaje y haciendo
parpadear
un led
NOMBRE:
BRAYAN CUETO QUICHCA
lcd.clear();
lcd.setCursor(5, 0);
8
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
lcd.print(buffer);
if (segundostotal == 0) { // Si finaliza el tiempo
while (1) { // Bucle infinito mostrando mensaje y haciendo parpadear un led
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Tiempo");
lcd.setCursor(3, 1);
lcd.print("Finalizado");
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
}
}
}
Figura 6 Circuito con el tiempo 0:0:0 segundo minutos y horas
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
9
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 7 Circuito con el tiempo 0:1:0 horas minutos y segundos
respectivamente
Figura 8 Circuito con el tiempo 1:1:0 horas minutos y segundos
respectivamente
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
10
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 9 Circuito con el tiempo 1:1:0 horas minutos y segundos
respectivamente
Figura 10 Circuito con el tiempo 1:1:0 horas minutos y segundos
respectivamente
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
11
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica

Adjunto un video link:
d. Modifique y explique el programa y para que se active el buzzer cuando se alcance la
hora programada. (cuenta ascendente).
#include <LiquidCrystal.h>
// Inicialización de la pantalla LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Definición de pines y variables
int buzzer = 13;
// Pin para el buzzer
int asegundos = 0;
// Variable para almacenar los segundos ingresados
int segundostotal = 0;
// Variable para el tiempo total
int start = A1;
// Pin del pulsador de inicio
int buts = A3;
// Pin del pulsador de segundos
int varbutsAnt = 0;
// Variable para seguimiento del pulsador
void setup() {
// Configuración inicial
lcd.begin(16, 2);
// Inicialización de la pantalla LCD
pinMode(buzzer, OUTPUT); // Configura el pin del buzzer como salida
pinMode(buts, INPUT);
// Configura el pin del pulsador de segundos como entrada
lcd.setCursor(0, 0);
lcd.print("Temporizador con");
lcd.setCursor(0, 1);
lcd.print("Arduino + LCD");
delay(2500);
lcd.clear();
}
void loop() {
do {
// Leer el pulsador de segundos
int varbuts = digitalRead(buts);
if (!varbuts && varbutsAnt) {
asegundos++;
if (asegundos > 59) asegundos = 0; // Reinicia los segundos si supera 59
delay(50);
}
varbutsAnt = varbuts;
lcd.setCursor(0, 0);
lcd.print("Digite el Tiempo");
lcd.setCursor(4, 1);
char buffer[30];
sprintf(buffer, "00:00:%02d", asegundos); // Formato HH:MM:SS
lcd.print(buffer);
} while (digitalRead(start) == 0); // Espera hasta que se presione el botón de
inicio
segundostotal = asegundos;
while (segundostotal < 60) { // Cuenta hasta 60 segundos (1 minuto)
delay(1000); // Espera 1 segundo
13 de setiembre de 2023
segundostotal++;
NOMBRE: BRAYAN CUETO QUICHCA
asegundos = segundostotal; // Actualiza los segundos
12
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
while (segundostotal < 60) { // Cuenta hasta 60 segundos (1 minuto)
delay(1000); // Espera 1 segundo
segundostotal++;
asegundos = segundostotal; // Actualiza los segundos
lcd.setCursor(0, 0);
lcd.print("Tiempo transcurrido");
lcd.setCursor(4, 1);
char buffer[30];
sprintf(buffer, "00:00:%02d", asegundos); // Muestra el tiempo transcurrido
lcd.print(buffer);
if (segundostotal == 60) { // Cuando se alcanza 1 minuto
digitalWrite(buzzer, HIGH); // Activa el buzzer
}
}
}
Figura 11 Circuito empezando de forma ascendente
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
13
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 12 Circuito con temporizador ascendente segundo 10
Figura 13 Circuito con temporizador ascendente segundo 60 donde finaliza y
suena el buzzer
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
14
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
Figura 14 Circuito finalizado
5. CUESTIONARIO FINAL:
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
15
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
16
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
17
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
18
UNIVERSIDAD CÁTOLICA DE SANTA MARÍA
Ingeniería Mecánica, Mecánica Eléctrica y Mecatrónica
6. CONCLUSIONES:
• La función pinArray nos ayuda a usar los pines de manera más corta ya que crea
una matriz el cual almacena los pines
•
Las instrucciones funcionan con la posición de la matriz mas no con los pines
para que pueda funcionar en Arduino
•
Cuando usamos la matriz en un for usamos un contador para que pueda hacer el
bucle con la posición de la matriz y así utilizar la instrucción deseada
•
La librería de Arduino nos ayuda a crear funciones y llamar funciones si en caso
usamos librearías que no están en Arduino especificadas
•
Las corrientes d e restricción se ven en el datasheet del microcontrolador
ATmega328P.
13 de setiembre de 2023
NOMBRE: BRAYAN CUETO QUICHCA
19
Download