Professional Documents
Culture Documents
Gobernacin de Arauca
Agradecimientos:
Agradezco al doctor Luis Eduardo Ataya Arias Gobernador de Arauca. Y al doctor Jos Orlando Cespedes Garca Secretario de Educacin Departamental por apoyar el programa USO Y APROVECHAMIENTO DE NUEVAS TECNOLOGAS EN ROBTICA Y RECICLAJE TECNOLGICO. Igualmente al director del proyecto Jos Flix Susa Lizarazo por sus valiosos consejos y por compartir su gran experiencia conmigo, sin la cual no se hubiera logrado obtener los buenos resultados del programa en general. A todas las dems personas que de una u otra manera colaboraron con el desarrollo exitoso del programa. Finalmente a la ingeniera Paola Fernanda Santos le agradezco por sus acertadas opiniones y correcciones hechas a la cartilla. Gracias por poner un poquito de ella misma para que todos apreciaran an ms este trabajo.
Gobernador de Arauca: Luis Eduardo Ataya Arias Secretario de Educacin de Arauca: Orlando Cespedes Garcia Gerente de Nuevas Tecnologas: Roberto Antonio Melo Padilla Autor: Jos Luis Susa Rincn Contratista: Fundaset Diseo Y Diagramacin: Silvia Vargas Ilustraciones: Jos Luis Susa Rincn Revisin de Estilo: Ingeniera Paola Fernanda Santos Director del proyecto: Jos Flix Susa Lizarazo
Mdulo educativo de construccin de robots para estudiantes
8
9 9 9 10
12
Acerca de la cartilla
Esta cartilla fue desarrollada por el ingeniero Jos Luis Susa Rincn, basado en su experiencia obtenida durante el programa USO Y APROVECHAMIENTO DE NUEVAS TECNOLOGAS EN ROBTICA Y RECICLAJE TECNOLGICO, el cual fue coordinado por l mismo y dirigido por el doctor Jos Flix Susa Lizarazo. En esta cartilla encontrarn la manera fcil y rpida de ingresar al mundo de la robtica, contiene informacin til para desarrollar una serie de experimentos divertidos e interesantes sobre los robots y sus partes, igualmente ser una gua didctica para el desarrollo del curso de robtica que podrn dirigir los docentes especializados en el tema que participaron en el programa. Los componentes conceptuales de la cartilla pueden ser divididos en 4 mdulos de aprendizaje: 1. Mdulo de Electrnica digital 2. Mdulo de Programacin 3. Modulo Conociendo Arduino 4. Robtica Cada mdulo ira desarrollndose a medida que se realicen los juegos y los experimentos que soportan toda esta cartilla y que han sido pensados y probados para alcanzar la meta de que un nio entre los 13 y 17 aos aprenda de robtica mvil fcilmente. Al final los nios y jvenes habrn aprendido como construir un robot, entendiendo y usando todas sus partes, podrn luego disear por ellos mismos cualquier tipo de robot posible, o cualquier aplicacin o invento novedoso que en su mente creen usando los conocimientos adquiridos y los materiales con lo que ya disponen. Es importante contar el apoyo de un docente que haya participado en el programa, ya que es necesario hacer complementos tericos en algunos de los experimentos. La cartilla est divida en talleres, y experimentos, cada taller consta de una teora bsica y una serie de experimentos dirigidos y creados para aprender robtica. En la cartilla habrn indicaciones como esta: donde deber hacerse una complementacin terica del tema tratado. Igualmente si el smbolo es el siguiente: se deber complementar la teora con ayuda de exposiciones o ejercicios adicionales. Finalmente tendremos en la cartilla una serie de experimentos a realizar para afianzar los conocimientos en robtica. Se identificarn de la siguiente manera: cada experimento tendr un nmero para hacer ms fcil su ejecucin a la hora de trabajar en clase con los alumnos. No queda ms que decirles BIENVENIDOS al mundo de la robtica, sern participes de la ltima tecnologa en el mundo y ms adelante con esfuerzo y estudio podrn liderar proyectos que cambien el mundo y lo conviertan en un mejor lugar para vivir.
Mdulo Educativo de Construccion de Robots para estudiantes Mdulo educativo de construccin de robots para estudiantes
Introduccin
Echemos una muy rpida mirada al pasado en el que utilizbamos piedras, ramas, pieles y otros materiales para desarrollar pequeos y bsicos utensilios para ayudarnos en nuestras tareas diarias, se pueden imaginar viviendo en esa poca?...cogiendo una piedra para cortar, unindola a un palito para cazar y poder comer?...solo imaginen El mundo fue bueno y nosotros como humanos empezamos a mejorar nuestras primeras invenciones, poco a poco fuimos creando herramientas ms complejas, con el vapor, la plvora, la mecnica y finalmente con la energa elctrica, convertimos un palito y una piedra en mquinas para volar, para nadar como los peces, hasta para ir al espacio! igualmente creamos aparatos para entretenernos, el televisor, el cine, las cmaras, el Xbox, el play station, etc. Finalmente inventamos el computador, el invento moderno que mueve al mundo actual y que junto con nuestra mente nos ha llevado a sobrepasar los lmites humanos. Se dan cuenta que siempre buscamos crear nuevas cosas, las inventamos y las construimos para beneficiarnos y ayudarnos?, siempre desde que usbamos solo palitos y piedras, Se dan cuenta que desde ese tiempo deseamos lo mismo? Nuestra imaginacin se ha dejado llevar y la necesidad de crear ms y mejores cosas para realizar nuestros sueos ha sido tan alta que en nuestros das tenemos mquinas y aparatos que en tiempos pasados parecan sacados de un cuento. La magia no es que no exista, sino que an no la hemos descubierto o inventado, todo es posible en este mundo, solo se necesita paciencia, estudio, mucho tiempo para pensar y permitirnos inventar. La electricidad fue magia en sus primeros das, nadie entenda cmo, ni por qu sala, y mucho menos alguien se imagin algo semejante antes, por eso es razonable pensar que hay cosas an desconocidas por nosotros, que tarde o temprano descubriremos, ser esa magia que ahora nos parece irreal, debemos prepararnos entonces podamos gozar de ella en el futuro y aprovecharla para que todos estemos mejor con los dems y con el medio ambiente. Alguna vez han pensado cmo participar activamente en esta corriente de invenciones? tommonos un tiempo Si su respuesta es No Se tranquilos les dir cmo hacerlo, eso s espero que nadie haya dicho No se puede, porque esa respuesta elimina cualquier solucin y bloquea inmediatamente todo. Entonces creamos en que todo es posible y haremos maravillas. La manera como ustedes comenzarn a inventar es con algo que llaman robots! Y aprendiendo la ciencia que los estudia: La robtica.
Robots mviles
Humanoides
Industriales
Pero bueno, todos estos robots, que tienen en comn para que sean llamados a todos as? Qu los compone y caracteriza?
SENSORES
ACTUADORES
PROCESADOR O MICROCONTROLADOR
INTELIGENCIA ARTIFICIAL
Cables Todos los robots tienen todas o la mayora el grfico de arriba. Adaptador 9v de las partes mostradas enRegulador de Protoboard de volte
Se conecta a una de Son alambres que Este es el elemento las terminales del vienen en diferentesdeber hacer una que le proporcionar El profesor breve explicacin de cada uno de estos elementos, ayudndose adaptador de 9v, colores y tamaos energa a nuestro con el ejemplo del cuerpo humano, los sensores son sentidos, los actuadores nuestros reduce su voltaje para interconectar robot. a 5v para que es nuestro los elementos en el la inteligencia artificial nuestra inteligencia, y nuestro msculos, cerebro puedan protoboard. procesador que controla todo. Qu es un Sensor y qu tipos hay, Qu es un actuador y funcionar los motores. qu tipos hay?, y Qu es la inteligencia artificial?
Complemento Terico:
Animo
Ejercicios aconsejados:
1. Por grupos hacer exposiciones cortas acerca de los diferentes tipos de robot, que cada grupo elija un robot e identifique las partes que lo componen, mostrar videos de ejemplo de cada uno y explicar cul es su utilidad de ellos para las personas o para el mundo. Mini parlante 2. Hacer una discusin sobre los siguientes temas y reconocer Resistencias la importancia de la Leds robtica y su aprendizaje:
Son componentes Esrobot, un pequeo Qu es la robtica, qu es un para qu sirve? Son pequeos electrnicos que parlante, emitepara resolver problemas bombillos emiten que Qu robots simples podramos imaginar en la vida real?, buscar reducen la cantidad sonidos y tiene luces de diferentes personas? Recolectar comida? Detectar intrusos? Qu elementos deberan tener estos robots? de corriente que otros polaridad. colores segun el led. elementos reciben Es importante la robtica para el mundo? Para la gente? Puede ayudar a mejorar nuestra vida? en el circuito.
Luego de entender que es la robtica y que tipos de robots hay y para qu sirven ahora si pasemos a la prctica y empecemos a aprender a construirlos.
SENSORES
PROCESADOR O MICROCONTROLADOR
Ejercicios aconsejados:
Identificar los elementos con ayuda de las imgenes e informacin que se encuentra seguidamente. Los primeros componentes que tenemos son de electrnica:
INTELIGENCIA ARTIFICIAL
Protoboard
Este elemento permite conectar las paticas de los elementos electrnicos para formar circuitos.
Cables de Protoboard
Son alambres que vienen en diferentes colores y tamaos para interconectar los elementos en el protoboard.
Adaptador 9v
Este es el elemento que le proporcionar energa a nuestro robot.
Regulador de volte
Se conecta a una de las terminales del adaptador de 9v, reduce su voltaje a 5v para que puedan funcionar los motores.
Potencimetro
Este elemento es una resistencia que vara su valor al girar la perilla que tiene.
Leds
Son pequeos bombillos que emiten luces de diferentes colores segun el led.
Mini parlante
Es un pequeo parlante, emite sonidos y tiene polaridad.
Resistencias
Son componentes electrnicos que reducen la cantidad de corriente que otros elementos reciben en el circuito.
Cables de Protoboard
Adaptador 9v
Son alambres que Este es el elemento vienen en diferentes que le proporcionar este experimento vamos aa conectar una pila de 1.5 colores yEn tamaos energa nuestro para interconectar robot. a encenderlo pero vamos a voltios AA a un LED y vamos los elementos en el protoboard. guiarnos por el siguiente diagrama electrnico del circuito:
Regulador de volte
Se conecta a una de las terminales del En de este adaptador 9v, experimento vamos a aadir un interruptor reduce su voltaje normalmente abierto NA al circuito anterior como lo a 5v para que puedanvemos en el siguiente diagrama del circuito: funcionar los motores.
Leds
Son pequeos bombillos que emiten Montar el siguiente luces de diferentes colores segun el led.
Mini parlante
parlante, emite circuito en el yprotoboard: sonidos tiene polaridad. Es un pequeo
Resistencias
Son componentes electrnicos que reducen la cantidad de corriente que otros elementos reciben en el circuito.
Complemento Terico:
Vemos que cuando presionamos el interruptor el LED se enciende, ya que estamos cerrando el camino de la corriente para permitir que llegue hasta el LED. El interruptor como est normalmente abierto solo permite el paso de corriente cuando se oprima y se cierre.
Complemento Terico:
Explicar el cdigo de colores de las resistencias, cmo se sabe qu valor tienen segn los colores que tienen pintados.
Interruptor NA
Es un interruptor que esta normalmente abierto, cuando se presiona se cierra, dejando pasar corriente.
Interruptor NC
Es un interruptor que esta normalmente cerrado, cuando se presiona se abre, y detiene el paso corriente.
Vemos que el LED siempre esta prendido, y si oprimimos el interruptor se apagar ya que el interruptor se abrir y no permitir ms el paso de corriente al LED. El interruptor como est normalmente cerrado siempre permite el paso de corriente pero cuando se oprime este interrumpe el paso abriendo el circuito.
Ejercicios aconsejados:
Hacer girar el potencimetro y descubrir como la intensidad de luz del LED cambia. Cambiar el potencimetro de 10k ohmios por el de 250k ohmios y hacer nuevamente la prueba. Luego de repasar los elementos de electrnica bsica ahora veremos los sensores usados comnmente en robtica, pero los aprenderemos a manejar en los experimentos del taller 4:
Sensor de distancia infrarrojo
Es el sensor encargado de medir distancias y arrojar un voltaje segn la distancia que mida.
CNY70
El sensor de proximidad sirve para detectar objetos cercanos a l, si detecta objeto arroja voltaje, sino arroja 0 voltios.
Fotocelda
La fotocelda o fotoresistencia es una resistencia que vara su valor segn la cantidad de luz que reciba.
Fin de carrera
El fin de carrera es un sensor para detectar cuando un objeto choca al sensor. Se cierra o se abre el circuito interno.
10
Tarjeta Arduino
Cable usb
La fotocelda o fotoresistencia es una resistencia que vara su valor segn la Fotocelda cantidad de luz que reciba. La fotocelda o fotoresistencia es una resistencia que vara La cabeza de nuestro robot, el microcontrolador su valor segn la y ejecuta rdenescantidad para que nuestro robot haga de luz que reciba.
El fin de carrera es un sensor para detectar cuando un objeto choca al sensor. Se Fin de carrera cierra o se abre el circuito interno. El fin de carrera es un sensor para detectar cuando un objeto es quien recibe choca al sensor. Se las seales de cierra o se abre el deseemos: lo que nosotros circuito interno.
los sensores
Tarjeta Arduino
Esta es la tarjeta donde est el microcontrolador que Tarjeta Arduino se programa para que funcione nuestro robot. Esta es la tarjeta donde est el microcontrolador que se programa para que funcione nuestro robot.
Cable usb
Con este cable conectaremos nuestra tarjeta Arduino al computador. Cable usb
Con este cable conectaremos nuestra tarjeta Arduino al computador.
Pero nuestro robot no se mover sin estos elementos, los aprenderemos a usar en el taller 5:
Chasis de robot Motores
En este chasis se montarn los elementos del robot y este podr Chasissegn de robot moverse lo programemos.
En este chasis se montarn los elementos del robot y este podr moverse segn lo programemos.
El chasis contiene dos motores DC que hacen girar las ruedas del robot. Motores
El chasis contiene dos motores DC que hacen girar las ruedas del robot.
Controlador de motores
Este chip sirve para manejar los voltajes de los motores, ya que Controlador no se conectar depueden motores directamente a la tarjeta arduino. Este chip sirve para manejar los voltajes de los motores, ya que no se pueden conectar directamente a la tarjeta arduino.
11
Experimento 5: Conectando la tarjeta Arduino al computador con ayuda del cable USB.
Lo primero que debemos hacer es tener a la mano el programa de Arduino que podemos descargar desde la pgina, usaremos la versin 0018 en este caso: http://arduino.cc/es/Main/Software1 O si tienen el programa ya en cd o en algn otro lugar buscaremos en su interior una carpeta con el nombre DRIVERS, en esta carpeta es donde estn ubicados los controladores para que funcione la tarjeta con el computador.
Complemento Terico:
Con el profesor identificar y definir que son los puertos digitales, anlogos, y de alimentacin. Qu sale por un puerto digital?, Qu recibe un puerto anlogo?, Cmo se transforma una seal real en un valor numrico que podemos usar en nuestro micro para hacer nuestros programas?, Qu es poner un voltaje en un pin de la tarjeta, poner en HIGH, enviar un 1 a un pin?. Dnde estn los pines de alimentacin 5v y GND?
Mdulo educativo de construccin de robots para estudiantes Verificar que tenemos la carpeta drivers.
1 En esta pgina encontrarn tutoriales, ejemplos y muchas ayudas para aprender ms sobre Arduino, no duden en ir a visitarla
12
Si poseen una buena conexin a internet y tiene el computador actualizado con solo conectar la tarjeta el sistema operativo Windows buscar el controlador y se instalar el Arduino automticamente, si no es el caso veremos el procedimiento a realizar para instalar los drivers en un sistema operativo Windows XP, si requieren ms ayuda de como instalar los drivers en otros sistemas vayan a la siguiente direccin: http://arduino.cc/es/Guide/HomePage
Le decimos Instalar desde una lista o ubicacin especifica (avanzado) y damos clic en siguiente:
Finalmente para verificar que todo est en orden, hacemos clic derecho en el icono de mi PC que generalmente est en el escritorio, seleccionamos propiedades luego seleccionamos la pestaa Hardware y luego damos clic donde dice Administrador de Dispositivos:
13
Para la reinstalacin debemos hacer clic derecho donde se presenta el icono con el conflicto y hacemos clic en propiedades, luego en actualizar controlador y hacemos nuevamente los pasos iniciales que acabamos de mostrar.
Experimento 6: En este experimento vamos a comenzar a utilizar la tarjeta Arduino para encender un LED o un mini parlante.
Vamos a hacerlo funcionar por primera vez. Que se haga la luz!...prendiendo un LED. Lo primero que debemos hacer es abrir el programa de Arduino que podemos descargar desde la pgina: Hacemos click en el signo mas (+) donde dice controladores de bus serie universal (USB), y verificamos que el icono donde dice USB Serial Converter esta tal como muestra la imagen siguiente: http://arduino.cc/es/Main/Software2 O si tienen el programa ya en cd o en algn otro lugar podemos abrirlo:
Abrir el programa y tendremos que seleccionar el tipo de tarjeta con la que estamos trabajando, debemos seguir este proceso:
Si todo est en orden podemos empezar a utilizar Arduino en nuestro Pc sin inconvenientes. En caso tal que aparezca un icono con un smbolo amarillo encima debemos reinstalar los drivers:
Mdulo educativo de construccin de robots para estudiantes
2 En esta pgina encontraran tutoriales, ejemplos y muchas ayudas para aprender ms sobre Arduino, no duden en ir a visitarla
14
1. Ir a Menu tools en la parte superior del programa que acabamos de abrir 2. Pasar el mouse donde dice board y de desplegar una lista 3. Hacer clic donde dice Arduino Diecimila, Duelminanove, or Nano w/ AT Mega 168
6. Luego de que automticamente se abra una nueva ventana se debe verificar que el cdigo est bien escrito haciendo clic en la flecha Verify (compilacin del cdigo o verificacin de sintaxis)
8. Verificar que se haya programado correctamente: 4. Ir a Men tools -> Serial port -> Elegir Puerto activo (ejemplo: COM5) En caso tal que no aparezcan puertos COM es posible que la tarjeta Arduino haya quedado mal instalada. 9. Se debe conectar un LED tal como muestra la siguiente imagen :
10.Y eso es todo! vemos como el LED prende y apaga sucesivamente, podemos cambiar el LED por un mini parlante para escuchar un sonido intermitente. 11.Pueden cambiar el valor que est en la funcin delay(1000) por un valor ms grande como 4000, y luego por uno ms pequeo como 200. Qu pasa? Que hace esta funcin delay?
15
Complemento Terico:
En este punto es necesario que el profesor haga la introduccin terica sobre programacin con la ayuda del cdigo Blink para prender un LED. Deber ensearse sobre qu es un algoritmo y un programa, cuales son las 3 partes fundamentales de un programa (variables, funciones y funcin principal main que en Arduino es Loop), explicar que es la Sintaxis de un cdigo, que es un comentario y que tipos de variables podemos usar.
void loop(){ // Prender el led enviando // 5 volios por el pin 13 ledPIN digitalWrite(ledPin, HIGH); delay(1000); // esperar un segundo
// Apagar el led enviando //0 voltios por el pin 13 ledPIN digitalWrite(ledPin, LOW); delay(1000); } // esperar un segundo
En este cdigo vemos funciones especiales que usa Arduino para poner voltaje en sus pines como la funcin digitalWrite(nmero de pin, LOW/HIGH, ), para poner 5 voltios en un pin y prender el LED que tenemos conectado escribimos digitalWrite(ledPin, HIGH); La funcin delay() si se dieron cuenta sirve para hacer una pausa en el programa, es decir, se congela el programa y no se ejecutan ms instrucciones, por eso en el cdigo de Blink cuando prendemos el LED y hacemos una espera de 1 segundo el LED permanece en ese estado, cuando acaba la espera y la nueva instruccin se ejecuta, el LED se apaga y lo dejamos en este estado por 1 segundo ms, antes de volver a encenderlo. Como se mencion hace un momento la funcin Loop() repite el cdigo indefinidamente, en este ejemplo prende y apaga el LED repetidamente. A medida que vayamos realizando ms experimentos veremos algunas otras funciones especiales de Arduino.
Ejercicios aconsejados:
Los nios deben desarrollar un algoritmo para hacer que uno de sus compaeros que debe hacer de robot, pueda llegar a un lugar del saln partiendo de otro punto. Definir las reglas y las rdenes para que el robot pueda llegar al lugar deseado. Hacer que los nios respondan las siguientes preguntas luego de la clase terica, uno responde y otro lo corrige:
Qu es un programa, para que sirve, en que lo vamos a utilizar? Cmo se escribe un programa, y Qu es un lenguaje de programacin? Qu es un algoritmo? Para qu sirve crear un algoritmo? Las partes de un programa: Qu es y para qu sirve una variable, en qu forma la usaremos, qu es un tipo de variable?, Qu operaciones podemos hacer con los datos o variables, sumar, restar, multiplicar, operaciones lgicas, comparativas, etc.?
16
Las partes de un programa: Qu es y para qu sirve una funcin, en qu forma la usaremos? Las partes de un programa: Qu es y para qu sirve la funcin principal, en qu forma la usaremos? Qu usamos para programar: las herramientas con las que disponemos son, FOR, WHILE, IF, IF ELSE, SWITCH, para qu nos sirven en nuestros programas?
El siguiente Cdigo es con el que se programar la tarjeta Arduino, se debe copiar en una nueva ventana de programa, compilar (tringulo izquierdo verify) y programar (flecha derecha upload):
Cdigo:
/**************************************************************/ // Creado por Jos Luis Susa - 2010 /*variable que guarda los 4 nmeros donde estarn conectados los 4 LEDs */ int cadenaLeds[ ]={6,7,8,9}; /*Declaracin de la variable que guarda el n del PIN al que se conecta el pulsador*/ int puls=5; /*tiempo es la variable que guarda el valor de la espera que usaremos con la funcin delay*/ int tiempo=200; /*La variable n es el contador en el FOR*/ int n=0; void setup (){ for(n=0;n<4;n++){ /*Configuracin de los pines para los 4 LEDs como salidas*/ pinMode(cadenaLeds[n],OUTPUT); } /*Configuracin del PIN puls como entrada*/ pinMode(puls,INPUT); } void flash(){ /*esta function flash prende los 4 LEDs*/ for(n=0;n<4;n++){ digitalWrite(cadenaLeds[n],HIGH); } delay(tiempo); for(n=0;n<4;n++){ digitalWrite(cadenaLeds[n],LOW); } delay(tiempo); } void loop(){ /*Condicin que se ejecuta si detecta se presiona el pulsador*/ if(digitalRead(puls)==HIGH){ /*se llama a la funcin flash para prender LEDs*/ flash(); } } /**************************************************************/
Explicacin:
En este experimento se conecta un interruptor NA al pin 5 de la tarjeta Arduino de tal forma que sea la entrada del sistema para determinar cundo encender los 4 LEDs conectados a los pines 6, 7, 8, y 9 por medio de sus resistencias. Cada vez que el interruptor (normalmente abierto) es presionado, el pin 5 recibe una seal de 5 voltios y esto enciende los LEDs.
17
Complemento Terico:
Se debe analizar y entender cmo acta la variable cadenaLed[], explicar cmo actan las variables tipo arreglo como esta. Cmo se usa la variable cadenaLed[] en la sentencia FOR. Se debe analizar y entender cmo acta la funcin flash, cmo se usa la funcin en el programa, para que usamos una sentencia FOR y la condicin IF, cmo es la sintaxis te estas sentencias? Cmo se relacionan las tablas de verdad, con la electrnica fsica, los 1 y 0 con las tablas de verdad, para qu me sirven (generacin condiciones IF y ejecucin de acciones dependientes de estas). Qu hace la funcin digitalRead? Para que la usamos en este cdigo?
Cdigo:
/**************************************************************/ // Creado por Jos Luis Susa - 2010 /*variable que guarda los 4 nmeros donde estarn conectados los 4 LEDs*/ int cadenaLeds[ ]={6,7,8,9}; /*n de la entrada analgica a la que va conectado el potencimetro*/ int pot=0; /*La variable n es el contador en el FOR*/ int n=0; /*variable que guarda la lectura de la seal en la entrada*/ int medida=0; /*no es necesario configurar las entradas analgicas, siempre son entradas*/ void setup(){ for(n=0;n<4;n++){ pinMode(cadenaLeds[n],OUTPUT); } } void loop(){ /*Guardamos el valor de la entrada analgica en la variable medida*/ medida=analogRead(pot); /*la seal analgica est entre 0 y 1024. La dividimos en 4 partes.*/ if(medida<1024/4){ /*se enciende el primer LED si la seal est en el primer cuarto*/ digitalWrite(cadenaLeds[0],HIGH); /*los dems se apagan para que cuando la seal disminuya no se queden encendidos*/ digitalWrite(cadenaLeds[1],LOW); digitalWrite(cadenaLeds[2],LOW); digitalWrite(cadenaLeds[3],LOW); } /*seal en el segundo cuarto, 2 LEDs encendidos*/ if((medida>=1024/4)&&(medida<1024/2)){ digitalWrite(cadenaLeds[0],HIGH); digitalWrite(cadenaLeds[1],HIGH); digitalWrite(cadenaLeds[2],LOW); digitalWrite(cadenaLeds[3],LOW); } /*seal en el tercer cuarto, 3 LEDs encendidos*/ if((medida>=1024/2)&&(medida<1024*3/4)){ digitalWrite(cadenaLeds[0],HIGH); digitalWrite(cadenaLeds[1],HIGH); digitalWrite(cadenaLeds[2],HIGH); digitalWrite(cadenaLeds[3],LOW); } /*seal en el ltimo cuarto, 4 LEDs encendidos*/ if(medida>=1024*3/4){ digitalWrite(cadenaLeds[0],HIGH); digitalWrite(cadenaLeds[1],HIGH); digitalWrite(cadenaLeds[2],HIGH); digitalWrite(cadenaLeds[3],HIGH); }
Ejercicios aconsejados:
Hacer que las luces se prendan y apaguen de manera intercalada cuando se oprima el pulsador (estilo auto fantstico).
} /**************************************************************/
Mdulo educativo de construccin de robots para estudiantes
18
Explicacin:
En este experimento se aprecia cmo puede incluirse un componente anlogo (potencimetro) para controlar segn su valor cual debe ser la accin a ejecutar. En este caso el valor mximo de 5 voltios encender todos los LEDs en cambio de este voltaje mximo solo encender 1, a medida que aumente el voltaje se irn encendiendo cada uno de los LEDs hasta que todos estn prendidos. En el montaje usamos una resistencia de 330 ohmios (naranja naranja cafe), una fotocelda y entre estas sacaremos un cable para llevar el voltaje variable de la fotocelda al pin anlogo 0 de la tarjeta Arduino:
Complemento Terico:
Cmo hacemos la lectura del valor del potencimetro? Para qu sirve la funcin analogRead().
Cdigo:
/**************************************************************/ //Creado por Jos Luis Susa - 2010 //Entrada donde se conecta el sensor int sensorPin = 0; //Salida digital donde se conecta un LED o una bocina int ledPin = 13; //Variable para guardar el valor medido del sensor int sensorValue = 0; void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); //inicializacin serial para mostrar datos en la pantalla Serial.begin(9600); } void loop() { int distanciaCm; // la lectura del sensor va de 0 a 500 aproximadamente sensorValue = analogRead(sensorPin); if(sensorValue>80){ //si el valor medido es > 80 detecta luz // se enciende la salida ledPin digitalWrite(ledPin, HIGH); }else{ // se pone a cero la salida ledPin digitalWrite(ledPin, LOW); } //imprimimos en pantalla el valor medido Serial.print (\nValor Medido:); Serial.print (sensorValue); } /**************************************************************/
19
Explicacin:
En este montaje se recibe una seal anloga por el pin 0 de Arduino, y se visualiza una salida digital por el pin 13. El rango para que encienda o apague el LED depender de las necesidades de uno como programador, dependiendo de la cantidad de luz captada, modificaremos a conveniencia el valor 80 que est en el IF por cualquier otro que deseemos que se ajuste a lo que queremos, el voltaje de salida enviado por la fotocelda ser menor si la esta no recibe luz, ya que su resistencia interna aumenta tanto que se aproxima a un circuito abierto donde no conduce corriente. Se usa una funcin Serial.print que sirve para visualizar en pantalla lo que deseemos, en este caso imprimimos en pantalla la frase Valor Medido y luego imprimimos el valor que tiene la variable sensorValue, el signo \n sirve para generar una nueva lnea, como cuando damos Enter en un teclado. Para ver estos valores en la pantalla del computador, damos clic en el icono monitor del puerto serial (serial monitor): Podemos usar los dos interruptores al tiempo, por ejemplo si conectamos un LED al interruptor NC, este permanecer encendido siempre, a menos que el interruptor sea oprimido, si queremos que el robot retroceda apenas reciba una seal cuando el NA se cierre, estaremos logrando dos efectos diferentes presionando el sensor, apagaremos el LED y haremos que nuestro robot retroceda de forma simultnea. Igualmente los fines de carrera son altamente utilizados para controlar los movimientos de algunos motores, si un motor tiene unido una pequea barra, cuando este gire la barra girara, as si se coloca un fin de carrera de tal manera que luego de cierto giro del motor se toque el sensor con la barra, es posible programar nuestra tarjeta para que detengamos el motor cuando esto suceda y cambiarle el sentido de giro, si colocamos un segundo sensor fin de carrera al otro lado, y hacemos lo mismo, lograremos que el motor se encienda haga girar la barra a un lado hasta tocar el primer sensor y luego regrese hasta que choque con el segundo y vuelva a cambiar el giro. De esta manera lograremos controlar el movimiento de un motor al controlar su giro mximo. El experimento siguiente veremos como es el funcionamiento de este sensor, conectando dos LED como muestra el siguiente diagrama:
Ejercicios aconsejados:
Imprimir en pantalla el valor medido multiplicado por 2, Cmo haramos que la funcin Serial.print() muestre este nuevo valor?.
20
Cdigo:
/*****************************************************/ // Creado por Jos Luis Susa - 2010 int finCarrera=7; //Declaracin de la variable que guarda el n del PIN al que se //conecta el fin de carrera int pinLed =13; void setup (){ //pin donde se conecta el LED pinMode(pinLed,OUTPUT); //Configuracin del PIN cuyo n guarda la variable //finCarrera como salida digital pinMode(finCarrera,INPUT); } void loop(){ //Condicional que se ejecuta cuando //detecta el finCarrera presionado if(digitalRead(finCarrera)==HIGH){ // se activa la salida ledPin encendiendo el LED digitalWrite(pinLed, HIGH); }else{ // se desactiva la salida ledPin apagando el LED digitalWrite(pinLed, LOW); } } /*****************************************************/
Explicacin:
En este ejemplo se puede ver inicialmente el LED de la derecha esta encendido sin que el fin de carrera este presionado, ya que este LED est conectado al pin NC (normalmente cerrado) y por tanto el circuito conduce, pero cuando el fin de carrera es presionado el LED de la derecha se apaga y es el de la izquierda quien se prende, ya que el interruptor NA (normalmente abierto) cierra el circuito que enciende este segundo LED. Al tiempo que se enciende este segundo LED se enva una seal digital a la tarjeta Arduino por el pin digital 7 y que segn nuestro programa provoca que se encienda un tercer LED conectado al pin digital 13 de salida.
Ejercicios aconsejados:
Hacer que cuando se oprima el fin de carrera a parte de encender el LED en el pin 13 de la tarjeta Arduino, apaguemos un cuarto LED conectado a otro pin digital. OJO! El nuevo LED debe conectarse con una resistencia de mnimo 330 ohmios entre este y GND, no se debe conectar directamente el LED entre el pin digital y GND porque quemaramos el LED.
21
Cdigo:
/**************************************************************/
Explicacin:
En este experimento se puede ver como la velocidad en que prende y apaga el LED vara de manera inversa a la distancia medida por el sensor. Entre ms lejos el sensor detecte un objeto ms rpido prende y apaga el LED. La distancia es medida mediante la salida de voltaje del sensor, a mayor distancia menor voltaje de salida e viceversa, este voltaje es recibido por la tarjeta Arduino y convertido con su conversor anlogo-digital y guardado en una variable llamada sensorValue.
//Entrada donde se conectar el sensor int sensorPin = 0; // Salida digital donde se conecta un LED o una bocina int ledPin = 13; // Variable para guardar el valor medido del sensor int sensorValue = 0; //variable donde guardaremos las distancia en cm, //luego de hacer la conversin necesaria con la frmula de abajo int distanciaCm; void setup() { // declarar el ledPin como OUTPUT: pinMode(ledPin, OUTPUT); //inicializacin serial para mostrar datos en la pantalla Serial.begin(9600); } void loop() { //lectura del voltaje arrojado por el sensor //que va aproximadamente de 0 a 600. //este valor debe ser convertido luego a centmetros sensorValue = analogRead(sensorPin); //Se enciende la salida ledPin digitalWrite(ledPin, HIGH); //Tiempo de espera de <sensorValue> millisegundos: delay(sensorValue); //Se desactiva la salida ledPin digitalWrite(ledPin, LOW); //Tiempo de espera de <sensorValue> millisegundos: delay(sensorValue); //imprimimos en pantalla el valor medido Serial.print (\nValor Medido:); Serial.print (sensorValue); //clculo de la distancia en centmetros //a partir del voltaje medido anteriormente distanciaCm = (2914 / (sensorValue + 5)) - 1; /* Como la variable distanciaCm tiene el valor en centmetros que el sensor midi, se puede usar esta variable para hacer las condiciones*/ Serial.print (\n Distancia en Cm:); //imprimimos en pantalla la distancia en cm Serial.print (distanciaCm); } /**************************************************************/
Ejercicios aconsejados:
Modificar el cdigo para que se encienda el LED solo si la distancia medida es menor a 15 cm, si es mayor debe estar apagado el LED. Borrar lo que no necesitaremos, usar la variable sensorValue, la frmula de conversin a cm, la variable distanciaCm y una condicin IF ELSE.
22
El sensor tiene una especie de bombillito de color azul, si ubicamos este, segn el diagrama cada patica vamos a identificarla con una letra, estas letras son importantes para montar correctamente el siguiente diagrama:
Nota: El bombillo azul esta en la parte superior de la imagen
Cdigo:
/***********************************************************/ //Creado por Jos Luis Susa 2010 int sensorPin = 0; // entrada donde se conectara el sensor int ledPin = 13; // salida digital donde se conecta un LED o una bocina int sensorValue = 0; // variable para guardar el valor medido del sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); Serial.begin(9600); //inicializacin serial para mostrar datos en la pantalla } void loop() { // la lectura del sensor que ser fuertemente afectada //por la cantidad de luz ambiente sensorValue = analogRead(sensorPin); //si el valor medido es > 80 detecta color blanco // se enciende la salida ledPin if(sensorValue>80){ digitalWrite(ledPin, HIGH); }else{ // se pone a cero la salida ledPin digitalWrite(ledPin, LOW); } //imprimimos en pantalla el valor medido Serial.print (\nValor Medido:); Serial.print (sensorValue); } /***********************************************************/
Ejercicios aconsejados:
Poner el sensor en la luz del sol y visualizar como afecta la luz ambiente las medidas obtenidas. Arreglar el cdigo para que funciones bajo estas nuevas condiciones ambientales.
23
1 2 3 4 5 6
16 15 14 13 12 11
Para comenzar este montaje es necesario aprender INPUT 2 INPUT 3 7 10 sobre un dispositivo llamado puente H, el objetivo de este dispositivo es servir como interface entre el micro VS ENABLE 2 8 9 y un motor, ya que no es conveniente conectarlos directamente porque el motor maneja corrientes muy El cierre y apertura de los interruptores estar a cargo del micro que est conectado a este altas para el micro y esto lo daara inminentemente. Figura 1: Cerrando interruptores S1 y S4 Figura 2: Cerrando interruptores S2 y S3 puente H mediante los pines de entrada Input 1, 2, 3 y 4. Un puente H generalmente es conocido como driver (controlador, conductor, manejador) de un motor, ya En el pin 8 (alimentacin de los motores) se conectar el cable que sale del regulador de que este dispositivo es quien alimenta al motor, define voltaje amarillo que tenemos, el cual que a su vez estar conectado al adaptador de 9v (9 su direccin, y controla su velocidad mediante una salida voltios). 0 El regulador reducir los 9v a 5v para no daar los motores con exceso de voltaje: 7 Y PWM (obtenida del micro). N C Un puente H es un conjunto de interruptores que se cierran y abren para controlar la direccin del motor. Si se quiere A hacer girar el robot es necesario cerrar los interruptores S1 y S4 o bien S2 y S3 para que circule la corriente por K= Ctodo el motor:
E C
24
Cdigo:
/***********************************************************/ //Creado por Jos Luis Susa 2010 int motor1A = 6; int motor1B = 9; // salida de pwm al motor // salida2 de pwm al motor
void setup() { // PWM del motor pinMode(motor1A, OUTPUT); pinMode(motor1B, OUTPUT); } void loop() { //con analogWrite enviamos un PWM de 100 al pin 6 analogWrite(motor1A,100); analogWrite(motor1B,0); delay(3000); //esperar 3 segundos //cambio de sentido de giro analogWrite(motor1A,0); analogWrite(motor1B,100); delay(3000); } /***********************************************************/
Usamos la funcin delay() para que nuestra tarjeta no ejecute ms instrucciones y por tanto el chip recibir el mismo valor PWM durante estos 3 segundos ya que no se hace ningn cambio, al pasar los 3 segundos se modifican los PWM que se envan y se vuelve a detener todo en este estado para que los motores giren en el nuevo sentido de giro 3 segundos igualmente.
Ejercicios aconsejados:
Hacer que el motor gire durante 4 segundos y luego pare por otros 2 segundos, hacerlo girar hacia el otro lado por 4 segundos y parar otros 2 segundos.
Explicacin:
En este montaje usamos el integrado (chip) L293 para controlar un motor, este gira en un sentido y en otro alternadamente. En cuanto al montaje, lo primero que se debe notar es que el chip 293 necesita de 2 voltajes diferentes, el primero es el voltaje VSS (pin 16), que es el mismo con el que trabaja la tarjeta Arduino de 5v y el segundo es el voltaje VS del motor (pin 8), que como ya dijimos sale del regulador, NUNCA DEBE USARSE EL VOLTAJE DE LA TARJETA PARA ALIMENTAR LOS MOTORES, SIEMPRE USAR EL REGULADOR EXTERNO. Al pin 8 se pueden conectar voltajes de mnimo 5v hasta 36 voltios, segn la capacidad del motor, para nuestro caso los motores que tenemos reciben mximo 6 voltios. Hay dos lneas que llegan al chip desde la tarjeta Arduino, estas son las seales PWM que enviamos desde Arduino para controlar la velocidad del motor, en el cdigo escribimos la funcin analogWrite(nmero de pin, valor PWM), entre los parntesis ponemos el nmero de pin por el que enviaremos el valor PWM que deseamos. El valor del PWM va de 0 a 255. La razn por la que hay dos PWM para un motor es para poder controlar el sentido de giro, enviando por un pin un PWM y por el otro 0, el motor girar, si queremos que vaya en sentido contrario invertiremos lo que enviamos en los dos pines, en el primer pin enviaremos ahora 0 y en la segundo el PWM que queramos, si queremos detenerlo debemos enviar 0 por ambos pines. Por eso en el cdigo enviamos primero un PWM de 100 por un pin y 0 por el otro, y al cambiar de sentido de giro enviamos 0 al primero y 100 al segundo. Las conexiones para el segundo motor son similares a las del primero, las mismas conexiones que se hicieron en la parte superior del chip se hacen abajo para controlar el segundo motor. En el primer montaje usbamos los pines PWM 6 y 9 del Arduino, en este caso usamos los pines 9 y 11 para el motor de arriba y los pines 5 y 6 para el motor de abajo. Hay que fijarse bien que se conecten los cables en los pines marcados como PWM en la tarjeta Arduino (pin 3, 5, 6, 9, 10, y 11), hay pines que no son PWM y por tanto no nos servirn.
25
Cdigo:
/***********************************************************/ //Creado por Jos Luis Susa 2010 int int int int motor1A motor1B motor2A motor2B = = = = 11; // salida de pwm al motor 9; // salida2 de pwm al motor 5; // salida de pwm al motor 2 6; // salida2 de pwm al motor 2
Explicacin:
Al igual que en anterior experimento hacemos que ambos motores giren en un sentido y luego en otro, invirtiendo las seales PWM que enviamos desde la tarjeta Arduino. Esta vez tenemos 4 pines PWM para manejar los 2 motores, debemos configurar los 4 pines como salidas en la funcin SETUP y luego en la funcin LOOP enviar por ellos las seales PWM que deseamos, primero ponemos a girar el primer motor, luego el segundo y hacemos una espera de 3 segundos para que giren as durante este tiempo, luego cambiamos las seales de ambos motores y esperamos otros 3 segundos girando en este nuevo sentido antes de volver a invertir el giro. Cuando programemos nuestro robot para que vaya al frente, nos encontraremos que quizs las llantas no giran como deseamos, una puede girar en sentido inverso a cmo queremos, y en vez de ir de frente el robot gira, la solucin es invertir los cables de PWM, o los cables del motor, poniendo uno de los cables donde est el otro, lograremos que ambos motores giren de la misma forma con la misma programacin.
void setup() { // PWM del primer motor pinMode(motor1A, OUTPUT); pinMode(motor1B, OUTPUT); // PWM del segundo motor pinMode(motor2A, OUTPUT); pinMode(motor2B, OUTPUT); } void loop() { //girar primer motor analogWrite(motor1A,100); analogWrite(motor1B,0); //girar segundo motor analogWrite(motor2A,100); analogWrite(motor2B,0); delay(3000); //esperar 3 segundos //cambio de sentido de giro primer motor analogWrite(motor1A,0); analogWrite(motor1B,100); //cambio de sentido de giro segundo motor analogWrite(motor2A,0); analogWrite(motor2B,100); delay(3000); } /***********************************************************/ //esperar 3 segundos
26
El primer paso es aunque parezca muy simple, el ms importante. Debemos saber que queremos hacer, debemos pensar en cmo vamos a hacerlo, qu algoritmo usaremos para que haga lo que queremos, qu informacin recibir del exterior y cules sensores tendra nuestro robot, finalmente tendremos que pensar en las salidas que tendr nuestro robot, se mover? Utilizar motores?, parlantes, luces? El segundo paso parte del primero, como vimos un programa comienza con la declaracin de variables as que segn los sensores que definimos en el paso 1 debemos definir las variables donde vamos a guardar los valores de los sensores. Luego de esto sigue la configuracin de la tarjeta Arduino, mediante la funcin setup(),debemos definir cules son pines de salida y entrada, si utilizaremos la comunicacin serial para ver datos en pantalla que necesitemos para probar nuestros cdigos (Serial.begin, Serial.print). Los pines de entrada sern los pines donde conectamos los sensores, los pines de salida sern los pines para sacar una seal PWM, prender LEDs, o Parlantes. Solo nos resta empezar a programar nuestro algoritmo, nuestras condiciones, nuestras acciones, etc. Estas instrucciones irn como vimos anteriormente en la funcin loop().
Para la construccin del robot vamos a tener que montar en el protoboard el sensor de distancia, el puente h L293 para manejar los dos motores como vimos anteriormente, y conectar la tarjeta Arduino con nuestro adaptador de 9v y el regulador para alimentar los motores con 5 voltios. Pidmosle ayuda a nuestro profesor gua para montar todos estos elementos correctamente para seguidamente empezar a programar.
Complemento Terico:
Hacer el ejercicio mental de pensar en varios tipos de robot simples, reconocer sus objetivos, y pensar en cmo hacerlo funcionar (el algoritmo), luego pensar en las variables a utilizar, la configuracin y el desarrollo del cdigo del algoritmo para lograr lo que queremos. Por ejemplo si queremos hacer un robot que huya, si se acerca una mano a un sensor de distancia el robot debe alejarse y hacer sonar un parlante para dar una alerta. Qu tipo de programacin usaramos? Qu variables y que acciones efectuar nuestro robot. Entradas? Salidas?
27
Cdigo:
/**********************************/
if (distanciaCmMedida>12){ //el robot debe acercarce al objeto //motor 1 adelante analogWrite(motor1A,pwm1); delay(100); analogWrite(motor1B,0); //motor 2 adelante analogWrite(motor2A,pwm1); delay(100); analogWrite(motor2B,0); digitalWrite(ledPin, HIGH); //cuando vaya hacia adelante prenda el led Serial.print (\nValor Medido:); Serial.print (pwm1); }else if (distanciaCmMedida<12){ // el robot debe alejarse del objeto //motor 1 hacia atras analogWrite(motor1A,0); delay(100); analogWrite(motor1B,pwm1); //motor 2 hacia atras analogWrite(motor2A,0); delay(100); analogWrite(motor2B,pwm1); digitalWrite(ledPin, LOW); //cuando vaya hacia atras apague el led }else if (distanciaCmMedida==12){ // el robot debe alejarse del objeto //motor 1 hacia atras analogWrite(motor1A,0); delay(100); analogWrite(motor1B,0); //motor 2 hacia atras analogWrite(motor2A,0); delay(100); analogWrite(motor2B,0); } } /***********************************************/
/* El robot que implementa este cdigo, es capaz de mantener una distancia de 12 cm de un objeto en frente de l. Este es un control IA basado en reglas. Creado por Jose Luis Susa 2010 */ int sensorPin = 0; // entrada donde se conectara el sensor int ledPin = 13; // salida digital donde se conecta un led o una bocina int sensorValue = 0; // variable para guardar el valor medido del sensor int distanciaDeseada = 12; //el robot queremos que este a 12cm int pwm1=255; int int int int motor1A motor1B motor2A motor2B = = = = 5; // salida de pwm al motor 1 6; // salida2 de pwm al motor 1 9; // salida de pwm al motor 2 11; // salida2 de pwm al motor 2
void setup() { //configuracion motor 1 pinMode(motor1A, OUTPUT); pinMode(motor1B, OUTPUT); //configuracion motor 2 pinMode(motor2A, OUTPUT); pinMode(motor2B, OUTPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); //inicializacin serial para mostrar datos en la pantalla } void loop() { int distanciaCmMedida; // la lectura del sensor va de 0 a 600 aprox sensorValue = analogRead(sensorPin); //clculo del valor medido en centmetros distanciaCmMedida = (2914 / (sensorValue + 5)) - 1; Serial.print (\n Distancia en Cm:); // imprimimos en pantalla la distancia en cm Serial.print (distanciaCmMedida);
Mdulo educativo de construccin de robots para estudiantes
28
Complemento Terico:
Es necesario analizar el cdigo completo, entender bien las 2 condiciones que se escribieron, para ir hacia adelante si la distancia medida es mayor a 12cm, e ir hacia atrs si la distancia es menor de 12cm.
Cdigo:
/***********************************************************/ /*si distancia >=5 ir de frente si distancia <5 despegarse del muro girando a la derecha si distancia >5 pegarse al muro girando a la izquierda*/ //Creado por Jos Luis Susa 2010 int int int int sensorPin = 0; // entrada donde se conectara el sensor ledPin = 13; // salida digital donde se conecta un LED o una bocina sensorValue = 0; // variable para guardar el valor medido del sensor pwm1=255; // salida de pwm al motor 1 // salida2 de pwm al motor 1
Ejercicios aconsejados:
Hacer que el robot se detenga si el objeto est a una distancia entre 12 y 14. Si est a menos de 12 centmetros alejarse, y si est a ms de 14 cm acercarse al objeto.
int motor2A = 9; // salida de pwm al motor 2 int motor2B = 11; // salida2 de pwm al motor 2 void setup() { //configuracion motor 1 pinMode(motor1A, OUTPUT); pinMode(motor1B, OUTPUT); //configuracion motor 2 pinMode(motor2A, OUTPUT); pinMode(motor2B, OUTPUT); pinMode(ledPin, OUTPUT); //inicializacin serial para mostrar datos en la pantalla Serial.begin(9600); } void loop() { int distanciaCmMedida; //La lectura del sensor va de 0 a 600 aprox sensorValue = analogRead(sensorPin); //clculo del valor medido en centmetros distanciaCmMedida = (2914 / (sensorValue + 5)) - 1; Serial.print (\n Distancia en Cm:); Serial.print (distanciaCmMedida); if (distanciaCmMedida>5){ //el robot debe acercarse al objeto //motor 1 adelante analogWrite(motor1A,0);
29
delay(100); analogWrite(motor1B,pwm1); //motor 2 adelante analogWrite(motor2A,pwm1); delay(100); analogWrite(motor2B,0); //cuando vaya hacia adelante prenda el LED digitalWrite(ledPin, HIGH); //el robot debe alejarse del objeto }else if (distanciaCmMedida<5){ //motor 1 hacia atrs analogWrite(motor1A,pwm1); delay(100); analogWrite(motor1B,0); //motor 2 hacia atrs analogWrite(motor2A,0); delay(100); analogWrite(motor2B,pwm1); //cuando vaya hacia atrs apague el LED digitalWrite(ledPin, LOW); //el robot debe alejarse del objeto }else if (distanciaCmMedida>=5){ //motor 1 hacia atrs analogWrite(motor1A,pwm1); delay(100); analogWrite(motor1B,0); //motor 2 hacia atrs analogWrite(motor2A,pwm1); delay(100); analogWrite(motor2B,0); } } /***********************************************************/
Ejercicios aconsejados:
Hacer que el movimiento del robot sea ms suave, corregir los movimientos para que los giros sean menos bruscos y agregar una condicin adicional para que si el robot est a una distancia entre 4 y 6 se mueva de frente, en las otras dos condiciones debern modificar el valor de la condicin para que cuando la distancia sea menor a 4 el robot se aleje y si es mayor a 6 se acerque al muro.
Complemento Terico:
Es necesario analizar el cdigo completo, entender bien las 2 condiciones que se escribieron, para acercarse al muro si la distancia medida es mayor a 5cm, y alejarse del muro si la distancia es menor de 5cm.
30
Cdigo:
// Creado por Jos Luis Susa 2010 int sensorPin = 0; // entrada donde se conectara el sensor int ledPin = 13; // salida digital donde se conecta un LED o una bocina int sensorValue = 0; // variable para guardar el valor medido del sensor int motor1A = 5; int motor1B = 6; // salida de pwm al motor 1 // salida2 de pwm al motor 1
int motor2A = 9; // salida de pwm al motor 2 int motor2B = 11; // salida2 de pwm al motor 2 int pwm1=255; void setup() { //configuracion motor 1 pinMode(motor1A, OUTPUT); pinMode(motor1B, OUTPUT); //configuracion motor 2 pinMode(motor2A, OUTPUT); pinMode(motor2B, OUTPUT); // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); //inicializacion serial para mostrar datos en la pantalla Serial.begin(9600);
void loop() { int distanciaCm; // la lectura del sensor va de 0 a 500 aproximadamente sensorValue = analogRead(sensorPin); //imprimimos en pantalla el valor medido Serial.print (\nValor Medido:); Serial.print (sensorValue); if(sensorValue>80){ //si el valor medido es > 80 detecta luz // se enciende la salida ledPin digitalWrite(ledPin, HIGH); //motor 1 adelante analogWrite(motor1A,pwm1); delay(100); analogWrite(motor1B,0); //motor 2 adelante analogWrite(motor2A,pwm1); delay(100); analogWrite(motor2B,0); }else{ // se pone a cero la salida ledPin digitalWrite(ledPin, LOW); //motor 1 parar analogWrite(motor1A,0); delay(100); analogWrite(motor1B,0); //motor 2 parar analogWrite(motor2A,0); delay(100); analogWrite(motor2B,0);
31
Mdulo Educativo
de construccin de robots para estudiantes
32
Con este ltimo robot acabamos! Hemos hecho un recorrido por todas las partes del robot, sus sensores, sus motores, su cabeza, la programacin y hemos logrado hacer tres robots con tres comportamientos diferentes. Espero que hayan sido los experimentos divertidos y que hayan jugado con los cdigos, los elementos y con todo lo que tienen a la mano para crear nuevos robots, con tiempo y dedicacin lograran hacer ms y mejores robots y luego vern cmo estos cambiarn el mundo. Gracia por usar esta cartilla, espero que haya sido de gran utilidad para ustedes y hayan quedado muy entusiasmados con todo lo que pueden hacer de aqu en adelante. Cualquier comentario pueden escribir al correo: josesusa@gmail.com, con gusto recibir recomendaciones, opiniones y claro, felicitaciones! Atentamente Ing. Jos Luis Susa Rincn.