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

Met joystick bestuurde RC-auto

Componenten en benodigdheden

Arduino UNO
× 1
Arduino USB Host Shield
× 1
XBOX360 draadloze controller
× 1
XBOX360-ontvanger
× 1
1 L293D-motorstuurprogramma
× 1
7812
× 1
78S12
× 1
Schakelaar
× 1
koellichamen
× 1
Stekker
× 1
batterijconnector voor 8 1v5 AA-batterijen met 9V-batterijstekker
× 1

Over dit project

1. Neem de auto!

Allereerst heb je een oude RC-auto nodig. Gelukkig vond ik een monstertruck. Dit kan heel interessant zijn!

Verwijder alle elektronica behalve de kabels om de twee motoren te bedienen.

2. Arduino en het schild

Neem een ​​Arduino-bord (ik koos een Arduino UNO) en sluit het USB-hostschild erop aan.

3. Bevestig Arduino aan de auto

Steek het schild bovenop de Arduino UNO en het USB Host-schild en schroef ze op de auto. Ik gebruikte een van de gaten voor het oude elektronische circuit.

4. Maak het circuit

Ik heb de mijne op een breadboard gemaakt, maar je kunt hem ook op een perfboard bouwen. In wezen bestaat het circuit uit twee drivers (L293D of SN754410) en twee spanningsstabilisatoren. De spanningsstabilisatoren worden gebruikt om de spanning van de batterijen te beperken. Ik raad je zelfs aan om 10-12 AA 1.5V-batterijen te gebruiken om een ​​maximale spanning van 15-18V te krijgen, zodat je meer tijd hebt om met de RC-auto te spelen. Omdat de motor veel stroom nodig heeft, hebben we een krachtige spanningsstabilisator zoals de 78S12 nodig om de auto vanuit de rustpositie te verplaatsen (ongeveer 2A).

Als je meer informatie wilt over hoe de driver werkt, kijk dan hier!

5. Bevestig het circuit aan de auto

Zoek een lege plek op de RC-auto waar je het circuit kunt plaatsen. Op de monstertruck die ik heb, is er veel ruimte. Eenmaal geplaatst, sluit u het circuit aan op de twee motoren. Sluit ten slotte de draadloze ontvanger aan op het USB-hostschild.

6. De code

De code is gebaseerd op de voorbeelden van de USB Host Library 2.0 gehost op GitHub door Kristian Lauszus van circuits@home

USB_Host_Shield_2.0
/*Voorbeeldschets voor de Xbox Wireless Reciver-bibliotheek - ontwikkeld door Kristian Lauszus Het ondersteunt maximaal vier controllers draadloos Zie de blogpost voor meer informatie:http://blog.tkjelectronics.dk/2012/12 /xbox-360-receiver-added-to-the-usb-host-library/ of stuur me een e-mail:[email protected]*/#include // Voldoe aan IDE, die alleen hoeft te zien het include-statement in de ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //De gekozen pin moet PWM hebben#define motorPinTwo 6 //De gekozen pin moet PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Definieer het toerental van de motor. MOET tussen 0 en 255 liggen. */int pulse =0;int forward =0;int brake_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serieel.begin(115200); if (Usb.Init() ==-1) { Serial.print(F("\r\nOSC is niet gestart")); terwijl(1); // stop motoren_stop(); centrum(); } Serial.print(F("\r\nXbox Wireless Receiver Library gestart")); pinMode (motorPinOne, UITGANG); pinMode (motorPinTwo, UITGANG); pinMode (motor2PinOne, UITGANG); pinMode (motor2PinTwo, UITGANG); pinMode (REM, UITGANG); 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)); pulse =Xbox.getButtonPress(L2, i); vooruit =0; met de klok mee(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); pulse =Xbox.getButtonPress (R2, i); vooruit =1; tegen de klok in(); } 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)); Serieel.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); anders centrum(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serieel.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); anders centrum(); } if(Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <-7500) { Serial.print(F("LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY, i)); Serieel.print("\t"); } if(Xbox.getAnalogHat(RightHatX, i)> 7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serieel.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serieel.print("\t"); } if(Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <-7500) { Serial.print(F("RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY, i)); } Serieel.println(); } if(Xbox.getButtonClick(UP, i)) { Serial.println(F("Up")); } if(Xbox.getButtonClick(DOWN, i)) { Serial.println(F("Down")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("Links")); } if(Xbox.getButtonClick(RIGHT, i)) { Serial.println(F("Right")); } if(Xbox.getButtonClick(START, i)) { Serial.println(F("Start")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("Terug")); } 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(REM, HOOG); rem_aan =1; puls =100; if (vooruit) met de klok mee(); anders tegen de klok in (); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) {Serial.println(F("Y")); motoren_stop(); } } } delay(1);}void met de klok mee(){ Serial.print("Rotatie is met de klok mee en snelheid is "); Serial.println(puls); analogWrite (motorPinOne, puls); // stel been 1 van de H-brug laag in analogWrite(motorPinTwo,0); if (brake_on) {vertraging (600); digitalWrite (REM, LAAG); rem_aan =0; puls =0; }}void counterClockwise(){ Serial.print("Rotatie is tegen de klok in en snelheid is "); Serial.println(puls); analoogWrite(motorPinOne,0); // stel been 1 van de H-brug laag analogWrite (motorPinTwo,pulse); if (brake_on) {vertraging (600); digitalWrite (REM, LAAG); rem_aan =0; puls =0; }}void turn_left(){ digitalWrite(motor2PinOne,HIGH); // stel been 1 van de H-brug laag digitalWrite(motor2PinTwo,LOW);}void turn_right(){digitalWrite(motor2PinOne,LOW); // stel been 1 van de H-brug laag digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){analogeWrite(motorPinOne,0); analoogWrite(motorPinTwo,0); pulse =0;}void center(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);} 

