Tecno&Logía
Blog de un profesor de tecnología, que enseña tecnología.
jueves, 15 de noviembre de 2012
viernes, 8 de junio de 2012
Materiales necesarios para construir un robot siguelíneas
Los materiales para la construcción de nuestro
robot sigue líneas los hemos adquirido a través de tiendas online:
- Bricogeek: http://www.bricogeek.com/shop/
- Cooking-hacks: http://www.cooking-hacks.com/
- Onda radio: http://www.ondaradio.es/
Componente
|
Imagen
|
Dirección
Web
|
Motor
con reductora 50:1
|
|
|
Rueda
de goma
|
|
|
Arduino
Uno
|
|
|
Sensores
ópticos QRD1114
|
|
|
Fundas/soporte
motores
|
|
|
Rueda
loca
|
|
|
Chip
L293D (Puente en H)
|
|
|
Zumbador
piezo
|
|
|
Diodos
led 5mm de alta lumninosidad
|
|
(Se
puede encontrar en tiendas de electrónica)
|
Resistencias
de 220 Ω, 330 Ω y 10 kΩ
|
|
(Se
puede encontrar en tiendas de electrónica)
|
Cable
de alimentación jack
|
|
|
Cables
de conexión
|
|
(Se
puede encontrar en tiendas de electrónica)
|
Cable
USB (A/B)
|
|
(Se
puede encontrar en tiendas de electrónica)
|
Tubo
Termoretráctil
|
|
(Se
puede encontrar en tiendas de electrónica)
|
Control de los motores DC con Arduino
En los siguientes
ejemplos y ensayos vamos a introducirnos en la programación de los
motores para conseguir diferentes movimientos básicos del robot:
- Marcha adelante.
- Marcha atrás.
- Giro izquierda.
- Giro derecha.
- Rotación a izquierda sobre su propio eje.
- Rotación a derecha sobre su propio eje.
Una vez que hemos realizado la
conexión del chip L293D o puente en H, procedemos a la programación
en el IDE de Arduino:
- Calentando motores: Vamos a comprobar el funcionamiento del motor izquierdo, que hemos conectado a los pines 4 y 5 de Arduino Uno. Para su programación, vamos a utilizar por primera vez las funciones, que son como unas rutinas que por su frecuencia de uso, si las etiquetamos con un nombre, facilitan y estructuran la programación a la vez que lo simplifican. Su uso es fácil, observa el siguiente ejemplo:
void
setup () {
pinMode(4,OUTPUT); //configuramos
los pines 4 y 5 como salidas
pinMode(5,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW); /*Esta
sería la configuración ideal, ya digitalWrite(5,HIGH);
que el pin 5 es del tipo PWM } lo que
nos permitirá variar la velocidad del motor en su avance. Si con
esta conexión el motor no gira hacia adelante, entonces habrá que
invertir la conexión del motor al chip L293D*/
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
void
loop () {
adelante(); //llamamos a la
función creada
delay(2000); //
esperamos 2 segundos con el motor en marcha
paro(); //paramos
el motor utilizando la función paro
delay(1000);
}
- ¿Y el motor derecho? Vamos a comprobar el funcionamiento del motor derecho, que hemos conectado a los pines 6 y 7 de Arduino Uno. Volvemos a utilizar las funciones. Observa el siguiente ejemplo:
void
setup () {
pinMode(6,OUTPUT); //configuramos
los pines 6 y 7 como salidas
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(6,HIGH); /*esta
sería la configuración ideal, ya digitalWrite(7,LOW);
que el pin 6 es del tipo PWM } lo que
nos permitirá variar la velocidad del motor en su avance. Si con
esta conexión el motor no gira hacia adelante, entonces habrá que
invertir la conexión del motor al chip L293D */
void
paro () {
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
loop () {
adelante(); //llamamos a la
función creada
delay(2000); //
esperamos 2 segundos con el motor en marcha
paro(); //paramos
el motor utilizando la función paro
delay(1000);
}
- ¡Y ahora los dos! Una vez que hemos comprobados que todo funciona bien y como nosotros queremos, vamos a utilizar los dos motores a la vez y vamos a introducir la función atrás:
void
setup () {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
atras () {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
void
loop () {
adelante();
delay(2000);
paro();
delay(1000);
atras();
delay(2000);
paro();
delay(1000);
}
- Y ahora los giros: Como ya puedes entender, para conseguir que el robot gire a la izquierda debes parar el motor de ese lado y mantener en marcha el derecho. Al contrario, para girar a la derecha, debes parar el motor derecho y mantener en marcha el motor izquierdo. Como ejemplo vamos a programar los siguientes movimientos:
- Adelante 2 s
- Paro 0,5 s
- Gira a izquierdas 0,25 s
- Paro 0,5 s
- Atrás 2 s
- Paro 0,5 s
- Gira a derechas 0,25 s
- Paro 0,5 s
void
setup () {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void
adelante () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
void
paro () {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
void
atras () {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
void
giraizquierda () {
digitalWrite(4,LOW); //paramos
el motor izquierdo
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
//mantenemos el motor derecho en marcha
digitalWrite(7,LOW);
}
void
giraderecha () {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
//mantenemos el motor izquierdo en marcha
digitalWrite(6,LOW); //paramos
el motor derecho
digitalWrite(7,LOW);
}
void
loop () {
adelante();
delay(2000);
paro();
delay(500);
giraizquierda();
delay(250);
paro();
delay(500);
atras();
delay(2000);
paro();
delay(500);
giraderecha();
delay(250);
paro();
delay(500);
}
Montaje de un puente en H para el control de motores
La tarjeta Arduino
proporciona una corriente máxima por canal de 40mA, suficiente para
activar pequeños actuadores como leds pero insuficiente para manejar
el consumo de un motor de corriente continua. Por ello, es necesario
utilizar un chip de potencia para amplificar esas señales de la
tarjeta, que además incorpora unos diodos de protección contra los
picos inversos de tensión producidos por la desconexión de cargas
inductivas.
Para
invertir la dirección del motor sin un nuevo conexionado requiere de
un circuito conocido como un PUENTE-H (observa cómo el circuito
alrededor del motor está en forma de H).
Motor en paro |
El cierre de A y D hace que el motor gire a derechas |
El cierre de B y C hace que se invierta el sentido de giro |
Es necesario observar que es fácil hacer un corto
de batería al cerrar por descuido los interruptores A y B o cerrando
los interruptores C y D. Esto pondría en peligro la batería. Una
buena medida para evitarlo es automatizar al máximo el control de
los interruptores.
Para
permitir controlar el Puente H al microcontrolador, los interruptores
mecánicos deben ser sustituidos por transistores. Observa el empleo
de diodos en el circuito. El bobinado en el motor es esencialmente un
inductor. Cuando el flujo de corriente en un inductor de repente es
cortado, la corriente de pronto no puede ir a 0. Por consiguiente,
inducen un voltaje oponiéndose a esta corriente. Este voltaje puede
ser tan alto que esto destruya los transistores. Los diodos de
retorno proporcionan un camino de vuelta seguro para esta corriente
que evita y protege los transistores.
El
puente-H, puede ser realizado con transistores discretos o puede ser
comprado como un circuito integrado. Utilizar un circuito integrado
ayudará a mantener el proyecto compacto y la lógica interna
previene que la batería pueda ser cortocircuitada como se describió
antes.
Para conseguir amplificar las señales
de control de la tarjeta Arduino, invertir el sentido de giro de los
motores mediante puente en H y proteger de las cargas inductivas,
utilizamos para ello un chip L293D. Aquí tienes el significado de
cada uno de sus 16 pines:
El chip L293 es un
driver de 4 canales capaz de proporcionar una corriente de salida de
hasta 1A por canal. Cada canal es controlado por señales de entrada
compatibles TTL y cada pareja de canales dispone de una señal de
habilitación que desconecta las salidas de los mismos.
Dispone de una patilla
para la alimentación de las cargas que se están controlando, de
forma que dicha alimentación es independiente de la lógica de
control. Con este circuito integrado se puede controlar el sentido de
giro de hasta dos motores simultáneamente.
CARACTERÍSTICAS DEL CHIP L293D
- Intensidad por canal =600mA
- Intensidad de pico por canal=1,2 A
- Protección contra sobretemperaturas
- Protección interna contra sobretensiones producidas por cargas inductivas
- Alimentación independiente de las cargas y control
- Alta inmunidad al ruido
- Tensión de alimentación de las cargas ≤ 36 V
-
Arduino 1: Programación simple de un semáforo
Programando
un semáforo. Vamos
a programar el encendido de tres leds conectados en los pines 4, 5 y
6 correspondientes a las luces roja, amarilla y verde
respectivamente. El tiempo de encendido será de 3s, 1s y 4s
respectivamente.
void
setup() {
pinMode(4,OUTPUT);
//configuramos los pines 4,5 y 6 como salidas
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
void
loop()
{
digitalWrite(4,
HIGH); //activamos el pin 4 (led rojo)
delay(3000);
//esperamos 3 segundos
digitalWrite(4,
LOW); //apagamos el led rojo
digitalWrite(5,
HIGH); //activamos el pin 5 (led amarillo)
delay(1000);
//esperamos 1 segundo
digitalWrite(5,LOW);
//apagamos el led amarillo
digitalWrite(6,HIGH);
//activamos el pin 6 (led verde)
delay(4000);
//esperamos 4 segundos
digitalWrite(6,LOW);
//apagamos el led verde
}
Esquema de conexión (realizado con fritzing) |
martes, 5 de junio de 2012
Robótica en Secundaria
El diseño, construcción y programación de robots es una de las tareas más completas y que dotan de más sentido a la materia de tecnología en secundaria. Además, proporciona a los alumnos un reto, los motiva y los hace competir entre ellos, mejorando los resultados.
En su didáctica se trabaja de forma colaborativa y mediante el método de proyectos.
Vivimos en un mundo dominado por máquinas programables, por lo que iniciar a los alumnos en los conocimientos para entenderlas y controlarlas es básico para su formación general.
Como experiencia, durante las jornadas del proyecto profundiza del curso 2010/11, llevamos a cabo uno de los primeros retos cuando uno se inicia en el mundo de la robótica: construir un robot siguelíneas. Como plataforma utilizamos placas Arduino Uno y utilizamos su lenguaje de programación.
A continuación te dejo el documento con las instrucciones detalladas, paso a paso, con diferentes ejemplos básicos para ir aprendiendo poco a poco a programar en el IDE de Arduino, tienes todos los circuitos, esquemas de montaje, lista de materiales, etc, hasta terminar con el programa final que da solución al reto planteado. Descarga el documento con las instrucciones de montaje y programación para que lo puedas hacer por ti mismo.
Los resultados los podéis ver en el siguiente vídeo. Espero que os sea de utilidad.
viernes, 1 de junio de 2012
Control de led's por i2c
La placa Arduino Uno soporta comunicación i2c, por medio de la librería wire, con el conseguiremos expandir los puertos digitales utilizando solo 2 pines analógicos. En el siguiente ejemplo, se muestra el control de 16 leds desde el puerto i2c de arduino, con lo este montaje deja libres todas salidas digitales y PWM. Como hardware adicional se ha utilizado un expansor i2c PCF8575
Tienes el código del programa tras el salto y el fichero fuente para descargar .
Tienes el código del programa tras el salto y el fichero fuente para descargar .
martes, 29 de mayo de 2012
Robot Oter_0
El robot Oter_0 es un proyecto experimental del profesor de Tecnología Adolfo Pedraza. Con este robot se ha investigado las posibilidades educativas de la construcción y programación de robots utilizando la plataforma Arduino. Los resultados han sido muy positivos y pienso que debería ser uno de los ejes vertebradores de la acción didáctica en tecnología para los niveles de 3º y 4º de Secundaria.
Suscribirse a:
Entradas (Atom)