-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Richtungserkennung mit 2 Lichtschranken

  1. #1

    Richtungserkennung mit 2 Lichtschranken

    Anzeige

    Hallo zusammen,

    hätte eine Frage bezüglich Richtungserkennung.

    Möchte mit 2 Reflexionslichtschranken und einem Mikrocontroller die Richtung auswerten, d.h läuft man vorwärts durch die Schranken sollte z.B: eine grüne LED kurz leuchten. Läuft man in entgegengesetzter Richtung soll eine rote LED aufleuchten. Hat schonmal jemand so etwas in Bascom gemacht und könnte mir ein paar Tipps geben ?

    Mfg Lötkolben

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Einer von ca. 1027 Wegen könnte so aussehen:

    Du definierst 2 Variablen als Bit und nutzt sie als "flag", die bei Passage der Lichtschranken gesetzt werden (z.B. Flag1 und Flag2). Wird die Lichtschranke 1 ausgelöst, checkst Du ob Flag2 schon gesetzt ist. Wenn ja, geht die Hin-LED an. Wenn nicht, wird Flag1 gesetzt. Lichtschranke 2 macht genau das gleiche: Checken, ob Flag1 gesetzt ist, wenn ja, Rück-LED an, ansonsten Flag2 setzen.

    Irgendwann nachdem eine LEDs angeschaltet wurde, musst Du natürlich beide Flags löschen (und die LED wieder ausschalten). Die einfache, aber unelegante Art wäre mit "wait x", das hält das Programm aber auf. Alternativ könntest Du einen Timer starten und in der Überlauf-ISR die Flags löschen.

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das ist noch etwas einfacher als man es bei Incrementalgebern hat.

    Die Lichtschraken sollte so dicht zusammen, dass man beim duchgehen beide gleichzeitig unterbricht.
    Man wartet darauf bis die eine Leichtschranke gerade unterbrochen wird. Dann schaut man sich die an ob die andere Lichtschranke auch unterbrichen ist. Daraus kreigt man dann die Richtung.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Das kann man z.B. wie eine Dreh-Encoder Abfrage aufbauen.

    edit: Man sollte die Fenster nicht so lange offen lassen...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    meine lösung http://einbeinreicht.blogspot.com/ hab aber externen schidttrigger zusätzlich

  6. #6
    Hi,

    hat jemand vielleicht einen Beispielcode.

    Mfg Lötkolben

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Hier, aber ungetestet. Die Ports müssen angepasst werden, es fehlt der Kopf bezüglich Takt und Stack.
    Evtl muss im Lichtschranken SUB jede 0 gegen eine 1 und jede 1 gegen eine 0 getauscht werden.
    Code:
    Dim Zeitrot as integer
    Dim Zeitgruen as Integer
    Dim DrehungLinks As Byte
    Dim DrehungRechts As Byte
    Dim Linksrechts As Byte
    Links Alias Pind.3     'Eingang 1. Lichtschranke
    Rechts Alias Pind.4    'Eingang 2. Lichtschranke
    LEDgruen Alias Portd.5 'Ausgang grüne LED
    LEDrot Alias Portd.6   ' Ausgang rote LED
    
    ddrd =01100000
    
    do
    gosub Lichtschranke
    if DrehungRechts >0 then
     zeitrot = 32767
     set ledrot
     DrehungLinks =0
    end if
    if DrehungLinks >0 then
    	zeitgruen = 32767
    	set ledgruen
       DrehungLinks = 0
    end if
    if zeitrot > -32767 then
       decr zeitrot
    else
    	reset ledrot
    end if
    if zeitgruen > -32767 then
       decr zeitgruen
    else
    	reset ledgruen
    end if
    
    loop
    end
    Lichtschranke:
          If Linksrechts = 0 Then
             If Links = 0 And Rechts = 1 Then
                Linksrechts = 1
             End If
             If Rechts = 0 And Links = 1 Then
                Linksrechts = 11
             End If
          End If
    
          If Linksrechts = 1 And Links = 0 And Rechts = 0 Then
             Linksrechts = 0
             incr DrehungLinks
          End If
    
    
    
          If Linksrechts = 11 And Links = 0 And Rechts = 0 Then
             Linksrechts = 0
             incr DrehungRechts
          End If
    
          If Links = 1 And Rechts = 1 Then Linksrechts = 0
       
    
    
    Return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    hab ich da keinen link geschickt?
    da war der quell code in Bascom für einen 2313 du nimmst dir einfach den µC deiner wahl änderst die pinbelegung nach deiner wahl schließt die leds an
    und deine lichtschranken du musst nur die pinbelegung ändern das programm geht. wenn es denoch nicht läuft schreib eine pn und ich änder dir den code und noch eine ausführliche erklärung ok?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Das geht recht einfach


    Wenn IR1 unterbrochen wird LED Grün an
    und IR2 Abfrage überspringen
    Wenn IR2 unterbrochen wird LED Rot an
    und IR1 Abfrage überspringen


    Gruß Richard

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    und was ist wenn das ding wackelt und ir1 auslöst und wieder zurück schwingt?
    bei meim code ist das mit berücksichtigt

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •