-         

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

Thema: Hilfe bei Steuerung durch Zufallsentscheidung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    8

    Hilfe bei Steuerung durch Zufallsentscheidung

    Anzeige

    Hi,

    Ich habe einen kleinen Robo mit Ultraschallsensor gebastelt.

    Ich hätte gerne ein Zufallsentscheidung eingefügt die dafür sorgt das die Drehung zu beiden Seiten erfolgen kann.


    Code:
    int trigger=12;
    int echo=13;
    long dauer=0;
    long entfernung=0;
    int motor1_A=11;
    int motor1_B=10;  
    int motor2_A=6;
    int motor2_B=5;
     
    void setup()
    {
    pinMode(trigger, OUTPUT);
    pinMode(echo, INPUT);
    }
     
    void loop()
    {
    digitalWrite(trigger, LOW);
    delay(5);
    digitalWrite(trigger, HIGH);
    delay(10);
    digitalWrite(trigger, LOW);
    dauer = pulseIn(echo, HIGH);
    entfernung = (dauer/2) / 29.1;
     
    if (entfernung <= 35)
    {      
        digitalWrite(motor1_A,LOW); // Stop
        digitalWrite(motor2_A,LOW);
        digitalWrite(motor1_B,LOW);
        digitalWrite(motor2_B,LOW);
        delay(500);    
        digitalWrite(motor1_A,LOW); // Rückwärts
        digitalWrite(motor2_A,HIGH);
        digitalWrite(motor1_B,HIGH);
        digitalWrite(motor2_B,LOW);
        delay(400);    
        digitalWrite(motor1_A,HIGH); //Drehung links
        digitalWrite(motor2_A,HIGH);
        digitalWrite(motor1_B,LOW);
        digitalWrite(motor2_B,LOW);
        delay(500);
    }
    else
    {
        digitalWrite(motor1_A,HIGH); // Fahren
        digitalWrite(motor2_A,LOW);
        digitalWrite(motor1_B,LOW);
        digitalWrite(motor2_B,HIGH);
    }
    }
    Die Drehung rechst wäre dann,
    Code:
        digitalWrite(motor1_A,LOW); //Drehung rechts
        digitalWrite(motor2_A,LOW);
        digitalWrite(motor1_B,HIGH);
        digitalWrite(motor2_B,HIGH);
        delay(500);
    Hat jemand eine idee?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Ort
    bei Karlsruhe
    Beiträge
    74
    Pseudo-Zufälle kannst Du über die Arduino-Funktion random() erzeugen. Mit random(100) und anschließender Abfrage auf >49 erzeugst Du eine 50/50 Entscheidung.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    8
    Danke cdk,

    das war dann doch einfach.

    int trigger=12;
    int echo=13;
    long dauer=0;
    long entfernung=0;
    int motor1_A=11;
    int motor1_B=10;
    int motor2_A=6;
    int motor2_B=5;
    long randNumber;

    void setup()
    {
    pinMode(trigger, OUTPUT);
    pinMode(echo, INPUT);

    }

    void loop()
    {
    digitalWrite(trigger, LOW);
    delay(2);
    digitalWrite(trigger, HIGH);
    delay(;
    digitalWrite(trigger, LOW);
    dauer = pulseIn(echo, HIGH);
    entfernung = (dauer/2) / 29.1;



    if (entfernung <= 35)
    {
    digitalWrite(motor1_A,LOW); // Stop
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor1_B,LOW);
    digitalWrite(motor2_B,LOW);
    delay(500);

    digitalWrite(motor1_A,LOW); // Rückwärts
    digitalWrite(motor2_A,HIGH);
    digitalWrite(motor1_B,HIGH);
    digitalWrite(motor2_B,LOW);
    delay(500);


    if (random(100)>49)
    {
    digitalWrite(motor1_A,LOW); //Drehung rechts
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor1_B,HIGH);
    digitalWrite(motor2_B,HIGH);
    delay(500);
    }
    else
    {
    digitalWrite(motor1_A,HIGH); //Drehung links
    digitalWrite(motor2_A,HIGH);
    digitalWrite(motor1_B,LOW);
    digitalWrite(motor2_B,LOW);
    delay(500);
    }

    }
    else
    {
    digitalWrite(motor1_A,HIGH); // Fahren
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor1_B,LOW);
    digitalWrite(motor2_B,HIGH);
    }
    }

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo!

    Ich denke, dass am einfachsten wäre benötigte Anzahl von niedrigstwertigen Bits aus freilaufendem Timer, falls noch freien gibt, in zufälligen Zeitabständen ablesen.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    8
    Das verstehe ich jetzt nicht wirklich. Kannst du das kurz erklären oder mit einen Linke geben?

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Sorry, aber das ist meine "verrückte Idee" und deshalb bitte um konkrete Fragen, aber ich k.A. über "Cäh" habe.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2014
    Beiträge
    8
    Meine Lösung Funktioniert ja zufriedenstellend. Also Danke für den Beitrage mit dem freilaufenden Timer

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Ort
    bei Karlsruhe
    Beiträge
    74
    Zitat Zitat von PICture Beitrag anzeigen
    Hallo!

    Ich denke, dass am einfachsten wäre benötigte Anzahl von niedrigstwertigen Bits aus freilaufendem Timer, falls noch freien gibt, in zufälligen Zeitabständen ablesen.
    Ich denke sowas in der Art wird die random Funktion intern auch machen. Der Arduino startet ja nach Reset freiwillig einen Zähler im us Takt (läßt sich per micros() abfragen), der dann nach 70min überläuft und von vorne beginnt. Ich denke dessen untere Bits wären für unkritische Zufallsfunktionen ganz gut brauchbar.

    @akjra
    Stell dir einen solchen Zähler mal binär vor und frage z.B. die unteren 4 Bit, welche ständig durchrotieren, spontan ab. Da wirst Du dann auch scheinbar zufällige Zahlenwerte von 0..15 erhalten.

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    @ cdk

    Besten Dank für perfekte Erklärung meiner Idee, weil ich Arduino gar nicht kenne.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.01.2014
    Beiträge
    398
    Blog-Einträge
    3
    Also frei nach CDK:
    Random True oder False:

    #define ZUFALL (micros() & 1)

    if (ZUFALL) links();
    else rechts();
    Geändert von Sisor (30.01.2015 um 01:36 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. suche Hilfe bei Steuerung für elektrisch schaltbares Schaltgetriebe
    Von Porloepp im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 9
    Letzter Beitrag: 21.06.2013, 17:16
  2. Bitte um Hilfe bei Steuerung Nanotec Schrittmotor
    Von HGS im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 22.12.2012, 18:00
  3. Antworten: 3
    Letzter Beitrag: 15.07.2010, 08:15
  4. Antworten: 6
    Letzter Beitrag: 07.01.2010, 14:34
  5. Steuerung durch Kamera
    Von janoschandre im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 20.06.2006, 18:30

Berechtigungen

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