Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Controlador de joystick para o robô MeArm - Coordenadas de gravação

Componentes e suprimentos

Arduino UNO
× 1
Joystick analógico (genérico)
× 2
Resistor 10k ohm
× 2
Resistor 680 ohm
× 1
LED de 5 mm:Vermelho
× 1
Micro servo SG90
× 4

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Controlador de joystick Arduino Uno para braço de robô (MeArm®) com gravação de coordenadas. Permite repetir as coordenadas gravadas uma vez no clique do botão ou repetidamente. Utiliza placa base Arduino Uno sem placas adicionais. Requer conexão USB (2A) ou fonte de alimentação 6V / 2A. Testado com o uso de quatro servos SG90.

Pressione o botão no joystick1 para iniciar a gravação das coordenadas. Pressione o botão no joystick1 para encerrar a gravação das coordenadas.

Pressione o botão no joystick2 para iniciar a reprodução das coordenadas gravadas. Pressione o botão no joystick2 para interromper a reprodução das coordenadas gravadas. Segure o botão no joystick2 para iniciar a reprodução das coordenadas gravadas automaticamente no ciclo.

Lembrete:Também fizemos uma versão mais simples deste software que não requer resistores adicionais e diodo LED:Robô MeArm - Gravação de Coordenadas (Versão Minimalizada)

Se você tem um joystick MeArm, aqui está uma versão para você:MeArm 1.6.1 Robot Joystick Board Recording Movements (IR)

Código

  • Controlador Arduiono Joystick para robô MeArm ® com gravação de coordenadas. (versão 1.3.1)
Controlador Arduiono Joystick para robô MeArm ® com gravação de coordenadas. (versão 1.3.1) Arduino
Use Arduino IDE para programar a placa base Arduiono UNO via porta USB.
 / * meArm joysticks analógicos versão 1.3.1 - UtilStudio.com Dez 2018 Usa dois joysticks analógicos e quatro servos. Na versão 1.3 foi melhorado o registro das coordenadas. Alguns bugs foram removidos. O primeiro joystick move a garra para frente, para trás, para a esquerda e para a direita, as posições do botão iniciar / parar gravação. O segundo joystick move a garra para cima, para baixo e fecha e abre, o botão iniciar / parar a reprodução das posições gravadas. Pressione o botão por 2 segundos para reproduzir automaticamente. Pinos:Arduino Stick1 Stick2 Base Ombro Cotovelo Registro / GND GND GND Marrom Marrom Marrom Marrom Auto play 5V VCC VCC Vermelho Vermelho Vermelho Vermelho LED A0 HOR A1 VER PD2 BUTT A2 HOR A3 VER PD3 BUTT 11 Amarelo 10 Amarelo 9 Amarelo 6 Amarelo PD4 X * / # inclui  bool repeatePlaying =false; / * Está executando repetidamente o ciclo gravado * / int delayBetweenCycles =2000; / * Atraso entre ciclos * / int basePin =11; / * Servo base * / int ombroPin =10; / * Servo de ombro * / int elbowPin =9; / * Elbow servo * / int gripperPin =6; / * Servo da garra * / int xdirPin =0; / * Base - joystick1 * / int ydirPin =1; / * Ombro - joystick1 * / int zdirPin =3; / * Cotovelo - joystick2 * / int gdirPin =2; / * Gripper - joystick2 * /// int pinRecord =A4; / * Gravação do botão - compatibilidade com versões anteriores * /// int pinPlay =A5; / * Botão de reprodução - compatibilidade com versões anteriores * / int pinRecord =PD2; / * Gravação de botão - recomendado (A4 está obsoleto, será usado para joystick adicional) * / int pinPlay =PD3; / * Botão de reprodução - recomendado (A5 está obsoleto, será usado para joystick adicional) * / int pinLedRecord =PD4; / * LED - indica o modo de gravação (luz) ou reprodução automática (piscar um) * / bool useInternalPullUpResistors =false; const int buffSize =512; / * Tamanho do buffer de gravação * / int startBase =90; int startShoulder =90; int startElbow =90; int startGripper =0; int posBase =90; int posShoulder =90; int posElbow =90; int posGripper =0; int lastBase =90; int lastShoulder =90; int lastElbow =90; int lastGripper =90; int minBase =0; int maxBase =150; int minShoulder =0; int maxShoulder =150; int minElbow =0; int maxElbow =150; int minGripper =0; int maxGripper =150; const int countServo =4; int buff [buffSize]; int buffAdd [countServo]; int recPos =0; int playPos =0; int buttonRecord =HIGH; int buttonPlay =HIGH; int buttonRecordLast =LOW; int buttonPlayLast =LOW; bool record =false; bool play =false; bool debug =false; String command ="Manual"; int printPos =0; int buttonPlayDelay =20; int buttonPlayCount =0; bool ledLight =false; Servo servoBase; Servo servoShoulder; Servo servoElbow; Servo servoGripper; void setup () {Serial.begin (9600); if (useInternalPullUpResistors) {pinMode (pinRecord, INPUT_PULLUP); pinMode (pinPlay, INPUT_PULLUP); } else {pinMode (pinRecord, INPUT); pinMode (pinPlay, INPUT); } pinMode (xdirPin, INPUT); pinMode (ydirPin, INPUT); pinMode (zdirPin, INPUT); pinMode (gdirPin, INPUT); pinMode (pinLedRecord, OUTPUT); servoBase.attach (basePin); servoShoulder.attach (ombroPin); servoElbow.attach (elbowPin); servoGripper.attach (gripperPin); Posição inicial(); digitalWrite (pinLedRecord, HIGH); atraso (1000); digitalWrite (pinLedRecord, LOW);} void loop () {buttonRecord =digitalRead (pinRecord); buttonPlay =digitalRead (pinPlay); // Serial.print (buttonRecord); // Serial.print ("\ t"); // Serial.println (buttonPlay); // para fins de teste if (buttonPlay ==LOW) {buttonPlayCount ++; if (buttonPlayCount> =buttonPlayDelay) {repeatePlaying =true; }} else buttonPlayCount =0; if (buttonPlay! =buttonPlayLast) {if (registro) {registro =falso; } if (buttonPlay ==LOW) {play =! play; repeatePlaying =false; if (play) {StartPosition (); }}} if (buttonRecord! =buttonRecordLast) {if (buttonRecord ==LOW) {record =! record; if (registro) {play =false; repeatePlaying =false; recPos =0; } else {if (debug) PrintBuffer (); }}} buttonPlayLast =buttonPlay; buttonRecordLast =buttonRecord; float dx =map (analogRead (xdirPin), 0, 1023, -5,0, 5,0); float dy =map (analogRead (ydirPin), 0, 1023, 5,0, -5,0); float dz =map (analogRead (zdirPin), 0, 1023, 5,0, -5,0); float dg =map (analogRead (gdirPin), 0, 1023, 5,0, -5,0); if (abs (dx) <1,5) dx =0; if (abs (dy) <1,5) dy =0; se (abs (dz) <1,5) dz =0; se (abs (dg) <1,5) dg =0; posBase + =dx; posShoulder + =dy; posElbow + =dz; posGripper + =dg; if (play) {if (playPos> =recPos) {playPos =0; if (repeatePlaying) {delay (delayBetweenCycles); Posição inicial(); } else {play =false; }} bool endOfData =false; while (! endOfData) {if (playPos> =buffSize - 1) break; if (playPos> =recPos) quebra; dados int =buff [playPos]; ângulo interno =dados &0xFFF; int servoNumber =dados &0x3000; endOfData =data &0x4000; switch (servoNumber) {case 0x0000:posBase =ângulo; pausa; caso 0x1000:posShoulder =ângulo; pausa; caso 0x2000:posElbow =ângulo; pausa; caso 0x3000:posGripper =ângulo; dg =posGripper - lastGripper; pausa; } playPos ++; }} if (posBase> maxBase) posBase =maxBase; if (posShoulder> maxShoulder) posShoulder =maxShoulder; if (posElbow> maxElbow) posElbow =maxElbow; if (posGripper> maxGripper) posGripper =maxGripper; if (posBase  0) {posGripper =maxGripper; waitGripper =true; } servoGripper.write (posGripper); if (jogar &&waitGripper) {delay (1000); } if ((lastBase! =posBase) | (lastShoulder! =posShoulder) | (lastElbow! =posElbow) | (lastGripper! =posGripper)) {if (registro) {if (recPos  

Esquemas

Controlador de joystick para robô MeArm ® com gravação de coordenadas - diagrama semático Placa de teste com apenas dois servos conectados. Veja o diagrama esquemático para conectar 4 servo motores.

Processo de manufatura

  1. Controlador de jogo Arduino
  2. Braço do robô MeArm - Seu robô - V1.0
  3. Carro RC controlado por joystick
  4. Robô seguidor de linha
  5. Calculadora UNO simples
  6. Robô controlado por fala
  7. Persistência da visão
  8. Joystick Arduino
  9. Arduino DMX-512 Tester Controller
  10. Robô para navegação interna supercool