Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Manette de commande pour robot MeArm - Enregistrement des coordonnées

Composants et fournitures

Arduino UNO
× 1
Joystick analogique (Générique)
× 2
Résistance 10k ohm
× 2
Résistance 680 ohm
× 1
LED 5 mm :Rouge
× 1
Micro servo SG90
× 4

Applications et services en ligne

Arduino IDE

À propos de ce projet

Manette de commande Arduino Uno pour bras robotique (MeArm®) avec enregistrement des coordonnées. Permet de répéter les coordonnées enregistrées une fois en cliquant sur le bouton ou à plusieurs reprises. Utilise la carte de base Arduino Uno sans cartes supplémentaires. Nécessite une connexion USB (2A) ou une alimentation 6V/2A. Testé avec quatre servos SG90.

Appuyez sur le bouton du joystick1 pour démarrer l'enregistrement des coordonnées. Appuyez sur le bouton du joystick1 pour terminer l'enregistrement des coordonnées.

Appuyez sur le bouton du joystick2 pour démarrer la relecture des coordonnées enregistrées. Appuyez sur le bouton du joystick2 pour arrêter la relecture des coordonnées enregistrées. Maintenez le bouton enfoncé sur le joystick2 pour démarrer la relecture des coordonnées enregistrées automatiquement en cycle.

Mémo :Nous avons également réalisé une version plus simple de ce logiciel qui ne nécessite pas de résistances supplémentaires et de diode LED :MeArm Robot - Recording of Coordinates (Version Minimalisée)

Si vous avez une carte joystick MeArm, voici une version pour vous :MeArm 1.6.1 Robot Joystick Board Recording Movements (IR)

Code

  • Contrôleur Arduiono Joystick pour robot MeArm ® avec enregistrement des coordonnées. (version 1.3.1)
Contrôleur Arduiono Joystick pour robot MeArm ® avec enregistrement des coordonnées. (version 1.3.1)Arduino
Utilisez Arduino IDE pour programmer la carte de base Arduiono UNO via le port USB.
/* joysticks analogiques meArm version 1.3.1 - UtilStudio.com décembre 2018 Utilise deux joysticks analogiques et quatre servos. Dans la version 1.3 a été amélioré l'enregistrement des coordonnées. Certains bugs ont été supprimés. Le premier joystick déplace la pince vers l'avant, l'arrière, la gauche et la droite, les positions d'enregistrement de démarrage/arrêt du bouton. Le deuxième joystick déplace la pince vers le haut, le bas et se ferme et s'ouvre, le bouton démarrer/arrêter la lecture des positions enregistrées. Appuyez sur le bouton pendant 2 secondes pour la lecture automatique. Broches :Arduino Stick1 Stick2 Base Épaule Coude Gripper Record/ GND GND GND Marron Marron Marron Marron Lecture automatique 5V VCC VCC Rouge Rouge Rouge Rouge LED A0 HOR A1 VER PD2 BUTT A2 HOR A3 VER PD3 BUTT 11 Jaune 10 Jaune 9 Jaune 6 Jaune PD4 X */#include bool repeatePlaying =false; /* Exécution répétée du cycle enregistré */int delayBetweenCycles =2000; /* Délai entre les cycles */int basePin =11; /* Servo de base */int shoulderPin =10; /* Servo d'épaule */int elbowPin =9; /* Servo coude */int pincerPin =6; /* Servo de pince */int xdirPin =0; /* Base - joystick1*/int ydirPin =1; /* Épaule - joystick1 */int zdirPin =3; /* Coude - joystick2 */int gdirPin =2; /* Gripper - joystick2 *///int pinRecord =A4; /* Bouton d'enregistrement - rétrocompatibilité *///int pinPlay =A5; /* Lecture des boutons - rétrocompatibilité */int pinRecord =PD2; /* Bouton d'enregistrement - recommandé (A4 est obsolète, sera utilisé pour un joystick supplémentaire) */int pinPlay =PD3; /* Jeu de boutons - recommandé (A5 est obsolète, sera utilisé pour un joystick supplémentaire) */int pinLedRecord =PD4; /* LED - indique le mode d'enregistrement (lumière) ou de lecture automatique (un clignotement) */bool useInternalPullUpResistors =false;const int buffSize =512; /* Taille du tampon d'enregistrement */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 ServoCoude;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, SORTIE); servoBase.attach(basePin); servoShoulder.attach(shoulderPin); servoElbow.attach(elbowPin); servoGripper.attach(gripperPin); La position de départ(); digitalWrite(pinLedRecord, HIGH); retard(1000); digitalWrite(pinLedRecord, LOW);}boucle vide() { buttonRecord =digitalRead(pinRecord); buttonPlay =digitalRead(pinPlay); // Serial.print(buttonRecord); // Serial.print("\t"); // Serial.println(buttonPlay); // à des fins de test if (buttonPlay ==LOW) { buttonPlayCount++; if (buttonPlayCount>=buttonPlayDelay) { repeatePlaying =true; } } else boutonPlayCount =0; if (buttonPlay !=buttonPlayLast) { if (record) { record =false; } if (boutonPlay ==LOW) { play =!play; repeatePlaying =false; if (play) { StartPosition(); } } } if (buttonRecord !=buttonRecordLast) { if (buttonRecord ==LOW) { record =!record; if (record) { play =false; repeatePlaying =false; RecPos =0 ; } else { if (déboguer) PrintBuffer(); } } } boutonLectureLast =boutonLecture; 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); si (abs(dx) <1,5) dx =0 ; si (abs(dy) <1,5) dy =0 ; si (abs(dz) <1,5) dz =0 ; si (abs(dg) <1,5) dg =0 ; posBase +=dx; posÉpaule +=dy; posCoude +=dz; posGripper +=dg; if (play) { if (playPos>=recPos) { playPos =0; if (repeatePlaying) { delay(delayBetweenCycles); La position de départ(); } else { jouer =faux; } } bool endOfData =false; while (!endOfData) { if (playPos>=buffSize - 1) break; if (playPos>=recPos) pause ; int data =buff[playPos]; angle int =données &0xFFF; int servoNumber =données &0x3000; endOfData =données &0x4000; switch (servoNumber) { case 0x0000 :posBase =angle; Pause; cas 0x1000 :posShoulder =angle; Pause; cas 0x2000 :posElbow =angle; Pause; cas 0x3000 :posGripper =angle; dg =posGripper - lastGripper ; Pause; } 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 =vrai; } servoGripper.write(posGripper); if (play &&waitGripper) { delay(1000); } if ((lastBase !=posBase) | (lastShoulder !=posShoulder) | (lastElbow !=posElbow) | (lastGripper !=posGripper)) { if (record) { if (recPos  

Schémas

Manette de commande pour robot MeArm ® avec enregistrement des coordonnées - schéma de principe Carte de test avec seulement deux servos connectés. Voir schéma de principe pour connecter 4 servomoteurs.

Processus de fabrication

  1. Contrôleur de jeu Arduino
  2. Bras de robot MeArm - Votre robot - V1.0
  3. Voiture RC contrôlée par joystick
  4. Robot suiveur de ligne
  5. Calculatrice UNO simple
  6. Robot à commande vocale
  7. Persistance de la vision
  8. Joystick Arduino
  9. Robot pour une navigation intérieure super cool