Hi!
I'm building an omniwheel robot platform.
The components are:
Arduino Uno
Wireshare Motor Control Shield (https://www.waveshare.com/wiki/Motor_Control_Shield)
12V 1.2A lead acid battery
Four 1:48 6V DC Motors
I have connected the motors to the shield. Using a simple test code:
int motor1_dir1 = 12;
int motor1_dir2 = 13;
int motor1_pwm = 11;
int motor2_dir1 = 8;
int motor2_dir2 = 7;
int motor2_pwm = 10;
int motor3_dir1 = 5;
int motor3_dir2 = 4;
int motor3_pwm = 9;
int motor4_dir1 = 3;
int motor4_dir2 = 2;
int motor4_pwm = 6;
void setup()
{
pinMode(motor1_dir1,OUTPUT);
pinMode(motor1_dir2,OUTPUT);
pinMode(motor1_pwm,OUTPUT);
pinMode(motor2_dir1,OUTPUT);
pinMode(motor2_dir2,OUTPUT);
pinMode(motor2_pwm,OUTPUT);
pinMode(motor3_dir1,OUTPUT);
pinMode(motor3_dir2,OUTPUT);
pinMode(motor3_pwm,OUTPUT);
pinMode(motor4_dir1,OUTPUT);
pinMode(motor4_dir2,OUTPUT);
pinMode(motor4_pwm,OUTPUT);
digitalWrite(motor1_dir1,0);
digitalWrite(motor1_dir2,1);
digitalWrite(motor1_pwm,1);
digitalWrite(motor2_dir1,0);
digitalWrite(motor2_dir2,1);
digitalWrite(motor2_pwm,1);
digitalWrite(motor3_dir1,0);
digitalWrite(motor3_dir2,1);
digitalWrite(motor3_pwm,1);
digitalWrite(motor4_dir1,0);
digitalWrite(motor4_dir2,1);
digitalWrite(motor4_pwm,1);
}
void motor_control(int motor_number, int speed, bool fwd){
if (motor_number == 1){
if (fwd == true){
digitalWrite(motor1_dir1,0);
digitalWrite(motor1_dir2,1);
} else {
digitalWrite(motor1_dir1,1);
digitalWrite(motor1_dir2,0);
}
analogWrite(motor1_pwm, speed);
}
if (motor_number == 2){
if (fwd == true){
digitalWrite(motor2_dir1,0);
digitalWrite(motor2_dir2,1);
} else {
digitalWrite(motor2_dir1,1);
digitalWrite(motor2_dir2,0);
}
analogWrite(motor2_pwm, speed);
}
if (motor_number == 3){
if (fwd == true){
digitalWrite(motor3_dir1,0);
digitalWrite(motor3_dir2,1);
} else {
digitalWrite(motor3_dir1,1);
digitalWrite(motor3_dir2,0);
}
analogWrite(motor3_pwm, speed);
}
if (motor_number == 4){
if (fwd == true){
digitalWrite(motor4_dir1,0);
digitalWrite(motor4_dir2,1);
} else {
digitalWrite(motor4_dir1,1);
digitalWrite(motor4_dir2,0);
}
analogWrite(motor4_pwm, speed);
}
}
void motor_fwd(int motor_number, int speed){
motor_control(motor_number, speed, true);
}
void robot_fwd(){
motor_fwd(1, 255);
motor_fwd(2, 255);
motor_fwd(3, 255);
motor_fwd(4, 255);
}
void loop(){
robot_fwd();
delay(500);
}
The code is dirty but should do the trick. The problem is the wheels are starting and running for some time. They are getting around 5V (used the multimeter for measurement). Suddenly one or several motors stop turning and if I measure the input voltage I see a zero value there. Sometimes it starts to turn after that, sometimes it stops until I remove the battery and then plug it back.
Any help appreciated. I'm new to Arduino and electronics stuff maybe I'm just missing something?
Kind of odd that it works like this. I'm almost ready to buy a new shield and Arduino but not really sure this will help.
