Taller de Interrupciones

Documentos relacionados
Taller de Interrupciones

CYBERTECH 2018 TALLER 03: MOTORES Y POTENCIA

LED INTERMITENTE CIRCUITO ELÉCTRICO MATERIALES PROGRAMA LED DOS CONECTORES CABLE USB ROBÓTICA. Puerto 8 ( salida al led rojo ) ARDUINO UNO 220 W GND

Introducción a Arduino

Clase 2: Programación

IM : ARDUINO NANO OEM

4.2 Práctica 1: encendiendo y apagando varios leds

Programa del curso de Arduino

2. Programación en Arduino

Dynabot II es un kit diseñado para el aprendizaje de robótica móvil basado en arduino. Para qué sirve?

TPR 3ºESO. Departamento de Tecnología. IES Nuestra Señora de la Almudena Mª Jesús Saiz TEMA 5: ROBÓTICA

PRESENTA INTRODUCCIÓN A ARDUINO

Introducción a Arduino

TPR 3ºESO. Departamento de Tecnología. IES Nuestra Señora de la Almudena Mª Jesús Saiz TEMA 6: ROBÓTICA

TALLER ARDUINO BÁSICO

Bach. Pablo Sanabria Campos. Programa de Tecnologías Educativas Avanzadas

EL SENSOR DE SONIDO KY-038 (VERSION )

Tecnología robótica. Tema 7.- Tarjeta controladora Arduino

Empieza con // y termina con la siguiente línea de código. Son ignorados por el programa y no ocupan espacio en memoria.

Conceptos básicos de Arduino:

ARDUINO El proyecto Arduino: Recordando - Pines de entrada - Pines de salida - Microcontrolador - Conexión USB - IDE de arduino

PRACTICAS CON ARDUINO

EL MICROCONTROLADOR ARDUINO

Control programado con ARDUINO TECNOLOGÍA

CONTROL AUTOMÁTICO CON ARDUINO

Comunicación Serial con Arduino (Por Antony García González - Enero 27, 2013 )

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO. ÍÑIGO MARTÍN MIMBELA.

Taller Introducción a la Ingeniería Eléctrica Microcontrolador Arduino y Comunicaciones

Aprende a construir y programar un robot interactivo utilizando los componentes del Maker Control Kit y el Maker Kit 3.

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO

Clase 4: Motores. Conviértete en un Joven Inventor PENTA UC

Control programado con ARDUINO TECNOLOGÍA IES BELLAVISTA

Sesión 12: Practica 3: Creación de prototipo básico de Arduino.

APRENDE ARDUINO FACILMENTE CON MIRPAS.COM.

Programar posiciones en un Micro Servo Tower Pro SG90 9G

AR 1 T. Tutorial 1. Introducción a Arduino Controlando un LED.

1. Conocimientos previos.

Arduino Punk Console. Idea

Introducción a Arduino

Taller de Introducción a la Ingeniería Eléctrica Instituto de Ingeniería Eléctrica - Facultad de Ingeniería Universidad de la Republica

Práctica 3. Entradas/Salidas Digitales con Arduino

El Microcontrolador Arduino

Puente H: cambio de giro y velocidad de motores DC.

Anexo III. Programas

OKY2002: Arduino Uno Genérico

Características del sistema

CONSTRUCCION DE TIMER PARA VUELO CIRCULAR CON MOTOR ELECTRICO

LABORATORIO DE ELECTRÓNICA DE POTENCIA PRÁCTICA N 3

CURSO: MICROCONTROLADORES UNIDAD 4: COMUNICACIÓN SERIE- ARDUINO PROFESOR: JORGE ANTONIO POLANÍA

CONCEPTOS BÁSICOS DE MICRO CONTROLADORES: CONOCIENDO A ARDUINO

CONTROL DE MOTOR PASO A PASO

Control programado con ARDUINO TECNOLOGÍA

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0

Actuadores eléctricos - Motores

Tutorial para principiantes: Cómo aprender a programar un Dreamster v1.0?

ENTRADAS Y SALIDAS DIGITALES USO DE VARIABLES Y TEMPORIZADORES

1. Escribir un dato digital del WinCC al Arduino

Shield Dynamotion V3.0

Instalación y entorno de programación

Dpto. Tecnología Colegio Colón

