Go Down

Topic: (Licht-)Schranke - Sensor für Drehung (Read 4771 times) previous topic - next topic

Etzl

Hallo Leute,

arbeite gerade an einem weiteren Projekt und könnte da Hilfe gebrauchen:
ich habe eine große Holzscheibe (68cm Durchmesser), die sich in ca. 1 Minute 360° dreht.
Der Motor, der diese Scheibe antreibt, wird bereits von meinem Arduino duemilanove board angetrieben. Allerdings nur mit digitalWrite HIGH und LOW.
Ich würde nun gerne die Scheibe nach genau einer Umdrehung stoppen lassen. Momentan habe ich es mit delay() versucht zu timen, doch da ich auf der Scheibe mit Flüssigkeiten hantiere, komme ich mit dem delay nicht immer an der gleichen position an, wo ich sie gerne hätte. Es handelt sich immer um 1-2 cm, die zu lange oder zu kurz gedreht werden.

Nun dachte ich an eine art Licht-Sensor, den ich an der scheibe (oder unter der scheibe) montiere, und sobald die scheibe bei einer Markierung (genau nach einer Umdrehung) wieder angelangt, soll die Scheibe (der Motor) stoppen.
Ich führe während der Scheibenbewegung (also digitalWrite(motorpin, HIGH); ) auch mehrere andere Pinbefehle aus (hauptsächlich digitalWrite...)
Also müsste der Lichtsensor über eine Art Timer laufen, oder ich müsste nach jedem befehl abfragen, ob die Markierung schon erreicht wurde, was glaube ich sehr unschön ist.

Meine Fragen:
+mit welcher Art von Sensor könnte ich es so wie beschrieben realisieren? Ich dachte an eine art Drehzahlmesser-sensor...
+mit welchem Timer, oder Befehl kann ich die Abfrage ob die Markierung erreicht wurde abfragen?

Würde mich über Tips, oder referenz-threads freuen.

vielen dank
Etzl

erni-berni

Hallo Etzl,
zwei Ideen kommen mir dabei direkt:
1. Reflexlichtschranke oder Gabellichtschranke
http://www.conrad.de/ce/de/product/153794/REFLEXLICHTSCHRANKE-SFH9201/SHOP_AREA_37351&promotionareaSearchDetail=005
http://www.conrad.de/ce/de/product/179995/GABELLICHTSCHRANKE-THT-EE-1106-3MM/SHOP_AREA_37351&promotionareaSearchDetail=005
Für die Reflexlichtschranke klebst du ein Stück Alufolie auf die Scheibe, für die Gabellichtschranke einen Winkel der durch die Gabel läuft. Beschaltet wird beides wie ein Optokoppler.
2. Reedkontakt
http://bwir.de/bauteile/reed-kontakt-magnetschalter
Auf die Scheibe setzt du einen Magneten, der den Reedkontakt schaltet. Vorteil: du benötigst nur einen Eingang.

Damit sollte es möglich sein, die Scheibe sehr gut reproduzierbar an der gleichen Stelle anzuhalten.

Die Abfrage des Schalters kannst du in der Hauptprogrammschleife machen, wenn die Pause zwischen den Abfragen kurz genug ist. Die elegantere Methode wäre das in einem Interrupt zu tun. Also Schalter/Transistor auf Interruptpin, im Interruptprogramm den Motor ausschalten, den Zustand ans Hauptprogramm übergeben und das weiterbehandeln, wenn das Programm soweit ist.

Gruß
Reinhard

Etzl

Hallo erni-berni,

vielen dank für deine tips.

Das hilft mir schon sehr weiter... Ich werde mir am Montag so eine Reflexlichtschranke mal kaufen und ein bisschen herum probieren.

So wie ich das jetzt lese, schaltet dieses Ding wie ein Relais?
Bei Pin 1 und 6 lege ich die Betriebsspannung von 5V an... und sobald die Alufolie reflektiert, schaltet diese Reflexlichtschranke zwischen 3 und 4 auf Durchfluss und ich kann wie in einem Relais den Motorbetrieb unterbrechen?
(kenne mich leider noch schlecht auf diesem Elektronikgebiet aus :D )

Hoffe ich habe das so richtig verstanden. Bitte um Korrektur.

LG
Etzl
ps. das mit Interrupt muss ich mir nochmal genauer ansehen. Ist sicher die elegantere lösung. Gibt es da gute Anleitungen? Werd mich auch mal durch-googeln...

erni-berni

Hallo Etzl,
der Vergleich zum Relais passt nicht ganz, passender wäre der Vergleich zum Optokoppler. Ein sehr gutes Tutorial dazu findest du hier: http://www.mitchsoft.de/Elektronik/AVR/Grundschaltungen/Optokoppler.html. Wichtig ist, dass die Sende-LED vor Pin 1 einen Vorwiderstand benötigt. Im Datenblatt ist If=10mA empfohlen. Bei 5V Versorgungsspannung und der Durchlassspannung der LED von 1,25V ergibt sich nach Ohmschen Gesetz: (5V-1,25V)/0,01A=375 Ohm. Der nächstgrößere Wert in der Normreihe wäre 390 Ohm, es schadet nichts, wenn der Wert auch etwas größer ist, dann wird die Reichweitet der Reflexlichtschranke höchstens geringer, Du kannst ja experimentieren. Pin 6 legst du auf Masse.
Am Fototransistor legst du Pin 3 auf Masse und Pin 4 an einen Eingang des Arduino, wobei du den Pullup des Eingangs aktivieren musst. Immer, wenn Licht auf den Fototransistor fällt, wird er leitend und der Arduino Eingang wird auf LOW gezogen.
Zum Gebrauch von Interrupts solltest du dir mal das Tutorial http://www.arduino.cc/en/Reference/AttachInterrupt durchlesen.

Etzl

Hallo,

ich hab mir jetzt mal diese Reflex-Lichtschranke bei Conrad gekauft und nach deinen Anweisungen eingebaut:

Pin1 = 5V+ von Arduino - davor 390 Widerstand
Pin 6 = Ground
Pin 3 = Ground
Pin 4 = interruptpin auf Arduino (digital Pin 2 habe ich genommen)

Dannach habe ich an Pin 12 meinen Rotationsmotor angeschlossen, und einmal mit dem Standard Beispiel von der Interrupt Seite probiert.

Leider funktioniert es nicht. Es schaltet nichts.

Entweder ich habe beim Löten etwas kaputt gemacht, oder es irgendwie falsch angeschlossen.
Ich werde es mal mit weniger Widerstand versuchen.
Stimmen Collector und Emitter Anschluss auf Pin 3 und 4...?

Komischerweise schaltet es, sobald ich mit irgend einem leitendem Gegenstand auf eine der 4 Reflexlichtschranken Pins greife. Oder ich die Verbindung zu Arduino unterbreche, schaltet es auch.

Hat jemand eine idee?

LG
thx,
Etzl

Gurkengraeber

Hallo Etzl !

Du hast einen Gleich-Strom-Motor ? ( braucht natürlich Rückmeldung für die Position durch Licht-Schranke oder Reflex-Koppler)

Versuche dich doch mal an Schrittmotoren ( billig aus Disketten-Laufwerken zu gewinnen ) - Du gibst einen Impuls und der Motor dreht sich um einen bestimmten Winkel ( z.B. 1° ) http://de.wikipedia.org/wiki/Schrittmotor

Oder an Servo-Motoren aus dem Modell-Bau ( http://de.wikipedia.org/wiki/Servomotor )

MfG

Etzl

Hi,

Quote
Du hast einen Gleich-Strom-Motor ? ( braucht natürlich Rückmeldung für die Position durch Licht-Schranke oder Reflex-Koppler)

Versuche dich doch mal an Schrittmotoren ( billig aus Disketten-Laufwerken zu gewinnen ) - Du gibst einen Impuls und der Motor dreht sich um einen bestimmten Winkel ( z.B. 1° ) http://de.wikipedia.org/wiki/Schrittmotor

Oder an Servo-Motoren aus dem Modell-Bau ( http://de.wikipedia.org/wiki/Servomotor )

MfG


Ich verwende einen 12V Scheibenwischer Motor vom Auto. Und dieser Motor wird über ein Relais von Arduino an und ausgeschalten. Das dürfte also kein Problem sein.
Das Problem liegt glaube ich bei der Reflexlichtschranke... die noch nicht richtig angeschlossen wurde.

LG
Etzl

Gurkengraeber

Quote
die noch nicht richtig angeschlossen wurde.


Male doch mal eine Skizze, scanne sie ein, und veröffentliche sie .

Keine Angst - Gekritzel ist 'volvodani-CAD'  :)

( nur als Beispiel )

Oder wenn du echte CAD-Programme kannst ( lernen willst ): http://www.cadsoft.de/freeware.htm

MfG

uwefed

Bitte Gurkengraeber
Mach nur solche Ratschläge die das Thema betreffen und die realisierbar sind. Mit einem Schrittmotor ohne Übersetzung drehst Du keine 68cm Holzplatte; die Hat ein zu grßes Trägheitsmoment.

@Etzl
hast Du den internen PullupWiderstand aktiviert?
Bitte Schick uns Dein Programm.

Grüße Uwe

Gurkengraeber

Quote
Mach nur solche Ratschläge die das Thema betreffen und die realisierbar sind. Mit einem Schrittmotor ohne Übersetzung drehst Du keine 68cm Holzplatte; die hat ein zu großes Trägheitsmoment.


Halte ich für realisierbar.

Etzl

Hi,

also, ich verwende testweise folgende programmierung:
Code: [Select]
int pin = 12;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}


Anschlüsse der Pins bei der Reflexlichtschranke:
Quote
Pin1 = 5V+ von Arduino - davor 390 Widerstand
Pin 6 = Ground bei digitalen Pins von Arduino
Pin 3 = Ground bei digitalen Pins von Arduino
Pin 4 = interruptpin auf Arduino (digital Pin 2 habe ich genommen)


Im Datenblatt steht was von "Emitter-Kollektor-Sperrspannung" 7V... Kann das das problem sein, da es von Arduino nur 5V bekommt?

LG
Etzl

sth77

Die Beschaltung sieht auf den ersten Blick richtig aus. Wird denn ein Interrupt ausgelöst, wenn du Pin 3 und Pin 4 brückst, bspw. mit einem Stück Draht?
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Etzl


Die Beschaltung sieht auf den ersten Blick richtig aus. Wird denn ein Interrupt ausgelöst, wenn du Pin 3 und Pin 4 brückst, bspw. mit einem Stück Draht?


Ja, wird auch ausgelöst...

heißst das, dass meine Reflexlichtschranke kaputt ist? Kann sowas beim löten kaputt gehen?

sth77

Ich denke nicht, dass die Reflexlichtschranke beim Löten das Zeitliche gesegnet hat. Du schreibst, dass Anode an 5V mit Vorwiderstand hängt, Kathode an Masse. Das resultiert ja in einem Dauerleuchten der LED. Das kannst du kontrollieren, indem du mit einer Digitalkamera bzw. einem Handy mit Fotofunktion die Diode betrachtest. Die Bildsensoren sind nämlich anfällig für IR-Licht. Solltest du ein permanentes Leuchten bemerken, ist die Reflexlichtschranke in Ordnung.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Etzl

#14
Jun 20, 2011, 05:55 pm Last Edit: Jun 20, 2011, 05:59 pm by Etzl Reason: 1
ich sehe mit meiner kamera LEUCHTEN,

dh, das ding funktioniert...

kann ich das signal mit einer alufolie zum empfänger überhaupt umleiten?

Go Up