Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Stepper-basierter rotierender Ständer, der durch seriellen Dialog gesteuert wird

Komponenten und Verbrauchsmaterialien

28BYJ48 Schrittmotor
× 1
X113647 Schrittmotortreiber
× 1
Pololu Universal Aluminium Montagenabe für 5mm Welle
× 1
Arduino UNO
× 1
Holzsockel 15cm x 15cm
× 1
Gummipads
× 4

Notwendige Werkzeuge und Maschinen

Bundsäge
Bohrer mit 6-mm-Bohrer für Holz

Über dieses Projekt

Die ganze Geschichte hier:http://www.cesarebrizio.it/Arduino/Turntable.html

Bei diesem Projekt handelt es sich um eine rotierende Plattform basierend auf einem Schrittmotor.

Das Stepper-Modell ist 28BYJ48, gesteuert über den Schrittmotortreiber X113647 (basierend auf dem ULN2003A-IC), der normalerweise mit dem Stepper gekauft wird.

Die Plattform kann sich in beide Richtungen drehen und wird über einen seriellen Monitor oder Tera Term gesteuert.

Die folgenden Befehle sind implementiert:

  • R =Kontinuierlich im Uhrzeigersinn drehen (bedeutet:mehrere Umdrehungen)
  • r =Um 360 Grad drehen; im Uhrzeigersinn
  • L =Kontinuierlich gegen den Uhrzeigersinn drehen (bedeutet:mehrere Umdrehungen)
  • l =Um 360 Grad drehen; gegen den Uhrzeigersinn
  • S =Stoppen Sie das Drehen

Aus mechanischer Sicht ist die Montage denkbar einfach:Für den Untertisch wird lediglich ein Vierkant aus Sperrholz oder ähnlichem Material von ca. 15cmx15cm benötigt.

Die Tischmitte befindet sich an der Kreuzung der Diagonalen - genau an dieser Stelle wird ein 6mm Loch gebohrt.

Die Steppernabe ist außermittig:Durch das Einstecken der Nabe in das 6-mm-Loch kann die Kontur des Steppers mit einem Bleistift gezeichnet werden.

Anschließend wird mit einer Laubsäge ein möglichst enges rundes Loch um die Stepperkontur gesägt, damit die beiden Befestigungslöcher des Steppers fest auf dem Holz des Tisches sitzen und zur Befestigung des Steppers am Tabelle.

10mm hohe Gummipads werden benötigt um den nötigen Spielraum zu lassen (der Stepper bleibt etwas unter dem Tisch kleben).

Die Drehplatte wird dank einer Pololu Universal Aluminium Montagenabe für 5mm Welle am Stepper befestigt.

Informationsquellen:

Kleine Stepper-Steuerung:http://arduino-info.wikispaces.com/SmallSteppers

Eigentlich habe ich 4 verschiedene Pins verwendet, aber die Schaltungsabbildung unten gibt die Verbindungen genau wieder. Betrachten Sie das Foto oben (Roter Draht von Arduino ersetzt "Pink"):

#define motorPin1 4 // Blau - 28BYJ-48 Pin 1#define motorPin2 5 // Pink - 28BYJ-48 Pin 2#define motorPin3 6 // Gelb - 28BYJ-48 Pin 3#define motorPin4 7 / / Orange - 28BYJ-48 Pin 4 // Rot - 28BYJ-48 Pin 5 (VCC) // Blau - 28BYJ-48 Pin GND #define STEPS_PER_TURN 2048 // Anzahl der Schritte in 360 Grad; 

Code

  • Die vollständige Skizze in Arduino
Die vollständige Skizze in ArduinoArduino
Eine vollständige Beschreibung der Software mit Kommentaren
/* Stepper-basierter rotierender Ständer, gesteuert durch serielle DialogeSchaltung und Kommentare:Siehe http://www.cesarebrizio.it/Arduino/Turntable.htmlSchaltung ist wie hier abgebildet:https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.pngDie einzige Ausnahme besteht darin, dass die Skizze die digitalen Ausgänge 4 - 5 - 6 - 7 verwendet, während das Fritzing-Diagramm vom 23. Dezember 2017 geändert wurde --- - von Cesare Brizio Dieser Beispielcode ist gemeinfrei. Diese Skizze steuert eine rotierende Plattform basierend auf einem Schrittmotor. Das Schrittmotormodell ist 28BYJ48, gesteuert über den X113647 Schrittmotortreiber (basierend auf dem ULN2003A IC), der normalerweise mit dem Schrittmotor gekauft wird. Die Plattform kann sich in beide Richtungen drehen und wird über Serial Monitor oder Tera Term gesteuert. Folgende Befehle sind implementiert:R =Rotate Clockwise Continuous (bedeutet:für mehrere Umdrehungen)r =Rotate for 360deg; im UhrzeigersinnL =Kontinuierlich gegen den Uhrzeigersinn drehen (bedeutet:für mehrere Umdrehungen)l =Für 360 Grad drehen; gegen den UhrzeigersinnS =Stoppen Sie das Drehen Informationsquellen:Small Stepper Control:http://arduino-info.wikispaces.com/SmallSteppers*//*-----( Benötigte Bibliotheken importieren)-----*/#include /*-----( Konstanten und Pin-Nummern deklarieren)-----*//* NEVER PUT; NACH EINER #define-Anweisung!!!! */// Motorpins#define motorPin1 4 // Blau - 28BYJ-48 Pin 1#define motorPin2 5 // Pink - 28BYJ-48 Pin 2#define motorPin3 6 // Gelb - 28BYJ-48 Pin 3#define motorPin4 7 / / Orange - 28BYJ-48 Pin 4 // Rot - 28BYJ-48 Pin 5 (VCC) // Blau - 28BYJ-48 Pin GND #define STEPS_PER_TURN 2048 // Anzahl der Schritte in 360deg;int motorSpeed ​​=500; // Hohe Geschwindigkeiten (800 und höher) können zu fehlerhaftem Verhalten in 28BYJ-48int motorAccel =400 führen; // Wie oben:extreme Beschleunigungen besser vermeidensint myPos =0; // wird verwendet, um einen Startpunkt für 360deg zu definieren; Rotationsint LeftTurnUp =0; // Paar Flags zur Bestimmung der Drehrichtungint RightTurnDown =0; // Paar Flags zur Bestimmung der Drehrichtungint Continuous =0; // unten verwendet, um einzelne Rotationsbefehle zu unterscheidenint eingehendeByte =0; // für eingehende serielle Daten/*-----(Objekte für die Steppersteuerung)-----*/// Stellen Sie den Stepper als 4-Draht-Bipolar auf Pin 4,5,6,7// HINWEIS:Die Sequenz 1-3-2-4 ist für die richtige Sequenzierung von 28BYJ48AccelStepper stepper (4,motorPin1,motorPin3,motorPin2,motorPin4) erforderlich; Void setup () {Serial.begin (9600); stepper.setMinPulseWidth(20); // Empfehlenswerte Einstellung, um zu vermeiden, dass Impulse von Arduino // zu schnell dekodiert werden können stepper.setMaxSpeed(motorSpeed); stepper.setSpeed ​​(motorSpeed); stepper.setAcceleration(motorAccel); // die folgenden zwei Zeilen setzen "step zero" auf die aktuelle Position zurück stepper.setCurrentPosition(stepper.currentPosition()); stepper.runToPosition(); Serial.println ( "Verfügbare Befehle:"); Serial.println ("R =kontinuierliche Drehung im Uhrzeigersinn"); Serial.println("r =360deg; Drehung im Uhrzeigersinn"); Serial.println ("L =kontinuierliche Drehung gegen den Uhrzeigersinn"); Serial.println("l =360deg; Drehung gegen den Uhrzeigersinn"); Serial.println ("S =Rotation stoppen");}void loop () { if (Serial.available ()> 0) {incomingByte =Serial.read (); { if (incomingByte =='R') { Serial.println("Received «R» - Aktivierung der kontinuierlichen Drehung im Uhrzeigersinn"); // Die beiden folgenden Zeilen erlauben das Senden von Befehlen in beliebiger Reihenfolge:// vor der Ausführung wird ein Quickstop ausgeführt stepper.stop(); // So schnell wie möglich stoppen:setzt neues Ziel stepper.runToPosition(); // Jetzt nach Quickstop gestoppt // Die folgenden Flags bestimmen die Drehrichtung LeftTurnUp =1; RightTurnDown =0; Kontinuierlich =1; // unten verwendet, um einzelne Rotationsbefehle zu unterscheiden stepper.setCurrentPosition (stepper.currentPosition()); // Schritt 0 "hier" setzen stepper.setSpeed(motorSpeed); // Vorherige Befehle haben die Geschwindigkeit zurückgesetzt} if (incomingByte =='L') { Serial.println("Received «L» - Aktivierung der kontinuierlichen Drehung gegen den Uhrzeigersinn"); // Die beiden folgenden Zeilen erlauben das Senden von Befehlen in beliebiger Reihenfolge:// vor der Ausführung wird ein Quickstop ausgeführt stepper.stop(); // So schnell wie möglich stoppen:setzt neues Ziel stepper.runToPosition(); // Jetzt nach Quickstop gestoppt // Die folgenden Flags bestimmen die Drehrichtung RightTurnDown =1; LinksTurnUp =0; Kontinuierlich =1; // unten verwendet, um einzelne Rotationsbefehle zu unterscheiden stepper.setCurrentPosition (stepper.currentPosition()); // Schritt 0 "hier" setzen stepper.setSpeed(motorSpeed); // Vorherige Befehle haben die Geschwindigkeit zurückgesetzt} if (incomingByte =='r') { Serial.println("received «r» - Aktivierung einer einzelnen Drehung im Uhrzeigersinn"); // Die beiden folgenden Zeilen erlauben das Senden von Befehlen in beliebiger Reihenfolge:// vor der Ausführung wird ein Quickstop ausgeführt stepper.stop(); // So schnell wie möglich stoppen:setzt neues Ziel stepper.runToPosition(); // Jetzt nach Quickstop gestoppt // Die folgenden Flags bestimmen die Drehrichtung LeftTurnUp =1; RightTurnDown =0; Kontinuierlich =0; // unten verwendet, um einzelne Rotationsbefehle zu unterscheiden stepper.setCurrentPosition (stepper.currentPosition()); // Schritt 0 "hier" setzen stepper.setSpeed(motorSpeed); // Vorherige Befehle haben die Geschwindigkeit zurückgesetzt // Da ich 2047 Schritte vorwärts machen muss, speichere ich meine aktuelle // Position als Startpunkt der Drehung myPos=stepper.currentPosition(); } if (incomingByte =='l') { Serial.println("Empfang «l» - Aktivierung einer einzelnen Drehung gegen den Uhrzeigersinn"); // Die beiden folgenden Zeilen erlauben das Senden von Befehlen in beliebiger Reihenfolge:// vor der Ausführung wird ein Quickstop ausgeführt stepper.stop(); // So schnell wie möglich stoppen:setzt neues Ziel stepper.runToPosition(); // Jetzt nach Quickstop gestoppt // Die folgenden Flags bestimmen die Drehrichtung RightTurnDown =1; LinksTurnUp =0; Kontinuierlich =0; // unten verwendet, um einzelne Rotationsbefehle zu unterscheiden stepper.setCurrentPosition (stepper.currentPosition()); // Schritt 0 "hier" setzen stepper.setSpeed(motorSpeed); // Vorherige Befehle haben die Geschwindigkeit zurückgesetzt // Da ich 2047 Schritte rückwärts gehen muss, speichere ich meine aktuelle // Position als Startpunkt der Drehung myPos=stepper.currentPosition(); } if (incomingByte =='S') { Serial.println ( "Empfang «S» - Rotation stoppen"); // Rücksetzen der Flags, die die Drehrichtung bestimmen LeftTurnUp =0; RightTurnDown =0; stepper.stop(); // So schnell wie möglich stoppen:setzt neues Ziel stepper.runToPosition(); // Jetzt nach Quickstop gestoppt } } } if (Continuous ==1) // kontinuierliche Rotation { if (LeftTurnUp ==1) // Linksdrehung { stepper.moveTo (10000); // viele Schritte bewegen - mehr als mechanisch erforderlich} if (RightTurnDown ==1) // Rechtsdrehung { stepper.moveTo (-10000); // viele Schritte bewegen - mehr als mechanisch erforderlich} stepper.run(); } if (Continuous ==0) // kontinuierliche Rotation { if (LeftTurnUp ==1) // Linksdrehung { stepper.moveTo(myPos+STEPS_PER_TURN); // 1 Umdrehung =2048 Schritt} if (RightTurnDown ==1) // Rechtsdrehung { stepper.moveTo (myPos-STEPS_PER_TURN); // 1 Umdrehung =2048 Schritt } } stepper.run();} 

Schaltpläne

Die komplette Runde aus Fritzing

Herstellungsprozess

  1. Schrittmotoren
  2. Integrierte Treiber erleichtern das Design von Schrittmotoren
  3. Temperaturgesteuerter Lüfter
  4. Raspoulette-Prototyp
  5. Autonomer Nerf-Wachturm
  6. Bipolare Schrittmotorbibliothek
  7. Android-gesteuertes Spielzeug mit Raspberry Motor Shield
  8. Swiper - Auto Tinder/Bumble Swiper
  9. Was ist ein Linearmotor?
  10. Was ist ein Servomotor?