PROYECTO PASTILLERO - PARTE A
Armado del Pastillero
Video
Cuestionario
Qué son las Interrupciones
Video
Cuestionario: Qué es una interrupción??
Alarmas y control de movimiento del pastillero
Video: Alarmas del pastillero
Video: Motor del pastillero
Cuestionario:
Fabricación de un pastillero inteligente
En este módulo aprenderemos a controlar un motor de CD, un buzzer, un interruptor de lámina y una pantalla de cristal líquido (LCD), que junto con bibliotecas e interrupciones de programación nos permitirán desarrollar un prototipo de pastillero inteligente.
1. Objetivo
El propósito principal de este proyecto es enseñar cómo se desarrolla el software para un sistema típico basado en microcontrolador.
Se ha elegido un proyecto que permite aplicar los conocimientos que se van adquiriendo en el transcurso de la asignatura.
Estos conocimientos se aplican desarrollando pequeñas funciones que, al final, formarán un compleja aplicación totalmente operativa y muy similar a la que se desarrollaría en un producto comercial análogo (puede que esto tuviese salida comercial, habría que verlo).
La manera de repartir esas funciones en módulos y de coordinarlos para lograr una aplicación compleja es también parte de este objetivo. El alumno ve así para que sirven todas esas pequeñas funciones que ha ido realizando y cómo facilitan el desarrollo de la aplicación al ir abstrayendo la complejidad del microcontrolador en funciones más fáciles de entender para nosotros.
Desde el punto de vista de metodología didáctica, esto va a ser un aprendizaje mediante proyectos o PBL (Project Based Learning) que busca:
Motivar, pues el resultado es conseguir algo real que funcionará (espero).
Aprender aspectos fundamentales de micros en forma de pequeños bloques (manejar puertos, etc.)
Aprender a usar esos pequeños "bloques" para formar algo más grande (como en la 1a. parte de la asignatura)
Integrar los bloques y otros proporcionados, como haría un profesional, para formar una aplicación totalmente operativa y lógica desde el punto de vista del mantenimiento del software (facilidad de configuración, de introducción de cambios, de depuración, etc.)
7
reto
EL GRAN RETO DEL PASTILLERO -
RETO PROYECTO PASTILLERO:
MODIFICACIONES:
1. RUTINA OCIOSA, los leds deben girar en sentido, luego en otro sentido.
2. RUTINA PARO, el parpadeo debe accionarse con un pulso y no con un estado alto constante. asumiendo que los leds están girando, doy un pulso en entrada 2 y deben parpadear, doy otro pulso y leds vuelven a la rutina ociosa.
3. RUTINA DERECHA E IZQUIERDA, duplicar velocidad de parpadeo de los leds; cada tres "recorridos" pausar durante 2 seg. aprox.
/* Programa ChalecoV5.ino
Realiza el control de encendido de los leds del chaleco
de seguridad para ciclistas */
// Variables
int bot[] = {1,2,3};
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int numBots = 3;
int tiempoRet = 100;
int tiempoRetOciosa = 200;
int estePin;
int cuenta_der = 0;
int cuenta_alto = 0;
int cuenta_izq = 0;
int cuenta_ocio = 0;
int pulsador = 2;
int estado=0;
int estadoant=0;
boolean bot_derecha = LOW;
boolean bot_alto = LOW;
boolean bot_izquierda = LOW;
int DERECHA = 3; // Pin digital para el pulsador
int IZQUIERDA = 1;
int STOP = 2;
int i,st=0,rut;
// Función setup
void setup ()
{
for (estePin = 0; estePin < numBots; estePin++)
{
pinMode (bot[estePin],INPUT);
}
for (estePin = 0; estePin < numLeds; estePin++)
{
pinMode (led[estePin],OUTPUT);
}
}
// Función loop
void loop ()
{
for (estePin = 0; estePin < numLeds; estePin++)
{
digitalWrite (led[estePin], LOW);
}
bot_derecha = digitalRead (bot[0]);
bot_alto = digitalRead (bot[1]);
bot_izquierda = digitalRead (bot[2]);
if (bot_derecha==HIGH)
{
Derecha ();
}
else if (bot_alto==HIGH
)
{
Alto ();
}
else if (bot_izquierda==HIGH
)
{
Izquierda ();
}
else
{
Ociosa ();
}
}
// Función Derecha
void Derecha () {
switch (cuenta_der)
{
case 0:
digitalWrite (led[0],HIGH);
digitalWrite (led[8],HIGH);
digitalWrite (led[6],HIGH);
break
;
case 1
:
digitalWrite (led[1],HIGH);
digitalWrite (led[9],HIGH);
digitalWrite (led[5],HIGH);
break
;
case 2
:
digitalWrite (led[2],HIGH);
digitalWrite (led[3],HIGH);
digitalWrite (led[4],HIGH);
break
;
default
:
;
}
delay (tiempoRet);
cuenta_der++;
if (cuenta_der > 3)
{
cuenta_der = 0;
delay(750);
STOP = cuenta_der <3;
}
}
// Función Alto
void Alto ()
{
bot_alto=digitalRead( bot[2]);
if((bot_alto==HIGH) && (estadoant ==LOW))
{
cuenta_alto=1-cuenta_alto;
}
bot_alto=estadoant;
if (cuenta_alto == 1)
{
for (estePin = 0; estePin < numLeds; estePin++)
{
digitalWrite (led[estePin],HIGH);
}
}
else
{
for (estePin = 0; estePin < numLeds; estePin++)
{
digitalWrite (led[estePin],LOW);
}
}
delay (tiempoRet);
cuenta_alto++;
if (cuenta_alto > 1)
{
cuenta_alto = 0;
}
}
// Función Izquierda
void Izquierda ()
{
switch (cuenta_izq)
{
case 0:
digitalWrite (led[2],HIGH);
digitalWrite (led[9],HIGH);
digitalWrite (led[4],HIGH);
break;
case 1:
digitalWrite (led[1],HIGH);
digitalWrite (led[8],HIGH);
digitalWrite (led[5],HIGH);
break;
case 2:
digitalWrite (led[0],HIGH);
digitalWrite (led[7],HIGH);
digitalWrite (led[6],HIGH);
break;
default:
;
}
delay (tiempoRet);
cuenta_izq++;
if (cuenta_izq > 3)
{
cuenta_izq = 0;
delay(750);
STOP = cuenta_izq < 3;
}
}
// Función Ociosa
void Ociosa ()
{
digitalWrite (led[cuenta_ocio],HIGH);
digitalWrite (led[cuenta_ocio+4],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[cuenta_ocio],LOW);
digitalWrite (led[cuenta_ocio+4],LOW);
digitalWrite (led[1],HIGH);
digitalWrite (led[5],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[1],LOW);
digitalWrite (led[5],LOW);
digitalWrite (led[2],HIGH);
digitalWrite (led[6],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[2],LOW);
digitalWrite (led[6],LOW);
digitalWrite (led[3],HIGH);
digitalWrite (led[7],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[3],LOW);
digitalWrite (led[7],LOW);
digitalWrite (led[2],HIGH);
digitalWrite (led[6],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[2],LOW);
digitalWrite (led[6],LOW);
digitalWrite (led[1],HIGH);
digitalWrite (led[5],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[1],LOW);
digitalWrite (led[5],LOW);
digitalWrite (led[cuenta_ocio],HIGH);
digitalWrite (led[cuenta_ocio+4],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[cuenta_ocio],LOW);
digitalWrite (led[cuenta_ocio+4],LOW);
digitalWrite (led[3],HIGH);
digitalWrite (led[7],HIGH);
delay (tiempoRetOciosa);
digitalWrite (led[3],LOW);
digitalWrite (led[7],LOW);
}
video
se demora en reenderizar profe como 2 horas ...