Bras robotisé avec Servo-moteurs (5 / 6 étapes)

Étape 5: Branchez-le et écrire du code

Tout d’abord, vous aurez besoin de quelques bibliothèques :
AFMotor - cette bibliothèque a été écrite par Adafruit et rend l’utilisation de la flasque arrière un jeu d’enfant. Lire la documentation associée.
PID_V1 - il s’agit d’une bibliothèque incroyable avec tout aussi étonnant de documentation.

Maintenant, regardez à travers le code et assurez-vous que votre bras robotisé est correctement câblé (faire attention aux broches potentiomètre). J’ai eu une alimentation de benchtop câblée à la flasque arrière donc le bouclier devenait 6V à jusqu'à 3 a, puis l’Arduino a été alimenté seulement via le câble USB.  Les deux fils de chaque moteur sont câblés aux blocs M3 et M4 sur le flasque arrière du moteur.  Les trois fils de potentiomètre de chaque moteur, on va à la terre, l’autre va à alimentation 5V sur l’Arduino, et l’autre est un fil de signal qui est branché sur une entrée analogique sur l’Arduino. Il va être à souder n’importe quelle configuration vous accédez.

Maintenant, copiez et collez ce code commenté assez bien :

/*
Contrôle de bras de robot à l’aide de servos piratés
y est vertical, + x est à droite
par FAB Roberts 2012-05
*/

#include < AFMotor.h >
#include < math.h >
#include < PID_v1.h >

Instancier les deux moteurs
AF_DCMotor shoulder(3) ;
AF_DCMotor elbow(4) ;

déclarer les épingles
int ElbowPin = A1 ;  potentiomètre sur le moteur de coude
int ShoulderPin = A0 ; potentiomètre sur le moteur de l’épaule

INITIALISER DES CONSTANTES
double Kp_Elbow = 20 ;    C’est le gain proportionnel
double Kp_Shoulder = 20 ;
double Ki_Elbow = 0,1 ;    C’est le gain intégral
double Ki_Shoulder = 0,1 ;
double Kd_Elbow = 1.0 ;  C’est le gain dérivé
double Kd_Shoulder = 0,75 ;

double Elbow_neg = 970 ;      limites communes du bras robotique en utilisant la règle de la main droite pour signe
double Elbow_pos = 31 ;
double Shoulder_neg = 210 ;
double Shoulder_pos = 793 ;

const double a1 = 200 ;     longueur de l’épaule-à-coude « OS » (mm)
const double a2 = 220 ;     longueur de coude-à-poignet « OS » (mm) - support c plus long

double highY = 350 ; objectifs de la ligne de démarcation
double lowY = 250 ;
double constantX = 200 ;

elbowup booléen = false ; true = coude vers le haut, false = coude vers le bas

VARIABLES
double rawElbowAngle = 0.0 ;      initialiser tous les angles à 0
double rawShoulderAngle = 0.0 ;

double elbowAngle = 0.0 ;      initialiser tous les angles à 0
double shoulderAngle = 0.0 ;

double theta1 = 0.0 ;  angles de la cible tel que déterminé par le biais de IK
double theta2 = 0.0 ;

double actualX = 0.0 ;
double actualY = 0.0 ;
double y = 0.0 ;

double c2 = 0.0 ; est btwn -1 et 1
double s2 = 0.0 ;

double pwmTemp = 0.0 ;

double pwmElbow = 100.0 ;  entre 0 et 255
double pwmShoulder = 100.0 ;

Syntaxe: PID (& entrée, &, & point de consigne, Kp, Ki, Kd, sortie Direction)
PID elbowPID (elbowAngle, pwmElbow & theta2, Kp_Elbow, Ki_Elbow, Kd_Elbow, DIRECT) ;
PID shoulderPID (shoulderAngle, pwmShoulder & theta1, Kp_Shoulder, Ki_Shoulder, Kd_Shoulder, DIRECT) ;

void setup() {}
Serial.Begin(115200) ;           mettre en place une bibliothèque série

elbowPID.SetSampleTime(5) ;  (ms) combien de fois nouveau PID calc est effectuée, la valeur par défaut est 1000
shoulderPID.SetSampleTime(5) ;

elbow.setSpeed(pwmElbow) ;     Réglez la vitesse sur pwmElbow
shoulder.setSpeed(pwmShoulder) ;     Réglez la vitesse sur pwmElbow

elbowPID.SetMode(AUTOMATIC) ;
shoulderPID.SetMode(AUTOMATIC) ;

elbowPID.SetOutputLimits(-255,255) ;
shoulderPID.SetOutputLimits(-255,255) ;

move_to_start() ;  arriver à la position de départ
}

void loop() {}
line_y() ;
}

void move_to_start() {}
{}
get_angles (constantX, lowY) ;
drive_joints() ;  articulations en voiture jusqu'à ce que le réel est égal à attendre
}
tandis que (abs (theta1 - shoulderAngle) > 2 & & abs (theta2 - elbowAngle) > 2) ; en liberté sous caution lorsqu’elle est étroite
}

void line_y() {}
pour (y = lowY; y < highY; y +=.5) {/ / dessine la ligne droite vers le haut
get_angles(constantX,y) ;
drive_joints() ;
}
pour (y = highY; y > lowY; y-=.5) {/ / Tracez une ligne droite
get_angles (constantX, y) ;
drive_joints() ;
}
}

Compte tenu de theta1, theta2 résoudre pour cible (Px, Py) (cinématique avant)
void get_xy() {}
actualX = a1*cos(radians(theta1)) + a2*cos(radians(theta1+theta2)) ;
actualY = a1*sin(radians(theta1)) + a2*sin(radians(theta1+theta2)) ;
}

Étant donné la cible (Px, Py) à régler pour theta1, theta2 (cinématique inverse)
void get_angles (double Px, Py le double) {}
tout d’abord trouver theta2 où c2 = cos(theta2) et s2 = sin(theta2)
C2 = (pow(Px,2) + pow(Py,2) - pow(a1,2) - pow(a2,2))/(2*a1*a2) ; est btwn -1 et 1

Si (elbowup == false) {}
S2 = sqrt (1 - pow(c2,2)) ;  racine carrée peut être + ou -, et chacun correspond à une orientation différente
}
ElseIf (elbowup == true) {}
S2 = - sqrt (1 - pow(c2,2)) ;
}
theta2 = degrees(atan2(s2,c2)) ;  résout l’angle en degrés et places dans bon quadrant

maintenant trouver theta1 où c1 = cos(theta1) et s1 = sin(theta1)
Theta1 = degrés (atan2 (-a2 * s2 * Px + (a1 + a2 * c2) * Py, (a1 + a2 * c2) * Px + a2 * s2 * Py)) ;
}

void drive_joints() {}
lire les valeurs réelles de tous les pots
rawElbowAngle = analogRead(ElbowPin) ;
rawShoulderAngle = analogRead(ShoulderPin) ;

contraindre le bras robot d’ignorer hors des plages
elbowAngle = contraindre (rawElbowAngle, Elbow_pos, Elbow_neg) ;
shoulderAngle = contraindre (rawShoulderAngle, Shoulder_neg, Shoulder_pos) ;

carte maintenant les angles afin qu’ils correspondent correctement
elbowAngle = carte (elbowAngle, Elbow_neg, Elbow_pos,-110.0, 85,0) ;
shoulderAngle = carte (shoulderAngle, Shoulder_neg, Shoulder_pos, 5,0, 135.0) ;

elbowPID.Compute() ;
shoulderPID.Compute() ;

COUDE en voiture: CW est vers l’avant, CCW est descendante
pwmTemp = abs(pwmElbow) ;
elbow.setSpeed(pwmTemp) ;     Utilisez maintenant la nouvelle sortie de PID pour régler la vitesse

Si (pwmElbow < 0) {}
Elbow.Run(Forward) ;      mettre en marche
}
ElseIf (pwmElbow > 0) {}
Elbow.Run(Backward) ;      mettre en marche
}
d’autre elbow.run(RELEASE) ;      arrêté

LECTEUR épaule : CCW est vers l’avant, CW est descendante
pwmTemp = abs(pwmShoulder) ;
shoulder.setSpeed(pwmTemp) ;     régler la vitesse

Si (pwmShoulder < 0) {}
Shoulder.Run(Backward) ;      mettre en marche
}
ElseIf (pwmShoulder > 0) {}
Shoulder.Run(Forward) ;      mettre en marche
}
d’autre shoulder.run(RELEASE) ;      arrêté

get_xy() ;
série d’impression données ici si vous le souhaitez
Serial.Print(actualX) ;
Serial.Print (",") ;
Serial.println(actualY) ;
}

Articles Liés

Bras robotique avec des gants, téléphone Android et Arduino

Bras robotique avec des gants, téléphone Android et Arduino

Aujourd'hui, nous avons presque 2 techniques pour jouer avec le bras robotisé, soit par les boutons , par exemple comme le bouclier de jeu ou en utilisant des gants qui incluent les capteurs. Pourtant, aujourd'hui je vais vous montrer une nouvelle te
Contrôler un bras robotisé avec la Kinect de Microsoft !

Contrôler un bras robotisé avec la Kinect de Microsoft !

Les robots sont rapidement devenant plus intégré dans notre vie quotidienne. Ils nettoient nos planchers, faire notre café et sont même utilisés pour la téléprésence. Car ils deviennent si vitales pour la société, pourquoi ne pas donner nos compagnon
BRAS robotisé avec Interface PC USB (plus comment assembler)

BRAS robotisé avec Interface PC USB (plus comment assembler)

Voici une vidéo du bras robotisé avec Interface PC USB et comment assembler...
Bras robotisé avec moteur pas à pas bipolaire

Bras robotisé avec moteur pas à pas bipolaire

Vue d'ensemble :Ce projet vise à la création d'un bras robotique 3 points axe à l'aide de moteurs bipolaires, le bras étant contrôlée par une manette Playstation 2 vieux. En outre, nous avons implémenté un capteur relié à comme petit ventilateur. L'i
Bras robotisé avec convoyeur, capable de travail d’assemblage des pièces en cours

Bras robotisé avec convoyeur, capable de travail d’assemblage des pièces en cours

Bonjour à tous,Il s'agit d'un projet où j'ai conçu et construit une station de travail pour un six degrés du bras robotique de la liberté. C'est un exemple courant d'une ligne de production, que la pièce se déplace sur un tapis roulant ou de la palet
Construire le bras robotisé avec 3DP +Arduino(用3DP+Arduino製作機械手臂)

Construire le bras robotisé avec 3DP +Arduino(用3DP+Arduino製作機械手臂)

Il s'agit d'un axe 5 bras robotisés, je l'ai fait avec 3D Printer & Arduino.Vous pouvez suivre les étapes ci-dessous pour télécharger la ressource et en faire.Comment préparer le Stuff :1.MG995 servo x 52. SONY Joystick x13. Arduino x1.Étape 1: Voir
Bras robotique avec des gants, téléphone Android et Intel Galileo (Updated)

Bras robotique avec des gants, téléphone Android et Intel Galileo (Updated)

En fait, ce projet basé sur un autre projet que j'ai construire avant. Pourtant, au lieu de construire le bras du robot en utilisant Arduino, j'ai utilisé mon bras du robot ami 6DDL et Intel Galileo.Étape 1: composants 1-Intel Galileo Gen 22 - 1Sheel
Commandé un bras robotique avec des gestes de la main

Commandé un bras robotique avec des gestes de la main

Cette utilisation de bras robotisé pour Arduino et 345 ADXL accéléromètre.Étape 1: matériauxmatériaux :deux arduino (modèle est indifférent)adxl345 deux triaxis accéléromètrecinq 9gr servospanneaux en plexiglas (deux zones de papier A4)Accu LiPoEtape
Musique avec Servo moteur

Musique avec Servo moteur

Il s'agit d'un projet simple que j'ai fait à l'aide d'un servo moteur et arduino.Le servomoteur joue la marche impériale de star wars.Étape 1 : Pour ce projet, vous aurez besoin :1. Arduino UNO2. carte de prototypage3. servomoteur4. fils de raccordem
Bras robotisé avec Micro Servos

Bras robotisé avec Micro Servos

Il s'agit d'un projet simple qui vous pouvez faire par vous-même et ne nécessite pas chers pièces.Etape 1: Eléments requis1) Arduino Nano2) bouclier de Nano3) quatre potentiomètres4) quatre Servos5) bloc d'alimentation 12 volts6) planche7) fils de ra
Sculpture de Robot (partie 5 de 9): faire un bras robotisé avec tronçonneuse & Sawzall hache

Sculpture de Robot (partie 5 de 9): faire un bras robotisé avec tronçonneuse & Sawzall hache

J'ai construit la sculpture depuis plus de dix ans et j'ai vu l'évolution de la technologie d'usinage aller de fraisage CNC pour l'impression 3D objet bureau. Ces « machines à fabriquer » ont formé un espace physique entre mes mains et les matériaux,
Servo bras robotisé Arduino basé

Servo bras robotisé Arduino basé

Introduction---Bonjour à thé cette fois je partage mon nouveau projet du bras robotisé à l'aide de Conseil ArduinoUNO et Micro 180 degré servomoteurs, j'espère que vous trouverez intéressant.Je vais essayer de vous montrer comment vous pouvez contrôl
Assurez-vous câblé bras robotisé Edge « Sans fil » avec Arduino DIY + XBee

Assurez-vous câblé bras robotisé Edge « Sans fil » avec Arduino DIY + XBee

Mise à jour : ajouté schéma Top Layer PCB, PCB de couche de fond et les deux dessus, images de fond PCBQuand j'ai fini le « RevIO » - un Clone de l'Arduino, qui a la façon différente d'exposer son utilisation de goupilles. J'ai décidé d'aller plus lo
Construire un bras robotisé pour l’Olympiade de la Science

Construire un bras robotisé pour l’Olympiade de la Science

pour ceux qui ont du mal à trouvent les bonnes pièces, essayer de comprendre comment les mettre ensemble, ou des difficultés avec le code, c'est le bon endroit ! Cette instructable est une documentation complète d'entrée 2012 bras robotique de l'équi