Hice un auto RC con una placa Arduino, usando un puente en H para operar los motores. Los conecto a través de un condensador y un diodo al pin de +5 V de la placa Arduino para evitar daños en la placa. Escribí un programa simple. Estoy usando un sensor ultrasónico para evitar objetos. La idea es que cuando no tengo un objeto delante de mí, se debe activar un comando para avanzar. Cuando hay un objeto, los motores deben ir en reversa, moverse por un tiempo, luego avanzar y girar a la derecha. Uso 2 motores de corriente continua, uno para la marcha atrás y adelante, y uno para la derecha y la izquierda (dirección).
El problema es el siguiente: si conecto la placa a la computadora a través del cable USB, y al mismo tiempo enciendo el auto, el código se ejecuta normalmente, pero si quito el cable USB y enciendo automóvil (utilizando los ~ 5.4 V de BAT1 a D1), entonces el automóvil no avanza, retrocede, se queda, avanza y gira a la derecha; esto se repite dos veces y luego el programa comienza a funcionar normalmente.
Aquí está el código:
int forward = 11;
int reverse = 10;
int left = 9;
int right = 8;
#define ECHOPIN 3
#define TRIGPIN 2
void setup() {
Serial.begin(9600);
pinMode(forward, OUTPUT);
pinMode(reverse, OUTPUT);
pinMode(left, OUTPUT);
pinMode(right, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
}
void loop() {
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
// Compute distance
float distance = pulseIn(ECHOPIN, HIGH);
distance= distance/58;
Serial.println(distance);
delay(200);
if ( distance < 12.50) {
analogWrite(forward,0);
delay(1000);
analogWrite(reverse,100);
delay(1000);
analogWrite(reverse,0);
delay(1000);
analogWrite(forward,100);
digitalWrite(right,HIGH);
delay(1500);
digitalWrite(right,LOW);
delay(500);
}
if ( distance > 12.50) {
analogWrite(forward,100);
delay(1000);
}
}