{"id":173,"date":"2017-06-16T15:51:12","date_gmt":"2017-06-16T15:51:12","guid":{"rendered":"http:\/\/fambach.net\/?p=173"},"modified":"2026-10-10T12:25:49","modified_gmt":"2026-10-10T12:25:49","slug":"raspberry-pi-3-motorsteuerung","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/","title":{"rendered":"Raspberry Pi 3 + Motor Control"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Contents\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Hardware\" >Hardware<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Testaufbau\" >Testaufbau<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#GPIOs_am_Raspberry\" >GPIOs am Raspberry<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Plan\" >Plan<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Software\" >Software<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Entwicklungsumgebung\" >Entwicklungsumgebung<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Code\" >Code<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Digitale_Ansteuerung\" >Digitale Ansteuerung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#PWM_Ansteuerung\" >PWM Ansteuerung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Funktionalitat_in_Klasse_gepackt\" >Funktionalit\u00e4t in Klasse gepackt<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Drive_Klasse\" >Drive Klasse<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Test-Drive_Klasse\" >Test-Drive Klasse<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Tipps\" >Tipps<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Es_geht_nix\" >Es geht nix<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Motoren_drehen_nicht_in_die_richtige_Richtung\" >Motoren drehen nicht in die richtige Richtung<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Raspberry_rebooted_bei_AktivierungBetrieb_der_Motoren\" >Raspberry rebooted bei Aktivierung\/Betrieb der Motoren<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Quellen\" >Sources<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Verwandte_Beitrage\" >Related Posts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Anhang\" >Attachment<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/#Pin-Belegung\" >Pin assignment<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Ziel ist es, mit dem Raspberry PI 3 unter Zuhilfenahme einer Motorbr\u00fccke 2 Gleichstrommotoren zu betreiben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies soll sp\u00e4ter genutzt werden, um einen zweir\u00e4drigen Roboter anzutreiben.<\/p>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hardware\"><span class=\"ez-toc-section\" id=\"Hardware\"><\/span>Hardware<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PI3 (oder \u00e4lter, bitte auf die richtigen Pins achten)<br>\n<span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/www.fambach.net\/en\/motorbruecke-l9110s\/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"ub-content-link__anchor\">Motorbr\u00fccke L9110s<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><br>\n2x DC Motor<br>\nDiverse Cables (Pre-assembled Pin Header Cables)<\/p>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h2 class=\"wp-block-heading\" id=\"testaufbau\"><span class=\"ez-toc-section\" id=\"Testaufbau\"><\/span>Testaufbau<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"gpios-am-raspberry\"><span class=\"ez-toc-section\" id=\"GPIOs_am_Raspberry\"><\/span>GPIOs am Raspberry<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Motor1 Richtung GPIO 26<\/li><li>Motor1 Geschwindigkeit GPIO 1<\/li><li>Motor2 Richtung GPIO 24<\/li><li>Motor3 Geschwindigkeit GPIO 23<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The GPIOs are only valid in conjunction with pi4j and wirePi<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"plan\"><span class=\"ez-toc-section\" id=\"Plan\"><\/span>Plan<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"233\" src=\"https:\/\/fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren-300x233.png\" alt=\"\" class=\"wp-image-195\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren-300x233.png 300w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren-15x12.png 15w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren-768x596.png 768w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren-1024x795.png 1024w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2Motoren.png 1275w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><\/figure>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h2 class=\"wp-block-heading\" id=\"software\"><span class=\"ez-toc-section\" id=\"Software\"><\/span>Software<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"entwicklungsumgebung\"><span class=\"ez-toc-section\" id=\"Entwicklungsumgebung\"><\/span>Entwicklungsumgebung<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Als Entwicklungsumgebung verwende ich BlueJ auf dem PI selbst. Hiermit habe ich vier Klassen erstellt. Diese werden im folgenden Abschnitt kurz erkl\u00e4rt.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"297\" height=\"300\" src=\"https:\/\/fambach.net\/wp-content\/uploads\/2017\/06\/DriveKlassen-297x300.png\" alt=\"\" class=\"wp-image-211\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/DriveKlassen-297x300.png 297w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/DriveKlassen-12x12.png 12w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/DriveKlassen.png 470w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><\/figure>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h3 class=\"wp-block-heading\" id=\"code\"><span class=\"ez-toc-section\" id=\"Code\"><\/span>Code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Da ich anf\u00e4nglich ein paar Probleme hatte und die Motorbr\u00fccke nicht wie erwartet reagierte, habe ich mich langsam an das Thema herangetastet.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"digitale-ansteuerung\"><span class=\"ez-toc-section\" id=\"Digitale_Ansteuerung\"><\/span>Digitale Ansteuerung<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Zuerst habe ich eine kleine Testklasse geschrieben, welche die Motoren digital ansteuert. Hiermit konnte ich die richtige Verkabelung sicherstellen. Mit diesem Test ist noch keine Geschwindigkeitsregulierung m\u00f6glich.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Hinweis: Der urspr\u00fcngliche Code (WP-Gistpen) ist verloren gegangen. Der folgende Code wurde im Oktober 2026 neu erstellt (kompiliert, aber nicht auf der Hardware getestet).<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source code <code>MotorDigitalTest.java<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">import com.pi4j.io.gpio.GpioController;\nimport com.pi4j.io.gpio.GpioFactory;\nimport com.pi4j.io.gpio.GpioPinDigitalOutput;\nimport com.pi4j.io.gpio.PinState;\nimport com.pi4j.io.gpio.RaspiPin;\n\n\/**\n * Digitaler Test der Motorbr\u00fccke L9110S: beide Motoren vor, Stopp, zur\u00fcck.\n * Motor 1: Richtung GPIO 26, Geschwindigkeit GPIO 1\n * Motor 2: Richtung GPIO 24, Geschwindigkeit GPIO 23 (pi4j \/ WiringPi-Nummerierung)\n * www.fambach.net, GPLv2\n *\/\npublic class MotorDigitalTest {\n\n    public static void main(String[] args) throws InterruptedException {\n        GpioController gpio = GpioFactory.getInstance();\n        GpioPinDigitalOutput dir1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_26, \"M1 Richtung\", PinState.LOW);\n        GpioPinDigitalOutput speed1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, \"M1 Geschwindigkeit\", PinState.LOW);\n        GpioPinDigitalOutput dir2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_24, \"M2 Richtung\", PinState.LOW);\n        GpioPinDigitalOutput speed2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23, \"M2 Geschwindigkeit\", PinState.LOW);\n\n        for (GpioPinDigitalOutput pin : new GpioPinDigitalOutput[] {dir1, speed1, dir2, speed2}) {\n            pin.setShutdownOptions(true, PinState.LOW);\n        }\n\n        System.out.println(\"Vorw\u00e4rts\");\n        dir1.low();\n        speed1.high();\n        dir2.low();\n        speed2.high();\n        Thread.sleep(2000);\n\n        System.out.println(\"Stopp\");\n        speed1.low();\n        speed2.low();\n        Thread.sleep(1000);\n\n        \/\/ Bei L9110S kehrt sich die Richtung um, wenn beide Eing\u00e4nge getauscht werden\n        System.out.println(\"R\u00fcckw\u00e4rts\");\n        dir1.high();\n        speed1.low();\n        dir2.high();\n        speed2.low();\n        Thread.sleep(2000);\n\n        System.out.println(\"Stopp\");\n        dir1.low();\n        dir2.low();\n        gpio.shutdown();\n    }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"pwm-ansteuerung\"><span class=\"ez-toc-section\" id=\"PWM_Ansteuerung\"><\/span>PWM Ansteuerung<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes habe ich eine Testklasse erstellt, die den Hardware PWM benutzt und ebenfalls die Richtungen wechselt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source code <code>MotorPwmTest.java<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">import com.pi4j.io.gpio.GpioController;\nimport com.pi4j.io.gpio.GpioFactory;\nimport com.pi4j.io.gpio.GpioPinDigitalOutput;\nimport com.pi4j.io.gpio.GpioPinPwmOutput;\nimport com.pi4j.io.gpio.PinState;\nimport com.pi4j.io.gpio.RaspiPin;\nimport com.pi4j.wiringpi.Gpio;\n\n\/**\n * Test der Motorbr\u00fccke L9110S mit Hardware-PWM (GPIO 1 und GPIO 23)\n * in beiden Richtungen und verschiedenen Geschwindigkeiten.\n * www.fambach.net, GPLv2\n *\/\npublic class MotorPwmTest {\n\n    private static final int RANGE = 1024;\n\n    public static void main(String[] args) throws InterruptedException {\n        GpioController gpio = GpioFactory.getInstance();\n        GpioPinDigitalOutput dir1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_26, \"M1 Richtung\", PinState.LOW);\n        GpioPinDigitalOutput dir2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_24, \"M2 Richtung\", PinState.LOW);\n        GpioPinPwmOutput speed1 = gpio.provisionPwmOutputPin(RaspiPin.GPIO_01, \"M1 Geschwindigkeit\", 0);\n        GpioPinPwmOutput speed2 = gpio.provisionPwmOutputPin(RaspiPin.GPIO_23, \"M2 Geschwindigkeit\", 0);\n\n        Gpio.pwmSetMode(Gpio.PWM_MODE_MS);\n        Gpio.pwmSetRange(RANGE);\n        Gpio.pwmSetClock(50);\n\n        int[] speeds = {256, 512, 768, 1024};\n\n        System.out.println(\"Vorw\u00e4rts\");\n        dir1.low();\n        dir2.low();\n        for (int speed : speeds) {\n            System.out.println(\"Geschwindigkeit \" + speed);\n            speed1.setPwm(speed);\n            speed2.setPwm(speed);\n            Thread.sleep(1500);\n        }\n\n        \/\/ R\u00fcckw\u00e4rts: Richtungspin high, PWM invertiert\n        System.out.println(\"R\u00fcckw\u00e4rts\");\n        dir1.high();\n        dir2.high();\n        for (int speed : speeds) {\n            System.out.println(\"Geschwindigkeit \" + speed);\n            speed1.setPwm(RANGE - speed);\n            speed2.setPwm(RANGE - speed);\n            Thread.sleep(1500);\n        }\n\n        System.out.println(\"Stopp\");\n        speed1.setPwm(0);\n        speed2.setPwm(0);\n        dir1.low();\n        dir2.low();\n        gpio.shutdown();\n    }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"funktionalitaet-in-klasse-gepackt\"><span class=\"ez-toc-section\" id=\"Funktionalitat_in_Klasse_gepackt\"><\/span>Funktionalit\u00e4t in Klasse gepackt<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Als letzten Schritt habe ich eine Klasse Drive zur Steuerung beider Motoren und die dazu geh\u00f6rende Testklasse erstellt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"drive-klasse\"><span class=\"ez-toc-section\" id=\"Drive_Klasse\"><\/span>Drive Klasse<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Klasse zur Steuerung der zwei Motoren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source code <code>Drive.java<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">import com.pi4j.io.gpio.GpioController;\nimport com.pi4j.io.gpio.GpioFactory;\nimport com.pi4j.io.gpio.GpioPinDigitalOutput;\nimport com.pi4j.io.gpio.GpioPinPwmOutput;\nimport com.pi4j.io.gpio.PinState;\nimport com.pi4j.io.gpio.RaspiPin;\nimport com.pi4j.wiringpi.Gpio;\n\n\/**\n * Steuert zwei Gleichstrommotoren \u00fcber die Motorbr\u00fccke L9110S.\n * Geschwindigkeit 0..100 %, Richtung vorw\u00e4rts\/r\u00fcckw\u00e4rts je Motor.\n * www.fambach.net, GPLv2\n *\/\npublic class Drive {\n\n    private static final int RANGE = 1024;\n\n    private final GpioController gpio;\n    private final GpioPinDigitalOutput dirLeft;\n    private final GpioPinDigitalOutput dirRight;\n    private final GpioPinPwmOutput speedLeft;\n    private final GpioPinPwmOutput speedRight;\n\n    public Drive() {\n        gpio = GpioFactory.getInstance();\n        dirLeft = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_26, \"Links Richtung\", PinState.LOW);\n        dirRight = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_24, \"Rechts Richtung\", PinState.LOW);\n        speedLeft = gpio.provisionPwmOutputPin(RaspiPin.GPIO_01, \"Links Geschwindigkeit\", 0);\n        speedRight = gpio.provisionPwmOutputPin(RaspiPin.GPIO_23, \"Rechts Geschwindigkeit\", 0);\n\n        Gpio.pwmSetMode(Gpio.PWM_MODE_MS);\n        Gpio.pwmSetRange(RANGE);\n        Gpio.pwmSetClock(50);\n    }\n\n    public void forwardLeft(int percent) {\n        dirLeft.low();\n        speedLeft.setPwm(toPwm(percent));\n    }\n\n    public void backwardLeft(int percent) {\n        dirLeft.high();\n        speedLeft.setPwm(RANGE - toPwm(percent));\n    }\n\n    public void forwardRight(int percent) {\n        dirRight.low();\n        speedRight.setPwm(toPwm(percent));\n    }\n\n    public void backwardRight(int percent) {\n        dirRight.high();\n        speedRight.setPwm(RANGE - toPwm(percent));\n    }\n\n    public void forward(int percent) {\n        forwardLeft(percent);\n        forwardRight(percent);\n    }\n\n    public void backward(int percent) {\n        backwardLeft(percent);\n        backwardRight(percent);\n    }\n\n    \/** Auf der Stelle drehen *\/\n    public void turnLeft(int percent) {\n        backwardLeft(percent);\n        forwardRight(percent);\n    }\n\n    public void turnRight(int percent) {\n        forwardLeft(percent);\n        backwardRight(percent);\n    }\n\n    public void stop() {\n        dirLeft.low();\n        dirRight.low();\n        speedLeft.setPwm(0);\n        speedRight.setPwm(0);\n    }\n\n    public void shutdown() {\n        stop();\n        gpio.shutdown();\n    }\n\n    private static int toPwm(int percent) {\n        int limited = Math.max(0, Math.min(100, percent));\n        return limited * RANGE \/ 100;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"test-drive-klasse\"><span class=\"ez-toc-section\" id=\"Test-Drive_Klasse\"><\/span>Test-Drive Klasse<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klasse zum Testen der Motoren. Diese testet, wie auch im vorhergehenden Beispiel, \u00a0unterschiedliche Geschwindigkeiten und Richtungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source code <code>DriveTest.java<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">\/**\n * Testet die Klasse Drive mit verschiedenen Geschwindigkeiten und Richtungen.\n * www.fambach.net, GPLv2\n *\/\npublic class DriveTest {\n\n    public static void main(String[] args) throws InterruptedException {\n        Drive drive = new Drive();\n\n        for (int speed = 25; speed &lt;= 100; speed += 25) {\n            System.out.println(\"Vorw\u00e4rts \" + speed + \" %\");\n            drive.forward(speed);\n            Thread.sleep(1500);\n        }\n        drive.stop();\n        Thread.sleep(1000);\n\n        for (int speed = 25; speed &lt;= 100; speed += 25) {\n            System.out.println(\"R\u00fcckw\u00e4rts \" + speed + \" %\");\n            drive.backward(speed);\n            Thread.sleep(1500);\n        }\n        drive.stop();\n        Thread.sleep(1000);\n\n        System.out.println(\"Links drehen\");\n        drive.turnLeft(50);\n        Thread.sleep(1500);\n\n        System.out.println(\"Rechts drehen\");\n        drive.turnRight(50);\n        Thread.sleep(1500);\n\n        drive.shutdown();\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tipps\"><span class=\"ez-toc-section\" id=\"Tipps\"><\/span>Tipps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"es-geht-nix\"><span class=\"ez-toc-section\" id=\"Es_geht_nix\"><\/span>Es geht nix<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt verschiedene Shell Implementierungen, mit deren Hilfe ihr die IOs einfach mal schalten k\u00f6nnt. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stellt den direction Port jeweils auf Low und den Speed Port auf high, dann sollte sich was tun.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hilfe zur Shell-Bedienung findet ihr hier:  <br><span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/2006041.htm\" class=\"ub-content-link__anchor\">https:\/\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/2006041.htm<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Motor 1 s\u00e4he das in sysfs in etwa so aus<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ausgaberichtung setzen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo out &gt; \/sys\/class\/gpio\/gpio26\/direction\necho out &gt; \/sys\/class\/gpio\/gpio1\/direction<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Motoren schalten<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo 0 &gt; \/sys\/class\/gpio\/gpio26\/value\necho 1 &gt; \/sys\/class\/gpio\/gpio1\/value<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Achtung:  Bitte \u00fcberpr\u00fcfen, ob das mit den Gpio Ports so stimmt, evtl. k\u00f6nnten die Zahlen abweichen.<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"motoren-drehen-nicht-in-die-richtige-richtung\"><span class=\"ez-toc-section\" id=\"Motoren_drehen_nicht_in_die_richtige_Richtung\"><\/span>Motoren drehen nicht in die richtige Richtung<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Sollten die Motoren nicht in die richtige Richtung drehen, einfach die Polarit\u00e4t am Anschluss an der Motorbr\u00fccke vertauschen, bis es passt. Sollte das nicht m\u00f6glich sein, die Methoden forwardLeft\/Right() und backwardLeft\/Right() entsprechend anpassen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"raspberry-rebooted-bei-aktivierung-betrieb-der-motoren\"><span class=\"ez-toc-section\" id=\"Raspberry_rebooted_bei_AktivierungBetrieb_der_Motoren\"><\/span>Raspberry rebooted bei Aktivierung\/Betrieb der Motoren<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sollte beim Einschalten\/Betrieb der Motoren der Raspberry neu booten, kann dies am hohen Stromverbrauch der Motoren liegen. Dann sollte man \u00fcberlegen, die Motoren entweder \u00fcber eine zus\u00e4tzliche Spannungsquelle zu versorgen oder zumindest die Motoren mit einer Spule zu entst\u00f6ren. Kondensatoren k\u00f6nnen zus\u00e4tzlich Spannungsspitzen abfangen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mehr zur Entst\u00f6rung:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">http:\/\/www.bnhof.de\/~ho1645\/entstoer.htm<br>\nhttps:\/\/www.mikrocontroller.net\/articles\/Motoransteuerung_mit_PWM<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Schaltung mit zus\u00e4tzlicher Spannungsquelle:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier wird der L9110 mit einem LiPo versorgt, wichtig ist es, die Masse des Lipo mit der des Raspberries zu verbinden, sonst funktioniert es nicht. Der Lipo sollte im Bereich 3.7v und &lt; 12V liegen (Beschr\u00e4nkung des L9110).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"271\" height=\"300\" src=\"https:\/\/fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine-271x300.png\" alt=\"\" class=\"wp-image-249\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine-271x300.png 271w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine-11x12.png 11w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine-768x849.png 768w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine-926x1024.png 926w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/PIL9119_2MotorenExtPower_Steckplatine.png 1275w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><\/figure>\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--broken ub-content-link--status-after is-broken\"><a href=\"https:\/\/github.com\/Pi4J\/pi4j\/blob\/master\/pi4j-example\/src\/main\/java\/PwmExample.java\" class=\"ub-content-link__anchor\" title=\"This link appears to be broken.\">Beispiel auf GitHub<\/a><span class=\"ub-status ub-status--broken\" title=\"Link status: Broken\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Broken<\/span><\/span><\/span><br> <span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"http:\/\/pi4j.com\/\" class=\"ub-content-link__anchor\">PI4j Webseite<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><br> <span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/www.mikrocontroller.net\/articles\/Motoransteuerung_mit_PWM\" class=\"ub-content-link__anchor\">PWM + Motoren allgemein beim RoboterNetz<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Einige andere Webseiten waren auch noch n\u00fctzlich, einfach mal Google bem\u00fchen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"verwandte-beitraege\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Related Posts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n\n<hr class=\"wp-block-separator\">\n\n\n\n<h2 class=\"wp-block-heading\" id=\"anhang\"><span class=\"ez-toc-section\" id=\"Anhang\"><\/span>Attachment<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pin-belegung\"><span class=\"ez-toc-section\" id=\"Pin-Belegung\"><\/span>Pin assignment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-image alignnone wp-image-147 size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"907\" src=\"https:\/\/fambach.net\/wp-content\/uploads\/2017\/06\/pinspi3b.png\" alt=\"\" class=\"wp-image-147\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/pinspi3b.png 500w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/pinspi3b-7x12.png 7w, https:\/\/www.fambach.net\/wp-content\/uploads\/2017\/06\/pinspi3b-165x300.png 165w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><figcaption>http:\/\/www.pi4j.com<\/figcaption><\/figure>","protected":false},"excerpt":{"rendered":"<p>Ziel ist es, mit dem Raspberry PI 3 unter Zuhilfenahme einer Motorbr\u00fccke 2 Gleichstrommotoren zu betreiben. Dies soll sp\u00e4ter genutzt werden, um einen zweir\u00e4drigen Roboter anzutreiben. Hardware PI3 (oder \u00e4lter, bitte auf die richtigen Pins achten) Motorbr\u00fccke L9110s 2x DC Motor Diverse Kabel ( Vorgefertigte Pin-Header Kabel) Testaufbau GPIOs am Raspberry Motor1 Richtung GPIO 26 &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/raspberry-pi-3-motorsteuerung\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"Raspberry PI 3 + Motorsteuerung\"<\/span> <span class=\"meta-nav\">\u2192<\/span><\/a>","protected":false},"author":1,"featured_media":195,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[173,157,194,198,201,202,159,164],"tags":[11,2,15,12,92,16,14,4,3],"class_list":["post-173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aktoren","category-atnrob","category-java","category-motorbruecke","category-pi-projekte","category-pi4j","category-programmiersprache","category-raspberry-pi-3","tag-aktoren","tag-atnrob","tag-java","tag-motorbruecke","tag-pi-projekte","tag-pi4j","tag-programmiersprache","tag-raspberry-pi-3","tag-roboter-hardware","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=173"}],"version-history":[{"count":20,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/173\/revisions"}],"predecessor-version":[{"id":19185,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/173\/revisions\/19185"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/195"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}