Taula de continguts:

Rajoles de piano que toquen el braç del robot: 5 passos
Rajoles de piano que toquen el braç del robot: 5 passos

Vídeo: Rajoles de piano que toquen el braç del robot: 5 passos

Vídeo: Rajoles de piano que toquen el braç del robot: 5 passos
Vídeo: Объяснение истории судьи Дредда Лора и ранних лет — ру... 2024, De novembre
Anonim
Rajoles de piano tocant el braç del robot
Rajoles de piano tocant el braç del robot

El grup està format per 2 enginyers d'automatització d'UCN, que van tenir una idea brillant que estem motivats a fer i desenvolupar. La idea es basa en una placa Arduino que controla un braç robòtic. La placa Arduino és el cervell de l’operació i, a continuació, l’actuador de l’operació, el braç robotitzat, farà el que necessiti. L’explicació més profunda arribarà més endavant.

Pas 1: equipament

Equipament
Equipament

Braç del robot:

Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Programari per al robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Càmera de detecció de color:

Càmera CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)

Programari: PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Pas 2: Configuració d'Arduino

Configuració d'Arduino
Configuració d'Arduino

Podeu veure la configuració al tauler aquí, que és molt fàcil.

A l’esquerra hi ha la font d’alimentació.

El central és per al primer servo, que més endavant es connecta als altres servos, servo per servo.

La part inferior és on controlem la placa des d’un PC o portàtil, que té una entrada USB a l’altre extrem.

Pas 3: Programa final

||| PROGRAMA |||

#incloure

#include #include "poses.h" #include // Biblioteca Pixy #include

#define POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; IDCheck booleà; RunCheck booleà;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // establir el número 1 de registre conjunt 32 a velocitat 50. ax12SetRegister2 (2, 32, 50); // establir número 2 de registre conjunt 32 a velocitat 50. ax12SetRegister2 (3, 32, 50); // estableix el número 3 de l’articulació registre 32 a la velocitat 50. ax12SetRegister2 (4, 32, 50); // estableix el número 4 de l’articulació registre 32 a la velocitat 50. ax12SetRegister2 (5, 32, 100); // estableix el registre número 5 de l’articulació 32 a la velocitat 100. // inicialitza les variables id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // obriu el port sèrie Serial.begin (9600); retard (500); Serial.println ("#############################"); Serial.println ("S'ha establert la comunicació en sèrie");

// Comproveu la tensió de la bateria Lipo CheckVoltage ();

// Escaneja els servos, torna la posició MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// llegir el sensor: int inByte = Serial.read ();

commutador (inByte) {

cas '1': MovePose1 (); trencar;

cas '2': MovePose2 (); trencar; cas '3': MovePose3 (); trencar;

cas '4': MovePose4 (); trencar;

cas '5': MoveHome (); trencar; cas '6': Grab (); trencar;

cas '7': LEDTest (); trencar;

cas '8': RelaxServos (); trencar; }}

