Hi,
I bought on behalf of the Institute I represent a Robot Rover Development kit for Arduino. As the kit is nearing completion I have found the SMC05A motor controller to appear to be defective. I’m getting no LED indication at all despite having supplied the exact power requirements.
Robotshop who I bought the kit from have asked I contact you first. This item is required for my college to use with students from Sept. so I would welcome a prompt resolution,
Sincerely,
John Kelleher
Institute of Technology, Sligo, Ireland
+353 877435311
Hello, John
I am sorry you are having problems with your dual serial motor controller. Could you tell me more about your setup? How do you have everything connected? Could you post pictures and a wiring diagram of your setup?
- Jeremy
Sorry for the delay in replying but it was unavoidable. I’ve attached 3 detailed photos with all the details about this seemingly faulty motor controller and would appreciate your response. I’ve never got it to work and no indication from the LEDs despite providing the required voltage.
Rgds,
John
Have you verified that the motors work when powering them directly? Could you try disconnecting the motors from the serial motor controller and see if the LEDs turn on? Could you also post your code?
- Jeremy
Nope, no movement ever. No LEDs ever showed on. No code used as never saw sign of life.
J
If you tried powering the motors directly and there was no movement, I suspect either your motors are faulty or your battery pack is discharged. When was the last time the batteries were charged or replaced? Could you measure the voltage across your battery?
The LEDs will not come on without any commands being sent to the motor driver via serial communication. The green and red LEDs are motor direction indicators. You would need to send the appropriate commands found in the user’s guide to turn on the LEDs and drive the motors.
- Jeremy
Thanks for help but batteries are fresh and as I said, never had movement - no sign of life.
Rgds,
John Kelleher
Could you tell me more about your motors (picture or model number)? If you tried powering the motors directly and they did not work, it sounds like your motors are broken. Unless you have working motors, there is not much of a point in troubleshooting your serial motor controller.
- Jeremy
Dear Sir/Madam,
I am reopening this conversation. I don’t believe I was previously understood when I reported that the item (SMC05A) was apparently dead-on-arrival. The motors that attach to it are fine but there has never been a sign of life from SMC05A. This debate has been ongoing for a long time and I believe both my student and I have been very patient concerning this item. I would welcome a speedy resolution at this stage so that future business relations are not harmed by the experience,
Rgds,
John Kelleher
Hello, John.
We appreciate that you would like to resolve this issue quickly, but we would also like to troubleshoot with you to make sure there is not something in your setup that could be causing the issue or that could damage future replacements. We try to respond in a timely manner (and in this case did respond to your last post within several hours), but we cannot continue troubleshooting unless you answer our questions.
Could you please tell me more about your motor? You mentioned that your motors are working. Does that mean you tested them by connecting them directly to your supply? Could you post the Arduino sketch that shows how your are sending serial commands to the serial motor controller?
- Jeremy
Jeremy,
I appreciate you need to establish veracity of our claim and ensure that the return is justified. However, I’m sure you’ll understand the frustration in receiving a part which is believed to be faulty and then having to trouble-shoot to prove same. This item was part of a much larger order and a critical aspect of my student’s final project. Partly because I did not have sufficient time to pursue this thread he must now repeat the work over the summer. As such, getting a replacement part is something that I would like to expedite for him as I’m sure you will understand.
I will request the information you require from the student. The motors (2) are those that came with the Robot kit - robotshop.com/eu/en/solarbot … tor-9.html.
Rgds,
John Kelleher
Programme Chair (Software)
IT Sligo.
Jeremy,
I’ve posted a video of the student showing the motors working off around 3V - plus.google.com/+JohnKelleher/p … 7251567088
Rgds,
John Kelleher
Could you post the Arduino sketch that shows how you are sending serial commands to the serial motor controller? As I mentioned in a previous post, the LEDs on the board and the motors will not do anything unless you send appropriate serial commands.
- Jeremy
Jeremy,
here is the code he’s used - given the large difference in our time zones (Ireland), I’d appreciate if we can get a prompt response on this, thanks, John Kelleher
int motor_reset = 2; //digital pin 2 assigned to motor reset
void setup() {
pinMode(motor_reset, OUTPUT); Serial.begin(9600); digitalWrite(motor_reset, LOW); delay(50); digitalWrite(motor_reset, HIGH); delay(50);
}
//select the function you want to use but ensure two are not running simultaneously. void loop()
{
//motorforward(); //motorreverse(); //rotateccw(); //motorstop();
}
//subroutine motor forward void motorforward()
{
//left motor
unsigned char buff1[6];
buff1[0]=0x80; buff1[1]=0x00; buff1[2]=0x01; buff1[3]=0x45;
//start byte - do not change
//Device type byte – do not change
//Motor number and direction byte; motor one =00,01 //Motor speed "0 to 128" in hex (ex 100 is 64 in hex)
for(int i=0; i<4; i++) {Serial.print(buff1[i], BYTE);}
//right motor
unsigned char buff2[6];
buff2[0]=0x80;
buff2[1]=0x00;
buff2[2]=0x03; //Motor number and direction byte; motor two=02,03 buff2[3]=0x45;
for(int i=0; i<4; i++) {Serial.print(buff2[i], BYTE);} }
//subroutine reverse at half speed void motorreverse()
{
//left motor
unsigned char buff3[6];
buff3[0]=0x80; buff3[1]=0x00; buff3[2]=0x00; buff3[3]=0x35;
for(int i=0; i<4; i++) {Serial.print(buff3[i], BYTE);}
//right motor
unsigned char buff4[6];
buff4[0]=0x80; buff4[1]=0x00; buff4[2]=0x02; buff4[3]=0x35;
for(int i=0; i<4; i++) {Serial.print(buff4[i], BYTE);} }
//Motor all stop
void motorstop()
{
//left motor
unsigned char buff3[6];
buff3[0]=0x80; buff3[1]=0x00; buff3[2]=0x00; buff3[3]=0x00;
for(int i=0; i<4; i++) {Serial.print(buff3[i], BYTE);}
//right motor
unsigned char buff4[6];
buff4[0]=0x80; buff4[1]=0x00; buff4[2]=0x02; buff4[3]=0x00;
for(int i=0; i<4; i++) {Serial.print(buff4[i], BYTE);} }
void rotateccw()
{
//left motor
unsigned char buff1[6];
buff1[0]=0x80; buff1[1]=0x00; buff1[2]=0x01; buff1[3]=0x40;
for(int i=0; i<4; i++) {Serial.print(buff1[i], BYTE);}
//right motor
unsigned char buff2[6];
buff2[0]=0x80; buff2[1]=0x00; buff2[2]=0x02; buff2[3]=0x40;
for(int i=0; i<4; i++) {Serial.print(buff2[i], BYTE);} }
I tried to reproduce your setup here; however, when I try to compile the code, I get an error.
As of Arduino 1.0, the 'BYTE' keyword is no longer supported.
Please use Serial.write() instead.
Are you using the latest version of the Arduino IDE? If not, which version are you using? Are you able to compile your code and upload it to the Arduino? If you have not yet, could you verify that there is a valid signal coming from the TX pin of your Arduino? Also, if you have a USB to TTL serial adapter, you might try sending the serial commands using our serial transmitter utility to test if the board is working.
- Jeremy
Arduino 1.0.5 is the IDE. Sorry, yes, I did overcome that deprecated keyword and replaced with Serial.write(). Here’s the updated code I am using (still no luck):
int motor_reset = 2; //digital pin 2 assigned to motor reset
void setup()
{
pinMode(motor_reset, OUTPUT);
Serial.begin(9600);
digitalWrite(motor_reset, LOW);
delay(50);
digitalWrite(motor_reset, HIGH);
delay(50);
}
//select the function you want to use but ensure two are not running simultaneously.
void loop()
{
//motorforward();
//motorreverse();
//rotateccw();
//motorstop();
}
//subroutine motor forward
void motorforward()
{
//left motor
unsigned char buff1[6];
buff1[0]=0x80; //start byte - do not change
buff1[1]=0x00; //Device type byte – do not change
buff1[2]=0x01; //Motor number and direction byte; motor one =00,01
buff1[3]=0x45; //Motor speed "0 to 128" in hex (ex 100 is 64 in hex)
for(int i=0; i<4; i++) {Serial.write(buff1[i]);}
//right motor
unsigned char buff2[6];
buff2[0]=0x80;
buff2[1]=0x00;
buff2[2]=0x03; //Motor number and direction byte; motor two=02,03
buff2[3]=0x45;
for(int i=0; i<4; i++) {Serial.write(buff2[i]);}
}
//subroutine reverse at half speed
void motorreverse()
{ //left motor
unsigned char buff3[6];
buff3[0]=0x80;
buff3[1]=0x00;
buff3[2]=0x00;
buff3[3]=0x35;
for(int i=0; i<4; i++) {Serial.write(buff3[i]);}
//right motor
unsigned char buff4[6];
buff4[0]=0x80;
buff4[1]=0x00;
buff4[2]=0x02;
buff4[3]=0x35;
for(int i=0; i<4; i++) {Serial.write(buff4[i]);}
}
//Motor all stop
void motorstop()
{
//left motor
unsigned char buff3[6];
buff3[0]=0x80;
buff3[1]=0x00;
buff3[2]=0x00;
buff3[3]=0x00;
for(int i=0; i<4; i++) {Serial.write(buff3[i]);}
//right motor
unsigned char buff4[6];
buff4[0]=0x80;
buff4[1]=0x00;
buff4[2]=0x02;
buff4[3]=0x00;
for(int i=0; i<4; i++) {Serial.write(buff4[i]);}
}
void rotateccw()
{
//left motor
unsigned char buff1[6];
buff1[0]=0x80;
buff1[1]=0x00;
buff1[2]=0x01;
buff1[3]=0x40;
for(int i=0; i<4; i++) {Serial.write(buff1[i]);} //right motor
unsigned char buff2[6];
buff2[0]=0x80;
buff2[1]=0x00;
buff2[2]=0x02;
buff2[3]=0x40;
for(int i=0; i<4; i++) {Serial.write(buff2[i]);}
}
Also, I don’t have a USB to TTL serial adapter. And Yes I have a valid signal from the Arduino and it’s compiling and uploading fine for other programs I’m doing right this minute.
J
I got your code working with a controller here. It does seem like your board might be damaged. If you contact us directly at support@pololu.com with your order information and reference this forum post, we can look into getting you a replacement.
- Jeremy
Jeremy,
thank you for the conclusion on this item. I have separately sent support the order details (from Robotoshop) and would welcome prompt action on initiating the replacement of the faulty part.
Thank you for your assistance in this matter,
Rgds,
John Kelleher