Schrittmotor soll durch Lichtschranke gestartet und gestoppt werden

Hi! Ich habe nur sehr wenig Erfahrung mit Arduinos und mir meine Codes immer zusammen-gegooglet. Diesmal stoße ich allerdings auf Probleme und die Threads, die sich in diesem Forum mit dem selben Thema auseinandersetzen, kann ich nicht abstrahieren, sodass sie für mich funktionieren. Wahrscheinlich fehlen mir einfach die Grundlagen. Aber da ich den Arduino nur für folgendes Projekt und nur diesen eine Zweck einsetze, würde es mich sehr freuen, wenn ich zumindest auf die entsprechenden Einträge verwiesen werden könnte.
Kurz zu dem Projekt: Ich habe einen Scanner für 16mm Film gebaut. Es gibt eine Auf- und eine Abwickelspule, drei Wellen über die der Film läuft, die ihn nur in Position und auf Spannung halten, und eine an der über Zahnräder ein Schrittmotor anliegt, der wiederum von einem Arduino Uno betrieben wird. Zwischen dieser und einer Welle davor läuft der Film durch ein 'Gate', also eine Halterung in der immer nur ein Bild von einer dahinter sitzenden Lichtquelle beleuchtet wird. Genau dieser Bereich wird dann von einer Kamera fotografiert. Derzeit macht der Arduino also folgendes: Spule bewegen, Kamera auslösen, Spule wieder bewegen. Hier der entsprechenden Sketch (der Transistor ist hier der Auslöser für die Kamera):

#include <Stepper.h> 
int SPU = 4096;
Stepper Motor(SPU, 7,5,4,6); 

# define TRANSISTOR 13

void setup() 
{
Motor.setSpeed(3); 
pinMode(TRANSISTOR, OUTPUT);
}

void loop() {

  
Motor.step(-182); 
delay(100); 

digitalWrite(TRANSISTOR, HIGH);
  delay(10);
digitalWrite(TRANSISTOR, LOW);
  delay(600);

}

Ich würde jetzt gerne eine Gabellichtschranke so einbauen, dass der Film zwischen dieser durchläuft. Oben hat der Film Perforation, die auch von den Wellen gegriffen wird. Diese soll von der Lichtschranke gelesen werden. Also: Lichtschranke unterbrochen -> Motor läuft bis Lichtschranke wieder unterbrochen -> Kamera löst aus -> Motor läuft.

Ich kriege das gerade einfach nicht hin und würde mich über Hilfe wirklich freuen! Liebe Grüße!

Was für ein Typ, wie angesteuert?

In meiner Erinnerung sind die Filme im Bereich der Perforation durchsichtig oder irre ich da?

Verstehe ich es richtig, daß Du über die Perforation eine Synchonisation zwischen Film und Kamera erreichen möchtest?

Na dann...
Proof of Konzept.
Ohne zu wissen, was Du für eine GS benutzt.

#include <Stepper.h>
int SPU = 4096;
Stepper Motor(SPU, 7, 5, 4, 6);

const byte ausloeser = 13;
const byte haltPin = 10; // Da kommt der InputPin der Gabellichtschranke ran
bool isFrameKante = false;
bool isAusgeloest = false;
void setup()
{
  Motor.setSpeed(3);
  pinMode(ausloeser, OUTPUT);
  pinMode(haltPin, INPUT);  // Achtung das muss nicht stimmen
}

void loop()
{
  isFrameKante = digitalRead(haltPin); // und lese die LS
  if (isFrameKante == false)           // Lichtschranke ist unterbrochen
  {
    Motor.step(-1);                    // Fahre einen Schritt weiter
    delay(5);
    isAusgeloest = false;              // und ausgelöst loeschen
  }
  else                                 // Lichtschranke ist nicht unterbrochen
  {
    if (isAusgeloest == false)         // ist ausgeloest?
    {
      digitalWrite(ausloeser, HIGH);
      delay(10);
      digitalWrite(ausloeser, LOW);
      delay(600);
      isAusgeloest = true;              // merken, das ausgelöst war
    }
    Motor.step(-1);                    // weiter fahren
    delay(5);
  }
}

Da ist eigentlich am Filmrand ein SepiaFarbton drauf.
Das PerfoLoch lässt sich auswerten. Ich kann mich dran erinnern sowas mal - au ist sehr lange her - als Bildzähler gehabt zu haben...

Da wollte ich nur sichergehen :slightly_smiling_face:

Ok, ich bin begeistert, vielen Dank schonmal! Proof of Concept ist das richtige Stichwort, denn das funktioniert auf Anhieb, zumindest mit einem Stück Pappe, das die GS unterbricht. Der Film scheint zu durchsichtig zu sein -- mit dem funktioniert es noch nicht.
Die GS habe ich hier her:

