- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: Start mit Arduino?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    Hallo Rabenauge,

    danke erstmal für die ausführlichen Erläuterungen. Sehr aufschlussreich...

    das mit dem Servo muss ja nicht sofort sein, es reicht wenn der US-Sensor erstmal nach vorne ausgerichtet ist...

    Ich möchte ja im Prinzip erstmal mit Bewegungen und Kollisionsvermeidung anfangen. Sainsmart bietet ein Kit, welches diese Anforderungen abdecken würde. Könntest Du Dir das bitte noch einmal anschauen?

    Was mich dort irritiert ist: Die bieten 4 Getriebemotoren an und nur ein Motorshield (es gehen nur zwei Motoren / Shield, oder habe ich es missverstanden?), an dem Foto sieht man aber 4 Ausgänge (zu den Motoren?). Auch scheint dieses Ding nicht steckbar zu sein?

    noch eine Frage: Wäre ein Buch zu Arduino sinnvoll, oder soll/ kann ich mir das alles im Internet anlesen?
    Gruß ahave

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    hallo,

    ich habe die Teile nun bekommen, zusammengebaut und mache jetzt die ersten Tests mit den Motoren allein. Bei diesem code, den ich im Netz gefunden habe
    Code:
    #include <AFMotor.h>
    
    
    //declaring the pins for the IN pins on the L298N
    const int rightForwardPin = 6;//4;
    const int rightBackwardPin = 7; //2;
    const int leftBackwardPin = 8; //7;
    const int leftForwardPin = 9; //5
    
    int runTime = 5000;
    
    void setup() {
      //Stating that the pins are OUTPUT
      pinMode(rightForwardPin, OUTPUT);
      pinMode(rightBackwardPin, OUTPUT);
      pinMode(leftForwardPin, OUTPUT);
      pinMode(leftBackwardPin, OUTPUT);
    }
    
    //Looping to test the wheels of the car
    void loop() {
    
      forward();
     
      stopCar();
     
      backward();
     
      stopCar();
     
      left();
     
      stopCar();
     
      right();
     
      stopCar();
    }
    
    //Setting the wheels to go forward by setting the forward pins to HIGH
    void forward(){
      digitalWrite(rightForwardPin, HIGH);
      digitalWrite(rightBackwardPin, LOW);
      digitalWrite(leftForwardPin, HIGH);
      digitalWrite(leftBackwardPin, LOW);
      delay(runTime);
    }
    
    //Setting the wheels to go backward by setting the backward pins to HIGH
    void backward(){
      digitalWrite(rightForwardPin, LOW);
      digitalWrite(rightBackwardPin, HIGH);
      digitalWrite(leftForwardPin, LOW);
      digitalWrite(leftBackwardPin, HIGH);
      delay(runTime);
    }
    
    //Setting the wheels to go right by setting the rightBackwardPin and leftForwardPin to HIGH
    void right(){
      digitalWrite(rightForwardPin, LOW);
      digitalWrite(rightBackwardPin, HIGH);
      digitalWrite(leftForwardPin, HIGH);
      digitalWrite(leftBackwardPin, LOW);
      delay(runTime);
    }
    
    //Setting the wheels to go left by setting the rightForwardPin and leftBackwardPin to HIGH
    void left(){
      digitalWrite(rightForwardPin, HIGH);
      digitalWrite(rightBackwardPin, LOW);
      digitalWrite(leftForwardPin, LOW);
      digitalWrite(leftBackwardPin, HIGH);
      delay(runTime);
    }
    
    //Setting the wheels to go stop by setting all the pins to LOW
    void stopCar(){
      digitalWrite(rightForwardPin, LOW);
      digitalWrite(rightBackwardPin, LOW);
      digitalWrite(leftForwardPin, LOW);
      digitalWrite(leftBackwardPin, LOW);
      delay(1000);
    }
    passiert ja nun noch nicht sehr viel. Der Roboter soll vorwärts fahren, halten, rückwärts fahren, auf der Stelle drehen usw. So weit so gut...

    stelle ich ihn hoch, so dass die Räder frei durchdrehen können, ist alles ok, wenn er auf dem Boden steht, fährt er nur vor und zurück und wenn er drehen soll, zuckt er nur kurz in die Richtung in die er drehen soll. Im hochgebockten Zustand lassen sich auch die Räder relativ leicht mit der Hand anhalten - also ich hätte mehr "Power" erwartet...
    Der Akku ist vollgeladen, hat 6xAA Zellen, 2000mAh...

    woran kann das Liegen? Ich meine ich habe alles richtig verdrahtet...

    könnte mir bitte jemand einen Tipp geben woran es liegen könnte?
    Gruß ahave

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Am Programm.
    Glaub ehrlich gesagt nicht, dass das zu deinem Motorshield überhaupt passt.
    Das "alte" Motorshield erwartet nämlich auch PWM-Werte-in deinem "Programm" da seh ich nirgends sowas wie eine Drehzahlvorgabe.
    WENN du das weiter oben genannte Motorshield hast (das Ding von Sainsmart, V 1.2 oder so) dann probiere mal das Programm unter Beispiele, AfMotor-> MotorTest.
    Das Beispielprogramm zeigt sehr einfach, wie so nen Motor mit _diesem_ Shield angesteuert bzw. programmiert wird.
    Ist kinderleicht auf alle vier Motoren zu erweitern.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    hallo Rabenauge,

    Du meinst sicher dieses Programm:
    Code:
    #include <AFMotor.h>
    
    // Adafruit Motor shield library
    // copyright Adafruit Industries LLC, 2009
    // this code is public domain, enjoy!
    
    AF_DCMotor motor(4);
    
    void setup() {
      Serial.begin(9600);           // set up Serial library at 9600 bps
      Serial.println("Motor test!");
    
      // turn on motor
      motor.setSpeed(200);
     
      motor.run(RELEASE);
    }
    
    void loop() {
      uint8_t i;
      
      Serial.print("tick");
      
      motor.run(FORWARD);
      for (i=0; i<255; i++) {
        motor.setSpeed(i);  
        delay(10);
     }
     
      for (i=255; i!=0; i--) {
        motor.setSpeed(i);  
        delay(10);
     }
      
      Serial.print("tock");
    
      motor.run(BACKWARD);
      for (i=0; i<255; i++) {
        motor.setSpeed(i);  
        delay(10);
     }
     
      for (i=255; i!=0; i--) {
        motor.setSpeed(i);  
        delay(10);
     }
      
    
      Serial.print("tech");
      motor.run(RELEASE);
      delay(1000);
    }
    meine verdrahtung sieht folgendermaßen aus:

    - zwei Motorshields L298N von Sainsmart. Zwei deshalb, weil ich später jedes Rad einzeln mit den sog. "Momentumwheels" einsetzetn möchte...


    - die Jumper auf den Motorshields verbinden jeweils 5V und ENA bzw. 5V und ENB (wie geliefert)

    - Motor LV angeschlossen an Shield-1 OUT3/4
    - Motor RV angeschlossen an Shield-1 OUT1/2
    - Motor LH angeschlossen an Shield-2 OUT3/4
    - Motor RH angeschlossen an Shield-1 OUT1/2

    die beiden Motorshields sind paralell am Akku angeschlossen über GND und VCC

    da ich dem Programm nicht entnehmen konnte über welche der unzählicen Pins des Megaboards die Motorshields angesteuert werden sollen haben ich rumprobiert, mit folgendem Ergebnis:

    Pin 8 (Digital) des Sensorshields V5 (aufgesteckt am megaboard) ist verbunden:

    - mit Shield-1-IN1 - der Motor RH dreht in Fahrtrichtung gesehen Rückwärts
    - mit Shield-1-IN2 - der Motor RH dreht in Fahrtrichtung gesehen Vorwärts
    - mit Shield-1-IN3 - der Motor LH dreht in Fahrtrichtung gesehen Rückwärts
    - mit Shield-1-IN4 - der Motor RH dreht in Fahrtrichtung gesehen Vorwärts

    entsprechend verhält es sich bei den Motoren VL und VR beim Anschluss an Motorshield-2.



    ich kann daraus nur schließen, dass allle vier Motoren richtig verdrahtet sind, woran erkenne ich aber aus dem code warum der Pin 8 jetzt angesteuert wird?

    ach so, noch etwas:

    beim ablauf des Programms dreht Motor RH mit Pausen Rückwärts (Verbindung Pin8 mit Shield-1-IN1), im serialmonitor wird dicht an einander "ticktocktech" ausgegeben. Von den anderen Programmsequenzen mit z.B. Beschleunigen oder Richtungswechsel keine Spur...

    ich muss zugeben dass verwirrt mich etwas
    Gruß ahave

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Hättste das Motorshield aus deiner vorherigen Einkaufsliste genommen...
    Erstens _kenne_ ich das Ding (benutz es selber ab und an), zweitens kann es mehr. Ok: es blockiert mehr Pins aber beim Mega...der hat noch lange genug.
    Und: das Shield bekommste ungefähr für den Preis eines deiner Treiberdinger da...und das steuert dir deine vier Motoren auch an.

    Bei den Reviews steht übrigens, dass so manch einer wohl mit diesen Dingern seine Probleme hat.

    Aber gut-du hast die Dinger nunmal da und funktionieren wirds schon.
    Allerdings wird dir die AFMotor nun mal gar nix nützen, schätze ich.

    Also:
    Hast du ne ANLEITUNG (bitte nicht irgendwelches Internetgesülz, sondern wenns geht vom Hersteller) zu dem Ding?? Mir schwant da nämlich was, aber ich würd gerne dazu nen Anschlusschema sehn.
    Hast du _irgendeine_ Beispielsoftware dafür? Bibliothek, Beispielprogramm...
    Während du antwortest, such ich mal, was ich von Sainsmart so an Dokumenten da hab-vielleicht ist was zu dem Ding bei...

    Und nochwas: vergiss mal das zweite der Dinger für eine Weile- wir bringen _eines_ davon zum laufen, alles andere fangen wir gar nich an.
    Wenn das eine läuft, kümmern wir uns um Nummer 2 (mir schwant auch da noch ne Kleinigkeit)...

    So, Nachtrag.
    Ich hab mir mal das Beispiel-ähhh-Programm von Sainsmart besorgt.
    Mehr an Doku hat der Laden offenbar nich zu dem Ding aber:
    Code:
    /SainSmart L298N
    
    int pin1=8; 
    
    int pin2=9;
    
    int speedpin1=11; 
    
    int pin3=6; 
    
    int pin4=7; 
    
    int speedpin2=10; 
    
    void setup()
    
    {
    
    pinMode(pin1,OUTPUT); 
    
    pinMode(pin2,OUTPUT);
    
    pinMode(speedpin1,OUTPUT);
    
    pinMode(pin3,OUTPUT);//
    
    pinMode(pin4,OUTPUT);
    
    pinMode(speedpin2,OUTPUT);
    
    }
    
    void loop()
    
    {
    
    digitalWrite(speedpin1,100); 
    
    delay(2000);
    
    digitalWrite(pin1,LOW);
    
    digitalWrite(pin2,HIGH);
    
    digitalWrite(pin3,LOW);
    
    digitalWrite(pin4,HIGH);
    
    digitalWrite(speedpin2,100);
    
    delay(2000);
    
    digitalWrite(pin1,HIGH);
    
    digitalWrite(pin2,LOW);
    
    digitalWrite(pin3,HIGH);
    
    digitalWrite(pin4,LOW);
    
    digitalWrite(pin1,HIGH);
    
    digitalWrite(pin2,HIGH);
    
    digitalWrite(pin3,HIGH);
    
    digitalWrite(pin4, HIGH)
    
    delay(2000);
    
    }
    Probier den mal aber setz die Jumper richtig (nein, ich weiss nicht, wie..)
    Geändert von Rabenauge (10.06.2014 um 18:31 Uhr)
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    eigentlich ja, es lief gut, aber beim Nachschauen habe ich festgestellt, dass die Pins 0 und 1 mit RX/TX gekennzeichnet waren, habe es nun auf die Pins 2-13 verschoben, alle mit PWM...

    danke für den tipp..
    Gruß ahave

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    Also, ich habs jetzt bestellt . Direkt bei sainsmart, also nicht über ebay, war sogar noch billiger, weil in $ bestellt und in € bezahlt. Mal sehen welche Lieferzeiten die haben...

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Wenns auch von China kommt, ist es nicht schneller..aber du hast nen paar Jahre ohne das Teil verbraucht, was machen da nen paar Tage.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    21.05.2014
    Alter
    56
    Beiträge
    25
    ja, es läuft, zumindest ansatzweise...

    aber das "Kratzen am Kopf" lässt nicht lange auf sich warten. Ich habe den Code für die Beschleunigung für zwei Motoren erweitert:
    Code:
        /*
          L298N Test Code w/ Speed Control
          hacker.instanet.net
          Tim Laren timl@instanet.com
          This example code is in the public domain.
         */
    
        #define OUT1PIN1 2    // H-bridge OUT1.1
        #define OUT1PIN2 4    // H-bridge OUT1.2
        #define ENABLE1  3    // H-bridge Ena 1
        #define OUT2PIN3 7    // H-bridge OUT2.3
        #define OUT2PIN4 8    // H-bridge OUT2.4
        #define ENABLE2  6    // H-bridge Ena 2
    
        void setup() 
        {
          // setup Motor 1 pins
          pinMode(OUT1PIN1, OUTPUT);
          pinMode(OUT1PIN2, OUTPUT);
         
          // setup Motor 2 pins
          pinMode(OUT2PIN3, OUTPUT);
          pinMode(OUT2PIN4, OUTPUT);
        }
    
        void loop() 
        {
          //Motor_1
          digitalWrite(OUT1PIN1, LOW);   // set leg 1 of the H-bridge low
          digitalWrite(OUT1PIN2, HIGH);  // set leg 2 of the H-bridge high
          digitalWrite(OUT2PIN3, LOW);   // set leg 3 of the H-bridge low
          digitalWrite(OUT2PIN4, HIGH);  // set leg 4 of the H-bridge high
          Ramp(ENABLE1,0,255,1,10);
          Ramp(ENABLE2,0,255,1,10);
          //Motor_2
          digitalWrite(OUT1PIN1, HIGH);  // set leg 1 of the H-bridge high
          digitalWrite(OUT1PIN2, LOW);   // set leg 2 of the H-bridge low
          digitalWrite(OUT2PIN3, HIGH);  // set leg 3 of the H-bridge high
          digitalWrite(OUT2PIN4, LOW);   // set leg 4 of the H-bridge low
          Ramp(ENABLE1,255,0,-1,10);
          Ramp(ENABLE2,255,0,-1,10);
    
        }
    
        void Ramp(int Motor, int Start, int End, int Inc, int Del) 
        {
          /* Ramps from PWM of Start to End
             adding Inc each time
             delay of Del MS each time thru the loop
          */
          for(int i=Start;i<End;i = i + Inc) 
          {
            analogWrite(Motor, i);       // Motor 1 Speed
            delay(Del);
          }
        }
    zumindest laufen beide Motoren. Allerdings versetzt - wenn Du verstehts was ich meine. Ich ahne, dass es zum einen mit dem delay in der Ramp-Funktion hat. Habe aber keine Ahnung wie ich das angehen soll? Zum Anderen evtl. an den getrennten Aufrufen dieser Funktion für links/rechts. Muss ich die Funktion irgendwie für beide Motoren ändern/erweitern, oder ist da evtl. noch ein logischer Fehler?

    ich habe schon alls Mögliche in der Reihenfolge der Befehlszeilen zu verändern versucht - das hier ist noch das beste Ergebnis - nur so fährt kein Roboter...

    schaus Du bitte mal drüber?
    Gruß ahave

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Habs mir mal in die IDE gezerrt-liest sich da einfach besser.
    Klar laufen die beiden Motoren nacheinander, denn die Funktion Ramp() enthält ne Schleife.
    Heisst: die wird erstmal _komplett_ durchlaufen, ehe das Hauptprogramm weiter läuft.
    Somit wird Motor1 erstmal hochlaufen gelassen, und _dann_ wird das Spiel mit Motor2 wiederholt.

    Mal ehrlich: ich kenn den Typen nicht, der das Programm geschrieben hat und will auch nix schlechtes sagen, aber das ist bisschen scheusslich gecodet.

    Und zu dir: nen paar Grundlagen wären von Vorteil- hättest du die, wärst du da selber drauf gekommen, dass das delay() in der Funktion Ramp _nicht_ das eigentliche Übel ist.
    Das delay beträgt 10ms- das ist nötig, damit der Motor überhaupt den jeweiligen Wert erstmal erreichen kann (von Null auf hundert kann auch nen Elektromotor nich)- kannst du ausprobieren: verändere den Wert mal und guck zu, wie die Rampe langsamer oder schneller durchlaufen wird.
    Im Prinzip funktioniert das hochlaufen ohne das delay() auch- aber möglicherweise nicht ganz korrekt, eben weil zu schnell hochgeregelt wird. Praktisch beim fahren (meistens) recht egal, aus technischer Sicht aber korrekt umgesetzt.

    so ganz blick ich das Chaos mit den Pins nicht- die ENABLE-Pins steuern die PWM, das ist klar aber:
    Welche Pins steuern welchen Motor?

    Das ist, dank der chaotischen Namen, nicht rauszulesen.

    Tante Edit fügt hinzu: ok, ich habs.

    Lesen muss man können-steht doch drin. Wenn wir aber hier weiter basteln, ändern wir da nen paar Namen _sinnvoll_.

    Ich hab dir mal die Zuweisung der Motoren _in_ die Schleife gepackt, somit sollten die beiden Motoren synchron* laufen nun, und zwar beide erst hoch, dann wirder runter:

    Code:
    #define OUT1PIN1 2    // H-bridge OUT1.1
        #define OUT1PIN2 4    // H-bridge OUT1.2
        #define ENABLE1  3    // H-bridge Ena 1
        #define OUT2PIN3 7    // H-bridge OUT2.3
        #define OUT2PIN4 8    // H-bridge OUT2.4
        #define ENABLE2  6    // H-bridge Ena 2
    
        void setup() 
        {
          // setup Motor 1 pins
          pinMode(OUT1PIN1, OUTPUT);
          pinMode(OUT1PIN2, OUTPUT);
         
          // setup Motor 2 pins
          pinMode(OUT2PIN3, OUTPUT);
          pinMode(OUT2PIN4, OUTPUT);
        }
    
        void loop() 
        {
          //Motor_1
          digitalWrite(OUT1PIN1, LOW);   // set leg 1 of the H-bridge low
          digitalWrite(OUT1PIN2, HIGH);  // set leg 2 of the H-bridge high
          digitalWrite(OUT2PIN3, LOW);   // set leg 3 of the H-bridge low
          digitalWrite(OUT2PIN4, HIGH);  // set leg 4 of the H-bridge high
          Ramp(0,255,1,10);
     /*     Ramp(ENABLE2,0,255,1,10);
          //Motor_2
          digitalWrite(OUT1PIN1, HIGH);  // set leg 1 of the H-bridge high
          digitalWrite(OUT1PIN2, LOW);   // set leg 2 of the H-bridge low
          digitalWrite(OUT2PIN3, HIGH);  // set leg 3 of the H-bridge high
          digitalWrite(OUT2PIN4, LOW);   // set leg 4 of the H-bridge low */
          Ramp(255,0,-1,10); 
     //     Ramp(ENABLE2,255,0,-1,10);
    
        }
    
        void Ramp(int Start, int End, int Inc, int Del) 
        {
          /* Ramps from PWM of Start to End
             adding Inc each time
             delay of Del MS each time thru the loop
          */
          for(int i=Start;i<End;i = i + Inc) 
          {
            analogWrite(ENABLE1, i);       // Motor 1 Speed
            analogWrite(ENABLE2,i);      // Motor 2 Speed
            delay(Del);
          }
        }
    ,

    Sag mir bitte, ob das so funktioniert, ich hab das mal eben in ner Minute umgeschustert.
    Falls es das tut: deine Geschichten hab ich nur auskommentiert, du solltest also recht einfach sehen, _was_ ich geändert hab. Verstehst du, warum?
    Geändert von Rabenauge (11.06.2014 um 22:43 Uhr)
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] [ARDUINO] 2 Motoren + Servo mit dem Arduino Uno steuern
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 16:31
  2. Problem mit Start/Stop Taster
    Von Zizibee im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 22.04.2010, 10:09
  3. Antworten: 7
    Letzter Beitrag: 15.06.2009, 16:30
  4. Start mit Programmsprache C??
    Von Pilotzi im Forum PIC Controller
    Antworten: 14
    Letzter Beitrag: 29.02.2008, 13:40
  5. [ERLEDIGT] Simulator start mit ad port
    Von der noob im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 17.08.2004, 12:14

Berechtigungen

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

Solar Speicher und Akkus Tests