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

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 2
SparkFun Transceiver Breakout - nRF24L01+ (RP-SMA)
× 2
Funduino Joystick Shield V1.A
× 1
SparkFun Dual H-Bridge Motortreiber L298
× 2
4WD Smart Robot Car Chassis Kit
× 1
LED (generisch)
× 3
Widerstand 221 Ohm
× 2
Breadboard (generisch)
× 2
18650 Batterien
× 2
Powerbank
× 1
Jumper (generisch)
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Geschichte

Hallo allerseits! Dies ist mein nächstes Projekt - Arduino 4WD RC Car mit Joystick Controller oder Wie einfach es ist, ein Arduino 4WD Smart Car mit einem analogen Joystick zu steuern.

Dieses RC-Joystick-gesteuerte Auto verwendet NRF24l01 als Sender und Empfänger. Es hat eine Reichweite von bis zu 1 Kilometer im freien Raum. Ist auch sehr einfach und leicht zu machen.

1. Joystick-Controller

Komponenten für Joystick:

Der Joystick-Schild sitzt auf Ihrem Arduino und verwandelt ihn in einen einfachen Controller. 7 Drucktasten (4 große Tasten, 2 kleine Tasten und eine Joystick-Auswahltaste) und ein zweiachsiger Daumen-Joystick verleihen Ihrem Arduino-Funktionalität auf dem Niveau der alten Nintendo-Controller. Dieses Gerät bietet auch die Schnittstellen Nokia 5110 LCD und nRF24L01.

Funktionen:

  • nRF24L01-Schnittstelle
  • Nokia 5110 LCD-Schnittstelle
  • Bluetooth-Schnittstelle
  • I2C-Schnittstelle
  • Kompatibel mit Arduino
  • Betriebsspannung 3,5V oder 5V

Tatsächlich ist es als BTE16-49 gekennzeichnet - nRF24L01+RFX2401C +PA+LNA drahtlose Kommunikationsmodule mit Antennenabschirmgehäuse 2,4 GHz 20 dBm 1000 m.

Vom Verkäufer angegebene Eigenschaften:

  • 2,4 GHz globales offenes ISM-Band, lizenzfreie Nutzung
  • die maximale Betriebsgeschwindigkeit von 2Mbps, effiziente GFSK-Modulation, Übertragung von Audio, Video
  • 125 Kanäle, um die Anforderungen an Mehrpunktkommunikation und Frequenzsprung-Kommunikation zu erfüllen
  • die Adresse der integrierten Hardware-CRC-Fehlererkennung und Punkt-zu-Mehrpunkt-Kommunikationssteuerung
  • Arbeitsspannung 3,0-3,6V, die Sendeleistung 20dBm (VDD =3,3V)
  • die externe 2,4-GHz-Antenne
  • Pins mit 2,54 mm Rastermaß, vollständig kompatibel ohne die Verstärkermodulschnittstelle, einfach auszutauschen, um den Abstand zu erhöhen
  • Übertragungsentfernung bis zu 1000 m

2. Joystick-Controller

Joystick Shield hat 4 große Tasten + 2 kleine Tasten + Joystick-Auswahltaste und einen zweiachsigen Daumen-Joystick (X-Achse von 0 bis 1023, Y-Achse von 0 bis 1023) Das Shield sitzt auf Ihrem Arduino und verwandelt es in eine einfache Steuerung. In meiner Skizze ist Button Up für Summer (Hupe), Button Right - Frontlicht (LED + Widerstand 200 Ohm), Button Left - Backlights (LEDs + Widerstand 200 Ohm). Andere Tasten werden nicht verwendet.

Joystick-Test:

Ruhezustand:X=499, Y=502, Up=1, Right=1, Down=1, Left=1

3. Arduino 4WD RC-Auto

Stellen Sie die Verbindungen wie im obigen Schaltplanbild her.

Hinweis:Vor dem Hochladen des Codes müssen Sie die Jumperdrähte von der Arduino Uno-Platine trennen (Pins 0, 1).

Dass es, wenn Sie alle Schritte richtig gemacht haben, Auto fahrbereit ist!

Nach dem Einschalten des Arduino Car und des Joystick-Controllers können Sie den Joystick verwenden, um das Auto zu steuern, indem Sie den Joystick vorwärts und rückwärts bewegen.

Bleiben Sie dran!

Code

  • Car_nRF24.ino
  • Joystick_nRF24.ino
