guide.robotics 1.esp.20120105

146
1 multiplo www.robotgroup.com.ar Curso de Robótica Curso de Robótica Curso de Robótica Curso de Robótica Guía de teoría Guía de teoría Guía de teoría Guía de teoría y y y y actividades actividades actividades actividades Octavio J. Octavio J. Octavio J. Octavio J. da Silva Gillig da Silva Gillig da Silva Gillig da Silva Gillig Mónica J. Mónica J. Mónica J. Mónica J. Paves Paves Paves Paves Palacios Palacios Palacios Palacios Julián U. Julián U. Julián U. Julián U. da Silva Gillig da Silva Gillig da Silva Gillig da Silva Gillig Guide.Robotics-1.ESP.20120105 multiplo ®

Upload: childrenofbodom14

Post on 27-Jul-2015

352 views

Category:

Engineering


23 download

TRANSCRIPT

1. G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5CCCCuuuurrrrssssoooo ddddeeee RRRRoooobbbbttttiiiiccccaaaaGGGGuuuuaaaa ddddeeee tttteeeeoooorrrraaaa yyyyaaaaccccttttiiiivvvviiiiddddaaaaddddeeeessssw w w . r o b o t g r o u p . c o m . a r multiplo1OOOOccccttttaaaavvvviiiioooo JJJJ....ddddaaaa SSSSiiiillllvvvvaaaa GGGGiiiilllllllliiiiggggMMMMnnnniiiiccccaaaa JJJJ....PPPPaaaavvvveeeessssPPPPaaaallllaaaacccciiiioooossssJJJJuuuulllliiiinnnn UUUU....ddddaaaa SSSSiiiillllvvvvaaaa GGGGiiiilllllllliiiiggggmultiplo 2. C o p y r i g h t y l i c e n c i a sCopyright (c) 2009 Multiplo. Todos los derechos reservados.Multiplo http://multiplo.orgIMPRESO EN ARGENTINA POR ROBOTGROUPhttp://robotgroup.com.arhttp://roboticaeducativa.netMa r c a s / T r a d ema r k sAtmel and AVR are registered trademarks or trademarks of Atmel Corporation or its subsidiaries, in the US and/orother countries."RobotGroup es una marca registrada de Mnica J. Paves Palacios.robtica para la accin es una marca registrada de Mnica J. Paves Palacios.Multiplo es una marca registrada de Mnica J. Paves Palacios y Julin U. da Silva Gillig.Otros productos, nombres de firmas o empresas, marcas o "brand names" son marcas registradas o "trademarks" desus respectivos propietarios. Cualquier omisin es no intencional.Descargo de responsabilidad / DisclaimerMultiplo y los autores hacen el mayor esfuerzo posible por garantizar la exactitud de la informacin presentada en estedocumento. Sin embargo, ni Multiplo ni los autores se responsabilizan por los errores o las inexactitudes que puedan apareceren el mismo. La informacin contenida en este documento est sujeta a cambios sin previo aviso. Todos los productos,marcas y nombres de firmas o empresas mencionados en este documento son propiedad exclusiva de sus respectivospropietarios. Cualquier omisin o error es absolutamente no intencional.ESTE TRABAJO, EL SOFTWARE O LOS ELEMENTOS QUE EVENTUALMENTE LO ACOMPAEN (SEAN ESTOS DE CUALQUIERCLASE) SON PROVISTOS POR LOS DUEOS DE LOS DERECHOS INTELECTUALES Y POR QUIENES CONTRIBUYERON A SUDESARROLLO "COMO SON", RENUNCIANDO ELLOS A CUALQUIER TIPO DE GARANTA EXPLCITA O IMPLCITA, INCLUYENDO,AUNQUE NO LIMITNDOSE, A LAS GARANTAS IMPLCITAS DE COMERCIALIZACIN Y DE ADAPTACIN A PROPSITOSPARTICULARES. BAJO NINGUNA CIRCUNSTANCIA SERN LOS DUEOS DE LOS DERECHOS INTELECTUALES Y QUIENESCONTRIBUYERON AL DESARROLLO RESPONSABLES POR DAO ALGUNO, DIRECTO, INDIRECTO, INCIDENTAL, CASUAL,CAUSAL (INCLUYENDO PERO NO LIMITNDOSE A DAOS A LA VIDA Y/O A LA PROPIEDAD, PRDIDA DE DATOS, LUCROCESANTE, INTERRUPCIN DE NEGOCIOS), AUNQUE EL MISMO OCURRA BAJO CUALQUIER TEORA DE DERECHO, PRODUCIDOEN CUALQUIER FORMA DE USO DE ESTE DESARROLLO O DESARROLLOS DE L DERIVADOS, AN CUANDO SE AVISE O NO DEDICHO DAO O SU POSIBILIDAD.2G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiploA u t o r e sOctavio J. da Silva GilligMnica J. Paves PalaciosJulin U. da Silva Gilligw w w . r o b o t g r o u p . c o m . a r 3. ContenidoC o n t e n i d o 31 . I n t r o d u c c i n 6Introduccin 6Robtica educativa 6Descripcin de la tecnologa utilizada en el curso 6Datos tcnicos de la placa DuinoBot 1.2 8Programacin de robots 9Montaje de los sensores infrarrojos frontales 11Instalacin de drivers de la placa controladora 13Requerimientos de hardware y software 13Instalacin de drivers utilizando Minibloq en Windows XP 13Problemas? Instalacin manual de drivers en Windows XP utilizando Minibloq 17Instalacin de drivers utilizando Minibloq en Windows Vista 21Problemas? Instalacin manual de drivers en Windows Vista utilizando Minibloq 26Instalacin de Minibloq 28Ejecucin de Minibloq 28Ejemplo de prueba en Minibloq 28Explicacin del programa de prueba 29Seleccin del puerto 29Descarga del programa a la placa 30Instalacin del entorno de programacin Arduino 31Conexin entre la placa DuinoBot y la PC 35Instalacin de drivers de comunicacin utilizando DuinoPack en Windows XP 37Instalacin de drivers de comunicacin utilizando DuinoPack en Windows Vista 39Instalacin manual en Windows XP utilizando DuinoPack 43Posibles problemas y sus soluciones 47Ejemplo de prueba en Arduino 482 . Mo t o r e s 51Objetivos 51Algo de teora de motores 51Introduccin a la programacin 53Funciones en programacin 55Actividad 2.1: avanzar en lnea recta 57Explicacin de la actividad 2.1 hecha en Minibloq 57Cdigo de la actividad 2.1 en Arduino 0022 58Explicacin del cdigo de la actividad 2.1 59Qu es una librera en programacin 60Actividad 2.2: dibujar una circunferencia 61Explicacin del cdigo de la actividad 2.2 62Cdigo en Minibloq de la actividad 2.2 63Puente H 64Actividad 2.3: hacer que el robot gire sobre su propio eje 65Explicacin del cdigo de la actividad 2.3 66Cdigo en Minibloq de la actividad 2.3 673G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 4. Variables en programacin 68Cdigo en Minibloq del ejemplo 2.1 71Actividad 2.4: giro con distintas velocidades 73Explicacin del cdigo de la actividad 2.4 74Cdigo en Minibloq de la actividad 2.4 76Variables en Arduino 0022 77Ejercicios de integracin 80Actividades para el alumno 80Actividades de integracin con robots 81Actividad de aplicacin a la fsica 82Preguntas para investigar 823 . C omu n i c a c i o n e s 83Objetivos 83Algo de teora de comunicaciones 83Actividad 3.1: Hello World! 85Explicacin del cdigo de la actividad 3.1 86Funciones de comunicacin del entorno Arduino 0022 88Funciones con parmetros 89Actividad 3.2: hacer que el robot diga qu motor est usando 94Explicacin del cdigo de la actividad 3.2 95Actividad 3.3: hacer que el robot comunique su trayectoria 97Explicacin del cdigo de la actividad 3.3 98Actividades de integracin 98Preguntas para investigar 984 . S e n s o r e s 99Objetivos 99Necesidad de usar sensores 99Algo de teora de sensores infrarrojos (IR) 99Actividad 4.1: testeo de un sensor IR 101Explicacin del cdigo de la actividad 4.1 102Cdigo en Minibloq de la actividad 4.1 103Algo de teora de sensores ultrasnicos 104Ejemplo 4.1: medicin de distancias usando un sensor ultrasnico 104Cdigo en Minibloq del ejemplo 4.1 105Actividad 4.2: avanzar hasta detectar un obstculo 106Explicacin del cdigo de la actividad 4.2 107Cdigo en Minibloq de la actividad 4.2 108Actividad 4.3: avanzar hasta detectar un obstculo, cdigo alternativo 109Explicacin del cdigo de la actividad 4.3 110Cdigo en Minibloq de la actividad 4.3 111Operadores lgicos en programacin 112Operadores lgicos en Minibloq 113Actividad 4.4: hacer que el robot siga una lnea 114Explicacin del cdigo de la actividad 4.4 116Actividad 4.5: hacer que el robot siga una luz 1194G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 5. Explicacin del cdigo de la actividad 4.5 120Actividad 4.6: hacer que el robot siga una luz utilizando tres sensores IR 121Explicacin del cdigo de la actividad 4.6 122Preguntas para investigar 123Actividades para el alumno 1235 . A c t u a d o r e s 124Algo de teora sobre emisores de luz 124Actuadores en el robot Multiplo N6 125Actividad 5.1: hacer que el LED se prenda intermitentemente 126Explicacin del cdigo de la actividad 5.1 127Cdigo en Minibloq de la actividad 5.1 128Actividad 5.2: hacer que un LED emita luz intermitentemente 129Explicacin del cdigo de la actividad 5.2 130Cdigo en Minibloq de la actividad 5.2 131Actividad 5.3: hacer un semforo con tres LEDs 132Explicacin del cdigo de la actividad 5.3 134Cdigo en Minibloq de la actividad 5.3 135El botn RUN como entrada 136Actividad 5.4: testeo del botn RUN 136Explicacin del cdigo de la actividad 5.4 137Actividad 5.5: hacer que el robot avance hasta que se presione el botn RUN 139Explicacin del cdigo de la actividad 5.5 140Cdigo en Minibloq de la actividad 5.5 141Actividad 5.6: hacer que se encienda el LED frontal al presionar el botn RUN 142Explicacin del cdigo de la actividad 5.6 143Cdigo en Minibloq de la actividad 5.6 144Preguntas para investigar 145Actividades para el alumno 1455G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 6. El siguiente curso pretende introducir al alumno en los conocimientos bsicos de la Robtica.Para ello, se planificaron una serie de lecciones en las cuales se estudian diversas partes delrobot y se ensea a utilizarlas con el fin de entender su funcin y aplicacin finales. El presentecurso trata por separado cada una de estas partes pero las integra progresivamente para queel estudiante pueda lograr una mejor comprensin de los temas y poder aplicarlas en susproyectos personales.Ro b t i c a e d uc a t i v aLa Robtica Educativa, tan de moda en los ltimos aos, implica la enseanza con robots endistintas reas del saber. Debido al carcter interdisciplinario de la Robtica, es cada vez mscomn que se utilicen robots para ensear conceptos de computacin, electrnica, fsica,mecnica, matemticas e incluso diseo. Pero esta disciplina tan compleja tambin trae al auladiscusiones ticas debido a la incertidumbre que provoca en muchas personas el posiblealcance de la automatizacin en la sociedad.Entre las virtudes que encuentran los docentes al utilizar robots para la enseanza se destacanel hecho de poder materializar el pensamiento abstracto del alumno en misiones concretas quelos robots tendrn que llevar a cabo. Tambin se intenta fomentar el trabajo grupal en el cualse discuten diversas formas de resolver un problema, lo cual ayuda a los estudiantes a trabajaren conjunto con un fin determinado.Sin embargo, la integracin de reas y el desarrollo del pensamiento lgico parecen seralgunos de los resultados ms interesantes de esta disciplina tan nueva pero con tanto impactoen la enseanza actual.De s c r i p c i n de l a t e c n o l og a u t i l i z a d a e n e l c u r soEste curso de Robtica se realizar utilizando el nuevo robot Multiplo N6 realizado porRobotGroup. Este robot fue pensado especialmente para educacin, pudiendo ser adaptado alas necesidades y gustos de cada usuario.6G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplo1. Int roduccinI n t r o d uc c i nw w w . r o b o t g r o u p . c o m . a r 7. El mismo posee traccin diferencial con dos cajas reductoras con engranajes de alta resistenciay bujes metlicos. Este robot, al igual que el Multiplo N10, son parte del sistema constructivoMultiplo, el cual permite desarmar y reconfigurar el robot a gusto. Tambin cuenta con dossensores infrarrojos que, colocados en su parte delantera como se muestra en la figura, lepermiten seguir una lnea negra sobre un fondo blanco. La imagen muestra el detalle de lacaja reductora y los sensores montados en su parte frontal.Adems, el robot Multiplo N6 posee 6 entradas para sensores analgicos de 10 bits, con fichasestndar para sensores Multiplo. Estas entradas pueden funcionar tambin como salidasdigitales programables de hasta 40 mA.La alimentacin de la placa est dada por un avanzado sistema que permite entregar hasta 12V a los motores partiendo de slo 3 pilas AA. Adems, eleva la tensin de alimentacin de lalgica, permitiendo la conexin de todo tipo de sensores estndar y otros accesorios Multiplode 5 V. La siguiente imagen muestra una vista posterior del robot Multiplo N6. En la misma sepuede ver la tapa que protege la alimentacin del robot.7G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 8. Da t o s t c n i c o s d e l a p l a c a Dui n o Bo t 1 . 2Microcontrolador Atmel AVR ATMega32U4 ~14-16 MIPS @ 16 MHz.32 KBytes de memoria Flash (programa) automodificable. 2,5 KBytes dememoria SRAM. 1 KByte de EEPROM (datos no voltiles).5 Timers, conversor A/D 10 bits (12 canales multiplexados), comparador analgico,31 fuentes de interrupcin, puertos SPI, 2WI, USART, JTAG.USB 2.0 / Compatible Arduino.Puerto serie (USART) TTL para conexin de mdulos de comunicacionesMultiplo.Doble puente H MOSFET de alto rendimiento para motores de 2.5 a 13.5 V,corriente promedio de 1.2 A y pico de 3.2 A.6 entradas para sensores analgicos de 10 bits, con ficha estndar para lossensores Multiplo. Cada entrada es adems configurable como salida digitalde 40 mA (200 mA como mximo entre todos los pines).Ms entradas y salidas disponibles en los conectores estndar Arduino.El procesador tiene tambin UART y buses I2C y SPI por hardware.Buzzer que permite la generacin de tonos a diferentes frecuencias.LED indicador de 5V (alimentacin lgica).LED indicador de alimentacin de motores (6V / 7V).4 LEDs indicadores de sentido de giro de los motores.Pulsador de Usuario/Run.Sistema de alimentacin que puede entregar hasta 12 V a partir de 3 pilasAA (o cualquier celda de 3.6 V, ya sea NiMH o Li-Ion). Adems eleva latensin de la lgica permit iendo la conexin de todo tipo de sensoresestndar y otros accesorios Multiplo de 5V.Compatible con ArduinoPuede ser programado de forma nativa stand-alone en C/C++, Bitlash yotros lenguajes de alto nivel.Tambin puede ser utilizado en modo remoto desde lenguajes que corran enla PC.Estructura fsica Piezas estructurales Multiplo.Anclaje estndar para acoplarle Shields Arduino-compatibles (como losshields WiFi, Ethernet, ZigBee, motores extra, etc.).8G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiploControladorDuinoBotProcesadorComunicacionesSalidas motoresI/OInterfaz deusuarioLED de usuario.Pulsador de Reset.AlimentacinSoftwareAmpliacinw w w . r o b o t g r o u p . c o m . a r 9. Como vimos antes, una de las principales partes de un robot es el microprocesador. Este serprogramado para darle inteligencia al robot. Luego, cualquier decisin que tome, estar basadaen el cdigo que hayamos escrito previamente.En primer lugar, hay que tener en cuenta que, para programar un robot, tendremos queescribir el programa que queremos que este ejecute. Dicho programa lo escribiremos en elentorno Arduino 0022 que viene con cd del robot. Luego, este entorno generar un archivoque, cuando le demos la orden a la computadora y, teniendo el robot conectado y prendido,ser descargado al robot para que este pueda ejecutar el cdigo que escribimos. Es importantedestacar el hecho de que podremos saber si nuestro programa tiene cierto tipo de errores sinnecesidad de conectar el robot a la computadora. En esta primera parte, estudiaremos algunosconceptos indispensables para empezar a programar. Para estos ejemplos, no necesitaremostener el robot conectado a la pc.Al igual que sucede con la comunicacin entre personas, para comunicarnos con el robot ydarle rdenes tenemos que usar un lenguaje especfico. En nuestro caso, el lenguaje elegido esC/C++. Esto simplemente significa que cuando programemos tendremos que respetar unaserie de reglas semnticas y sintcticas para que el robot entienda lo que queremos que haga.Estas reglas, son las que definen el lenguaje que utilizamos. Para esto, tendremos que instalarun entorno de programacin en el que escribiremos las rdenes en el lenguaje escogido. Esteentorno de programacin es un programa que entiende el lenguaje C/C++ y ser el encargadode traducir nuestras rdenes a un lenguaje que el procesador pueda entender.En este punto conviene parar para repasar algunos conceptos importantes. En primer lugar, nohay que olvidarse que la computadora, el robot y cualquier otro dispositivo que utilice unprocesador, solamente entiende cadenas de 1s (unos) y 0s (ceros) a los que llamamos bits.Esto es lo que se conoce como cdigo binario, ya que solamente utiliza dos tipos de dgitos (0y 1). Luego, estos unos y ceros se renen en grupos de ocho llamados bytes. Debido a que elprocesador trabaja con estas secuencias de bits es que necesitamos un entorno deprogramacin que entienda el lenguaje C/C++ con el que vamos a darle las rdenes a lacomputadora para que lo traduzca al lenguaje con el que trabaja el procesador (cdigobinario).9G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiploPr og r ama c i n d e r o b o t sw w w . r o b o t g r o u p . c o m . a r 10. En el caso de los robots de Multiplo se ha decidido utilizar el entorno de programacin Arduino0022 debido a la gran cantidad de documentacin que posee y a la gran comunidad deusuarios que lo programan. Esto hace que sea mucho ms fcil para el alumno aprender yllevar a cabo distintos proyectos. Por un lado debido a la cantidad de cdigo escrito por otraspersonas pertenecientes a la comunidad de usuarios y tambin por la gran cantidad de forosen los cuales se puede participar y hacer consultas sobre distintos temas. La compatibilidad detecnologas es una caracterstica cada vez ms deseada y es por eso que RobotGroup buschacer su sistema constructivo de robots compatible con un entorno de programacin tandifundido y de tan buena calidad como es Arduino 0022.Cuando escribamos programas en lenguaje C/C++ estaremos escribiendo o generandoarchivos cuya extensin ser .cpp. Estas son las iniciales de C++ en ingls (C Plus Plus). Esimportante no estar cambiando de lugar estos archivos una vez escritos ya que el entorno deprogramacin no solo traducir lo que escribimos sino que har algunas otras acciones, comopor ejemplo linkear los archivos que sean necesarios para ejecutar un determinadoprograma. Esto se debe a que hay programas que contienen muchos archivos con cdigonecesario para su ejecucin y son escritos en distintos lugares para mantener cierto orden a lahora de hacer modificaciones. Por ejemplo, se suelen agrupar en un archivo .cpp todas lasrdenes utilizadas para manejar motores y en otro archivo .cpp las rdenes para manejar undeterminado tipo de sensores. Luego, nuestro entorno de programacin utilizar un compiladorpara que ninguno de estos archivos sea ignorado. Este compilador viene integrado con elentorno y es el encargado de convertir lo que escribimos en cdigo entendible para elprocesador. De la misma manera, es el encargado de linkear los archivos y es quien nos dir siel programa que escribimos tiene errores o no. A continuacin se muestra una imagen queilustra este hecho. En primer lugar, tenemos archivos con diversas extensiones entre las quese encuentran los .c y .cpp. Estos archivos son editados y modificados por nosotros en elentorno Arduino 0022. Luego, es el entorno el encargado de compilar estos archivos yconvertirlos en archivos con extensin .hex o .pde para que el procesador los pueda entendery ejecutar.10G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 11. Mo n t a j e d e l o s s e n s or e s i n f r a r r o j o s f r o n t a l e sA continuacin vamos a ver cmo instalar los sensores infrarrojos frontales en el robot de talmanera que podamos hacer una actividad en la cual el robot pueda seguir una lnea negraopaca dibujada sobre un fondo blanco.Para instalar los sensores, lo primero que hay que hacer es montarlos con dos tornillos cortosen la parte delantera. La posicin adecuada es el centro de la pieza frontal dejando solo unespacio entre cada tornillo. La siguiente figura muestra en detalle cmo deberan quedar.Una vez montados, hay que enchufar los sensores a la placa DuinoBot. Para esto, se debeconectar un extremo del cable al sensor, como se muestra en la siguiente figura:11G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 12. Luego, se debe conectar el otro extremo del cable a la placa DuinoBot. Uno de los sensores, seconectar en la salida llamada S0 y el otro se conectar en la salida llamada S1. En caso denotar que el robot no se comporta como corresponde, es posible que haya que conectar lossensores al revs, o sea, el que estaba conectado a la salida S0 en la S1 y el S1 en la S0. Lasiguiente figura muestra el detalle de las conexiones en la placa. El cable que se ve estconectado a la salida S2 dejando libres las salidas S0 y S1 necesarias para esta actividad.12G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 13. I n s t a l a c i n de d r i v e r s de l a p l a c a c o n t r o l a do r aAntes de empezar a utilizar los robots Multiplo fabricados por RobotGroup, tendremos queinstalar los drivers de comunicacin de la placa controladora en la computadora queutilicemos. En esta primera seccin se describirn los pasos para instalar los drivers utilizandoel entorno Minibloq. Luego se describirn los pasos a seguir en caso de utilizar el entornoArduino (que aqu llamaremos indistintamente como DuinoPack, que es la versin de ArduinoIDE modificada para trabajar con el equipamiento Multiplo). Es importante aclarar que una vezinstalados los drivers utilizando cualquiera de los dos entornos, no ser necesario volver ainstalarlos para el otro. Por ejemplo, si primero se instalan correctamente los drivers utilizandoel programa Minibloq, se podr utilizar DuinoPack sin necesidad de volver a instalar los drivers.Re q u e r imi e n t os d e h ar dwa r e y so f twa r eRequerimientos mnimos de hardware:Windows XPWindows VistaWindows 7I n s t a l a c i n de d r i v e r s u t i l i z an d o Mi n i b lo q en Wi n d ows XPPara instalar los drivers de comunicacin necesarios para utilizar Minibloq con los robotsMultiplo fabricados por RobotGroup debemos conectar la alimentacin a la placa. Luego hayque encenderla y conectarla a la computadora utilizando un cable USB. Una vez queconectadas, la computadora nos mostrar la siguiente pantalla. En esta primera pantallaseleccionamos la opcin No por el momento y presionamos Siguiente, como se muestra enla figura:13G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiploIntel Celeron o superior.1GB Memoria RAM.200 MB de espacio libre en disco.Requerimientos de software:w w w . r o b o t g r o u p . c o m . a r 14. Luego, en la pantalla siguiente, seleccionaremos la opcin Instalar desde una lista o ubicacinespecfica (avanzado) y presionamos el botn Siguiente.14G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 15. En este punto, tenemos que indicar la ubicacin de la carpeta que contiene los drivers decomunicacin. Dentro de la carpeta descomprimida de Minibloq, encontraremos la carpeta conlos drivers en: ..Minibloq.v0.8.BetaComponentsDriversDuinoBotv1.x. Ya que lo que estpidiendo el asistente para instalacin es la ruta (path) a la carpeta que contiene dichos drivers.El nombre de la carpeta que contiene los drivers puede diferir del mostrado en este caso segnla versin que se adquiri. En el caso de poseer la versin 0.8.Beta, la carpeta que contendrlos drivers de comunicacin de la placa se encontrar en..Minibloq.v0.8.BetaComponentsDriversDuinoBotv1.x. Los dos puntos seguidos que semuestran en la ruta corresponden a la parte de la misma compuesta por las carpetas propiasde cada usuario.15G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 16. Una vez instalado el entorno y los drivers, veremos la siguiente pantalla en la que presionamosel botn Finalizar tal como se muestra en la siguiente figura:De esta manera, finalizamos la instalacin de los drivers de comunicacin de Minibloq en unacomputadora con Windows XP.16G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 17. Probl emas ? I n s t a l a c i n man u a l d e dr i v e r s e n Wi n d owsXP u t i l i z a n d o Mi n i b l o qEn caso de no haber podido instalar los drivers de comunicacin, podemos reintentarlo de laforma descripta a continuacin. Primero, hay que presionar el botn derecho del mouse sobreel cono de Mi PC. En ese momento, se desplegar un pequeo men del cualseleccionaremos la opcin Propiedades. Entonces se abrir la ventana Propiedades delsistema, en la que tendremos que seleccionar la solapa Hardware, tal como se muestra enla siguiente figura:17G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 18. Dentro de la solapa Hardware, seleccionamos la opcin Administrador de dispositivos.Veremos la siguiente pantalla:18G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 19. Como lo que nos interesa en este punto es comunicar a travs de un puerto USB la placa conla computadora, seleccionamos, dentro Puertos (COM & LPT) la opcin que corresponde alpuerto de comunicaciones de la placa. Una vez seleccionada esta opcin, apretamos el botnderecho del mouse y seleccionamos Propiedades, tal como se muestra en la siguiente figura:19G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 20. Al seleccionar esta opcin, veremos las caractersticas del puerto que nos interesa. En estepunto, la computadora nos da la opcin de volver a instalar el controlador, para lo cual,tendremos que hacer clic en el botn Reinstalar el controlador..., tal como se muestra en lasiguiente figura:Luego, podremos visualizar el asistente para la instalacin de hardware y seguir los pasosdescriptos anteriormente acerca de cmo instalar los drivers de comunicacin necesarios parautilizar la placa.20G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 21. I n s t a l a c i n de d r i v e r s u t i l i z an d o Mi n i b l o q e n Wi n dowsVi s t aAl conectar la placa a una pc con Windows Vista, veremos el siguiente mensaje en la pantalla:En este caso, seleccionamos la opcin Buscar e instalar el software de controlador(recomendado). As podremos elegir la carpeta que contiene los drivers que queremosinstalar. Inmediatamente despus de seleccionar dicha opcin, Windows Vista nos pedirpermiso para continuar con la instalacin del nuevo software. Hacemos clic en Continuar.Luego, la computadora tratar de encontrar los drivers por su cuenta para instalarlos por loque, despus de unos momentos, nos mostrar la siguiente imagen:21G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 22. Seleccionamos la opcin No tengo el disco. Mostrarme otras opciones., lo que nos llevar a lasiguiente pantalla, en la cual seleccionamos la opcin Buscar software de controlador en elequipo (avanzado).22G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 23. A continuacin aparecer un texto en el que hay que ingresar la ubicacin de la carpeta quecontiene los drivers de instalacin, los cuales se encuentran en..Minibloq.v0.8.BetaComponentsDriversDuinoBotv1.x. Una vez seleccionada dichacarpeta, hacemos clic en Siguiente.23G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 24. Como se muestra a continuacin, Windows Vista nos preguntar si queremos continuar con lainstalacin, la opcin que debemos seleccionar es Instalar este software de controlador detodas formas ya que es la que nos permitir seguir adelante.A partir de este punto, se realizar la instalacin hasta que veamos la siguiente pantalla queindica el final de la misma:24G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 25. Presionamos el botn Cerrar a la derecha abajo de la pantalla y as terminamos con todo elproceso de instalacin de drivers de comunicacin necesarios para utilizar la placa DuinoBot enuna computadora con Windows Vista.25G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 26. Probl emas ? I n s t a l a c i n man u a l d e dr i v e r s e n Wi n d owsVi s t a u t i l i z an d o Mi n i b l oqEn caso de no haber podido instalar los drivers, podemos reintentarlo de la forma descripta acontinuacin. Primero, hay que presionar el botn derecho del mouse sobre el cono deEquipo o Computer. En ese momento, se desplegar un pequeo men del cualseleccionaremos la opcin Propiedades o Properties. Entonces se abrir la ventana en laque tendremos que seleccionar la opcin Propiedades del sistema o Device Manager. Unavez dentro del Administrador de dispositivos (Device Manager en la versin en ingls)seleccionamos la opcin que corresponde a nuestro controlador. En este caso, hacemos cliccon el botn derecho del mouse sobre DuinoBot.Firm.v1.0 y seleccionamos la opcinProperties, como se muestra en la siguiente figura:26G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 27. Dentro de las propiedades tendremos la opcin de Reinstalar Drivers (Reinstall Driver enla versin en ingls).Al seleccionar Reinstall Driver, veremos la pantalla que se muestra a continuacin en la queseleccionaremos la opcin Browse my computer for driver software (buscar en micomputadora el softawe). Luego podremos realizar el proceso completo de instalacin talcomo se lo describi en la seccin Instalacin de drivers en Windows Vista.27G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 28. I n s t a l a c i n de Mi n i b l o qAntes de empezar a trabajar con la placa vamos a tener que copiar el entorno deprogramacin Minibloq a nuestra computadora. Para ello, utilizamos el cd que viene incluidocon la placa o descargamos el programa desde internet. Luego descomprimimos la carpeta enun directorio local de la computadora que vamos a utilizar.E j e c u c i n d e Mi n i b l o qDentro de la carpeta que acabamos de grabar en un nuestra computadora tenemos queejecutar el archivo MinibloqRun.exe. Este abrir el entorno de programacin Minibloq.E j emp l o d e p r ue b a e n Mi n i b l oqPara probar el entorno Minibloq, vamos a realizar un pequeo programa que haga que la placareproduzca una meloda sencilla. Para eso, seleccionamos los bloques que se muestran en lasiguiente imagen:28G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 29. E x p l i c a c i n de l p r og r ama de p r u e baEste programa es una meloda compuesta por varios bloques similares. Cada bloque ejecutaruna nota durante un tiempo determinado.S e l e c c i n d e l p u e r t oAntes de descargar el programa realizado a la placa, hay que conectar el cable USB a la placay a la computadora. Luego, hay que prender la placa. Una vez conectada la placa a lacomputadora hay que seleccionar el puerto adecuado. Para eso se hace clic en la seccinPort (Alt+R), como se muestra en la siguiente figura.Luego se selecciona el puerto correspondiente. En este caso es el COM14.29G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 30. De s c ar g a de l pr o g r ama a l a pl a c aCon la placa conectada a la computadora y puerto correctamente seleccionado, se presiona elbotn Run, el cual har que el entorno verifique la ausencia de errores y luego descargue elprograma desde la computadora a la placa controladora. El botn utilizado es el que semuestra en la siguiente figura:30G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 31. I n s t a l a c i n de l e n t o r no d e p r o g r ama c i n Ar d u i n oAntes de empezar a trabajar con la placa vamos a tener que copiar el entorno deprogramacin que usaremos en nuestra computadora. Para ello, descargamos el entorno deprogramacin DuinoPack, que es una versin del Arduino IDE pero con todas las libreras yagregados necesarios para trabajar con el hardware Multiplo sin tener que instalar nadaadicional. La ltima versin de DuinoPack se puede siempre descargar del rea de Software delsitio de RobotGroup (http://robotgroup.com.ar) Una vez vea que lo tenemos, debemosdescomprimirlo en una carpeta local. Luego, lo abrimos haciendo doble click en arduino.exe yaque no requiere instalacin.Lo primero que aparecer al abrir el programa es un mensaje que nos indica que hay unaversin ms nueva de Arduino para descargar. La opcin que hay que seleccionar es No yaque la versin que vamos a usar del entorno de programacin tiene libreras especficas quesirven para utilizar los robots Multiplo fabricados por RobotGroup. El mensaje que veremos esel que se muestra en la siguiente imagen:31G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 32. Una vez abierto el entorno de programacin Arduino 0022 veremos una pantalla similar a laque se muestra a continuacin. La nica diferencia es que el nombre no ser RobotGroup, sinoque ser uno que indicar la fecha de creacin del archivo.Lo primero que haremos en este punto ser escribir la declaracin de dos funciones necesariaspara poder empezar a escribir nuestro cdigo. Con lo cual, el entorno se ver como muestra lasiguiente figura:32G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 33. Estas dos funciones se llaman setup() y loop(). La primera prueba que podemos hacer paraasegurarnos de que todo est funcionando correctamente, es compilar este sencillo programa.Para eso, apretamos el botn Verify que se encuentra a la izquierda arriba en la pantalla.Notemos que, al pararnos sobre el botn Verify, el nombre del mismo aparecer a la derechade la pantalla. Lo mismo suceder con el resto de los botones.En caso de que hayamos escrito todo correctamente, en la parte inferior de la pantalla nosaparecer un mensaje en color blanco como el que se muestra a continuacin:Por un lado, en letras negras y sobre fondo verde, podemos leer que el compilador dice: Donecompiling. Esto significa que termin de compilar. Por otro lado, en letras blancas y fondonegro nos indica que el tamao del archivo generado que, en este caso, fue de 548 bytes. Encaso de que hayamos escrito algo mal, el entorno nos comunicar el error utilizando esta partede la pantalla. Por ejemplo, es muy comn que cuando una persona empieza a programar, seolvide de cerrar una llave o confunda llaves con parntesis. Tambin es muy comnconfundirse y escribir mal una orden o nombre de funcin. El lenguaje C/C++ es Casesensitive, lo que significa que hace diferencia entre letras maysculas y minsculas. Con locual, si alguien escribe, por ejemplo, Void loop(), esto ser contado como un error por elcompilador ya que no reconocer la palabra Void por estar escrita con V mayscula. Acontinuacin se muestra cmo se vera el mensaje de error que nos devolvera el compiladoren caso de haber escrito Void loop() en vez de void loop().33G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 34. Como podemos ver en la figura anterior, el entorno avisa que encontr un error y lo describe,en este caso, nos dice que no reconoce la palabra Void, ya que no fue escrita correctamente.Estas pruebas sencillas que acabamos de describir son para empezar a entender cmo ser laprogramacin de placa. Por lo tanto, no es necesario tenerla conectada a la computadora pararealizar estas pruebas.34G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 35. Co n e x i n e n t r e l a p l a c a Du i noBo t y l a PCLa primera prueba que podemos hacer para asegurarnos de que todo est funcionandocorrectamente, es abrir un programa de ejemplo que sirva para testear el funcionamiento delos motores. Para lo cual, vamos a seleccionar la opcin File, luego Examples, 9.DuinoBoty, por ltimo, seleccionar el ejemplo LineFollower, como se muestra en la siguiente figura:35G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 36. Esto nos abrir el ejemplo correspondiente. Luego, haremos que el entorno compile estearchivo para asegurarnos que todo est bien. Para eso, apretamos el botn Verify. Cuandoya estemos seguros de que nuestro entorno de programacin Arduino 0022 funcionacorrectamente, conectamos el cable USB a la computadora y luego al robot. La conexin en elrobot se realiza en la entrada para USB que tiene en la parte superior, tal como lo muestra lasiguiente figura:Una vez conectada la placa DuinoBot a la computadora y, teniendo el entorno instalado, sedebe encender la placa desde su parte frontal. Tal como se muestra a continuacin:En cuanto hayamos terminado de encender la placa y, estando esta conectada, lacomputadora nos avisar que detect nuevo hardware. Es muy importante detenerse en estepunto para realizar correctamente la instalacin de los drivers de comunicacin de la placaDuinoBot. A continuacin se muestra cmo realizarla en una computadora con Windows XP yluego en una computadora con Windows Vista.36G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 37. I n s t a l a c i n d e d r i v e r s de c omu n i c a c i n u t i l i z an d oDu i n o Pa c k e n Wi n d ows XPEn primer lugar, la computadora nos mostrar la siguiente pantalla:En esta primera pantalla seleccionamos la opcin No por el momento y presionamosSiguiente, como se muestra en la figura. Luego, en la pantalla que sigue, seleccionaremos laopcin Instalar desde una lista o ubicacin especfica (avanzado) y presionamos el botnSiguiente, como se muestra en la prxima imagen:37G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 38. En este punto, tenemos que indicar la direccin de la carpeta que contiene los drivers decomunicacin. Esta se encuentra en: ..DuinoPack.v0.4driversUSBDuinoBotDriverv1.x. Yaque lo que est pidiendo el asistente para instalacin es la ruta a la carpeta que contienedichos drivers, debemos asegurarnos de seleccionar correctamente la carpeta cuyo nombre esv1.x que se encuentra dentro de USBDuinoBotDriver.Una vez instalado el entorno y los drivers, presionamos el botn Upload tal como se muestraen la siguiente figura:Al hacer esto, el entorno Arduino 0022 compilar el programa y lo grabar en la memoria delrobot.38G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 39. I n s t a l a c i n d e d r i v e r s de c omu n i c a c i n u t i l i z an d oDu i n o Pa c k e n Wi n d ows Vi s t aAl conectar la placa a una pc con Windows Vista, veremos el siguiente mensaje por pantalla:En este caso, seleccionamos la opcin Locate and install driver software (recommended). Laversin en espaol dir Buscar e instalar el software de controlador (recomendado). Aspodremos elegir la carpeta que contiene los drivers que queremos instalar. Inmediatamentedespus de seleccionar dicha opcin, Windows Vista nos dir Inserte el disco includo en AVRCDC Bootloader. En la versin en ingls, mostrar el mensaje Insert the disc that came withyour DuinoBot.Firm.v1.0, tal como lo muestra la siguiente figura:39G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 40. Seleccionamos la opcin I dont have the disc. Show me other options (en la versin enespaol: No tengo el disco. Mostrarme otras opciones.). Esto nos llevar a la siguientepantalla, en la cual seleccionamos la opcin Browse my computer for driver software(advanced) (en la versin en espaol: Buscar software de controlador en el equipo(avanzado)).A continuacin aparecer un cuadro de texto en el que hay que ingresar la ubicacin de lacarpeta que contiene los drivers de instalacin, los cuales se encuentran en..DuinoPack.v0.4driversUSBDuinoBotDriverv1.x. Una vez seleccionada dicha carpeta,hacemos clic en Next (Siguiente en la versin en espaol).40G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 41. Como se muestra a continuacin, Windows Vista nos preguntar si queremos continuar con lainstalacin, la opcin que debemos seleccionar es Install this driver software anyway (en laversin en espaol Instalar este software de controlador de todas formas) ya que es la quenos permitir seguir adelante.A partir de este punto, se realizar la instalacin de los drivers. Mientras, veremos la pantallaque se muestra a continuacin:41G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 42. Una vez finalizado el proceso de instalacin de los drivers veremos la siguiente pantalla en laque presionaremos el botn Close (Cerrar en la versin en espaol):42G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 43. I n s t a l a c i n man u a l e n Wi n d ows XP u t i l i z a n d o Du i n oPa c kEn caso de no haber podido instalar los drivers de comunicacin, podemos reintentarlo de laforma descripta a continuacin. Primero, hay que presionar el botn derecho del mouse sobreel cono de Mi PC. En ese momento, se desplegar un pequeo men del cualseleccionaremos la opcin Propiedades. Entonces se abrir la ventana Propiedades delsistema, en la que tendremos que seleccionar la solapa Hardware, tal como se muestra enla siguiente figura:43G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 44. Dentro de la solapa Hardware, seleccionamos la opcin Administrador de dispositivos (en laversin en ingls se llama Device Manager). Veremos la siguiente pantalla:44G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 45. Como lo que nos interesa en este punto es comunicar a travs de un puerto USB la placaDuinoBot con la computadora, seleccionamos, dentro de Puertos (COM & LPT) la opcinDuinoBot.Firm.v1.0. Esta opcin es la que nos muestra que nuestra placa ha sido reconocida.Una vez seleccionada esta opcin, apretamos el botn derecho del mouse y seleccionamosPropiedades, tal como se muestra en la siguiente figura:45G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 46. Al seleccionar esta opcin, veremos las caractersticas del puerto que nos interesa. En estepunto, la computadora nos da la opcin de volver a instalar el controlador, para lo cual,tendremos que hacer click en el botn Reinstalar el controlador..., tal como se muestra en lasiguiente figura:Luego, podremos visualizar el asistente para la instalacin de hardware y seguir los pasosdescriptos en la seccin Instalacin de drivers de comunicacin en Windows XP.46G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 47. Po s i b l e s pr o b l ema s y s u s so lu c i o n e sEs probable que el robot no funcione la primera vez que quiera usarlo. A continuacin sedescriben algunas cosas para tener en cuenta en caso que esto suceda. Lo primero que hayque chequear, es que efectivamente est seleccionada la opcin correspondiente en el menTools, Board. En este caso, hay que seleccionar la opcin DuinoBot.v1.x CDC, tal como semuestra en la siguiente figura:Tambin hay que asegurarse de que el puerto de comunicacin seleccionado sea el correcto.Esto hay que chequearlo en Tools, Serial Port. Hay que estar seguro de que el puerto COMcorrespondiente est tildado, tal como se muestra en la siguiente figura:47G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 48. E j emp l o d e p r ue b a e n Ar d u i noLuego de la instalacin del entorno de programacin Arduino, estamos en condiciones deejecutar un programa de prueba. Para eso, luego de abrir el entorno, seleccionamos la opcinFile, despus Examples, luego Digital y, por ltimo, toneMelody, como se muestra en lasiguiente figura:48G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 49. De esta manera, el entorno nos mostrar un archivo listo para ser compilado y ejecutado. Loprimero que haremos con este archivo es verificar que no tenga ningn error. Para estopresionamos el botn Verify que se encuentra a la izquierda arriba en el entorno, como semuestra en la siguiente figura:Una vez terminado el proceso de compilacin, el entorno nos mostrar en la parte inferior desu pantalla un mensaje como el que se muestra a continuacin:Ahora solo nos falta mandar el programa a la placa para que esta lo ejecute. Para esto,conectamos la placa a la PC utilizando un puerto USB y luego la encendemos. Despusconfiguramos el entorno para que reconozca el destino al que se enviar el programa. Paraesto, seleccionamos la opcin Tools y luego la DuinoBot.v1.x CDC, como se muestra en laimagen siguiente:49G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplow w w . r o b o t g r o u p . c o m . a r 50. Luego, nos aseguramos de que el puerto de comunicacin USB est correctamenteseleccionado. Esto lo podemos chequear viendo la opcin Serial Port dentro de Tools, comose muestra en la siguiente figura. Lo ms comn es que el nmero de puerto sea el ms altode los disponibles.Antes de enviar el programa a la placa, tenemos que modificarle un valor dentro del cdigo. Lalnea que modificaremos es la siguiente:La nica modificacin que hay que hacerle es cambiar el 8 por 23, debido a que este valorrepresenta el nmero de pin al que est conectado el buzzer de la placa. Con lo cual, despusde la modificacin, quedar de la siguiente manera:Ahora s, est todo listo para subir el programa a la placa y ejecutarlo. Lo ltimo que nosqueda por hacer, es presionar el botn Upload, con lo cual, el entorno se encargar demandar el cdigo compilado al controlador DuinoBot.50G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplotone(8, notes[thisSensor], 20);tone(23, notes[thisSensor], 20);w w w . r o b o t g r o u p . c o m . a r 51. Que los alumnos conozcan el funcionamiento de los motores elctricos utilizados por Que se familiaricen con las rdenes bsicas usadas para controlar los motores. Que apliquen la teora estudiada en proyectos que involucren a los robots.Los robots que usaremos en nuestras actividades estn equipadoscon motores elctricos que poseen una reduccin interna. Esta, estformada por un juego de engranajes que permiten mover con mayorfuerza lo que se conecte al eje del motor. La imagen muestra elmotor como lo vemos nosotros. La reduccin est dentro de lacarcasa del motor lo que hace que no se pueda apreciar sindesarmarlo.Para entender mejor el funcionamiento de los motores elctricos vamos a estudiar cmointeractan sus partes. Para comenzar, es importante conocer qu es un imn y suscaractersticas. Los imanes tienen 2 polos: Norte y Sur. Cuando los polos son iguales serepelen o evitan, y cuando son distintos, se atraen. Esta situacin se ilustra en la siguientefigura en la cual se representan los polos con distintos colores.Polos opuestos se atraenPolos iguales se repelen51G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5multiplo2. MotoresNivel: bsico/intermedio.Ob j e t i v o snuestros robots.Al g o t e t e or a d e mo to r e sw w w . r o b o t g r o u p . c o m . a r 52. ElectroimanesImnElectroimnEjeElectroimnImnw w w . r o b o t g r o u p . c o m . a r multiplo52G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Otro elemento de importancia en el estudio del funcionamiento de un motor elctrico, es elelectroimn. Este posee la particularidad de que si le conectamos una fuente de energaelctrica (por ejemplo una pila) se comporta como imn. Al comportarse como imn, tambinaparecen sus 2 polos. Luego, invirtiendo la polaridad entre la fuente y el electroimn, podemosinvertir tambin sus polos.Ahora que sabemos qu son los imanes y los electroimanes, estamos listos para ver cmointeractan estos junto a una fuente de energa elctrica. Si cortamos un motor como los delos robots por el medio y lo miramos de frente, veremos algo como esto:El motor tiene montado en el eje un conmutador que tiene el mismo efecto sobre loselectroimanes (del rotor) que el que tendra si invirtiramos las pilas. Cuando el motor gira porla repulsin entre los polos iguales de los imanes fijos y los electroimanes del rotor, elconmutador vuelve a invertir y as el movimiento no se detendr hasta que desconectemos lafuente. Es interesante notar que, si invertimos la polaridad en la conexin entre la fuente y elmotor, se invierte el sentido de giro de ste. 53. w w w . r o b o t g r o u p . c o m . a r multiplo53G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5I n t r o d uc c i n a l a p r o g r ama c i nYa sabemos cmo funcionan los motores elctricos, pero cmo hacemos para que reciban lasrdenes que les queremos dar? Como vimos antes, lo que queramos que haga el robot se lotendremos que decir utilizando el entorno de programacin. Una vez escrito el programa quequeremos que ejecute y, luego de asegurarnos que no tiene errores, lo enviaremos al robot.Pero empecemos por las rdenes.Cuando abrimos el entorno de programacin Arduino 0022 nos encontramos con una pginaen blanco. Lo primero que conviene hacer en estos casos es escribir todo lo bsico que tendrque tener el programa. Luego haremos una carpeta que contenga nuestro programa y loguardaremos all para no correr el riesgo de perderlo. Una vez creada la carpeta, vamos aguardar nuestro proyecto en ella con el nombre que consideremos ms apropiado. Paraguardarlo, vamos a hacer click en el botn File y luego Save As tal como lo muestra lasiguiente figura.Una vez guardado el archivo vaco, empecemos a escribir nuestro programa. Lo primero quehay que hacer es escribir la declaracin de un par de funciones necesarias para que elprograma compile sin errores. Con el archivo en blanco podemos hacer la siguiente prueba:clickeamos la opcin Sketch y luego Verify/Compile, como se muestra a continuacin: 54. w w w . r o b o t g r o u p . c o m . a r multiplo54G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Esto har que el entorno traduzca lo que hayamos escrito a un lenguaje entendible por elprocesador. Notemos cmo el entorno nos informa qu es lo que hace por medio de una barrade estado situada debajo del editor. En este caso, nos informa que est compilando(compiling):Luego de realizar este proceso, nos mostrar un mensaje como el siguiente:Este mensaje de error nos indica que no declaramos un par de funciones que sonindispensables para que el entorno compile correctamente. Estas funciones se llaman setup() yloop() y se declaran de la siguiente manera:Luego de escribir estas dos declaraciones, podemos compilar de nuevo el programa y veremosque esta vez no nos devuelve ningn mensaje de error. 55. w w w . r o b o t g r o u p . c o m . a r multiplo55G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5F u n c io n e s e n pr o gr ama c i nUna funcin es un conjunto de lneas de cdigo agrupadas con una funcionalidad especfica. Esimportante tener en cuenta que muchas de las funciones que veremos en este curso ya fueronescritas por otra persona y solo las usaremos para dar rdenes concretas. Sin embargo,tambin vamos a escribir funciones desde cero para agregarles funcionalidad a nuestrosprogramas. Volviendo a nuestro programa, hay dos funciones que no nos pueden faltarmientras trabajemos con el entorno Arduino 0022, estas funciones son las siguientes: setup()y loop().En primer lugar tenemos una funcin declarada de la siguiente manera:void setup(){}Estas lneas de cdigo contienen la declaracin de la funcin (void setup()) y las llaves queencierran al cuerpo de la misma. En cuanto a la declaracin, es importante notar algunospuntos:1. La palabra reservada void indica que esta funcin no retornar ningn valor de salida. Siuno piensa en el concepto matemtico de funcin, inmediatamente le viene a la mente la ideade transformar un conjunto de valores en otro valor. Con las funciones en programacin sepuede hacer lo mismo, pero en este caso evitaremos devolver un valor numrico debido a queno lo necesitamos.2. Luego de la palabra reservada void, escribimos el nombre de la funcin. En este casosetup. Cuando escribamos nuestras propias funciones podremos utilizar cualquier nombremientras no sea una palabra reservada del sistema. Es una buena prctica elegir nombres quesean declarativos, esto es, nombres que indiquen lo que va a hacer la funcin. Esto nosayudar en el futuro a arreglar problemas que surjan en nuestros programas. Por otro lado,cuando hablamos de palabras reservadas nos referimos a expresiones que son utilizadas porel compilador de manera exclusiva. Un ejemplo de palabra reservada es void.3. Por ltimo, la declaracin de la funcin tiene un par de parntesis. En caso de que la funcintenga parmetros de entrada, estos se escribiran entre estos parntesis. En los casos en queno tienen parmetros de entrada, como pasa con setup(), los parntesis se escriben igualpero se dejan vacos. 56. w w w . r o b o t g r o u p . c o m . a r multiplo56G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Una vez escrita la declaracin de la funcin, se escribe el cuerpo de la misma entre las llaves.Si este se deja vaco, el programa se podr compilar sin errores pero no har nada. Ahora queya tenemos las declaraciones de las dos funciones principales, probemos compilar el programapara asegurarnos de que no cometimos errores en las declaraciones. No hay que olvidarse queel lenguaje C es case sensitive, lo que significa que no se pueden intercambiar maysculascon minsculas sin que el compilador lo considere un error. Para compilar, simplementepresionamos Verify/Compile como se muestra en la siguiente figura:Adems de estas dos funciones que tenemos que escribir, hay muchas otras que ya estnescritas y listas para ser usadas. Este es el caso de las rdenes que usaremos para decirle a undeterminado motor que avance hacia delante o hacia atrs con una determinada potencia.Tambin usaremos funciones ya escritas por otras personas para comunicarnos con lacomputadora y para consultar valores a travs de los sensores del robot.Cuando usamos rdenes para manejar los motores del robot tenemos que tener en cuenta aqu motor nos estamos refiriendo. Luego, le podremos asignar potencia y direccin a esemotor. En el caso de asignarle potencia al motor izquierdo, al cual llamaremos motor 0, laorden que escribamos en la computadora har que el procesador se encargue de hacerle llegardicha potencia al motor en forma de energa.Por ejemplo, si escribimos motor0.setSpeed(100) estaremos asignando la mxima potenciaque se puede al motor izquierdo, al cual identificamos con el nmero 0. Una vez en elprocesador, esta orden producir una salida de energa de la placa desde el pincorrespondiente al motor izquierdo. Esta energa llegar al motor a travs del cable que loconecta a la placa y as empezar a funcionar. 57. w w w . r o b o t g r o u p . c o m . a r multiplo57G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d 2 . 1 : a v an z a r e n l ne a r e c t aObjetivo: Que el alumno se familiarice con las rdenes bsicas para motores.En esta primera actividad queremos hacer que el robot avance por un tiempo determinado enlnea recta y que luego se detenga. Utilizando el entorno de programacin Minibloq es muysencillo. Simplemente hay que agregar los siguientes bloques en el orden que se muestra acontinuacin:E x p l i c a c i n de l a a c t i v i d a d 2 .1 h e c h a e n Mi ni b l o qLo primero que hacemos es seleccionar el bloque de motor. Dentro de este, seleccionamos elnmero de motor que queremos que avance. En este caso, el motor 0. En caso de querer queel motor avance en sentido inverso, tendremos que asignar velocidad negativa al motor. Paraesto, seleccionamos el bloque que contiene el signo negativo, el cual tiene como smbolo: (x).Por ltimo, con el smbolo # (numeral), asignamos la velocidad. 58. w w w . r o b o t g r o u p . c o m . a r multiplo58G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Como queremos que el robot avance durante un tiempo determinado y luego frene, asignamosvelocidad 50 al motor 1 y luego le asignamos tiempo. Para esto, utilizamos el bloque quecontiene un reloj al que le asignamos el tiempo correspondiente.Por ltimo, le asignamos potencia igual a cero a cada motor para frenar al robot.C d i g o de l a ac t i v i d a d 2. 1 e n Ar d u i no 0 0 2 2Para realizarla, escriba el siguiente cdigo en el entorno Arduino 0022.Actividad 2.1: hacer que el robot avance en lnea recta.void setup(){motor0.setSpeed(-50.0);motor1.setSpeed(50.0);delay(5000);motor0.brake();motor1.brake();}void loop(){ } 59. w w w . r o b o t g r o u p . c o m . a r multiplo59G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5E x p l i c a c i n de l c d i go d e l a ac t i v i d a d 2. 1motor0.setSpeed(-50.0);Esta lnea de cdigo es la que se usa para asignar potencia al motor izquierdo. Por convencin,vamos a llamar al motor izquierdo como Motor 0 y al derecho como Motor 1. Es importantenotar que en la primera parte de la orden se indica a qu motor se est haciendo referencia,mientras que en la segunda, se da la orden de asignar el valor que pusimos entre parntesiscomo velocidad. Las velocidades que podemos asignar varan entre -100.00 y 100.00, siendo 0el valor en el que el motor est detenido. Mientras que -100.00 sera la mxima velocidad dereversa. En este caso utilizamos una velocidad negativa porque los motores estn enposiciones diferentes, por lo tanto, para uno avanzar hacia adelante significa ir en determinadadireccin y para el otro significa ir en la direccin contraria.motor1.setSpeed(50.0);Esta lnea de cdigo hace lo mismo que la anterior pero, en este caso, le asigna velocidad 50 almotor derecho (Motor 1).delay(5000);Con esta orden le estamos diciendo al procesador del robot que por 5 segundos no ejecutenuevas rdenes. Esto lo hacemos para que el robot pueda avanzar durante ese tiempo ya que,sin esta lnea, el procesador ejecutara rpidamente las rdenes que siguen y no podramos verlos resultados. A la funcin delay le pasamos el valor 5000 como parmetro porque estafuncin trabaja en milisegundos.motor0.brake();Por ltimo, con esta orden le decimos al motor 0 que se detenga. Tambin lo podramos haberhecho asignando velocidad 0 a cada motor. 60. w w w . r o b o t g r o u p . c o m . a r multiplo60G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Qu e s u n a l i br e r a e n pr o g r ama c i nPara manejar las distintas partes de un robot, como los motores o los sensores, usamosrdenes que son funciones escritas por otras personas. Estas funciones se suelen agruparsegn su funcionalidad, por ejemplo, todas las rdenes que se utilizan para manejar losmotores, estarn juntas. A este conjunto de funciones lo llamamos librera. Las libreras suelencontener un par de archivos: uno con extensin .h y otro con extensin .cpp. El primero tomala letra de su extensin de la palabra inglesa header que significa encabezado. Esto se debea que en este archivo, estarn solamente los nombres de las funciones y de las variables msimportantes del conjunto. El archivo con extensin .cpp ser el que contenga el cdigo de lasfunciones declaradas en el header. En el caso del entorno de programacin Arduino 0022, lasfunciones estarn escritas en lenguaje C++, como lo vimos antes. Estos dos archivos estncontenidos en una carpeta cuyo nombre es el de la librera. Por ejemplo, la librera Servo,contiene dos archivos llamados Servo.h y Servo.cpp. Esta librera est lista para que la usemosya que viene con el entorno Arduino 0022. Lo nico que tendremos que hacer en caso dequerer manejar servos utilizando esta librera, ser agregar la siguiente lnea de cdigo antesdel cdigo que queremos ejecutar:#include Esto se puede hacer tanto escribiendo la lnea de cdigo como haciendo clic en Sketch, luegoImport Library y, por ltimo, seleccionando la librera que uno quiere utilizar como semuestra en la siguiente imagen:Esto simplemente generar la lnea de cdigo que escribimos ms arriba. Lo bueno de estemtodo, es que nos da la seguridad de que la librera es reconocida por el entorno deprogramacin Arduino 0022. 61. w w w . r o b o t g r o u p . c o m . a r multiplo61G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d 2 . 2 : d i b u j a r u n a c i r c u n f e r e n c i aObjetivos: Que el alumno identifique las distintas rdenes posibles para que el robot gire yque entienda el concepto de centro de giro. Tambin que sea capaz de pensar cul es el mejorcdigo para lograr la trayectoria deseada.En esta actividad queremos hacer que el robot dibuje circunferencias de distinto tamao. Talcomo se muestra en la figura que est a continuacin, el centro de giro del robot ser el puntocentral de la circunferencia que este dibuje.Para esto, escriba el siguiente cdigo en el entorno Arduino 0022:Actividad 2.2: Hacer que el robot dibuje un crculo.void setup(){motor0.setClockwise(false);motor0.setSpeed(50.0);motor1.setSpeed(100.0);delay(5000);motor0.brake();motor1.brake();}void loop(){ }El robot gira sobre un centro de giro externo a l= Centro de giroRadio de giro 62. w w w . r o b o t g r o u p . c o m . a r multiplo62G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5E x p l i c a c i n de l c d i go d e l a ac t i v i d a d 2. 2motor0.setClockwise(false);Esta lnea de cdigo la agregamos para decirle al motor 0 que su direccin ser inversa a laque debera ser. Los motores de los robots giran en el sentido de las agujas del reloj, si ledecimos a un motor que gire de manera inversa, tendremos a los dos motores avanzando enla misma direccin y no necesitaremos asignarle velocidad negativa a ninguno de ellos.motor0.setSpeed(50.0);motor1.setSpeed(100.0);Estas son las lneas principales de este programa ya que, dependiendo de la relacin queestablezcamos entre las velocidades de los motores, el centro de giro estar ms cerca o mslejos del robot. Para eso, elegimos la potencia que tendr cada motor. En este caso, queremosque el motor 1 avance ms rpido que el motor 0 para que el robot pueda girar en torno a unpunto situado a su izquierda.delay(5000);Con esta orden establecemos el tiempo que el robot usar para dibujar el crculo. Esimportante aclarar que, si no se escriben las rdenes de frenado que siguen a continuacin, elrobot seguir girando ya que no recibi nuevas instrucciones. Es probable que el robot nocomplete un crculo en el tiempo establecido, en ese caso, tendremos que modificar el tiempoque le pasamos como parmetro a la funcin delay().motor0.brake();motor1.brake();Por ltimo, frenamos ambos motores para que el robot se detenga. 63. w w w . r o b o t g r o u p . c o m . a r multiplo63G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5C d i g o e n Mi n ib l o q de l a a c t i v i d a d 2. 2Para realizar esta misma actividad utilizando el entorno Minibloq, tenemos que agregar lossiguientes bloques: 64. w w w . r o b o t g r o u p . c o m . a r multiplo64G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Pu e n t e HYa hemos visto que al motor le asignamos velocidades comprendidas entre -100 y 100. Siendolas velocidades negativas las que harn que retroceda y las positivas que avance. Pero cmofunciona internamente este cambio de direccin en el motor? Para entender esto y, antes depasar a la siguiente actividad, estudiaremos el siguiente concepto.Se llama Puente H o H-Bridge en ingls, al circuito formado por el motor y su fuente deenerga cuando se disponen como lo muestra la siguiente figura:Tal como se muestra en la figura, la corriente que circula a travs de las compuertas S1 y S2podra tomar circuitos distintos dependiendo de si estas compuertas estn hacia arriba ohacia abajo. Luego, la configuracin que se elija, har que el robot circule hacia un lado ohacia el otro, como se muestra en la siguiente figura:Luego, cuando le decimos a un motor que su velocidad ser de 100, las compuertas S1 y S2arman el circuito de tal manera que el motor gire hacia delante, mientras que, cuandoasignamos velocidad -100, las compuertas se cerrarn de manera inversa haciendo que elmotor gire con mxima potencia hacia el lado opuesto. 65. w w w . r o b o t g r o u p . c o m . a r multiplo65G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d 2 . 3 : h a c e r q u e e l r ob o t g i r e s o br e su p r op i o e j eEn esta actividad queremos hacer que el robot gire en el lugar donde est sin desplazarse. Talcomo lo muestra el esquema que est a continuacin, tendremos que hacer que una ruedaavance y la otra retroceda, pero que ambas lo hagan a la misma velocidad.Para esto, escriba el siguiente cdigo en el entorno de programacin Arduino 0022:Actividad 2.3: Hacer que el robot gire sobre su propio eje.void setup(){motor0.setClockwise(false);motor0.setSpeed(70);motor1.setSpeed(-70);delay(4000);motor0.brake();motor1.brake();}void loop(){ }El robot gira sobre su propio centro= Centro de giro 66. w w w . r o b o t g r o u p . c o m . a r multiplo66G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5E x p l i c a c i n de l c d i go d e l a ac t i v i d a d 2. 3motor0.setClockwise(false);Con esta lnea de cdigo seteamos la direccin de giro del motor 0 en la direccin opuesta alas agujas del reloj.motor0.setSpeed(70);motor1.setSpeed(-70);Para que el robot gire sobre su propio eje, vamos a asignarle la misma potencia a cada motor,pero uno tendr que retroceder mientras el otro avanza. Por ese motivo, al Motor 1, leasignamos potencia (-70.0).delay(4000);Gracias a esta lnea de cdigo, el procesador del robot esperar 4 segundos antes de ejecutarnuevas rdenes.motor0.brake();motor1.brake();Para finalizar, hacemos que el robot se detenga frenando ambos motores.Ahora, pensemos en la siguiente actividad: se quiere hacer que el robot gire sobre su propioeje como en el ltimo ejercicio, pero esta vez queremos que desacelere desde su velocidadmxima y, una vez que llegue a su cero, frene. Para hacer esto, necesitaramos podermodificar el valor de la velocidad cada cierta cantidad de tiempo. O sea, lo que querramoshacer sera usar el cdigo de la ltima actividad una vez con velocidad 100, luego reutilizarlocon velocidad 90 y as ir decrementando la velocidad a la que gira el robot hasta que llegue acero. Para esto usaremos variables a las que les modificaremos el valor dentro de un ciclo.Cmo hacer esto, lo explicamos a continuacin. 67. w w w . r o b o t g r o u p . c o m . a r multiplo67G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5C d i g o e n Mi n ib l o q de l a a c t i v i d a d 2. 3Para realizar esta misma actividad utilizando el entorno Minibloq, tenemos que agregar losbloques que se muestran a continuacin. Hay que tener en cuenta que, en el robot MultiploN6, los motores estn en direcciones opuestas por lo que asignarles a ambos la mismavelocidad, har que uno avance mientras que el otro retrocede. 68. w w w . r o b o t g r o u p . c o m . a r multiplo68G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Va r i a b l e s e n pr o gr ama c i nEn programacin, una variable es simplemente un espacio de memoria en el que guardamosalgo. Para acceder a ese algo, lo hacemos a travs del nombre que le asignamos a la variablecuando la declaramos. Luego, podemos modificar el contenido de ese espacio de memoriatantas veces como sea necesario. Por ejemplo, si quisiramos hacer una variable querepresente la velocidad de los motores, podramos declararla de la siguiente manera:float speed = 100;Esta declaracin, al igual que las declaraciones de las funciones, est formada por variaspartes:1. La palabra reservada float indica que lo que vamos a guardar en el espacio de memoriaque llamamos speed ser un nmero de real (float viene de punto flotante, que es como sellama a los nmeros reales en programacin debido a la forma en que trabaja el procesador).Es indispensable que, al declarar una variable, se indique su tipo. O sea, siempre hay que decirqu tipo de dato se va a guardar en la memoria. Los tipos de datos que nos interesarn porahora son los siguientes:Tipo de dato Palabra reservada EjemplosNmero real float 10.5, -100.00Nmero entero int 10, 100, -15Caracter char a, b, cCadena de caracteres string Hello World2. Luego de declarar el tipo de dato que se guardar, se le asigna un nombre. Este nombre eselegido por el programador y puede ser cualquier palabra menos las que son reservadas por elsistema. Es recomendable que el nombre de la variable se relacione con el uso que se le dar,esto ahorrar mucho trabajo cuando haga falta corregir el cdigo escrito ya que nos resultarms fcil saber lo que esta variable debera hacer. En nuestro ejemplo, elegimos el nombrespeed porque esta variable ser usada para asignar velocidad a los motores del robot.3. Por ltimo, a la variable real speed, le asignamos un valor inicial que ser guardado en ellugar de la memoria designado para esta variable. En nuestro caso, el valor de inicio ser 100.Ahora que tenemos nuestra variable declarada e inicializada, podemos empezar a trabajar conella. Empecemos cambindole el valor, esto lo haremos simplemente escribiendo el nombre dela variable e igualndola al nuevo nmero.speed = 0; 69. w w w . r o b o t g r o u p . c o m . a r multiplo69G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Es importante notar que ya no necesitamos decir qu tipo de dato guarda la variable, solonecesitamos su nombre. Y, por ltimo, podemos usar esta variable dentro de una funcin quenecesite nmeros reales, como se muestra a continuacin:float speed = 100;motor0.setClockwise(false);motor0.setSpeed(speed);motor1.setSpeed(speed);delay(1000);Tambin podemos modificar el valor de la variable en funcin del valor que tiene. Por ejemplo,si queremos que cada cierto tiempo la variable speed aumente en 10, lo haremos de lasiguiente manera:speed = speed + 10;Al escribir esta lnea de cdigo, lo que estamos haciendo es asignando a la variable speed, elvalor que tena pero incrementado en 10. Pero para que realmente tenga sentido usar estavariable, haremos uso de otro concepto importante de la programacin: la estructura decontrol while.Las rdenes de un programa son ejecutadas una tras otra por el procesador. Si estasecuencialidad no se pudiese romper, no podramos hacer que el robot tome decisiones. Porejemplo, piense en el caso de un robot que est en otro planeta avanzando en lnea recta yrecolectando piedras para su estudio. Si este robot se encontrara con un obstculo que no lepermitiera avanzar, se volvera intil rpidamente. En cambio, si en su cdigo estuvieseespecificado que, ante cierto tipo de obstculo, el robot detenga su avance y la recoleccin depiedras y luego lo esquive, el robot seguira cumpliendo su misin. Este comportamiento,debera estar especificado en el cdigo del robot. Las estructuras de control nos permitenromper la secuencialidad de un programa para ejecutar otra parte del cdigo que no tiene porqu ser el que le sigue a la orden que se est ejecutando.Ahora bien, una estructura de control como while, se utiliza de la siguiente manera:while(/* CONDICIN */){/* Cdigo que se repite mientras la condicin sea verdadera */}Lo que llamamos condicin puede ser simplemente una ecuacin o expresin matemticaque podamos evaluar como verdadera o falsa. Por ejemplo, si sabemos que nuestra variablespeed actualmente almacena el valor 100, y escribimos las siguientes condiciones,tendremos los siguientes resultados:Condicin Valor de verdad de la ecuacin Resultado(speed = 100) Verdadero (TRUE) Se ejecuta el cdigo entre llaves.(speed < 50) Falso (FALSE) No se ejecuta el cdigo.(speed > 0) Verdadero (TRUE) Se ejecuta el cdigo.(speed 0){motor0.setSpeed(speed);motor1.setSpeed(-speed);delay(1000);speed = speed 10;}Analicemos el cdigo completo lnea por lnea para entenderlo bien.float speed = 100;Con esta lnea de cdigo generamos un espacio en memoria en el que guardaremos nmerosreales. Al nmero real almacenado lo llamamos speed y lo referenciamos por su nombre.Inicialmente, este espacio de memoria tiene el valor 100.while(speed > 0)Mientras la variable speed contenga un valor mayor que cero, se ejecutar el cdigoencerrado entre llaves. Cuando el valor de dicha variable sea igual o menor que cero, el cdigoentre llaves no se ejecutar. Este cdigo ser salteado y se ejecutar la lnea que lo preceda.motor0.setSpeed(speed);Al motor izquierdo le asignamos como potencia el valor almacenado en speed. Si este valores igual a 100, el motor avanzar a mxima velocidad, si el valor es igual a 0, el motor sefrenar.motor1.setSpeed(-speed);Al motor derecho le asignamos la potencia almacenada en la variable speed pero con unsigno negativo adelante. O sea, si la variable speed vale 100, el motor derecho avanzar convelocidad -100.delay(1000);Dejamos de ejecutar rdenes nuevas por 1 segundo para que se vean los resulados. 71. w w w . r o b o t g r o u p . c o m . a r multiplo71G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5speed = speed 10;Le restamos 10 al valor almacenado en speed. As, tendremos que cada vez que el cdigoejecute las rdenes entre llaves, la variable se achicar en 10. Llegar un momento en que lavariable valdr 0, entonces, este cdigo no se ejecutar ms porque la condicin dentro delwhile ser falsa.Ejemplo 2.1: El cdigo completo para que el robot decremente su velocidad.void setup(){motor0.setClockwise(false);float speed = 100;while(speed > 0){motor0.setSpeed(speed);motor1.setSpeed(-speed);delay(1000);speed = speed 10;}}void loop(){} 72. w w w . r o b o t g r o u p . c o m . a r multiplo72G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5C d i g o e n Mi n ib l o q de l e j emp l o 2 . 1Para realizar esta misma actividad utilizando el entorno Minibloq, tenemos que agregar losbloques que se muestran a continuacin. 73. w w w . r o b o t g r o u p . c o m . a r multiplo73G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d 2 . 4 : g i r o c o n d i s t i nt a s v e l o c i d a de sEsta actividad es parecida a la anterior, pero en este caso, queremos que el robot luego dellegar a su velocidad mxima, empiece a frenar hasta detenerse. Para esto, escribimos elsiguiente cdigo:Actividad 2.4: hacer que el robot gire con distintas velocidades.void setup(){float speed = 0;motor0.setClockwise(false);while(speed < 100){motor0.setSpeed(speed);motor1.setSpeed(-speed);delay(1000);speed = speed + 10;}while(speed > 0){motor0.setSpeed(speed);motor1.setSpeed(-speed);delay(1000);speed = speed - 10;}}void loop(){} 74. w w w . r o b o t g r o u p . c o m . a r multiplo74G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5E x p l i c a c i n de l c d i go d e l a ac t i v i d a d 2. 4Si bien una parte del cdigo es igual a la escrita ms arriba, vamos a analizar las partes msimportantes y los cambios que realizamos en la lgica del programa.float speed = 0;Con esta lnea de cdigo generamos un espacio en memoria en el que guardaremos nmerosreales. Al nmero real almacenado lo llamamos speed y lo referenciamos por su nombre.Inicialmente, este espacio de memoria tiene el valor 0. Esta lnea fue modificada ya que ahorael robot empezar frenado y aumentar su velocidad hasta el mximo. Luego se reducir lamisma hasta llegar a cero nuevamente.while(speed < 100)Mientras la variable speed contenga un valor mayor que 100, se ejecutar el cdigoencerrado entre llaves. Cuando el valor de dicha variable sea igual o menor que 100, el cdigoentre llaves no se ejecutar. Este cdigo ser salteado y se ejecutar la lnea que lo preceda.Este es otro de los cambios realizados ya que el lmite que tendr que alcanzar la variable estavez ser una cota superior y no una inferior.motor0.setSpeed(speed);Al motor izquierdo le asignamos como potencia el valor almacenado en speed. Si este valores igual a 100, el motor avanzar a mxima velocidad, si el valor es igual a 0, el motor sefrenar.motor1.setSpeed(-speed);Al motor derecho le asignamos la potencia almacenada en la variable speed pero con unsigno negativo adelante. O sea, si la variable speed vale 100, el motor derecho avanzar convelocidad -100.delay(1000);Dejamos ejecutar rdenes nuevas por 1 segundo para que se vean los resulados.speed = speed + 10;Le sumamos 10 al valor almacenado en speed. As, tendremos que cada vez que el cdigoejecute las rdenes entre llaves, la variable se incrementar en 10. Llegar un momento enque la variable valdr 100, entonces, este cdigo no se ejecutar ms porque la condicindentro del while ser falsa. Este es otro de los cambios que hay que introducir en el cdigoya que este determinar en qu direccin crecer el valor almacenado en la variable. 75. w w w . r o b o t g r o u p . c o m . a r multiplo75G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5while(speed > 0)Una vez que haya terminado de ejecutar el primer ciclo, el programa deber ejecutar elsegundo. En este la velocidad empezar a disminuir hasta que el robot se detenga. Es por estarazn que comparamos a la variable que guarda la velocidad con cero. Cuando esta condicinsea verdadera, el ciclo se dejar de ejecutar y los motores se detendrn.motor0.setSpeed(speed);motor1.setSpeed(-speed);delay(1000);speed = speed - 10;Dentro del bucle, asignamos a ambos motores la velocidad representada por la variable speed.En un caso con un signo negativo para que avance en direccin contraria al otro motor. Luego,la variable speed ser decrementada en cada ejecucin del ciclo hasta llegar a valer 0, en cuyocaso la condicin del while ser falsa y, por lo tanto, no se ejecutar ms este cdigo. 76. w w w . r o b o t g r o u p . c o m . a r multiplo76G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5C d i g o e n Mi n ib l o q de l a a c t i v i d a d 2. 4Para realizar esta misma actividad utilizando el entorno Minibloq, tenemos que agregar losbloques que se muestran a continuacin. 77. w w w . r o b o t g r o u p . c o m . a r multiplo77G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Va r i a b l e s e n Ar d u i n o 0 0 2 2Como vimos anteriormente, el entorno de programacin que utilizan los robots Multiplo es elArduino 0022. Una de las razones por las que se eligi este entorno es por la gran cantidad deinformacin que hay disponible para sus usuarios. Particularmente, en el sitio de Arduino,podemos encontrar una excelente gua de referencia que nos servir para consultar distintostemas referidos a la programacin con Arduino 0022. A continuacin, vamos a ver cmo puedeservirnos dicha gua de referencias, para lo cual, vamos a ingresar en el sitio oficial deArduino:http://www.arduino.cc/Una vez en el sitio oficial, vamos a la seccin Reference, tal como se muestra en la figura: 78. w w w . r o b o t g r o u p . c o m . a r multiplo78G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5En esta seccin encontramos referencias de programacin del entorno Arduino 0022. Muchasson propias del entorno, mientras que otras son propias del lenguaje C/C++. Por ejemplo, enprimer lugar encontramos explicaciones acerca de las funciones setup() y loop(), las cuales sonindispensables a la hora de programar con este entorno, pero no lo son cuando se programaen otros entornos que tambin usan el lenguaje C/C++. En general, cuando se programa eneste lenguaje, la funcin principal se llama main() y es indispensable escribirla, ya que ellamarcar el punto de inicio del programa. A continuacin se muestra una figura que indicadnde encontrar informacin detallada acerca de la funcin setup():Una vez dentro de la seccin de la funcin, podremos encontrar una pequea explicacinacerca de la funcin y un ejemplo de cmo utilizarla. En este caso, puede no ser de tantaayuda, pero en otros casos, consultar esta gua de referencia podr ayudarnos en lainvestigacin de funciones que salen del alcance del presente curso y que pueden resultarinteresantes para algn proyecto particular que tengamos. 79. w w w . r o b o t g r o u p . c o m . a r multiplo79G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Volviendo a la gua de referencia, vemos que la misma est divida en tres columnas. Laprimera se llama Structure, ya que contiene informacin acerca de temas que son decarcter estructural, como por ejemplo las funciones que acabamos de nombrar. La terceracolumna se llama Functions y es la que describe distintas funciones que estn disponibles enel entorno. Algunas de ellas las usaremos ms adelante en este curso. En medio de estas doscolumnas, tenemos una llamada variables que es la que nos interesa en este momento.Dentro de esta columna, tenemos tres clases de variables nombradas como Constants, DataTypes y Conversion. La primera de ellas nos ser de mucha utilidad ms adelante, cuandousemos algunas funciones propias del entorno. La segunda, nos ampla la informacin acercade los tipos de datos que utilizamos y, adems, nos describe otros que no usamos, como porejemplo, boolean, unsigned int, long, byte, etc. Es interesante analizar algunos de estos tiposy ver qu diferencias tienen con los vistos hasta aqu. Por ejemplo, el tipo de dato unsignedint es igual al tipo de datos int con la diferencia de que no soporta nmeros negativos. Porlo tanto, trabajar con este tipo de datos ser como trabajar con nmeros naturales. Un datoimportante para tener en cuenta es el siguiente, los nmeros enteros son almacenados ensecciones de memoria de 2 bytes de tamao, lo que equivale a 16 bits. Debido a esto, sepodrn utilizar nmeros enteros mayores o iguales a -32768 y menores a 32768. Luego,utilizando valores del tipo unsigned int, podremos utilizar nmeros mayores o iguales a 0 ymenores a 65536.Otro tipo de dato interesante es el llamado boolean. Este puede tener solamente dosvalores: true (verdadero) o false (falso). Pensemos en el ejemplo donde utilizamos unacondicin que poda ser verdadera o falsa. En ese caso, podramos escribir simplemente truedentro de los parntesis y as haramos que la condicin fuese siempre verdadera, obligando alprograma a ejecutar el cdigo encerrado entre llaves. Tal ejemplo quedara de la siguientemanera:while(true){/* Cdigo del ciclo */}Mejor an sera crear una variable booleana a la que le podramos asignar el valor true ofalse dependiendo del momento. Luego, esa variable sera la condicin dentro de losparntesis. En el ejemplo que se muestra a continuacin, se crea una variable llamadaejemplo y se le da el valor true. De esta manera el programa ingresar en el ciclo laprimera vez pero luego cambiar el valor a false con lo cual, no volver a entrar al ciclo.boolean ejemplo = true;while (ejemplo){// Cdigo del cicloejemplo = false;}Por ltimo, en la columna de variables de la pgina de referencias de Arduino, encontramos laseccin Conversion. Esta seccin muestra formas de convertir una variable de un tipo en unavariable de otro tipo. Esto se logra anteponiendo al nombre de la variable existente la palabraque se utilizara para declararla en otro caso. 80. w w w . r o b o t g r o u p . c o m . a r multiplo80G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5E j e r c i c io s d e in t e g r a c i nCmo hara para que el robot empiece sin girar e incremente su velocidad hasta llegar a 100y luego la decremente hasta llegar de nuevo a 0?Ac t i v i d a de s p a r a e l a l umn oRelacin entre velocidades de motoresCompletar la siguiente tabla con los valores que le asignara a cada motor para que el robotrealice la trayectoria descripta en la columna objetivo.Centro de giro Motor 0 Motor 1En la rueda izquierdaCerca, a la derecha del robotLejos, a la izquierda del robotCmo dibujar la letra NCompletar las rdenes escritas a continuacin para que el robot dibuje la letra N tal como lomuestra la figura. No te olvides de tener en cuenta que el robot tiene que frenar al final delrecorrido.motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( );delay( );motor0.setSpeed( );motor1.setSpeed( ); 81. Radio de giroCentro de girow w w . r o b o t g r o u p . c o m . a r multiplo81G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a de s de i n t e g r a c i n c on r o bo t sDibujar una figura en forma de 8Usando las rdenes vistas para el manejo de los motores del robot: Cmo hara para que elrobot dibuje un ocho como el de la siguiente figura?Dibujar un cuadradoDibujar, usando las rdenes aprendidas para motores, un cuadrado como el que se muestra enla siguiente figura.Gira sobre su propiocentro 90.El robot avanza durante1 segundo. 82. w w w . r o b o t g r o u p . c o m . a r multiplo82G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d d e ap l i c a c i n a l a f s i c aUsando el cdigo de la actividad 2.1, podemos estudiar el concepto de velocidad. Teniendo encuenta que la misma se mide dividiendo la distancia recorrida por un mvil por el tiempo quetarda, requeriremos que los alumnos asignen una velocidad determinada a ambos motores ymidan la distancia recorrida en un lapso de tiempo elegido. Luego, completar la siguiente tablacon los valores obtenidos.Potenciaasignada a losmotoresDistancia recorridaTiempo derecorridoVelocidad406080100Pr eg u n t a s p a r a i n v e s t i g ar1- Investigar en qu otros dispositivos o juguetes se encuentra este tipo de motores.2- Dependen estos dispositivos o juguetes de un procesador central para manejar los motorescomo en el caso de los robots?3- Investigar qu otros tipos de motores existen y en qu se diferencian de los que usan losrobots. 83. w w w . r o b o t g r o u p . c o m . a r multiplo83G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 53. ComunicacionesNivel: bsico/intermedio.Ob j e t i v o s Que los alumnos comprendan la interaccin existente entre la computadora y el robot. Que tambin puedan establecer comunicaciones entre el robot y la computadora atravs del software.Al g o d e t eo r a d e c omu n i c a c i o n e sCuando hablamos de comunicaciones tenemos que tener en cuenta que en toda comunicacindeberan participar un transmisor, un medio y un receptor. En el caso de nuestros robots, elpapel del transmisor y del receptor lo puede tomar tanto la computadora como el robot y elmedio ser un cable o el mismo aire en caso de estar usando mdulos Bluetooth, ya que estosson inalmbricos. Por otro lado, tambin es importante diferenciar la comunicacin analgicade la digital. La analgica, es la que llevamos a cabo cuando hablamos y su principalcaracterstica es que se puede representar por medio de funciones matemticas continuas. Ladigital, en cambio, se representa por medio de valores discretos. Por ejemplo, con ceros yunos como en el caso de las computadoras.En el caso de nuestros robots, al comunicarse con la computadora lo hacen usando solo losdgitos 0 y 1 lgicos. Estos dos valores, internamente, son representados por dos voltajes: 0voltios (ausencia de tensin) para representar un 0 lgico, y 5 voltios para representar un 1lgico. La siguiente figura ejemplifica la transmisin de informacin entre la computadora y elrobot a travs de un cable. Abajo se muestran los bits transmitidos representados por unaseal elctrica que oscila entre los 0 y los 5 voltios.En resumen, el procesador transmite solo ceros y unos que son traducidos por la computadoraa voltajes elctricos como 0 voltios o 5 voltios. Luego, el robot recibe estos voltajes y losvuelve a transformar en ceros y unos. Internamente, el procesador usar estos dos dgitospara realizar todas sus tareas. Estos ceros y unos son llamados bits y comnmente sonreunidos en grupos de ocho llamados Bytes. Como vimos antes, cuando declaramos unnmero entero en nuestro entorno, usamos un espacio de memoria de 2 Bytes paraalmacenarlo. Por lo tanto, cada nmero entero que utilizamos est formado por 16 bits (2Bytes x 8). 84. w w w . r o b o t g r o u p . c o m . a r multiplo84G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Cada posicin dentro el Byte representa una potencia de 2. La siguiente tabla representa laestructura de un Byte. En la primera fila se detalla el nmero de posicin de cada bit, esimportante notar que se empieza a contar por la posicin cero. En la segunda fila se muestrala potencia de 2 que corresponde a dicha posicin. Por ltimo, en la tercera fila, se muestra elresultado de multiplicar un bit con valor 1 por la potencia de 2 de la posicin en la que seencuentra.Posicin 7 Posicin 6 Posicin 5 Posicin 4 Posicin 3 Posicin 2 Posicin 1 Posicin 027 26 25 24 23 22 21 20128 64 32 16 8 4 2 1Luego, el valor mximo que podemos expresar usando un Byte es:128 + 64 + 32 + 16 + 8 + 4 +2 + 1 = 255. Este valor es muy comn verlo, por ejemplo,cuando se configura una red, ya que las direcciones IP que se utilizan estn formadas por 4nmeros de 8 bits, lo que da una longitud total de 32 bits para cada direccin IP.Siguiendo con el tema comunicaciones, las podemos clasificar tambin segn el uso del medio:comunicacin en paralelo y comunicacin serial. En el caso de la comunicacin serial, los bitsse transmiten uno atrs del otro, como si fuera una fila de ceros y unos. Este es el tipo decomunicacin que usan nuestros robots tanto cuando estn conectados con conectores RS-232o con USB. En la comunicacin en paralelo, los bits viajan en rfagas uno al lado del otro,como si fuera una autopista con varios carriles por los que circulan autos en la mismadireccin.En el caso particular de nuestros robots, las comunicaciones se pueden realizar a travs deBluetooth o a travs de USB. Bluetooth es un protocolo para redes inalmbricas, lo quesignifica que es un conjunto de reglas que definen la comunicacin entre el emisor y elreceptor. Luego, cualquier dispositivo que respete estas reglas, podr comunicarse con undispositivo Bluetooth. Sin embargo, estas reglas solo se aplican a la transmisin fsica delmensaje.Otra posibilidad para realizar la comunicacin entre robot y computadora, es que se loscomunique a travs de un cable con conectores USB (Universal Serial Bus). Esta tecnologa fuepensada especialmente para comunicar perifricos con computadoras, como por ejemplocmaras digitales o discos de almacenamiento externo. 85. w w w . r o b o t g r o u p . c o m . a r multiplo85G u i d e . R o b o t i c s - 1 . E S P . 2 0 1 2 0 1 0 5Ac t i v i d a d 3 . 1 : He l l o wor l d ! En esta primera actividad de c