Mit 2 x Hinderniserkennung Vorwärts-Rückwärts-Stop erkennen.

Hallo,
ich bin Absoluter Anfänger und lerne gerade. Ich möchte wie oben geschrieben mit 2 X Hinderniserkennug Sensoren mit ca. 1/4 Verschiebung markierte Laufrad vorwärts-stop-rückwärts Bewegung erkennen und Alarm auslösen wenn zb. Rückwärts dreht oder stoppt (soll immer vorwärts drehen). Erkennung sollte sich mit 1-2 Sekunden Abständen bewertet werden. Kürzere Zeiten macht in meiner Meinung nach zu Viel Fehlalarm.

Port , Sensor einbau und Kodierung kriege ich selber hin aber ich habe bis jetzt keine Idee wie ich die Bewegungen am sichersten und einfachsten kodieren und bewerten kann.
Ich will die Geschwindigkeit nicht wissen oder bewerten. Laufrad ist am Anfang sehr Langsam und zum Schluss kann 60-80 Puls/sec. schnell sein. Aber wie gesagt Geschwindigkeit ist unwichtig.

Kann mir jemand freundlicher weise sagen welche Methode oder am besten Quellcode ich benutzen muss?

Ich entschuldige mich für Schreibfehler. Ich hoffe das sie mich Verstehen.

Viele Grüße ,

Sezgin Yavuz

2018-08-14 11-15.pdf (121 KB)

Nur ein Tipp: Sie dir mal die Schlitzmasken von alten (mechanischen) Computermäusen an und google mal wie diese decodiert wurden. im Prinzip geht's um die Reihenfolge der Flankenerkennung bzw. den relativen Abstand der Flanken an den beiden Optokontrollern.

Für Code-Fragemente sieh dir mal Beispiele für Rotary Encoder/Inkrementalgeber an.

Ok, ich fange mal da an.
Herzlichen Dank

Hi

Jupp, denke auch, daß die Richtung zur Lösung führt.
Rotary-Encoder wurde ja schon genannt - Der arbeitet mit einem 2-Bit-Gray-Code.
Die Sensoren sind überlappend angeordnet - wodurch sich die Signale 00-01-11-10 (oder umgekehrt) ergeben.

MfG

Jetzt habe ich fast geschafft. Ich kann noch nur feststellen welche Richtung es dreht aber meine Ausgang ist nur eine LED der Heller oder Dunkler wir. Es funktioniert erstaunlich stabil, ob es sich langsam dreht oder schnell macht gar nichts mehr aus.

Ich schreibe hier meine nachjustierte Programm.

Kann mir jemand sagen was muss ich noch achten damit ich eine Rote (HIGH-LOW) und GELBE (HIGH-LOW) Ergebnis bekommen kann. Allerdings darf nicht If-Else sein sondern Rot und Gelb soll das Ergebnis unabhängig bewerten. Das bringt mir Sicherheit das es richtig funktioniert. Ich will ganz sicher wissen ob meine Mechanik sicher und Richtig überwacht.
Kurz gefasst das Rechner soll Vorwärts und Rückwärts getrennt bewerten und Anzeigen.

Ich bin für jeder Idee un d Hilfe sehr dankbar.

Viele Grüße

/*

** Use the Sparkfun Rotary Encoder to vary brightness of LED
**
** Sample the encoder at 200Hz using the millis() function
*/

int brightness = 120; // how bright the LED is, start at half brightness
int fadeAmount = 10; // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12; // pin 12
const int pin_B = 11; // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;

void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = millis();
loopTime = currentTime;
}

void loop() {
// get the current elapsed time
currentTime = millis();
if(currentTime >= (loopTime + 1)){
// 5ms since last check of encoder = 200Hz
encoder_A = digitalRead(pin_A); // Read encoder pins
encoder_B = digitalRead(pin_B);
if((!encoder_A) && (encoder_A_prev)){
// A has gone from high to low
if(encoder_B) {
// B is high so clockwise
// increase the brightness, dont go over 255
if(brightness + fadeAmount <= 255) brightness += fadeAmount;
}
else {
// B is low so counter-clockwise
// decrease the brightness, dont go below 0
if(brightness - fadeAmount >= 0) brightness -= fadeAmount;
}

}
encoder_A_prev = encoder_A; // Store value of A for next time

// set the brightness of pin 9:
analogWrite(9, brightness);

loopTime = currentTime; // Updates loopTime
}
// Other processing can be done here

IMG_4988.jpg