Imagen 1
Imagen 2
Imagen 3
Imagen 4
Imagen 5
Imagen 6

Conoce tu Kit 1191

Robot Móvil 4WD ESP32 Sumo, Evasor y Seguidor de Líneas.

Cod. KIT – 1191

El robot puede ser programado para diferentes funciones entre las cuales tenemos:

  • Seguidor Linea Blanca
  • Seguidor Linea Blanca Evasor
  • Seguidor Linea Negra
  • Seguidor Linea Negra Evasor
  • Evasor de Obstáculos
  • Robot Sumo Autónomo
  • Robot Bluetooth RC

Antes de ensamblar tu Kit verifica que te haya llegado completo y todo esté en buen estado.

Materiales
Tu Kit debe incluir los siguientes componentes.

  • 1pza. Tarjeta ESP32.
  • 1pza. Cable de programación.
  • 1pza. Tarjeta Sensor Shield.
  • 2pzs. Base de acrílico cortada y perforada.
  • 4pzs. Motorreductor plástico 1:48 de doble eje con cables.
  • 4pzs. Llanta de plástico 65mm x 25mm.
  • 1pza. Modulo controlador dual motor L298N.
  • 3pzs. Módulo Sensor KY-033 para detectar líneas.
  • 1pza. HC-SR04 Sensor distancia Ultrasónico.
  • 1pza. Soporte de acrílico para sensor HC-SR04.
  • 1pza. Pala de acrílico para robot sumo.
  • 1pza. Porta Baterías para 6 pilas AA con conector de barril.
  • 20pzs. Cables puente 20cm Hembra-Hembra.
  • 8pzs. Tornillo M3 x30 mm cabeza de plana.
  • 15pzs. Tornillo M3 x 12 mm cabeza de gota.
  • 1pza. Tornillo M3 x 12 mm cabeza de plana.
  • 12pzs. Tornillos M3 x 8mm cabeza de gota.
  • 2pzs. Tornillos M3 x 8mm cabeza de plana.
  • 36pzs. Tuerca M3.
  • 6pzs. Soportes de Plástico 35mm.
  • 15pzs. Bujes Pequeños Acrílicos.

Si detectas que tu kit llego incompleto o algún componente dañado, puedes mandarnos un mensaje

Correo: contacto@robodacta.mx

A nuestro numero de WhatsApp: (56) 39 66 17 16

Conoce tu Kit 4WD

Ensamble
Para ensamblar tu robot, sigue el siguiente video donde explicamos paso a paso el armado.

  • Notas:
  • Antes de iniciar con el ensamble remueve el plástico protector de las piezas de acrílico.
  • Es importante no apretar los tornillos de forma excesiva ya que podrías romper alguna de las piezas de acrílico.
  • No retirar los cinchos que sujetan los cables de los motores ya que estos evitan que se rompan sus terminales con el movimiento.

Diagrama de Conexiones
Una vez que hayas ensamblado tu Robot, el siguiente paso es realizar las conexiones.

A continuación te mostramos los diagramas de conexiones.

Prueba de tu Kit Robot Sumo
Para probar tu Kit deberás de seguir los siguientes pasos. De esta manera sabrás si tu ensamble es correcto y si tus conexiones están correctamente cableadas.

Es importante no remover los puentes jumper que se encuentran en el puente H.

Para realizar esta tarea deberás colocar las pilas a tu kit y encenderlo. Si tu Kit se desplaza hacia adelante unos cuantos segundos, se detiene, desplaza y detiene de forma repetitiva. Podemos concluir que tu kit esta correctamente ensamblado y cableado.

A continuación te dejamos un video donde podrás ver como debe de comportarse tu robot para saber si tu robot esta correctamente armado.

Nota importante

No pases a la siguiente sección hasta que verifiques que tu Kit 4WD esta correctamente ensamblado y correctamente cableado. El KIT ya cuenta con un programa de prueba, en donde solo avanzara y se detendrá. Si el funcionamiento es el adecuado, continua con la siguiente sección.

¿como lo vamos a programar?

Instalación Programa Arduino
Antes de cargar el programa de tu elección deberás instalar el entorno de programación con el cual podrás subir los códigos a tu robot.

Tu robot viene con un programa pre-cargado de prueba para que puedas verificar el funcionamiento de tu robot.

“PruebaMotoresAdelante4WD.ino”

Para esta sección preparamos un PDF el cual podrás descargar con el siguiente botón con las instrucciones detalladas de cada uno de los pasos con imágenes.