void CheckVoltage () {// espera i, a continuació, comprova la tensió flotant de la tensió (seguretat LiPO) = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#############################"); Serial.print ("Voltatge del sistema:"); Serial.print (voltatge); Serial.println ("volts"); if (tensió 10,0) {Serial.println ("Nivells de tensió nominal"); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }

void MoveHome () {delay (100); // pausa recomanada bioloid.loadPose (Inici); // carregueu la pose de FLASH al buffer nextPose bioloid.readPose (); // llegir en les posicions servo actuals al buffer curPose Serial.println ("#############################"); Serial.println ("Moure servos a la posició inicial"); Serial.println ("#############################"); retard (1000); bioloid.interpolateSetup (1000); // configuració per a la interpolació de current-> següent més de 1/2 segon mentre (bioloid.interpolating> 0) {// feu-ho mentre no hem arribat a la nostra nova posició bioloid.interpolateStep (); // moure servos, si cal. retard (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {delay (100); // pausa recomanada bioloid.loadPose (Pose1); // carregueu la pose de FLASH al buffer nextPose bioloid.readPose (); // llegir en les posicions servo actuals al buffer curPose Serial.println ("#############################"); Serial.println ("Moure servos a la 1a posició"); Serial.println ("#############################"); retard (1000); bioloid.interpolateSetup (1000); // configuració per a la interpolació de current-> següent més de 1/2 segon mentre (bioloid.interpolating> 0) {// feu-ho mentre no hem arribat a la nostra nova posició bioloid.interpolateStep (); // moure servos, si cal. retard (3); } SetPosition (3, 291); // estableix la posició de la junta 3 a un retard de '0' (100); // espera que la junta es mogui si (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {delay (100); // pausa recomanada bioloid.loadPose (Pose2); // carregueu la pose de FLASH al buffer nextPose bioloid.readPose (); // llegir en les posicions servo actuals al buffer curPose Serial.println ("#############################"); Serial.println ("Moure servos a la 2a posició"); Serial.println ("#############################"); retard (1000); bioloid.interpolateSetup (1000); // configuració per a la interpolació de current-> següent més de 1/2 segon mentre (bioloid.interpolating> 0) {// feu-ho mentre no hem arribat a la nostra nova posició bioloid.interpolateStep (); // moure servos, si cal. retard (3); } SetPosition (3, 291); // estableix la posició de la junta 3 a un retard de '0' (100); // espera que la junta es mogui si (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // pausa recomanada bioloid.loadPose (Pose3); // carregueu la pose de FLASH al buffer nextPose bioloid.readPose (); // llegir en les posicions servo actuals al buffer curPose Serial.println ("#############################"); Serial.println ("Moure servos a la 3a posició"); Serial.println ("#############################"); retard (1000); bioloid.interpolateSetup (1000); // configuració per a la interpolació de current-> següent més de 1/2 segon mentre (bioloid.interpolating> 0) {// feu-ho mentre no hem arribat a la nostra nova posició bioloid.interpolateStep (); // moure servos, si cal. retard (3); } SetPosition (3, 291); // estableix la posició de la junta 3 a un retard de '0' (100); // espera que la junta es mogui si (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {delay (100); // pausa recomanada bioloid.loadPose (Pose4); // carregueu la pose de FLASH al buffer nextPose bioloid.readPose (); // llegir en les posicions actuals del servo al buffer curPose Serial.println ("#############################"); Serial.println ("Moure servos a la 4a posició"); Serial.println ("#############################"); retard (1000); bioloid.interpolateSetup (1000); // configuració per a la interpolació de current-> següent més de 1/2 segon mentre (bioloid.interpolating> 0) {// feu-ho mentre no hem arribat a la nostra nova posició bioloid.interpolateStep (); // moure servos, si cal. retard (3); } SetPosition (3, 291); // estableix la posició de la junta 3 a un retard de '0' (100); // espera que la junta es mogui si (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("############################"); Serial.println ("Inicialització de la prova del signe del moviment"); Serial.println ("#############################"); retard (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; retard (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; retard (10); }

// itera al següent ID de serv id = id ++;

} if (RunCheck == 1) {MenuOptions (); }}

void MenuOptions () {Serial.println ("############################"); Serial.println ("Introduïu l'opció 1-5 per tornar a executar proves individuals."); Serial.println ("1) 1a posició"); Serial.println ("2) 2a posició"); Serial.println ("3) 3a posició"); Serial.println ("4) 4a posició"); Serial.println ("5) Posició inicial"); Serial.println ("6) Comproveu la tensió del sistema"); Serial.println ("7) Realitza la prova del LED"); Serial.println ("8) Relax Servos"); Serial.println ("#############################"); }

void RelaxServos () {id = 1; Serial.println ("#############################"); Serial.println ("Servos relaxants"); Serial.println ("#############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; retard (50); } if (RunCheck == 1) {MenuOptions (); }}

void LEDTest () {id = 1; Serial.println ("#############################"); Serial.println ("Prova LED en execució"); Serial.println ("#############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - ID del servidor:"); Serial.println (id); retard (3000); ax12SetRegister (identificador, 25, 0); Serial.print ("LED apagat: identificador de servidor:"); Serial.println (id); retard (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // Estableix la posició de la junta 1 a "0" de retard (100); // espera que la junta es mogui

}

Hem basat el nostre programa en el programa PincherTest dels fabricants amb alguns canvis importants en el cas del posicionament. Hem utilitzat poses.h perquè el robot tingui les posicions a la memòria. En primer lloc, vam intentar que el nostre braç de joc amb Pixycam fos automàtic, però a causa de la llum i els petits problemes de pantalla, això no podia passar. El robot té una posició inicial bàsica, després de carregar el programa, provarà tots els servos que es troben al robot. Hem establert les postures dels botons 1-4, de manera que serà fàcil de recordar. No dubteu a utilitzar el programa.

Pas 4: Guia de vídeo

Pas 5: Conclusió

En conclusió, el robot és un petit projecte divertit per a nosaltres i un divertit joc per jugar i experimentar. Us animo a provar-lo i personalitzar-lo també.

Recomanat: