Welche Hardware für mein Projekt

Hallo liebe Community,

ich bin absoluter Neuling auf dem Gebiet Microcontroller und Co. Hauptsächlich geht es mir um folgendes Projekt. Ich möchte eine Leuchte von A nach B drehen, innerhalb eines Drehwinkels von 30°. Dabei soll die Drehgeschwindigkeit im Verlauf abnehmen.

Ich bin bereits im Besitz eines Arduino UNO + MotorShield + StepperMotor Makeblock 42BYG

Ein einfache Drehung mit dem Motor konnte ich bereits umsetzen, nun bin ich verzweifelt auf der Suche nach einer Hilfestellung wie man die Geschwindigkeits abnahme innerhalb der Bewegung bewerkstelligt.
Bzw. ich bin auch schon am zweifeln ob der Schrittmotor hier überhaupt das richtige Mittel ist

Über eure Hilfe wäre ich sehr dankbar!

LG

Das tut schon mit einem Schrittmotor.
Servo wäre eventuell ein Ticken einfacher gewesen.
Aber das ist unerheblich, wenn du mit beidem noch keine Erfahrung hast.
Wie immer, wenn jemand eine Frage hat:

Bitte zeige uns deinen Fehlversuch als Code,
setzte ihn im Editorfenster mit diesem </> Symbol
ein.

Stefan

Vielen Dank Stefan. Ok schonmal gut zu Wissen, dass es sich mit einem Schrittmotor umsetzen lässt.

Das ist mein Code um den Stepper in einer konstanten Geschwindigkeit von der einen in die andere Richtung schwenken zu lassen

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include <Servo.h> 

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_StepperMotor *myStepper = AFMS.getStepper(200, 2);

int i;
void setup() {
AFMS.begin();
  myStepper->setSpeed(50);   
}

void loop() {
for (i=0; i<255; i++) {
myStepper->step(2, FORWARD, INTERLEAVE);
delay(3);
}
for (i=255; i!=0; i--) {
myStepper->step(2, BACKWARD, INTERLEAVE);
delay(3);
}
}

Um jetzt eine lineare Abnahme der Geschwindigkeit hinzubekommen bin ich zu diesem Code gelangt,
funktioniert nur leider nicht.

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include <Servo.h> 

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_StepperMotor *myStepper = AFMS.getStepper(200, 2);

int i;
void setup() {
AFMS.begin();
 myStepper->setSpeed(i*6);   
}

void loop() {
for (i=17; i!=1; i--) {
myStepper->setSpeed(i*6);  
myStepper->step(1, FORWARD, INTERLEAVE);
delay (3);

}
 for (i=1; i<18; i++) {
 myStepper->setSpeed(i*6);  
 myStepper->step(1, BACKWARD, INTERLEAVE);
 delay(3);

}
}

Vielleicht habt ihr auch ein paar gute Video Tutorials zu Steppern die ihr mir empfehlen könnt, bisher habe ich nur welche gefunden, die eine simple Programmierung, sowie in meinem ersten Code Beispiel erklären.

Viele Grüße

hi,

hab sowas noch nie gemacht, aber kenne inzwischen die begriffe.

google mal nach "arduino rampe", eventuell "arduino rampe stepper".

gruß stefan

Doch, hatten wir doch noch vor ein paar Tagen ?
Das war doch der Kniff mit dem map(-200,200, xxx, xxx)
Wo der Poti gleichzeitig für Richtung und Geschwindigkeit
zuständig war !?

Ich schau mal nach ob ichs finde.

Stefan

HA !
Gefunden...
Stepper Poti Richtung usw...

evtl ist da ja was bei ( Richtung Geschwindigkeit - bloß umgekehrt )

Dabei soll die Drehgeschwindigkeit im Verlauf abnehmen.

Bringt die accelstepper Lib nicht sowas mit? Bin nicht sicher, aber schauen schadet nicht.

Hey! Super danke für die ganzen Hinweise, ich probiere mal mein Glück und poste meinen Code sobald ich erfolgreich war!

MarcelMarcel:
...und poste meinen Code sobald ich erfolgreich war!

Versprochen? :smiley:

Versprochen!

hey,

so die Accelstepper Lib war ein klasse Hinweis. Ich hab nun einen der Beispiel Sketches etwas abgeändert und kommen meinem Ziel schon recht nahe.

#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"


Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

Adafruit_StepperMotor *myStepper1 = AFMS.getStepper(200, 2);

void forwardstep1() {  
  myStepper1->onestep(FORWARD, DOUBLE);
}
void backwardstep1() {  
  myStepper1->onestep(BACKWARD, DOUBLE);
}

AccelStepper Astepper1(forwardstep1, backwardstep1); 
void setup()
{  
   Serial.begin(9600);          
   Serial.println("Stepper test!");
  
  AFMS.begin();  

  Astepper1.setSpeed(1000);  
  Astepper1.setMaxSpeed(1000);
  Astepper1.setAcceleration(100);
  Astepper1.moveTo(100);
}



void loop()
{
    
    if (Astepper1.distanceToGo() == 0)
    Astepper1.moveTo(-Astepper1.currentPosition());
     

    Astepper1.run();
}