Archivo del Autor: Karla

Robot Mecanum (Karla y Alberto)

Vamos a construir un robot con las siguientes caracteristicas:

-Impreso en 3D

-Tendra ruedas mecanum

-Sensor de distancia

-Display 16×8 leds

-2 sensores de proximidad

-Bluetooth

-2 baterias de 9v

-4 motores servo 360º

processed-CC8B5502-4DF3-4866-B66C-8FEF69C51C55

El robot tiene que realizar tres pruebas:

-Prueba de recorrer el laberinto.

La prueba constará de un laberinto diseñado con trozos de cartón que servirán como paredes. Para montarlo usaremos unas piezas que servirán como puente de unión diseñadas en 3D. 

El objetivo principal del robot será salir del laberinto, controlado por el usuario, 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.

MATERIAL:

– Shield para arduino nano

UNO-Shield-Nano-Shield-para-placa-de-expansi-n-NANO-3-0-y-UNO-R3-duemilanove.jpg_Q90.jpg_

– Arduino nano

arduino-nano

-4 servo motores sg90 de 360º

índice

-Sensor de distancia HC-SR04

índicere

-Display

matriz leds 16x8

-Bluetooth HC-06

hc-06-wireless-serial-4-pin-bluetooth-rf-transceiver-module-rs232-ttl-500x500

-4 ruedas mecanum

rueda-mecanum-d60mm-kit-x4

-Cables dupont

Img_3_6-300x185

-2 conectores de baterias de 9V

conector-led-bateria-9v-monocolor

-Interruptor

inter

-2 baterias de 9V

pila

Material 3D:

 
-Acople ruedas
 
 
 
Captura de pantalla 2023-11-29 133619
 
-Segunda pieza diseñada del robot (base)
 
 
Captura de pantalla 2023-11-29 134341
 
Diseño final del robot:
 
Captura de pantalla 2024-04-09 114504
 
 
ESTRUCTURA INTERNA DEL ROBOT:
 
IMG_20240218_075330
 
processed-D9A2C16B-3F72-467E-B090-F3D44C2BAA3F
 
processed-B84E6D2D-D3C9-4EDF-B65B-9F230161A23B
 
 
FOTOS DEL ROBOT TERMINADO:
 
processed-BD64EB1A-608A-436A-885E-61154F52BACB
processed-4726AD3B-1924-45F2-84B1-126BDB27893A
 
processed-AC767BC7-0540-4B50-B9B1-3315DD467AB0
 
 
ESQUEMA DE CONEXIONES:
 
RobotMecanum_bb
 
 
CÓDIGO (PROGRAMA):
 
#include <SoftwareSerial.h>
SoftwareSerial BT(13, 12);

 

#include <Adafruit_LEDBackpack.h>
Adafruit_8x16matrix matrix = Adafruit_8x16matrix();
static const uint8_t PROGMEM
  smile_bmp[] = { B00000000, B00000000, B00000000, B10000001, B10000001, B01000010, B00100100, B00011000 },
  frown_bmp[] = { B0000000, B00000000, B00000000, B00011000, B00100100, B01000010, B10000001, B10000001 };

 

#include <Servo.h>
Servo servoDI, servoDD, servoTI, servoTD;

 

#define trigPin 7
#define echoPin 6
int limite = 200;
x = 50;

 

char r;

 

void setup() {
  servoDI.attach(2);
  servoDI.write(90);
  servoDD.attach(3);
  servoDD.write(90);
  servoTI.attach(4);
  servoTI.write(90);
  servoTD.attach(5);
  servoTD.write(90);

 

  Serial.begin(9600);
  BT.begin(9600);
  matrix.begin(0x70);

 

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

 

void loop() {

 

  if (BT.available()) {
    r = BT.read();
  }
  if (r == ‘1’) {
    avance(x);
  } else {
    if (r == ‘2’) {
      atras(x);
    } else {
      if (r == ‘3’) {
        izquierda(x);
      } else {
        if (r == ‘4’) {
          derecha(x);
        } else {
          if (r == ‘5’) {
            parar();
          } else {
            if (r == ‘6’) {
              esquina_izquierda_sup(x);
            } else {
              if (r == ‘7’) {
                esquina_derecha_sup(x);
              } else {
                if (r == ‘8’) {
                  esquina_izquierda_inf(x);
                } else {
                  if (r == ‘9’) {
                    esquina_derecha_inf(x);
                  } else {
                    if (r == ‘B’) {
                      giro_eje_izquierda(x);
                    } else {
                      if (r == ‘A’) {
                        giro_eje_derecha(x);
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

 

void cara_feliz() {
  matrix.setRotation(1);
  matrix.clear();
  delay(10);
  matrix.drawBitmap(4, 0, smile_bmp, 8, 8, LED_ON);
  matrix.writeDisplay();
  delay(10);
}

 

void cara_triste() {
  matrix.setRotation(1);
  matrix.clear();
  delay(10);
  matrix.drawBitmap(4, 0, frown_bmp, 8, 8, LED_ON);
  matrix.writeDisplay();
  delay(10);
}

 

void no_cara() {
  matrix.clear();
  delay(500);
}

 

void parar() {
  servoDI.write(90);
  servoDD.write(90);
  servoTI.write(90);
  servoTD.write(90);
}

 

void avance(int v) {
  cara_feliz();
  servoDI.write(90 + v + 7);
  servoDD.write(90 – v);
  servoTI.write(90 + v + 7);
  servoTD.write(90 – v);
}

 

void atras(int v) {
  cara_triste();
  servoDI.write(90 – v);
  servoDD.write(90 + v);
  servoTI.write(90 – v);
  servoTD.write(90 + v);
}

 

void izquierda(int v) {
  servoDI.write(90 – v);
  servoDD.write(90 – v);
  servoTI.write(90 + v);
  servoTD.write(90 + v);
}

 

void derecha(int v) {
  servoDI.write(90 + v);
  servoDD.write(90 + v);
  servoTI.write(90 – v);
  servoTD.write(90 – v);
}

 

void esquina_derecha_inf(int v) {
  servoDI.write(90);
  servoDD.write(90 + v);
  servoTI.write(90 – v);
  servoTD.write(90);
}

 

void esquina_izquierda_sup(int v) {
  servoDI.write(90);
  servoDD.write(90 – v);
  servoTI.write(90 + v);
  servoTD.write(90);
}

 

void esquina_izquierda_inf(int v) {
  servoDI.write(90 – v);
  servoDD.write(90);
  servoTI.write(90);
  servoTD.write(90 + v);
}

 

void esquina_derecha_sup(int v) {
  servoDI.write(90 + v);
  servoDD.write(90);
  servoTI.write(90);
  servoTD.write(90 – v);
}

 

void giro_eje_izquierda(int v) {
  servoDI.write(90 – v);
  servoDD.write(90 – v);
  servoTI.write(90 – v);
  servoTD.write(90 – v);
}

 

void giro_eje_derecha(int v) {
  servoDI.write(90 + v);
  servoDD.write(90 + v);
  servoTI.write(90 + v);
  servoTD.write(90 + v);
}

 

long dist() {
  long duracion, distancia;

 

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

 

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

 

  duracion = pulseIn(echoPin, HIGH);
  distancia = duracion * 0.017;

 

  return distancia;
}