(El siguiente PDF incluye el paso 1, 2 y 3)

En caso de que ya conozcas un poco de este proceso te dejamos a continuación la explicación corta.

Paso 1.- Descargar de driver CH341
Como uno de los pasos para la instalación de nuestro entorno será el de descargar e instalar el driver necesario para que nuestra computadora pueda reconocer el dispositivo Arduino.

Paso 2.- Descarga e instalación de Arduino
Aquí descargaremos la aplicación de Arduino con el cual podrás editar, subir y abrir los códigos.

Paso 3.- Subir un código
En esta parte podremos subir nuestros programas a nuestro Kit Robot Sumo. Puedes empezar por el que mas te guste y requieras. Creamos un PDF donde detallamos cada una de las instrucciones para subir cada uno de los códigos paso a paso.

Manual página 1
Manual página 2
Manual página 3
Manual página 4
Manual página 5
Manual página 6
Manual página 7
Manual página 8
Manual página 9

A continuación te dejamos diferentes secciones con los programas para que puedas cargarlos a tu Kit Robot Sumo. Las secciones contienen el código escrito o si lo prefieres descargar también te dejamos un archivo de texto con el código.

Código Prueba Robot 4WD

Con este programa tu podrás conocer si tu KIT – 1191 funciona correctamente. El Robot se moverá hacia adelante y atrás en bucle.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13


void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void loop() {
  adelante();
  delay(1000);
  alto();
  delay(500);
  atras();
  delay(1000);
  alto();
  delay(500);
}

void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Evasor de Obstáculos

Comportamiento del programa.

Tu KIT – 1191 deberá de evadir obstáculos los cuales podrá detectar de frente, lo cual hará que cambie de dirección para encontrar nuevas rutas.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13

int ec = 22;
int tr = 23;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);

  pinMode(ec, INPUT);
  pinMode(tr, OUTPUT);
  digitalWrite(tr, LOW);
}

void loop() {
  if(distancia() >= 20){
  adelante();
  }
  else{
  alto();
  delay(1000);
  atras();
  delay(500);
  izquierda();
  delay(500);
}
}

long distancia()
{
long t;
long d;
digitalWrite(tr, HIGH);
delayMicroseconds(10);
digitalWrite(tr, LOW);
t = pulseIn(ec, HIGH, 15000);
d = (t == 0) ? 400 : t / 59;
delay(10);
return d;
}

void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Seguidor Linea Negra

Comportamiento del programa.

Tu KIT – 1191 deberá de seguir una Linea Negra en un fondo blanco a través de los sensores de Linea.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13

int sl = 5;
int sc = 17;
int sr = 16;
int l1 = 1;
int l2 = 1;
int l3 = 1;
int f1 = 0;
int f2 = 0;
int f3 = 0;

unsigned long tiempo = 0;
bool cont = false;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);

  pinMode(sl, INPUT);
  pinMode(sc, INPUT);
  pinMode(sr, INPUT);
}

void loop() {
l1 = digitalRead(sl);
  l2 = digitalRead(sc);
  l3 = digitalRead(sr);
  if ((l1 == 1 && l2 == 1 && l3 == 1) || (l1 == 0 && l2 == 0 && l3 == 0)) {
    if (!cont) {
      tiempo = millis();  
      cont = true;
    } else {
      if (millis() - tiempo >= 3000) {
        alto(); 
        cont = false;
      }
    }
  } else {
    cont = false; 
  }
  if (l1 == 0 && l2 == 1 && l3 == 0) {
    adelante();
  }
  else if ((l1 == 0 && l2 == 0 && l3 == 1) || (l1 == 0 && l2 == 1 && l3 == 1)) {
    der1();
  }
  else if ((l1 == 1 && l2 == 0 && l3 == 0) || (l1 == 1 && l2 == 1 && l3 == 0)) {
    izq1();
  }
  f1 = l1;
  f2 = l2;
  f3 = l3;
}

void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Seguidor Linea Blanca

Comportamiento del programa.

Tu KIT – 1191 deberá de seguir una Linea Blanca en un fondo negro a través de los sensores de Linea.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13

int sl = 5;
int sc = 17;
int sr = 16;
int l1 = 1;
int l2 = 1;
int l3 = 1;
int f1 = 0;
int f2 = 0;
int f3 = 0;

unsigned long tiempo = 0;
bool cont = false;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);

  pinMode(sl, INPUT);
  pinMode(sc, INPUT);
  pinMode(sr, INPUT);
}

