Programando nuestro robot para que avance al frente

Anuncio
Programando nuestro robot para que avance al frente y hacia
atrás
Requerimientos
Para el desarrollo de esta actividad se requiere que:
 Contemos con un robot BoeBot armado con placa Arduino.
Observemos el video en la comunidad virtual para ver cómo se deberá comportar nuestro
BoeBot una vez que se encuentre programado.
Configurando Arduino
Antes de que iniciemos la programación de los servos necesitamos configurarlos para que sean
reconocidos como tales indicando los puertos en los cuales se deberán conectar los motores.
Como tenemos los servos de movimiento conectados a los pines 10 y 11, debemos crear dos
objetos tipo servo para indicar los motores conectados, estos serán llamados leftServo (servo
conectado al lado izquierdo) y rightServo (servo conectado al lado derecho). Esto nos ayudará
al hacer la codificación más simple. Además tenemos que indicar los valores para establecer el
movimiento de los servos, debido a que los servos de rotación continua están colocados en
espejo, esto quiere decir que están simétricamente invertidos tendremos que establecer dos
variables para indicar las velocidades de movimiento de los servos, para el servo conectado al
lado derecho se establece el valor 0 (para indicar la potencia máxima de movimiento en
sentido de las manecillas del reloj); para el servo conectado al lado izquierdo del robot, se
establece el valor 180 (para indicar la potencia máxima de movimiento en se ntido inverso de
las manecillas del reloj). Recordemos que uno de los motores se activa en sentido contrario al
movimiento de las manecillas del reloj debido a la posición en que están montados. De esta
forma logramos que el robot avance hacia el frente por un determinado periodo de tiempo,
indicado por la pausa del comando delay.
Mientras que es bueno que nosotros no tengamos que revisar manualmente en qué sentido es
hacia al frente para cada servo de manera individual, el problema surge cuando los servos
están montados en forma de ‘espejo’ uno con respecto al otro, notaremos que ambos están
rotando en la misma dirección (manecillas del reloj) si se envía el mismo valor (0) para el
comando write. Sin embargo, como los servos están montados en forma de espe jo e
invertidos, uno de los servos (en este caso, el servo derecho) gira el robot hacia atrás. Como tal
cuando enviamos a ambos servos la misma señal, uno moverá el robot hacia al frente y otro lo
moverá hacia atrás, resultando en que el robot gire sobre su propio eje.
www.smartcubo.com
1
Enviando distintos valores de movimiento a los servos se invertirá la “dirección” del
movimiento del servo izquierdo, permitiendo que se mueva el robot en línea recta hacia el
frente.
Programando el Comportamiento
Por ahora nosotros sólo queremos que nuestro robot avance al frente por dos segundos, se
detenga por un segundo, se mueva hacia atrás por dos segundo, después se detenga por otro
segundo. Queremos que el robot haga esto indefinidamente por eso empezaremos por colocar
un ciclo loop (infinito).
Controlando los Servos
Para controlar un servo, en este caso el servo que mueve el lado izquierdo, utilizaremos el
siguiente comando write
Donde iAvanceServoRight es un valor tipo entero (0 a 180). Cuando lo usamos con un motor
(servo de rotación continua), este comando es utilizado para fijar la velocidad ( 0 a 180), donde
los valores entre 90 y 180 indican que el motor se mueve en reversa; los valores entre 0 y 90
indican que el motor se mueve hacia al frente y el 90 que el motor se encuentra detenido.
Noventa es la posición “central” del servo, y 0 a 180 es el rango del servo. Experimentemos
con valores más pequeños a los límites para verificar el movimiento de los servos y evitar
romperlos. Para activar los servos recordemos que debemos utilizar el valor 0 y 180 para el
servo derecho e izquierdo respectivamente.
Haciendo que los servos se muevan hacia el frente
Para hacer que el robot avance hacia el frente, necesitamos fijar ambos servos para que
avancen al frente a la misma velocidad. Fijando ambos servos al nivel de poder
correspondiente y añadiendo un tiempo de espera de 2 segundos se completará la primera
parte de nuestra meta:
Al colocar este código dentro del ciclo loop, el robot solamente continuaría avanzando hacia el
frente. Esto es porque el código se mantendría iterando sobre el ciclo sin ningún código que
hiciera que se detuviera.
www.smartcubo.com
2
Deteniendo los servos
Como necesitamos hacer que el robot se detenga por un segundo, necesitamos fijar ambos
servos a velocidad 90 y contar con un comando delay de un segundo. Podemos utilizar una
versión modificada del código previo cambiando el nivel de poder de cada servo a “90” y el
valor de 2000 ms del comando delay a 1000 ms:
Haciendo que los servos se muevan en reversa
Tenemos segmentos de código para hacer que el robot se mueva hacia el frente por dos
segundos y que se detenga por un segundo. Sin embargo, seguimos necesitando el código para
hacer que el robot vaya hacia atrás por dos segundos. Para hacer esto, podemos nuevamente
utilizar el código para avanzar hacia el frente, pero ahora fijaremos los servos a un valor
contrario al indicado para hacerlos avanzar hacia el frente, de tal forma que el robot se mueva
hacia atrás.
Uniendo todos los bloques
Ahora tenemos los bloques de código para hacer que el robot se mueva hacia el frente por dos
segundos, se detenga por un segundo, y se mueva en reversa por dos segundos. Sin embargo,
necesitamos colocar los bloques juntos para ir hacia el frente, se detenga, se mueva en
reversa, se detenga y repita las acciones. Entonces lo que necesitamos hacer es colocar el
comportamiento del código de arriba en el siguiente programa.
www.smartcubo.com
3
Una vez que todo está organizado y se han juntado los bloques de código, terminaremos con
algo como esto:
www.smartcubo.com
4
Nota: debido al diseño del Parallax BoeBot, necesitaremos mover el switch a la posición 2 para
que los servos funcionen.
www.smartcubo.com
5
Realicemos las siguientes pruebas:
¿Qué sucede si disminuyo el nivel de poder de los motores cuando avanza hacia el frente?
a. El avance sigue siendo igual.
b. La distancia que el robot avanza en reversa es mayor.
c. El robot avanza una mayor distancia.
El comando delay permite que nuestro robot…
a. Pueda avanzar hacia el frente o en reversa.
b. Se detenga.
c. Haga una pausa entre instrucciones.
¿Qué pasa si duplicamos todos los valores de los comandos delay utilizados en nuestro
programa?
a. Nuestro robot avanza al frente y en reversa más lento.
b. Los desplazamientos hacia el frente y hacia atrás, y el tiempo que se queda detenido el
robot son mayores.
c. El robot se queda detenido y no se mueve.
d. Todo sigue igual.
www.smartcubo.com
6
Comandos utilizados en esta actividad.
write
servo.write(int ángulo)
(int) Ángulo de desplazamiento del servo.
Envía un valor al servo, controlando el eje de acuerdo al valor. En un servo estándar, esto fijará
el ángulo del eje (en grados), moviendo el eje en esa dirección. En un servo de rotación
continua, este valor establecerá la velocidad del servo (siendo 0 la velocidad máxima de
movimiento en una dirección, 180 siendo la velocidad máxima de movimiento en la dirección
contraria y el valor de 90 indicando que el servo se detenga).
Parámetro
servo
ángulo
Explicación
Una variable de tipo servo
Valor que se envía al servo, de 0 a 180
www.smartcubo.com
Tipo de Dato
Servo
Entero
7
Descargar