Robot Mecanum (Ianna+ClaudiaM)

 

 

Vamos a construir un robot con las siguientes caracteristicas:

-Impreso en 3D

-Tendra ruedas mecanumWhatsApp Image 2024-04-17 at 13.12.54

-Sensor de distancia

-Display 16×8 leds

-2 sensores de proximidad

-Bluetooth

-2 baterias de 9v

-4 motores servo 360º

 

LOS ROBOTS DEBERÁN REALIZAR LA SIGUIENTE PRUEBA:

El robot será guiado a través del móvil por Bluetooth para que salga de un laberinto en el menor tiempo posible. Ganará el que, cronometrándolo, sea el más rápido y ocupe el menor tiempo. 

El laberinto estará diseñado con trozos de cartón que servirán de paredes, para poder montarlo contendrá unas piezas que servirán como puente de unión diseñadas en 3D. 

El objetivo principal del robot será salir de forma autónoma desde el inicio del laberinto. Para hacerlo, usará los sensores que detectarán los huecos de pared libre y así, dirigirse hacia ellos, hasta llegar a la salida.

PARTES DEL ROBOT:

  1. Shield nano:UNO-Shield-Nano-Shield-para-placa-de-expansi-n-NANO-3-0-y-UNO-R3-duemilanove.jpg_Q90.jpg_
  2. Arduino nano: parte programada:arduino-nano
  3. Servo motor de 360º(x4):img_341_a5a1570bcf75651a91f8894db99bffe0_1
  4. Sensor de distancia HC-SR04:índicere
  5. Módulo de sensor sigue-líneas:modulasensorsiguelineas
  6. Sensor de proximidad (x4):sensordeproximidad
  7. Display 16×8 LEDS:matriz leds 16x8
  8. Módulo Bluetooth  HC-06:hc-06-wireless-serial-4-pin-bluetooth-rf-transceiver-module-rs232-ttl-500x500
  9. Ruedas Mecanum (x4):rueda-mecanum-d48mm-kit-x4
  10. Cables dupont:Img_3_6-300x185
  11. Conectores de batería de 9V (x2):conectorbateria9v
  12. Batería de 9V (x2):pila
  13. Interruptor:inter

MATERIAL EN 3D:

  1. ACOPLE DE RUEDAS:
    pieza1acoplerueda

https://www.tinkercad.com/things/iqYjuhiwKiO-pieza-rueda-mecanum

https://www.tinkercad.com/things/lOhjcEkC33G-acople-ruedas-mecanum

2. BASE DEL ROBOT:

https://www.tinkercad.com/things/lGmgmAMhkm7-copy-of-base-robot-mecanumbaserobotmecanum

3. MONTAJE DEL ROBOT:

https://www.tinkercad.com/things/4vKEpAfXnkb-robot-mecanum-arduino

4.ESQUEMA ELÉCTRICO:

5. TRANSCURSO DEL ROBOT EN SU MONTAJE:

6. EL CÓDIGO UTILIZADO ES EL SIGUIENTE:

#include <Adafruit_LEDBackpack.h>

#include <SoftwareSerial.h>

SoftwareSerial BT(13, 12);

Adafruit_8x16matrix matrix = Adafruit_8x16matrix();

static const uint8_t PROGMEM

  smile_bmp[] = { B00000000, B00000000, B10000001, B10000001, B10000001, B01000010, B00111100, B00000000 },

  neutral_bmp[] = { B00000000, B00000000, B00000000, B11111111, B11111111, B00000000, B00000000, B00000000 },

  frown_bmp[] = { B00111100, B01000010, B10100101, B10000001, B10011001, B10100101, B01000010, B00111100 };

#include <Servo.h>

Servo servoDI, servoDD, servoTI, servoTD;

#define trigPin 7

#define echoPin 6

long d;

