Hier die Details zu dem Video in dem ich zeige, wie einfach es ist, ein kleines funkgesteuertes Fahrzeug mit einem Arduino Nano, einem Bluetooth-Modul und einem Motortreiber-Modul zu bauen. Das Fahrzeug wird mit vier Gleichstrommotoren mit Doppelwellengetriebe angetrieben.
![](https://prilchen.de/wp-content/uploads/2022/08/btcar-1024x576.jpg)
Für den ersten Teil der Verdrahtung und dem Quellcode war das Datenblatt des Herstellers MotoDriver2 hilfreich. Für die Steuerung per App über Bluetooth habe ich diese Informationsquellen verwendet:
Informationsquellen:
Datenblatt des Herstellers von MotoDriver2
Datenblatt für das Bloutooth Modul und weitere Details:
Bluetooth Modul HM-10
Steuerung App:
dabble bei thestempedia.com
Es wird mit der App dabble von Stempedia (die für Android oder IPhone kostenlos erhältlich ist) gesteuert werden.
Die App “dabble“, das Gamepad für das Smartphone:
Verdrahtung:
![](https://prilchen.de/wp-content/uploads/2023/05/hc05_l298n12v2-1024x777.jpg)
Hardware:
Arduino Nano
Getriebemotor (3-6V) inkl. Rad
MotoDriver2 L298N
HM-10 Bluetooth Modul
Quellcode für Motorentest:
const int rechterMotorAktiv = 5;
const int linkerMotorAktiv = 6;
const int linksvor = 7;
const int linksrueck = 8;
const int rechtsvor = 9;
const int rechtsrueck = 10;
const int speed = 180;
void setup()
{
pinMode(rechterMotorAktiv, OUTPUT);
pinMode(linkerMotorAktiv, OUTPUT);
pinMode(linksvor, OUTPUT);
pinMode(linksrueck, OUTPUT);
pinMode(rechtsvor, OUTPUT);
pinMode(rechtsrueck, OUTPUT);
//wenn nichts gedrückt wird, setzte "0" STOP
analogWrite(rechterMotorAktiv, 0);
analogWrite(linkerMotorAktiv, 0);
analogWrite(rechtsvor, 0);
analogWrite(linksvor, 0);
analogWrite(rechtsrueck, 0);
analogWrite(linksrueck, 0);
}
void loop()
{
// alle vier motoren 3 Sek vor
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsvor, speed);
analogWrite(linksvor, speed);
analogWrite(rechtsrueck, 0);
analogWrite(linksrueck, 0);
delay(3000);
// alle vier motoren 3 Sek rück
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsrueck, speed);
analogWrite(linksrueck, speed);
analogWrite(rechtsvor, 0);
analogWrite(linksvor, 0);
delay(3000);
// links drehend 3 Sek
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsvor, speed);
analogWrite(linksrueck, speed);
analogWrite(linksvor, 0);
analogWrite(rechtsrueck, 0);
delay(3000);
// rechts drehend 3 Sek
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsrueck, speed);
analogWrite(linksvor, speed);
analogWrite(rechtsvor, 0);
analogWrite(linksrueck, 0);
delay(3000);
}
Quellcode 2, für erstes Testen mit App:
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>
const int rechterMotorAktiv = 5;
const int linkerMotorAktiv = 6;
const int linksvor = 7;
const int linksrueck = 8;
const int rechtsvor = 9;
const int rechtsrueck = 10;
void setup()
{
pinMode(rechterMotorAktiv, OUTPUT);
pinMode(linkerMotorAktiv, OUTPUT);
pinMode(linksvor, OUTPUT);
pinMode(linksrueck, OUTPUT);
pinMode(rechtsvor, OUTPUT);
pinMode(rechtsrueck, OUTPUT);
Dabble.begin(9600, 2, 3); //(baudRate,Pin RX,Pin TX)
}
void loop()
{
int speed = 180;
//wenn nichts gedrückt wird, setzte "0" STOP
analogWrite(rechterMotorAktiv, 0);
analogWrite(linkerMotorAktiv, 0);
analogWrite(rechtsvor, 0);
analogWrite(linksvor, 0);
analogWrite(rechtsrueck, 0);
analogWrite(linksrueck, 0);
Dabble.processInput();
if (GamePad.isUpPressed())
{
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsvor, speed);
analogWrite(linksvor, speed);
delay(200);
}
if (GamePad.isDownPressed())
{
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsrueck, speed);
analogWrite(linksrueck, speed);
delay(200);
}
if (GamePad.isLeftPressed())
{
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsvor, speed);
analogWrite(linksrueck, speed);
delay(200);
}
if (GamePad.isRightPressed())
{
analogWrite(rechterMotorAktiv, 255);
analogWrite(linkerMotorAktiv, 255);
analogWrite(rechtsrueck, speed);
analogWrite(linksvor, speed);
delay(200);
}
}
Finale Quellcode Version:
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>
int rechterMotorAktiv=5;
int linkerMotorAktiv=6;
int linksvor=7;
int linksrueck=8;
int rechtsvor=9;
int rechtsrueck=10;
void setup()
{
pinMode(rechterMotorAktiv,OUTPUT);
pinMode(linkerMotorAktiv,OUTPUT);
pinMode(rechtsvor,OUTPUT);
pinMode(rechtsrueck,OUTPUT);
pinMode(linksvor,OUTPUT);
pinMode(linksrueck,OUTPUT);
motorTempo(0,0);
Dabble.begin(9600, 2, 3);
}
void loop()
{
int rechtsTempo=0;
int linksTempo=0;
Dabble.processInput();
if (GamePad.isUpPressed())
{
rechtsTempo = 255;
linksTempo = 255;
}
if (GamePad.isDownPressed())
{
rechtsTempo = -255;
linksTempo = -255;
}
if (GamePad.isLeftPressed())
{
rechtsTempo = 0;
linksTempo = 255;
}
if (GamePad.isRightPressed())
{
rechtsTempo = 255;
linksTempo = 0;
}
motorTempo(rechtsTempo, linksTempo);
}
void motorTempo(int rechtsTempo, int linksTempo)
{
if (rechtsTempo < 0)
{
digitalWrite(rechtsvor,LOW);
digitalWrite(rechtsrueck,HIGH);
}
else if (rechtsTempo >= 0)
{
digitalWrite(rechtsvor,HIGH);
digitalWrite(rechtsrueck,LOW);
}
if (linksTempo < 0)
{
digitalWrite(linksvor,LOW);
digitalWrite(linksrueck,HIGH);
}
else if (linksTempo >= 0)
{
digitalWrite(linksvor,HIGH);
digitalWrite(linksrueck,LOW);
}
analogWrite(rechterMotorAktiv, abs(rechtsTempo));
analogWrite(linkerMotorAktiv, abs(linksTempo));
}
Grundplatte zum ausdrucken an einem 3D-Drucker:
Arduino Robot Car Chassis 4WD
Video:
Ergänzende Information:
Nicht im Video zu sehen, ist das entfernen der beiden Jumper des MotoDriver2 an Pin ENA und ENB.
Erst dann kann es mit einem Jumperkabel mit dem Arduino an Pin 5+6 verbunden werden, um ggf. die Motoren zu deaktivieren. Solltet ihr mit mehr als 12 Volt das MotoDriver2-Module versorgen, bitte den Hinweis im Datenblatt beachten, das noch ein Jumper gezogen werden muss.