Car_nRF24.inoArduino
Code für Arduino RC Car
/* JoyStick Modul Empfängercode - ANSCHLÜSSE:nRF24L01 Module Siehe:1 - GND 2 - VCC 3.3V !!! NICHT 5V 3 - CE zu Arduino Pin 6 4 - CSN zu Arduino Pin 8 5 - SCK zu Arduino Pin 13 6 - MOSI zu Arduino Pin 11 7 - MISO zu Arduino Pin 12 8 - UNUSED *///-----( Benötigte Bibliotheken importieren )-----#include #include #include /*-----( Konstanten und Pin-Nummern deklarieren)-----* /#define CE_PIN 6#define CSN_PIN 8// HINWEIS:das "LL" am Ende der Konstante ist "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Definiere die Sendeleitung#define light_Front 18 //LED Front Right Pin A4 für Arduino Uno#define light_Back 19 //LED Back Right Pin A5 für Arduino Uno#define horn_Buzz 7 #define ENA_m1 3 // Motor vorne rechts aktivieren/beschleunigen #define ENB_m1 5 // Motor aktivieren/beschleunigen hinten rechts#define ENA_m2 9 // Motor aktivieren/beschleunigen vorne links#define ENB_m2 10 // Motor aktivieren/beschleunigen hinten links#define IN_11 0 // L298N #1 in 1 Motor vorne rechts #define IN_12 1 // L298N #1 in 2 Motoren vorne rechts#define IN_13 2 // L298N #1 in 3 Motoren hinten rechts#define IN_14 4 // L298N #1 in 4 Motoren hinten rechts#define IN_21 14 // L298N # 2 in 1 Motor Vorne Links#define IN_22 15 // L298N #2 in 2 Motoren Vorne Links#define IN_23 16 // L298N #2 in 3 Motoren Hinten Links#define IN_24 17 // L298N #2 in 4 Motoren Hinten Links/* -----( Objekte deklarieren )-----*/RF24 Funk(CE_PIN, CSN_PIN); // Ein Funkgerät erstellen/*-----( Variablen deklarieren)-----*/int joystick[6]; // 6-Element-Array mit Joystick-Messwertenint speedRight =0;int speedLeft =0;int xAxis, yAxis; // die vier Schaltflächenvariablen von Joystickint buttonUp;int buttonRight;int buttonDown;int buttonLeft;void setup () { pinMode (light_Front, AUSGANG); pinMode (light_Back, AUSGANG); pinMode (horn_Buzz, AUSGANG); pinMode (ENA_m1, AUSGANG); pinMode (ENB_m1, AUSGANG); pinMode (ENA_m2, AUSGANG); pinMode (ENB_m2, AUSGANG); pinMode (IN_11, OUTPUT); pinMode (IN_12, OUTPUT); pinMode (IN_13, OUTPUT); pinMode (IN_14, OUTPUT); pinMode (IN_21, AUSGANG); pinMode (IN_22, AUSGANG); pinMode (IN_23, OUTPUT); pinMode (IN_24, OUTPUT);/* Serial.begin (9600); Serial.println("Nrf24L01 Empfänger wird gestartet"); */ radio.begin(); radio.openReadingPipe(1,Rohr); radio.startListening();}void loop(){ if (radio.available()) { radio.read(joystick, sizeof(joystick)); xAchse =Joystick[0]; yAchse =Joystick[1]; // die vier Schaltflächenvariablen aus dem Joystick-Array int buttonUp =joystick[2]; int buttonRight =Joystick[3]; int buttonDown =Joystick[4]; int buttonLeft =Joystick[5]; //Seriell.println(); // zum Debuggen // Datennutzlast abrufen - Debugging-Code unten 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-Achse für vorwärts verwendet und Rückwärtssteuerung if (yAxis <470) {// Setzen Sie die rechten Motoren rückwärts digitalWrite (IN_11, LOW); digitalWrite (IN_12, HIGH); digitalWrite (IN_13, HIGH); digitalWrite (IN_14, LOW); // Linke Motoren rückwärts setzen DigitalWrite (IN_21, HIGH); digitalWrite (IN_22, LOW); digitalWrite (IN_23, LOW); digitalWrite (IN_24, HIGH); // Konvertieren Sie die abnehmenden Y-Achsen-Messwerte für den Rückwärtsgang von 470 auf 0 in einen Wert von 0 bis 255 für das PWM-Signal zum Erhöhen der Motordrehzahl speedRight =map (yAxis, 470, 0, 0, 255); speedLeft =map(yAxis, 470, 0, 0, 255); aufrechtzuerhalten. Sonst if (yAxis> 550) {// Set Right Motors forward digitalWrite (IN_11, HIGH); digitalWrite (IN_12, LOW); digitalWrite (IN_13, LOW); digitalWrite (IN_14, HIGH); // Linke Motoren vorwärts setzen digitalWrite (IN_21, LOW); digitalWrite (IN_22, HIGH); digitalWrite (IN_23, HIGH); digitalWrite (IN_24, LOW); // Konvertieren Sie die zunehmenden Y-Achsen-Messwerte für das Vorwärtsgehen von 550 auf 1023 in einen Wert von 0 bis 255 für das PWM-Signal zum Erhöhen der Motordrehzahl speedRight =map (yAxis, 550, 1023, 0, 255); speedLeft =map(yAxis, 550, 1023, 0, 255); } // Wenn der Joystick in der Mitte bleibt, bewegen sich die Motoren nicht else { speedRight =0; speedLeft =0; } // X-Achse verwendet für die linke und rechte Steuerung if (xAxis <470) { // Konvertieren Sie die fallenden X-Achsen-Messwerte von 470 auf 0 in einen steigenden Wert von 0 bis 255 int xMapped =map(xAxis, 470, 0, 0 , 255); // Nach links bewegen - linke Motorgeschwindigkeit verringern, rechte Motorgeschwindigkeit erhöhen speedLeft =speedLeft - xMapped; speedRight =speedRight + xMapped; // Beschränken Sie den Bereich von 0 bis 255 if (speedLeft <0) {speedLeft =0; } if (speedRight> 255) {speedRight =255; } } if (xAxis> 550) {// Konvertieren Sie die zunehmenden X-Achsen-Messwerte von 550 bis 1023 in einen Wert von 0 bis 255 int xMapped =map(xAxis, 550, 1023, 0, 255); // Nach rechts bewegen - rechte Motorgeschwindigkeit verringern, linke Motorgeschwindigkeit erhöhen speedLeft =speedLeft + xMapped; speedRight =speedRight - xMapped; // Begrenzen Sie den Bereich von 0 bis 255 if (speedLeft> 255) {speedLeft =255; aufrechtzuerhalten. Wenn (speedRight <0) {speedRight =0; } } // Brummen bei niedrigen Geschwindigkeiten verhindern (Anpassen an Ihre Motoren. Meine Motoren konnten sich nicht bewegen, wenn der PWM-Wert unter dem Wert von 70 lag) if (speedLeft <70) {speedLeft =0; aufrechtzuerhalten. Wenn (speedRight <70) {speedRight =0; } analogWrite (ENA_m1, speedRight); // PWM-Signal an Motor A senden analogWrite (ENB_m1, speedRight); analogWrite(ENA_m2, speedLeft); // PWM-Signal an Motor B senden analogWrite (ENB_m2, speedLeft); /* Serial.print("X ="); Serial.print (xAxis); Serial.print(" Y ="); Serial.print (yAchse); Serial.print("Up ="); Serial.print (Joystick [2]); Serial.print ( " Rechts ="); Serial.print (Joystick[3]); Serial.print ( " Unten ="); Serial.print (Joystick[4]); Serial.print ( " Links ="); Serial.println (Joystick[5]); */ } } 
Joystick_nRF24.inoArduino
Code für Joystick Controller
/* JoyStick Modul Transceiver Code - ANSCHLÜSSE:nRF24L01 Module Siehe:1 - GND 2 - VCC 3.3V !!! NICHT 5V 3 - CE zu Arduino Pin 9 4 - CSN zu Arduino Pin 10 5 - SCK zu Arduino Pin 13 6 - MOSI zu Arduino Pin 11 7 - MISO zu Arduino Pin 12 8 - UNUSED Default Button Pins:Up - Pin 2 Right - Pin 3 Unten - Pin 4 Links - Pin 5 - Analoges Joystick-Modul GND zu Arduino GND VCC zu Arduino +5V X Pot zu Arduino A0 Y Pot zu Arduino A1/*-----( Benötigte Bibliotheken importieren)----- */#include #include "nRF24L01.h"#include "RF24.h"#define CE_PIN 9#define CSN_PIN 10#define xAxis 14 // A0 für Arduino UNO#define yAxis 15 // A1 für Arduino UNO// HINWEIS:das "LL" am Ende der Konstanten ist "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL; // Definiere die Sendepipe/*-----( Objekte deklarieren)-----*/RF24 radio(CE_PIN, CSN_PIN); // Ein Funkgerät erstellen/*-----( Variablen deklarieren)-----*/int joystick[6]; // 6-Element-Array mit Joystick-Lesung und 4 Tastenint buttonUp =2;int buttonRight =3;int buttonDown =4;int buttonLeft =5;void setup () { Serial.begin (9600); radio.begin(); radio.openWritingPipe(pipe); radio.stopListening(); // PinMode für alle Schaltflächen und den Anfangszustand deklarieren 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 (yAchse); Joystick [2] =digitalRead (buttonUp); Joystick [3] =digitalRead (buttonRight); Joystick[4] =digitalRead(buttonDown); Joystick[5] =digitalRead(buttonLeft); radio.write (Joystick, sizeof(Joystick)); Verzögerung (20); Serial.print("X ="); Serial.print (analogRead (xAxis)); Serial.print(" Y ="); Serial.print (analogRead (yAxis)); Serial.print("Up ="); Serial.print (digitalRead (buttonUp)); Serial.print ( " Rechts ="); Serial.print (digitalRead (buttonRight)); Serial.print ( " Unten ="); Serial.print (digitalRead (buttonDown)); Serial.print ( " Links ="); Serial.println (digitalRead (buttonLeft));}

Schaltpläne

rc_car_tp3A7JlpYw.fzz

Herstellungsprozess

  1. Arduino Digital Dice
  2. Arduino-Gamecontroller
  3. Joystick-gesteuertes RC-Auto
  4. Iron Man
  5. Finde mich
  6. Arduino 3D-gedruckter Roboterarm
  7. Arduino-Befeuchtersteuerung
  8. Autozähler mit Arduino + Processing + PHP
  9. NeoMatrix Arduino Pong
  10. Arduino-Joystick