void loop() {
l1 = digitalRead(sl);
  l2 = digitalRead(sc);
  l3 = digitalRead(sr);
  if ((l1 == 1 && l2 == 1 && l3 == 1) || (l1 == 0 && l2 == 0 && l3 == 0)) {
    if (!cont) {
      tiempo = millis();  
      cont = true;
    } else {
      if (millis() - tiempo >= 3000) {
        alto(); 
        cont = false;
      }
    }
  } else {
    cont = false; 
  }
  if (l1 == 1 && l2 == 0 && l3 == 1) {
    adelante();
  }
  else if ((l1 == 1 && l2 == 1 && l3 == 0) || (l1 == 1 && l2 == 0 && l3 == 0)) {
    der1();
  }
  else if ((l1 == 0 && l2 == 1 && l3 == 1) || (l1 == 0 && l2 ==0 && l3 == 1)) {
    izq1();
  }
  f1 = l1;
  f2 = l2;
  f3 = l3;
}

void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Sumo Autónomo Sin Bordes

Comportamiento del programa.

Tu KIT – 1191 buscara cualquier oponente que este cerca de él. Girara y al encontrar a un oponente buscara impactarlo y sacarlo de la arena. Fondo Negro.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13


int ec = 22;
int tr = 23;

unsigned long tiempo = 0;
bool cont = false;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
  
  pinMode(ec, INPUT);
  pinMode(tr, OUTPUT);
  digitalWrite(tr, LOW);
}

void loop() {
  
  if(distancia()<=20)
  {
    adelante();
  }
    else{
      izq1();
  }
}

long distancia()
{
long t;
long d;
digitalWrite(tr, HIGH);
delayMicroseconds(10);
digitalWrite(tr, LOW);
t = pulseIn(ec, HIGH, 15000);
d = (t == 0) ? 400 : t / 59;
delay(10);
return d;
}


void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Sumo Autónomo Fondo Negro

Comportamiento del programa.

Tu KIT – 1191 buscara cualquier oponente que este cerca de él. Girara y al encontrar a un oponente buscara impactarlo y sacarlo de la arena. Fondo Blanco.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13

int sl = 5;
int sc = 17;
int sr = 16;
int l1 = 1;
int l2 = 1;
int l3 = 1;
int f1 = 0;
int f2 = 0;
int f3 = 0;

int ec = 22;
int tr = 23;

unsigned long tiempo = 0;
bool cont = false;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);

  pinMode(sl, INPUT);
  pinMode(sc, INPUT);
  pinMode(sr, INPUT);
  
  pinMode(ec, INPUT);
  pinMode(tr, OUTPUT);
  digitalWrite(tr, LOW);
}

void loop() {
  
  if(distancia()<=20)
  {
    if(digitalRead(sl)==0 || digitalRead(sc)==0 || digitalRead(sr)==0)
      {
      alto();
      delay(200);
      atras();
      delay(500);
      alto();
      delay(500);
      derecha();
      delay(800);
      alto();
      delay(500);
      adelante();
      }
      else
      {
      adelante();
      }
      }
    else
      {
      if(digitalRead(sl)==0 || digitalRead(sc)==0 || digitalRead(sr)==0)
      {
      alto();
      delay(200);
      atras();
      delay(500);
      alto();
      delay(500);
      derecha();
      delay(800);
      alto();
      delay(500);
      adelante();
      }
      else
      {
      adelante();
      }
      }
}

long distancia()
{
long t;
long d;
digitalWrite(tr, HIGH);
delayMicroseconds(10);
digitalWrite(tr, LOW);
t = pulseIn(ec, HIGH, 15000);
d = (t == 0) ? 400 : t / 59;
delay(10);
return d;
}


void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Sumo Autónomo Fondo Blanco

Comportamiento del programa.

Tu KIT – 1191 buscara cualquier oponente que este cerca de él. Girara y al encontrar a un oponente buscara impactarlo y sacarlo de la arena. Fondo Blanco.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#define m1 27
#define m2 14
#define m3 12
#define m4 13

int sl = 5;
int sc = 17;
int sr = 16;
int l1 = 1;
int l2 = 1;
int l3 = 1;
int f1 = 0;
int f2 = 0;
int f3 = 0;

int ec = 22;
int tr = 23;

unsigned long tiempo = 0;
bool cont = false;

