Hallo ich wollte mal fragen was für ein Servo-Motor man denn braucht wenn dieser einfach seine Runden Dreht ohne zurück zu Drehen. Also quasi einmal 360 Grad oder 2x 360 Grad.
Ich habe einen Micro Servo 9g SG90 und bei diesem geht das ja nicht.
Ich würde gerne eine "Spindel" immer drehen für Süßsigkeiten.
Der Kollege im Video hat auf dem ersten Blick einen SG90 Servo-Motor. Aber bei Ihm dreht dieser einfach immer weiter ohne zurück auf die Anfangsposition zu drehen.
Ohne Süßigkeiten (Spindel sieht man und den Servo)
Es gibt Servos die auf Dauerdrehen umgebaut sind.
"360° Servo" wird zwar oft verwendet ist aber irreführend.
Der Vorteil der Dauerlaufservo ist, daß der Treiber im Servo integriert ist und daß der Motor ein Getriebe hat und darum relativ langsam dreht.
Ich vermute aber, dass der TO für den Lauf der Schnecke immer eine gleichbleibende Umdrehung/Bewegung braucht. Da ist dann ein Stepper oder evtl. modifizierter Servo besser geeignet.
Welcher Unterschied ist zwischen einem Getriebe(gleichstrom)motor und einem modifizierten Servo im Bezog auf mechanische Eigenschaften? Ok, der Servo hat einen eingebauten Treiber, aber lassen wir das mal außen vor.
Nun habe ich noch eine Frage.
Kann jemand mir jemand den Code Anpassen für ein Stepper Motor?
Wenn man die Hand in den Sensor hält soll dieser einmal 360Grad drehen.
Hier wäre der Code für den Servo-Motor
#include <Servo.h>
Servo servo;
int pos;
int Signal = 8;
int servopin = 9;
void setup() {
pinMode(Signal, INPUT);
servo.attach(servopin);
servo.write(0); //close cap on power on
delay(1000);
servo.detach();
}
void loop() {
int buttonState = digitalRead(Signal);
delay(1);
if (buttonState == 0)
{
servo.attach(servopin);
delay(1);
servo.write(185);
delay(2000); //wait 5 seconds
servo.write(0);
delay(1000);
servo.detach();
}
}
Nein, können wir nicht. Oder besser gesagt wir können es für einen Schrittmotor machen aber hast Du dann zufälligerweise den gleichen Motor/Treiber??
Dazu müssen wir wissen Welchen Schrittmotor Du verwenden willst und welchen Treiber mit welchen Einstellungen Du nutzen willst.
HIer ist ein Beispiel für einen 28BYJ-48 Stepper. Der Pinmode vom "Signalpin" ist "INPUT_PULLUP". Er ist also "aktiv", wenn er auf LOW gezogen wird. Wenn das Dein Infrarot Dingens anders macht, musst Du das anpassen. Die Pinnummer natürlich auch.
Codebeispiel
#include <MobaTools.h>
// motor parameters
constexpr unsigned STEPS_PER_ROTATION {2048}; // steps for a full turn
constexpr byte STEPPER_PINS[4] {4, 5, 6, 7};
constexpr byte SIGNAL_PIN {8};
MoToStepper Step1(STEPS_PER_ROTATION, FULLSTEP);
void setup() {
pinMode(SIGNAL_PIN, INPUT_PULLUP);
Step1.setSpeed(500);
}
void loop() {
if (LOW == digitalRead(SIGNAL_PIN)) {
Step1.attach(STEPPER_PINS[0], STEPPER_PINS[1], STEPPER_PINS[2], STEPPER_PINS[3]);
Step1.doSteps(STEPS_PER_ROTATION); // 360° rotation
while (Step1.moving()) { ; }
Step1.detach();
}
}
Jedes mal, wenn der Pegel an Pin 8 auf LOW geht, wird eine 360° Drehung gemacht.
Ja mega Kai. Vielen lieben Dank genau das habe ich gesucht
Kannst du mir noch eins sagen, wenn ich den Stepper gegen den Uhrzeiger laufen lassen möchte, was ich in dem Code anpassen muss damit er 360 Grad gegen den Uhrzeiger läuft.
Wenn sonst am Code nichts geändert werden soll .... dreh die PIN Reihenfolge um: Step1.attach(STEPPER_PINS[3], STEPPER_PINS[2], STEPPER_PINS[1], STEPPER_PINS[0]);
Oder den Datentyp von STEPS_PER_ROTATION in long / int ändern. Dann kann dieser auch als negativer Wert übergeben werden:
#include <MobaTools.h>
// motor and clock parameters
constexpr long STEPS_PER_ROTATION {2048}; // steps for a full turn of minute rotor
constexpr byte STEPPER_PINS[4] {4, 5, 6, 7};
constexpr byte SIGNAL_PIN {8};
MoToStepper Step1(STEPS_PER_ROTATION, FULLSTEP);
void setup() {
pinMode(SIGNAL_PIN, INPUT_PULLUP);
Step1.setSpeed(500);
}
void loop() {
if (LOW == digitalRead(SIGNAL_PIN)) {
Step1.attach(STEPPER_PINS[0], STEPPER_PINS[1], STEPPER_PINS[2], STEPPER_PINS[3]);
Step1.doSteps(-STEPS_PER_ROTATION); // 360° rotation
while (Step1.moving()) { ; }
Step1.detach();
}
}