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();
}
}