Omet navegació

6.5) Motors amb l'escut Arduino Rev3 (PWM)

Motors amb control PWM

Arduino UNO no té prou intensitat a les eixides digitals per controlar cap motor de corrent continu. Per això cal utilitzar l'escut Arduino Rev3 que té un integrat L293 per augmentar la intensitat a l'eixida on estan connectats els motors. Fes el muntatge següent amb dos motors.

Arduino + Escut Rev3 + Motors A i B

Ara fes el següent programa amb Blockly@rduino.

Escut Arduino Rev3

Aquest escut usa els pins 12 i 13 per controlar la direcció dels motors posats als canals A i B. Usa els pins 9 i 8 com fre per aturar els motors o permetre el seus funcionament als motors A i B. Els pins 3 i 11 controlen la velocitat amb la funció PWN variant des de 0 fins 255. A continuació mira el programa equivalent per Arduino IDE:

// Motor A horari
void Motor_A_Horari() {
  Serial.println("pinDirA=12 Ho activem per sentit Horari");
  digitalWrite(12, HIGH);
  Serial.println("pinFreA=9 Ho desactivem per fer anar el motor");
  digitalWrite(9, LOW);
  Serial.println("pinPWM_A=3 En variar de 0 a 255 varia velocitat");
  analogWrite(3, 255);
}


// Motor B horari
void Motor_B_Horari() {
  Serial.println("pinDirB=13 Ho activem per sentit Horari");
  digitalWrite(13, HIGH);
  Serial.println("pinFreB=8 Ho desactivem per fer anar el motor");
  digitalWrite(8, LOW);
  Serial.println("pinPWM_B=11 En variar de 0 a 255 varia velocitat");
  analogWrite(11, 255);
}


// Motor A antiHorari
void Motor_A_antiHorari() {
  Serial.println("pinDirA=12 Ho desactivem per sentit antiHorari");
  digitalWrite(12, LOW);
  Serial.println("pinFreA=9 Ho desactivem per fer anar el motor");
  digitalWrite(9, LOW);
  Serial.println("pinPWM_A=3 En variar de 0 a 255 varia velocitat");
  analogWrite(3, 255);
}


// Motor B antiHorari
void Motor_B_antiHorari() {
  Serial.println("pinDirB=13 Ho desactivem per sentit antiHorari");
  digitalWrite(13, LOW);
  Serial.println("pinFreB=8 Ho desactivem per fer anar el motor");
  digitalWrite(8, LOW);
  Serial.println("pinPWM_B=11 En variar de 0 a 255 varia velocitat");
  analogWrite(11, 50);
}


// Motor A aturat
void Motor_A_aturat() {
  Serial.println("pinFreA=9 Ho activem per aturar el motor");
  digitalWrite(9, HIGH);
}


// Motor B aturat
void Motor_B_aturat() {
  Serial.println("pinFreB=8 Ho activem per aturar el motor");
  digitalWrite(8, HIGH);
}



void setup() {
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}

void loop() {
    Motor_A_Horari();
    delay(5000);
    Motor_A_antiHorari();
    delay(5000);
    Motor_A_aturat();
    delay(5000);
    Motor_B_Horari();
    delay(5000);
    Motor_B_antiHorari();
    delay(5000);
    Motor_B_aturat();
    delay(5000);
}

Fes la pràctica Motor 1 i la pràctica Motor 2.