Está en la página 1de 12

Nro.

LABORATORIO MICROCONTROLADORES
Página 1 de 12

MICROCONTROLADORES

LABORATORIO N° 14

Proyecto Pastillero con Arduino

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

I.COMPETENCIAS ESPECÍFICAS DE LA SESIÓN


 Desarrollar y analizar soluciones de problemas planteados en clase utilizando Arduino.
II.CONTENIDOS A TRATAR
 Librerías LiquidCrystal.
 SoftwareSerial.
 Servo y Stepper.
III.MATERIALES Y EQUIPO
 IDE Arduino instalado.
 Tarjeta Arduino UNO o similar
 Protoboard y componentes asociados
 PC con Software de simulación.

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.

V.SEGURIDAD EN LA EJECUCIÓN DEL LABORATORIO

Tener cuidado con el tipo y niveles de voltaje con


los que trabaja.

Antes de utilizar el multímetro, asegurarse que


está en el rango y magnitud eléctrica adecuada.

Tener cuidado en la conexión y en la desconexión


de los equipos utilizados
Nro.
LABORATORIO MICROCONTROLADORES
Página 3 de 12

VI. EXPERIENCIA 1 – ARMADO DEL PROYECTO Y/O SIMULACIÓN DE PASTILLERO


INTELIGENTE

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)

VII. EXPERIENCIA 2 – SIMULACIÓN DE LAS DIFERENTES RUTINAS DEL CHALECO

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);
}

VIII. RETO DE PROGRAMACIÓN:

Simule e implemente el proyecto final completo Pastillero Inteligente

1. Como EVIDENCIA 1, capture pantalla de simulación en pleno funcionamiento.

2. Como EVIDENCIA 2, grabe un video de su simulación y/o funcionamiento real utilizando la


aplicación LOOM o YOUTUBE y coloque el LINK en el recuadro siguiente. En la simulación
debe visualizarse los nombres de los integrantes claramente. El video NO debe durar más de
2 minutos.

3. Como EVIDENCIA 3, pegue en el recuadro siguiente el CÓDIGO (puede ser imagen


incluyendo nombres) y el PSEUDOCODIGO a su lado:

/* 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

IX.OBSERVACIONES Y CONCLUSIONES: (Deben estar convenientemente redactadas)

OBSERVACIONES:

CONCLUSIONES:

También podría gustarte