Schrittmotor, servo motor und Ultraschallsensor

Hallo Leute,
ich habe ein Schulprojekt am Laufen, in dem ich ein Haus bauen soll mit einem microservo, einem Stepmotor und einem Ultraschallsensor. Der Ultraschallsensor steht vor dem Haus und sobald ich meine Hand hinhalte soll die Tür sich öffnen (Microservo) und der Tisch soll anfangen sich zu drehen (Stepmotor) (in eine Richtung und das ohne stopp). Der Tisch soll sich 1minute lang drehen und dann soll es aufhören sich zu drehen und die Tür schließt sich wieder. Nun zu meiner Frage. Der Ultraschallsensor und der microservo funktionieren, aber sobald ich den Stepmotor in mein Code mit reinschreibe funktionier mein microservo nicht mehr... Vergesse ich da etwas? Ich danke jetzt schon für eure Antworten.

#include <Servo.h>
#include <Stepper.h> 
int SPU = 2048; 
Stepper Motor(SPU, 3,5,4,6); 
Servo myservo;  
int pos = 20;  
const int trigPin = 9;
const int echoPin = 10 ;
const int led = 13;
long duration;
float distance;
 void setup() 
{
  myservo.attach(11);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT); 
  pinMode(led, OUTPUT);
  myservo.write(pos); 
  Motor.setSpeed(5); 
}

void loop() 
{ Motor.step(2048);
  //Serial.begin(9600);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = 0.034*(duration/2);
  //Serial.println(distance);
  if (distance < 27)
  {
    digitalWrite(led,HIGH);
    myservo.write(pos+160);
    delay(6000);
  }
  else 
  {
    digitalWrite(led,LOW);
      myservo.write(pos);
  }
  delay(300);  
}



BEARBEITEN - Für Forum kopieren
Anstelle deines Bildes einfügen und Dein Problem beschreiben.

#include <Servo.h>
#include <Stepper.h>
int SPU = 2048;
Stepper Motor(SPU, 3,5,4,6);
Servo myservo;
int pos = 20;
const int trigPin = 9;
const int echoPin = 10 ;
const int led = 13;

long duration;
float distance;

void setup()
{
myservo.attach(11);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
myservo.write(pos);
Motor.setSpeed(5);
}

void loop()
{

//Serial.begin(9600);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);
distance = 0.034*(duration/2);
//Serial.println(distance);
if (distance < 27)
{
digitalWrite(led,HIGH);
myservo.write(pos+160);
delay(6000);
}
else
{
digitalWrite(led,LOW);
myservo.write(pos);
}
delay(300);
}

Nein, bitte nochmal.
In der IDE auf den Menupunkt BEARBEITEN klicken.
Dann auf "Für Forum kopieren"

Dann das erste Post editieren, dort das Bild raus, dann einfach auf einfügen - fertig.

Bitte!

Wenn mehrere Sachen gleichzeitig ablaufen sollen, kannst du nicht delay(6000); verwenden.
Bei BlinkWithoutDelay geht es nicht um "Blink", sondern um "WithoutDelay".

Für mehr Details sind die Tips von @my_xy_projekt natürlich sehr sinnvoll.
Und warum du es nicht hinbekommst, "den Schrittmotor mit einzubauen", könnest du auch genauer beschreiben...

pulseIn() blockiert den Arduino gleich wie delay()
In der Meßzeit kannst Du keine anderen Aktionen machen.
Du mußt die Länge des Impulses der Ultraschallsensors auf eine andere weise messen.

Muß es ein Ultraschallsensor sein? Könnte es auch ein Infrarotabstanssensor sein?

Grüße Uwe

Wenn sich die Platte durchgehend drehen soll, warum dann einen Schrittmotor? Da ist dann doch ein einfacher Getriebemotor besser. Der dreht sich von alleine. Den müsste man dann nur gegebenenfalls ein- oder ausschalten.
Wenn es denn unbedingt ein Schrittmotor sein muss, dann ist die Stepper.h eher nicht geeignet, da sie den Sketch anhält während sie die Steps an den Motor ausgibt. Du könntest die MobaTools verwenden, die können den Stepper ohne Blockade ansteuern, und bei denen stört es auch nicht, wenn der Sketch durch anderes ( z.B. delay oder pulsIn ) blockiert wird.

