Reporte Robot de Tareas - Final
Reporte Robot de Tareas - Final
Reporte Robot de Tareas - Final
OCOL-PIXÁN
ANGEL AUGUSTO PARDENILLA UC
Expulsar las pelotas al llegar al punto final, siendo lo más preciso posible.
2
Descripción del robot.
El robot de tareas “Ocol-Pixán” permite transportar pelotas de un área
determinada a una salida designada por medio de su control a través del
celular empleando la aplicación Bluetooth RC Controller. Este permite el
almacenamiento de pelotas en su interior, las medidas aproximadas son
las presentadas en las figuras 1, 2 y 3.
3
En la figura 3 se aprecian el área que ocupan las rampas de absorción y
expulsión
Donde los botones con las flechas en las cuatro direcciones hacia arriba,
abajo, derecha e izquierda funcionan para la movilidad del robot.
4
Figura 4. Interfaz de la aplicación Bluetooth RC Controller.
5
Materiales y metodología (proceso de construcción del
robot).
Para realizar el robot de tareas se emplearon diferentes materiales los cuales
se clasificarán por categorías y tendrán una breve descripción de su propósito
en el armado del robot, con el fin de tener una mejor comprensión de estos, de
igual modo se señalará la relación de la cantidad empleada por cada uno de los
estos.
Materiales:
Electrónica (componentes y elementos de salida):
6
Circuito Integrador (CI) L293D Puente H.
Servomotor MG90S.
7
Motor reductor.
Fue utilizado para la absorción de las pelotas como un tipo de molinos, estos
tienen una alimentación de 1.5V a 6V. Su diseño compacto permite y su
velocidad (3.7V 5600 RPM) los hacen ideales para la tarea designada.
Cantidad empleada: 2
8
CI Regulador LM1117T.
CI Regulador LM7805T.
Cantidad empleada: 1
9
Mini Buzzer zumbador activo 4KHz.
Este buzzer o repetidor se empleó para emitir sonido con fines creativos, en el
momento en el que el usuario desee utilizarlo. Su voltaje de alimentación va de
1.5V a 16V y posee una frecuencia de 4KHz y su diseño es compacto, por lo
cual no afecta el tenerlo en la misma placa.
Cantidad empleada: 1
Conexiones:
La placa fenólica perforada se empleó para hacer las conexiones finales para el
robot, ya que al no emplear sensores no se genera un ruido que afecte al
sistema, además su conexión es más práctica ya que se asemeja a una placa
de conexiones. Sus dimensiones son 7cm por 14.5cm.
Cantidad empleada: 1
10
Cable alambre estañado rojo y azul 24 AWG.
Este cable estañado sirvió para hacer las conexiones en la placa fenólica y
algunos elementos como motores.
Cantidad empleada: 5m (aproximadamente).
Estos elementos sirven como medio de conexión entre cables. En este caso se
emplearon para conectar los motores con los CI y para las alimentaciones.
Borneras de 3 entradas: 3
11
Soldadura estaño-plomo.
Este tipo de soldadura tiene 1mm de diámetro, una composición 60/ de estaño-
plomo. Se empleó para soldar los cables y todas las conexiones en la placa
fenólica.
Cantidad empleada: 1 tubo.
Consiste en una tira de 40 pines hembra con 2.54mm de largo de las puntas
que tiene la finalidad de no soldar de manera directa los componentes para
12
poder removerlos en caso de necesitarlo. Se empleó para colocar el ESP32 en
la placa fenólica.
Cantidad empleada: 1
13
Alimentación:
Estas baterías tienen 1.2V y 1300 mAh, permiten recargarse con un cargador
especial de la misma marca. Fueron empleadas para alimentar al
microcontrolador debido a su corriente y voltaje.
Cantidad empleada: 4
14
Baterías recargables Li-ion 4.2V 9800mAh.
Estas baterías del material Li-ion suministran 4.2V y 9800mAh por cada una y
permiten recargarse con un cargador especial, tienen un tamaño mayor al de
las AA tanto en grosor como en largo.
Se emplearon para suministrar energía a todos los elementos que requirieran
una alimentación de 5V. Se conectaron en serie para duplicar el voltaje y
mantener la corriente.
Cantidad empleada: 2
Cantidad empleada: 1
15
Elementos para la construcción del robot.
Triplay de 6mm.
Consiste en madera delgada prensada que resulta ligera, se empleó para hacer
la estructura del robot en la base y algunas de las paredes.
Cantidad empleada: 2 pliegos de 30cm x 60cm (aproximadamente).
En la figura 23, se observa este tipo de triplay.
Cantidad empleada: 6
16
Tela de microfibra.
17
Escuadra Esquinera Metálica Galvanizada 37mm.
Se empleó para sostener la cubierta inferior con la base.
Cantidad empleada: 4
18
Tuercas 0.3cm por 1cm.
Las tuercas se emplearon en conjunto con los tornillos y las pijas para una mejor
sujeción de la base.
Cantidad empleada: 4
19
Barra de silicón mediana.
Fue empleada con ayuda de una pistola de silicón para que las terminales
soldadas de los motores no se quebraran debido a la manipulación.
Cantidad empleada: 2
20
Metodología:
La metodología se seccionará en tres partes que corresponden a la programación,
electrónica y estructura, de modo que su compresión sea más amena.
Programación:
En este apartado se seccionará en 3 grandes grupos, los cuales son:
1. Configuración de salidas digitales y variables a utilizar.
2. Función principal
3. Funciones adicionales para usar dentro del principal
Estos apartados nos servirán para detallar y explicar las líneas de código de la
mejor manera.
Configuración:
Podemos checar en las primeras líneas que se tiene 2 palabra clave “#include” las
cuales son palabras reservadas para poder incluir librerías externas que nos
ayudaran en el proceso de funciones, estas dos librerías que se usaron son para la
conexión Bluetooth y para usar un servomotor específicamente en la placa de
trabajo esp32.
Posterior a ello se declaran nombres claves para las salidas a los motores, servo y
buzzer, así como una variable de tipo carácter “char” la cual nos servirá para la
lectura de letras por el puerto de comunicación Bluetooth.
#include "BluetoothSerial.h"
#include "ESP32Servo.h"
BluetoothSerial SerialBT;
int Pin1Motor1 = 19;
int Pin2Motor1 = 21;
int Pin1Motor2 = 22;
int Pin2Motor2 = 23;
int Pin1Motor3 = 2;
int Pin2Motor3 = 4;
int Pin1Motor4 = 5;
int Pin2Motor4 = 18;
int Pin1Motor5 = 32;
int Pin2Motor5 = 33;
int Pin1Motor6 = 25;
int Pin2Motor6 = 26;
char mensaje;
Servo myservo1;
21
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
22
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
#define REST 0
23
int tempo = 105;
int buzzer = 13;
int melody[] = {
NOTE_B4, 16, NOTE_B5, 16, NOTE_FS5, 16, NOTE_DS5, 16, //1
NOTE_B5, 32, NOTE_FS5, -16, NOTE_DS5, 8, NOTE_C5, 16,
NOTE_C6, 16, NOTE_G6, 16, NOTE_E6, 16, NOTE_C6, 32, NOTE_G6, -16,
NOTE_E6, 8,
NOTE_B4, 16, NOTE_B5, 16, NOTE_FS5, 16, NOTE_DS5, 16, NOTE_B5, 32,
//2
NOTE_FS5, -16, NOTE_DS5, 8, NOTE_DS5, 32, NOTE_E5, 32, NOTE_F5, 32,
NOTE_F5, 32, NOTE_FS5, 32, NOTE_G5, 32, NOTE_G5, 32, NOTE_GS5, 32,
NOTE_A5, 16, NOTE_B5, 8
};
int notes = sizeof(melody) / sizeof(melody[0]) / 2;
int wholenote = (60000 * 4) / tempo;
int divider = 0, noteDuration = 0;
En esta sección del programa se configuran si las variables que declaramos son
salidas o entrada de datos, así como le frecuencia del oscilador mecánico que tiene
la placa de Desarrollo para trabajar.
Se declara el nombre de la señal Bluetooth, en este caso “Ocol Pixán”, y las
salidas de los motores y buzzer.
void setup()
{
Serial.begin(9600);
SerialBT.begin ("Ocol Pixán");
pinMode(Pin1Motor1, OUTPUT);
pinMode(Pin2Motor1, OUTPUT);
pinMode(Pin1Motor2, OUTPUT);
pinMode(Pin2Motor2, OUTPUT);
pinMode(Pin1Motor3, OUTPUT);
pinMode(Pin2Motor3, OUTPUT);
pinMode(Pin1Motor4, OUTPUT);
pinMode(Pin2Motor4, OUTPUT);
pinMode(Pin1Motor5, OUTPUT);
24
pinMode(Pin2Motor5, OUTPUT);
pinMode(Pin1Motor6, OUTPUT);
pinMode(Pin2Motor6, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(Pin1Motor1, LOW);
digitalWrite(Pin2Motor1, LOW);
digitalWrite(Pin1Motor2, LOW);
digitalWrite(Pin2Motor2, LOW);
digitalWrite(Pin1Motor3, LOW);
digitalWrite(Pin2Motor3, LOW);
digitalWrite(Pin1Motor4, LOW);
digitalWrite(Pin2Motor4, LOW);
digitalWrite(Pin1Motor5, LOW);
digitalWrite(Pin2Motor5, LOW);
digitalWrite(Pin1Motor6, LOW);
digitalWrite(Pin2Motor6, LOW);
myservo1.attach(27);
myservo1.write(0);
digitalWrite(buzzer, LOW);
}
Función principal
Funciones adicionales
Se tienen las siguientes funciones creadas por el usuario para realizar
determinadas acciones en las salidas o entradas de señales al microcontrolador.
1- Adelante
2- atrás
3- Giro Derecha
4- Giro Izquierda
Estas funciones activan o desactivan los motores de movilidad, así como cambiar
la dirección de rotación, esto para poder generar una movilidad lo más libre posible.
Luego se tienen las siguientes funciones para las acciones restantes:
1- absorción
2- Expulsar
3- Paro
4- Abrir
5- Cerrar
6- Claxon
Las primeras dos funciones tienen como finalidad absorber las pelotitas de plástico
para el reto, así como también expulsarlas en dado caso que así sea requerido, la
función de paro tiene como finalidad detener los motores de absorción.
Las funciones de abrir y cerrar son propias del servomotor, la cual se
moverá a 180 grados para abrir o a 90 grados para mantener cerrado.
void adelante()
{
digitalWrite(Pin1Motor1, HIGH);
digitalWrite(Pin2Motor1, LOW);
digitalWrite(Pin1Motor2, HIGH);
digitalWrite(Pin2Motor2, LOW);
digitalWrite(Pin1Motor3, HIGH);
digitalWrite(Pin2Motor3, LOW);
digitalWrite(Pin1Motor4, HIGH);
digitalWrite(Pin2Motor4, LOW);
}
void atras()
{
digitalWrite(Pin1Motor1, LOW);
digitalWrite(Pin2Motor1, HIGH);
digitalWrite(Pin1Motor2, LOW);
digitalWrite(Pin2Motor2, HIGH);
27
digitalWrite(Pin1Motor3, LOW);
digitalWrite(Pin2Motor3, HIGH);
digitalWrite(Pin1Motor4, LOW);
digitalWrite(Pin2Motor4, HIGH);
}
void GiroDerecha()
{
digitalWrite(Pin1Motor1, HIGH);
digitalWrite(Pin2Motor1, LOW);
digitalWrite(Pin1Motor2, LOW);
digitalWrite(Pin2Motor2, HIGH);
digitalWrite(Pin1Motor3, HIGH);
digitalWrite(Pin2Motor3, LOW);
digitalWrite(Pin1Motor4, LOW);
digitalWrite(Pin2Motor4, HIGH);
}
void GiroIzquierda()
{
digitalWrite(Pin1Motor1, LOW);
digitalWrite(Pin2Motor1, HIGH);
digitalWrite(Pin1Motor2, HIGH);
digitalWrite(Pin2Motor2, LOW);
digitalWrite(Pin1Motor3, LOW);
digitalWrite(Pin2Motor3, HIGH);
digitalWrite(Pin1Motor4, HIGH);
digitalWrite(Pin2Motor4, LOW);
}
void freno()
{
digitalWrite(Pin1Motor1, LOW);
digitalWrite(Pin2Motor1, LOW);
digitalWrite(Pin1Motor2, LOW);
digitalWrite(Pin2Motor2, LOW);
digitalWrite(Pin1Motor3, LOW);
digitalWrite(Pin2Motor3, LOW);
digitalWrite(Pin1Motor4, LOW);
digitalWrite(Pin2Motor4, LOW);
}
void absorcion()
{
digitalWrite (Pin1Motor5, HIGH);
28
digitalWrite (Pin2Motor5, LOW);
digitalWrite (Pin1Motor6, LOW);
digitalWrite (Pin2Motor6, HIGH);
}
void expulsar()
{
digitalWrite (Pin1Motor5, LOW);
digitalWrite (Pin2Motor5, HIGH);
digitalWrite (Pin1Motor6, HIGH);
digitalWrite (Pin2Motor6, LOW);
}
void paro()
{
digitalWrite (Pin1Motor5, LOW);
digitalWrite (Pin2Motor5, LOW);
digitalWrite (Pin1Motor6, LOW);
digitalWrite (Pin2Motor6, LOW);
}
void abrir()
{
myservo1.write(180);
delay(100);
}
void cerrar()
{
myservo1.write(0);
delay(100);
}
void claxon(){
for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
divider = melody[thisNote + 1];
if (divider > 0) {
noteDuration = (wholenote) / divider;
} else if (divider < 0) {
noteDuration = (wholenote) / abs(divider);
noteDuration *= 1.5;
}
tone(buzzer, melody[thisNote], noteDuration * 0.9);
delay(noteDuration);
noTone(buzzer);
}}
29
Electrónica:
Los pines 1 y 9, que corresponden a los habilitadores de los pines para los
motores de cada lado, y los pines 8 y 16, que corresponden a la alimentación
del CI se conectan a positivo, en este caso a 5V. Los pines 2,7 son aquellos
que en la programación se colocaban en estado ALTO o BAJO, para controlar
la dirección del motor 1 y el pin 10 y 15, realizan la misma función que los
anteriores mencionados, pero aplicados al motor 2. Los pines 3 y 4 son en los
que se conectará cada salida del motor 1 y 11 y 14, corresponden a las salidas
del motor 2. Finalmente, los pines 4,5,12 y 13 señalados como disipadores, se
conectan a tierra. Este proceso se aplicó para cada CI del robot. Sus
alimentaciones para esta primera prueba fueron eliminadores de baterías de 5V
y el microcontrolador se alimentó a través de la entrada microUSB, colocando
30
una tierra común entre la placa ESP32 y la placa de pruebas (protoboard).
Finalmente, los pines propuestos (se observan en la programación) para
controlar cada motor se conectaron a través de jumpers de la placa a la
protoboard.
31
Después de realizar las pruebas de modo independiente (con alimentaciones
propias), se decidió emplear una alimentación para el ESP32 de 4.8V y
1200 mAh, utilizando las baterías recargables de 1.2 V y 1200 mAh en el
portabaterías con conexión en serie regulados a 3.3 V y 1000 mA a través de
un CILM1117, que tiene como pines de conexión lo visualizado en la figura
38.
32
Figura 39. Relación de pines del CI LM7805T.
33
Estructura:
Para poder realizar la estructura del robot es necesario saber cuál es el diseño que
se va a realizar por lo que por medio de la aplicación denominada “Tinkercad” se
fue desarrollando el boceto del chasis para su elaboración en físico, en la figura 40,
se observa el boceto para la elaboración de la estructura.
La estructura base del robot está hecha por medio de madera triplay de 6mm
específicamente 2 pliegos de 30 cm x 60 cm los cuales se fueron cortando para
hacer la estructura del chasis que se observa en la figura 41, la estructura se pensó
con las medidas de 30 cm x 30 cm ya que son los requerimientos solicitados. La
elaboración de la estructura para el robot se fue realizando por partes ya que de
esta forma se puede lograr hacer la estructura con mayor facilidad.
La primera parte está constituida por la base del chasis donde se encuentran los
motores de absorción, la placa fenólica, los motores reductores con sus respectivas
llantas, las rampas de absorción y expulsión de pelotas y 4 esquineros para
sostener la cubierta, la base mide 16 cm x 25 cm los esquineros estas sostenidos
por pijas de 1.5 cmx.5 cm.
La tercera parte está constituida por una estructura que se encarga de redirigir las
pelotas almacenadas hacia la rampa de expulsión, esta cuenta con 4 piezas
esenciales con los ángulos adecuados, las piezas superiores tienen las medidas de
5 cm x12 cm y las piezas laterales tienen una medida de 6 cm x11 cm, estas
rampas estas sostenidas por la cubierta de manera fija y rígida, esto se consiguió
por medio del pegamento de contacto super mil 5 en la figura 44, se observan
dichas rampas.
35
Figura 44. Rampas de redirección.
36
Resultados esperados.
Por medio de la creación del robot “Ocol-pixán” se espera que este pueda
almacenar el mayor número de pelotas posibles con el fin de tener la posibilidad de
llevar en el menor tiempo posible dichas pelotas desde un punto A, ya establecido
en la competencia, hasta un Punto B, determinado de igual modo en el concurso.
La finalidad de este robot es para poder ganar la competencia o bien, conseguir un
buen lugar en esta categoría.
Se espera que el día de la competencia y en base a los modelos de los otros
participantes se tengan ideas para las próximas competencias con el fin de mejorar
el diseño y el código de programación si fuese necesario.
De igual forma se espera aprender más sobre este tipo de competencias y mejorar
con cada paso que se dé, se espera ganar y divertirnos de manera sana y amena.
De igual forma se espera que este sea un robot de buena funcionalidad con bajo
presupuesto esto para demostrar que cualquiera que tenga las ganas de crear un
robot pueda hacerlo, sin tener que recurrir de un alto presupuesto por lo que no es
necesario crear un robot de alto presupuesto para poder ganar.
Para finalizar, se espera que el día de la competencia los objetivos sean visibles,
ya que los objetivos específicos “almacenar las pelotas en una estructura que
permita contener la mayor cantidad de pelotas sin deformarlas ni causar
atascamiento” y “expulsar las pelotas al llegar al punto final, siendo lo más preciso
posible” fueron alcanzados y comprobados a través de las pruebas.
37
Referencias.
Aliexpress. (2022). Aliexpress. Obtenido de
https://es.aliexpress.com/item/1005004069841689.html?_randl_currency
=MXN&_randl_shipto=MX&src=google&src=google&albch=shopping&ac
nt=631-313-
3945&slnk=&plac=&mtctp=&albbt=Google_7_shopping&albagn=888888
&isSmbActive=false&isSmbAutoCall=false&needSmbHouyi=fa
38
Thido. (2022). Thido. Obtenido de
https://www.electronicathido.com/detallesProducto.php?id=ZHJ0RFIvVE
hqc2JUQm51Vlp3cTVCZz09
39