Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lab 14 Proyecto Pastillero Con Arduino-1
Lab 14 Proyecto Pastillero Con Arduino-1
LABORATORIO MICROCONTROLADORES
Página 1 de 12
MICROCONTROLADORES
LABORATORIO N° 14
Participantes(s)
Foto:
Nombres:
%
participación:
Grupo
Ciclo 4C5 Electrónica y Automatización – Microcontroladores
Fecha de entrega
Nro.
LABORATORIO MICROCONTROLADORES
Página 2 de 12
IV.FUNDAMENTO TEÓRICO
Para la realización de este laboratorio se requiere haber realizado y aprobado la EVALUACIÓN
DE LA FASE ASÍNCRONA
La lectura previa de la información proporcionada para el curso, como el texto y el manual del
fabricante.
Revise la bibliografía recomendada en la FASE ASÍNCRONA.
Para empezar a realizar nuestro proyecto, es necesario alistar nuestro hardware tal como se
ha descrito en los videos previos. Al mismo tiempo haremos la simulación utilizando
PROTEUS o TINKERCAD. NO OLVIDES incluir los nombres de los integrantes.
1. Inserta una captura de pantalla donde se muestre la tarjeta Arduino conectado a los
pulsadores y leds, los cuales deben estar distribuidos según la imagen adjunta. NO olvides
colocar los nombres de los integrantes:
2. Inserta una foto del mismo proyecto armado en protoboard. Incluir carnet estudiantil mostrando
nombre del estudiante. (opcional)
1. Captura una imagen del IDE Arduino con la rutina CODIGO ALARMA
/* INTEGRANTES:
Agramonte Revuelta Amiry
Peña Butron Lucciano
Ramos Arapa Ken
*/
int pinBuzzer=15;
Nro.
LABORATORIO MICROCONTROLADORES
Página 4 de 12
int pinLed1=16;
int pinLed2=17;
int pinBoton=2;
boolean banderaAlarma=HIGH;
int rep;
int numRep=10;
int tiempoEnc=600;
int tiempoApag=400;
int tiempoEspera=9900;
void setup() {
pinMode(pinBuzzer,OUTPUT);
pinMode(pinLed1,OUTPUT);
pinMode(pinLed2,OUTPUT);
pinMode(pinBoton,OUTPUT);
attachInterrupt(0,Interruptor,RISING);
}
void loop() {
banderaAlarma=HIGH;
do
{
Alarma();
}
while(banderaAlarma==HIGH);
}
void Alarma() {
for(rep=0;rep<numRep;rep++)
{
digitalWrite(pinBuzzer,HIGH);
digitalWrite(pinBuzzer,HIGH);
digitalWrite(pinBuzzer,HIGH);
delay(tiempoEnc);
digitalWrite(pinBuzzer,LOW);
digitalWrite(pinLed1,LOW);
digitalWrite(pinLed2,LOW);
delay(tiempoApag);
}
delay(tiempoEspera);
}
void Interruptor() {
banderaAlarma=LOW;
}
2. Captura una imagen del IDE Arduino con la rutina ACTIVA MOTOR
/* INTEGRANTES:
Agramonte Revuelta Amiry
Peña Butron Lucciano
Ramos Arapa Ken
*/
int pinIntLamina = 5;
int pinIN1 = 7;
int pinIN2 = 8;
int pinPWM = 9;
Nro.
LABORATORIO MICROCONTROLADORES
Página 5 de 12
boolean estadoIntLamina;
int valorPWM = 230;
long tiempoActual;
long tiempoActivacion[5];
int toma = 0;
void setup()
{
pinMode(pinIN1, OUTPUT);
pinMode(pinIN2, OUTPUT);
pinMode(pinIntLamina, INPUT);
tiempoActivacion[0] = 30000;
tiempoActivacion[1] = 60000;
tiempoActivacion[2] = 120000;
tiempoActivacion[3] = 240000;
tiempoActivacion[4] = 24 * 60 * 60000;
}
void loop()
{
digitalWrite(pinIN1, 0);
digitalWrite(pinIN2, 0);
analogWrite(pinPWM, valorPWM);
do
{
tiempoActual = millis();
} while (tiempoActual < tiempoActivacion[toma]);
activaMotor();
toma++;
}
void activaMotor()
{
do
{
digitalWrite(pinIN1, 1);
estadoIntLamina = digitalRead(pinIntLamina);
} while (estadoIntLamina == HIGH);
delay(200);
do
{
digitalWrite(pinIN1, 1);
estadoIntLamina = digitalRead(pinIntLamina);
} while (estadoIntLamina == LOW);
digitalWrite(pinIN1, 0);
}
3. Captura una imagen del IDE Arduino con la rutina RELOJ LCD
/* INTEGRANTES:
Agramonte Revuelta Amiry
Peña Butron Lucciano
Ramos Arapa Ken
*/
Nro.
LABORATORIO MICROCONTROLADORES
Página 6 de 12
long tiempoMs;
long tiempoBase;
long tiempoActual;
long hora;
long minuto;
long horaActual;
long minActual;
long segActual;
int tiempoRet = 500;
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 6, 11, 12, 13, 14);
void setup()
{
hora = 23;
minuto = 59;
ConversionHminMs();
tiempoBase = tiempoMs;
lcd.begin(16,2);
}
void loop()
{
tiempoActual = millis() + tiempoBase;
ConversionMsHmin();
Despliegue();
delay(tiempoRet);
}
void ConversionHminMs()
{
minuto = minuto + hora*60;
tiempoMs = minuto*60000;
}
void ConversionMsHmin()
{
horaActual = tiempoActual/60/60000;
minActual = tiempoActual/60000 - horaActual*60;
segActual = tiempoActual/1000 - horaActual*60*60 -
minActual*60;
}
void Despliegue()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Hora ");
lcd.print(horaActual);
lcd.print(":");
lcd.print(minActual);
lcd.print(":");
lcd.print(segActual);
}
Nro.
LABORATORIO MICROCONTROLADORES
Página 7 de 12
4. Captura una imagen del IDE Arduino con la rutina DESPLIEGUE HORA TOMA
/* INTEGRANTES:
Agramonte Revuelta Amiry
Peña Butron Lucciano
Ramos Arapa Ken
*/
void DespliegueHoraToma()
{
Despliegue();
tiempoActual = tiempoActivacion[toma];
ConversionMsHmin();
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(toma+1);
lcd.print("a toma ");
lcd.print(horaActual);
lcd.print(":");
lcd.print(minActual);
}
/* INTEGRANTES:
Agramonte Revuelta Amiry
Peña Butron Lucciano
Ramos Arapa Ken
Nro.
LABORATORIO MICROCONTROLADORES
Página 8 de 12
*/
int pinBuzzer = 15;
int pinLed1 = 16;
int pinLed2 = 17;
int pinBoton = 2;
boolean banderaAlarma = HIGH;
int rep;
int numRep = 10;
int tiempoEnc = 600;
int tiempoApag = 400;
int tiempoEspera = 9900;
// Variables ActivaMotor
int pinIntLamina = 5;
int pinIN1 = 7;
int pinIN2 = 8;
int pinPWM = 9;
boolean estadoIntLamina;
int valorPWM = 230;
long tiempoActivacion[5];
int toma = 0;
// Variables Despliegue
long tiempoMs;
long tiempoBase;
long tiempoActual;
long hora;
long minuto;
long horaActual;
long minActual;
int tiempoRet = 19000;
// Se incluye el código de la biblioteca del LCD
#include <LiquidCrystal.h>
// Inicializa la biblioteca con el número de los pines
LiquidCrystal lcd(4, 6, 11, 12, 13, 14);
void setup()
{
// Hora de reinicio
hora = 8;
minuto = 39;
// Cálculo tiempo base
ConversionHminMs();
tiempoBase = tiempoMs;
// Configuración del número de columnas y renglones del LCD
lcd.begin(16,2);
// Configuración terminales buzzer, led y botón alarma
pinMode(pinBuzzer, OUTPUT);
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinBoton, INPUT);
attachInterrupt(0, Interruptor, RISING);
// Configuración terminales del puente H y del interruptor
pinMode(pinIN1, OUTPUT);
pinMode(pinIN2, OUTPUT);
pinMode(pinIntLamina, INPUT);
// Cálculo tiempos de activación del motor
// Hora de la primera toma
hora = 9;
Nro.
LABORATORIO MICROCONTROLADORES
Página 9 de 12
minuto = 00;
ConversionHminMs();
tiempoActivacion[0] = tiempoMs;
// Hora de la segunda toma
hora = 12;
minuto = 30;
ConversionHminMs();
tiempoActivacion[1] = tiempoMs;
// Hora de la tercera toma
hora = 15;
minuto = 00;
ConversionHminMs();
tiempoActivacion[2] = tiempoMs;
// Hora de la cuarta toma
hora = 18;
minuto = 45;
ConversionHminMs();
tiempoActivacion[3] = tiempoMs;
// En caso de que haya más tomas, agregarlas a continuación:
// Hora final
hora = 23;
minuto = 59;
ConversionHminMs();
tiempoActivacion[4] = tiempoMs;
}
// Función loop
void loop()
{
// Envío señales iniciales al puente H: motor detenido
digitalWrite(pinIN1, 0);
digitalWrite(pinIN2, 0);
analogWrite(pinPWM, valorPWM);
Despliegue();
delay(tiempoRet);
/* Mientras el tiempoActual sea menor que el tiempoActivacion[toma]
+ tiempoBase, sólo despliega la hora */
do
{
Despliegue();
delay(tiempoRet);
tiempoActual = millis() + tiempoBase;
} while(tiempoActual < tiempoActivacion[toma]);
/* Cuando el tiempoActual es mayor que el tiempoActivacion[toma]
se sale de la estructura do–while, activa el motor, despliega la
hora de toma y enciende la alarma */
ActivaMotor();
banderaAlarma = HIGH;
do
{
// Despliegue de la hora de toma
DespliegueHoraToma();
Alarma();
} while(banderaAlarma == HIGH);
/* La alarma se apagará cuando se oprima el botón de apagado, el
cual hará que la variable banderaAlarma tome el valor LOW, de
manera que se saldrá de la estructura do–while anterior */
// Borra lcd
Nro.
LABORATORIO MICROCONTROLADORES
Página 10 de 12
lcd.clear();
toma++;
}
/* Función ConversionHminMs
Convierte el tiempo en horas y minutos a milisegundos */
void ConversionHminMs()
{
minuto = minuto + hora*60;
tiempoMs = minuto*60000;
}
/* Función ConversionMsHmin
Convierte el tiempo en milisegundos a horas y minutos */
void ConversionMsHmin()
{
horaActual = tiempoActual/60/60000;
minActual = tiempoActual/60000 - horaActual*60;
}
/* Función Despliegue
Despliega en un LCD la hora, con formato hora:minutos 24 h
* Pin RS del LCD al pin 4
* Pin E del LCD al pin 6
* Pin D4 del LCD al pin 11
* Pin D5 del LCD al pin 12
* Pin D6 del LCD al pin 13
* Pin D7 del LCD al pin 14
* Pin R/W del LCD a tierra */
void Despliegue()
{
// Calcula el tiempoActual con respecto al tiempoBase
tiempoActual = millis() + tiempoBase;
// Conversión del tiempoActual a horas:munutos
ConversionMsHmin();
// Se inicializa el LCD
lcd.begin(16,2);
// Se coloca el cursor en el origen
lcd.setCursor(0,0);
// Limpia el primer renglón
lcd.print(" ");
// Se coloca el cursor en el origen
lcd.setCursor(0,0);
// Escribe el letrero Hora
lcd.print("Hora ");
// Escribe horas:minutos
lcd.print(horaActual);
lcd.print(":");
lcd.print(minActual);
}
/* Función Activa Motor
Controla el motor de CD del pastillero, con base en
la señal de un interruptor de lámina activa alta */
void ActivaMotor()
{
do
{
digitalWrite(pinIN1, 1);
estadoIntLamina = digitalRead(pinIntLamina);
} while(estadoIntLamina == HIGH);
Nro.
LABORATORIO MICROCONTROLADORES
Página 11 de 12
delay(200);
do
{
digitalWrite(pinIN1, 1);
estadoIntLamina = digitalRead(pinIntLamina);
} while(estadoIntLamina == LOW);
digitalWrite(pinIN1, 0);
}
/* Función Alarma
Hace sonar intermitentemente un buzzer, y al mismo tiempo
prende un led intermitentemente, hasta que se oprime el
botón de apagado de la alarma */
void Alarma()
{
for (rep = 0; rep < numRep; rep++)
{
digitalWrite(pinBuzzer, HIGH);
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
delay(tiempoEnc);
digitalWrite(pinBuzzer, LOW);
digitalWrite(pinLed1, LOW);
digitalWrite(pinLed2, LOW);
delay(tiempoApag);
}
delay(tiempoEspera);
}
/* Función Interruptor
Rutina de servicio de interrupción */
void Interruptor()
{
banderaAlarma = LOW;
}
/* Función DespliegueHoraToma
Despliega en el segundo renglón del LCD la hora de la toma de
las pastillas, indicando también a qué toma corresponde */
void DespliegueHoraToma()
{
Despliegue();
// Calcula el tiempo de la toma con respecto al tiempoBase
tiempoActual = tiempoActivacion[toma];
// Conversión del tiempoActual a horas:munutos
ConversionMsHmin();
// Se coloca el cursor en el origen del segundo renglón
lcd.setCursor(0,1);
// Limpia el segundo renglón
lcd.print(" ");
// Se coloca el cursor en el origen
lcd.setCursor(0,1);
// Escribe el número de la toma
lcd.print(toma+1);
// Escribe el letrero "a toma "
lcd.print("a toma ");
// Escribe horas:minutos
lcd.print(horaActual);
lcd.print(":");
lcd.print(minActual);
Nro.
LABORATORIO MICROCONTROLADORES
Página 12 de 12
OBSERVACIONES:
CONCLUSIONES: