viernes, 4 de septiembre de 2020

lab 15

 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 ...