- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 566

Thema: outdoor I

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Hm- wo setzt du das Flag wieder auf 0?
    Wahrscheinlich liegt dort der Hase im Peffer....
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Hm- wo setzt du das Flag wieder auf 0?
    Wahrscheinlich liegt dort der Hase im Peffer....

    wahrscheinlich...

    mit dem einsatz von timer(), sekundenaufgaben() und meiner entprellten ping-abfrage

    Code:
    void hindernis_vorh_rechts_entprellt(void)
    {
      if (start_ping_rechts == false)
    
    
        aktuelle_ping_millis = millis();
      if (aktuelle_ping_millis - vergangene_ping_millis > interval_ping)
      {
        vergangene_ping_millis = aktuelle_ping_millis;
        ping_distanz_rechts();
      }
    
      if (uS_rechts != NO_ECHO)
      {
        if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
        {
          hindernis_rechts = true;
          mehrfach_zaehler_rechts = 1;
        }
        else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
        {
          mehrfach_zaehler_rechts = 0;
        }
      }
      else
      {
        if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 1)
        {
          hindernis_rechts = false;
          mehrfach_zaehler_rechts = 0;
        }
        else if (((uS_rechts / US_ROUNDTRIP_CM) <= 25) && mehrfach_zaehler_rechts == 0)
        {
          mehrfach_zaehler_rechts = 1;
        }
      }
    }
    läuft das jetzt:
    der roboter fährt vorwärts und misst im sekundenintervall mal links und dann wieder rechts die entfernung. Die Stepper laufen noch ein bischen "rauh" aber das ist sicher ein anderes problem...
    zu der (meiner) verwendung von der AccelStepper und auch anderen libraries - ich versuche nicht das alles zu verstehen, sondern passe für meine zwecke die beispiele an, in der hoffnung, dass ich es beim nächsten mal immer noch weiss , klappt leider nicht immer...

    Insofern mein dank an alle, die sich immer wieder die mühe machen auf meine fragen einzugehen, wobei hinweise auf andere hardware oder software (welche ausser arduino auch immer) wenig bis garnicht hilfreich sind...

    und jetzt gehts mit dem servo-sweep weiter
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Wenn du dieses Flag in der selben Sekunde zurückstellst, in der die Aufgabe erledigt werden soll, wird die die ganze Sekunde über endlos oft erledigt, ist doch klar.

    Der Ablauf sollte so sein:
    - der Sekundenzeiger springt auf "erledigeDas"
    -die Aufgabe wird erledigt, das Flag auf 1 gesetzt
    -der Sekundenzeiger springt auf die nächste Sekunde- und hier wird das Flag wieder auf 0 gestellt, damit es bei der nächsten "erledigeDas"-Sekunde wieder greifen kann.

    Du musst bedenken, dass der Timer ...zigmal pro Sekunde aufgerufen wird- wenn er also in der gleichen Sekunde das Flag wieder auf 0 stellt, klappt das nich.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Wenn du dieses Flag in der selben Sekunde zurückstellst, in der die Aufgabe erledigt werden soll, wird die die ganze Sekunde über endlos oft erledigt, ist doch klar.
    Der Ablauf sollte so sein:
    - der Sekundenzeiger springt auf "erledigeDas"
    -die Aufgabe wird erledigt, das Flag auf 1 gesetzt
    -der Sekundenzeiger springt auf die nächste Sekunde- und hier wird das Flag wieder auf 0 gestellt, damit es bei der nächsten "erledigeDas"-Sekunde wieder greifen kann.

    Du musst bedenken, dass der Timer ...zigmal pro Sekunde aufgerufen wird- wenn er also in der gleichen Sekunde das Flag wieder auf 0 stellt, klappt das nich.

    so ganz genau weiss ich ja wirklich nicht (beim weiterschreiben habe ich begriffen was da abläuft) warum das jetzt funktioniert , es tut's aber - und - ich hab ja für jedes ereignis was über die sekundenaufgaben läuft ja ein eigenes flag...

    Mit dem flag alleine hat es ja vorher schon funktioniert, allerdings mit dem nachteil des 100fachen aufrufs und auch des 100fachen drucks des wertes. Das ist nun mit der entprellten ping variante weg...

    Ich hab jetzt die ersten versuche mit dem servo-sweep hinter mir. Das hier:
    Code:
    void servo_sweep (void)
    {
      gemacht_servo_sweep_flag = 1;
      
      for (pos = 0; pos < 100; pos += 1)
      {
        myservo.write(pos);
        delay(50);
      }
      for (pos = 100; pos >= 0; pos -= 1)
      {
        myservo.write(pos);
        delay(50);
      }
    }
    funktioniert natürlich nicht, das blockiert die stepper. Aber das hier:

    Code:
    myservo.write(30);
    funktioniert schon, und auch mit dem gesetzten flag für den sweep. Möglichrweise wird der sweep-task ja auch 100x schnell hintereinander aufgerufen, das macht aber nix, weil ja der servo schon in der position ist, bzw. dorthin unterwegs...

    Ich denke ich könnte auch mehrere solche timer benutzen, oder? z.b. mit unterschiedlichen intervallen...
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Würde gehen.
    Aber eigentlich reicht einer-als "Tick" nimmst du halt die kürzesten Intervalle, die du brauchst.
    Und die zählst du einfach hoch, um auf längere zu kommen....
    Das hier ist der Timer vom XP2- der tickt jede Sekunde, zählt die aber auch hoch, so dass ich Intervalle von bis zu 20 Sekunden habe.
    So hab ich einmal den Sekunden-Takt (tick, tack, tick, tack) , aber eben auch nen 20-Sekunden-Takt (den man auch noch unterteilen könnte, wenn man will).
    mit intervallTimer=500 könnte man den auch jede halbe Sekunde ticken lassen, ganz wie man will.
    Du musst einfach nur den "kleinsten gemeinsamen Nenner" finden, und den dann als Basis benutzen.


    Code:
    void timer()  // ******************************** Bord-Schaltuhr ****************************************                
    {
      unsigned long aktuelleMillis = millis();  // Millisekunden auf den aktuellen Wert stellen
    
      if (aktuelleMillis - vorherigeMillis >= intervallTimer) // immer wenn 1000 Millisekunden um sind
      {
        akkuMessFlag=0;              //alle gemacht-Flags zurücksetzen
        serialFlag=0;
        lichtMessFlag=0;
        vorherigeMillis = aktuelleMillis;
        if(sekundeTick==0)          // Sekunde-Tick wechselt jede Sekunde zwischen 0 und 1
          {
            sekundeTick=1;
           
             
           }
         else
          {
            sekundeTick=0;
           }
        if(timerTick<20)            // Timer-Tick zählt hoch bis 20, und fängt dann wieder bei 0 an
        {
          timerTick++;
        }
        else
        {
          timerTick=0;
          
        }
        
      }
    }
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich habe mich jetzt ein paar tage mit den steppern, dem timing derselben, den unterbrechungen im ablauf durch das pingen nach hindernissen und ähnlichem zeug beschäftigt. Und bin zu dem resultat gekommen, dass ich aus einem vermeintlichen manko nun eine tugend mache

    Der roboter war ja von anfang an eher zu einem "gemächlichen" vorgehen und einem eher überlegten agieren konzipiert, nicht zu einem flitzer, bei dem es auf sekundenbruchteile ankommt bevor es kracht. Folgenden ablauf dachte ich mir werde ich anpeilen:

    - er schaut ob es in fahrtrichtung ein hindernis gibt, stellt fest wie weit die strecke hindernisfrei ist und fährt in normaler geschwindigkeit los

    - nach ca 2/3 der strecke, also ca in 1,5 metern schaltet er runter oder bleibt vielleicht sogar stehen und pingt noch einmal (ohne dass es zu problemen mit den unterbrechungen kommt) und in unterschiedlichen richtungen (evtl. dreht er sich auch um seine achse) und je nach ergebnis bzw. je nach den aufgaben fährt er weiter oder macht anderes...

    - das andere kann bestehen aus position über gyro messen, akkuspannung messen und per IR evtl. eine ladestation anpeilen, luftfeuchte messen, temperatur messen usw, usw, usw...

    - und je nach aufgabenstellung gehts dann weiter...

    Trotz dieses relativ selbständigen vorgehens werde ich auf einen zugriff von aussen nicht verzichten wollen, nun kommt Rabenauges fernbedienung ins spiel...
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Schnell fahren wird mit _den_ Antrieben sowieso nix- weder mit den Steppern (denke ich, meine Erfahrung mit den Dingern beschränkt sich bisher allerdings auf 3D-Drucker), aber auf keinen Fall mit solchen Rädern.
    Dafür sind die auch gar nicht konzipiert...

    Du hast halt zwei Flaschenhälse da: zum einen die ohnehin nicht superschnellen US-Sensoren (geht schon, aber es gibt einfach flotteres), und dann noch das Schwenken- Servos sind für nen Mikrocontroller, so was _richtig_ lahmes.
    Insofern halte ich deine geplante Strategie nicht für die schlechteste...wenn es partout nicht geht, die Stepper normal weiterlaufen zu lassen, während andere Dinge getan werden.

    Wobei das bestimmt möglich ist: mein Drucker schafft es ja auch, während die Motoren laufen, z.B. das Display zu aktualisieren oder die Temperatur zu überwachen.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Ähnliche Themen

  1. Abstandsmessung Outdoor bis 3m
    Von robo218 im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 14.12.2017, 06:56
  2. outdoor spy robot
    Von jancrombach im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 14.08.2010, 13:09
  3. Outdoor Roboter
    Von OsramLED im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 07.08.2006, 09:34
  4. Outdoor-Robo
    Von RobotrixerP im Forum Mechanik
    Antworten: 3
    Letzter Beitrag: 16.04.2006, 18:38
  5. Outdoor - Navigation
    Von Quaio im Forum Sensoren / Sensorik
    Antworten: 37
    Letzter Beitrag: 21.04.2005, 12:31

Berechtigungen

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

Labornetzteil AliExpress