Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

Komponenten und Materialien

Komponente Anzahl
Arduino UNO 2
nRF24L01+ Transceiver (RP-SMA, mit Antenne) 2
Funduino Joystick Shield V1.A 1
L298N Dual H-Bridge Motortreiber 2
4WD Smart Robot Car Chassis Kit 1
LED (Standard) 3
Widerstand 220 Ω 2
Steckbrett (Breadboard) 2
18650 Li-Ion-Akkus 2
Powerbank 1
Jumper-Kabel (Sortiment) 1

Benötigte Werkzeuge und Maschinen

Apps und Online-Dienste

Projektbeschreibung

Die Idee

Hallo zusammen! Dies ist mein nächstes Projekt: Ein Arduino 4WD RC-Auto mit Joystick-Controller. Es zeigt, wie einfach sich ein 4WD-Smart-Car mit einem analogen Joystick steuern lässt.

Als Funkstrecke dient das nRF24L01-Modul mit einer Reichweite von bis zu 1 km im Freifeld. Der Aufbau ist sehr einfach und gut nachvollziehbar.

1. Joystick-Controller (Sender)

Der Joystick-Shield wird auf den Arduino aufgesteckt und macht daraus einen einfachen Controller. Er bietet:

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

Verwendetes Funkmodul: BTE16-49 – nRF24L01+ mit RFX2401C, PA+LNA, Antennenschirmung, 2,4 GHz, 20 dBm, 1000 m Reichweite.

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

2. Controller-Belegung & Test

Der Shield hat 4 große + 2 kleine Tasten + Joystick-Taste und einen 2-Achsen-Joystick (X: 0–1023, Y: 0–1023). In meinem Sketch:

Joystick-Testwerte (Ruheposition): X=499, Y=502, alle Tasten HIGH (Pull-Up).

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

3. Arduino 4WD RC-Auto (Empfänger)

Aufbau des Fahrgestells mit zwei L298N-Treibern für vier Motoren.

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung
Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

Verkabelung gemäß Schaltplan. Wichtig: Vor dem Hochladen des Codes die Jumper-Kabel von den Arduino-Pins 0 und 1 (RX/TX) abziehen!

Nach dem Einschalten von Auto und Controller steuert der Joystick das Fahrzeug: Vorwärts/Rückwärts über Y-Achse, Links/Rechts über X-Achse.

Code

Car_nRF24.ino – Empfänger (Fahrzeug)

/* JoyStick Empfänger-Code - VERBINDUNGEN nRF24L01:
1 - GND
2 - VCC 3.3V !!! NICHT 5V
3 - CE → Arduino Pin 6
4 - CSN → Arduino Pin 8
5 - SCK → Arduino Pin 13
6 - MOSI → Arduino Pin 11
7 - MISO → Arduino Pin 12
8 - UNUSED
*/
#include 
#include 
#include 

#define CE_PIN 6
#define CSN_PIN 8
const uint64_t pipe = 0xE8E8F0F0E1LL;

#define light_Front 18 // A4
#define light_Back 19  // A5
#define horn_Buzz 7

#define ENA_m1 3  // Motor vorne rechts PWM
#define ENB_m1 5  // Motor hinten rechts PWM
#define ENA_m2 9  // Motor vorne links PWM
#define ENB_m2 10 // Motor hinten links PWM

#define IN_11 0  // L298N #1 IN1
#define IN_12 1  // L298N #1 IN2
#define IN_13 2  // L298N #1 IN3
#define IN_14 4  // L298N #1 IN4
#define IN_21 14 // L298N #2 IN1 (A0)
#define IN_22 15 // L298N #2 IN2 (A1)
#define IN_23 16 // L298N #2 IN3 (A2)
#define IN_24 17 // L298N #2 IN4 (A3)

RF24 radio(CE_PIN, CSN_PIN);
int joystick[6];
int speedRight = 0, speedLeft = 0;
int xAxis, yAxis;
int buttonUp, buttonRight, buttonDown, buttonLeft;

