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

Joystick-gesteuertes RC-Auto

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Arduino USB Host Shield
× 1
XBOX360 Wireless Controller
× 1
XBOX360-Empfänger
× 1
1 L293D-Motortreiber
× 1
7812
× 1
78S12
× 1
Schalter
× 1
Kühlkörper
× 1
Netzstecker
× 1
Batterieanschluss für 8 1v5 AA Batterien mit 9V Batteriestecker
× 1

Über dieses Projekt

1. Nimm das Auto!

Zuallererst benötigen Sie ein altes RC-Auto. Zum Glück habe ich einen Monstertruck gefunden. Das kann sehr interessant sein!

Entfernen Sie die gesamte Elektronik mit Ausnahme der Kabel zur Steuerung der beiden Motoren.

2. Arduino und der Schild

Nehmen Sie ein Arduino-Board (ich habe mich für ein Arduino UNO entschieden) und stecken Sie das USB-Host-Shield darauf.

3. Arduino am Auto anbringen

Stecken Sie das Schild oben auf das Arduino UNO und das USB-Host-Schild und schrauben Sie sie an das Auto. Ich habe eines der Löcher für die alte elektronische Schaltung verwendet.

4. Mach den Rundgang

Ich habe meine auf einem Steckbrett gemacht, aber Sie können es auch auf einem Perfboard bauen. Im Wesentlichen besteht die Schaltung aus zwei Treibern (L293D oder SN754410) und zwei Spannungsstabilisatoren. Die Spannungsstabilisatoren werden verwendet, um die Spannung von den Batterien zu begrenzen. Tatsächlich empfehle ich Ihnen, 10-12 AA 1,5-V-Batterien zu verwenden, um eine maximale Spannung von 15-18 V zu haben, die Ihnen mehr Zeit zum Spielen mit dem RC-Auto gibt. Da der Motor viel Strom benötigt, benötigen wir einen leistungsstarken Spannungsstabilisator wie den 78S12, um das Auto aus der Ruheposition zu bewegen (ca. 2 A).

Wenn Sie mehr über die Funktionsweise des Treibers erfahren möchten, schauen Sie hier !

5. Die Rennstrecke am Auto anbringen

Suchen Sie einen freien Platz auf dem RC-Auto, an dem Sie die Schaltung platzieren können. Auf dem Monstertruck, den ich habe, ist viel Platz. Verbinden Sie nach der Positionierung den Stromkreis mit den beiden Motoren. Schließen Sie schließlich den drahtlosen Empfänger an das USB-Host-Shield an.

6. Der Kodex

Der Code basiert auf den Beispielen der USB Host Library 2.0, die auf GitHub von Kristian Lauszus von circuit@home gehostet wird

USB_Host_Shield_2.0
/*Beispielskizze für die Xbox Wireless Reciver Library – entwickelt von Kristian LauszusEs unterstützt bis zu vier Controller drahtlosWeitere Informationen finden Sie im Blogbeitrag:http://blog.tkjelectronics.dk/2012/12 /xbox-360-receiver-added-to-the-usb-host-library/ odersende mir eine E-Mail:[email protected]*/#include // Satisfy IDE, die nur sehen muss die Include-Anweisung in der ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //Der gewählte Pin muss PWM haben#define motorPinTwo 6 //Der gewählte Pin muss . haben PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Definiert die Drehzahl des Motors. MUSS zwischen 0 und 255 liegen. */int pulse =0;int forward =0;int brake_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin(115200); if (Usb.Init() ==-1) {Serial.print (F("\r\nOSC wurde nicht gestartet")); während(1); // motor_stop () anhalten; Center(); } Serial.print (F("\r\nXbox Wireless Receiver Library gestartet")); pinMode (motorPinOne, AUSGANG); pinMode (motorPinTwo, AUSGANG); pinMode (motor2PinOne, AUSGANG); pinMode (motor2PinTwo, AUSGANG); pinMode (BREMSE, AUSGANG); digitalWrite (BRAKE, LOW);}void loop() { Usb.Task(); if(Xbox.XboxReceiverConnected) { for(uint8_t i=0;i<4;i++) { if(Xbox.getButtonPress(L2, i)) {Serial.print("L2:"); Serial.print (Xbox.getButtonPress (L2, i)); Puls =Xbox.getButtonPress(L2, i); vorwärts =0; im Uhrzeigersinn(); } if(Xbox.getButtonPress(R2, i)) {Serial.print("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); Puls =Xbox.getButtonPress(R2, i); vorwärts =1; gegen den Uhrzeigersinn(); } if(Xbox.getAnalogHat(LeftHatX, i)> 7500 || Xbox.getAnalogHat(LeftHatX, i) <-7500 || Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <- 7500 || Xbox.getAnalogHat(RightHatX, i)> 7500 || Xbox.getAnalogHat(RightHatX, i) <-7500 || Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <- 7500) {if (Xbox.getAnalogHat(LeftHatX, i)> 7500) {Serial.print (F("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); sonst center(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) {Serial.print (F("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); sonst center(); } if (Xbox.getAnalogHat (LeftHatY, i)> 7500 || Xbox.getAnalogHat (LeftHatY, i) <-7500) {Serial.print (F ("LeftHatY:")); Serial.print (Xbox.getAnalogHat (LeftHatY, i)); Serial.print("\t"); } if (Xbox.getAnalogHat (RightHatX, i)> 7500) {Serial.print (F ("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) {Serial.print (F("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat (RightHatY, i)> 7500 || Xbox.getAnalogHat (RightHatY, i) <-7500) {Serial.print (F ("RightHatY:")); Serial.print (Xbox.getAnalogHat (RightHatY, i)); } Serial.println(); } if (Xbox.getButtonClick (UP, i)) {Serial.println (F ("Up")); } if (Xbox.getButtonClick (DOWN, i)) {Serial.println (F ("Down")); } if (Xbox.getButtonClick (LINKS, i)) {Serial.println (F ("Links")); } if (Xbox.getButtonClick (RECHTS, i)) {Serial.println (F ("Rechts")); } if (Xbox.getButtonClick (START, i)) {Serial.println (F ("Start")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Zurück")); } if (Xbox.getButtonClick (L3, i)) Serial.println (F ("L3")); if(Xbox.getButtonClick(R3, i)) Serial.println(F("R3")); if(Xbox.getButtonClick(L1, i)) Serial.println(F("L1")); if(Xbox.getButtonClick(R1, i)) Serial.println(F("R1")); if (Xbox.getButtonClick (XBOX, i)) { Xbox.setLedMode (ROTATING, i); Serial.println (F ("Xbox")); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (BREMSE, HOCH); Bremse_ein =1; Puls =100; if (vorwärts) im Uhrzeigersinn (); sonst gegen den Uhrzeigersinn (); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motor_stop(); } } } Verzögerung (1);} ungültig im Uhrzeigersinn () { Serial.print ( "Rotation ist im Uhrzeigersinn und Geschwindigkeit ist"); Serial.println (Impuls); analogWrite (MotorPinOne,Impuls); // Leg 1 der H-Brücke auf Low setzen analogWrite (motorPinTwo, 0); if (brake_on) { Verzögerung (600); digitalWrite (BREMSE, NIEDRIG); Bremse_ein =0; Impuls =0; }} ungültig gegen den Uhrzeigersinn () {Serial.print ( "Rotation ist gegen den Uhrzeigersinn und Geschwindigkeit ist"); Serial.println (Impuls); analogWrite (motorPinOne,0); // Leg 1 der H-Brücke auf Low setzen analogWrite (motorPinTwo,pulse); if (brake_on) { Verzögerung (600); digitalWrite (BREMSE, NIEDRIG); Bremse_ein =0; Impuls =0; }}void turn_left () { digitalWrite (motor2PinOne, HIGH); // Leg 1 der H-Brücke niedrig setzen DigitalWrite (motor2PinTwo, LOW);}void turn_right () { DigitalWrite (motor2PinOne, LOW); // Leg 1 der H-Brücke niedrig setzen DigitalWrite (motor2PinTwo,HIGH);}void motors_stop () { AnalogWrite (motorPinOne, 0); analogWrite (motorPinTwo,0); Impuls =0;} Leere Mitte () { DigitalWrite (motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);} 

Code

  • Code-Snippet Nr. 1
Code-Snippet Nr. 1Arduino
/* Beispielskizze für die Xbox Wireless Reciver Library - entwickelt von Kristian Lauszus Unterstützt bis zu vier Controller drahtlos Weitere Informationen finden Sie im Blogbeitrag:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library/ oder senden Sie mir eine E-Mail:[email protected] */#include // Satisfy IDE, die nur die Include-Anweisung sehen muss in der ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //Der gewählte Pin muss PWM haben#define motorPinTwo 6 //Der gewählte Pin muss PWM haben#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Definieren Sie die Drehzahl des Motors. MUSS zwischen 0 und 255 liegen. */int pulse =0;int forward =0;int brake_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin(115200); if (Usb.Init() ==-1) {Serial.print (F("\r\nOSC wurde nicht gestartet")); während(1); // motor_stop () anhalten; Center(); } Serial.print (F("\r\nXbox Wireless Receiver Library gestartet")); pinMode (motorPinOne, AUSGANG); pinMode (motorPinTwo, AUSGANG); pinMode (motor2PinOne, AUSGANG); pinMode (motor2PinTwo, AUSGANG); pinMode (BREMSE, AUSGANG); digitalWrite (BRAKE, LOW);}void loop() { Usb.Task(); if(Xbox.XboxReceiverConnected) { for(uint8_t i=0;i<4;i++) { if(Xbox.getButtonPress(L2, i)) {Serial.print("L2:"); Serial.print (Xbox.getButtonPress (L2, i)); Puls =Xbox.getButtonPress(L2, i); vorwärts =0; im Uhrzeigersinn(); } if(Xbox.getButtonPress(R2, i)) {Serial.print("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); Puls =Xbox.getButtonPress(R2, i); vorwärts =1; gegen den Uhrzeigersinn(); } if(Xbox.getAnalogHat(LeftHatX, i)> 7500 || Xbox.getAnalogHat(LeftHatX, i) <-7500 || Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <- 7500 || Xbox.getAnalogHat(RightHatX, i)> 7500 || Xbox.getAnalogHat(RightHatX, i) <-7500 || Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <- 7500) {if (Xbox.getAnalogHat(LeftHatX, i)> 7500) {Serial.print (F("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); sonst center(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) {Serial.print (F("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); sonst center(); } if (Xbox.getAnalogHat (LeftHatY, i)> 7500 || Xbox.getAnalogHat (LeftHatY, i) <-7500) {Serial.print (F ("LeftHatY:")); Serial.print (Xbox.getAnalogHat (LeftHatY, i)); Serial.print("\t"); } if (Xbox.getAnalogHat (RightHatX, i)> 7500) {Serial.print (F ("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) {Serial.print (F("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat (RightHatY, i)> 7500 || Xbox.getAnalogHat (RightHatY, i) <-7500) {Serial.print (F ("RightHatY:")); Serial.print (Xbox.getAnalogHat (RightHatY, i)); } Serial.println(); } if (Xbox.getButtonClick (UP, i)) {Serial.println (F ("Up")); } if (Xbox.getButtonClick (DOWN, i)) {Serial.println (F ("Down")); } if (Xbox.getButtonClick (LINKS, i)) {Serial.println (F ("Links")); } if (Xbox.getButtonClick (RECHTS, i)) {Serial.println (F ("Rechts")); } if (Xbox.getButtonClick (START, i)) {Serial.println (F ("Start")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Zurück")); } if (Xbox.getButtonClick (L3, i)) Serial.println (F ("L3")); if(Xbox.getButtonClick(R3, i)) Serial.println(F("R3")); if(Xbox.getButtonClick(L1, i)) Serial.println(F("L1")); if(Xbox.getButtonClick(R1, i)) Serial.println(F("R1")); if (Xbox.getButtonClick (XBOX, i)) { Xbox.setLedMode (ROTATING, i); Serial.println (F ("Xbox")); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (BREMSE, HOCH); Bremse_ein =1; Puls =100; if (vorwärts) im Uhrzeigersinn (); sonst gegen den Uhrzeigersinn (); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motor_stop(); } } } Verzögerung (1);} ungültig im Uhrzeigersinn () { Serial.print ( "Rotation ist im Uhrzeigersinn und Geschwindigkeit ist"); Serial.println (Impuls); analogWrite (MotorPinOne,Impuls); // Leg 1 der H-Brücke auf Low setzen analogWrite (motorPinTwo, 0); if (brake_on) { Verzögerung (600); digitalWrite (BREMSE, NIEDRIG); Bremse_ein =0; Impuls =0; }} ungültig gegen den Uhrzeigersinn () {Serial.print ( "Rotation ist gegen den Uhrzeigersinn und Geschwindigkeit ist"); Serial.println (Impuls); analogWrite (motorPinOne,0); // Leg 1 der H-Brücke auf Low setzen analogWrite (motorPinTwo,pulse); if (brake_on) { Verzögerung (600); digitalWrite (BREMSE, NIEDRIG); Bremse_ein =0; Impuls =0; } }void turn_left () { digitalWrite (motor2PinOne, HIGH); // Leg 1 der H-Brücke niedrig setzen DigitalWrite (motor2PinTwo, LOW);}void turn_right () { DigitalWrite (motor2PinOne, LOW); // Leg 1 der H-Brücke niedrig setzen DigitalWrite (motor2PinTwo,HIGH);}void motors_stop () { AnalogWrite (motorPinOne, 0); analogWrite (motorPinTwo,0); Impuls =0;} Leere Mitte () { DigitalWrite (motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);}
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

Herstellungsprozess

  1. Raspberry Pi Roboter über Bluetooth gesteuert
  2. Gestengesteuerte interaktive Tischleuchte
  3. Alexa-gesteuerte LEDs über Raspberry Pi
  4. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  5. Arduino Nano:Steuerung von 2 Schrittmotoren mit Joystick
  6. Sprachgesteuerter Roboter
  7. Autozähler mit Arduino + Processing + PHP
  8. Arduino-gesteuerter Klavierroboter:PiBot
  9. Wi-Servo:Wi-Fi browsergesteuerte Servomotoren
  10. Arduino-Joystick