Go Down

Topic: Control de motores de dc con potenciómetro y switch (Read 1 time) previous topic - next topic

CarlosTheGolem

Quote

//Control de dirección de motores de dc con switch
//control de velocidad de motores con potenciómetro
//Tomado de un código originario del foro arduino. Versión de Carlos Rangel Santos
//Universidad Politécnica de Aguascalientes. Ingeniería en Mecatrónica. 
//Este código es de uso comunitario

//Variables para el primer motor
 const int switchPin = 2;    // la entrada del switch que controla el giro
 const int motor1Pin = 3;    // H-bridge leg 1 (pin 2, 1A)
 const int motor2Pin = 4;    // H-bridge leg 2 (pin 7, 2A)
 int enablePin = 9;          // H-bridge enable pin. Activa el motor. Se conecta al pin 1 del puente H
 
 
 // variables para el segundo motor
 const int cambio= 5;        //segundo switch
 const int pin1Motor = 6;     //pin 10 del L293D, 3A
 const int pin2Motor = 7;     //pin 15 del L293D 4A
 int activaMotor = 8;         //Activa el segundo motor, se conecta a pin 9 del Puente H
 
 //se declaran las variables que toman valores de potenciómetro
 int potPin1 = A0;           //entrada analógica 0 leerá al potenciómetro
 int potPin2 = A1;           //entrada analógica 1 leerá al potenciómetro

 //variabbles que guardan el valor del potenciómetro
 int potValue1= 0;
 int motorValue1 = 0;
 
 int potValue2 = 0;
 int motorValue2 = 0;
 
void setup() {
  Serial.begin(9600);
    // set the switchs as an input:
    pinMode(switchPin, INPUT);
    pinMode(cambio, INPUT);

    // set all the other pins you're using as outputs:
    pinMode(motor1Pin, OUTPUT);
    pinMode(motor2Pin, OUTPUT);
    pinMode(enablePin, OUTPUT);
    pinMode(pin1Motor, OUTPUT);
    pinMode(pin2Motor, OUTPUT);
    pinMode(activaMotor, OUTPUT);
    

    // set enablePin high so that motor can turn on:
    // digitalWrite(enablePin, HIGH);
  }

void loop() {
    potValue1 = analogRead(potPin1);//analog read lee el valor de el potenciómetro en el pin1 (A0) y se lo asigna a potValue1
    potValue2 = analogRead(potPin2);//lee el valor analógico en el pin2 A1
    motorValue1 = map(potValue1, 0, 1023, 0, 255);       //"mapea" el valor del potenciómetro y le asigna un valor de 0 a 255 para después insertarlo en motorValue1
    motorValue2 = map(potValue2, 0, 1023, 0, 255);       
    analogWrite(enablePin, motorValue1);                 //escribe en el pin 9 que es el que activa el motor, el valor de motorValue1
    analogWrite(activaMotor, motorValue2);               //activa o desactiva el segundo motor según se mueva el potenciómetro
    // if the switch is high, motor will turn on one direction:
    if (digitalRead(switchPin) == HIGH) {
      digitalWrite(motor1Pin, LOW);   // set leg 1 of the H-bridge low
      digitalWrite(motor2Pin, HIGH);  // set leg 2 of the H-bridge high
    } 
    // if the switch is low, motor will turn in the other direction:
    else {
      digitalWrite(motor1Pin, HIGH);  // set leg 1 of the H-bridge high
      digitalWrite(motor2Pin, LOW);   // set leg 2 of the H-bridge low
    }
    
    //si el switch es encendido el segundo motor girará en una dirección
     if (digitalRead(cambio) == HIGH) {
      digitalWrite(pin1Motor, LOW);   // set leg 1 of the H-bridge low
      digitalWrite(pin2Motor, HIGH);  // set leg 2 of the H-bridge high
    } 
    // si el switch es apagado el motor girará en la otra dirección:
    else {
      digitalWrite(pin1Motor, HIGH);  // set leg 1 of the H-bridge high
      digitalWrite(pin2Motor, LOW);   // set leg 2 of the H-bridge low
    }
  }



Go Up