- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 25 von 57 ErsteErste ... 15232425262735 ... LetzteLetzte
Ergebnis 241 bis 250 von 566

Thema: outdoor I

  1. #241
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Anzeige

    Powerstation Test
    Dauerbewegung nach nur einem Klick
    Wenn Du willst, dass das Teil immer vorwärts oder rückwärts ... fährt, dann geht das z.B. so:

    Code:
    // DIR und STEP pins definieren
    #define dirPin_VL 6 //2
    #define stepPin_VL 7 //3
    #define dirPin_HL 8 //4
    #define stepPin_HL 9 //5
    #define dirPin_VR 2 //6
    #define stepPin_VR 3 //7
    #define dirPin_HR 4 //8
    #define stepPin_HR 5 //9
    
    
    
    
    
    
    
    
    //enable pins definieren
    #define enbl_VL 40
    #define enbl_HL 42
    #define enbl_VR 41
    #define enbl_HR 43
    
    
    
    
    
    
    
    
    //resett pin definieren
    #define PIN2RESET 10
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //steps pro umdrehung definieren:
    #define stepsPerRevolution 200
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    uint8_t taste_neu = 1;
    uint8_t taste_alt = 8;
    uint8_t taste = 0;
    
    
    
    
    
    
    
    
    uint8_t s_vor = 0;
    uint8_t s_rueck = 0;
    uint8_t s_links = 0;
    uint8_t s_rechts = 0;
    
    
    void setup()
    {
      //  pinMode(LED, OUTPUT);
    
    
    
    
    
    
    
    
      //pins als output:
    
    
    
    
    
    
    
    
      pinMode(dirPin_VL, OUTPUT);
      pinMode(stepPin_VL, OUTPUT);
      pinMode(enbl_VL, OUTPUT);
      pinMode(dirPin_HL, OUTPUT);
      pinMode(stepPin_HL, OUTPUT);
      pinMode(enbl_HL, OUTPUT);
      pinMode(dirPin_VR, OUTPUT);
      pinMode(stepPin_VR, OUTPUT);
      pinMode(enbl_VR, OUTPUT);
      pinMode(dirPin_HR, OUTPUT);
      pinMode(stepPin_HR, OUTPUT);
      pinMode(enbl_HR, OUTPUT);
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      //resett pin zustand definieren
      pinMode(PIN2RESET, INPUT);
    
    
    
    
    
    
    
    
      Serial.begin(115200);
      Serial1.begin(115200);
      Serial.println("code----- /home/georg/Arduino/outdoor_robo/smartphone_steuerung/outdoor_moppi_FB_switch_bluetooth_1");
    
    
    
    
    
    
    
    
      Serial.println("bluetooth übertragung!");
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      //enable pins deaktivieren:
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
    
    
    
    
    
    
    
      //resett pin aktivieren
      digitalWrite(PIN2RESET, HIGH);
    }
    
    
    
    
    
    
    
    
    void loop()
    {
      if (Serial1.available())
      {
        taste = Serial1.read();
        Serial.println(taste);
        //    taste_neu = taste;
        tasten_abfrage();
      }
    
    
      richtung_abfrage();
    }
    
    
    
    
    
    
    
    
    /***********************************************************/
    void richtung_abfrage(void)
    {
      if (s_rechts == 1) rechts_drehen();
      if (s_links == 1) links_drehen();
      if (s_vor == 1) vorwaerts();
      if (s_rueck == 1) rueckwaerts();
    }
    
    
    
    
    
    
    
    
    /***********************************************************/
    void tasten_abfrage(void)
    {
    
    
    
    
    
    
    
    
      switch (taste)
      {
    
    
    
    
    
    
    
    
        case 100:// rotate rechts - FB quer smartphone
          {
    
    
    
    
    
    
    
    
            rechts_drehen();
    
    
    
    
    
    
    
    
            break;
          }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        case 97:// rotate links - FB quer smartphone
          {
    
    
    
    
    
    
    
    
            links_drehen();
    
    
    
    
    
    
    
    
            break;
    
    
    
    
    
    
    
    
          }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        case 116:// fahre vor - FB quer smartphone
          {
    
    
    
    
    
    
    
    
            vorwaerts();
    
    
    
    
    
    
    
    
            break;
          }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        case 115:// fahre rückwärts - FB quer smartphone
          {
    
    
    
    
    
    
    
    
            rueckwaerts();
    
    
    
    
    
    
    
    
            break;
          }
      }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    }
    
    
    
    
    
    
    
    
    /***********************************************************/
    void alle_stepper_stop(void)
    {
      //enable pins deaktivieren
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
      reboot();
    }
    
    
    
    
    
    
    
    
    /***********************************************************/
    void vorwaerts(void)
    {
      if(s_vor == 0)
      {
          // enable pins aktivieren:
          digitalWrite(enbl_VL, HIGH);
          digitalWrite(enbl_HL, HIGH);
          digitalWrite(enbl_VR, HIGH);
          digitalWrite(enbl_HR, HIGH);
    
    
    
    
    
    
    
    
          //richtung bestimmen
          digitalWrite(dirPin_VL, LOW);
          digitalWrite(dirPin_HL, LOW);
          digitalWrite(dirPin_VR, HIGH);
          digitalWrite(dirPin_HR, HIGH);
    
    
    
    
    
    
    
    
          s_vor = 1;
          s_rueck = 0;
          s_links = 0;
          s_rechts = 0;
      }
      else{
          digitalWrite(stepPin_VL, HIGH);
          digitalWrite(stepPin_HL, HIGH);
          digitalWrite(stepPin_VR, HIGH);
          digitalWrite(stepPin_HR, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin_VL, LOW);
          digitalWrite(stepPin_HL, LOW);
          digitalWrite(stepPin_VR, LOW);
          digitalWrite(stepPin_HR, LOW);
          delayMicroseconds(500);
      }
    }
    
    
    
    
    
    
    
    
    /**********************************************************/
    
    
    
    
    
    
    
    
    void rueckwaerts(void)
    {
      if(s_rueck == 0)
      {
          // enable pins aktivieren:
          digitalWrite(enbl_VL, HIGH);
          digitalWrite(enbl_HL, HIGH);
          digitalWrite(enbl_VR, HIGH);
          digitalWrite(enbl_HR, HIGH);
    
    
    
    
    
    
    
    
          //richtung bestimmen
          digitalWrite(dirPin_VL, HIGH);
          digitalWrite(dirPin_HL, HIGH);
          digitalWrite(dirPin_VR, LOW);
          digitalWrite(dirPin_HR, LOW);
    
    
    
    
    
    
    
    
          s_vor = 0;
          s_rueck = 1;
          s_links = 0;
          s_rechts = 0;
      }
      else{
          digitalWrite(stepPin_VL, HIGH);
          digitalWrite(stepPin_HL, HIGH);
          digitalWrite(stepPin_VR, HIGH);
          digitalWrite(stepPin_HR, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin_VL, LOW);
          digitalWrite(stepPin_HL, LOW);
          digitalWrite(stepPin_VR, LOW);
          digitalWrite(stepPin_HR, LOW);
          delayMicroseconds(500);
      }
    }
    
    
    
    
    /***********************************************************/
    void rechts_drehen(void)
    {
      if(s_rechts == 0)
      {
          // enable pins aktivieren
          digitalWrite(enbl_VL, HIGH);
          digitalWrite(enbl_HL, HIGH);
          digitalWrite(enbl_VR, HIGH);
          digitalWrite(enbl_HR, HIGH);
    
    
    
    
    
    
    
    
          //richtung bestimmen
          digitalWrite(dirPin_VL, LOW);
          digitalWrite(dirPin_HL, LOW);
          digitalWrite(dirPin_VR, LOW);
          digitalWrite(dirPin_HR, LOW);
    
    
    
    
    
    
    
    
          s_vor = 0;
          s_rueck = 0;
          s_links = 0;
          s_rechts = 1;
      }
      else{
          digitalWrite(stepPin_VL, HIGH);
          digitalWrite(stepPin_HL, HIGH);
          digitalWrite(stepPin_VR, HIGH);
          digitalWrite(stepPin_HR, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin_VL, LOW);
          digitalWrite(stepPin_HL, LOW);
          digitalWrite(stepPin_VR, LOW);
          digitalWrite(stepPin_HR, LOW);
          delayMicroseconds(500);
      }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    /**********************************************************/
    
    
    
    
    
    
    
    
    void links_drehen(void)
    {
      if(s_links == 0)
      {
          //enable pins aktivieren
          digitalWrite(enbl_VL, HIGH);
          digitalWrite(enbl_HL, HIGH);
          digitalWrite(enbl_VR, HIGH);
          digitalWrite(enbl_HR, HIGH);
    
    
    
    
    
    
    
    
          //richtung bestimmen
          digitalWrite(dirPin_VL, HIGH);
          digitalWrite(dirPin_HL, HIGH);
          digitalWrite(dirPin_VR, HIGH);
          digitalWrite(dirPin_HR, HIGH);
    
    
    
    
    
    
    
    
          s_vor = 0;
          s_rueck = 0;
          s_links = 1;
          s_rechts = 0;
      }
      else{
          digitalWrite(stepPin_VL, HIGH);
          digitalWrite(stepPin_HL, HIGH);
          digitalWrite(stepPin_VR, HIGH);
          digitalWrite(stepPin_HR, HIGH);
          delayMicroseconds(500);
          digitalWrite(stepPin_VL, LOW);
          digitalWrite(stepPin_HL, LOW);
          digitalWrite(stepPin_VR, LOW);
          digitalWrite(stepPin_HR, LOW);
          delayMicroseconds(500);
      }
    }
    
    
    
    
    
    
    
    
    /*
      void links_drehen(void) //mit beschleunigung und sound
      {
    
    
    
    
    
    
    
    
      //enable pins aktivieren
      digitalWrite(enbl_VL, HIGH);
      digitalWrite(enbl_HL, HIGH);
      digitalWrite(enbl_VR, HIGH);
      digitalWrite(enbl_HR, HIGH);
    
    
    
    
    
    
    
    
      //richtung bestimmen
      digitalWrite(dirPin_VL, HIGH);
      digitalWrite(dirPin_HL, HIGH);
      digitalWrite(dirPin_VR, HIGH);
      digitalWrite(dirPin_HR, HIGH);
    
    
    
    
    
    
    
    
      //"j = 2000": der Anfangswert für das Delay in Microsekunden
    
    
    
    
    
    
    
    
      for (int i = 0, j = 2000; i < stepsPerRevolution; i++)
      {
    
    
    
    
    
    
    
    
        //"j > 500": der Endwert für das Delay in Microsekunden - bestimmt auch die Endgeschwindigkeit (mindestens 250 bis 300)
    
    
    
    
    
    
    
    
        if (j > 300) j--;
        //"z < 3": wieviele Schritte mit dem eingstellten Delay "j" gemacht werden sollen, bevor es reduziert wird
    
    
    
    
    
    
    
    
        for (int z = 0; z < 3 && i < stepsPerRevolution; z++)
        {
          digitalWrite(stepPin_VL, HIGH);
          digitalWrite(stepPin_HL, HIGH);
          digitalWrite(stepPin_VR, HIGH);
          digitalWrite(stepPin_HR, HIGH);
          delayMicroseconds(j);
          digitalWrite(stepPin_VL, LOW);
          digitalWrite(stepPin_HL, LOW);
          digitalWrite(stepPin_VR, LOW);
          digitalWrite(stepPin_HR, LOW);
          delayMicroseconds(j);
          i++;
        }
      }
      }
    */
    /***********************************************************/
    void reboot()
    {
      pinMode(PIN2RESET, OUTPUT);
      digitalWrite(PIN2RESET, LOW);
      delay(100);
    }
    /***********************************************************/
    
    
    
    
    
    
    
    
    /************************************************************/
    Du hast da aber keinen Stop-Code drinnen, auf den Du reagieren kannst. Wenn der dann fährt, bleibt er nicht mehr stehen.
    Allerdings ist der Code so angelegt, dass Du die Chance hast, eine Taste zu drücken, wenn er fährt, also auch eine Stop-Taste.
    Die musst Du aber noch abfragen, weil noch nicht vorhanden!


    MfG

    - - - Aktualisiert - - -

    Eine Funktion zum Anhalten des Fahrzeugs, auf den obigen Code zugeschnitten. Sollte aufgerufen werden, wenn eine Stop-Taste gedrückt wird.

    Code:
    /***********************************************************/
    void anhalten(void)
    {
      //enable pins deaktivieren
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
      s_vor = 0;
      s_rueck = 0;
      s_links = 0;
      s_rechts = 0;
    }

  2. #242
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    ich glaube nun verstanden zu haben, wie es geht, danke...
    Jetzt werde ich die beiden methoden (IR und BT) als "quasi redundante" bedienmethoden unter einen hut bringen - beides ist mir nun geläufig, später kommt dann noch WiFi dazu - wer weiss was auf dem fremden planeten geht?
    gruß inka

  3. #243
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Guten Morgen!

    Ich will nochmals einen Vorschlag vertiefen.

    Es ist tatsächlich die beste Lösung, zunächst einen Ablaufplan zu erstellen.
    Noch ist so viel nicht im Programmcode drin. Jedenfalls nicht in diesem hier, wie eben besprochen.

    Ein einfach zu handhabendes Programm, um PAPs zu erstellen, findet man hier zum Download: https://www.heise.de/download/product/papdesigner-51889
    Bilder sagen mehr als Worte. Beispiel 1 und Beispiel 2 des Programms verdeutlichen, was ein PAp ist.

    1. Zuerst muss ein neues Projekt angelegt werden (Projekt -> neues Projekt erstellen).
    2. Daraufhin wird Start und Ende des PAP bereits vorgegeben.
    3. Auf der rechten Seite hat man einige Symbole zur Auswahl. Diese genügen, um einen PAP zu erstellen.
    4. Statt "Hauptprogramm 1" schreibt man z.B. "void loop()". Indem man den Schriftzug anklickt, öffnet man ein Menü, wo man den Text ändern kann.
    5. Um zu verdeutlichen, dass es sich bei "loop()" um eine Funktion/Methode handelt, die immer wieder aufgerufen wird - also in einer Schleife abgearbeitet wird, kann man das Symbol für "Schleife" rechts anklicken und es anschließend mit der Maus zwischen "Start" und "Ende" platzieren.
    6. Als Schleifenbedingung kann einfach "void loop()" eingetragen werden, damit klar ist, worum es sich bei der Schleife handelt.
    7. Zwischen den Symbolen für Schleifenanfang und das Schleifenende können nun weitere Symbole platziert und beschriftet werden. Es gibt fünf weitere Symbole, mit denen ein kompletter Programmablauf beschrieben werden kann, indem die Symbole angeklickt, dann platziert und beschriftet werden. Außerdem kann man dann Verbindungen zwischen den Symbolen herstellen, wo auch Pfeile angetragen werden, so dass die Flußrichtung zu erkennen ist.
    8. Um eine Verbindungslinie (Flußlinie) zwischen zwei Symbolen zu erstellen, klickt man zuerst das Symbol für "Verbindungspunkt bzw. Endpunkt einfügen" an. Danach klickt man ein Mal auf das Zielsymbol, dann bewegt man den Mauszeiger zum Symbol, von dem aus die Verbindung starten soll. Es erscheinen so kleine Vierecke mit Richtungsweisern in Grün, wenn man über ein Symbol fährt. Auf diese grünen Vierecke klickt man einmal drauf und es wird dann eine Verbindung in der gewünschten Richtung, zwischen den Symbolen gezogen. Man kann die Verbindungslinien noch beschriften, das ist z.B. bei Verzweigungen üblich, wo dann an jede Flußrichtung "ja" oder "nein" angetragen wird oder auch "wahr" oder "falsch", da eine Verzweigung durch eine Bedingungsprüfung erreicht wird (wie: "ist A > B ?").

    Mit diesen wenigen Handgriffen kann man sich nun ziemlich schnell und einfach seinen PAP erstellen.

    Welche Vorteile haben PAPs:

    - beim Erstellen, muss der Programmablauf (Logik) reflektiert werden, was zu einem besseren Verständnis des Programms schon während des Zeichnens führt
    - durch einfache und immer wiederkehrende Symbole wird eine Übersichtlichkeit und sehr gute Lesbarkeit erzeugt
    - anhand des Diagrammflusses (Linien/Verbindungen zwischen den Symbolen) kann leicht nachvollzogen werden, was das Programm tut, es fallen Fehler auf und Fehlverhalten in der Programmlogik kann leicht erkannt werden
    - einen PAP kann ein Programmierer in einen Programmcode übersetzen, wie C++
    - bei einem gut angelegten PAP, der dann auch aus mehreren Teil-PAPs besteht, werden auch große oder "kompliziertere" Projekte übersichtlich und die Programmlogik im Einzelnen gut nachvollziehbar
    - Fragen, wie: was tut dieser oder jener Programmteil (if .. while ..) können anhand eines PAP besser nachvollzogen werden, als man dies in Worten erklären kann.

    Hält man sich beim Programmieren dann an den PAP, kann so gut wie nichts mehr schief gehen.




    MfG

  4. #244
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    da ich linux (ubuntu) verwende, kommt leider der pap-designer für mich nicht in frage, habe aber yEd installiert, mal sehen, wie ich damit zurechtkomme...
    Ansonsten ist mir das mit den PAP's ja nicht neu, ist auch sinnvoll, klar...
    gruß inka

  5. #245
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Schau mal hier, Wine ist ein Emulator. Ich habe vor Jahren mal gehört, das soll unter Linux gut funktionieren.


    MfG

  6. #246
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    wine kenne ich, seit jahren schon ein mehr oder weniger schlechter ersatz für echtes windows. Es ist bei linux so, entweder es gibt was vergleichbares an software, oder halt nicht und damit kann man leben (seit 12 jahren schon), es kostet aber nix...
    gruß inka

  7. #247
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Als ich in den 90ern Linux installiert hatte, gab es nicht mal Treiber für Hardware, die ich brauchte. Deswegen bin ich dann bei Windows geblieben.
    Ist aber jetzt ab vom Thema.

    MfG

  8. #248
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Moppi Beitrag anzeigen
    Ein einfach zu handhabendes Programm, um PAPs zu erstellen, findet man hier zum Download: https://www.heise.de/download/product/papdesigner-51889
    @Moppi: Danke. Super! DAS ist ja mal ein Tipp. Habe schon öfter versucht ein PAP mit Zeichenprogrammen zu erstellen. Auch mal mit Visio. Immer abgebrochen weil mir das dann zu umständlich war. Dieses Programm hab ich mir mal runtergeladen und kurz ausprobiert. Läuft sogar noch auf WINXP, kommt mir praktisch und auch wirklich einfach vor. Damit sollte ich diesmal vielleicht doch endlich mehr/bessere Dokumentation zu meinen Programmen schaffen.

    @Inka: Ich mag zu sehen, was andere so basteln und lese eifrig mit.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  9. #249
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    ich habe jetzt mal eine frage betreffend microstepping und wollte wissen, was ihr so drüber denkt...

    Die extenderplatine für den steppertreiber hat ja einen 3poligen schiebeschalter on board, mit dem man - ohne strippen ziehen zu müssen - zwischen den verschiedenen microstep-modi umschalten kann. Allerdings ist sowas eher für den stationären betrieb gedacht, beim fahrenden roboter eher nicht gut machbar.
    Die frage:
    wäre es sinnvoll die schaltung von der extenderplatine zum arduino zu führen um dann vom smartphone auch "unterwegs" mal umschalten zu können? Alle motoren auf einmal, oder einzeln?
    gruß inka

  10. #250
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Im Datenblatt steht, übersetzt mit goggle:

    Beim Ändern der Stufe
    Modus Die Änderung wird erst mit dem nächsten Schritt wirksam
    Kante.
    Wenn der Schrittmodus ohne Zurücksetzen des Übersetzers geändert wird, und absolut
    Position muss beibehalten werden, es ist wichtig, die zu ändern
    Schrittmodus an einer Schrittposition, die beiden Schrittmodi in gemeinsam ist
    um fehlende Schritte zu vermeiden.
    Die MAx-Geschwindigkeit, wie ich schon mal erwähnt habe, erreichst Du glaub ich nur im Full-Step-Mode.
    Den Step-Mode musst Du dann bei allen Motoren gleichzeitig ändern. Sonst drehen die ja unterschiedlich schnell.

    MfG

Seite 25 von 57 ErsteErste ... 15232425262735 ... LetzteLetzte

Ä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. [ERLEDIGT] 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