Inicio

sábado, 19 de mayo de 2018

JUEGO DE TIRO A CANASTA CON INDICADOR DE PUNTOS

FASE 4:
IMPLEMENTACIÓN



1. COMPETENCIAS ESPECÍFICAS:

  • Conocer el proceso de desarrollo de un proyecto con PIC.
  • Aplicar todas las técnicas de programador conocidas hasta este momento.
  • Aplicar estos conocimientos en la realización de un proyecto.
2. MARCO TEÓRICO:

Manejo de las interrupciones en un PIC:

Es decir, una interrupción es una técnica particular del PIC que permite: interceptar eventos externos de un programa en ejecución,  interrumpiendo momentáneamente la operación del programa, controla el evento con una subrutina apropiada, y retorna para continuar con la ejecución del programa en el punto donde se produjo la interrupción. 

La familia del PIC16F87x cuenta con hasta 14 fuentes de interrupcion, de las cuales algunas de ellas se habilitan por medio de diferentes registros de control: 
  • Las fuentes de interrupción se ven con INTCON
  • La del convertidor A/D se encuentra en el registro PIE1, en este mismo registro está el bit del TIMER1 (TMRIE ,PIE1<0>) entre otros.
El registro INTCON cuenta  con tres controles de interrupción  cada uno derivado auna función específica:

  • Interrupciones ocasionadas en la patilla RBO/INT
  • Interrupciones ocasionadas por cambios de estado en las patillas RB7:RB4
  • Interrupciones que tienen lugar por el desbordamiento del temporizador TMR0
  • Interrupciones referidas al resto de los controles de periféricos y funciones especiales se encuentran en los registros PIR1, PIR2.

Tipos de Eventos y Bits de Habilitación:

En el registro INTCOIN solo se encuentran tres controles de interrupciones:
  • Un cambio de estado sobre la línea RB0 ( pin de interrupción externa RB0/INT
  • Desbordamiento de la cuenta del registro TMR0 ( TMR0 overflow interrupt )
  • Un cambio de estado sobre una de las líneas de RB4 a RB7 ( PORTB change interrupts ).

Los cuales se describen a continuación


      1. Interrupción de TMR0
  • Si el temporizador TMR0 se ha desbordado, el flag de overflow (T0IF) del registro INTCON se habrá puesto a uno. Es evidente que previamente se habrán borrado todos los flags que pudieran ocasionar una interrupción, así se evitarán interrupciones recursivas. Para habilitar esta interrupción se debe poner en 1 el bit T0IE.

     2. Interrupción externa por RBO/INT:
  • Las transiciones de bajo a alto, o viceversa, de la patilla RB0/INT puede ocasionar una interrupción, el flanco que la producirá se elige con el bit INTEDG (OPTION_REG<6>). Cuando este bit se pone a uno, la interrupción tendrá lugar en la transición de cero a uno, por el contrario, el flanco de bajada ocasionará la interrupción cuando el bit se coloque a cero. En cuanto tenga lugar en la patilla RB0/INT el flanco elegido, el bit INTF (INTCON<1>) se pondrá a uno; el estado de los bits de interrupciones globales (GIE) e interrupción externa (INTE) determina si se atenderá o no la interrupción. Si están habilitadas y el microcontrolador se encuentra en reposo (Sleep) éste despertará.
     3. Interrupción por cambio de estado en RB4:RB7:

  • Además de la interrupción externa descrita, estos microcontroladores se disponen de otro modo de ocasionar una interrupción externa; cualquier cambio de estado que se produzca  en las patillas RB7:RB4 también la ocasionará, para habilitarla, hay que poner a uno el flag de interrupciones.
  • RBIE (INTCON<3>). Cualquier cambio de estado que haya en estas patillas hará que el bit RBIF (INTCON<0>) se ponga a uno y se produzca la interrupción. Para que el sistema pueda ocasionar una interrupción por cambios de estado en las patillas RB7:RB4 es necesario realizar algunas actuaciones previas que no son necesarias en otro tipo de interrupciones ya que el estado de estas cuatro patillas es comparado continuamente, en la fase Q1 del reloj, con el estado previo de los latch del puerto. Por consiguiente, antes de habilitar esta interrupción habrá que leer o escribir en él para que su contenido se quede almacenado en los latch; solamente los bits configurados como entradas se comparan y si son diferentes a los previamente almacenados pueden ocasionar una interrupción.

El resto de los controles de periféricos y funciones especiales se encuentran en los registros PIR1, PIR2 (Banderas) y PIE1, PIE2 (Mascaras). Una interrupción de cualquiera de estos eventos puede ser conseguida habilitando o deshabilitando independientemente los siguientes bits de los registro INTCON, PIR1 y, PIR2:


  • INTE: Si este bit está en 1 habilitará la interrupción de cambio de estado sobre la línea RBO.
  • TOIE: Si este bit está en 1 habilitará la interrupción de final de conteo del registro TMRO.
  • RBIE: Si este bit está en 1 habilitará la interrupción de cambio de estado sobre una de las líneas de RB4 a RB7.
  • EEIE: Si este bit está en 1 habilitará la interrupción de final de escritura sobre la EEPROM.
  • PSPIE: Si este bit está en 1 habilitará la interrupción por lectura/escritura en el PSP.
  • ADIE: Si este bit está en 1 habilitará la interrupción del convertidor A/D.
  • RCIE: Si este bit está en 1 habilitará la interrupción por recepción en el USAR.
  • TXIE: Si este bit está en 1 habilitará la interrupción de transmisión por el USAR.
  • SSPIE: Si este bit está en 1 habilitará la interrupción del SSP.
  • CCP1IE: Si este bit está en 1 habilitará la interrupción CCP1.
  • TMR2IE: Si este bit está en 1 habilitará la interrupción por el desbordamiento de TMR2 emparejado a PR2.
  • TMR1IE: Si este bit está en 1 habilitará la interrupción por desbordamiento de TMR1.
  • CCP2IE: Si este bit está en 1 habilitará la interrupción de CCP2.
  • BCLIE: Si este bit está en 1 habilitará la interrupción por colisión de bus SSP.

Vector de interrupción y control de interrupción:

Cualquier evento que sea habilitado, o se manifieste, el PIC interrumpe la ejecución del programa, almacena automáticamente en el STACK el valor actual del PROGRAM COUNTER y este pasa a ejecutar la instrucción presente en la dirección de memoria 0004H, denominada Interrupt Vector ( vector de interrupción ). Por lo tanto, desde este punto debemos colocar la llamada a la subrutina de control denominada Interrupt Handler (control de interrupción).


Bandera de Interrupción:

Dado que cualquier interrupción genera una llamada a la dirección 04H, en los registros INTCON, PIR1 y PIR2 está presente varias banderas que indican cuál evento es el que genera la interrupción, las cuales se describen a continuación:






Diagrama lógico de las interrupciones:
La lógica de activación de mascaras y banderas descrita arriba puede entenderse en términos del diagrama lógico mostrado en la siguiente figura. En este diagrama se muestran las 14 fuentes de interrupción de los microcontroladores de la familia PIC16F87x y se usan los nombres específicos de cada fuente de interrupción para sus respectivas banderas y mascaras de interrupción.



La siguiente tabla muestra las diferencias entre los dos modelos de 28 y 40 pines.





Vídeo del desarrollo














LABORATORIO NRO. 5

JUEGO DE TIRO A CANASTA CON INDICADOR DE PUNTOS

FASE 2:
PROGRAMACIÓN DE UNA PANTALLA LCD




1. COMPETENCIA ESPECIFICA DE LA SESION:
  • Conocer el Display LCD y su funcionamiento.
  • Programar eficientemente el LCD.
  • Programar HMI para proyecto actual.
2. MARCO TEORICO:



¿Qué es un LCD?
     
  • El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.
  • En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
¿Cómo es su conexionado?

  • En la siguiente imagen de Proteus se puede observar la estructura de sus pines.
  • Lo podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar ademas en su estructura los pines de Anodo de led backlight y cátodo de led backlight.



Pines de alimentacion:

  • Vss: Gnd
  • Vdd: +5 V
  • Vee: Es el pin que controla el contraste del LCD, lo regulamos conectando un potenciometro de 10K conectado a Vdd.

Pines de control:

  • RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus de datos pertenece a un registro de datos o un carácter.
  • RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
  • E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.


Pines de Bus de datos:

  • El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con el LCD podemos hacerlo utilizando los 8 bits del bus de datos(D0 a D7) o empleando los 4 bits mas significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus de 4 bits.
Librería del LCD:


  • Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería de este. 
  • En este caso empleamos la librería "lcd.c", la cual hemos modificado. Siempre que utilicemos una librería de este tipo tendremos que analizarla para saber cuales son los pines de control y los pines para el Bus de datos, en este caso podemos observar que están definidos al comienzo de la misma.


                #define LCD_ENABLE_PIN PIN_D0
                #define LCD_RS_PIN PIN_D1
                #define LCD_RW_PIN PIN_D2
                #define LCD_DATA4 PIN_D4
                #define LCD_DATA5 PIN_D5
                #define LCD_DATA6 PIN_D6
                #define LCD_DATA7 PIN_D7

  • En el resto de la librería se puede encontrar todas las estructuras necesarias así como las funciones que nos permiten utilizar nuestro LCD.
  • Podemos encontrar funciones como :

                lcd_init: inicializa el lcd.
                lcd_gotoxy: establece la posicion de escritura en el lcd.
                lcd_putc: nos muestra un dato en la siguiente posición del lcd, podemos emplear                   funciones como \f para limpiar el display, \n cambio a la segunda línea,

                 \b mueve una posición atrás.
                lcd_getc(x,y): devuelve caracteres a la posición x,y.
                Otras funciones: lcd_send_nibble(BYTE n), lcd_send_byte(BYTE address,                            BYTE n).



3. EVIDENCIA DE TAREAS EN EL LABORATORIO:

Programa del LCD:







Vídeo de desarrollo:






4. OBSERVACIONES:


  • Para programar Microcontroladores PIC en un tiempo reducido y con un nivel muy bajo de complejidad, podemos utilizar el compilador PCW.
  • Al darle valor cero al último dígito, pudimos subsanar el error 0x0000 del pickit2.

5. CONCLUSIONES:




  • El PCW es un compilador muy completo ya que permite desde el manejo de una LCD hasta un protocolo de comunicación. 
  • En las pruebas realizadas se obtuvieron excelentes resultados al comparar el desempeño del microcontrolador programado en ensamblador y el programado en lenguaje C mediante el PCW
  • Se entendió un LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.

6. FOTO GRUPAL:




lunes, 14 de mayo de 2018

LABORATORIO NRO 11

PROGRAMACIÓN CON ARDUINO
PROYECTO NRO 3



FASE 3: RUTINAS DEL PASTILLERO


I. CAPACIDAD TERMINAL
  •  Utilizar al micro controlador en aplicaciones de control electrónico.
  •  Desarrollar y ejecutar programas en un microcontrolador PIC.
  •  Programar y configurar interfaces básicas del micro controlador.
II. COMPETENCIA ESPECIFICA DE LA SESIÓN

  •  Conocer el entorno ARDUINO
  •  Instalar y configurar IDE ARDUINO
  •  Familiarizarce con la programación.
III. CONTENIDOS A TRATAR
  • Plataforma arduino, entradas y salidas digitales. Estructuras de control. Aplicaciones al control.
IV. RESULTADOS
  • Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.

V. MATERIALES Y EQUIPO
  •  IDE Arduino instalado.
  • Tarjeta ARDUINO UNO
  •  Protoboard y accesorios
  • Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
  • PC con Software de simulación.
VI. FUNDAMENTO TEÓRICO
  •  Revise el siguiente link:
  •  www.coursera.org
  •  Curso a inscribirse: Arduino y algunas aplicaciones
VII. TAREAS GUIADAS DENTRO DEL LABORATORIO:
  1.  Ingrese a la página www.coursera.org y regístrese en el mismo
  2.  Busque el curso “Arduino y algunas aplicaciones” e inscríbase en él.
  3.  Visualice el video “De los microcontroladores a la tarjeta Arduino” y responda el cuestionario respectivo.
  4.  Visualice el video “Descarga e instalación del software de Arduino” y responda el cuestionario respectivo.
  5.  SEMANA 2: Visualice el video “Explorando el ambiente de programación con la ejecución de link” y responda el cuestionario respectivo.

VIII. EVIDENCIA DEL LABORATORIO:


1. Investigue sobre los siguientes temas: Diagrama de la tarjeta Arduino UNO, Hoja técnica del uC utilizado en el mismo. Funcionamiento del Bootloader

QUE ES UN ARDUINO
  • Arduino es una plataforma de prototipos electrónica de código abierto (open – source) basada en hardware y software flexibles y  fáciles de usar.
  • Arduino trabaja como controlador de un entorno mediante la recepción de entradas desde una variedad de sensores y puede afectar a su alrededor mediante el control de luces motores y otros artefactos.
  • El microcontrolador ATmega 2560 de la placa se programa usando el “Arduino programming language”(Basado en wiring) y el “Arduino Develoment Environmet”(basado en Processing). 
  • Los proyectos de Arduino pueden ser autónomos o se pueden comunicar con software en ejecución un ordenador (por ejemplo el FLASH,PROCESSING,MaxMSP,etc).
Las características generales de todas las placas Arduino son las siguientes: 
  • El microprocesador ATmega328 
  • 32 kbytes de memoria Flash 
  • 1 kbyte de memoria RAM 
  • 16 MHz
  • 13 pins para entradas/salidas digitales (programables) 
  • 5 pins para entradas analógicas 
  • 6 pins para salidas analógicas (salidas PWM) 
  • Completamente autónomo: Una vez programado no necesita estar
  • conectado al PC 
  • Microcontrolador ATmega328 
  • Voltaje de operación 5V 
  • Voltaje de entrada (recomendado) 7-12 V 
  • Voltaje de entrada (limite) 6-20 V 
  • Digital I/O Pins 14 (con 6 salidas PWM) 
  • Entradas analógicas Pins 6 
  • DC corriente I/O Pin 40 mA 
  • DC corriente 3.3V Pin 50 mA 
  • Memoria Flash 32 KB (2 KB para el bootloader) 
  • SRAM 1 KB 
  • EEPROM 512 byte 
  • Velocidad de reloj 16 MHz



FUNCIONAMIENTO DEL BOOTLOADER

Cuando cargamos un programa en Arduino desde el USB con el IDE, estamos haciendo uso del bootloader, se trata de un pequeño programa que ha sido guardado previamente en el microcontrolador de la placa y que nos permite cargar código sin necesidad de hardware adicional. El bootloader solo está activo unos segundos cuando se resetea el Arduino y después comienza el sketch que está cargado en la flash de Arduino y que hemos programado y subido a la placa.El bootloader se ejecuta cuando el microcontrolador se enciende o se pulsa el botón reset, durante un corto espacio de tiempo espera que le llegue por el puerto serie un nuevo sketch desde el IDE de Arduino (este distingue un sketch de otra cosa porque tiene un formato definido). Si llega un sketch, este es guardado en la memoria flash y ejecutado, en caso contrario ejecuta el sketch anteriormente cargado.La mayoría de los Arduinos tienen la función autoreset que permite al IDE de Arduino subir el código sin tener que pulsar el botón de reset.El bootloader hace que parpadee el pin 13 (led integrado en la placa) cuando se ejecuta.La mayoría de los microcontroladores de AVR pueden reservar una zona de la memoria flash (entre 256B a 4 KB) para el bootloader. El programa bootloader reprograma el microcontrolador para guardar en la memoria flash el código binario a través de cualquier interface disponible.El bootloader de Arduino está programado en la memoria flash del ATMega328p y ocupa 0,5 KB de los 32KB disponibles. Este bootloader viene precargado en la memoria flash del microcontrolador y es lo que diferencia el ATMega328p de Arduino de otro que viene de fábrica.El Arduino UNO viene con el microcontrolador ATMega328p precargado con un bootloader que permite cargar nuevo código sin un programador. El bootloader se comunica usando el protocolo STK500.El protocolo STK500 http://www.atmel.com/Images/doc2525.pdf es propio de Atmel. Es un protocolo serie y los programadores emulan este protocolo sobre un puerto serie virtual en un USB. Originalmente STK500 fue un programador fabricado por Atmel y a raíz de ello liberaron el protocolo STK500.
FUNCIONAMIENTO DEL uC
PARÁMETROSVALORES
Flash32 Kbytes
SRAM2 Kbytes
Cantidad Pines28
Frecuencia máxima de operación20 MHz
CPU8-bit AVlR
Pines máximos de E/S23
Interrupciones internas24
SPI1
UART1
Canales ADC8
Resolución de ADC10
Eeprom1K
Canales PWM6
Voltaje de operación1.8-5.5 v
Timers3

El Atmega328 AVR 8-bit es un Circuito integrado de alto rendimiento que está basado un microcontrolador RISC, combinando 32 KB ISP flash una memoria con la capacidad de leer-mientras-escribe, 1 KB de memoria EEPROM, 2 KB de SRAM, 23 líneas de E/S de propósito general, 32 registros de proceso general, tres temporizadores flexibles/contadorescon modo de comparación, interrupciones internas y externas, programador de modo USART, una interfaz serial orientada a byte de 2 cables, SPI puerto serial, 6-canales 10-bit Conversor A/D (canales en TQFP y QFN/MLF packages), "watchdog timer" programable con oscilador interno, y cinco modos de ahorro de energía seleccionables por software. El dispositivo opera entre 1.8 y 5.5 voltios. Por medio de la ejecución de poderosas instrucciones en un solo ciclo de reloj, el dispositivo alcanza una respuesta de 1 MIPS, balanceando consumo de energía y velocidad de proceso 

3. EL IDE DEL PROGRAMA:

/* Programa PastilleroV10.ino
 Controla la operación del pastillero.
 Contiene, además de las funciones setup() y loop(),
 las funciones ConversionHminMs(), ConversionMsHmin(),
 ActivaMotor(), Alarma(), Despliegue(),
 DespliegueHoraToma() e Interruptor(). */
// Variables Alarma
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);
// Función setup
void setup()
{
// Hora de reinicio
 hora = 8;
 minuto = 40;
// 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 = 8;
 minuto = 40;
 ConversionHminMs();
 tiempoActivacion[0] = tiempoMs;
// Hora de la segunda toma
 hora = 8;
 minuto = 42;
 ConversionHminMs();
 tiempoActivacion[1] = tiempoMs;
// Hora de la tercera toma
 hora = 8;
 minuto = 43;
 ConversionHminMs();
 tiempoActivacion[2] = tiempoMs;
// Hora de la cuarta toma
 hora = 8;
 minuto = 44;
 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
 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);
 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);



