2

I am trying to use map command which is used to power servo 180 degrees as the potentiometer moves...

in fact what i want to do is just when i adjust my potentiometer to zero; stop the dc motor then after turn the pot to 512 analog value turn the motor to the left (digitalWrite(I1, HIGH); digitalWrite(I2, LOW);)and then stop when it reach 512 then when adjust the pot back to zero turn the dc motor to the right (digitalWrite(I1, HIGH); digitalWrite(I2, LOW);) but the think is what i am trying to do is exactly what we can do with the servo motor in the knob http://www.arduino.cc/en/Tutorial/Knob

I'm using a normal DC motor and l293D IC but I want to control the DC as knob method like the 200 degrees.

Code

#define E1 11    // Enable Pin for motor 
#define I1 10    // Control pin a for motor 
#define I2 9     // Control pin b for motor 
const int analogPin = A0;  
int analogValue ;  

void setup() {
  pinMode(E1, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);

}

void loop() {

  int analogValue = analogRead(analogPin);

  if(analogValue > 0 && analogValue < 512)  {

  analogWrite(E1, 255);   
  digitalWrite(I1, HIGH);
  digitalWrite(I2, LOW);
    delay(100); 
} else 
  analogWrite(E1, 255);  
  digitalWrite(I1, LOW);
  digitalWrite(I2, HIGH);
 }
mohammad
  • 21
  • 3
  • Any chance to have a circuit diagram? – Dmitry Grigoryev Apr 01 '16 at 10:03
  • The map function doesn't seem to be included in your second section of code. Did you want to adjust the 255 value to a new value relative to the "analogValue"? –  Apr 01 '16 at 10:44
  • "and then stop when it reach 512" is meaningless for a DC motor unless you have a position feedback device connected to it. Hobby type servos include an internal potentiometer for feedback. If you are building a position control with an ordinary DC motor, you will have to mechanical link something such as an encoder or potentiometer to its shaft and implement a position control loop. – Chris Stratton Apr 03 '16 at 03:06

1 Answers1

1

It looks like you want to use the "analogValue" to control the direction and speed of your DC motor. If this is correct consider using this:

      //This method assumes: The center position of the pot is the motor's 0 speed point,   
      //(because this is an ideal speed to actually reverse the motor's direction).
      //A PWM control range of 0-255, and the ADC input range of 0-1023.  

      //First create a relative speed value from "analogValue",   
      //with the pot mid point at 0 speed, and pot high/low points being full speed.  

      int motorSpeed = 0;  
      if (analogValue < 512 )  
      {  
       motorSpeed = map(analogValue, 0, 511, 255, 0);  
      }  //Note that mapped range is reversed to give 0 speed at mid point.           
      else  
      {  
       motorSpeed = map(analogValue, 512, 1023, 0, 255);  
      }

      //then replace each analogWrite(E1, 255) with:  
      analogWrite(E1, speedValue);  

      //you should also change "  if (analogValue > 2 && analogValue < 500) {  " to:  
      if (analogValue < 512) { 
  • thanks for this kind answer, in fact what i want to do is just when i adjust my potentiometer to zero; stop the dc motor then after turn the pot to 512 analog value turn the motor to the left (digitalWrite(I1, HIGH); digitalWrite(I2, LOW);)and then stop when it reach 512 then when adjust the pot back to zero turn the dc motor to the right (digitalWrite(I1, HIGH); digitalWrite(I2, LOW);) but the think is what i am trying to do is exactly what we can do with the servo motor in the knob http://www.arduino.cc/en/Tutorial/Knob – mohammad Apr 02 '16 at 18:17
  • https://www.youtube.com/watch?v=3mw6H3461Y0 – mohammad Apr 02 '16 at 18:30
  • IT IS AN EXAMPLE – mohammad Apr 02 '16 at 18:31