Programación con Arduino. Jornadas de Robótica 2016 Curso de Impresión 3D y Hardware libre

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO

USANDO PULSADORES CUADERNILLO RESUMEN. COMPONENTES ELECTRÓNICOS EN ARDUINO

Dirección Académica MANUAL DE PRÁCTICAS PRÁCTICA NO 7. CONVERTIDORES A/D Y D/A.

Introducción Arduino TPR 3º ESO

Tutorial Arduino con Fotoresistencia LDR

CONTROL DE UN SERVOMOTOR

TEMA 6: ROBÓTICA -PROGRAMACIÓN

Iniciación al IDE de Arduino y primer ejercicio

OBJETIVOS QUÉ VAMOS A REALIZAR? CONOCIMIENTOS PREVIOS

MANUAL DE USUARIO Como utilizar un servo motor con Arduino REV. 1.0

Control por Computador. Manual de arduino. Jorge Pomares Baeza. Grupo de Innovación Educativa en Automática 2009 GITE IEA

Introducción a Arduino. Electrónica para todos.

LABORATORIO DE ELECTRÓNICA DE POTENCIA PRÁCTICA N 1

DISEÑO DE APLICACIONES ELECTRÓNICAS EN ARDUINO. Luis David Goyes Garcés Día 2

Práctica 4. Entradas/Salidas Analógicas con Arduino

4 Dispositivos de E/S

2.- Cargar el código correspondiente a cada Arduino para su funcionamiento como Master o Esclavo.

TEMA 7: ROBÓTICA -PROGRAMACIÓN

Curso Robótica Práctica

PROPUESTA ARDUINO por José Manuel Aranga Salazar

DISEÑO DE APLICACIONES ELECTRÓNICAS EN ARDUINO. Curso teórico-práctico, básico, de diseño de aplicaciones electrónicas en Arduino.

Guía de iniciación del. Controlador Crumble. El puente entre Scratch y Arduino

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

Las interrupciones externas (INT0 e INT1) de arduino pueden ejecutarse porque la señal de entrada de un pin está:

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

Especificaciones técnicas. Power, Inputs and Outputs. Operating Voltage Input Voltage (recommended) Input Voltage (limits) Analog Input Pins

INTRODUCCIÓN A LA PROGRAMACIÓN ENGINEERING KICKSTART

Clase 3: Sensores I. Conviértete en un Joven Inventor PENTA UC

EJERCICIOS CON ARDUINO LED ENCENDIDO. Se conecta el Led al pin 52 y a alimentación. Compilar Se enciende el LED.

Taller Introducción a la Ingeniería Eléctrica Robot y comunicaciones basados en Microcontrolador Arduino

4 Actuadores eléctricos. Alfaomega. Material Web. Arduino control de servomotores a pasos 2

La plataforma Arduino


Programación de Arduino

TEMA 6: PROGRAMACIÓN ROBÓTICA.ARDUINO

JOHNNY 5. Competencia de robótica ~2015~ Categoría: Laberinto. Nombre robot: Zim. Institución: Club de Robótica FIUBA

Transcripción:

Taller de Interrupciones Organizacio n del Computador 1 Segundo Cuatrimestre 2016 1. Introduccio n Para este taller se propone utilizar un ArduinoMega como controlador de un robot mo vil que cuenta con distintos sensores. La funcionalidad deseada para el robot es que sea capaz de seguir una lı nea blanca sobre un fondo negro, utilizando dichos sensores. El taller sera resuelto (y evaluado) en un simulador online de circuitos, en el cual se programara un ArduinoUno (similar al ArduinoMega en te rminos de la funcionalidad a utilizar). Opcionalmente, la solucio n obtenida podra ser observada ejecutando en el robot real. El simulador se accede desde la siguiente direccio n: www.123d.circuits.io. Motores Driver Arduino Mega Shield de Conexión Sensores de Línea Sensores de Choque Figura 1: El robot El robot El robot que se va a utilizar posee un Arduino, diversos sensores y dos motores controlados por un driver (ver Fig. 1): El Arduino: es una placa de desarrollo que tiene como unidad de procesamiento un microcontrolador ATmega328. Esta placa cuenta con terminales (o pines) a las que podemos conectar sensores, motores, LEDs, etc. El Arduino cuenta tambie n con un LED incorporado en la placa que esta asociado al pin 13, este LED puede ser utilizado, por ejemplo, para debuguear el co digo. Los motores: sirven para mover el robot en lı nea recta (los dos motores con igual velocidad) o doblando en algu n sentido (diferentes velocidades en cada motor). 1

El driver: maneja la corriente que necesitan los motores. En nuestra simulacio n los motores seleccionados cuentan con drivers internos, por lo que no es necesario incluirlos en el circuito. De los sensores con los que cuenta, utilizaremos los siguientes: Sensores de lı nea: sensores de salida binaria, permiten medir si el piso es negro o blanco. Funcionan a partir de emitir una luz infraroja y observar el retorno sobre la superficie medida y decidir si es negro o blanco. Nota: cuando detectan un cambio de color estos sensores generan una interrupcio n. Sensores de choque: sensores que pueden detectar cua ndo el robot colisiona contra un obsta culo. Son esencialmente pulsadores. Nota: este sensor se debera leer por polling. 1.1. El simulador Para simular el robot se utilizara n componentes similares a los del mismo en un el simulador web www.123d.circuits.io. Pero antes es necesario hacer una introduccio n a los componentes que se utilizara n. El protoboard es una plataforma de pruebas que permite interconectar componentes electro nicos sin la necesidad de utilizar soldadura. Las conexiones se hacen por medio de la minas meta licas internas que ejercen presio n sobre los terminales de los componentes. Algunos agujeros se encuentran conectados horizontalmente y otros verticalmente (ver Fig. 2). Los cables son los elementos por los cuales circula la corriente ele ctrica. Utilizaremos la siguiente convencio n de colores: rojo para los cables de 5V negro para los cables de 0V (masa) amarillo para las conexiones de entradas al Arduino naranja para las conexiones con los motores verde para conexiones internas del protoboard Las resistencias sirven para limitar la corriente que circula por un circuito y ası evitar que se queme un componente. Los botones o switches no son ma s que simples interruptores. Existen dos tipos, dependiendo de si mantienen el valor una vez que se sueltan (funcionamiento similar al de una llave de luz) o no (funcionamiento similar al de un timbre). Figura 2: Protoboard 1.2. Antes de empezar Para poder utilizar el simulador se debe ingresar a la pa gina web www.123d.circuits.io y crear una cuenta. Para la resolucio n de este taller no sera necesario hacer un nuevo circuito sino utilizaremos uno existente (el link se encuentra en el enunciado a continuacio n) que viene con un co digo de prueba. Este circuito debe ser duplicado con el boto n de Duplicate Project para obtener una copia propia que puede ser modificada. Para acceder (y modificar) el co digo del Arduino, se debe hacer click en el boto n Code Editor. En esta misma ventana es que se puede acceder al Serial Monitor donde se puede observar la salida de debug. Para comenzar la simulacio n es necesario tocar el boto n Start Simulation. El co digo solo puede ser editado si la simulacio n esta detenida. 2

1.3. Funciones importantes El lenguaje Arduino está basado en C/C++. Referencia en www.arduino.cc/en/reference/homepage. Las funciones relevantes para este taller son: unsigned long millis() devuelve el número de milisegundos desde que el arduino comenzó a correr el programa. void attachinterrupt(digitalpintointerrupt(pin), ISR, mode) : permite setear una interrupción, pin es la entrada del arduino a la cual está conectada la interrupción. ISR es el nombre de la función que va a atender la interrupción, mode es el tipo de interrupción, en este taller siempre se utilizará CHANGE. void analogwrite(pin, value) es el mecanismo que cuenta el Arduino para tener una salida analógica, capaz de ser leída por el driver de los motores para su control por velocidad. Con dicha función, en pin se emite una señal de una intensidad value en formato PWM (Pulse Width Modulation, en español: Modulación por ancho de pulsos). La señal analógica que se emite puede variar entre el valor mínimo 0 (que corresponde a 0V) y el máximo 255 (que corresponde a 5V). En el caso del presente taller, el 0 corresponde al motor detenido y el 255 a su funcionamiento a máxima velocidad. void pinmode(pin, mode) configura pin como entrada o salida. Los parámetros de mode son: INPUT, OUTPUT o INPUT PULLUP. Importante: para leer un sensor conectado a pin se tiene que usar INPUT PULLUP. int digitalread(pin) lee el valor de una entrada digital pin, devolviendo un 1 ó un 0 (también se cuenta con las constantes HIGH y LOW respectivamente). Serial.begin(speed) configura e inicializa la comunicación serial a la velocidad dada por speed. En el taller utilizaremos un valor de 9600 Serial.println( Esto es una salida de debug ) imprime texto en el puerto serial. Se puede utilizar tambien Serial.print que no genera un salto de línea. Esto es útil para imprimir valores de variables como: Serial.print( Sensor: ); Serial.println(valor); 2. Consigna Ej. 1) a) Duplicar el circuito de referencia (fig. 3) desde la siguiente direccion: https://circuits.io/circuits/ 2856000/. El circuito tiene cargado un codigo de ejemplo que se puede observar en el Apéndice de este enunciado. Si se presiona un pulsador o se activa un interruptor, se activará el LED correspondiente. Arduino UNO led Editar y Cargar Código Elegir Componentes Comenzar Simulación motor left pulsador resistencia motor right botón 1 botón 2 Observaciones: Figura 3: Circuito completo el pulsador solo mantiene el valor mientras lo tenemos presionado, cuando está presionado coloca un 0 en el pin 12 y cuando no está pulsado coloca 1. los botones 1 y 2 mantienen su valor una vez que los soltamos el simulador no corre en tiempo real, el tiempo de simulación transcurrido se puede observar en la parte superior izquierda del simulador. 3

Nota: Los sensores de línea serán simulados mediante una llave cada uno, mientras que de los sensores de choque, trabajaremos con solo uno de ellos, el cual será simulado mediante un pulsador. Ej. 2) Se deberán programar 2 comportamientos distintos de un robot siguiendo una línea. Para ello, utilizar el circuito anterior. Tener en cuenta que el código de ejemplo anterior solo es ilustrativo y no corresponde a ninguno de los comportamientos pedidos. Los pines del Arduino deberán ser configurados como entrada o salida y teniendo en cuenta las conexiones del circuito: pin Conexión 2 Sensor de línea izquierdo 3 Sensor de línea derecho 5 Potencia motor derecho 6 Masa motor derecho 9 Masa motor izquierdo 10 Potencia motor izquierdo 12 Sensor de choque Los pines que van a masa de un motor deben setearse inicialmente en cero y no modificarse. Importante: El control de los motores se debe realizar desde la rutina principal y no desde una rutina de atención de una interrupción. Comportamiento 1 Utilizando el sensor de línea izquierdo y el sensor de choque, programar el Arduino para lograr el siguiente comportamiento: El robot deberá alternar entra las dos configuraciones de los motores: Girando izquierda y Girando derecha para poder seguir la línea. Se inicia en Girando derecha y se mantiena hasta que el sensor detecte un cambio (y produzca una interrupción). En ese momento debe cambiar a Girando izquierda hasta la próxima interrupción. Y así sucesivamente. El pulsador debe comportarse como interruptor ON/OFF, es decir, cuando el pulsador esté apretado el robot debe detenerse (configurado como Detenido) y cuando se suelta el robot debe seguir en el estado que estaba (siguiendo la línea). A continuación se muestra la máquina de estados que reflejan el comportamiento esperado (ver Fig. 4): Figura 4: Comportamiento 1 Comportamiento 2 Utilizando los dos sensores de línea y el sensor de choque programar el Arduino para lograr el siguiente comportamiento: El robot arrancará configurado en Avanzando. Cuando detecte que se desvía de la línea deberá corregir su rumbo. Para ello, si el sensor izquierdo empieza a sensar negro (lo cual produce una interrupción), se debe modificar a girando izquierda hasta que el mismo sensor vuelve a sensar blanco (produciendo nuevamente una interrupción). Lo mismo sucede si el sensor que provoca una interrupción es el sensor derecho. 4

el pulsador debe comportarse como una pausa de 3 segundos, es decir, que cuando el pulsador es activado el robot configurarse como Detenido por 3 segundos y luego continuar con su comportamiento anterior. No se puede utilizar la función delay(), pero para saber el paso del tiempo se puede utilizar la función millis(). A continuación se muestra las dos máquinas de estados (ver Fig. 5) que reflejan el comportamiento esperado. Figura 5: Comportamiento 2 Comportamiento 3 (Optativo) Modificar el comportamiento 2 para lograr que en las rectas el robot aumente su velocidad. Para lograr esto establezca límites de velocidad máximos y mínimos, tomando como mínimo el valor actual en el estado Avanzando (potencia 75 en cada motor). Determine una constante mediante la cual el robot aumente su velocidad mientras se mantenga en el estado Avanzando. Cuando el robot cambie de estado, o se encuentre en otro estado que no sea Avanzando, debera repetir el comportamiento 2. Opcional: para evaluar cada comportamiento en el robot, deberán crear un archivo en blanco, cuyo nombre deben ser los apellidos de los alumnos, seguido por el número de comportamiento y con extensión (.ino), por ejemplo (PerezGomez1.ino). En estos archivos debera copiar el código del simulador. Pasar dichos archivos a un pendrive y entregarlo a algún docente. Debido a que el robot utiliza un ArduinoMega y la simulación un ArduinoUno, se deberán realizar los siguientes cambios en la asignación de pines para su ejecución en el robot: pin Conexión 4 Potencia motor derecho 5 Masa motor derecho 7 Masa motor izquierdo 6 Potencia motor izquierdo 14 Sensor de choque 5

3. Anexo 3.1. Código de ejemplo 1 2 /* Constantes que no cambian y son usadas para setear el numero de los pines */ 3 # define motorpina 5 // el numero del pin de uno de los cables de motor 4 # define motorpinb 6 // el numero del pin del otro cable del motor 5 # define sensorint 3 // el numero del pin del sensor que interrumpe 6 # define sensorpoll 2 // el numero del pin del sensor sobre el cual se hace polling 7 8 9 /* variables que cambian su valor : */ 10 bool andando = true ; 11 bool nitro = false ; 12 13 /* setup inicial */ 14 void setup () { 15 pinmode ( sensorpoll, INPUT_PULLUP );// inicializo el pin como una entrada ( recordar usar INPUT_PULLUP ) 16 pinmode ( motorpina, OUTPUT ); // inicializo el pin A del motor como una salida 17 analogwrite ( motorpina,0) ; // pongo en 0 el pin A del motor 18 pinmode ( motorpinb, OUTPUT ); // inicializo el pin B del motor como una salida 19 Serial. begin (9600) ; // configuro e inicializo la comunicacion serial a 9600 baudios 20 // configuro la interrupcion del pin sensorint para que llame a la funcion meinterrumpieron 21 // cuando se produce un cambio 22 attachinterrupt ( digitalpintointerrupt ( sensorint ), meinterrumpieron, CHANGE ); 23 } 24 25 /* loop del programa */ 26 void loop (){ 27 if( andando ){ // Pregunto si estoy en estado andando 28 if ( digitalread ( sensorpoll )){ // Pregunto si el sensorpoll esta apretado 29 nitro = true ; // Si estoy en estos estados seteo el estado nitro 30 } 31 else { // Si el sensorpoll no esta apretado 32 nitro = false ; // pongo nitro como false 33 } 34 } 35 actualizarestado (); // llamo a la funcion que manda potencia a los motores dependiendo del estado definido 36 } 37 38 /* funcion que actualiza la velocidad de los motores dependiendo del estado */ 39 void actualizarestado (){ 40 if( andando ){ // Si el estado es andando 41 if( nitro ){ // y nitro es verdadero 42 analogwrite ( motorpinb,250) ; // Seteo la velocidad de el motor a 250 43 Serial. println (" estado : andando nitro "); // mando por serial el estado 44 } 45 else { 46 analogwrite ( motorpinb,30) ; // Si nitro == 0 entonces pongo velocidad de 30 a los motores 47 Serial. println (" estado : andando sin nitro "); // mando por serial el estado 48 } 49 } 50 else { // Si andando no es verdadero 51 analogwrite ( motorpinb,0) ; // freno el motor poniendo velocidad 0 52 Serial. println (" estado : detenido "); // mando por serial el estado 53 } 54 } 55 56 /* funcion que se llama cuando se produce una interrupcion */ 57 void meinterrumpieron (){ 58 if( andando ){ // si estoy andando 59 andando = false ; // entonces freno 60 } 61 else { // Si estoy frenado 62 andando = true ; // comienzo a andar 63 } 64 } 6