Proyecto 16 - Coche RC v2

En este proyecto veremos como hacer un coche de radio control partiendo de un kit de chasis + motores para hacer robots.

En la imagen siguiente podéis ver el kit empleado, al que hay que añadir un shield para motores. 

También puede hacerse solamente con el CI L293D como vimos en el proyecto 15.

Usaremos el receptor de infrarrojos y el mando a distancia del proyecto anterior.

Una imagen del coche terminado

Esquema

Conectamos los motores en las salidas M3 y M4 del shield y el OUT pin del receptor de infrarrojos al pin 2 del Arduino.

Sketch

// RC Car ver2.

#include <AFMotor.h>

AF_DCMotor motor4(4, MOTOR12_1KHZ); // create motor #4, 1KHz pwm

AF_DCMotor motor3(3, MOTOR12_1KHZ); // create motor #3, 1KHz pwm

int receiverpin = 2; // OUT pin of IR receiver to Arduino digital pin 2

#include <IRremote.h>

IRrecv irrecv(receiverpin);

decode_results results;

void setup() {

irrecv.enableIRIn();

}

void goForward()

{

 //go forward 

  motor3.setSpeed(255);

  motor4.setSpeed(255); 

  motor3.run(FORWARD);

  motor4.run(FORWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE); 

}

void goBackward()

{

  // go backward

  motor3.setSpeed(255);

  motor4.setSpeed(255);

  motor3.run(BACKWARD);

  motor4.run(BACKWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void turnRight()

{

  // turn right

  motor3.setSpeed(192);

  motor4.setSpeed(255);

  motor3.run(FORWARD);

  motor4.run(FORWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void turnLeft()

{

  // turn left

  motor3.setSpeed(255);

  motor4.setSpeed(192);

  motor3.run(FORWARD);

  motor4.run(FORWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void turnRightBK()

{

  // turn rightBK

  motor3.setSpeed(192);

  motor4.setSpeed(255);

  motor3.run(BACKWARD);

  motor4.run(BACKWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void turnLeftBK()

{

  // turn leftBK

  motor3.setSpeed(255);

  motor4.setSpeed(192);

  motor3.run(BACKWARD);

  motor4.run(BACKWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void twistLeft()

{

  // turn twistLeft

  motor3.setSpeed(255);

  motor4.setSpeed(255);

  motor3.run(FORWARD);

  motor4.run(BACKWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void twistRight()

{

  // turn twistRight

  motor3.setSpeed(255);

  motor4.setSpeed(255);

  motor4.run(FORWARD);

  motor3.run(BACKWARD);

  delay(500);

  motor3.run(RELEASE); 

  motor4.run(RELEASE);

}

void translateIR()

{

  switch(results.value)

  {

    

    case 0xD02: goForward(); break;  // Go Forward straight

    case 0x502: goForward(); break;  // Go Forward straight

    case 0xD08: goBackward(); break; // Go Backward straight

    case 0x508: goBackward(); break; // Go Backward straight

    case 0xD06: turnRight(); break;  // Go Forward and turn Right

    case 0x506: turnRight(); break;  // Go Forward and turn Right

    case 0xD04: turnLeft(); break;   // Go Forward and turn Left

    case 0x504: turnLeft(); break;   // Go Forward and turn Left

    case 0xD07: turnLeftBK(); break; // GO Backward and turn Left

    case 0x507: turnLeftBK(); break; // GO Backward and turn Left

    case 0xD09: turnRightBK(); break; // Go Backward and turn Right

    case 0x509: turnRightBK(); break; // Go Backward and turn Right

    case 0xD01: twistRight(); break; // twist Right

    case 0x501: twistRight(); break; // twist Right

    case 0xD03: twistLeft(); break; // twist Left

    case 0x503: twistLeft(); break; // twist Left

  }

}

void loop()

{

  

  if (irrecv.decode(&results))

  {

    translateIR();

    irrecv.resume();

    

  }

}