EVIDENCIA DEL PROGRAMA CARGADO:



4. EVIDENCIA VIDEO DEL PROGRAMA EL EL DRIVER Y PROTOVOAR



LINK DEL VIDEO:





5.FOTO GRUPAL



6. OBSERVACIONES 

  • Existen plataformas de hardware libre, como lo es el Arduino, una placa con un controlador y un entorno de desarrollo, su sencillez y bajo costo nos permiten hacer múltiples diseños y múltiples tipos de uso de éste.
  • El uso del Arduino permite realizar muchas tareas, ahorrando elementos electrónicos y en sustitución, el uso de un lenguaje de programación, lo que hace que sea de muy fácil uso.
  • El experimento usará elementos electrónicos, y se decidió hacer algo que involucrara los elementos electrónicos que vimos en horario de clases, además que fuera algo novedoso y singular.
  •  Este tipo de proyectos nos ayudan a aumentar nuestras capacidades, y más desde primer semestre

7. CONCLUSIONES

  •  Se conoció un poco más sobre las partes utilidades ventajas del Arduino
  • EL proyecto se mostró el tipo de plataforma de desarrollo que se puede emplear, utilizando Arduino y sus distintas aplicaciones de uso.
  •  Tener conocimientos básicos de electrónica y electricidad para las conexiones ya que es importante tener conocimientos de programación en lenguaje java y lenguaje C, para el desarrollo de la lógica de encendido y apagado de leds que interpretara la placa Arduino.


    IX. RESÚMEN
    •  IDE Arduino
    X. PROXIMO LABORATORIO:
    •  Programación de Chaleco para ciclista
    XI. BIBLIOGRAFIA Y WEBGRAFIA RECOMENDADA
    •  Marin, Francisco (2007) Diseño basado en microcontroladores. Málaga: Universidad de Málaga. (004.16/M26D).
    •  Pereira, Fabio (2007) Microcontroladores PIC. Sao Paulo:s.n. (005.13/P43).
    •  José María Angulo Usátegui [y otros]. (2007) Electrónica digital y microprogramable .Madrid: Thomson. (621.381/A37/I).