Code

  • Codefragment #1
Codefragment #1Arduino
/* Voorbeeldschets voor de Xbox Wireless Reciver-bibliotheek - ontwikkeld door Kristian Lauszus Het ondersteunt maximaal vier controllers draadloos. Zie voor meer informatie de blogpost:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library/ of stuur me een e-mail:[email protected] */#include // Voldoe aan IDE, die alleen de include-verklaring hoeft te zien in de ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //De gekozen pin moet PWM hebben#define motorPinTwo 6 //De gekozen pin moet PWM hebben#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Bepaal het toerental van de motor. MOET tussen 0 en 255 liggen. */int pulse =0;int forward =0;int brake_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serieel.begin(115200); if (Usb.Init() ==-1) { Serial.print(F("\r\nOSC is niet gestart")); terwijl(1); // stop motoren_stop(); centrum(); } Serial.print(F("\r\nXbox Wireless Receiver Library gestart")); pinMode (motorPinOne, UITGANG); pinMode (motorPinTwo, UITGANG); pinMode (motor2PinOne, UITGANG); pinMode (motor2PinTwo, UITGANG); pinMode (REM, UITGANG); 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)); pulse =Xbox.getButtonPress(L2, i); vooruit =0; met de klok mee(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); pulse =Xbox.getButtonPress (R2, i); vooruit =1; tegen de klok in(); } 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)); Serieel.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); anders centrum(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serieel.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); anders centrum(); } if(Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <-7500) { Serial.print(F("LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY, i)); Serieel.print("\t"); } if(Xbox.getAnalogHat(RightHatX, i)> 7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serieel.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serieel.print("\t"); } if(Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <-7500) { Serial.print(F("RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY, i)); } Serieel.println(); } if(Xbox.getButtonClick(UP, i)) { Serial.println(F("Up")); } if(Xbox.getButtonClick(DOWN, i)) { Serial.println(F("Down")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("Links")); } if(Xbox.getButtonClick(RIGHT, i)) { Serial.println(F("Right")); } if(Xbox.getButtonClick(START, i)) { Serial.println(F("Start")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("Terug")); } 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(REM, HOOG); rem_aan =1; puls =100; if (vooruit) met de klok mee(); anders tegen de klok in (); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) {Serial.println(F("Y")); motoren_stop(); } } } delay(1);}void met de klok mee(){ Serial.print("Rotatie is met de klok mee en snelheid is "); Serial.println(puls); analogWrite (motorPinOne, puls); // stel been 1 van de H-brug laag in analogWrite(motorPinTwo,0); if (brake_on) {vertraging (600); digitalWrite (REM, LAAG); rem_aan =0; puls =0; }}void counterClockwise(){ Serial.print("Rotatie is tegen de klok in en snelheid is "); Serial.println(puls); analoogWrite(motorPinOne,0); // stel been 1 van de H-brug laag analogWrite (motorPinTwo,pulse); if (brake_on) {vertraging (600); digitalWrite (REM, LAAG); rem_aan =0; puls =0; } }void turn_left(){ digitalWrite(motor2PinOne,HIGH); // stel been 1 van de H-brug laag digitalWrite(motor2PinTwo,LOW);}void turn_right(){digitalWrite(motor2PinOne,LOW); // stel been 1 van de H-brug laag digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){analogeWrite(motorPinOne,0); analoogWrite(motorPinTwo,0); pulse =0;}void center(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);}
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

Productieproces

  1. Raspberry Pi-robot bestuurd via Bluetooth
  2. Gebaargestuurde interactieve tafellamp
  3. Alexa gestuurde LED's via Raspberry Pi
  4. Nunchuk-gestuurde robotarm (met Arduino)
  5. Arduino Nano:bedien 2 stappenmotoren met joystick
  6. Spraakgestuurde robot
  7. Autoteller met Arduino + Processing + PHP
  8. Arduino-gestuurde pianorobot:PiBot
  9. Wi-Servo:Wi-Fi Browser gestuurde servomotoren
  10. Arduino-joystick
  11. RC Porsche Car (Arduino Project)