Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:40
El grupo está formado por 2 Ingenieros en Automatización de UCN, a quienes se les ocurrió una brillante idea que nos motiva hacer y desarrollar. La idea se basa en una placa Arduino que controla un brazo robótico. La placa Arduino es el cerebro de la operación y luego el actuador de la operación, el brazo robótico, hará lo que necesite. La explicación más detallada vendrá más adelante.
Paso 1: Equipo
Brazo robótico:
Kit de brazo robótico Phantomx Pincher Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software para el robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Cámara de detección de color:
Cámara CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Software: PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Paso 2: configuración de Arduino
Puedes ver la configuración en el tablero aquí, lo cual es muy fácil.
A la izquierda está la fuente de alimentación.
El del medio es para el primer servo, que luego se conecta a los otros servos, servo por servo.
El de abajo es donde controlamos la placa desde una PC o Laptop, que tiene una entrada USB en el otro extremo.
Paso 3: Programa final
||| PROGRAMA |||
#incluir
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolean IDCheck; boolean RunCheck;
configuración vacía () {pinMode (0, SALIDA); ax12SetRegister2 (1, 32, 50); // establece el registro 32 del número de junta 1 en la velocidad 50. ax12SetRegister2 (2, 32, 50); // establece el registro 32 del número de junta 2 en la velocidad 50. ax12SetRegister2 (3, 32, 50); // establece el registro 32 del número de articulación 3 a la velocidad 50. ax12SetRegister2 (4, 32, 50); // establece el registro 32 del número de articulación 4 a la velocidad 50. ax12SetRegister2 (5, 32, 100); // establece el registro del número de articulación 5 32 a velocidad 100. // inicializar variables id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // abre el puerto serie Serial.begin (9600); retraso (500); Serial.println ("##########################"); Serial.println ("Comunicación en serie establecida");
// Verifique el voltaje de la batería Lipo CheckVoltage ();
// Escanear servos, volver a la posición MoveTest (); Mudanza de casa(); Opciones de menú(); RunCheck = 1; }
bucle vacío () {// leer el sensor: int inByte = Serial.read ();
switch (inByte) {
caso '1': MovePose1 (); rotura;
caso '2': MovePose2 (); rotura; caso '3': MovePose3 (); rotura;
caso '4': MovePose4 (); rotura;
caso '5': MoveHome (); rotura; caso '6': Agarrar (); rotura;
caso '7': LEDTest (); rotura;
caso '8': RelaxServos (); rotura; }}
void CheckVoltage () {// espere, luego verifique el voltaje (seguridad de LiPO) voltaje de flotación = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("##########################"); Serial.print ("Voltaje del sistema:"); Serial.print (voltaje); Serial.println ("voltios"); if (voltaje 10.0) {Serial.println ("Niveles de voltaje nominal."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }
void MoveHome () {retraso (100); // pausa recomendada bioloid.loadPose (Inicio); // carga la pose desde FLASH, en el búfer nextPose bioloid.readPose (); // lee las posiciones actuales de los servos en el búfer curPose Serial.println ("#########################"); Serial.println ("Mover los servos a la posición de inicio"); Serial.println ("##########################"); retraso (1000); bioloid.interpolateSetup (1000); // configuración para la interpolación desde actual-> siguiente más de 1/2 segundo while (bioloid.interpolates> 0) {// hacemos esto mientras no hayamos alcanzado nuestra nueva pose bioloid.interpolateStep (); // mueve los servos, si es necesario. retraso (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {retraso (100); // pausa recomendada bioloid.loadPose (Pose1); // carga la pose desde FLASH, en el búfer nextPose bioloid.readPose (); // leer las posiciones actuales de los servos en el búfer curPose Serial.println ("#########################"); Serial.println ("Mover los servos a la 1ª posición"); Serial.println ("##########################"); retraso (1000); bioloid.interpolateSetup (1000); // configuración para la interpolación desde actual-> siguiente más de 1/2 segundo while (bioloid.interpolates> 0) {// hacemos esto mientras no hayamos alcanzado nuestra nueva pose bioloid.interpolateStep (); // mueve los servos, si es necesario. retraso (3); } SetPosition (3, 291); // establece la posición de la articulación 3 en '0' delay (100); // espera a que la articulación se mueva if (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {retraso (100); // pausa recomendada bioloid.loadPose (Pose2); // carga la pose desde FLASH, en el búfer nextPose bioloid.readPose (); // lee las posiciones actuales de los servos en el búfer curPose Serial.println ("#########################"); Serial.println ("Mover los servos a la 2ª posición"); Serial.println ("##########################"); retraso (1000); bioloid.interpolateSetup (1000); // configuración para la interpolación desde actual-> siguiente más de 1/2 segundo while (bioloid.interpolates> 0) {// hacemos esto mientras no hayamos alcanzado nuestra nueva pose bioloid.interpolateStep (); // mueve los servos, si es necesario. retraso (3); } SetPosition (3, 291); // establece la posición de la articulación 3 en '0' delay (100); // espera a que la articulación se mueva if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {retraso (100); // pausa recomendada bioloid.loadPose (Pose3); // carga la pose desde FLASH, en el búfer nextPose bioloid.readPose (); // leer las posiciones actuales de los servos en el búfer curPose Serial.println ("#########################"); Serial.println ("Mover los servos a la 3ª posición"); Serial.println ("##########################"); retraso (1000); bioloid.interpolateSetup (1000); // configuración para la interpolación desde actual-> siguiente más de 1/2 segundo while (bioloid.interpolates> 0) {// hacemos esto mientras no hayamos alcanzado nuestra nueva pose bioloid.interpolateStep (); // mueve los servos, si es necesario. retraso (3); } SetPosition (3, 291); // establece la posición de la articulación 3 en '0' delay (100); // espera a que la articulación se mueva if (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {retraso (100); // pausa recomendada bioloid.loadPose (Pose4); // carga la pose desde FLASH, en el búfer nextPose bioloid.readPose (); // lee las posiciones actuales de los servos en el búfer curPose Serial.println ("#########################"); Serial.println ("Mover los servos a la 4ª posición"); Serial.println ("##########################"); retraso (1000); bioloid.interpolateSetup (1000); // configuración para la interpolación desde actual-> siguiente más de 1/2 segundo while (bioloid.interpolates> 0) {// hacemos esto mientras no hayamos alcanzado nuestra nueva pose bioloid.interpolateStep (); // mueve los servos, si es necesario. retraso (3); } SetPosition (3, 291); // establece la posición de la articulación 3 en '0' delay (100); // espera a que la articulación se mueva if (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("#########################"); Serial.println ("Inicialización de la prueba de signos de movimiento"); Serial.println ("##########################"); retraso (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("ID de servo móvil:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; retraso (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; retraso (10); }
// iterar al siguiente ID de servo id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("##########################"); Serial.println ("Ingrese la opción 1-5 para ejecutar pruebas individuales nuevamente"); Serial.println ("1) 1.ª posición"); Serial.println ("2) 2ª posición"); Serial.println ("3) 3.ª posición"); Serial.println ("4) 4ª posición"); Serial.println ("5) Posición inicial"); Serial.println ("6) Verifique el voltaje del sistema"); Serial.println ("7) Realizar prueba de LED"); Serial.println ("8) Relax Servos"); Serial.println ("##########################"); }
anular RelaxServos () {id = 1; Serial.println ("##########################"); Serial.println ("Servos relajantes"); Serial.println ("##########################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; retraso (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("##########################"); Serial.println ("Prueba de LED en ejecución"); Serial.println ("##########################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ENCENDIDO - Servo ID:"); Serial.println (id); retraso (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED APAGADO - Servo ID:"); Serial.println (id); retraso (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // establece la posición de la articulación 1 en '0' delay (100); // espera a que la articulación se mueva
}
Hemos basado nuestro programa en el programa PincherTest del fabricante con algunos ajustes importantes en el caso del posicionamiento. Usamos poses.h para que el robot tenga las posiciones en la memoria. En primer lugar, intentamos crear nuestro brazo de reproducción con Pixycam para que fuera automático, pero debido a problemas de luz y pantalla pequeña, eso no pudo suceder. El robot tiene una posición de inicio básica, después de cargar el programa, probará todos los servos que se encuentran en el robot. Hemos establecido las poses para los botones 1-4, por lo que será fácil de recordar. Siéntete libre de usar el programa.
Paso 4: Guía de video
Paso 5: Conclusión
En conclusión, el robot es un pequeño proyecto divertido para nosotros y algo divertido para jugar y experimentar. Te animo a que lo pruebes y lo personalices también.
Recomendado:
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: 6 pasos (con imágenes)
PlotClock, WeMos y Blynk tocando Vintage AMI Jukebox: Cuatro innovaciones técnicas hicieron posible este proyecto: el Rowe AMI Jukebox de 1977, el kit de brazo robótico PlotClock, el microcontrolador WeMos / ESP 8266 y el servicio Blynk App / Cloud. Jukebox a mano - ¡no dejes de leer! Este proyecto puede
Haga que los ciegos reconozcan las cosas tocando las cosas a su alrededor con MakeyMakey: 3 pasos
Haga que los ciegos reconozcan las cosas tocando las cosas a su alrededor con MakeyMakey: introducción Este proyecto tiene como objetivo facilitar la vida de los ciegos al identificar las cosas que los rodean a través del sentido del tacto. Mi hijo Mustafa y yo pensamos en encontrar una herramienta para ayudarlos y en el período en que usamos el hardware MakeyMakey t
BRAZO ROBÓTICO Xbox 360 [ARDUINO]: BRAZO AXIOMA: 4 pasos
BRAZO ROBÓTICO Xbox 360 [ARDUINO]: BRAZO AXIOM:
Arduino - Piano Tiles: 16 pasos (con imágenes)
Arduino - Piano Tiles: Hola gente de Internet, esto será sobre cómo hacer lo que DEFINITIVAMENTE no es una copia de un juego móvil en un arduino uno r3. ! 1x Arduino Uno r3 ($ 42) 2x Protector de teclado LCD ($ 19 cada uno) 5
CÓMO MONTAR UN IMPRESIONANTE BRAZO ROBOT DE MADERA (PARTE 3: BRAZO ROBOT) - BASADO EN MICRO: BITN: 8 pasos
CÓMO MONTAR UN IMPRESIONANTE BRAZO ROBOT DE MADERA (PARTE 3: BRAZO ROBOT) - BASADO EN EL MICRO: BITN: El siguiente proceso de instalación se basa en la finalización del modo de evitación de obstáculos. El proceso de instalación de la sección anterior es el mismo que el proceso de instalación en el modo de seguimiento de línea. Entonces echemos un vistazo a la forma final de A