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:
- Ingrese a la página www.coursera.org y regístrese en el mismo
- Busque el curso “Arduino y algunas aplicaciones” e inscríbase en él.
- Visualice el video “De los microcontroladores a la tarjeta Arduino” y responda el cuestionario respectivo.
- Visualice el video “Descarga e instalación del software de Arduino” y responda el cuestionario respectivo.
- 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:
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ÁMETROS | VALORES |
---|---|
Flash | 32 Kbytes |
SRAM | 2 Kbytes |
Cantidad Pines | 28 |
Frecuencia máxima de operación | 20 MHz |
CPU | 8-bit AVlR |
Pines máximos de E/S | 23 |
Interrupciones internas | 24 |
SPI | 1 |
UART | 1 |
Canales ADC | 8 |
Resolución de ADC | 10 |
Eeprom | 1K |
Canales PWM | 6 |
Voltaje de operación | 1.8-5.5 v |
Timers | 3 |
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:
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).
No hay comentarios:
Publicar un comentario