Resistance is Futile

Australasian Virtual Worlds Workshop 08

Investigadores, educadores y profesionales intercambian ideas, conocimientos y visiones del futuro.

http://avww.org/
http://jokaydia.com/2008/11/28/avww08-starting-today/


Aprender a Programar con Robotica

RoboMind

RoboMind

Diendo vueltas por el ciberespacio me encontre esta vez con una herramienta para la enseñanza basica de la algoritmia y la programacion por medio de robots. La herramienta desarrollada en java y de fuente abierta permite de controlar un robot a traves de un control remoto o por medio de un script que contiene comandos para realizar acciones sobre el robot, asi como tambien instrucciones que permiten cambiar el flujo de control, permitiendo realizar tareas repetitivas entre otras.

Asi que esta herramienta mezcla muchas de las cosas en las que ando trabajando enseñanza, programacion y robots !!!!

http://www.robomind.net


Resaltar Codigo en WordPress

Inmediatamente después de publicar algún código de los desarrollos realizados en Arduino, me di a la tarea de buscar un plugin para WordPress que me permitiera resaltar el código (Code Highlighting), recordé que mi amigo Jorge Ivan Meza había instalado uno hace alguno tiempo, pase por su blog y encontré que se trataba de CodeHighlighterPlugin así que me di a la tarea de instalarlo :

  1. Ir a la pagina :
    http://ideathinking.com/wiki/index.php/WordPress:CodeHighlighterPlugin
  2. Descargar la ultima versión (1.8) :
    http://ideathinking.com/wiki/images/5/58/Code-highlighter.zip
  3. Descomprimir en wp-content/plugins
  4. Activar el plugin utilizando el administrador de WordPress

Para utilizarlo simplemente colocar el codigo en un bloque pre y adicionar el atributo lang con el nombre del lenguaje.

Para Arduino se puede utilizar cpp, para Processing y Mobile Processing se puede utilizar java.

Ejemplo :

 
public class HolaMundo {
   public static void main(String[] args){
      System.out.println("Hola Mundo");
   }
}
 

Arreglo de Servos

Multiples Servo + Arduino

Utilizando arreglos se puede simplificar mucho el código para la configuración de los servos y la comunicación con estos.

#include
#undef int
#undef abs
#undef double
#undef float
#undef round
 
Servo servos[5];
 
long loopCounter = 0;
int angleCounter = 0;
int angles[] = { 45,90,135,90 }; 
 
void setup()
{
  for(int i=0; i<5; i++)
    servos[i].attach(i+2);
} 
 
void loop()
{
  Servo::refresh();  
 
  if(loopCounter++%25000 == 0)
    updateServos(angles[angleCounter++%4]);
} 
 
void updateServos(int angle)
{
  for(int i=0; i<5; i++)
    servos[i].write(angle);
}

Arduino + Multiples Servos

Servo + Arduino

Una limitante de la libreria para el manejo de servos de Arduino, es que solo se pueden tener dos servos al mismo tiempo lo cual no es suficiente cuando se piensa en crear un robot con cuatro o mas servos, para esto es necesario utilizar una libreria del mismo nombre la cual puede encontrarse en el wiki de Arduino.

Pasos para la instalacion de la libreria utilizando Arduino 0012 Alpha :

A continuacion se muestra el sketch necesario para manipular cinco servos utilizando la libreria :

 
#include <Servo.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
 
Servo myservo0;
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
 
long loopCounter = 0;
int angleCounter = 0;
int angles[] = { 45,90,135,90 }; 
 
void setup()
{
  myservo0.attach(2);
  myservo1.attach(3);
  myservo2.attach(4);
  myservo3.attach(5);
  myservo4.attach(6);
} 
 
void loop()
{
  Servo::refresh();  
 
  if(loopCounter++%25000 == 0)
    servos(angles[angleCounter++%4]);
} 
 
void servos(int angle)
{
  myservo0.write(angle);
  myservo1.write(angle);
  myservo2.write(angle);
  myservo3.write(angle);
  myservo4.write(angle);
}
 

En la version 0012 de Arduino es necesario adicionar el undef debido a que al momento de compilar se produce un error.

A diferencia de la libreria oficial, esta libreria permite conectar los servos en cualquiera de los pines de la tarjeta permitiendo tener hasta 20 servos, en el ejemplo utlizaremos cinco servos los cuales conectamos a los pines 2,3,4,5,6; no se utilizaron los pines 0 y 1 debido a que esto manejan la comunicacion serial con el computador.

Se debe tener encuenta que el metodo Servo::refresh(); debe llamarse cada 50ms por lo menos, por tal motivo no debemos utilizar pausas con delays, lo cual no permite que la libreria funcione correctamente, debemos cambiar la estrategia por ejemplo a ejecutar determinadas tareas despues de que el loop se ejecute varia veces, esto se logra teniendo un contador en el loop y ejecutando el codigo despues de que se llegue a determinado valor, por ejemplo :  if(loopCounter++%25000 == 0) ejecuta los llamados al cambio de posicion de los servos cada que el loop se ha ejecutado veiticinco mil veces. Para controlar la posicion de los servos se utiliza un arreglo el cual especifica los angulos, los cuales van siendo cambiados a medida que se solicita el cambio de posicion en el loop.

Nota :
Recuerde evitar el uso de delays(), esto no permite el correcto posicionamiento de los servos


Page 1 of 3123
Powered by WordPress | Designed by Elegant Themes