Placa Controladora de Robots Shur

sábado, 10 de diciembre de 2011 2 Comentarios, Dejar un Comentario
Hola, he hecho un placa que esta basada en la antigua placa Wiring Sparfun 1.1 que integra un microcontrolador ATmega2561, de esa forma mi placa también utiliza el mismo microcontrolador que tiene muy buenas prestaciones dejando a esta placa en un nivel medio de capacidades.

El objetivo de diseñar esta placa es que se tuviera lo suficiente para controlar un Robot Humanoide con motores Dynamixel, que como ya saben son especialmente diseñados para robotica, dada la comunicación que se lleva con estos Servos he agregado un IC que pudiese controlar el flujo de datos entre el microcontrolador y el Servo que es un Buffer con habilitadores independientes, este circuito convierte el Full Duplex USART que integra el microcontrolador y lo transforma en un Half Duplex USART, he conservado las demás comunicaciones con opción de funcionar como pines digitales comunes, las comunicaciones disponibles en un puerto SPI y un I2C, de los dos USART disponibles en el microcontrolador se puede decidir si se usaran como tales o cambiar uno a comunicación USB o para el otro USART convertirlo en el Half Duplex USART ya mencionado.


También ademas del poder que conlleva esta placa es de un tamaño reducido por lo que no estorbaría con las partes mecánicas que pudiese tener nuestro robot, como podrán apreciar la placa a sido diseñada con EAGLE por lo que cualquiera tendrá en la posibilidad de modificar conexiones de los elementos sin demasiadas complicaciones ya que el EAGLE es de los más conocidos en este ámbito.


También como podrán en ver en la imagen anterior cuenta con 8 LEDs para ver las comunicaciones activas como los dos USARTs y el SPI ademas de un LED Auxiliar para desplegar o indicar estados los cuales podremos programar a decisión y un LED que nos indicara si la placa esta energizada.

Cuenta con un lector de Tarjetas MicrosSD por lo que de cierta forma ya no es tan alarmante el espacio en EEPROM y flash, ya que podremos utilizar este como un DataLogger de las acciones y registro de sensores.

Se a incorporado un switch para decidir si la placa esta siendo energizada por USB o por una Bateria, un botón para programarle acciones al ser programado nuestro robot ademas del tradicional botón de Reset.

Cabe resaltar que se utiliza el mismo lenguaje de programación que un arduino o las mismas tarjetas wiring por lo que se puede encontrar mucha información de como se programa en este tipo de tarjetas.


A continuación una descripción mas técnica de esta placa:

Comunicación:                        Puertos:                                   Capacidad:
    - 2 Full Duplex USART            - 36 pines digitales I/O             - 256KB de FLASH
    - 1 Half Duplex USART           - 8 pines ADC                            - 4KB de EEPROM
    - 1 I2C                                   - 6 pines PWM                           - 8KB de RAM
    - 1 SPI                                                            
    - 1 USB

Bueno ahora el por que Shur, Shur son las siglas de Savage Humanoid Robot, en pocas palabras una placa controlador de robots humanoides de Savage Electronics, Bueno espero les guste y aquí les dejo todo lo necesario para esta placa.
Recuerden descargar el IDE de wiring y añadir los archivos que podrán descargar a continuación:



Configurando Radios XBee

domingo, 18 de septiembre de 2011 4 Comentarios, Dejar un Comentario

Los Radios XBee pueden ser configurados de varias maneras mediante varias formas, pueden ser configurados con un Arduino, con un conversor USB-RS232, XBee Explorer, etc.Y pueden ser configurados para trabajar de muchas  formas con o sin ayuda de un controlador.


1.- Accesar al sistema de los XBee: Para entrar al sistema de un XBee se requiere de una comunicación Serial (USART) la cual el arduino usa para programara su microcontrolador es por eso que se puede usar un XBee shield para su configuración, si no tienes un XBee Shield solo alimenta tu XBee (Recuerda que la alimentación es de 3v3 ya que con un voltaje más alto lo quemaras) y conecta DOUT y DIN al RX y TX de tu arduino o puerto COM.( Recuerda que también las señales de comunicación deben de estar reguladas a 3v3, puedes utilizar un divisor de voltaje o CI 74HC4050, si estas usando un XBee Regulated este ya regula todos los voltajes a 3v3 por lo que lo único que cuidaras es no enviarle voltajes mayores a 6v ).

