Inicio

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

    No hay comentarios:

    Publicar un comentario