Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino UNO 2
nRF24L01+ transceiver (RP-SMA, met antenne) 2
Funduino Joystick Shield V1.A 1
L298N Dual H-brug motordriver (SparkFun) 2
4WD Smart Robot Car Chassis Kit 1
LED (standaard) 3
Weerstand 221Ω 2
Breadboard (standaard) 2
18650 Li-ion accu's 2
Powerbank 1
Draadjes (jumper wires) 1 set

Benodigde tools en machines

  • Solderbout (standaard)

Apps en online diensten

  • Arduino IDE

Over dit project

Verhaal

Hallo iedereen! Dit is mijn volgende project – een Arduino 4WD RC-auto met joystick-controller. Of hoe makkelijk het is om een Arduino 4WD Smart Car te besturen met een analoge joystick.

Deze RC-auto gebruikt de nRF24L01 als zender en ontvanger, met een bereik tot 1 kilometer in open ruimte. Het is bovendien heel simpel en makkelijk te bouwen.

1. Joystick-controller

Onderdelen voor de joystick:

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

De joystick-shield zit op je Arduino en maakt er een eenvoudige controller van. 7 momentane drukknoppen (4 grote, 2 kleine, en de joystick-selectknop) en een twee-as duimjoystick geven je Arduino functionaliteit op het niveau van de oude Nintendo-controllers. De unit biedt ook interfaces voor Nokia 5110 LCD en nRF24L01.

Kenmerken:

  • nRF24L01-interface
  • Nokia 5110 LCD-interface
  • Bluetooth-interface
  • I2C-interface
  • Compatibel met Arduino
  • Werks panning: 3,5V of 5V
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

De module is gelabeld als BTE16-49 – nRF24L01+RFX2401C +PA+LNA draadloze communicatiemodule met antennebehuizing, 2.4GHz, 20dBm, 1000m.

Specificaties van de verkoper:

  • 2.4GHz wereldwijde open ISM-band, licentievrij gebruik
  • Maximale snelheid 2Mbps, efficiënte GFSK-modulatie, audio/videotransmissie
  • 125 kanalen voor multi-point en frequency-hopping communicatie
  • Ingebouwde hardware CRC-foutdetectie en point-to-multipoint communicatiecontrole
  • Werks panning 3.0–3.6V, zendvermogen 20dBm (VDD = 3.3V)
  • Externe 2.4GHz antenne
  • 2.54mm pitch pinnen, volledig compatibel zonder versterkermodule
  • Transmissieafstand tot 1000 m
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

2. Joystick-controller (uitgebreid)

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

De Joystick Shield heeft 4 grote knoppen + 2 kleine knoppen + joystick-selectknop en een twee-as duimjoystick (X-as 0–1023, Y-as 0–1023). De shield zit op je Arduino en maakt er een eenvoudige controller van. In mijn sketch: Knop Boven = Klakson (buzzer), Knop Rechts = Voorlicht (LED + 200Ω weerstand), Knop Links = Achterlicht (LEDs + 200Ω weerstand). Overige knoppen worden niet gebruikt.

Joystick-testen:

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

Ruststand: X=499, Y=502, Boven=1, Rechts=1, Onder=1, Links=1

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

3. Arduino 4WD RC-auto

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding
Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

Maak de verbindingen volgens het aansluitschema hierboven.

Let op: Voordat je de code uploadt, moet je de jumper-draden van de Arduino Uno loskoppelen (pinnen 0, 1).

Dat is het! Als je alle stappen correct hebt uitgevoerd, is de auto klaar om te rijden!

Na het voeden van de Arduino-auto en de joystick-controller kun je de joystick gebruiken om de auto te besturen: vooruit/achteruit bewegen laat de auto vooruit/achteruit rijden, en links/rechts bewegen laat de auto links/rechts afslaan.

Blijf op de hoogte!

Code

Car_nRF24.ino (Arduino)

/* JoyStick module ontvangercode - AANSLUITINGEN: nRF24L01 Modules Zie:
1 - GND
2 - VCC 3.3V !!! NIET 5V
3 - CE naar Arduino pin 6
4 - CSN naar Arduino pin 8
5 - SCK naar Arduino pin 13
6 - MOSI naar Arduino pin 11
7 - MISO naar Arduino pin 12
8 - ONGEBRUIKT */

//-----( Importeer benodigde bibliotheken )-----
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

/*-----( Constanten en pinnummers declareren )-----*/
#define CE_PIN 6
#define CSN_PIN 8
// NOTE: de "LL" achter de constante is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definieer de zendpipe

#define light_Front 18 // LED Voor Rechts pin A4 voor Arduino Uno
#define light_Back 19  // LED Achter Rechts pin A5 voor Arduino Uno
#define horn_Buzz 7
#define ENA_m1 3  // Enable/snelheid motor Voor Rechts
#define ENB_m1 5  // Enable/snelheid motor Achter Rechts
#define ENA_m2 9  // Enable/snelheid motor Voor Links
#define ENB_m2 10 // Enable/snelheid motor Achter Links
#define IN_11 0   // L298N #1 in 1 motor Voor Rechts
#define IN_12 1   // L298N #1 in 2 motor Voor Rechts
#define IN_13 2   // L298N #1 in 3 motor Achter Rechts
#define IN_14 4   // L298N #1 in 4 motor Achter Rechts
#define IN_21 14  // L298N #2 in 1 motor Voor Links
#define IN_22 15  // L298N #2 in 2 motor Voor Links
#define IN_23 16  // L298N #2 in 3 motor Achter Links
#define IN_24 17  // L298N #2 in 4 motor Achter Links

/*-----( Objecten declareren )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Maak een Radio aan

/*-----( Variabelen declareren )-----*/
int joystick[6]; // 6-elementen array met joystick-waarden
int speedRight = 0;
int speedLeft = 0;
int xAxis, yAxis;
// de vier knopvariabelen van de joystick
int buttonUp;
int buttonRight;
int buttonDown;
int 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];
    // de vier knopvariabelen uit joystick-array
    int buttonUp = joystick[2];
    int buttonRight = joystick[3];
    int buttonDown = joystick[4];
    int buttonLeft = joystick[5];

    // Klakson
    if (buttonUp == HIGH) { digitalWrite(horn_Buzz, LOW); } else { digitalWrite(horn_Buzz, HIGH); }
    // Voorlicht
    if (buttonRight == HIGH) { digitalWrite(light_Front, LOW); } else { digitalWrite(light_Front, HIGH); }
    // Achterlicht
    if (buttonLeft == HIGH) { digitalWrite(light_Back, LOW); } else { digitalWrite(light_Back, HIGH); }

    // Y-as voor vooruit/achteruit
    if (yAxis < 470) {
      // Rechter motoren achteruit
      digitalWrite(IN_11, LOW); digitalWrite(IN_12, HIGH);
      digitalWrite(IN_13, HIGH); digitalWrite(IN_14, LOW);
      // Linker motoren achteruit
      digitalWrite(IN_21, HIGH); digitalWrite(IN_22, LOW);
      digitalWrite(IN_23, LOW); digitalWrite(IN_24, HIGH);
      // Converteer dalende Y-as waarden (470 naar 0) naar 0-255 PWM
      speedRight = map(yAxis, 470, 0, 0, 255);
      speedLeft = map(yAxis, 470, 0, 0, 255);
    }
    else if (yAxis > 550) {
      // Rechter motoren vooruit
      digitalWrite(IN_11, HIGH); digitalWrite(IN_12, LOW);
      digitalWrite(IN_13, LOW); digitalWrite(IN_14, HIGH);
      // Linker motoren vooruit
      digitalWrite(IN_21, LOW); digitalWrite(IN_22, HIGH);
      digitalWrite(IN_23, HIGH); digitalWrite(IN_24, LOW);
      // Converteer stijgende Y-as waarden (550 naar 1023) naar 0-255 PWM
      speedRight = map(yAxis, 550, 1023, 0, 255);
      speedLeft = map(yAxis, 550, 1023, 0, 255);
    }
    // Als joystick in het midden blijft, bewegen motoren niet
    else {
      speedRight = 0;
      speedLeft = 0;
    }

    // X-as voor links/rechts
    if (xAxis < 470) {
      int xMapped = map(xAxis, 470, 0, 0, 255);
      // Naar links - verlaag linkermotor, verhoog rechtermotor
      speedLeft = speedLeft - xMapped;
      speedRight = speedRight + xMapped;
      if (speedLeft < 0) speedLeft = 0;
      if (speedRight > 255) speedRight = 255;
    }
    if (xAxis > 550) {
      int xMapped = map(xAxis, 550, 1023, 0, 255);
      // Naar rechts - verlaag rechtermotor, verhoog linkermotor
      speedLeft = speedLeft + xMapped;
      speedRight = speedRight - xMapped;
      if (speedLeft > 255) speedLeft = 255;
      if (speedRight < 0) speedRight = 0;
    }

    // Voorkom brummen bij lage snelheden (aanpassen aan je motoren)
    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 (Arduino)

/* JoyStick module zendercode - AANSLUITINGEN: nRF24L01 Modules Zie:
1 - GND
2 - VCC 3.3V !!! NIET 5V
3 - CE naar Arduino pin 9
4 - CSN naar Arduino pin 10
5 - SCK naar Arduino pin 13
6 - MOSI naar Arduino pin 11
7 - MISO naar Arduino pin 12
8 - ONGEBRUIKT
Standaard knoppinnen:
Boven - pin 2
Rechts - pin 3
Onder - pin 4
Links - pin 5
Analoge Joystick module:
GND naar Arduino GND
VCC naar Arduino +5V
X Pot naar Arduino A0
Y Pot naar Arduino A1 */

//-----( Importeer benodigde bibliotheken )-----
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

#define CE_PIN 9
#define CSN_PIN 10
#define xAxis 14 // A0 voor Arduino UNO
#define yAxis 15 // A1 voor Arduino UNO

// NOTE: de "LL" achter de constante is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definieer de zendpipe

/*-----( Objecten declareren )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Maak een Radio aan

/*-----( Variabelen declareren )-----*/
int joystick[6]; // 6-elementen array met joystick-waarden en 4 knoppen
int buttonUp = 2;
int buttonRight = 3;
int buttonDown = 4;
int buttonLeft = 5;

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

  // Pinmodes voor alle knoppen en beginstaat
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonRight, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
  pinMode(buttonLeft, INPUT_PULLUP);
  digitalWrite(buttonUp, LOW);
  digitalWrite(buttonRight, LOW);
  digitalWrite(buttonDown, LOW);
  digitalWrite(buttonLeft, LOW);
}

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);

  Serial.print("X = "); Serial.print(analogRead(xAxis));
  Serial.print(" Y = "); Serial.print(analogRead(yAxis));
  Serial.print(" Boven = "); Serial.print(digitalRead(buttonUp));
  Serial.print(" Rechts = "); Serial.print(digitalRead(buttonRight));
  Serial.print(" Onder = "); Serial.print(digitalRead(buttonDown));
  Serial.print(" Links = "); Serial.println(digitalRead(buttonLeft));
}

Schema's

rc_car_tp3A7JlpYw.fzz

Arduino 4WD RC-auto: complete onderdelenlijst en bouwhandleiding

Productieproces

  1. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  2. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  3. Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
  4. Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
  5. Find Me: Slimme Item Locator met Arduino en Bluetooth
  6. Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
  7. DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
  8. Slimme Parkeer Teller: Real-time Voertuigvolging met Arduino, Processing en PHP
  9. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  10. Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
  11. Bouw je eigen RC Porsche-auto met Arduino: Stap-voor-stap handleiding