Los XBees tienen un Baud Rate de fabrica de 9600 por lo que la comunicación USART deberá ser de 9600, 1 bit de Stop, Sin paridad; Abre la terminal que más te guste, yo utilizo la misma que viene con el arduino ya que es sencilla y no nos mete en complicaciones.

El primer paso será teclear tres signos de más  +++  con No line ending que se encuentra a un lado del Baud Rate y dar click en Send, si esto se hizo correctamente el XBee responderá con un OK.
2.- Comenzando a configurar: En este paso todo depende de como queramos que trabaje nuestro XBee, por lo que describiré con un pequeño ejemplo algunas de las posibles configuraciones de los XBee, apartar de ahora todo lo que le mandemos al XBee deberemos cambiar el No line ending por Carriage return.

Configuraciones Básicas: Todos los comandos deberán tener como prefijo AT, los comandos pueden ser enviados en una solo cadena o comando por cadena, si se envía por cadena solo el primer comando deberá tener el prefijo y se separaran por una , (COMA).

  • ID   -   Network ID del XBee   -   ( 0 - 0xFFFF )
  • CH   -   Canal de Comunicación   -   ( 0x0B - 0x1A )   
  • MY  -   Dirección del XBee   -   ( 0 - 0xFFFF )
  • DH y DL   -   Dirección de destino   -  ( 0 - 0xFFFF )
  • BD   -   La velocidad de Transmisión   -  ( 0 (1200 bps) , 1 (2400 bps), 2 (4800 bps), 3 (9600 bps), 4 (19200 bps), 5 (38400 bps), 6 (57600 bps), 7 (115200 bps) )
  • RE   -   Resetea a los valores de fabrica  -   ( Sin parámetros )
  • WR  -  Guardar los cambios   -   ( Sin parámetros )
  • CN   -  Cerrar sesión   -   ( Sin parámetros )    
Entonces para configurar dos módulos será de la siguiente forma:

ATID1234,DH0,DL1,MY0,BD3,WR,CN
ATID1234,DH0,DL0,MY1,BD3,WR,CN

De esta forma se han configurado los XBee para que se comuniquen entre ellos a 9600 bps, el XBee responderá con un OK por cada comando.


3.- Configuraciones especiales: Los XBee cuentan con I/O y ADC que facilitan todo el trabajo ya que si no es muy especifica o especial la información que queremos transmitir lo podremos hacer sin un µcontrolador directamente de sus puertos tras haberlos configurado. 

El modulo XBee cuenta con 9 I/O, 7 ADC. del DIO0 al DIO6 pueden ser configurados como digitales o conversares analógicos digital. debemos tomar en cuenta que solo contamos con dos puertos PWM así que tendremos esos dos puertos como salidas ADC en el otro Modulo XBee, DIO7 solo es digital y DI8 solo podrá ser entrada digital.

Para seleccionar el modo de DIO existen 4 opciones: 0 Ninguno, 1 Función Especial, 2 ADC, 3 Salida Digital LOW, 4 Salida Digital HIGH y se configuran de la siguiente manera:



ATD33             // Configura el DIO3 como entrada digital

ATWR            // Guardar cambios

de forma que en el otro modulo deberemos hacer del DIO3 salida digital.

ATD34             // Configura el DIO3 como salida digital HIGH
ATWR            // Guardar cambios

para el ADC sera:

ATD42            // Configura el DIO4 como ADC
ATIR14           // Sampleo de 20 mili-segundos
ATIT5             // Envia tras 5 sampleos
ATWR            // Guardar cambios

por lo que el otro modulo tendrá la salida de este ADC, los pines capaces de mostrar el ADC que fue transmitido por el otro modulo son el RSSI y el DIO11.

ATP02           // Activa el PWM en PWM0
ATIU1           // Habilita Salidas I/O UART
ATIA1           // Dirección de origen de datos ( MY del otro modulo)
ATWR          // Guardar cambios

4.- Enviar datos de XBee a XBee por medio USART: para esto necesitas dos µcontroladores ya que los datos serán seriales tanto en la entrada como en la salida a la velocidad como hayamos configurado con BD, en este caso 3(9600)bps, por lo que si usamos un Arduino para la transmisión y recepción de datos usaremos la instrucción Serial.  Ejemplo:

 Arduino XBee 1:

void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print('E');
delay(1000);
Serial.print('A');
delay(1000);
}

Arduino XBee 2:

void setup(){
Serial.begin(9600);
pinMode(3,OUTPUT);
}
void loop(){
ifSerial.available() > 0 ){
  if( Serial.read() == 'E' )
     digitalWrite(3,HIGH);
  else
     digitalWrite(3,LOW);
}
}
Estos dos programas harán prender un LED conectado al pin D3 del Arduino por medio de los Radios. Para entender más estos comandos recomiendo leer el manual del XBee, Espero sus comentarios. :D

LCD Nokia 132x132px. Color 12-bits.

sábado, 20 de agosto de 2011 1 Comentarios, Dejar un Comentario
La LCD del Nokia 6100 es un Display de 132x132 pixeles que son un total 17,400 pixeles el cual cada pixel tiene la posibilidad de desplegar 12-bits de color ósea 4096 colores diferentes, es una display pequeño pero bastante potente, o lo mínimo para un buen proyecto de electrónica.

Existen variedad de tutoriales acerca de como hacer funcionar este display, así como bibliotecas para el Arduino, PIC, MSP430 y muchos otros microcontroladores, yo he decidió utilizar una ATmega2561 que es el microcontrolador que utiliza la tarjeta Wiring en su versión 1.1 lo cual facilita todo el proceso.


Esta pantalla se comunica a travez de SPI de 9-bits donde el noveno bit es el que le dice al controlador de este display si lo que estamos enviando es un Comando o es un Dato, En esta pantalla puede tener dos diferentes controladores, un EPSON o un Phillips. Las Bibliotecas que se pueden encontrar de este display para el arduino trabajan con cualquiera de los dos controladores, aunque convendría conocer cual es el que tenemos y reducir el código que no sea necesario.

La creación de fuentes es algo bastante sencillo pero laborioso, ya que hay que examinar letra por letra y pasarla a un arreglo, o bien conseguir un programa que lo haga por ti, las únicas licitantes del programa es que no siempre va a haber del tamaño de fuente que tu necesitas, ese fue mi caso ya que yo quería una fuente de 8x12 por lo que tuve que escribir letra por letra, pero es satisfactorio el resultado.


Y lo mejor de todo es la posibilidad de desplegar imágenes:


La Bibliotecas que he usado son: Nokia_lcd de Gravitech y ColorLCDShield del Arduino y las he combinado en una para aprovechar lo mejor de las dos. He cambiado el tipo de fuente y organizando la biblioteca para que se pueda editar con mayor facilidad.


Espero sus comentarios. :D

Simulado un Dispositivo Dynamixel en Controladores Bioloid

jueves, 11 de agosto de 2011 12 Comentarios, Dejar un Comentario
Existe una forma de agregar sensores como acelerometros, gyros etc. a tu controlador Bioloid compatible con la comunicación de los servos Ax-12, esto se logra simulando ser un servo pero enviando datos de este tipo de sensores además de ser compatible con Daisy Chain lo cual ahorra conectores hacia tu placa controladora y conectandolos directamente a cualquiera de tus servos.

Cuenta con características como tener un ID y solo responder tras ciertos comandos acordes con el protocolo que manejan los servos Dynamixel Ax-12, Ademas su pueden combinar varios sensores en un mismo dispositivo como lo es el Gyro, sensores de temperatura y todo tipo de sensor según tus necesidades.

He usado un Arduino para el envío de datos hacia el controlador Bioloid por su fácil programación y gran variedad de códigos que te ayudaran a implementar nuevas funciones en el Dispositivo.


De esta forma ya no será necesario conectar una fuente en el Jack o USB ya que se alimentara de la misma fuente de los servos, evitando exceso de cables en tu robot. Posteriormente podrás construir tu propia placa arduino con componentes SMD para la reducción de su tamaño.


Debido a que la librería HardwareSerial no es tan rápida como los servos Ax-12 tendremos que sacrificar la velocidad a unos 200,000 bps para que al arduino no le cueste procesar las peticiones del controlador Bioloid, tendrás que reducir la velocidad de todos los servos a la misma que el Arduino para lograr una buena comunicación con todos los dispositivos.