Ich weiß nicht, ob es mit dieser dann überhaupt klappen kann... Beziehungsweise, wie ich sie einstellen kann, sodass es klappt?

Warte mal... Der hat nen Analog-Output.
Ich bau Dir mal was...

Ich hänge hier mal ein Bild von dem Film an -- dann lässt sich das vielleicht besser erklären. Jedes Loch an der Perforation soll den Motor wieder stoppen. Ich denke in dem Sketch von @my_xy_projekt ist das auch genau so verarbeitet. Nur passt entweder die GS nicht, oder man müsste sie anders einstellen.

Nochmal vielen Dank!

Richtig oder eine Sonnenbrille (Farbfilter) aufsetzen :sunglasses:

Du musst den AnalogOut vom Sensor nehmen.
Steck den mal an A0 an Deinem Arduino und dann versuch mal folgenden Code.

#include <Stepper.h>
int SPU = 4096;
Stepper Motor(SPU, 7, 5, 4, 6);

const byte haltPin = A0; // Da kommt der InputPin der Gabellichtschranke ran
unsigned int lastWert = 0;

void setup()
{
  Serial.begin(115200);
  lastWert = analogRead(A0);
  Serial.print(F("Start... "));
  Serial.println(lastWert);
  Motor.setSpeed(3);
}

void loop()
{
  Motor.step(-1);                    // Fahre einen Schritt weiter
  delay(3);
  unsigned int neuWert = analogRead(A0);
  if (lastWert !=  neuWert + 5 || lastWert != neuWert - 5)
  {
    Serial.print(millis());
    Serial.print('\t');
    Serial.println(neuWert);
    lastWert = neuWert;
  }
  if (millis() > 30000) while (1);
}

Der bleibt nach 30 Sekunden stehen.

Auf dem Seriellen Monitor bekommst Du aber einige Ausgabe.
Bitte unbedingt drauf achten, den SerMon unten rechts auf 115200 zu stellen...
Was kommt da raus?

Ich kriege Werte zwischen 19 und 25, wenn ich den Film dazwischen tue zwischen 33 und 43!

Hallo,
fester Ablauf einer Steuerung führt zu einer Schrittkette als sinnvolle Lösung. Damit man die Lichtschranke mit der blockiernden Stepper.h abfragen kann geht es nur in kleinen Schritten, am besten immer nur einen Schritt weiter fahren. Vermutlich kann das etwas ruckeln beim Drehen. wenn die Flanke von der LS kommt in den nächsten Abblauf Status, Transistor schalten , warten , Transistor aus , zurück auf 1
Heinz

Was kommt raus, wenn Du anstelle des Films mit einer Pappe verdunkelst und offen lässt? Ist das Dein 19/25-Wert?
Der PIN A0 vom Sensor muss an A0 vom Arduino.

Kannst Du mir mal die Ausgabe vom SerMon geben, wenn der Film durchläuft? Zwei Perfos reichen mir, aber ich brauche beide als Anfang und Ende und alles dazwischen.

das geht alles mit delay() - habe ich mir auch anhören müssen.wenn nichts anderes gebraucht wird.

Erstmal sehen, was die LS bringt....

Also das ist der Output im Serial Monitor wenn der Film durch die LS läuft. Mit Pappe habe ich noch gar nicht probiert -- soll ich das noch nachholen und auch hier reinschreiben? Die LS habe ich an A0!

Es ist ziemlich schwer genau Anfang und Ende von den Perforationslöchern zu treffen -- ich versuche nochmal.

Auch auf der LS den A0 und nicht den DO verwenden.

Jepp ist auch da an A0 :slight_smile:

Hallo,
ich glaube das wird nichts mit der Lichtschranke , der Unterschied hell/dunkel ist zu klein , zwei digit
Heinz

Geht aber nicht:

@Rentner - mein Fehler? Wo? - Ich tanze vielleicht auf zu vielen Messen...

@kuck_jonas kannst Du ausschliessen, das da Fremdlicht einströmt? UND BITTE!!! Keine Bilder vom SerMon.
Markieren mit der Mouse und hier reinkopieren in Codetags -das </> Symbol verwenden.

Nein, kann ich noch nicht ausschließen, kann es nochmal im komplett dunkeln versuchen, aber das wäre auch keine unbedingt realistisch Anwendungssituation -- außer natürlich ich würde die LS abschirmen.

Ok ich versuche es nochmal und kopiere dann die Ergebnisse hier rein. Momentchen..

1 Like