Este proyecto utiliza un Arduino Uno R3 para controlar motores y sensores. La finalidad es gestionar el movimiento de los motores y recopilar datos de los sensores mediante funciones modulares. El sistema está diseñado para ser flexible, eficiente y escalable.
Hardware:
Software:
Haz un Fork de este repositorio.
Clona el repositorio:
git clone https://github.com/tu_usuario/robot-indep-robert.git
Implementa.
Este proyecto está creado con una ideologia tipo controlador/implementación. Dentro de las diferentes carpetas se encuentran controladores para ciertas funciones especificas. Utiliza la estructura que se encuentre dentro del directorio src/
. Dentro de esta carpeta se encuentran los siguientes directorios:
Si tienes alguna sugerencia con respecto a la estructura del código o no entiendes algo, por favor, házmelo saber y podemos conversarlo.
Para poder utilizar este código de manera adecuada, aquí te presento una serie de pasos que debes tener en cuenta para implementar las funciones adecuadas.
#include
, propia del lenguaje de programacion C++. Si por ejemplo, quieres hacer uso de la función acelerarMotorTrasero()
, deberías incluir la siguiente línea en tu archivo:#include "controladores/motores/motores.h"
#include "controladores/motores/motores.cpp"
De esta manera, podrás incluir dentro de tus métodos la función acelerarMotorTrasero()
, la cual solo se encuentra definida e implementada dentro de los directorios mencionados.
Como fue definido antes, existen 3 carpetas principales. Entre estas 3, la única que no debería modificarse es la carpeta controladores/
, ya que esta alberga el código fuente del funcionamiento, y si estas funciones no están bien definidas o son alteradas sin conocimiento, pueden resultar en la fundición de un motor o el erróneo funcionamiento del Robert.
Primeramente, en el directorio implementaciones/
debemos escribir el código para las funcionalidades básicas. Por ejemplo, podemos hacer lo siguiente para la función frenar()
:
frenar.cpp:
// Incluimos los controladores de los motores.
#include "controladores/motores/motores.h"
#include "controladores/motores/motores.cpp"
// Agregamos la siguiente línea para indicarle al compilador que se trata de código de Arduino.
#include <Arduino.h>
// Creamos la función "frenar()" en este caso
void frenar(P1, P2, OUT){
// Utilizamos las funciones implementadas en motores.cpp
retrocederMotorTrasero(P1, P2, OUT);
delay(500);
despotenciar(OUT);
neutro(P1, P2, OUT);
}
Es de vital importancia que al utilizar cualquier funciónalidad que tenga que ver con los motores tanto traseros como delanteros, utilizemos la función ya creada neutro();
con todos sus parámetros. De esta manera evitamos que los motores se quemen y nos aseguramos que funcione de manera correcta.
main.ino
?Para poder utilizarla, es necesario agregar la siguiente línea en el archivo main.ino
// Agregamos la siguiente línea para poder utilizar la función creada en el otro archivo
#include "../implementaciones/frenar.cpp"
// variables de pin
int rueda_derecha = 4;
int rueda_izquierda = 5;
int potencia_motor_trasero = 6;
void setup(){
// codigo...
}
void loop(){
// codigo...
frenar(rueda_derecha, rueda_izquierda, potencia_motor_trasero);
// codigo...
}
De esta manera implementamos todas las funciones de todos los archivos que estemos creando. Si no entiendes qué es lo que está pasando y el séntido de todo esto, te recomiendo que veas un tutorial de programación orientada a objetos e interfaces de código.
El código y las implementaciones de las funciones dentro de la carpeta controladores/
está diseñada para que sea fácil de leer y entendible al lenguaje natural. Para acelerar, busca una función dentro de este mismo directorio que se llame acelerar...
y podrás encontrarla. Si necesitas que el sensor mire a la izquierda, busca dentro del archivo ubicado dentro del árbol servo-control/
una función que se llama mirarIzquierda();
y la encontrarás. Solo pon ojo de qué es lo que quieres hacer funcionar, busca su carpeta, y luego encuentra la funcionalidad que deseas implementar en ese momento.
Para contribuir al repo, necesitamos manejarlo a través de Git para evitar archivos grandes y pesados. Primero, crea tu cuenta de GitHub, enlázala con tu Git en tu máquina y clona el repositorio. Aquí te dejo un par de líneas de bash para que puedas configurar tu git correctamente:
git config --global user.name "nombre de usuario"
git config --global user.email "correo electronico"
De esta manera tu git queda conectado a tu cuenta de GitHub correctamente.
Para clonar el repo, ejecuta la siguiente línea en donde quieras guardar este repo:
git clone https://github.com/nicoosk/robot-indep-robert.git
Una vez clonado el repo, haz los cambios que necesites hacer y haz un push a tu rama con tu nombre. Por ejemplo:
# Hago un commit de los cambios que hice
git commit -m "arreglado el sensor"
# haces un push a tu rama desde la rama local de donde estás trabajando. En mi caso, la rama que me pertenece se llama "nicolas" y estoy trabajando en mi rama main.
git push origin main:nicolas # aqui cambias lo que viene después de los dos puntos (:) por la rama con tu nombre
Con esto tu rama queda con tus cambios y puedes hacer un Pull Request a la rama main de GitHub. A continuación te presento como se hace.
Para hacer un Pull Request, tienes que dirigirte a GitHub e ir a tu rama en el repositorio. Una vez aquí, debería salirte un mensaje alertandote que se puede hacer un Pull Request porque hay cambios en tu rama. Una vez listo el título y descripción del Pull Request, lo diriges a la rama main de este mismo repo para su posterior aprobación.
Asegúrense que SIEMPRE mantengan sus ramas actualizadas. Si no las tienen actualizadas a su versión más reciente, es muy posible que existan conflictos y no les deje subir sus cambios. Para actualizar sus ramas, deben ejecutar los siguientes comandos:
# Actualizar sus referencias a nuevas ramas.
git fetch origin
# Traer cambios del main a su copia local
git checkout main-local
git pull
# Subir los cambios a tu rama remota
git push origin main-local:tu-nombre
De esta manera evitamos conflictos y nos aseguramos de que todo fluya según lo acordado.
NOTA: La rama main está protegida y no es posible hacerle push directamente para que no se rompa nada. Por lo que es muy importante el Pull Request desde sus forks hacia la rama que tienen designada.
Para que los cambios sean lo más uniformes posibles, estoy siguiendo una sintáxis en los commits que hago. Un ejemplo puede ser el siguiente:
# Ejemplo 1:
git commit -m "fixed: arreglando sintaxis de funcion mal implementada"
# Ejemplo 2:
git commit -m "add: nuevo archivo para controlar sensor infrarrojo"
#Ejemplo 3:
git commit -m "enhance: mejorado el reconocimiento de obstáculos"
A continuación les dejo una lista para que se puedan guiar:
A medida que sea necesario, iré agregando más a la lista.
Copyright 2024, Nicolás Huitrayao "nicoosk". Por la presente se concede permiso, libre de cargos, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), a utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "COMO ESTÁ", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR E INCUMPLIMIENTO. EN NINGÚN CASO LOS AUTORES O PROPIETARIOS DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, DERIVADAS DE, FUERA DE O EN CONEXIÓN CON EL SOFTWARE O SU USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.