Arduino 4WD RC-auto
Componenten en benodigdheden
![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
| × | 2 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
Benodigde gereedschappen en machines
![]() |
|
Apps en online services
![]() |
|
Over dit project
Verhaal
Hallo iedereen! Dit is mijn volgende project - Arduino 4WD RC Car met joystickcontroller of hoe gemakkelijk het is om een Arduino 4WD Smart Car te besturen met een analoge joystick.
Deze RC-joystick bestuurde auto gebruikt NRF24l01 als zender en ontvanger. Het heeft een bereik tot 1 kilometer in de open ruimte. Is ook heel simpel en makkelijk te maken.
1. Joystick-controller
Componenten voor joystick:


Joystick-schild zit bovenop je Arduino en verandert het in een eenvoudige controller. 7 tijdelijke drukknoppen (4 grote knoppen, 2 kleine knoppen en een joystick-selectieknop) en een twee-assige duimjoystick geven je Arduino-functionaliteit op het niveau van de oude Nintendo-controllers. Dit toestel biedt ook Nokia 5110 LCD- en nRF24L01-interfaces.
Kenmerken:
- nRF24L01-interface
- Nokia 5110 LCD-interface
- Bluetooth-interface
- I2C-interface
- Compatibel met Arduino
- Bedrijfsspanning 3,5V of 5V



Eigenlijk is het gelabeld als BTE16-49 - nRF24L01+RFX2401C +PA+LNA draadloze communicatiemodules met antenneafscherming behuizing 2,4GHz 20dbm 1000m.
Kenmerken gespecificeerd door de verkoper:
- 2.4GHz wereldwijde open ISM-band, gebruik zonder licentie
- de maximale werksnelheid van 2 Mbps, efficiënte GFSK-modulatie, overdracht van audio, video
- 125 kanalen, om te voldoen aan de behoeften op het gebied van communicatie via meerdere balies en frequentie-hopping
- het adres van de ingebouwde hardware CRC-foutdetectie en point-to-multipoint communicatiecontrole
- werkspanning 3.0-3.6V, het zendvermogen 20dBm (VDD =3.3V)
- de externe 2,4 GHz-antenne
- Pinnen met een pitch van 2,54 mm, volledig compatibel zonder de interface van de versterkermodule, eenvoudig te vervangen om de afstand te vergroten
- zendafstand tot 1000 m

2. Joystick-controller


Joystick Shield heeft 4 grote knoppen + 2 kleine knoppen + joystick-selectieknop en een twee-assige duimjoystick (X-as van 0 tot 1023, Y-as van 0 tot 1023) Het schild zit bovenop je Arduino en verandert het in een eenvoudige regelaar. In mijn schets is Button Up voor Zoemer (hoorn), Knop Rechts - voorlicht (LED + weerstand 200 Ohm), Knop Links - achterlichten (LED's + weerstand 200 Ohm). Andere knoppen worden niet gebruikt.
Joystick-testen:



Inactieve toestand:X=499, Y=502, Omhoog=1, Rechts=1, Omlaag=1, Links=1








3. Arduino 4WD RC-auto










Maak verbindingen zoals in het bedradingsschema hierboven.
Opmerking:voordat u de code uploadt, moet u de jumperdraden loskoppelen van het Arduino Uno-bord (pinnen 0, 1).
Dat als je eenmaal alle stappen goed hebt gezet, de auto klaar is om te gaan!
Nadat je de Arduino Car en Joystick-controller hebt ingeschakeld, kun je de joystick gebruiken om de auto te besturen door de joystick naar voren en naar achteren te bewegen.
Blijf kijken!
Code
- Car_nRF24.ino
- Joystick_nRF24.ino
Car_nRF24.inoArduino
Code voor Arduino RC Car/* JoyStick module ontvanger code - AANSLUITINGEN:nRF24L01 Modules Zie:1 - GND 2 - VCC 3.3V !!! NOT 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#include #include /*-----( Declareer constanten en pinnummers)-----* /#define CE_PIN 6#define CSN_PIN 8// OPMERKING:de "LL" aan het einde van de constante is "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Definieer de zendpijp#define light_Front 18 //LED Front Right pin A4 voor Arduino Uno#define light_Back 19 //LED Back Right pin A5 voor Arduino Uno#define horn_Buzz 7 #define ENA_m1 3 // Activeer/snelheid motor Front Right #define ENB_m1 5 // Activeren/snelheid motor Back Right#define ENA_m2 9 // Activeren/snelheid motor Front Left#define ENB_m2 10 // Activeren/snelheid motor Back Left#define IN_11 0 // L298N #1 in 1 motor Front Right #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 Linksvoor#define IN_22 15 // L298N #2 in 2 motor Linksvoor#define IN_23 16 // L298N #2 in 3 motor Linksachter#define IN_24 17 // L298N #2 in 4 motor Linksachter/* -----( Declareer objecten) -----*/RF24 radio (CE_PIN, CSN_PIN); // Maak een Radio/*-----( Declare Variables) -----*/int joystick [6]; // Array met 6 elementen met Joystick-uitlezingenint speedRight =0;int speedLeft =0;int xAxis, yAxis;// de vier knopvariabelen van joystickint buttonUp;int buttonRight;int buttonDown;int buttonLeft;void setup(){ pinMode(light_Front, UITGANG); pinMode (light_Back, OUTPUT); pinMode(horn_Buzz, OUTPUT); pinMode (ENA_m1, UITGANG); pinMode (ENB_m1, UITGANG); pinMode (ENA_m2, UITGANG); pinMode (ENB_m2, UITGANG); pinMode (IN_11, UITGANG); pinMode (IN_12, UITGANG); pinMode (IN_13, UITGANG); pinMode (IN_14, UITGANG); pinMode (IN_21, UITGANG); pinMode (IN_22, UITGANG); pinMode (IN_23, UITGANG); pinMode (IN_24, OUTPUT);/* Serial.begin (9600); Serial.println ("Nrf24L01 Ontvanger Start"); */ 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 van joystickarray int buttonUp =joystick [2]; int knopRechts =joystick[3]; int buttonDown =joystick[4]; int knopLinks =joystick[5]; //Seriële.println(); // voor debuggen // Haal de datalading op - Debugging code hieronder if (buttonUp ==HIGH){digitalWrite(horn_Buzz, LOW);} else {digitalWrite(horn_Buzz, HIGH);} if (buttonRight ==HIGH){digitalWrite( light_Front, LOW);} else {digitalWrite(light_Front, HIGH);} if (buttonLeft ==HIGH){digitalWrite(light_Back, LOW);} else {digitalWrite(light_Back, HIGH);}// Y-as gebruikt voor vooruit en achterwaartse controle als (yAxis <470) {// Stel de juiste motoren achteruit digitalWrite (IN_11, LOW); digitalWrite(IN_12, HOOG); digitalWrite(IN_13, HOOG); digitalWrite(IN_14, LAAG); // Zet de linkermotoren achteruit digitalWrite (IN_21, HIGH); digitalWrite(IN_22, LAAG); digitalWrite(IN_23, LAAG); digitalWrite(IN_24, HOOG); // Converteer de afnemende Y-asmetingen om achteruit te gaan van 470 naar 0 naar 0 tot 255 waarde voor het PWM-signaal voor het verhogen van de motorsnelheid speedRight =map (yAxis, 470, 0, 0, 255); speedLeft =kaart (yAxis, 470, 0, 0, 255); }else if (yAxis> 550) { // Zet de juiste motoren vooruit digitalWrite (IN_11, HIGH); digitalWrite(IN_12, LAAG); digitalWrite (IN_13, LAAG); digitalWrite(IN_14, HOOG); // Zet de linkermotoren vooruit digitalWrite (IN_21, LOW); digitalWrite(IN_22, HOOG); digitalWrite(IN_23, HOOG); digitalWrite(IN_24, LAAG); // Converteer de toenemende Y-as-aflezingen om vooruit te gaan van 550 naar 1023 naar een waarde van 0 naar 255 voor het PWM-signaal voor het verhogen van de motorsnelheid speedRight =map (yAxis, 550, 1023, 0, 255); speedLeft =kaart (yAxis, 550, 1023, 0, 255); } // Als de joystick in het midden blijft, bewegen de motoren niet anders { speedRight =0; snelheidLinks =0; }// X-as gebruikt voor linker- en rechterbesturing if (xAxis <470) { // Converteer de afnemende X-asmetingen van 470 naar 0 naar toenemende 0 tot 255 waarde int xMapped =map(xAxis, 470, 0, 0 , 255); // Ga naar links - verlaag de linker motorsnelheid, verhoog de rechter motorsnelheid speedLeft =speedLeft - xMapped; speedRight =speedRight + xMapped; // Beperk het bereik van 0 tot 255 if (speedLeft <0) { speedLeft =0; } if (speedRight> 255) { speedRight =255; } } if (xAxis> 550) { // Converteer de toenemende X-as-aflezingen van 550 naar 1023 naar 0 tot 255 waarde int xMapped =map (xAxis, 550, 1023, 0, 255); // Ga naar rechts - verlaag de rechter motorsnelheid, verhoog de linker motorsnelheid speedLeft =speedLeft + xMapped; speedRight =speedRight - xMapped; // Beperk het bereik van 0 tot 255 als (speedLeft> 255) { speedLeft =255; } if (speedRight <0) { speedRight =0; } } // Voorkom zoemen bij lage snelheden (Pas aan volgens uw motoren. Mijn motoren konden niet beginnen te bewegen als de PWM-waarde lager was dan 70) if (speedLeft <70) { speedLeft =0; } if (speedRight <70) { speedRight =0; } analogWrite(ENA_m1, speedRight); // Stuur PWM-signaal naar motor A analogWrite (ENB_m1, speedRight); analogWrite(ENA_m2, speedLeft); // Stuur PWM-signaal naar motor B analogWrite (ENB_m2, speedLeft); /* Serial.print("X ="); Serial.print(xAxis); Serieel.print(" Y ="); Serial.print(yAxis); Serial.print(" Up ="); Serial.print(joystick[2]); Serial.print(" Rechts ="); Serial.print(joystick[3]); Serial.print ("Omlaag ="); Serial.print(joystick[4]); Serial.print(" Links ="); Serial.println(joystick[5]); */ } }
Joystick_nRF24.inoArduino
Code voor Joystick Controller/* JoyStick module transceiver code - AANSLUITINGEN:nRF24L01 Modules Zie:1 - GND 2 - VCC 3.3V !!! NOT 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:Omhoog - pin 2 Rechts - pin 3 Omlaag - pin 4 Links - pin 5 - Analoge joystickmodule GND naar Arduino GND VCC naar Arduino +5V X Pot naar Arduino A0 Y Pot naar Arduino A1/*-----( Importeer benodigde bibliotheken)----- */#include#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// OPMERKING:de "LL" aan het einde van de constante is "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Definieer de zendpijp/*-----( Declareer objecten) -----*/RF24 radio (CE_PIN, CSN_PIN); // Maak een Radio/*-----( Declare Variables) -----*/int joystick [6]; // 6 elementarray met Joystick-lezing en 4 buttonsint buttonUp =2;int buttonRight =3;int buttonDown =4;int buttonLeft =5;void setup() {Serial.begin(9600); radio.begin(); radio.openWritingPipe(pijp); radio.stopListening(); // declareer pinMode voor alle knoppen en initiële status pinMode (buttonUp, INPUT_PULLUP); pinMode (knopRechts, INPUT_PULLUP); pinMode(buttonDown,INPUT_PULLUP); pinMode (knop Links, INPUT_PULLUP); digitalWrite(knopOmhoog,LAAG); digitalWrite(knopRechts,LAAG); digitalWrite (knopOmlaag, LAAG); digitalWrite(buttonLeft,LOW);}void loop() {joystick[0] =analogRead(xAxis); joystick [1] =analoog lezen (yAxis); joystick [2] =digitalRead(buttonUp); joystick [3] =digitalRead (knopRechts); joystick [4] =digitalRead (buttonDown); joystick [5] =digitalRead (knopLinks); radio.write (joystick, sizeof(joystick)); vertraging(20); Serieel.print("X ="); Serial.print(analogRead(xAxis)); Serieel.print(" Y ="); Serial.print(analogRead(yAxis)); Serial.print(" Up ="); Serial.print (digitalRead (buttonUp)); Serial.print(" Rechts ="); Serial.print (digitalRead (buttonRight)); Serial.print ("Omlaag ="); Serial.print (digitalRead (buttonDown)); Serial.print(" Links ="); Serial.println(digitalRead(buttonLeft));}
Schema's
rc_car_tp3A7JlpYw.fzz
Productieproces