void setup() {

  BT.begin(9600);

  Serial.begin(9600);

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

  servoDI.attach(2);

  servoDI.write(90);

  servoDD.attach(3);

  servoDD.write(90);

  servoTI.attach(4);

  servoTI.write(90);

  servoTD.attach(5);

  servoTD.write(90);

  matrix.begin(0x70);

}

void loop() {

  if (BT.available()) {

    int r = BT.read();

    if (r == ‘1’) {

      adelante(55);

    }

    if (r == ‘2’) {

      atras(55);

    }

    if (r == ‘3’) {

      izquierda(55);

    }

    if (r == ‘4’) {

      derecha(55);

    }

    if (r == ‘5’) {

      stop();

    }

    if (r == ‘6’) {

      diagonalizquierdadelante(55);

    }

    if (r == ‘7’) {

      diagonalderechadelante(55);

    }

    if (r == ‘8’) {

      diagonalizquierdadetras(55);

    }

    if (r == ‘9’) {

      diagonalderechadetras(55);

    }

    if (r == ‘A’) {

      rotarderecha(55);

    }

    if (r == ‘B’) {

      rotarizquierda(55);

    }

  }

}

void stop() {

  servoDI.write(90);

  servoDD.write(90);

  servoTI.write(90);

  servoTD.write(90);

}

void adelante(int v) {

  smile();

  servoDI.write(90 + v);

  servoDD.write(90 – v);

  servoTI.write(90 + v);

  servoTD.write(90 – v);

}

void atras(int v) {

  frown();

  servoDI.write(90 – v);

  servoDD.write(90 + v);

  servoTI.write(90 – v);

  servoTD.write(90 + v);

}

void izquierda(int v) {

  neutral();

  servoDI.write(90 – v);

  servoDD.write(90 – v);

  servoTI.write(90 + v);

  servoTD.write(90 + v);

}

void derecha(int v) {

  neutral();

  servoDI.write(90 + v);

  servoDD.write(90 + v);

  servoTI.write(90 – v);

  servoTD.write(90 – v);

}

void diagonalizquierdadelante(int v) {

  neutral();

  servoDI.write(90);

  servoDD.write(90 – v);

  servoTI.write(90 + v);

  servoTD.write(90);

}

void diagonalderechadelante(int v) {

  neutral();

  servoDI.write(90 + v);

  servoDD.write(90);

  servoTI.write(90);

  servoTD.write(90 – v);

}

void diagonalderechadetras(int v) {

  neutral();

  servoDI.write(90);

  servoDD.write(90 + v);

  servoTI.write(90 – v);

  servoTD.write(90);

}

void diagonalizquierdadetras(int v) {

  neutral();

  servoDI.write(90 – v);

  servoDD.write(90);

  servoTI.write(90);

  servoTD.write(90 + v);

}

void rotarizquierda(int v) {

  neutral();

  servoDI.write(90 – v);

  servoDD.write(90 – v);

  servoTI.write(90 – v);

  servoTD.write(90 – v);

}

void rotarderecha(int v) {

  neutral();

  servoDI.write(90 + v);

  servoDD.write(90 + v);

  servoTI.write(90 + v);

  servoTD.write(90 + v);

}

void smile() {

  matrix.setRotation(1);

  matrix.clear();

  matrix.drawBitmap(4, 0, smile_bmp, 8, 8, LED_ON);

  matrix.writeDisplay();

  delay(80);

}

void frown() {

  matrix.setRotation(1);

  matrix.clear();

  matrix.drawBitmap(4, 0, frown_bmp, 8, 8, LED_ON);

  matrix.writeDisplay();

  delay(80);

}

void neutral() {

  matrix.setRotation(1);

  matrix.clear();

  matrix.drawBitmap(4, 0, neutral_bmp, 8, 8, LED_ON);

  matrix.writeDisplay();

  delay(80);

}

long sensor() {

  long duracion, distancia;

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duracion = pulseIn(echoPin, HIGH);

  distancia = duracion * 0.017;

  delay(200);

  return distancia;

}