Documentos de Académico
Documentos de Profesional
Documentos de Cultura
x
Departamental de Arauca
Autor: Ingeniero José Luis Susa Rincón
1
Agradecimientos:
Agradezco al doctor Luis Eduardo Ataya Arias Gobernador de Arauca. Y al doctor José Orlando
Cespedes García Secretario de Educación Departamental por apoyar el programa “USO Y
APROVECHAMIENTO DE NUEVAS TECNOLOGÍAS EN ROBÓTICA Y RECICLAJE TECNOLÓGICO”.
Igualmente al director del proyecto José Félix 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 demás 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 aún más este trabajo.
3
Acerca de la cartilla
Esta cartilla fue desarrollada por el ingeniero José Luis Susa Rincón, basado en su experiencia
obtenida durante el programa “USO Y APROVECHAMIENTO DE NUEVAS TECNOLOGÍAS EN
ROBÓTICA Y RECICLAJE TECNOLÓGICO”, el cual fue coordinado por él mismo y dirigido por
el doctor José Félix Susa Lizarazo.
En esta cartilla encontrarán la manera fácil y rápida de ingresar al mundo de la robótica,
contiene información útil para desarrollar una serie de experimentos divertidos e
interesantes sobre los robots y sus partes, igualmente será una guía didáctica para el
desarrollo del curso de robótica que podrán dirigir los docentes especializados en el tema
que participaron en el programa.
Los componentes conceptuales de la cartilla pueden ser divididos en 4 módulos de
aprendizaje:
1. Módulo de Electrónica digital
2. Módulo de Programación
3. Modulo Conociendo Arduino
4. Robótica
Cada módulo ira desarrollándose a medida que se realicen los juegos y los experimentos
x
que soportan toda esta cartilla y que han sido pensados y probados para alcanzar la meta
de que un niño entre los 13 y 17 años aprenda de robótica móvil fácilmente. Al final
los niños y jóvenes habrán aprendido como construir un robot, entendiendo y usando
todas sus partes, podrán luego diseñar por ellos mismos cualquier tipo de robot posible, o
cualquier aplicación 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
teóricos en algunos de los experimentos.
La cartilla está divida en talleres, y experimentos, cada taller consta de una teoría básica y
una serie de experimentos dirigidos y creados para aprender robótica. En la cartilla habrán
indicaciones como esta: donde deberá hacerse una complementación teórica del tema
tratado. Igualmente si el símbolo es el siguiente: se deberá complementar la teoría con
ayuda de exposiciones o ejercicios adicionales.
Finalmente tendremos en la cartilla una serie de experimentos a realizar para afianzar los
conocimientos en robótica. Se identificarán de la siguiente manera: cada experimento tendrá
un número para hacer más fácil su ejecución a la hora de trabajar en clase con los alumnos.
No queda más que decirles BIENVENIDOS al mundo de la robótica, serán participes de
la última tecnología en el mundo y más adelante con esfuerzo y estudio podrán liderar
proyectos que cambien el mundo y lo conviertan en un mejor lugar para vivir.
Módulo
Módulo educativo deEducativo de Construccion
construcción de robotsde Robots para estudiantes
para estudiantes 4
Introducción
Echemos una muy rápida mirada al pasado en el que utilizábamos piedras, ramas, pieles Pongámonos cómodos
y otros materiales para desarrollar pequeños y básicos utensilios para ayudarnos en
nuestras tareas diarias, se pueden imaginar viviendo en esa época?...cogiendo una piedra
y empecemos a aprender
para cortar, uniéndola a un palito para cazar y poder comer?...solo imaginen… y a jugar para luego poder
El mundo fue bueno y nosotros como humanos empezamos a mejorar nuestras primeras INVENTAR!
invenciones, poco a poco fuimos creando herramientas más complejas, con el vapor,
la pólvora, la mecánica y finalmente con la energía eléctrica, convertimos un palito y
una piedra en máquinas para volar, para nadar como los peces, hasta para ir al espacio!
igualmente creamos aparatos para entretenernos, el televisor, el cine, las cámaras, 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 límites
humanos. ¿Se dan cuenta que siempre buscamos crear nuevas cosas, las inventamos y las
construimos para beneficiarnos y ayudarnos?, siempre desde que usábamos solo palitos y
piedras, ¿Se dan cuenta que desde ese tiempo deseamos lo mismo?
Nuestra imaginación se ha dejado llevar y la necesidad de crear más y mejores cosas para
realizar nuestros sueños ha sido tan alta que en nuestros días tenemos máquinas y aparatos
que en tiempos pasados parecían sacados de un cuento. La magia no es que no exista, sino
que aún 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 días, nadie entendía cómo, ni por qué salía, y mucho menos alguien se
imaginó algo semejante antes, por eso es razonable pensar que hay cosas aún 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 demás y con el medio ambiente.
Alguna vez han pensado cómo participar activamente en esta corriente de invenciones?…
tomémonos un tiempo…
…
…
Si su respuesta es “No Se” tranquilos les diré cómo hacerlo, eso sí espero que nadie
haya dicho “No se puede”, porque esa respuesta elimina cualquier solución y bloquea
inmediatamente todo. Entonces creamos en que todo es posible y haremos maravillas. La
manera como ustedes comenzarán a inventar es con algo que llaman robots! Y aprendiendo
la ciencia que los estudia: La robótica.
5
Taller 1: Qué es la robótica, para
qué sirve, y qué es un robot?
Industriales
SENSORES
PROCESADOR
ACTUADORES
O MICROCONTROLADOR
INTELIGENCIA
ARTIFICIAL
Cables
Todos los robots tienen todas oAdaptador
de Protoboard
Complemento Teórico:
9v de las partes mostradas enRegulador
la mayoría el gráfico de arriba.
de volte Animo
Son alambres que
vienen en
Este es el elemento
diferentesdeberá hacer unaque le proporcionará
Se conecta a una de
laselementos,
terminales del
que el camino
El profesor breve explicación de cada uno de estos ayudándose
colores y tamaños
con el ejemplo
para interconectar del cuerpo
energía a nuestro
humano,
robot. los sensores son sentidos,
adaptador de 9v,
los
reduceactuadores
su voltaje nuestros apenas comienza!
músculos,
los elementos a 5v para
en el la inteligencia artificial nuestra inteligencia, y nuestro que es nuestro
cerebro
protoboard. puedan
procesador que controla todo. Qué es un Sensor y qué tipos hay, Qué es un actuador y
funcionar
qué tipos hay?, y Qué es la inteligencia artificial? los motores.
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 cuál es su utilidad de ellos para las personas o
para el mundo.
2. Hacer
Leds una discusión sobreMini
losparlante
siguientes temas y reconocer Resistencias
la importancia de la
robótica y su aprendizaje:
• Qué es la robótica, qué es un
Son pequeños Esrobot,
un pequeño
para qué sirve? Son componentes
bombillos
• que
Quéemiten parlante,
robots simples podríamos imaginar electrónicos
emitepara resolver problemas en la vida quereal?, buscar
luces de diferentes sonidos y tiene reducen la cantidad
personas? Recolectar comida? Detectar intrusos? Qué elementos deberían
polaridad. de tener
corriente queestos
otrosrobots?
colores segun el led.
elementos
• Es importante la robótica para el mundo? Para la gente? Puede ayudar reciben
a mejorar nuestra vida?
en el circuito.
Luego de entender que es la robótica y que tipos de robots hay y para qué sirven ahora si
pasemos a la práctica y empecemos a aprender a construirlos.
7
Taller 2: Reconociendo los SENSORES
Cables Regulador
Protoboard de Protoboard Adaptador 9v de volte
Interruptor NA Interruptor NC
9
Experimento 4: Prendiendo un LED con un potenciómetro de 10k ohm:
En este experimento vamos a variar la intensidad de luz del LED, para esto usaremos
un potenciómetro, el cual al girar variará su resistencia interna y cambiara por tanto la
cantidad de corriente que llega al LED. Para este montaje se debe conectar la patica central
del potenciómetro y una de sus dos patas de los extremos a la resistencia de 1k ohm como
lo muestra el siguiente circuito:
Ejercicios aconsejados:
Hacer girar el potenciómetro y descubrir como la intensidad de luz del LED cambia. Cambiar
el potenciómetro de 10k ohmios por el de 250k ohmios y hacer nuevamente la prueba.
Luego de repasar los elementos de electrónica básica ahora veremos los sensores usados
comúnmente en robótica, pero los aprenderemos a manejar en los experimentos del taller 4:
Sensor CNY70
de distancia infrarrojo
Pero nuestro robot no se moverá sin estos elementos, los aprenderemos a usar en el taller 5:
Chasis de robot Motores
Controlador
de motores
11
Taller 3: Juguemos con Arduino
Complemento Teórico:
Con el profesor identificar y definir que son los puertos Verificar que tenemos
la carpeta drivers.
digitales, análogos, y de alimentación. Qué sale por un
puerto digital?, Qué recibe un puerto análogo?, Cómo
se transforma una señal real en un valor numérico 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?. Dónde 1 “En esta página encontrarán tutoriales, ejemplos y muchas ayudas para aprender más sobre Ardui-
están los pines de alimentación 5v y GND? no, no duden en ir a visitarla”
13
Para la reinstalación 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.
15
Complemento Teórico: void loop(){
// Prender el led enviando
En este punto es necesario que el profesor haga la // 5 volios por el pin 13 ledPIN
introducción teórica sobre programación con la ayuda del digitalWrite(ledPin, HIGH);
código “Blink” para prender un LED. Deberá enseñarse delay(1000); // esperar un segundo
sobre qué es un algoritmo y un programa, cuales son las 3
partes fundamentales de un programa (variables, funciones // Apagar el led enviando
y función principal main que en Arduino es “Loop”), explicará //0 voltios por el pin 13 ledPIN
que es la Sintaxis de un código, que es un “comentario” y digitalWrite(ledPin, LOW);
que tipos de variables podemos usar. delay(1000); // esperar un segundo
}
Análisis del código:
En este código vemos funciones especiales que usa
Como puede verse en este código, hay tres partes
Arduino para poner voltaje en sus pines como la función
fundamentales, que todo código debe tener SIEMPRE, la
digitalWrite(número de pin, LOW/HIGH, ), para poner 5 voltios
primera de ellas es la declaración de variables:
en un pin y prender el LED que tenemos conectado
int ledPin = 13; // LED conectado al pin digital 13
escribimos digitalWrite(ledPin, HIGH); La función “delay()” si se
En esta parte vamos a definir los pines que usaremos
dieron cuenta sirve para hacer una pausa en el programa,
de nuestra tarjeta, e igualmente todas las variables que
es decir, se congela el programa y no se ejecutan más
necesitemos usar.
instrucciones, por eso en el código de “Blink” cuando
El siguiente componente es la función configuración prendemos el LED y hacemos una espera de 1 segundo
“setup()”, todo lo que está encerrado dentro los 2 el LED permanece en ese estado, cuando acaba la espera
corchetes de la función es parte de esta configuración: y la nueva instrucción se ejecuta, el LED se apaga y lo
void setup(){ dejamos en este estado por 1 segundo más, antes de
// Inicializar el pin digital ledPin como salida:
volver a encenderlo. Como se mencionó hace un momento
pinMode(ledPin, OUTPUT);
la función “Loop()” repite el código indefinidamente, en
}
este ejemplo prende y apaga el LED repetidamente.
En esta parte le decimos a la tarjeta como vamos a utilizar
A medida que vayamos realizando más experimentos
sus pines, si va a salir voltaje de ellos (OUTPUT) o si van
veremos algunas otras funciones especiales de Arduino.
a recibir voltajes o señales (INPUT), para esto usamos
la función pinMode(número de pin, INPUT u OUTPUT). Por Ejercicios aconsejados:
último tenemos la función principal “main” que llamamos
Los niños deben desarrollar un algoritmo para hacer que
en Arduino loop(), al igual que la función setup() la funcion
uno de sus compañeros que debe hacer de robot, pueda
loop() debe encerrar todo el código entre 2 corchetes que
llegar a un lugar del salón partiendo de otro punto. Definir
se abren apenas se escribe loop() y se cierran al final de
las reglas y las órdenes para que el robot pueda llegar al
todo el código. Esta función se llama loop (en español
lugar deseado.
clico) ya que repetirá indefinida una y otra vez lo que
escribamos entre sus corchetes: Hacer que los niños respondan las siguientes preguntas
luego de la clase teórica, uno responde y otro lo corrige:
• Qué es un programa, para que sirve, en que lo vamos a utilizar?
• Cómo se escribe un programa, y Qué es un lenguaje de
programación?
• 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 lógicas,
comparativas, etc.?
/**************************************************************/
Explicación:
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 cuándo 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 señal de 5 voltios y esto enciende los LEDs.
17
Complemento Teórico: Código:
/**************************************************************/
• Se debe analizar y entender cómo actúa la variable // Creado por José Luis Susa - 2010
cadenaLed[], explicar cómo actúan las variables tipo
/*variable que guarda los 4 números donde
arreglo como esta. Cómo se usa la variable cadenaLed[] estarán conectados los 4 LEDs*/
en la sentencia FOR. int cadenaLeds[ ]={6,7,8,9};
• Se debe analizar y entender cómo actúa la función flash, /*nº de la entrada analógica a la que va conectado el potenciómetro*/
cómo se usa la función en el programa, para que usamos int pot=0;
una sentencia FOR y la condición IF, cómo es la sintaxis /*La variable n es el contador en el FOR*/
int n=0;
te estas sentencias?
• Cómo se relacionan las tablas de verdad, con la electrónica /*variable que guarda la lectura de la señal en la entrada*/
int medida=0;
física, los 1 y 0 con las tablas de verdad, para qué me
sirven (generación condiciones IF y ejecución de acciones /*no es necesario configurar las entradas analógicas, siempre son entradas*/
dependientes de estas). void setup(){
for(n=0;n<4;n++){
• Qué hace la función digitalRead? Para que la usamos en pinMode(cadenaLeds[n],OUTPUT);
este código? }
}
Ejercicios aconsejados: void loop(){
/*Guardamos el valor de la entrada analógica en la variable medida*/
Hacer que las luces se prendan y apaguen de manera medida=analogRead(pot);
intercalada cuando se oprima el pulsador (estilo auto
fantástico). /*la señal analógica está entre 0 y 1024. La dividimos en 4 partes.*/
if(medida<1024/4){
Experimento 8: Prender 4 LEDs con la ayuda de un /*se enciende el primer LED si la señal está en el primer cuarto*/
digitalWrite(cadenaLeds[0],HIGH);
potenciómetro de 10 K ohm:
/*los demás se apagan para que cuando la señal disminuya no se queden encendidos*/
En este montaje usamos los mismos 4 LEDs y sus digitalWrite(cadenaLeds[1],LOW);
digitalWrite(cadenaLeds[2],LOW);
respectivas resistencias de 330 ohmios, usamos un digitalWrite(cadenaLeds[3],LOW);
potenciómetro conectando a una de sus 3 patas a 5v, la }
otra a una resistencia de 1k ohmios y la pata central se /*señal en el segundo cuarto, 2 LEDs encendidos*/
conecta al pin análogo 10 de la tarjeta Arduino. if((medida>=1024/4)&&(medida<1024/2)){
Imagen montaje: digitalWrite(cadenaLeds[0],HIGH);
digitalWrite(cadenaLeds[1],HIGH);
digitalWrite(cadenaLeds[2],LOW);
digitalWrite(cadenaLeds[3],LOW);
}
/*señal 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);
}
Código:
/**************************************************************/
Taller 4: Bienvenidos al mundo de la
//Creado por José Luis Susa - 2010
robótica, juguemos con los sentidos de
un robot. //Entrada donde se conecta el sensor
int sensorPin = 0;
19
Explicación:
En este montaje se recibe una señal análoga por el pin 0 Podemos usar los dos interruptores al tiempo, por ejemplo
de Arduino, y se visualiza una salida digital por el pin 13. si conectamos un LED al interruptor NC, este permanecerá
El rango para que encienda o apague el LED dependerá de encendido siempre, a menos que el interruptor sea oprimido,
las necesidades de uno como programador, dependiendo de si queremos que el robot retroceda apenas reciba una señal
la cantidad de luz captada, modificaremos a conveniencia el cuando el NA se cierre, estaremos logrando dos efectos
valor 80 que está en el IF por cualquier otro que deseemos diferentes presionando el sensor, apagaremos el LED y
que se ajuste a lo que queremos, el voltaje de salida enviado haremos que nuestro robot retroceda de forma simultánea.
por la fotocelda será menor si la esta no recibe luz, ya que Igualmente los fines de carrera son altamente utilizados
su resistencia interna aumenta tanto que se aproxima a un para controlar los movimientos de algunos motores, si un
circuito abierto donde no conduce corriente. motor tiene unido una pequeña barra, cuando este gire
Se usa una función Serial.print que sirve para visualizar la barra giraría, así si se coloca un fin de carrera de tal
en pantalla lo que deseemos, en este caso imprimimos manera que luego de cierto giro del motor se toque el
en pantalla la frase “Valor Medido” y luego imprimimos sensor con la barra, es posible programar nuestra tarjeta
el valor que tiene la variable “sensorValue”, el signo “\n” para que detengamos el motor cuando esto suceda y
sirve para generar una nueva línea, como cuando damos cambiarle el sentido de giro, si colocamos un segundo
“Enter” en un teclado. Para ver estos valores en la pantalla sensor fin de carrera al otro lado, y hacemos lo mismo,
del computador, damos clic en el icono monitor del puerto lograremos que el motor se encienda haga girar la barra a
serial (serial monitor): 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 máximo.
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,
Cómo haríamos que la función Serial.print() muestre este
nuevo valor?.
Experimento 10: Sensor de choque o fin de carrera,
cuál es su utilidad en
El sensor que usaremos a continuación es llamado fin de
carrera, se puede decir que son dos interruptores en uno,
hay un interruptor NA y otro NC, cuando se preciosa el
interruptor NA se cierra y el NC se abre, de esta manera
es posible enviar dos señales a nuestra tarjeta Arduino al
mismo tiempo si queremos. Por ejemplo, si le ponemos
este sensor en la parte frontal de nuestro robot si este
se chocara de frente oprimiría el sensor, si se oprime
enviaria una señal digital (5 voltios) a una de las entradas
de la tarjeta, podemos programar nuestro robot para que
cuando esto suceda retroceda y haga un giro de 180 grados
para alejarse del lugar donde se chocó.
Explicación:
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 envía una señal digital a la tarjeta Arduino por el pin digital
7 y que según 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 mínimo 330 ohmios entre este y GND, no se
debe conectar directamente el LED entre el pin digital y GND porque quemaríamos el LED.
21
Código: Explicación:
/**************************************************************/ En este experimento se puede ver como la velocidad en
// Creado por José Luis Susa - 2010
que prende y apaga el LED varía de manera inversa a la
//Entrada donde se conectará el sensor distancia medida por el sensor. Entre más lejos el sensor
int sensorPin = 0; detecte un objeto más rápido prende y apaga el LED.
// Salida digital donde se conecta un LED o una bocina La distancia es medida mediante la salida de voltaje
int ledPin = 13; del sensor, a mayor distancia menor voltaje de salida e
viceversa, este voltaje es recibido por la tarjeta Arduino
// Variable para guardar el valor medido del sensor
int sensorValue = 0; y convertido con su conversor análogo-digital y guardado
en una variable llamada “sensorValue”.
//variable donde guardaremos las distancia en cm,
//luego de hacer la conversión necesaria con la fórmula de abajo Ejercicios aconsejados:
int distanciaCm;
Modificar el código para que se encienda el LED solo si
la distancia medida es menor a 15 cm, si es mayor debe
void setup() { estar apagado el LED. Borrar lo que no necesitaremos,
// declarar el ledPin como OUTPUT:
pinMode(ledPin, OUTPUT); usar la variable “sensorValue”, la fórmula de conversión
a cm, la variable “distanciaCm” y una condición IF ELSE.
//inicialización serial para mostrar datos en la pantalla
Serial.begin(9600); Experimento 12: Sensor proximidad, cuál es su
}
utilidad en robótica?
void loop() {
Este sensor se usa generalmente para detectar colores
//lectura del voltaje arrojado por el sensor
//que va aproximadamente de 0 a 600. como negro y blanco, ya que como el blanco refleja la luz
//este valor debe ser convertido luego a centímetros totalmente el sensor envía una señal de 5v, cuando se
sensorValue = analogRead(sensorPin); pone frente a un color negro, este no permite que haya
//Se enciende la salida ledPin rebote de la luz infrarroja y por tanto el sensor envía una
digitalWrite(ledPin, HIGH); señal de 0v. Este efecto es útil para hacer robot que sigan
líneas, si se ubican dos sensores a los costados de una
//Tiempo de espera de <sensorValue> millisegundos:
delay(sensorValue); línea negra, cada vez que se salga un poco de la línea solo
basta hacer girar un poco el robot en sentido contrario
//Se desactiva la salida ledPin para alinearlo nuevamente y seguir la línea.
digitalWrite(ledPin, LOW);
Hay que tener en cuenta que la luz ambiente puede modificar
//Tiempo de espera de <sensorValue> millisegundos: fuertemente las lecturas del sensor, así que es mejor dejarlo
delay(sensorValue); siempre oculto de la luz, si es posible debajo del robot y
//imprimimos en pantalla el valor medido cubierto por los lados, otra solución es mantener a su
Serial.print (“\nValor Medido:”); alrededor una luz constante rodeándolo por ejemplo de LEDs.
Serial.print (sensorValue);
Lo primero que debemos hacer es clasificar las 4 patas del
//cálculo de la distancia en centímetros sensor con ayuda del siguiente gráfico:
//a partir del voltaje medido anteriormente
distanciaCm = (2914 / (sensorValue + 5)) - 1;
Nota: El bombillo azul esta en la parte superior de la imagen 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); //inicialización 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);
}
/***********************************************************/
Ejercicios aconsejados:
Poner el sensor en la luz del sol y visualizar como afecta la luz ambiente las medidas obtenidas.
Arreglar el código para que funciones bajo estas nuevas condiciones ambientales.
23
Taller 5: Bienvenidos al mundo
de la robótica, juguemos con
los motores de un robot.
En los siguiente dos talleres vamos a aprender a controlar Para el trabajo que se realizará se va a usar el puente H de referencia L293D:
2 motores de corriente directa llamados motores DC, y 1 Habilitar motor1
serán quienes hagan andar nuestro robot. Inicialmente 2 Entrada1 motor1 ENABLE 1 1 16 VSS
haremos el experimento para manejar un solo motor luego 3 Salida 1 motor1
partiendo de este aprenderemos cómo poder usar un S1
4, 5 Negativo alimentación motores y driver S2 INPUT 1 2 15 INPUT 4
este dispositivo es servir como interface entre el micro 15 Entrada1 motor2 VS 8 9 ENABLE 2
y un motor, ya que no es conveniente conectarlos 16 Positivo alimentación chip (5v)
directamente porque el motor maneja corrientes muy
altas para el micro y esto lo dañaría inminentemente. El cierre y apertura
Figura 1: Cerrando interruptores S1 y S4
de los interruptores estará a cargo del micro que está conectado a este
Figura 2: Cerrando interruptores S2 y S3
Un puente H generalmente es conocido como “driver” puente H mediante los pines de entrada Input 1, 2, 3 y 4.
(controlador, conductor, manejador) de un motor, ya En el pin 8 (alimentación 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 dirección, y controla su velocidad mediante una salida voltios). 0El regulador reducirá los 9v a 5v para no dañar los motores con exceso de voltaje:
7
PWM (obtenida del micro). CNY
Un puente H es un conjunto de interruptores que se cierran
y abren para controlar la dirección del motor. Si se quiere
A
hacer girar el robot es necesario cerrar los interruptores E
S1 y S4 o bien S2 y S3 para que circule la corriente por C
el motor: K= Cátodo
Patillaje del CNY70
/***********************************************************/
Explicación:
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
mínimo 5v hasta 36 voltios, según la capacidad del motor, para nuestro caso los motores que
tenemos reciben máximo 6 voltios.
Hay dos líneas que llegan al chip desde la tarjeta Arduino, estas son las señales PWM que Las conexiones para el segundo motor son similares a las
enviamos desde Arduino para controlar la velocidad del motor, en el código escribimos la del primero, las mismas conexiones que se hicieron en la
función analogWrite(número de pin, valor PWM), entre los paréntesis ponemos el “número de parte superior del chip se hacen abajo para controlar el
pin” por el que enviaremos el “valor PWM” que deseamos. El valor del PWM va de 0 a 255. segundo motor. En el primer montaje usábamos los pines
La razón por la que hay dos PWM para un motor es para poder controlar el sentido de giro, PWM 6 y 9 del Arduino, en este caso usamos los pines 9 y
enviando por un pin un PWM y por el otro 0, el motor girará, si queremos que vaya en sentido 11 para el motor de arriba y los pines 5 y 6 para el motor
contrario invertiremos lo que enviamos en los dos pines, en el primer pin enviaremos ahora 0 de abajo. Hay que fijarse bien que se conecten los cables
y en la segundo el PWM que queramos, si queremos detenerlo debemos enviar 0 por ambos en los pines marcados como PWM en la tarjeta Arduino
pines. Por eso en el código enviamos primero un PWM de 100 por un pin y 0 por el otro, y (pin 3, 5, 6, 9, 10, y 11), hay pines que no son PWM y por
al cambiar de sentido de giro enviamos 0 al primero y 100 al segundo. tanto no nos servirán.
25
Código: Explicación:
/***********************************************************/ Al igual que en anterior experimento hacemos que ambos
//Creado por José Luis Susa 2010 motores giren en un sentido y luego en otro, invirtiendo las
señales PWM que enviamos desde la tarjeta Arduino. Esta
int motor1A = 11; // salida de pwm al motor vez tenemos 4 pines PWM para manejar los 2 motores,
int motor1B = 9; // salida2 de pwm al motor
debemos configurar los 4 pines como salidas en la función
int motor2A = 5; // salida de pwm al motor 2
int motor2B = 6; // salida2 de pwm al motor 2 “SETUP” y luego en la función “LOOP” enviar por ellos las
señales PWM que deseamos, primero ponemos a girar el
void setup() { primer motor, luego el segundo y hacemos una espera de
// PWM del primer motor 3 segundos para que giren así durante este tiempo, luego
pinMode(motor1A, OUTPUT); cambiamos las señales de ambos motores y esperamos
pinMode(motor1B, OUTPUT); otros 3 segundos girando en este nuevo sentido antes de
// PWM del segundo motor volver a invertir el giro.
pinMode(motor2A, OUTPUT);
pinMode(motor2B, OUTPUT); Cuando programemos nuestro robot para que vaya al
} frente, nos encontraremos que quizás las llantas no giran
como deseamos, una puede girar en sentido inverso a
void loop() { cómo queremos, y en vez de ir de frente el robot gira, la
//girar primer motor solución es invertir los cables de PWM, o los cables del
analogWrite(motor1A,100); motor, poniendo uno de los cables donde está el otro,
analogWrite(motor1B,0); lograremos que ambos motores giren de la misma forma
//girar segundo motor con la misma programación.
analogWrite(motor2A,100);
analogWrite(motor2B,0);
/***********************************************************/
Complemento Teórico:
Hacer el ejercicio mental de pensar en varios tipos de
robot simples, reconocer sus objetivos, y pensar en
cómo hacerlo funcionar (el algoritmo), luego pensar en
las variables a utilizar, la configuración y el desarrollo
del código 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 programación usaríamos? Qué variables y que
acciones efectuará nuestro robot. Entradas? Salidas?
27
Código: if (distanciaCmMedida>12){ //el robot debe acercarce al objeto
//motor 1 adelante
analogWrite(motor1A,0);
29
delay(100); Ejercicios aconsejados:
analogWrite(motor1B,pwm1);
Hacer que el movimiento del robot sea más suave, corregir
//motor 2 adelante los movimientos para que los giros sean menos bruscos y
analogWrite(motor2A,pwm1); agregar una condición adicional para que si el robot está a
delay(100); una distancia entre 4 y 6 se mueva de frente, en las otras
analogWrite(motor2B,0); dos condiciones deberán modificar el valor de la condición
para que cuando la distancia sea menor a 4 el robot se
//cuando vaya hacia adelante prenda el LED
aleje y si es mayor a 6 se acerque al muro.
digitalWrite(ledPin, HIGH);
}
}
/***********************************************************/
Complemento Teórico:
Es necesario analizar el código 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.
int pwm1=255;
void setup() {
//configuracion motor 1
pinMode(motor1A, OUTPUT);
pinMode(motor1B, OUTPUT); void loop() {
int distanciaCm;
//configuracion motor 2 // la lectura del sensor va de 0 a 500 aproximadamente
pinMode(motor2A, OUTPUT); sensorValue = analogRead(sensorPin);
pinMode(motor2B, OUTPUT);
//imprimimos en pantalla el valor medido
// declare the ledPin as an OUTPUT: Serial.print (“\nValor Medido:”);
pinMode(ledPin, OUTPUT); Serial.print (sensorValue);
//inicializacion serial para mostrar datos en la pantalla
Serial.begin(9600); 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
Módulo
Educativo
de construcción de robots
para estudiantes
Atentamente
Ing. José Luis Susa Rincón.