Hello all,,
i have some problem to operate the arm robot with 7 ax-12a. I operated this servo with arduino an ic buffer.
some servo has error or changed ID to 1, so in arm robot has 2 servo with same ID, it mean i must changed again.
cause the servo has overload is the couple of servo did not ran. how to solved this or why this servo not work for sometimes.?
thanks smile greetings
#include <DynamixelSerial.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0x2C, 0xBB};//mac pada Arduino
IPAddress ip(192, 168, 1, 110);
unsigned int localPort = 8888; // local port to listen on
EthernetUDP Udp;
char sms[UDP_TX_PACKET_MAX_SIZE];
void setup() {
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
Dynamixel.begin(1000000,2);
}
void loop() {
//Serial.println(packetBuffer);
delay(500);
int packetSize = Udp.parsePacket();
if(packetSize)
{
IPAddress remote = Udp.remoteIP();
// read the packet into packetBufffer
Udp.read(sms,UDP_TX_PACKET_MAX_SIZE);
Serial.println(sms);
modbus();
}
}
void modbus(void){
String sub=String(sms);
for (int id=1;id<10;id++){
if(sub.substring(0,1)==String(id)){
String a=sub.substring(1,4);
int pwm=a.toInt();
if(id==1){ //================== Servo 1
Dynamixel.move(1,pwm);
}
if(id==2){//================== Servo 2 3
int dua=0;int tiga=0;
dua=811-pwm;
tiga=219+pwm;
Dynamixel.moveSpeed(2,dua,100);
Dynamixel.moveSpeed(3,tiga,100);}
if(id==3){//================== Servo 4 5
int empat=0;int lima=0;
empat=811-pwm;
lima=211+pwm;
Dynamixel.moveSpeed(4,empat,100);
Dynamixel.moveSpeed(5,lima,100);}
if(id==4){ //================== Servo 6
Dynamixel.move(6,pwm);}
if(id==5){
Dynamixel.move(7,pwm);}
if(id==6){
standby();
Dynamixel.moveSpeed(7,600,100); //max 700 min 400
}
if(id==7){
ambil();
Dynamixel.moveSpeed(7,695,100); //max 700 min 400
}
if(id==8){
Dynamixel.moveSpeed(1,200,100);
delay(500);
Dynamixel.moveSpeed(1,800,100);delay(500);Dynamixel.moveSpeed(1,511,100);delay(1000);
Dynamixel.moveSpeed(2,411,300);//+ naik
Dynamixel.moveSpeed(3,619,300);//- naik
delay(500);
Dynamixel.moveSpeed(2,711,300);
Dynamixel.moveSpeed(3,319,300);
delay(500);
Dynamixel.moveSpeed(4,411,300);
Dynamixel.moveSpeed(5,611,300);delay(500);
Dynamixel.moveSpeed(4,311,300);
Dynamixel.moveSpeed(5,711,300);
Dynamixel.moveSpeed(6,811,600);
delay(1000);Dynamixel.moveSpeed(6,511,600);
Dynamixel.moveSpeed(7,695,100); //max 700 min 400
delay(500);Dynamixel.moveSpeed(7,500,100); //max 700 min 400
}
if(id==9){
Dynamixel.moveSpeed(1,400,100); //max 700 min 400
delay(1500);
Dynamixel.moveSpeed(1,600,100);delay(1500);
Dynamixel.moveSpeed(1,511,100);
delay(1500);
Dynamixel.moveSpeed(2,311,300);//+ naik
Dynamixel.moveSpeed(3,719,300);//- naik
delay(1500);
Dynamixel.moveSpeed(2,711,300);
Dynamixel.moveSpeed(3,319,300);
delay(1500);
}
}
}
}
void ambil (void){
Dynamixel.moveSpeed(2,561,100);//+ naik
Dynamixel.moveSpeed(3,469,100);//- naik
delay(300);
Dynamixel.moveSpeed(4,161,300);
Dynamixel.moveSpeed(5,861,300);delay(1000);
Dynamixel.moveSpeed(6,511,600);
delay(1000);
}
void standby (void){
Dynamixel.moveSpeed(1,511,50);
delay(300);
Dynamixel.moveSpeed(2,711,100);
Dynamixel.moveSpeed(3,319,100);
delay(1000);
Dynamixel.moveSpeed(4,311,100);
Dynamixel.moveSpeed(5,711,100);
delay(1000);
Dynamixel.moveSpeed(6,511,300);
}