COCHE EXPLORADOR

Con un mismo montaje el vehículo puede realizar dos funciones:

– Busca un oponente y lo empuja (lucha de sumo)
– Circula evitando obstáculos (laberinto/explorador)

Funcionamiento

El coche dispone de un sensor ultrasónico que envía una señal a la tarjeta Arduino cuando detecta un objeto a una cierta distancia. Esta señal la utilizará la tarjeta para valorar si acudir hacia el objeto o cambiar su dirección según la función que estemos programando (sumo o explorador).

Lista de materiales

8 Bulones de plástico LOG S220P

2 Soportes para micro reductora LOG 3D16

1 Plataforma móvil LOG DM8080

1 Hoja Técnica H1403

Construcción de la plataforma y conexión de los motores

Conexión del sensor ultrasonido

El sensor ultrasonido dispone de 4 pines:

  •  VCC: se conecta a la salida de 5V de la tarjeta Arduino.
  • GND: se conecta a una toma tierra (gnd) de la tarjeta Arduino.
  • TRIG: se conecta a un pin digital de la tarjeta Arduino y su función será pedir al sensor que lance un pulso de sonido.
  • ECHO: se conecta a un pin digital de la tarjeta Arduino y su función será medir el tiempo que tarda el pulso de sonido en llegar a un obstáculo.

 

Programación

int pinSondeo = 12;
int pinEcho = 11;
int motor1Avance = 5; // Conexión del sistema motriz LOG 49
int motor1Atras = 6; // Conexión del sistema motriz LOG 49
int motor2Avance = 9; // Conexión del sistema motriz LOG 49
int motor2Atras = 10; // Conexión del sistema motriz LOG 49
void setup() {
  Serial.begin (9600);
  pinMode(pinSondeo, OUTPUT);
  pinMode(pinEcho, INPUT);
  pinMode(motor1Avance, OUTPUT); //Declara pin de Salida
  pinMode(motor1Atras, OUTPUT); //Declara pin de Salida
  pinMode(motor2Avance, OUTPUT); //Declara pin de Salida
  pinMode(motor2Atras, OUTPUT); //Declara pin de Salida
  }
void loop() {
  long duration, distance;
  digitalWrite(pinSondeo, LOW);
  delayMicroseconds(2);
  digitalWrite(pinSondeo, HIGH); //envía pulso de luz
  delayMicroseconds(10);
  digitalWrite(pinSondeo, LOW);
  duration = pulseIn(pinEcho, HIGH); //recibe el tiempo de desplazamiento
  Serial.println(«Duration»);
  Serial.println(duration);
  distance = (duration/2) / 29.1; //Constante para calcular distancia
  if (distance < 50) { //si estamos cerca del objeto
    analogWrite(motor1Avance, 0); // los motores se detienen
    analogWrite(motor1Atras, 0);
    analogWrite(motor2Avance, 0);
    analogWrite(motor2Atras, 0);
    int direccion = random(1, 3); //seleccionamos una dirección aleatoria
    Serial.println(direccion);
    if (direccion==1){
      Serial.println(«derecha»); // la plataforma gira a la derecha
      analogWrite(motor1Avance, 0);
      analogWrite(motor1Atras, 150);
      analogWrite(motor2Avance, 100);
      analogWrite(motor2Atras, 0);
    }
    else{
      Serial.println(«izquierda»); // la plataforma gira a la izquierda
      analogWrite(motor1Avance, 100);
      analogWrite(motor1Atras, 0);
      analogWrite(motor2Avance, 0);
      analogWrite(motor2Atras, 150);
    }
    delay(500);
    analogWrite(motor1Avance, 0); // la plataforma se detiene
    analogWrite(motor1Atras, 0);
    analogWrite(motor2Avance, 0);
    analogWrite(motor2Atras, 0);
  }
  else{
    analogWrite(motor1Avance, 150); // la plataforma avanza recto
    analogWrite(motor1Atras, 0);
    analogWrite(motor2Avance, 125);
    analogWrite(motor2Atras, 0);
    Serial.println(«avanzo, campo libre»);
  }
}

Calibrar

– En los programas, el control de los motores se realiza a través del envío de señales analógicas a los pares de salidas 5-6 y 9-10. Cada motor está controlado por dos pines de la tarjeta controladora, y cada pin determinará el sentido de giro del motor, permitiendo que el robot circule de frente o marcha atrás. Estos pines serán tratados como señales analógicas, enviándoles datos de 0 a 255 para poder controlar la velocidad del motor.

– Si en ambas salidas enviamos un 0, el coche se parará.

– La lógica nos dice que para que el coche circule en línea recta habrá que enviar a ambas salidas el mismo dato (mayor que 0). Si hacemos la prueba observamos que el coche tiende a girar en un determinado sentido. Esto es debido a la imprecisión de este tipo de motores. La mejor solución es regular la velocidad por programación enviando a un motor una señal ligeramente inferior con respecto al otro motor.

– Para que el coche gire en un sentido, disminuiremos notablemente la velocidad de uno de los motores (enviando un dato de valor inferior a su salida de Arduino) provocando el giro gracias a la diferencia de velocidad entre ambos motores.

– En cuanto al sentido de giro de los motores, éste viene controlado por las conexiones al puente H. Si observamos que cada rueda gira en un sentido, tendremos que modificar el cableado. Por ejemplo si tenemos los motores conectados a las salidas 1 y 3 del puente H y cada motor gira en un sentido, tendremos que cambiar uno de los motores y o bien pasarle de la salida 1 a la 2 o sino de la salida 3 a la 4.

Detalles de tipo práctico

– Desconectar la alimentación del controlador de motores L298N cuando no se esté utilizando para no gastar las pilas.

– Necesita 4 pilas R6 de 1,5 V y 1 pila 6F22 de 9 V.

– Tiempo de construcción: 6 H.

– Nivel: Difícil

Pruebas

– Aumentar o disminuir la velocidad de los motores