Motor Speed Test
// connect motor controller pins to Arduino digital pins
/* Motor_Speed_Test for 2 motors
Philip Tran 5/31/17, revised Diane Brancazio 7/5/17,updated pins JDietz 5/12/18
Uses the L298n Motor Controller board
Arduino Motor Pins Locations
Left Motor - Arduino pins 9,8,11 - L298n pins ENA, IN1, IN2 respectively
Right Motor - Arduino pins 10, 12,13 - L298 pins ENB, IN3, IN4 respectively
*/
/*
* The program tests the power levels required for the wheels to overcome friction and spin.
* It first rotates both wheels forward starting at speed 0 to 255.
* Then it rotates the wheels reverse starting at speed 0 to 255.
*
* This is a diagnostic test for the motors and enable pins for testing accelerations.
* The enable speed value has to be greater than ~100ish to be able to move.
*
*
*/
// Left motor pins
#define enableL 9 // ENA speed pin for left motor
#define LPin1 8 // IN1 on Motor controller board
#define LPin2 11 // IN2
// Right motor pins
#define enableR 10 // ENB speed pin for right motor
#define RPin1 12 // IN3 on Motor controller board
#define RPin2 13 // IN4
int rightspeed = 200;
int leftspeed = 200;
int response = 1;
void setup()
{
Serial.begin (9600);
// set all the motor control pins to outputs
pinMode(enableR, OUTPUT);
pinMode(enableL, OUTPUT);
pinMode(RPin1, OUTPUT);
pinMode(RPin2, OUTPUT);
pinMode(LPin1, OUTPUT);
pinMode(LPin2, OUTPUT);
}
void loop()
//Drive both motors forward then reverse. Watch speed on Serial monitor
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware
{
// set up both motors for forward direction
digitalWrite(RPin1, HIGH);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, HIGH);
digitalWrite(LPin2, LOW);
// accelerate from zero to maximum speed
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("forward speed: "); Serial.println(i);
delay(50);
}
// set up both motors for reverse direction
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, HIGH);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, HIGH);
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("reverse speed: "); Serial.println(i);
delay(50);
}
// now turn off motors and wait for input from user
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, LOW);
Serial.println("Hit any key and press Enter to repeat test");
while(Serial.available() == 0) { }
response = Serial.parseInt();
}
/* Motor_Speed_Test for 2 motors
Philip Tran 5/31/17, revised Diane Brancazio 7/5/17,updated pins JDietz 5/12/18
Uses the L298n Motor Controller board
Arduino Motor Pins Locations
Left Motor - Arduino pins 9,8,11 - L298n pins ENA, IN1, IN2 respectively
Right Motor - Arduino pins 10, 12,13 - L298 pins ENB, IN3, IN4 respectively
*/
/*
* The program tests the power levels required for the wheels to overcome friction and spin.
* It first rotates both wheels forward starting at speed 0 to 255.
* Then it rotates the wheels reverse starting at speed 0 to 255.
*
* This is a diagnostic test for the motors and enable pins for testing accelerations.
* The enable speed value has to be greater than ~100ish to be able to move.
*
*
*/
// Left motor pins
#define enableL 9 // ENA speed pin for left motor
#define LPin1 8 // IN1 on Motor controller board
#define LPin2 11 // IN2
// Right motor pins
#define enableR 10 // ENB speed pin for right motor
#define RPin1 12 // IN3 on Motor controller board
#define RPin2 13 // IN4
int rightspeed = 200;
int leftspeed = 200;
int response = 1;
void setup()
{
Serial.begin (9600);
// set all the motor control pins to outputs
pinMode(enableR, OUTPUT);
pinMode(enableL, OUTPUT);
pinMode(RPin1, OUTPUT);
pinMode(RPin2, OUTPUT);
pinMode(LPin1, OUTPUT);
pinMode(LPin2, OUTPUT);
}
void loop()
//Drive both motors forward then reverse. Watch speed on Serial monitor
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware
{
// set up both motors for forward direction
digitalWrite(RPin1, HIGH);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, HIGH);
digitalWrite(LPin2, LOW);
// accelerate from zero to maximum speed
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("forward speed: "); Serial.println(i);
delay(50);
}
// set up both motors for reverse direction
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, HIGH);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, HIGH);
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("reverse speed: "); Serial.println(i);
delay(50);
}
// now turn off motors and wait for input from user
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, LOW);
Serial.println("Hit any key and press Enter to repeat test");
while(Serial.available() == 0) { }
response = Serial.parseInt();
}
Motor Speed Test Functions
void forwardTest()
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware{
{
// set up both motors for forward direction
digitalWrite(RPin1, HIGH);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, HIGH);
digitalWrite(LPin2, LOW);
// accelerate from zero to maximum speed
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("forward speed: "); Serial.println(i);
delay(50);
}
}
void reverseTest() // similar to forward test
{
// set up both motors for reverse direction
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, HIGH);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, HIGH);
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("reverse speed: "); Serial.println(i);
delay(50);
}
}
void motorsOff()
{
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, LOW);
}
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware{
{
// set up both motors for forward direction
digitalWrite(RPin1, HIGH);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, HIGH);
digitalWrite(LPin2, LOW);
// accelerate from zero to maximum speed
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("forward speed: "); Serial.println(i);
delay(50);
}
}
void reverseTest() // similar to forward test
{
// set up both motors for reverse direction
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, HIGH);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, HIGH);
for (int i = 100; i < 256; i++)
{
analogWrite(enableR, i);
analogWrite(enableL, i);
Serial.print("reverse speed: "); Serial.println(i);
delay(50);
}
}
void motorsOff()
{
digitalWrite(RPin1, LOW);
digitalWrite(RPin2, LOW);
digitalWrite(LPin1, LOW);
digitalWrite(LPin2, LOW);
}