void setup() {
  pinMode(light_Front, OUTPUT);
  pinMode(light_Back, OUTPUT);
  pinMode(horn_Buzz, OUTPUT);
  pinMode(ENA_m1, OUTPUT); pinMode(ENB_m1, OUTPUT);
  pinMode(ENA_m2, OUTPUT); pinMode(ENB_m2, OUTPUT);
  pinMode(IN_11, OUTPUT); pinMode(IN_12, OUTPUT);
  pinMode(IN_13, OUTPUT); pinMode(IN_14, OUTPUT);
  pinMode(IN_21, OUTPUT); pinMode(IN_22, OUTPUT);
  pinMode(IN_23, OUTPUT); pinMode(IN_24, OUTPUT);

  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read(joystick, sizeof(joystick));
    xAxis = joystick[0];
    yAxis = joystick[1];
    buttonUp = joystick[2];
    buttonRight = joystick[3];
    buttonDown = joystick[4];
    buttonLeft = joystick[5];

    // Tasten: Hupe, Frontlicht, Rücklicht (LOW-aktiv durch Pull-Up)
    digitalWrite(horn_Buzz, buttonUp == HIGH ? LOW : HIGH);
    digitalWrite(light_Front, buttonRight == HIGH ? LOW : HIGH);
    digitalWrite(light_Back, buttonLeft == HIGH ? LOW : HIGH);

    // Y-Achse: Vorwärts / Rückwärts
    if (yAxis < 470) { // Rückwärts
      digitalWrite(IN_11, LOW); digitalWrite(IN_12, HIGH);
      digitalWrite(IN_13, HIGH); digitalWrite(IN_14, LOW);
      digitalWrite(IN_21, HIGH); digitalWrite(IN_22, LOW);
      digitalWrite(IN_23, LOW); digitalWrite(IN_24, HIGH);
      speedRight = map(yAxis, 470, 0, 0, 255);
      speedLeft = map(yAxis, 470, 0, 0, 255);
    } else if (yAxis > 550) { // Vorwärts
      digitalWrite(IN_11, HIGH); digitalWrite(IN_12, LOW);
      digitalWrite(IN_13, LOW); digitalWrite(IN_14, HIGH);
      digitalWrite(IN_21, LOW); digitalWrite(IN_22, HIGH);
      digitalWrite(IN_23, HIGH); digitalWrite(IN_24, LOW);
      speedRight = map(yAxis, 550, 1023, 0, 255);
      speedLeft = map(yAxis, 550, 1023, 0, 255);
    } else { // Totzone
      speedRight = 0; speedLeft = 0;
    }

    // X-Achse: Lenkung (Differenzial)
    if (xAxis < 470) { // Links
      int xMapped = map(xAxis, 470, 0, 0, 255);
      speedLeft -= xMapped; speedRight += xMapped;
      speedLeft = max(speedLeft, 0); speedRight = min(speedRight, 255);
    }
    if (xAxis > 550) { // Rechts
      int xMapped = map(xAxis, 550, 1023, 0, 255);
      speedLeft += xMapped; speedRight -= xMapped;
      speedLeft = min(speedLeft, 255); speedRight = max(speedRight, 0);
    }

    // Minimalgeschwindigkeit gegen Brummen (an Motoren anpassen)
    if (speedLeft < 70) speedLeft = 0;
    if (speedRight < 70) speedRight = 0;

    analogWrite(ENA_m1, speedRight);
    analogWrite(ENB_m1, speedRight);
    analogWrite(ENA_m2, speedLeft);
    analogWrite(ENB_m2, speedLeft);
  }
}

Joystick_nRF24.ino – Sender (Controller)

/* JoyStick Sender-Code - VERBINDUNGEN nRF24L01:
1 - GND
2 - VCC 3.3V !!! NICHT 5V
3 - CE → Arduino Pin 9
4 - CSN → Arduino Pin 10
5 - SCK → Arduino Pin 13
6 - MOSI → Arduino Pin 11
7 - MISO → Arduino Pin 12
8 - UNUSED

Tasten: Up=2, Right=3, Down=4, Left=5 (INPUT_PULLUP)
Joystick: X → A0, Y → A1
*/
#include 
#include 
#include 

#define CE_PIN 9
#define CSN_PIN 10
#define xAxis A0
#define yAxis A1
const uint64_t pipe = 0xE8E8F0F0E1LL;

RF24 radio(CE_PIN, CSN_PIN);
int joystick[6];
int buttonUp = 2, buttonRight = 3, buttonDown = 4, buttonLeft = 5;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  radio.stopListening();

  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonRight, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
  pinMode(buttonLeft, INPUT_PULLUP);
}

void loop() {
  joystick[0] = analogRead(xAxis);
  joystick[1] = analogRead(yAxis);
  joystick[2] = digitalRead(buttonUp);
  joystick[3] = digitalRead(buttonRight);
  joystick[4] = digitalRead(buttonDown);
  joystick[5] = digitalRead(buttonLeft);

  radio.write(joystick, sizeof(joystick));
  delay(20);

  // Debug-Ausgabe
  Serial.print("X = "); Serial.print(analogRead(xAxis));
  Serial.print(" Y = "); Serial.print(analogRead(yAxis));
  Serial.print(" Up = "); Serial.print(digitalRead(buttonUp));
  Serial.print(" Right = "); Serial.print(digitalRead(buttonRight));
  Serial.print(" Down = "); Serial.print(digitalRead(buttonDown));
  Serial.print(" Left = "); Serial.println(digitalRead(buttonLeft));
}

Schaltpläne

rc_car_tp3A7JlpYw.fzz (Fritzing-Datei)

Arduino 4WD RC-Auto: Komplette Teileliste & Bauanleitung

Herstellungsprozess

  1. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  2. DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
  3. Altes RC-Auto per Xbox-Controller & Arduino zum Joystick-Fahrzeug umbauen
  4. Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
  5. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  6. Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
  7. DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
  8. Intelligenter Parkplatzzähler: Echtzeit-Fahrzeugverfolgung mit Arduino, Processing & PHP
  9. NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
  10. DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau