- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 23

Thema: Motorsteuerung über Sensorik

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Zitat Zitat von zerebrator Beitrag anzeigen
    Dazu habe ich 3 Ultraschalsensoren Links ; Mitte ; Rechts
    Du hast 3 Sensoren: nennen wir sie mal us1, us2, us3.

    us1 - ist der Linke
    us2 - vorne mittig
    us3 - ist der rechte

    "ein Hinderniss anzeigt" steht für "der Schwellwert wurde überschritten" (dies kann später noch mit mehreren Schwellwerten erweitert werden)

    wenn us2 ein Hinderniss anzeigt, soll was passieren?
    wenn us1 ein Hinderniss anzeigt soll solange nach rechts gedreht werden bis kein Hinderniss mehr angezeigt wird.
    Wenn us1 und us2 ein Hinderniss anzeigen soll solange nach rechts gedreht werden, bis Beide kein Hinderniss mehr anzeigen.
    wenn us3 ein Hinderniss anzeigt soll solange nach links gedreht werden bis kein Hinderniss mehr angezeigt wird.
    Wenn us3 und us2 ein Hinderniss anzeigen soll solange nach links gedreht werden, bis Beide kein Hinderniss mehr anzeigen.
    wenn us1, us2 und us3 ein Hinderniss anzeigen soll solange rückwärts gefahren werden, bis entweder us1 oder us2 kein Hinderniss mehr anzeigen und dann um mindestens 60° gedreht werden.
    Wenn us1 und us3 ein Hinderniss anzeogen aber nicht us2, soll was passieren?

    wir haben jetzt also 7 Fälle die eine Aktion benötigen.
    und 3 Eingänge (us1, us2, us3) die zu verarbeiten sind.

    Werten wir eine Detektion an us1 mit 1,
    an us2 mit 2 und an us3 mit 4,

    bekommen wir folgende Wahrheitstabelle
    Code:
    us3|us2|us1
    ---+---+---
     4 | 2 | 1
    ---+---+---
     0 | 0 | 0 = 0 kein Handlungsbedarf
    ---+---+---
     0 | 0 | 1 = 1 nach rechts drehen
    ---+---+---
     0 | 1 | 0 = 2 Was soll passieren?
    ---+---+---
     0 | 1 | 1 = 3 stark nach rechts drehen
    ---+---+---
     1 | 0 | 0 = 4 nach links drehen
    ---+---+---
     1 | 0 | 1 = 5 was soll passieren?
    ---+---+---
     1 | 1 | 0 = 6 stark nach links drehen
    ---+---+---
     1 | 1 | 1 = 7 Rückwärts fahren und dann um mindestens 60° drehen
    ---+---+---
    Das könnte dann so in etwa implementiert werden
    Code:
    if us1 < 16 
    then var1 = 1
    else var1 = 0
    
    if us2 < 16 
    then var2 = 2
    else var2 = 0
    
    if us3 < 16 
    then var2 = 4
    else var2 = 0
    
    var = var1 + var2 + var3
    
    switch (var)
    case 1
       rechts drehen
    break
    case 3
       rechts drehen
    break
    case 4
       links drehen
    break
    case 6
       links drehen
    brake
    case 7
       rückwärts
       merker7 = 1
    default
       if merker7 == 1
       then rechts drehen 60°
       merker7 = 0
       else
       vorwärts
    Das ist ein Denkanstoß und kein Code zum stur Abtippen, da ich mich an keine Sprachsyntax halte sondern einen Pseudocode nutze der nur das Konstrukt verdeutlichen soll.

    Die hier nicht berücksichtigten case(es) kann man natürlich (besser, sollte man) auch noch füllen, da alle nicht behandelten Fälle im Default landen.

    bei einem System mit 2 Schwellwerten könnte man das erweitern:
    Code:
    if us1 < 16 
    then var1 = 8
    else if us1 < 32 
    then var1 = 1
    else var1 = 0
    
    if us2 < 16 
    then var2 = 16
    else if us2 < 32 
    then var2 = 2
    else var2 = 0
    
    if us3 < 16 
    then var3 = 32
    else if us3 < 32 
    then var3 = 4
    else var3 = 0
    Die entstehenden Fälle kannst Du problemlos in eine Tabelle eintragen und so wie ich es oben gezeigt habe den jeweiligen Zahlenwert errechnen.

    So kann man z.B. bei einem etfernteren Hinderniss schon eine kleine Kurskorrektur beginnen ohne die Geschwindikeit zu verlangsamen.
    Reicht das nicht, kommt man dem Hinderniss ja immer näher und irgendwann gilt die Bedingung für das nahe Hinderniss, wo man dann eventuell sogar stoppt und im Stillstand dreht.

    Zitat Zitat von zerebrator Beitrag anzeigen
    Ist die Switch Case Anweisung nicht für beispielweise Tastatur eingaben ?
    Kann man natürlich auch für Tastatur nehmen, aber Abfragen sei es nun IF-THEN oder SWITCH-CASE,
    ist das eigentlich wurst welchen Variablentyp man abfragt.

    Es ist eine Kontrollstruktur. Und die ist unabhängig von dem was man damit füttert.
    Wenn ich ein Blech mit 4 Verschieden großen Löchern drin habe, ist dem das auch egal ob ich durch die Löcher Äpfel, Birnen oder Mandarinen fallen lasse.
    Wenn ich vom kleinsten Loch zum größten gehe wird einfach alles nach Größe sortiert.

    So ist es auch mit den Abfragen. Bedingung erfüllt? Ja/Nein, fertig.

    Schau einfach mal hier:
    http://www.arduino-tutorial.de/category/programmieren/
    Geändert von i_make_it (12.06.2017 um 11:33 Uhr)

Ähnliche Themen

  1. Motorsteuerung über Joystick
    Von konstii im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 18.06.2009, 10:38
  2. LPT motorsteuerung über den drucker
    Von st0rm im Forum Motoren
    Antworten: 1
    Letzter Beitrag: 10.12.2007, 15:45
  3. Motorsteuerung über Fahrtenregler
    Von glory im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 01.06.2007, 20:34
  4. Motorsteuerung über RS232/USB
    Von ama7224290 im Forum Motoren
    Antworten: 0
    Letzter Beitrag: 07.02.2007, 17:24
  5. Motorsteuerung über PI-Regler
    Von Gromit im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 19.11.2004, 22:44

Berechtigungen

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

Labornetzteil AliExpress