Índice:
- Etapa 1: Equipamento
- Etapa 2: configuração do Arduino
- Etapa 3: Programa Final
- Etapa 4: guia de vídeo
- Etapa 5: Conclusão
Vídeo: Ladrilhos de piano tocando braço de robô: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
O grupo é formado por 2 Engenheiros de Automação da UCN, que tiveram uma ideia brilhante que estamos motivados a fazer e desenvolver. A ideia é baseada em uma placa Arduino controlando um braço robótico. A placa Arduino é o cérebro da operação e, em seguida, o atuador da operação, o braço robótico, fará o que for necessário. A explicação mais detalhada virá mais tarde.
Etapa 1: Equipamento
Braço do robô:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software para o robô- https://www.arduino.cc/en/Main/OldSoftwareRelease… Câmera de detecção de cores:
Câmera CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Etapa 2: configuração do Arduino
Você pode ver a configuração na placa aqui, o que é muito fácil.
À esquerda está a fonte de alimentação.
O do meio é para o primeiro servo, que mais tarde é conectado aos outros servos, servo por servo.
O inferior é onde controlamos a placa de um PC ou laptop, que possui uma entrada USB na outra extremidade.
Etapa 3: Programa Final
||| PROGRAMA |||
#incluir
#include #include "poses.h" #include // Biblioteca Pixy #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolean IDCheck; boolean RunCheck;
void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // define o registro 32 do número da junta para a velocidade 50. ax12SetRegister2 (2, 32, 50); // define o registro 32 do número da junta 2 para a velocidade 50. ax12SetRegister2 (3, 32, 50); // define o registro 32 do número da junta 3 para a velocidade 50. ax12SetRegister2 (4, 32, 50); // define o registro 32 do número da junta 4 para a velocidade 50. ax12SetRegister2 (5, 32, 100); // define o registro do número 5 da junta 32 para velocidade 100. // inicializar variáveis id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // abre a porta serial Serial.begin (9600); atraso (500); Serial.println ("###################################"); Serial.println ("Comunicação serial estabelecida.");
// Verifique a tensão da bateria Lipo CheckVoltage ();
// Varre os Servos, retorna a posição MoveTest (); MoveHome (); Opções do menu(); RunCheck = 1; }
void loop () {// lê o sensor: int inByte = Serial.read ();
switch (inByte) {
case '1': MovePose1 (); pausa;
caso '2': MovePose2 (); pausa; case '3': MovePose3 (); pausa;
caso '4': MovePose4 (); pausa;
caso '5': MoveHome (); pausa; caso '6': Grab (); pausa;
caso '7': LEDTest (); pausa;
caso '8': RelaxServos (); pausa; }}
void CheckVoltage () {// aguarde e verifique a tensão (segurança LiPO) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("###################################"); Serial.print ("Tensão do sistema:"); Serial.print (voltagem); Serial.println ("volts."); if (voltagem 10.0) {Serial.println ("Níveis de voltagem nominais."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##################################"); }
void MoveHome () {atraso (100); // pausa recomendada bioloid.loadPose (Home); // carrega a pose do FLASH, no buffer nextPose bioloid.readPose (); // lê nas posições servo atuais para o buffer curPose Serial.println ("##################################"); Serial.println ("Movendo servos para a posição inicial"); Serial.println ("###################################"); atraso (1000); bioloid.interpolateSetup (1000); // configuração para interpolação de current-> next sobre 1/2 segundo while (bioloid.interpolating> 0) {// faça isso enquanto não alcançamos nossa nova pose bioloid.interpolateStep (); // mova servos, se necessário. atraso (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {delay (100); // pausa recomendada bioloid.loadPose (Pose1); // carrega a pose do FLASH, no buffer nextPose bioloid.readPose (); // ler as posições servo atuais para o buffer curPose Serial.println ("##################################"); Serial.println ("Movendo servos para a 1ª posição"); Serial.println ("###################################"); atraso (1000); bioloid.interpolateSetup (1000); // configuração para interpolação de current-> next em 1/2 segundo while (bioloid.interpolating> 0) {// faça isso enquanto não alcançamos nossa nova pose bioloid.interpolateStep (); // mova servos, se necessário. atraso (3); } SetPosition (3, 291); // define a posição da junta 3 para '0' delay (100); // espera que a junta se mova if (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {delay (100); // pausa recomendada bioloid.loadPose (Pose2); // carrega a pose do FLASH, no buffer nextPose bioloid.readPose (); // ler as posições servo atuais para o buffer curPose Serial.println ("##################################"); Serial.println ("Movendo servos para a 2ª posição"); Serial.println ("###################################"); atraso (1000); bioloid.interpolateSetup (1000); // configuração para interpolação de current-> next sobre 1/2 segundo while (bioloid.interpolating> 0) {// faça isso enquanto não alcançamos nossa nova pose bioloid.interpolateStep (); // mova servos, se necessário. atraso (3); } SetPosition (3, 291); // define a posição da junta 3 para '0' delay (100); // espera que a junta se mova if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // pausa recomendada bioloid.loadPose (Pose3); // carrega a pose do FLASH, no buffer nextPose bioloid.readPose (); // lê nas posições servo atuais para o buffer curPose Serial.println ("##################################"); Serial.println ("Movendo servos para a 3ª posição"); Serial.println ("###################################"); atraso (1000); bioloid.interpolateSetup (1000); // configuração para interpolação de current-> next sobre 1/2 segundo while (bioloid.interpolating> 0) {// faça isso enquanto não alcançamos nossa nova pose bioloid.interpolateStep (); // mova servos, se necessário. atraso (3); } SetPosition (3, 291); // define a posição da junta 3 para '0' delay (100); // espera que a junta se mova if (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {delay (100); // pausa recomendada bioloid.loadPose (Pose4); // carrega a pose do FLASH, no buffer nextPose bioloid.readPose (); // lê nas posições servo atuais para o buffer curPose Serial.println ("##################################"); Serial.println ("Movendo servos para a 4ª posição"); Serial.println ("###################################"); atraso (1000); bioloid.interpolateSetup (1000); // configuração para interpolação de current-> next em 1/2 segundo while (bioloid.interpolating> 0) {// faça isso enquanto não alcançamos nossa nova pose bioloid.interpolateStep (); // mova servos, se necessário. atraso (3); } SetPosition (3, 291); // define a posição da junta 3 para '0' delay (100); // espera que a junta se mova if (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("################################"); Serial.println ("Teste de sinal de movimento de inicialização"); Serial.println ("###################################"); atraso (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; atraso (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; atraso (10); }
// itera para o próximo servo ID id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("###############################"); Serial.println ("Insira a opção 1-5 para executar testes individuais novamente."); Serial.println ("1) 1ª posição"); Serial.println ("2) 2ª posição"); Serial.println ("3) 3ª posição"); Serial.println ("4) 4ª posição"); Serial.println ("5) Posição inicial"); Serial.println ("6) Verifique a tensão do sistema"); Serial.println ("7) Executar teste de LED"); Serial.println ("8) Relax Servos"); Serial.println ("###################################"); }
vazio RelaxServos () {id = 1; Serial.println ("###################################"); Serial.println ("Relaxing Servos."); Serial.println ("###################################"); enquanto (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; atraso (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("###################################"); Serial.println ("Executando teste de LED"); Serial.println ("###################################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED LIGADO - ID do Servo:"); Serial.println (id); atraso (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED apagado - ID do servo:"); Serial.println (id); atraso (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // definir a posição da junta 1 para '0' delay (100); // esperar que a junta se mova
}
Baseamos nosso programa no programa PincherTest do fabricante, com alguns ajustes importantes no caso de posicionamento. Usamos o poses.h para o robô ter as posições na memória. Em primeiro lugar, tentamos criar o nosso braço de jogo com Pixycam para ser automático, mas devido a problemas de luz e tela pequena, isso não pôde acontecer. O robô tem uma posição inicial básica, após carregar o programa, ele testará todos os servos encontrados no robô. Definimos as poses para os botões de 1 a 4, para que sejam fáceis de lembrar. Sinta-se à vontade para usar o programa.
Etapa 4: guia de vídeo
Etapa 5: Conclusão
Concluindo, o robô é um pequeno projeto divertido para nós e uma coisa divertida de brincar e experimentar. Eu encorajo você a experimentá-lo e personalizá-lo também.
Recomendado:
PlotClock, WeMos e Blynk tocando Vintage AMI Jukebox: 6 etapas (com imagens)
PlotClock, WeMos e Blynk Playing Vintage AMI Jukebox: Quatro inovações técnicas tornaram este projeto possível: O Rowe AMI Jukebox 1977, kit de braço de robô PlotClock, microcontrolador WeMos / ESP 8266 e serviço Blynk App / Cloud. NOTA: Se você não tem o Jukebox à mão - não pare de ler! Este projeto pode
Parede interativa de ladrilhos de LED (mais fácil do que parece): 7 etapas (com imagens)
Parede de ladrilho de LED interativo (mais fácil do que parece): Neste projeto, construí um display de parede de LED interativo usando um Arduino e peças impressas em 3D. A inspiração para este projeto veio parcialmente dos ladrilhos Nanoleaf. Eu queria criar minha própria versão que fosse não apenas mais acessível, mas também mais mo
Faça com que os cegos reconheçam as coisas tocando as coisas ao seu redor usando o MakeyMakey: 3 etapas
Faça com que os cegos reconheçam as coisas tocando as coisas ao seu redor usando o MakeyMakey: introduçãoEste projeto visa facilitar a vida dos cegos identificando as coisas ao seu redor por meio do sentido do tato. Eu e meu filho Mustafa pensamos em encontrar uma ferramenta para ajudá-los e no período que usamos o hardware MakeyMakey t
COMO MONTAR UM BRAÇO DE ROBÔ DE MADEIRA IMPRESSIONANTE (PARTE 3: BRAÇO DE ROBÔ) - COM BASE NO MICRO: BITN: 8 Passos
COMO MONTAR UM BRAÇO DE ROBÔ DE MADEIRA IMPRESSIONANTE (PARTE 3: BRAÇO DE ROBÔ) - COM BASE NO MICRO: BITN: O próximo processo de instalação é baseado na conclusão do modo de evitar obstáculos. O processo de instalação na seção anterior é igual ao processo de instalação no modo de rastreamento de linha. Então, vamos dar uma olhada na forma final de A
COMO MONTAR UM BRAÇO DE ROBÔ DE MADEIRA IMPRESSIONANTE (PARTE 2: ROBÔ PARA Evitar Obstáculos) - COM BASE NO MICRO: BIT: 3 etapas
COMO MONTAR UM ARM DE ROBÔ DE MADEIRA IMPRESSIONANTE (PARTE 2: ROBÔ PARA Evitar Obstáculos) - COM BASE NO MICRO: BIT: Anteriormente, introduzimos o Armbit no modo de rastreamento de linha. A seguir, apresentamos como instalar o Armbit evitando o modo de obstáculo