Proyecto 1 – Coche

¡Construye tu coche autónomo! ¡Descubre una aplicación de los sensores de distancia y de luz usándolos en este proyecto!

En el kit encontraras todo el material necesario, pero si lo necesitas, puedes descargar las plantillas aquí para imprimir de nuevo, recortar y personalizar a tu vehículo. (se incluye dxf para corte láser)

 

NIVEL DE DIFICULTAD: Intermedio.

DURACIÓN DEL EJERCICIO: 45 min.

MATERIALES:

  • Maker Inventor Kit
    • Placa controladora 4in1
    • Sensor de distancia por ultrasonido
    • 2 Sensores de luz analógicos LDR
    • Botón pulsador
    • Zumbador pasivo
    • LED 5mm color blanco
    • Motores DC con rueda de plástico
    • Estructura del coche
    • Cables Hembra-Hembra 20 cm
    • Portapilas
    • Cable USB – Micro USB
  • 6 Pilas AA
  • Ordenador

 

CONSTRUCCIÓN:

Sigue las instrucciones del siguiente vídeo para construir tu vehículo:

 

ESQUEMA:

Si has seguido el montaje, las conexiones deben estar así:

PROGRAMA:

Puedes cargar tu programa a la controladora usando programación por bloques o con código. Te mostramos como hacerlo de ambos modos, con mBlock y Arduino IDE respectivamente

Si es la primera vez que usas mBlock, o tienes problemas para cargar tu programa, puedes revisar nuestra página de primeros pasos

Aquí tienes la secuencia de bloques para cargar el programa inicial con mBlock.

codigo MBlock Inventor Kit 1

En el vídeo mostramos cómo subir el programa a la placa controladora 4in1

 

A continuación el código para cargar el programa a la controladora 4in1 desde Arduino IDE

//LED Y PULSADOR
#define LED  3
#define BUTTON 2
#define BUZZER  9 //buzzer to arduino pin 9

// SENSORES DE LUZ
#define LDR0  A0 //Sensor de luz Izquierda
#define LDR1  A1 //Sensor de luz Derecha

//sensor ultrasonido
const int EchoPin = 12;
const int TriggerPin = 13;

//MOTORES
//motor A -> Derecha. Motor B -> izquierda
int PinSpeedMA = 5, PinSpeedMB = 6; // PIN DIGITAL PARA LA VELOCIDAD DE LOS MOTORES
int PinTurnMA = 4, PinTurnMB = 7; // PIN DIGITAL PARA SENTIDO DE GIRO DE LOS MOTORES


int SpeedL = 175; //velocidad Izq
int SpeedR = 175; // velocidad Dcha

int Spin = 0;
int Direction = 0;
bool Control = true;

//PRUEBA
int leftsensor = 0, rightsensor = 0, us = 0, dataled = 0, databutton = 0;
int cm = 0;
int var = 0;


void setup()
{
  Serial.begin (9600);
  //  Sensores de luz
  pinMode(LDR0, INPUT);
  pinMode(LDR1, INPUT);

  // sensor ultirasonido
  pinMode(TriggerPin, OUTPUT);
  pinMode(EchoPin, INPUT);

  // motores
  pinMode(PinSpeedMA, OUTPUT);
  pinMode(PinSpeedMB, OUTPUT);
  pinMode(PinTurnMA, OUTPUT);
  pinMode(PinTurnMB, OUTPUT);

  // led y pulsador
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);


}

void loop()
{

  cm = ping(TriggerPin, EchoPin);
  leftsensor = analogRead(LDR0);
  rightsensor = analogRead(LDR1);
  dataled = digitalRead(LED);
  databutton = digitalRead(BUTTON);



 if (cm < 20)
  {
    //digitalWrite(PinLED1,HIGH);//LED1 Y LED2 = ON
    digitalWrite(LED, HIGH);
    digitalWrite(PinTurnMA, HIGH);//  HACIA ATRAS
    digitalWrite(PinTurnMB, HIGH);
    delay(1000);
    digitalWrite(PinTurnMA, LOW);// GIRO 
    digitalWrite(PinTurnMB, HIGH);
    delay(750);
    digitalWrite(LED, HIGH);
    tone(BUZZER, 1000); // envia señal 1kHz
    delay(200);        // ... suena durante 200 m
    noTone(BUZZER);     // el sonido para
    delay(100);        // ...suena durante 100 m
  }
  else
  {
    Spin = analogRead(LDR0) - analogRead(LDR1);
  //Serial.println (Spin);

  if (Spin < abs(70))
  { Serial.println ("avanza");
    digitalWrite(LED, LOW);
    digitalWrite(PinTurnMA, LOW); //  HACIA DELANTE
    digitalWrite(PinTurnMB, LOW);
    analogWrite(PinSpeedMA, SpeedR);
    analogWrite(PinSpeedMB, SpeedL);
  }
  if (Spin > 71)
  { digitalWrite(LED, LOW);
    digitalWrite(PinTurnMA, LOW); //  HACIA DERECHA
    digitalWrite(PinTurnMB, HIGH);
    analogWrite(PinSpeedMA, SpeedR);
    analogWrite(PinSpeedMB, SpeedL);
  }
  if (Spin < -71)
  { digitalWrite(LED, LOW);
    digitalWrite(PinTurnMA, HIGH); // HACIA IZQUIERDA
    digitalWrite(PinTurnMB, LOW);
    analogWrite(PinSpeedMA, SpeedR);
    analogWrite(PinSpeedMB, SpeedL);
  }
  if ((analogRead(LDR0) < 250) && (analogRead(LDR1) < 250)) {
    digitalWrite(PinTurnMA, LOW); // HACIA ATRAS
    digitalWrite(PinTurnMB, LOW);
    analogWrite(PinSpeedMA, 0);
    analogWrite(PinSpeedMB, 0);
    digitalWrite(LED, HIGH);
    tone(BUZZER, 1000);
    delay(200);
    noTone(BUZZER);
    delay(100);
  }
  }


}

int ping(int TriggerPin, int EchoPin) {
  long duration, distanceCm;

  digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 4us
  delayMicroseconds(4);
  digitalWrite(TriggerPin, HIGH);  //generamos Trigger (disparo) de 10us
  delayMicroseconds(10);
  digitalWrite(TriggerPin, LOW);

  duration = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
  distanceCm = duration * 10 / 292 / 2;  //convertimos a distancia, en cm
  return distanceCm;
}

Y el video de la programación usando Arduino IDE

Si lo prefieres puedes descargar los ficheros para mBlock 5 y ArduinoIDE

RESULTADO FINAL:
Muestra del proyecto terminado:

0 0
0
¿Hablamos?
Necesitas Ayuda
¿Te ayudamos? 🙂

El horario en línea actualmente es de lunes a viernes de 10:00 a 13:30 y de 16:00 a 18:30 (hora España GTM+1). Si lo prefieres puedes enviarnos un correo a info@eboticseducation.com