Motorsteuerung mit einem H-Bridge IC

Made with Fritzing.org

Made with Fritzing.org

H-Bridge steuert einen Motor

Da eine selbst gebaute H-Bridge relativ viele Teile benötigt, bietet es sich an, einen IC zu verwenden. Gängiges Modell ist der L293D, der zwei Motoren unabhängig von einander steuern kann. Es handelt sich um einen IC im DIL16 Gehäuse, d.h. er hat 16 Beinchen.

Auf einer Platine werden die inneren Beinchen (Pin 4,5,12,13) mit dem GND verbunden und dienen der Wärmeableitung. Auf dem Breadboard muss nur eines der vier mit dem GND verbunden werden.

Im Beispiel werden zwei Motoren vom Arduino gesteuert. Der Strom kommt aus einer Batterie. Natürlich kann hier auch Netzteil verwendet werden. Wenn es sich um kleine Motoren handelt (z.B. Vibrationsmotoren), können diese auch direkt vom Arduino mit Strom versorgt werden. Hierfür muss in der Schaltung lediglich das orange Kabel an der H-Brigde mit dem 5V+ verbunden werden.

Die H-Bridge L293D hält einen kurzzeitigen Strom von 1,2 A und einen dauerhaften Storm von 600 mA pro Kanal aus.

Ein großer Vorteil der L293D sind die integrierten Dioden, die Induktionsströme abfangen, die beim Nachdrehen des Motors entstehen.

Sollten höhere Ströme erreicht werden, sollte man auf die Verwendung eines alternativen ICs zurückgreifen. Hier bietet sich z.B. der L6205N an.

Ein Beispielcode:

