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

Support rotatif basé sur un pas à pas contrôlé par dialogue en série

Composants et fournitures

Moteur pas à pas 28BYJ48
× 1
Pilote de moteur pas à pas X113647
× 1
Moyeu de montage universel en aluminium Pololu pour arbre de 5 mm
× 1
Arduino UNO
× 1
Base en bois 15cm x 15cm
× 1
Tampons en caoutchouc
× 4

Outils et machines nécessaires

scie à frettes
perceuse avec mèche de 6 mm pour le bois

À propos de ce projet

Histoire complète ici :http://www.cesarebrizio.it/Arduino/Turntable.html

Ce projet concerne une plate-forme rotative basée sur un moteur pas à pas.

Le modèle pas à pas est 28BYJ48, contrôlé via le pilote de moteur pas à pas X113647 (basé sur le circuit intégré ULN2003A) normalement acheté avec le moteur pas à pas.

La plate-forme peut pivoter dans les deux sens et est contrôlée via un moniteur série ou Tera Term.

Les commandes suivantes sont implémentées :

  • R =Tourner dans le sens des aiguilles d'une montre en continu (c'est-à-dire pendant plusieurs tours)
  • r =Rotation pour 360deg; dans le sens des aiguilles d'une montre
  • L =Tourner dans le sens inverse des aiguilles d'une montre en continu (c'est-à-dire pendant plusieurs tours)
  • l =Rotation pour 360deg; dans le sens inverse des aiguilles d'une montre
  • S =Arrêter de tourner

Du point de vue mécanique, le montage est très simple :juste un carré de contreplaqué ou de matériau similaire, d'environ 15cmx15cm, est nécessaire pour la table de base.

Le centre de la table se trouvera au croisement des diagonales - un trou de 6 mm sera percé exactement à cet endroit.

Le moyeu du stepper est décentré :en collant le moyeu dans le trou de 6 mm, le contour du stepper peut être dessiné avec un crayon.

Ensuite, un trou rond aussi serré que possible autour du contour du stepper sera découpé par une scie à chantourner, de sorte que les deux trous de fixation du stepper reposent fermement sur le bois de la table, afin qu'ils puissent être utilisés pour fixer le stepper au tableau.

Des patins en caoutchouc de 10 mm de haut sont nécessaires pour permettre le dégagement nécessaire (le stepper collera un peu sous la table).

Le plateau tournant sera fixé au stepper grâce à un moyeu de montage universel en aluminium Pololu pour arbre de 5 mm.

Sources d'informations :

Petit contrôle pas à pas :http://arduino-info.wikispaces.com/SmallSteppers

En fait, j'ai utilisé 4 broches différentes, mais l'illustration du circuit ci-dessous reproduit fidèlement les connexions. En regardant la photo ci-dessus (le fil rouge d'Arduino remplace "rose") :

#define motorPin1 4 // Bleu - 28BYJ-48 broche 1#define motorPin2 5 // Rose - 28BYJ-48 broche 2#define motorPin3 6 // Jaune - 28BYJ-48 broche 3#define motorPin4 7 / / Orange - 28BYJ-48 broche 4 // Rouge - 28BYJ-48 broche 5 (VCC) // Bleu - 28BYJ-48 broche GND #define STEPS_PER_TURN 2048 // nombre de pas en 360deg ; 

Code

  • Le croquis complet dans Arduino
Le croquis complet dans ArduinoArduino
Une description complète du logiciel avec des commentaires
/* Support rotatif basé sur un moteur pas à pas contrôlé par un dialogue en sérieCircuit et commentaires :voir http://www.cesarebrizio.it/Arduino/Turntable.htmlLe circuit est tel qu'illustré ici :https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.pngla seule exception étant que le croquis utilise les sorties numériques 4 - 5 - 6 - 7 tandis que le diagramme de Fritzing créé le 23 décembre 2017 modifié --- - par Cesare Brizio Cet exemple de code est dans le domaine public. Ce croquis contrôle une plate-forme rotative basée sur un moteur pas à pas. Le modèle pas à pas est 28BYJ48, contrôlé via le pilote de moteur pas à pas X113647 (basé sur le circuit intégré ULN2003A) normalement acheté avec le moteur pas à pas. La plate-forme peut tourner dans les deux sens et est contrôlée via Serial Monitor ou Tera Term. dans le sens des aiguilles d'une montreL =Tourner dans le sens inverse des aiguilles d'une montre en continu (ce qui signifie :pendant plusieurs tours)l =Tourner sur 360deg ; dans le sens inverse des aiguilles d'une montreS =Arrêter de tourner /*-----( Declare Constants and Pin Numbers )-----*//* NEVER PUT; APRÈS UN énoncé #define !!!! */// broches du moteur#define motorPin1 4 // Bleu - 28BYJ-48 broche 1#define motorPin2 5 // Rose - 28BYJ-48 broche 2#define motorPin3 6 // Jaune - 28BYJ-48 broche 3#define motorPin4 7 / / Orange - 28BYJ-48 broche 4 // Rouge - 28BYJ-48 broche 5 (VCC) // Bleu - 28BYJ-48 broche GND #define STEPS_PER_TURN 2048 // nombre de pas en 360deg;int motorSpeed ​​=500; // Les vitesses élevées (800 et plus) peuvent provoquer un comportement erratique dans 28BYJ-48int motorAccel =400 ; // Comme ci-dessus :mieux vaut éviter les accélérations extrêmessint myPos =0; // sera utilisé pour définir un point de départ pour 360deg; rotationsint LeftTurnUp =0; // Couple de drapeaux pour déterminer le sens de rotationint RightTurnDown =0; // Couple de drapeaux pour déterminer le sens de rotationint Continuous =0; // utilisé ci-dessous pour discriminer les commandes à rotation uniqueint entrantByte =0; // pour les données série entrantes/*-----( Objects for stepper control )-----*/// Configurez le stepper comme bipolaire à 4 fils sur les broches 4,5,6,7// REMARQUE :le la séquence 1-3-2-4 est requise pour le séquençage correct du pas à pas 28BYJ48AccelStepper (4, motorPin1, motorPin3, motorPin2, motorPin4) ; void setup(){ Serial.begin(9600); stepper.setMinPulseWidth(20); // Réglage conseillé pour éviter que les impulsions d'Arduino // soient trop rapides pour être décodées stepper.setMaxSpeed(motorSpeed); stepper.setSpeed(motorSpeed); stepper.setAcceleration(motorAccel); // les deux lignes suivantes réinitialisent "step zero" à la position actuelle stepper.setCurrentPosition(stepper.currentPosition()); stepper.runToPosition(); Serial.println("Commandes disponibles :"); Serial.println("R =rotation continue dans le sens horaire"); Serial.println("r =360deg; rotation dans le sens des aiguilles d'une montre"); Serial.println("L =rotation continue dans le sens inverse des aiguilles d'une montre"); Serial.println("l =360deg; rotation dans le sens inverse des aiguilles d'une montre"); Serial.println("S =stop rotation");}void loop(){ if (Serial.available()> 0) {comingByte =Serial.read(); { if (incomingByte =='R') { Serial.println("reçu «R» - activation de la rotation continue dans le sens des aiguilles d'une montre"); // Les deux lignes qui suivent permettent d'envoyer des commandes dans n'importe quel ordre :// avant l'exécution, un arrêt rapide est effectué stepper.stop(); // Arrêt le plus vite possible :définit la nouvelle cible stepper.runToPosition(); // Maintenant arrêté après l'arrêt rapide // Les deux drapeaux suivants déterminent le sens de rotation LeftTurnUp =1; RotationDroite =0 ; Continu =1 ; // utilisé ci-dessous pour discriminer les commandes de rotation simple stepper.setCurrentPosition(stepper.currentPosition()); // Définir l'étape 0 "ici" stepper.setSpeed(motorSpeed); // Les commandes précédentes ont réinitialisé la vitesse } if (incomingByte =='L') { Serial.println("reçu «L» - activation de la rotation continue dans le sens inverse des aiguilles d'une montre"); // Les deux lignes qui suivent permettent d'envoyer des commandes dans n'importe quel ordre :// avant l'exécution, un arrêt rapide est effectué stepper.stop(); // Arrêt le plus vite possible :définit la nouvelle cible stepper.runToPosition(); // Maintenant arrêté après l'arrêt rapide // Les deux indicateurs suivants déterminent le sens de rotation RightTurnDown =1; LeftTurnUp =0 ; Continu =1 ; // utilisé ci-dessous pour discriminer les commandes de rotation simple stepper.setCurrentPosition(stepper.currentPosition()); // Définir l'étape 0 "ici" stepper.setSpeed(motorSpeed); // Les commandes précédentes ont réinitialisé la vitesse } if (incomingByte =='r') { Serial.println("reçu «r» - activation d'une seule rotation dans le sens des aiguilles d'une montre"); // Les deux lignes qui suivent permettent d'envoyer des commandes dans n'importe quel ordre :// avant l'exécution, un arrêt rapide est effectué stepper.stop(); // Arrêt le plus vite possible :définit la nouvelle cible stepper.runToPosition(); // Maintenant arrêté après l'arrêt rapide // Les deux drapeaux suivants déterminent le sens de rotation LeftTurnUp =1; RotationDroite =0 ; Continu =0 ; // utilisé ci-dessous pour discriminer les commandes de rotation simple stepper.setCurrentPosition(stepper.currentPosition()); // Définir l'étape 0 "ici" stepper.setSpeed(motorSpeed); // Les commandes précédentes ont réinitialisé la vitesse // Comme je devrai avancer de 2047 pas, je stocke ma position // actuelle comme point de départ de la rotation myPos=stepper.currentPosition(); } if (incomingByte =='l') { Serial.println("reçu «l» - activation d'une seule rotation dans le sens inverse des aiguilles d'une montre"); // Les deux lignes qui suivent permettent d'envoyer des commandes dans n'importe quel ordre :// avant l'exécution, un arrêt rapide est effectué stepper.stop(); // Arrêt le plus vite possible :définit la nouvelle cible stepper.runToPosition(); // Maintenant arrêté après l'arrêt rapide // Les deux indicateurs suivants déterminent le sens de rotation RightTurnDown =1; LeftTurnUp =0 ; Continu =0 ; // utilisé ci-dessous pour discriminer les commandes de rotation simple stepper.setCurrentPosition(stepper.currentPosition()); // Définir l'étape 0 "ici" stepper.setSpeed(motorSpeed); // Les commandes précédentes ont réinitialisé la vitesse // Comme je devrai reculer de 2047 pas, je stocke ma position // actuelle comme point de départ de la rotation myPos=stepper.currentPosition(); } if (incomingByte =='S') { Serial.println("reçu «S» - arrêt de la rotation"); // Réinitialise les drapeaux qui déterminent le sens de rotation LeftTurnUp =0; RotationDroite =0 ; stepper.stop(); // Arrêt le plus vite possible :définit la nouvelle cible stepper.runToPosition(); // Maintenant arrêté après l'arrêt rapide } } } if (Continuous ==1) // rotation continue { if (LeftTurnUp ==1) // virage à gauche { stepper.moveTo (10000); //déplacer de nombreux pas - plus que nécessaire mécaniquement } if (RightTurnDown ==1) //tourner à droite { stepper.moveTo(-10000); //déplacer de nombreuses étapes - plus que nécessaire mécaniquement } stepper.run(); } if (Continuous ==0) // rotation continue { if (LeftTurnUp ==1) // virage à gauche { stepper.moveTo(myPos+STEPS_PER_TURN); // 1 tour =2048 pas } if (RightTurnDown ==1) // tour à droite { stepper.moveTo(myPos-STEPS_PER_TURN); // 1 tour =2048 pas } } stepper.run();} 

Schémas

Le circuit complet made in Fritzing

Processus de fabrication

  1. Moteurs pas à pas
  2. Les pilotes intégrés facilitent la conception des moteurs pas à pas
  3. Ventilateur à température contrôlée
  4. Prototype Raspoulette
  5. Tourelle de sentinelle Nerf autonome
  6. Bibliothèque de moteurs pas à pas bipolaires
  7. Jouet contrôlé par Android utilisant un bouclier de moteur Raspberry
  8. Qu'est-ce qu'un moteur linéaire ?
  9. Qu'est-ce qu'un servomoteur ?