Los pines o cables  que saldran de este nuevo dispositivo serán los mismos que el de un servo Ax-12, Pin GND-> Conectado al GND del arduino, pin Vin-> Conectado al pin Vin del arduino y pin Data-> Conectado a los pines Tx y Rx del Arduino por ser un Half Duplex Usart.

Descagar Sketch Arduino Half Duplex Usart Sensor for Bioloid. 

En el Sketch la velocidad esta definida por BAUD_RATE  a 9600, cambiar este si se desea utilizar una diferente. El acelerómetro tendrá que ir conectado a A1 y A2 siendo eje x y eje y respectivamente.

Solo sube este sketch a tu arduino haz las conexiones y estará listo para ser conectado al daisy chain de tu controlador Bioloid.*Puede ser que tengas que modificar un poco el coligo para ajustar tu sensor.

Espero tus comentario.

Biblioteca Dynamixel Download

143 Comentarios, Dejar un Comentario


Actualizado 13/06/2013              Version 1.2.1

Importante: En la actualización de la biblioteca V1.2.1 las instrucciones cambian de ser Ax12.instruccion a Dynamixel.instruccion ya que es capaz de trabajar con diferentes modelos de estos servomotores, también el nombre de la biblioteca a sido modificado siguiendo el estándar de notación CamelCase.

Online Documentation by CornDog: http://austinlpalmer.com/Projects/Documentr/#/home


SourceForge Project: Download Library



*SoftSerial remplazara al antiguo SoftwareSerial (El remplazo no afecta el comportamiento del SoftwareSerial solo hace algunas funciones publicas para poder ser llamadas por la Biblioteca Dynamixel ) y es necesaria incluirla en el Sketch #include “SoftwareSerial.h”

**Las versiones de Dynamixel Serial1, Serial2 y Serial3 solo son para Arduino Mega ya que los otros arduinos no cuentan con estos puertos seriales.

***La velocidad por SoftSerial se vera reducida ya que la comunicación es hecha a través de pines que no fueron diseñados para esa actividad. (La lectura por SoftwareSerial aun no funciona ya que Softwareserial no realiza una lectura correcta )
Recomiendo leer el Manual de estos servomotores para un mejor entendimiento.

Versiones anteriores de estas bibliotecas pueden ser descargados desde aquí.

- Special thanks to Ambarish Parasar for making the translation of the documentation.

Acelerómetro + Arduino

martes, 9 de agosto de 2011 17 Comentarios, Dejar un Comentario
Los acelerómetros son sensores muy útiles en el diseño de sistemas autónomos, los cuales puedan corregir o alterar su estado según los sean los datos, un acelerómetro como su nombre lo indica es aquel que es capaz de medir aceleraciones, existen de 1, 2 y 3 ejes (x,y,z), también pueden variar el tipo de interfaz ya sea analógico o digital, y entre los digitales varia el protocolo de comunicación (USART,I2C,SPI... etc.).


En este caso se trata de un acelerómetro analógico a 3.3v, con selector de precisión (GS1,GS2) y Sleep.
los pines x,y & z son las salidas de cada eje, las cuales tiene determinado voltaje según sea la aceleración medida en su respectivo eje. La conexión de este sensor con el arduino es muy sencillo ya que solo es necesario medir el voltaje con los ADC del arduino (A0,A1,A2...), para su fácil instalación decidí soldar un cable de vcc a sleep y conectarlos a 3v3 del arduino ya que a un voltaje más alto el sensor se quemaría.


Para este tipo de sensores no es necesaria ninguna Biblioteca y el código es bastante reducido:

void setup(){
     Serial.begin(115200);
     pinMode(14,OUTPUT);
     pinMode(18,OUTPUT);
     pinMode(19,OUTPUT);
     digitalWrite(14,LOW);
     digitalWrite(18,HIGH);
     digitalWrite(19,HIGH);
}

void loop(){
Serial.print(“ Eje x:   ");
    Serial.println(analogRead(A1));

Serial.print(“ Eje y:   ");
    Serial.println(analogRead(A2));

Serial.print(“ Eje z:   ");
    Serial.println(analogRead(A3));

delay(100);
}

Con este sencillo programa podemos ver los datos de cada eje en la terminal, puede usarse map(); para ajustar los rangos de valores deseados para el procesamiento en acciones de ciertas aplicaciones.

Variable = map(sensorX,0,1023,0,255);  // con esto se pierde resolución pero puede resultar ser mas sencillo de manejar datos pequeños.

Ejemplo: Podemos visualizar la posición de nuestro sensor por medio de una animación 3D (Un cubo RGB) que se va a mover según la posición de nuestro Acelerómetro. A continuación dejo los códigos.



Espero sus comentarios. :D

Reparar Servo Dynamixel Ax-12+

martes, 19 de julio de 2011 25 Comentarios, Dejar un Comentario
Existen varias formas de reparar un servo Dynamixel Ax-12+, si no recuerdas que ID y Baud Rate tiene configurado tu servo la solución es muy sencilla ya que el servo se puede reiniciar con el USB2Dynamixel y el Dynamixel Configurator, también se puede hacer esto mismo con un pequeño programa que he hecho con el Arduino, este programa regresa el servo o los servos conectados a un Baud Rate de 1Mbps y ID 1 y al terminar de ser reiniciado el servo se mueve en posiciones aleatorias con lo cual el servo ha sido reiniciado correctamente y esta listo para ser usado.
El programa requiere tener instalada la Biblioteca Dynamixel que he publicado anteriormente.

Descargar Biblioteca Dynamixel


La siguiente forma de reiniciar un servo es un poco más difícil. El primer paso será abrir el servomotor hasta llegar al chip, no es necesario abrir la parte de los engranes, basta con abrir la tapa de atrás que da acceso a este.


El siguiente paso será soldar cables a los pines VCC, GND, RESET, SCK, MISO y MOSI que son los pines de programación de este chip (AVR ATmega8 - 16MHz), los puedes soldar directamente al circuito como yo lo he hecho o al puerto que se encuentra en el extremo derecho, no olvides alimentar el servo al programar y que vcc es 5v no los 10v con los que se alimenta el servo.            

Ya soldados los cables solo hay que conectarlos a nuestro programador de AVR (AVRISP, DRAGON, etc. ) y grabar los archivos Dynamixel_Flash.hex, Dynamixel_EEPROM.hex y Dynamixel_elf.elf, los fuses son: High: 0xC8 Low: 0x1F y  LockBits: 0xEC. 



Yo he utilizado el AVR Studio 4 para hacer esto pero puedes usar cualquier otra interfaz como AVRDUDE etc.


Espero tus comentarios. :P

Sen. Ultrasonico Arduino + Processing

lunes, 6 de junio de 2011 5 Comentarios, Dejar un Comentario
El sensor Ultrasonico ocupado en este proyecto es el SRF-02 - Datasheet.

                        


Combinando un poco Arduino con Processing puede hacer que tu proyecto se vea mejor, un ejemplo de esto es lo que he hecho con un sensor Ultrasonico donde como en cualquier proyecto se pueden imprimir los datos en una LCD.


La lcd esta conectada a partir del pin 7 hacia el 0 y conectada con cables a los pines 13, 12 ... etc.esta es una forma portátil del medidor de distancias Ultrasonico o bien con processing:


Se nota bastante la diferencia apesar de que es el mismo proyecto, medir distancias con un sensor ultrasonico, ademas que es mas económico ya que no requerimos de una LCD si no que en nuestra misma pantalla podemos visualizar los datos.


Dependencias:
Necesita la ultima version de NewSoftSerial.


Configurando un Bluetooth

domingo, 24 de abril de 2011 6 Comentarios, Dejar un Comentario
Configurar un bluetooth es muy sencillo si se desea utilizar para tareas sencillas como una comunicación USART y algunas otras configuraciones para personalizar el dispositivo. A continuación les mostrare como configurar el Bluetooth RN-42 ( Sparkfun BlueSMiRF ),  Este es un bluetooth hecho por Roving Networks  de Clase 2, ósea con un alcance entre 10 y 20 mts.
Estos son los pasos que debes seguir para entrar a la configuración de tu Bluetooth:
-USART CONF: 115200bps, 8bits, Sin Paridad, 1bit de Stop.
Se puede entrar a la configuración del Bluetooth Inalambricamente o conectando un FTDI a este, una vez conectado hay que abrir nuestra terminal ya sea ZTerm o la propia terminal de Arduino enviamos ' $$$ ' con ( No line ending ) y nos responderá con un ' CMD ' eso quiere decir que ya estamos dentro y listos para configurar.


  significa que en nuestra terminal ahora utilizaremos el Carriage Return
Después de cada instrucción nos regresara un AOK si se hizo el cambio correctamente un ERR si hubo un error en la instrucción y un ? si la instrucción no existe.

Para cambiar el nombre de nuestro dispositivo usaremos:
SN,      SN,Mi_Bluetooth           // Ahora nuestro dispositivo se llama Mi_Bluetooth 

Para cambiar el código de seguridad:
SP,            SP,0000                         // La clave puede ser desde números a letras.

Para cambiar el Baud Rate:
SU,             SU,96                           // Solo se necesitan los primeros dos números.

Baudrate,{1200, 2400, 4800, 9600, 19.2, 28.8, 38.4, 57.6, 115K, 230K, 460K, 921K }

Para cambiar el Identificador del Dispositivo:

SC (Service Class) Y SD (Device Class) sirven para decirle al bluetooth si es una computadora, un telefono etc. En esta pagina podremos armar nuestros propios CoD.

Bluetooth CoD

CoD: 0x980104   // Este código indica que es una Computadora de escritorio.

SC,00       SC,0098    // Solo los primero dos números
SD,         SD,0104   // Los últimos cuatro números.


De esa forma hemos configurado nuestro bluetooth con un identificador de computadora.

Todos los cambios que hemos hecho aplican una vez que se a reiniciado el dispositivo, para reiniciarlo se ocupa el siguiente comando:

R,1        R,1                   // Reboot!

Esta es la configuración que yo he puesto para mi Bluetooth:



Recomiendo lean el PDF del Bluetooth para cambios más avanzados. PDF RN-42

Placa Wiring ATmega2561 Casera.

martes, 5 de abril de 2011 3 Comentarios, Dejar un Comentario
Desafortunadamente aqui en México no hay lugar en donde vendan la placa Wiring, que es como una placa Arduino Atmega328P pero más poderosa ya que cuenta con:

Comunicación:                      Puertos:                                           Capacidad:
    - 2 puertos USART             - 54 puertos digitales I/O                - 256KB de FLASH
    - 1 puerto I2C                    - 8 puertos Analógicos                    - 4KB de EEPROM
    - 1 puerto SPI                     - 6 puertos PWM                              - 8KB de RAM

Esta es mi tarjeta Wiring:
Aqui les dejo los BootLoaders que utilice para esta tarjeta, funcionan a la perfección.

Los Fuses son:  LOW: FF          HIGH: D0           EXTENDED: FD

Realmente recomiendo este microcontrolador, es bastante bueno para aplicaciones de medio nivel.
Solo recuerden que puede llegar a ser bastante difícil soldar un SMD por lo que les recomiendo tomarse su tiempo limpiar bien su cautin y tener a la mano un Multimetro para revisar si hay cortos antes de conectarlo y empezar a jugar con el.

Si ya están listos en wiring así esta la configuración:

Bueno pues mucha suerte a todos los que decidan hacer su propia placa y ya saben no duden en comentar y/o preguntar cualquier cosa. :P

Arduino y las Memorias EEPROM I2C

lunes, 14 de marzo de 2011 0 Comentarios, Dejar un Comentario
El control de una memoria EEPROM con una placa Arduino es bastante sencillo ya que tenemos a nuestro alcance la Biblioteca Wire, que no es otra cosa si que la comunicación I2C que necesitamos para accesar a este tipo de memoria sin importar si el fabricante.

Una aplicación que me pareció muy adecuada para este tipo de memoria es el control en las posiciones de un robot, con ayuda de la Biblioteca del Post pasado podremos grabar una serie de movimientos del Servomotor Ax-12+ de tal manera que programar un robot sea tan sencillo como apretar un botón Grabar. para almacenar las posiciones de nuestro robot y otro botón Reproducir para que el robot se mueva con las posiciones que ya le hemos grabado.

A continuación un esquema de como conectar la EEPROM.



Código:
//***********************************************************************
#include "Wire.h"
#include "DynamixelSerial.h"  
#include "NewSoftSerial.h"
NewSoftSerial XSerial(5,6);

char deviceADD = 0x50;
char Page = 0, PageR = 0;
unsigned char Position_Low_Byte;
unsigned char Position_High_Byte;
unsigned char Position_H, Position_L;
long Position_Long_Byte, Position;
             void setup (){
XSerial.begin(9600); // Serial PC
Wire.begin(); // I2C EEPROM
Dynamixel.begin(1000000,2); // Half Duplex USART Dynamixel Ax-12+
pinMode(13,OUTPUT);
XSerial.println("+ Comunicacion USART e I2C +");
delay(1000);
        }
void loop (){
if (digitalRead(3) == 1){
   digitalWrite(13,HIGH);
   delay(300)
   Position = Dynamixel.readPosition(1);
   Position_H = Position >> 8;
   Position_L = Position;
   XSerial.print("Ax-12+: ");XSerial.println(Position);
   Wire.beginTransmission(deviceADD);
   Wire.send(0x00);
   Wire.send(Page);
   Wire.send(Position_L);
   Wire.endTransmission();
   delay(3);
   Page++;
   Wire.beginTransmission(deviceADD);
   Wire.send(0x00);
   Wire.send(Page);
   Wire.send(Position_H);
   Wire.endTransmission();
   delay(3);
   digitalWrite(13,LOW);
   Page++;
        }
if (digitalRead(4) == 1){
  digitalWrite(13,HIGH);
  delay(100);
  Wire.beginTransmission(deviceADD);
  Wire.send(0x00);
  Wire.send(0x00);
  Wire.endTransmission();
  Wire.requestFrom(deviceADD,Page);
  while (Wire.available() < Page)
    delay(1);
  for(int i = 0; i <(Page/2);i++){
    Position_Low_Byte = Wire.receive();
    Position_High_Byte = Wire.receive();
    Wire.endTransmission();
    Position_Long_Byte = Position_High_Byte << 8;
    Position_Long_Byte =Position_Long_Byte + Position_Low_Byte;
    XSerial.print("EEPROM: ");XSerial.println(Position_Long_Byte);
    Dynamixel.move(1,Position_Long_Byte);
    delay(1000);
          }
   digitalWrite(13,LOW);
   Page = 0;
   Dynamixel.torqueStatus(1,OFF); 
}
} 
//************************************************************************
Posibles Problemas:
Estos problemas son muy comunes en este tipo de proyectos.

- Conectar el pin WP de la EEPROM a GND.
-Verificar el Voltaje que soporta la EEPROM ya que puedes quemarla.
- Algunos Capacitores son recomendados para evitar ruidos.

Arduino y Dynamixel AX-12

sábado, 22 de enero de 2011 436 Comentarios, Dejar un Comentario

Después de un largo tiempo he aquí una Biblioteca para controlar los actuadores Ax-12A de Dynamixel.
Estos Servos son bastante increíbles, parece que no les podría faltar nada, ya que pueden devolver Temperatura interna, Voltaje, Posición y Velocidad; Esto lo logra ya que tiene un microcontrolador ATmega8 el cual se comunica atravez de Half Duplex UART-TTL.

Estas bibliotecas sirven para comunicarse con los servomotores Dynamixel de varias formas en diferentes pines de las placas Arduino.

La comunicación se realiza a través del puerto Serie (UART o USART) del Arduino por lo que estos puertos utilizados se volverán exclusivos para comunicarse con el servomotor Dynamixel.

La alimentación de estos Servos es con una fuente de 9.6v y uniendo la tierra del arduino con la tierra de la fuente del Servo para que la comunicación no tenga errores de interpretación y la biblioteca pueda funcionar correctamente.La alimentación del Servo y del Arduino también puede ser de la misma fuente por lo que Vin del Arduino tendrá que tener un voltaje de 9.6v (Este es el voltaje sugerido por Robotis).


Las conexiones de alimentación del Servo con otras versiones y modelos de arduino funcionan de la misma forma.

Para utilizar estas bibliotecas se necesita un buffer tri-estado, se puede hacer con dos circuitos integrados 74HC04 y 74HC126 tal como recomienda Bioloid y utiliza en sus controladores o pueden usar un solo circuito integrado 74LS241 que yo recomiendo ya que es más sencillo de utilizar y/o conectar. Los pines de comunicación cambiaran según sea la Biblioteca que se quiera utilizar.



Circuito Savage Electronics - Dynamixel Serial:

Circuito Savage Electronics - Dynamixel Serial1:


Circuito Savage Electronics - Dynamixel Serial2:


Circuito Savage Electronics - Dynamixel Serial3:


Circuito Savage Electronics - Dynamixel SoftSerial:




Video Demostrativo: