Étape 6: En cours d’exécution les steppers
Le stepper 28YBJ-48 est un stepper 4-bobine avec un ratio d’endettement élevé (cité comme 64:1). Il y a quelques tutoriels utiles ici :
http://42bots.com/tutorials/28byj-48-Stepper-motor...
https://Arduino-info.wikispaces.com/SmallSteppers
Et un grand, général stepper Instructable ici :
Ils se connectent à l’Arduino via une carte de conducteur ULN2003 (le câble de moteur pas à pas se branche dans un sens seulement, donc ne vous inquiétez pas à obtenir le câblage incorrect). Vous pouvez exécuter ces moteurs avec la bibliothèque intégrée de Stepper dans l’Arduino. Ceci active chaque bobine en séquence, en parcourant le rotor 4 positions pour faire une rotation. C’est vraiment simple, mais limite la vitesse du stepper. Si les bobines passer trop rapidement, le rotor ne peut pas garder vers le haut et le moteur se bloque (vous entendrez un bruit de ronflement avec quelques vibrations). Nous avons utilisé la bibliothèque AccelStepper , qui permet un contrôle plus sophistiqué du moteur. Il vous permet d’utiliser une séquence de 8 étapes pour déplacer le rotor en demi-tons, rend plus facile pour elle de garder et par conséquent atteindre des vitesses plus rapides. Il vous permet également d’utiliser l’accélération, ce qui augmente également la vitesse maximale. Essayer d’obtenir le rotor pour passer immédiatement à la vitesse finale reste fera le rotor à caler. Accélère jusqu'à la vitesse finale permet à la dynamique du rotor s’accumuler, vous permettant de rejoindre plus rapidement les vitesses finales. La bibliothèque de AccelStepper prend un peu de s’y habituer, mais il nous a permis de courir les moteurs nettement plus vite. Vous devrez télécharger la bibliothèque à partir du lien donné et installez-le.
Mettre en place
include <AccelStepper.h> // Motor pin definitions #define motorPin1 38 // IN1 on the ULN2003 driver #define motorPin2 40 // IN2 on the ULN2003 driver #define motorPin3 42 // IN3 on the ULN2003 driver#define motorPin4 44 // IN4 on the ULN2003 driverdefine motorPin5 39 // IN1 on the ULN2003 driver#define motorPin6 41 // IN2 on the ULN2003 driver#define motorPin7 43 // IN3 on the ULN2003 driver#define motorPin8 45 // IN4 on the ULN2003 driver // Define Parameters for Steppers #define HALFSTEP 8#define STEPS_PER_MOTOR_REVOLUTION 32#define STEPS_PER_OUTPUT_REVOLUTION 32*64 // =2048AccelStepper stepperX(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);AccelStepper stepperY(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);Stepper stepper_X(STEPS_PER_MOTOR_REVOLUTION, 38, 42, 40, 44);Stepper stepper_Y(STEPS_PER_MOTOR_REVOLUTION, 39, 43, 41, 45); int Position1 = 0;int Position2 = 0;
Les ports de sortie sur l’Arduino qui se connectent avec les conseils du moteur doivent être définis. Chaque moteur pas à pas est connecté à une carte de conducteur qui module la sortie de l’Arduino et la transforme en la bonne séquence d’impulsions à envoyer à électro-aimants du stepper.
Le mécanisme de 8 étapes est défini comme HALFSTEP en tant que paramètre pour contrôler les moteurs pas à pas. Ceci fournit les informations à encoder pour la rotation des moteurs pas à pas en utilisant le mécanisme de 8 étapes. L’angle de l’étape de la séquence de 8 étapes (combien une seule étape tourne le pignon denté) est 5.625˚ (64 pas par tour). Le rapport de démultiplication est 1/64, sont donc de 64 x 64 (4096) pas par tour de l’arbre de sortie du moteur. Les positions des moteurs pas à pas sont également définies comme 0 à leur position de départ. Position1 est la variable de la position de stepper1 ; Position2 est la variable de la position du moteur pas à pas 2. PositionX définit la colonne sur la microplaque que le capteur est supérieure à (1-12), qui est contrôlée par stepperX ; PositionY définit la ligne sur la microplaque que le capteur est supérieur (A-H), qui est contrôlée par stepperY. En position de départ, les deux variables de position sont 0, ce qui équivaut à la sonde se trouvant au-dessus de puits A1
// Set stepper speed and acceleration void setup(){stepper1.setMaxSpeed(3000.0);stepper1.setAcceleration(500.0);stepper2.setMaxSpeed(3000.0);stepper2.setAcceleration(500.0);}
Le programme d’installation est enfermé dans des accolades: {...}. La vitesse et l’accélération des moteurs est défini pour les deux moteurs. Ces variables ont été choisis pour être bien en deçà des capacités des moteurs pas à pas pour prévenir le décrochage, mais suffisamment élevé pour que le programme est trop en longueur. La vitesse, 3000 (mesures par seconde), équivaut à 44 t/mn ; l’accélération, 500, équivaut à 7,3 t/mn ^ 2
Déplacement de la table
delay (2000); //Take reading of A1
Avant de déplacer les moteurs il y a un retard de 2000ms (2 secondes) pour permettre le premier échantillon (A1) à analyser
stepper1.runToNewPosition(stepper1.currentPosition() +52406);Position1 = Position1 +1; delay(5000); // Stepper1 with delays between each turn
Moteurs pas à pas 1 est pivotés 52406 étapes, qui équivaut à déplacer la microplaque de la 9mm entre deux échantillons adjacents. Une fois que le stepper a déplacé vers le puits adjacent, la variable PositionX est augmentée d’une unité à définir que la colonne que le capteur se trouve plus haut sur la microplaque a augmenté d’un (par exemple, de puits de A1 à A2). Le stepper fait une pause pour permettre le puits à analyser.
if (Position1 == 11){ //after 11 turns of stepper 1 (at A12)stepper2.runToNewPosition(stepper2.currentPosition() +52406); Position2 = Position2 +1; delay(2000); stepper1.runToNewPosition(0); //return motor 1 to A1 Position1 = 0; delay(2000);}
C’est pourquoi la microplaque sera déplacée pour puits adjacents est inférieure à la sonde, la pause et la répétition jusqu'à ce que le capteur soit plus haut de la colonne 12 (PositionX = 11). À ce stade, la clause de la fonction if() commandes que stepperY déplace la microplaque vers le bas, donc le capteur est au-dessus de la ligne suivante (à partir de la ligne A ligne B etc.), il y a une pause et par la suite la microplaque est retournée arrière afin que le capteur se trouve au-dessus de la première colonne.
if (Position2 == 8){ //after 7 turns of motor 2 (row H)stepper1.runToNewPosition(0); //return motor 1 to H1 Position1 = 0; delay(2000); stepper2.runToNewPosition(0); //return to A1 while(1){}}}
Les deuxième fonction if() clause les commandes les deux moteurs pour revenir à leurs positions d’origine (avec échantillon A1 au-dessous du capteur) une fois la première clause if () a été répété 8 fois. À ce stade, chaque cupule sur la microplaque a été analysée afin que cette clause ne réinitialise la position de la microplaque pour la prochaine utilisation. Les while(1) de code {} commandes cette clause seulement être répété une fois. Cela signifie qu’une fois la microplaque a été scannée et retournée au puits A1 l’arrêt de la boucle et la microplaque reste stationnaire.