P.S. Das Servo könntest Du auch mit den MobaTools ansteuern, Dann könntest Du auch einstellen, wie schnell die Tür aufgeht, und sie würde nicht gleich 'auffliegen' :wink:

Unser Lehrer hat uns fest vorgegeben, dass ich diese drei Sachen benutzen soll. Leider kenne ich mich in dem Thema nicht so gut aus. Was genau müsste ich nun in dem Programm ändern?
Danke für die Antworten

Ich bekomme es hin zu bauen, ich meinte, dass ich nicht hinbekomme, den Schrittmotor in das Programm mit einzubinden.

Ich habe Dich mehrfach gebeten wenigstens etwas, so ein ganz kleines bissl, zu helfen DEINE(!) Aufgabenstellung zu verstehen.

Warum ignorierst Du das?

Dürft ihr dann überhaupt auch Libraries verwenden, oder sollt ihr alles selbst programieren? Ein bisschen genauer solltest Du wirklich sagen, was Du letztendlich machen musst.

Wir sollen ein Haus bauen. Ich hatte vor vor dem Haus ein Ultraschallsensor hinzustellen und sobald ich meine Hand hinhalte, soll ein Servomotor die Tür des Hauses öffnen. In dem Haus steht ein Tisch, dessen Tischplatte sich durchgehend um 180grad drehen soll, das würde ich mit dem Steppermotor machen. Der Lehrer hat uns gesagt wir sollen diese drei Sachen auf jeden Fall miteinbauen. War das verständlich?

Wir dürfen alles verwenden. Er sieht im Endeffekt nur, was ich gebaut habe. Vom Programm bekommt er nichts mit.

Ne. Nicht verständlich.
Der Tisch dreht sich drinnen auch (durchgehend), wenn keiner der Meinung ist reinzukommen? Nur um 180° - dann wieder zurück und wieder von vorn?

Die Aufgabenstellung ist zu ungenau.

Hast Du mal über einen PAP nachgedacht?

PAP? Sobald ich meine Hand an den Ultraschallsensor halte geht die Tür auf. Der Tisch fängt sich an zu drehen nur in eine Richtung ohne Stopp oder ähnliches. Das ganze soll 1minute lang gehen und dann soll sich die Tür von selber wieder schließen und der Tisch soll aufhören sich zu drehen.

JA!

Naja, kommt ja schon hin.
Aber glaube nicht, das ich Dir Deinen Code schreibe .)

Ist doch easy.
Reine Schrittkette.
0. Ausgangsstellung

  1. Frage Sensor ab, bis Entfernung < yxy
  2. mache Tür auf / fange an zu drehen / merke Zeit
  3. wenn Zeit abgelaufen / mache Tür zu / aufören zu drehen
  4. (Frage geht das Teil wieder in Ausgangsstellung?)

Ja, aber sobald ich den Stepmotor anschließe und ihn mit in mein Programm reinschreibe funktioniert der servomotor nicht...

Kein Code (!CODE!) kein Foto vom Aufbau.
Was soll man Dir helfen?

Nochmal: Deinen Code bitte MIT(!) dem nicht funktionierenden Teil hier richtig als code rein. Mit einer Beschreibung ab wann es nicht mehr geht.
Gerne auch als Kommentar im Code.

Ein Bild sagt manchmal auch mehr als tausende Worte.

ICH und vermutlich auch viele andere können nicht sehen, was Du da hast!

Na dann... wird schon.

Dir ist schon bewußt daß Du in jeder Antwort etwas neues oder genaueres schreibst. Wieso kannst Du das nicht am Anfang schreiben sodaß wir nicht frustriert sind weil immer wieder neues auftaucht?

Grüße Uwe

Tut mir Leid, bin heute etwas verpeilt. Habe den Code jetzt so eingestellt, wie es beschrieben wurde. Nun also zu meinem Problem. Mein Programm klappt eigentlich, nur sobald ich den Stepmotor dazuschreibe, funktioniert mein servomotor nicht mehr. ich weiß nicht genau, wie ich den Stepmotor in mein Programm schreiben soll. So wie ich es gemacht habe ist es ja anscheinend falsch...