87 Comments

  1. stefan

    hi stefan,
    habe heute versucht deinen aufbau oben nachzubauen, hat erst nicht geklappt… Pin 3 und 6 waren immer tod.

    was fehlte war eine verbindung vom pin 16 des L293D zu +5V. dann hat alles geklappt.

    kannst du das bestätigen, oder funktionierts bei dir auch ohne pin 16 auf +5V?

  2. Stefan*

    Hallo Stefan,

    vielen Dank für den Hinweis. Ja, ich kann das bestätigen. Der Pin 16 wird (soweit ich es verstanden habe) für die interne Stromversorgung des ICs verwendet …

    Liebe Grüße

  3. Thomas

    Hallo

    Ich benötige für ein Projekt Motoren, die in beide Drehrichtungen über ein pwm signal gesteuert werden können.

    Wenn ich die Schaltung oben richtig verstanden habe, dann kann mit pin 21 die Drehrichtung des Motors und mit pin 5 (pwm) die Geschwindigkeit gesteuert werden.

    Ist das richtig so?

    Danke und Grüsse
    Thomas

  4. Rainer

    Hallo Stefan,
    auf der „Fritzing-Projektseite“ gibt es eine H-Bridge-Schaltung mit Umschaltung für die Drehrichtung und Drehzahlregelung. Die habe ich mit einem L293NE (externe Dioden) nachgebaut. Im Prinzip funktioniert alles. Bis auf eine Kleinigkeit… Der Motor bekommt in einer Drehrichtung ca. 0,5V mehr Spannung als in die andere Richtung.
    Kannst Du mir einen Tip geben woran das liegen kann? Verdrahtung und Dioden sind in Ordnung.
    Grüße, Rainer

  5. Stefan

    Hallo Stefan,

    habe Interesse an der Motorsteuerung mit einem H-Bridge IC, bzw. auch wie der Quell Code dazu aussieht.

    Besten Dank vorab.

    Gruss Stefan

  6. Stefan (noch einer ;)

    Ich kicke mich schon seit Tagen durch deine Seite (habe mir just einen UNO gekauft) und wollte sagen das ich deine Arbeit wirklich zu schätzen weiss und viel lerne!

    —> DANKE!

  7. Gerd Lobmeyer

    Hallo Stephan,
    habe heute Deine Schaltung mit einem L293D nachgebaut. Bin sehr froh über so viel Anleitung, die hier zu finden ist. Ich fange aber erst an mit dem Arduino und bin mir noch komplett unsicher in der Programmierung.
    Kann man den Code für diese Schaltung irgendwo bekommen?
    Vielen Dank
    Grüsse Gerd

  8. Sven

    Hallo,

    habe die Schaltung mal an einem Funkfernlenkauto-Motor angeschlossen. Dieser zieht ca. 200 mA Strom bei direkten Anschluss an 4 Akku-Babyzellen (4,8 V).

    Laut Multimeter liegen mit der Schaltung aber nur noch knapp 1 V an und Stromspitzenwerte von 0,6 A.

    Ich habe momentan keine Idee woran es liegen könnte.

    Gruß

  9. Matthias

    Hallo,

    erstmal Danke für dein tolles Tutorial :D

    Ich würde gerne deine Schaltung nachbauen, bin mir bei der Auswahl des Motors aber unsicher.
    Darf der Motor maximal eine Nennspannung von 5V und einen Strom bei max. Wirkung von 0,6A besitzen?
    (Bei Stromversorgung über den Arduino)

    Ich finde bis jetzt nur extrem kleine Mikromotoren, die diesen Anforderungen gerecht werden.

    Gruß Matthias

  10. LarsE

    Hi Stefan
    Vielen Dank an dieser Stelle für deine ganzen Tutorials. Hab vieles davon schon nachgebaut und ausprobiert und komme meinem Vorverstärker immer näher.
    Jetzt stehen schon Eingangswahlschalter, Lautstärkeregelung und Infrarot-Fernbedienung und einiges davon hab ich von deiner Seite bezogen.
    Mach bitte weiter so. Viele andere Tutorials sind leider nur auf english. Das kann ich zwar gut genug um beim 2. lesen alles zu verstehen, aber es ist so viel mühsamer ;)
    Gruss
    Lars

  11. Robert

    Hallo,

    dein Tutorial ist genau das was ich suche.

    Jedoch reicht die Leistung die deine H-Brücke bringt nicht ganz aus.

    Betreiben möchte ich einen Lego 5292 Motor (höchstmögliche Stromaufnahme (Per Hand festhalten) liegt bei 3 A). So extrem werde ich ihn wahrscheinlich nicht belasten, aber da der L293D maximal 1,2A und dauerhaft 0,6A angegeben ist, werde ich wohl auf was größeres ausweichen müssen.

    Hast du eine Ahnung, ob es diese Brücke auch in einer größeren Ausführung gibt, der meinen Leistungen gerecht wird?

    Gruß

    Robert

  12. Mark

    Hallo, vielen Dank für deine coolen Tutorials, mir haben sie bisher schon viel geholfen, wieder in das Thema zurückzukommen :-)

    Ich experimentiere derzeit an einer Motorsteuerung in Verbindung mit einem Distanzsensor. Mir ist beim Testen aufgefallen, dass in deinem Beispiel die fadeValue bei meiner Tamiya Getriebebox (Dual) die Motor bei einem Wert von > ~130 auf voller Leistung einschaltet, sich darunter gar nichts tut. Hast du eine Idee oder ist das eventuell vom Motor-Typ abhängig?

    Vielen Dank!
    Mark

  13. Mark

    Danke, Fehler gefunden, ich hatte die Geschwindigkeit auf den Nicht-PWM Pin gemappt. Alles Super :-)

  14. Jasper

    Wenn ich 2 Motoren anschließen möchte und eine externe Stromquelle benutzte muss der Pin 16 dann auch an die (12V) der Batterie ????

  15. MindCode

    Hallo,

    habe hierzu direkt mal eine Frage:
    Kann ich mit diesem L293D IC bei den beiden
    Motoren auch jeweils die Drehrichtung schalten?
    Also wntweder Links, oder Rechts und zwar Unabhängig?

  16. ! 0o

    Ich hätte zum Thema Motoransteuerung auch mal eine Frage: Wie findet man denn einen passenden Motor? Worauf muss man achten? Würde meiner Meinung nach gut zu den Ansteuerungs-Artikeln passen.

    Konkret zB für mich: Welche (günstigen DC-) Motoren würde in Verbindung mit der oben genannten H-Bridge einen Asuro-ähnlichen Roboter vernünftig fahren lassen können?

    Ich als elektronisch nur leicht vorgebildeter Laie steh bei solchen Entscheidungen leider total auf dem Schlauch und es lassen sich leider auch fast keine einfach nachvollziehbaren Ressourcen dafür finden. Wieviel Volt, wieviel Ampere, welche Drehzahl wäre sinnvoll? Gibt ja leider ein Meer an Angeboten..

    Ein Artikel dazu würde das Thema hier meiner Meinung nach wirklich sehr gut ergänzen. Und ein großes Lob auch an euch, ihr erklärt die Dinge wirklich sehr verständlich.

    lg

  17. @! 0o: Das ist eine super Idee. Leider ist die Frage nach den richtigen Motoren nicht schnell beantwortet, aber ich packe es auf die Liste. Vielen Dank für die Anregung.

  18. Sebastian

    Hallo, erst mal vielen Dank für die ausführliche Webseite.
    Ich habe eine Frage zu der Motorsteuerung. Allerdings benutze ich das Arduino Motorshield. Das externe Netzteil habe ich auf 9V eingestellt. Am Ausgang messe ich auhc gute ~7,9V. Am Motor selber jedoch plötzlich 12 und mehr. Bei 12V mit dem Netzteil bis zu 18/20V.
    Wieso?

  19. @Sebastian: Das kann ich mir ehrlich gesagt auch nicht erklären. Hast Du das Netzteil mal ohne Arduino gemessen? Manchmal geben die mehr Spannung aus, als drauf steht.

  20. Johannes

    Hi Stefan,
    ich hab ne Schaltung im Netz gefunden und hätte eine Frage an den Experten.
    Muss ich,wenn ich die Eingänge des L293D (Pin2 und Pin7) mit einem µ-Controller beschalte diese mit Vorwiderständen versehen?
    Zur Spannungsbegrenzung? Macht für mich keinen Sinn, da die Eingänge ja 7V vertragen!
    Besten Dank,
    Gruß Johannes

  21. rapper98

    hi ich bin es schon wieder
    kann man mit der Steuerung den motor auch links und rechts drehen oder ist dies nicht möglich?
    mfg rapper98

  22. Klaus

    Hallo Stefan,

    danke erstmal für die tollen Anleitungen.
    Nun hätte ich jedoch noch weitere Fragen.

    Wie steuere ich am besten 8 Motoren (PC-Lüfter) mit dem Arduino Board, also jeden für sich regelbar in Drehrichtung und Geschwindigkeit?
    Falls die Lüfter „Gegenwind“ bekommen würden, wie kann ich diese el. schützen, falls das überhaupt nötig ist?

    Gruß Klaus

  23. @Klaus: Probier erstmal aus, ob sich die Lüfter überhaupt anders herum drehen lassen. Manche Lüfter können das nicht. Wenn sie sich nur in einer Richtung drehen lassen sollen könntest Du die Lüfter mit einem TLC5940 (»erweitert« das Arduino um 16 PWM Outputs) und jeweils einem FET als Verstärker pro Kanal betreiben. Parallel zu jedem Motor muss dann eine Fly-By Diode (in Sperrichtung) geschalten werden. Ansonsten nimmst Du anstatt der FETs vier L293D und benutzt den TLC5940 invertiert am Enabled-Pin. Nicht ganz trivial, aber so würde ich das ausprobieren.

  24. Klaus

    Hallo Stefan,
    danke für die schnelle Antwort!
    Da ich absoluter Anfänger bin in dieser Materie, weiss ich nun zumindest schon mal, wie ich mich weiterinformieren muss.
    Ich habe mir die Lüfter nochmal genau angesehen.
    Diese haben 4 Anschlußkabel. +,-,eins ist dann wahrscheinlich noch ein Tacho und das andere ein PWM-Anschluß. Es könnte aber auch ein Busanschluß dabei sein. Die Lüfter drehen sich jedenfalls auch in die andere Richtung wenn ich + und – vertausche.

    Fly-By-Diode ist dann wahrscheinlich die Freilaufdiode, die der Spule des Motors bezüglich induzierter Spannung entgegenwirken soll, oder so?

    Hilft das dann auch bei „Gegenwind“, also wenn der Lüfter durch einen externen Luftstrom beeinflußt wird, z.B. so dass er aufgrund des Luftstroms(Gegenwind) dann schneller dreht oder sogar die Drehrichtung ändert, ja nach stärke des „Gegenwinds“ und eingestellter Drehrichtung des Lüfters. Der Lüfter würde ja dann kurzfristig als Generator wirken?

    Gruß Klaus

  25. Wow, krass. Was Du wohl vor hast :) Aber:
    Ja, wenn die Rotoren drehen, ohne durch Strom angetrieben zu werden, induzieren sie einen Strom. Die H-Bridge L293D hat aber z.B. Freilaufdioden integriert, sodass Du Dir da keine Sorgen machen musst.

  26. Klaus

    Wenn ich es hinbekomme gibts vielleicht eine Projektvorstellung.
    Danke für die Infos!

    Gruß Klaus

  27. rapper98

    Hallo ich hab eine Frage hierzu ich weis das das nicht wirklich zu diesem Thema passt. Es wäre trotzdem nett wenn du eine Lösung finden könntest ,

    Für unser Arduino haben wir drei Lautsprecher angeschlossen. Nun haben wir verschiedene Probleme.

    1. Wir können die Lautsprecher nicht parallelschalten, sodass mehrere Töne gleichzeitig erklingen.

    2. Wir haben Probleme damit, dass die Töne unterschiedlich lang sind und der Abstand auch unterschiedlich ist.

    Hier ist unser richtiges Programm un das Versuchsprogramm:

    int La1= 0;
    int La2 = 12;
    int La3 = 13;

    void setup (){

    int dauer = 500;

    tone(La1,1760, dauer);

    tone(La1,1976, dauer);
    delay(dauer*1);
    noTone (La1);
    delay (dauer*0.25);

    tone(La2,1976, dauer);
    delay(dauer*1);
    noTone (La2);
    delay (dauer*0.25);

    tone(La3,1976, dauer);
    delay(dauer*1);
    noTone (La3);
    delay (dauer*0.25);

    tone(La1,1976, dauer);
    delay(dauer*2);
    )

    }

    Wir bitten um schnelle Hilfe. Danke schon im Voraus. :)

  28. @rapper98: Da fehlt mir leider ein bisschen die Zeit, aber sieh Dir mal das Beispiel BlinkWithoutDelay aus der Arduino-Software an. Da werden Timer verwendet und keine Delays. Das wäre vielleicht eine Möglichkeit. Arduino schwächelt ein wenig bei parallelen Aufgaben.

  29. rapper98

    hallo ich hab eine Frage
    wir haben den Motor an die H-Bridge angeschlossen wie oben beschrieben.
    Das Problem liegt jetzt nur dabei das die Batterie irgendwie direkt den Motor antreibt ohne das man ihn ohne das man ihn Steuern kann.
    hättst du eine Idee wo der Fehler liegen könnte? Oder vielleicht sogar einen Lösungsvorschlag
    Danke schon mal im Vorraus
    rapper98

  30. Kevin

    Hallo,

    ich versuche gerade den RSA0N11M9-LIN10K Motorfader von ALPS an deine Schaltung anzuschließen, jedoch verzweifle ich ein wenig. Kannst du mir sagen, wo ich das gelbe und grüne Kabel aus deiner ersten Skizze auf dieser Seite anschließen muss?

    Vielen Dank schon einmal im Voraus

    Kevin

  31. Kevin

    Ok, ich bin noch verwirrt vom letzten Abend gewesen, natürlich sind das die SPannungsanschlüsse…

  32. Kevin

    Ok, nächste Frage. Kann den Fader fröhlich hoch unter runterfahren lassen mit dem obengegebenen Code. Nu brauch ich allerdings eine bestimmte Position auf dem Slider, wo bekomm ich nun die Daten aus dem Slider her?

  33. Kevin

    Das hilft schon mal etwas weiter, jedoch gibts jetzt Probleme, den wiper anzuschließen. Laut Datenblatt ist das einer der vorderen PINs, die jedoch nur 0 oder 1023 bzw 0 und 255 zurückgeben, was ja nicht Sinn der Sache ist. Das Datenblatt ist hier zu finden : http://www.reichelt.de/Schiebepotis/RSA0N11M9-LIN10K/3/index.html?;ACTION=3;LA=5;ARTICLE=73884;GROUPID=3713;artnr=RSA0N11M9-LIN10K;SID=11UOwLs38AAAIAAFoDPBY386576c6b36b4fca83731a99609e6ec8

    Der wiper ist meines Erachtens nach Terminal 2 (Seite 4/7 des pdf-Dokuments). Tut mir leid, ich bin total neu auf diesem Gebiet und hab quasi keine Ahnung von der Hardware ;( Wäre super, wenn ich da Hilfe bekommen würde :)

    LG

  34. @Kevin: Der Fader ist ja eigentlich ein Potentiometer und muss genau so angeschlossen werden, also Plus an Terminal 3, GND an Terminal 1 und der Abgriff (T2) muss mit dem Analog In verbunden werden. Dann bekommst Du beim Arduino einen Wert zwischen 0 und 1023. Liebe Grüße

  35. Micha

    Hi, habe mir die benötigten Teile gekauft und wollte deine Schaltung nachbauen.
    Du schreibst: „Die äußeren Beinchen sollten mit dem 5V+ verbunden werden.“ Heißt für mich: Pin 1 & Pin 16 auf +5V.
    Nach dem Schaltbild vom L293D ist Pin 1 mit „1,2EN“ bezeichnet und PIN 16 mit VCC1.

    In meinen Augen müssten (zumindest nach Schaltbild) die Pins 8 & 16 mit +5V versorgt werden. Diese sind mit VCC1 und VCC2 im Schaltbild bezeichnet.

    Habe ich jetzt einen Denkfehler?!

    Gruß Micha

  36. Hi Micha, also Pin 1 ist der Enable Pin für die Schaltstufen 1 und 2, Pin 16 ist die Stromversorgung für die Logik (also hier 5V). Der Pin 9 ist der Enable für die Stufen 3 und 4. Der Pin 8 (VCC2) ist die Stromversorgung für den Motor. Kann also 5V oder mehr sein. Liebe Grüße, Stefan“

  37. Micha

    Aaaah, vielen Dank für die schnelle Antwort. Fazit: Habs wie oben erklärt ausprobiert, und es hat funktioniert ;-)

  38. Mathias

    Hallo Stefan,

    vielen Dank für die sehr hilfreiche Seite. Die Schaltung funktioniert problemlos, allerdings hätte ich eine Frage zur Programmierung: ich möchte gerne einen Getriebemotor in die eine Richtung langsam anlaufen lassen, dann abbremsen bis zum Stop, die Richtung umkehren und dann mit dem gleichen Anfahrverhalten und abbremsen/stoppen in die andere Richtung laufen lassen. Bisher bin ich beim programmieren jedesmal gescheitert, der Motor lief nach dem Umschalten sofort los, bremste etwas ab und fuhr wieder an. Könntest Du mir vielleicht einen Tip geben wie man das programmiert?
    Vielen Dank!

    Grüsse,
    Mathias

  39. Mathias

    Hallo Stefan,
    vielen Dank für die schnelle Beantwortung und die Aktualisierung des Beitrages! Jetzt funktioniert die Schaltung, bzw. das Programm :-)

    Viele Grüsse,
    Mathias

  40. Mathias

    Kleine Korrektur: beim Motor 1 (dem oberen im Plan) müsste das grüne Kabel doch zum Output 4 (PIN 14) des L293D gehen, oder?

    Viele Grüsse,
    Mathias

  41. Anton

    Hey, ich habe die Schaltung oben 1 zu 1 abgebaut, allerdings haben wir 2 6V Motoren dran und nur 4 LR6 Batterien zur Verfügung, im Moment tut sich bei uns gar nichts.
    Gibt es irgendeine Chance, es so zum laufen zu bekommen?

    Viele Grüße
    Anton

  42. Fadmir

    Hallo Stefan,
    ich hab momentan ein Projekt, in dem ich versuche ein Auto zu steuern (sowohl Lenkung,als auch Geschwindigkeit). Jedoch will ich mein Auto anderst bauen als Sie(Steuerung seperat versuchen mit einem Servo Motor zu lenken).
    Ich hab vor den Motor ebenfalls über eine H-Bridge anzusteuern, jedoch möchte ich nur EINEN Motor benutzen, über den ich dann die Geschwindigkeit regeln kann.
    Meine Frage wäre es dann, wie eine Beispielschaltung dafür aussehen könnte ( einfach Motor 2+Kabel und Lenkung von Motor 1 weglassen), sodass dann nur noch Pin 9 benutzt wird, oder muss das anderst abgeändert werden?
    Eine ähnliche Frage stellt sich dann bei dem Programm (einfach alle Zeilen weglassen, die sich nicht auf die Geschwindigkeit des ersten Motors beziehen?).
    Vielleicht sind diese Fragen jetzt komisch formuliert und unverständlich, jedoch bin ziemlich neu in diesem Forum und weiterhin habe ich gerade erst angefangen mit Elektronik, in Form dieses Projektes, zu arbeiten. Ich hoffe, dass Sie mir bei meinem Problem weiterhelfen können, das würde mich in meinem Projekt ein großes Stück weiterbringen! :)
    Hoffe auf baldige Antwort! ;)
    LG Fadmir

  43. Sebastian

    Hallo Stefan,

    bei mir wird der IC zu heiß, deswegen habe ich überlegt eine ähnliche Schaltung mit dem L6205N aufzubauen. Ist die Schaltung und das Programm da einfach übetragbar?

    Gruß
    Sebastian

  44. @Sebastian: Nee, leider nicht und darüber hinaus braucht die H-Bridge auch noch ein paar andere Bauteile. Findest Du aber im Datenblatt. Bestimmt gibt es aber auch noch einfachere Bausteine.

  45. Hallo,
    ich würde gerne einen DC-Motor über einen Poti in beide Richtungen steuern. Also bei Werten kleiner als Mittelstellung 512 nach links, be Werten größer als 512 nach rechts. In der Umgebung von 512 bräuchte ich wohl einen offset Bereich (vielleicht von 500 bis 524, Motor bleibt aus) wg. umgenauer Mittellage des Potis, dann sollte er aber in beiden Richtungen via Poti beschleunigt werden können.
    Gibt es so ein Programmteil für den Arduino schon?
    Oder ein Tip für die Umsetzung mit dem L293?

    Viele Grüße vom Bodensee
    Jürgen

  46. @Jürgen: Nee, den gibt es noch nicht, der kann aber nicht so schwierig sein. Irgendwie so ähnlich wie:

    value = analogRead(potPin);
    if (value>512) {
    digitalWrite(motor1_A,LOW);
    digitalWrite(motor1_B,HIGH);
    analogWrite((value-512)/2,i);
    } else {
    digitalWrite(motor1_A,HIGH);
    digitalWrite(motor1_B,LOW);
    analogWrite(value/2,i);
    }

    Ich hoffe, das hilft Dir weiter :)

  47. Jonathan.Faisz

    Hey hab ne Frage dazu..

    int motor1_A=7;
    int motor1_B=13;
    int motor1_Speed=12;

    int motor2_A=8;
    int motor2_B=9;
    int motor2_Speed=11;

    int Taster1=2; //vorwärts
    int Taster2=4; //links
    int Taster3=3; //rechts
    int Taster4=5; //rückwärts

    int zustand1;
    int zustand2;
    int zustand3;
    int zustand4;
    int zustand5;

    void setup(){
    Serial.begin(9600);
    pinMode(motor1_A,OUTPUT);
    pinMode(motor1_B,OUTPUT);

    pinMode(motor2_A,OUTPUT);
    pinMode(motor2_B,OUTPUT);

    }

    void loop(){
    // motor1

    zustand3=digitalRead (Taster3);
    if (zustand3== HIGH){
    digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_Speed,200); // speed counts from 0 to 255
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor2_B,HIGH);
    analogWrite(motor2_Speed,200);
    }
    /*zustand=digitalRead (Taster3);

    if (zustand3== HIGH){
    digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_Speed,200); // speed counts from 0 to 255
    */
    // motor2
    zustand2=digitalRead (Taster2);
    if (zustand2== HIGH){
    digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_Speed,200); // speed counts from 0 to 255
    digitalWrite(motor1_A,LOW);
    digitalWrite(motor1_B,HIGH);
    analogWrite(motor1_Speed,200);
    }
    /*
    zustand3=digitalRead (Taster2);
    if (zustand3== HIGH){
    digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_Speed,200); // speed counts from 0 to 255
    }
    */

    // turn vice versa

    // motor1
    zustand1=digitalRead (Taster1);
    if (zustand1== HIGH){
    digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
    digitalWrite(motor1_B,HIGH);
    analogWrite(motor1_Speed,200); // speed counts from 0 to 255
    digitalWrite(motor2_A,LOW);
    digitalWrite(motor2_B,HIGH);
    analogWrite(motor2_Speed,200);
    }

    /*
    zustand3=digitalRead (Taster2);
    if (zustand3== HIGH){
    digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
    digitalWrite(motor1_B,HIGH);
    analogWrite(motor1_Speed,200); // speed counts from 0 to 255
    }
    */
    // motor2
    zustand4=digitalRead (Taster4);
    if (zustand4== HIGH){
    digitalWrite(motor2_A,HIGH); // A = LOW and B = HIGH means the motor will turn left
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_Speed,200); // speed counts from 0 to 255
    digitalWrite(motor1_A,HIGH); // A = LOW and B = HIGH means the motor will turn left
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_Speed,200); // speed counts from 0 to 255
    }
    /*
    zustand3=digitalRead (Taster2);
    if (zustand3== HIGH){
    digitalWrite(motor2_A,LOW); // A = LOW and B = HIGH means the motor will turn left
    digitalWrite(motor2_B,HIGH);
    analogWrite(motor2_Speed,200); // speed counts from 0 to 255
    }/*/

    }

    wenn ich die taster drücke, dreht der motor abgeschwächt… lass ich ihn los geht er aus
    ich will dass er wenn ich taster 3 drücke dass er rechts geht… ist da irgendein fehler?(natürlich ist was falsch aber komme nicht drauf was)

  48. Hallo, finde ich sehr spannend, die Entwickler Möglichkeiten. Direkt auch eine Frage: kann man bei diesem Schaltbild statt des Arduino UNO auch Arduino micro oder Arduione Nano verwenden?
    Macht weiter so, sehr spannend hier auf der Seite, Gruß Alex

  49. Alex

    Hallo, ist wirklich eine sehr tolle Seite.
    Nun hab ich aber mal noch eine frage. Und zwar habe ich deine Schaltung wie oben aufgebaut, der Sketch funktioniert auch wunderbar, nur wenn ich die beiden Motoren gleichzeitig laufen lassen will passiert garnichts.
    Wisst ihr woran das liegen kann?
    int motor1_A=11;
    int motor1_B=10;
    int motor1_Speed=9;

    int motor2_A=5;
    int motor2_B=4;
    int motor2_Speed=3;

    void setup(){
    pinMode(motor1_A,OUTPUT);
    pinMode(motor1_B,OUTPUT);

    pinMode(motor2_A,OUTPUT);
    pinMode(motor2_B,OUTPUT);
    }

    void loop(){
    // motor1
    digitalWrite(motor1_A,HIGH);
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_Speed,255);

    // motor2
    digitalWrite(motor2_A,HIGH);
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_Speed,255);

    So sieht der Quelltext aus.

  50. Stefan Hermann

    @Alex: Hi Alex, das ist komisch. Vielleicht reicht Dein Strom für beide Motoren nicht aus? Check noch mal die Schaltung, ob die genau so aussieht.

  51. Alex

    Danke für deine Antwort.
    Also, Schaltung und Strom hab ich nochmal überprüft und beide Motoren laufen jetzt soweit. Hab jetzt ein Netzteil dran.
    Jedoch funktioniert der Quelltext in meinem Projekt nicht mehr.
    Wollte mittels Xbox Controller mit den Tasten RT (R2) und LT (L2) die beiden Motoren steuern. Wenn ich beide gedrückt halte dreht immer nur ein Motor. Wüsstest du woran das noch liegen könnte?
    Quelltext:
    #include
    // Satisfy IDE, which only needs to see the include statment in the ino.
    #ifdef dobogusinclude
    #include
    #endif

    USB Usb;
    XBOXRECV Xbox(&Usb);

    int motor1_A=11;
    int motor1_B=10;
    int motor1_Speed=9;

    int motor2_A=5;
    int motor2_B=4;
    int motor2_Speed=3;

    int a=0;
    int b=0;

    void setup() {
    Serial.begin(115200);
    while (!Serial); // Wait for serial port to connect – used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
    if (Usb.Init() == -1) {
    Serial.print(F(„\r\nOSC did not start“));
    while (1); //halt

    pinMode(motor1_A,OUTPUT);
    pinMode(motor1_B,OUTPUT);

    pinMode(motor2_A,OUTPUT);
    pinMode(motor2_B,OUTPUT);

    }
    Serial.print(F(„\r\nXbox Wireless Receiver Library Started“));
    }
    void loop() {
    Usb.Task();
    if (Xbox.XboxReceiverConnected) {
    for (uint8_t i = 0; i < 4; i++) {
    if (Xbox.Xbox360Connected[i]) {
    if (Xbox.getButtonPress(L2, i) && Xbox.getButtonPress(R2, i)) {
    Serial.print("L2: ");
    Serial.print(Xbox.getButtonPress(L2, i));
    Serial.print("\tR2: ");
    Serial.println(Xbox.getButtonPress(R2, i));
    //Xbox.setRumbleOn(Xbox.getButtonPress(L2, i), Xbox.getButtonPress(R2, i), i);
    a = 255;
    b = 255;
    }
    else{
    a=0;
    b=0;
    }

    if (Xbox.getButtonClick(A, i))
    Serial.println(F("A"));
    }
    }
    }

    // motor1
    digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor1_B,LOW);
    analogWrite(motor1_Speed,a); // speed counts from 0 to 255
    // motor2
    digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
    digitalWrite(motor2_B,LOW);
    analogWrite(motor2_Speed,b); // speed counts from 0 to 255
    }

  52. Alex

    Könnte der Arduino noch zu wenig Strom liefern?
    Aber du meintest ja das der Strom für die Motoren von der Stromquelle kommt, also kann das auch nicht sein oder?

  53. Bohne

    @Alex (6.09.14):
    Ich hatte gerade das gleiche Problem!

    Lösung:
    Der Code passt nicht ganz zum Schaltbild:
    int motor2_A=5; —> int motor2_A=6;
    int motor2_B=4; —> int motor2_B=5;

    Und schon funktioniert es =)

  54. Stefan Hermann

    Ja, irgendwer sollte das wirklich mal im Beitrag ändern ;-)
    Vielen Dank für die Info. Jetzt sollte es stimmen.

  55. Max

    hallo Stefan,
    könnte man mit dem Programm, was du geschrieben hast, ein Fahrgestell bewegen?
    mfg Max

  56. Max

    Hallo Stefan,
    wir haben so ein Roboter-Arm den wir auf einem Fahrgestell (magician chassis dg007) montieren wollen. Würde das eventuell funktionieren ?
    lg Max

  57. @Max: Kann mir gerade nicht genau vorstellen, wie Ihr das vorhabt, aber wären da Servo-Motoren nicht geeigneter und leichter anzubauen?

    Liebe Grüße

    Stefan“

  58. Sara

    Hallo Stefan,
    ich hab vor deine Schaltung genau nach zubauen, aber was genau bewirkt dein Beispielcode? Fangen die Motoren dann an zulaufen? Beide gleichzeitig?

    Danke Liebe Grüße Sara

  59. Hallo Sara,

    also im ersten Teil dreht der erste Motor rechts schneller und dann wieder langsamer werdend. Danach passiert das gleiche mit dem zweiten Motor.

    Im zweiten Teil passiert noch mal genau das selbe, jedoch drehen sich die Motoren in entgegengesetzter Richtung – erst der eine, dann der andere.

    Viel Spaß beim Nachbauen.

    Liebe Grüße

    Stefan“

  60. Andreas

    Hallo Stefan,
    ich möchte einen Aufzug bauen, der von einem Arduino-Board gesteuert wird.
    Als Motor verwende ich den Mini Motor (Leerlaufdrehzahl: ca. 9.500 U/min, Maximale Stromaufnahme: 0,65 A, max. Drehmoment: ca. 0,4 Ncm) von Fischertechnik. Da die Spannung von den Pins des Arduinos für den Motor zu klein ist, möchte ich eine 9-Volt-Batterie über die H-Brücke L293D anschließen.
    Dazu hätte ich noch ein paar Fragen:
    Für das Ansteuern von einem Motor kann ich doch den Aufbau aus Deinem Video „Wie steuert man einen Motor mit Arduino“ verwenden?
    Ist die H-Brücke ausreichend? (Ich habe gelesen, dass die L293D nur bis zu einer Stromstärke von 0,6A funktioniert und man bei einer höheren Stromstärke eine andere H-Brücke bräuchte.)
    Lassen sich weitere Bauteile wie Taster an den 5 Volt Pin anschließen und muss ich noch etwas beachten (Vorwiderstand…)?

    Ich hoffe Du kannst mir helfen :)

  61. Hi Elia,I was going to do a Fritzing schematic for the wirnig but didn’t get a chance to do it before I took the tank apart. The pin numbers are referenced in the code above and generally followed the defaults for both PS2X and the motor shield. If I get a chance over the coming days I’ll see if I can’t throw together a schematic.On the 9V vs 4 1.5 AA, it was really just a matter of what I had handy I had the battery holder for the AAs.

  62. Konne

    Hallo Stefan,

    Ich habe eine kurze Verständnisfrage zur oben abgebildeten Schaltung: warum ist der GND des L293D sowohl mit dem GND des arduino als auch der Stromquelle verbunden? Reicht die Verbindung zur Stromquelle nicht aus?

    Schöne grüße,
    Konne

  63. Achim Schmidt

    Hallo Stefan,
    ich habe die Schaltung nachgebaut, allerdings mit nur einem Motor. Die Schaltung funktioniert auch, aber wenn ich die Motorbatterie abklemme, bekommt der Motor trotzdem Strom, dann wohl nur die 5V vom Arduino. Ich hätte erwartet, dass er dann trotz Enable Pin ausgeschaltet bleibt.
    Wenn ich beide Batterien anschliesse (die für den Arduino und die separate Motorbatterie) scheint sich die Voltzahl sogar zu addieren. Kann das sein ? Oder ist mir der IC durchgebrannt ?
    Gruss,
    Achim

  64. Julian

    Bei mir wird folgendes angezeigt

    “ „gt „was not declared“

    Habe den Beispielcode abkopiert.

    Fehlermeldung:
    Arduino: 1.8.1 (Windows Store 1.8.1.0) (Windows 10), Board: „Arduino/Genuino Uno“

    C:\Users\Julian\Documents\Arduino\sketch_feb02a\sketch_feb02a.ino: In function ‚void loop()‘:

    sketch_feb02a:19: error: ‚gt‘ was not declared in this scope

    for (int i=0; i>256; i+=5){

    ^

    sketch_feb02a:19: error: expected ‚)‘ before ‚;‘ token

    for (int i=0; i>256; i+=5){

    ^

    sketch_feb02a:19: error: ‚i‘ was not declared in this scope

    for (int i=0; i>256; i+=5){

    ^

    sketch_feb02a:25: error: ‚gt‘ was not declared in this scope

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:25: error: expected ‚)‘ before ‚;‘ token

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:32: error: ‚lt‘ was not declared in this scope

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:32: error: expected ‚)‘ before ‚;‘ token

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:38: error: ‚gt‘ was not declared in this scope

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:38: error: expected ‚)‘ before ‚;‘ token

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:48: error: ‚lt‘ was not declared in this scope

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:48: error: expected ‚)‘ before ‚;‘ token

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:54: error: ‚gt‘ was not declared in this scope

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:54: error: expected ‚)‘ before ‚;‘ token

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:61: error: ‚lt‘ was not declared in this scope

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:61: error: expected ‚)‘ before ‚;‘ token

    for (int i=0; i<256; i+=5){

    ^

    sketch_feb02a:67: error: ‚gt‘ was not declared in this scope

    for (int i=255; i>0; i-=5){

    ^

    sketch_feb02a:67: error: expected ‚)‘ before ‚;‘ token

    for (int i=255; i>0; i-=5){

    ^

    exit status 1
    ‚gt‘ was not declared in this scope

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.