void setup() {
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);

  pinMode(sl, INPUT);
  pinMode(sc, INPUT);
  pinMode(sr, INPUT);
  
  pinMode(ec, INPUT);
  pinMode(tr, OUTPUT);
  digitalWrite(tr, LOW);
}

void loop() {
  
  if(distancia()<=20)
  {
    if(digitalRead(sl)==1 || digitalRead(sc)==1 || digitalRead(sr)==1)
      {
      alto();
      delay(200);
      atras();
      delay(500);
      alto();
      delay(500);
      derecha();
      delay(800);
      alto();
      delay(500);
      adelante();
      }
      else
      {
      adelante();
      }
      }
    else
      {
      if(digitalRead(sl)==1 || digitalRead(sc)==1 || digitalRead(sr)==1)
      {
      alto();
      delay(200);
      atras();
      delay(500);
      alto();
      delay(500);
      derecha();
      delay(800);
      alto();
      delay(500);
      adelante();
      }
      else
      {
      adelante();
      }
      }
}

long distancia()
{
long t;
long d;
digitalWrite(tr, HIGH);
delayMicroseconds(10);
digitalWrite(tr, LOW);
t = pulseIn(ec, HIGH, 15000);
d = (t == 0) ? 400 : t / 59;
delay(10);
return d;
}


void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}
Código Control Bluetooth

Comportamiento del programa.

Tu KIT – 1191 podrá conectarse con tu celular Android a través de la aplicación proporcionada.

En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.

Ver Código
#include "BluetoothSerial.h"
#define m1 27
#define m2 14
#define m3 12
#define m4 13

char valorBoton;
char penultimo = 'n';
char antepenultimo = 'm';
char vali = 'b';

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("4WD"); 
  Serial.println("Listo");
  pinMode(m1, OUTPUT);
  pinMode(m2, OUTPUT);
  pinMode(m3, OUTPUT);
  pinMode(m4, OUTPUT);
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void loop() {
if (Serial.available()) {
   SerialBT.write(Serial.read());
  }
  if(SerialBT.available())
      { 
        valorBoton = SerialBT.read();
        //Penultimo = n neutral antepenultimo = m neutral
        //Donde se quiera una izquierda se debe poner derecha y al reves
        //3 señales o 3 botones al mismo tiempo
        if((antepenultimo == 'w' && penultimo == 'd' && valorBoton == 'h') 
                  || (antepenultimo == 'w' && penultimo == 'a' && valorBoton == 'f'))//wdh o waf 
        { 
          vali = 'i';
          adelante();
          penultimo = 'n';
          antepenultimo = 'm';
        } 
        else if((antepenultimo == 's' && penultimo == 'd' && valorBoton == 'h') 
                  || (antepenultimo == 's' && penultimo == 'a' && valorBoton == 'f'))//sdh o saf 
        {
          vali = 'k';
          atras();
          penultimo = 'n';
          antepenultimo = 'm';
        } 
        else if((antepenultimo == 'a' && penultimo == 'w' && valorBoton == 't') 
                  || (antepenultimo == 'a' && penultimo == 's' && valorBoton == 'g'))//awt o asg
        {
          vali = 'j';
          izquierda();
          penultimo = 'n';
          antepenultimo = 'm';
        } 
        else if((antepenultimo == 'd' && penultimo == 'w' && valorBoton == 't') 
                  || (antepenultimo == 'd' && penultimo == 's' && valorBoton == 'g'))//dwt o dsg
        {
          vali = 'l';
          derecha();
          penultimo = 'n';
          antepenultimo = 'm';
        } 
        else if(vali == 'i')//Validacion no se suelta adelante
        {
          adelante();
          if(valorBoton == 't')
          {
            vali = 'b';
            alto();
          }
          else if(valorBoton == 'd') { //d
            der1();
          }
          else if(valorBoton == 'a') { //a
            izq1();
          }
        }
        else if(vali == 'k')//Validacion no se suelta atras
        {
          atras();
          if(valorBoton == 'g')
          {
            vali = 'b';
            alto();
          }
          else if(valorBoton == 'd') { //d
            atrasderecha();
          }
          else if(valorBoton == 'a') { //a
            atrasizquierda();
          }
        }
        else if(vali == 'j')//Validacion no se suelta izquierda
        {
          derecha();
          if(valorBoton == 'f')
          {
            vali = 'b';
            alto();
          }
          else if(valorBoton == 'w') { //w
            izq1();
          }
          else if(valorBoton == 'a') { //s
            atrasizquierda();
          }
        }
        else if(vali == 'l')//Validacion no se suelta derecha
        {
          izquierda();
          if(valorBoton == 'h')
          {
            vali = 'b';
            alto();
          }
          else if(valorBoton == 'w') { //w
            der1();
          }
          else if(valorBoton == 'a') { //s
            atrasderecha();
          }
        }
        
        //Combinaciones de dos botones:
        else if(valorBoton == 'w') { //w
          adelante();
        }
        else if(valorBoton == 's') { //s
          atras();
        }
        else if(penultimo != 's' && valorBoton == 'a') { //a
          izquierda();
        }
        else if(penultimo != 's' && valorBoton == 'd') { //d
          derecha();
        }
        else if(penultimo == 'w' && valorBoton == 'a') { //wa
          izq1();
        }
        else if(penultimo == 'w' && valorBoton == 'd') { //wd
          der1();
        }
        else if(penultimo == 'w' && valorBoton == 'f') { //wf
          adelante();
        }
        else if(penultimo == 'w' && valorBoton == 'h') { //wh
          adelante();
        }
        else if(penultimo == 't' && valorBoton == 'a') { //ta
          izquierda();
        }
        else if(penultimo == 't' && valorBoton == 'd') { //td
          derecha();
        }
        else if(penultimo == 's' && valorBoton == 'a') { //sa
          atrasizquierda();
        }
        else if(penultimo == 's' && valorBoton == 'd') { //sd
          atrasderecha();
        }
        else if(penultimo == 's' && valorBoton == 'f') { //sf
          atras();
        }
        else if(penultimo == 's' && valorBoton == 'h') { //sh
          atras();
        }
        else if(penultimo == 'g' && valorBoton == 'a') { //ga
          atrasderecha();
        }
        else if(penultimo == 'g' && valorBoton == 'd') { //gd
          atrasizquierda();
        }
        //Espejo
        else if(penultimo == 'a' && valorBoton == 'w') { //aw
          der1();
        }
        else if(penultimo == 'd' && valorBoton == 'w') { //dw
          izq1();
        }
        else if(penultimo == 'f' && valorBoton == 'w') { //fw
          adelante();
        }
        else if(penultimo == 'h' && valorBoton == 'w') { //hw
          adelante();
        }
        else if(penultimo == 'a' && valorBoton == 't') { //at
          izquierda();
        }
        else if(penultimo == 'd' && valorBoton == 't') { //dt
          derecha();
        }
        else if(penultimo == 'a' && valorBoton == 's') { //as
          atrasderecha();
        }
        else if(penultimo == 'd' && valorBoton == 's') { //ds
          atrasizquierda();
        }
        else if(penultimo == 'f' && valorBoton == 's') { //fs
          atras();
        }
        else if(penultimo == 'h' && valorBoton == 's') { //hs
          atras();
        }
        else if(penultimo == 'a' && valorBoton == 'g') { //ag
          atrasderecha();
        }
        else if(penultimo == 'd' && valorBoton == 'g') { //dg
          atrasizquierda();
        }
       /* else if(valorBoton == 'w') {
          adelante();
        }
        else if(valorBoton == 's') {
          atras();
        }*/
        else if(valorBoton == 'a') {
          izquierda();
        }
        else if(valorBoton == 'd') {
          derecha();
        }        

        else {
          //Si se presionan más de dos botones o no se presionan los adecuados
          alto();
          penultimo = 'n';
          antepenultimo = 'm';
          
        }
        //Actualizar la penultimo

        Serial.print(antepenultimo);
        Serial.print("  ");
        Serial.print(penultimo);
        Serial.print("  ");
        Serial.print(valorBoton);
        Serial.print("  ");
        Serial.print(vali);
        Serial.println("  ");
        
        
        antepenultimo = penultimo;
        penultimo = valorBoton;
      }    
}

void alto(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 0);
}

void atras(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void adelante(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void derecha(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0);
  digitalWrite(m3, 1);
  digitalWrite(m4, 0);
}

void izquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1);
  digitalWrite(m3, 0);
  digitalWrite(m4, 1);
}

void izq1(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 1);
}

void der1(){
  digitalWrite(m1, 1);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}

void atrasizquierda(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 0); 
  digitalWrite(m3, 1); 
  digitalWrite(m4, 0);
}

void atrasderecha(){
  digitalWrite(m1, 0);
  digitalWrite(m2, 1); 
  digitalWrite(m3, 0); 
  digitalWrite(m4, 0);
}