Remove it from the picture. I'm only trying to illustrate the R-C filter which is just 2 components.
Or add the capacitor to the shield and use it properly.
Remove it from the picture. I'm only trying to illustrate the R-C filter which is just 2 components.
Or add the capacitor to the shield and use it properly.
MorganS:
Remove it from the picture. I'm only trying to illustrate the R-C filter which is just 2 components.Or add the capacitor to the shield and use it properly.
ok, thank you so much
I use the ACS712 unfortunately, the current sense value (A2) is 0!
Show your wiring. Show your code.
#define BRAKE 0
#define CW 1
#define CCW 2
#define CS_THRESHOLD 15 // Definition of safety current (Check: "1.3 Monster Shield Example").
//MOTOR 1
#define MOTOR_A1_PIN 7
#define MOTOR_B1_PIN 8
//MOTOR 2
#define MOTOR_A2_PIN 4
#define MOTOR_B2_PIN 9
#define PWM_MOTOR_1 5
#define PWM_MOTOR_2 6
#define VIN A2
#define EN_PIN_1 A0
#define EN_PIN_2 A1
#define MOTOR_1 0
#define MOTOR_2 1
const double currentFactor = 30 / 41;
short usSpeed = 150; //default motor speed
unsigned short usMotor_Status = BRAKE;
void setup()
{
pinMode(MOTOR_A1_PIN, OUTPUT);
pinMode(MOTOR_B1_PIN, OUTPUT);
pinMode(MOTOR_A2_PIN, OUTPUT);
pinMode(MOTOR_B2_PIN, OUTPUT);
pinMode(PWM_MOTOR_1, OUTPUT);
pinMode(PWM_MOTOR_2, OUTPUT);
pinMode(EN_PIN_1, OUTPUT);
pinMode(EN_PIN_2, OUTPUT);
Serial.begin(9600); // Initiates the serial to do the monitoring
Serial.println("Begin motor control");
Serial.println(); //Print function list for user selection
Serial.println("Enter number for control option:");
Serial.println("1. STOP");
Serial.println("2. FORWARD");
Serial.println("3. REVERSE");
Serial.println("4. READ CURRENT");
Serial.println("+. INCREASE SPEED");
Serial.println("-. DECREASE SPEED");
Serial.println();
}
void loop()
{
char user_input;
while (Serial.available())
{
user_input = Serial.read(); //Read user input and trigger appropriate function
digitalWrite(EN_PIN_1, HIGH);
digitalWrite(EN_PIN_2, HIGH);
if (user_input == '1')
{
Stop();
}
else if (user_input == '2')
{
Forward();
Serial.print(analogRead(A2));
}
else if (user_input == '3')
{
Reverse();
}
else if (user_input == '4')
{
Readcurrent();
}
else if (user_input == '+')
{
IncreaseSpeed();
}
else if (user_input == '-')
{
DecreaseSpeed();
}
else
{
Serial.println("Invalid option entered.");
}
}
}
void Stop()
{
Serial.println("Stop");
usMotor_Status = BRAKE;
motorGo(MOTOR_1, usMotor_Status, 0);
motorGo(MOTOR_2, usMotor_Status, 0);
}
void Forward()
{
Serial.println("Forward");
usMotor_Status = CW;
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void Reverse()
{
Serial.println("Reverse");
usMotor_Status = CCW;
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void Readcurrent()
{
Serial.print(analogRead(VIN));
delay(400);
}
void IncreaseSpeed()
{
usSpeed = usSpeed + 10;
if (usSpeed > 255)
{
usSpeed = 255;
}
Serial.print("Speed +: ");
Serial.println(usSpeed);
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void DecreaseSpeed()
{
usSpeed = usSpeed - 10;
if (usSpeed < 0)
{
usSpeed = 0;
}
Serial.print("Speed -: ");
Serial.println(usSpeed);
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //Function that controls the variables: motor(0 ou 1), direction (cw ou ccw) e pwm (entra 0 e 255);
{
if (motor == MOTOR_1)
{
if (direct == CW)
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, HIGH);
}
else if (direct == CCW)
{
digitalWrite(MOTOR_A1_PIN, HIGH);
digitalWrite(MOTOR_B1_PIN, LOW);
}
else
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, LOW);
}
analogWrite(PWM_MOTOR_1, pwm);
}
else if (motor == MOTOR_2)
{
if (direct == CW)
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, HIGH);
}
else if (direct == CCW)
{
digitalWrite(MOTOR_A2_PIN, HIGH);
digitalWrite(MOTOR_B2_PIN, LOW);
}
else
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, LOW);
}
analogWrite(PWM_MOTOR_2, pwm);
}
}
Well The ACS712 will put out 2.5V quiescent, if A2 is reading 0, something is very very wrong.
Have you tested all the voltages with a mulltimeter (that's the first thing to do when something
isn't behaving as expected, prove to yourself everything gets power and outputs the right voltages)
well, the power supply is 6V and this power supply as the image shows is series with the ACS712 30A and the dc motor needs this voltage to change the PWM range and it shows that the output voltage of the ACS is more than 2.5V right? and as the dc motor needs this voltage so can I use this current sensing module?