Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Voiture RC contrôlée par joystick

Composants et fournitures

Arduino UNO
× 1
Arduino USB Host Shield
× 1
Manette sans fil XBOX360
× 1
Récepteur XBOX360
× 1
1 pilote de moteur L293D
× 1
7812
× 1
78S12
× 1
Switch
× 1
dissipateurs
× 1
Prise d'alimentation
× 1
connecteur de batterie pour 8 piles AA 1v5 avec prise de batterie 9V
× 1

À propos de ce projet

1. Prenez la voiture !

Tout d'abord, vous avez besoin d'une vieille voiture RC. Heureusement, j'ai trouvé un camion monstre. Cela peut être très intéressant !

Retirez toute l'électronique à l'exception des câbles de commande des deux moteurs.

2. Arduino et le bouclier

Prenez une carte Arduino (j'ai choisi un Arduino UNO) et branchez le shield hôte USB dessus.

3. Connectez Arduino à la voiture

Branchez le blindage au-dessus de l'Arduino UNO et du blindage hôte USB et vissez-les à la voiture. J'ai utilisé l'un des trous pour l'ancien circuit électronique.

4. Faire le circuit

J'ai fait le mien sur une planche à pain, mais vous pouvez aussi le construire sur une planche à découper. Essentiellement, le circuit est composé de deux pilotes (L293D ou SN754410) et de deux stabilisateurs de tension. Les stabilisateurs de tension sont utilisés pour limiter la tension des batteries. En fait, je vous suggère d'utiliser 10-12 piles AA 1.5V afin d'avoir une tension maximale de 15-18V qui vous donnera plus de temps pour jouer avec la voiture RC. Étant donné que le moteur nécessite une grande quantité de courant, pour déplacer la voiture de la position de repos (environ 2 A), nous avons besoin d'un puissant stabilisateur de tension comme le 78S12.

Si vous voulez plus d'informations sur le fonctionnement du pilote, jetez un œil ici !

5. Fixer le circuit à la voiture

Trouvez une place vide sur la voiture RC où vous pouvez placer le circuit. Sur le camion monstre que j'ai, il y a beaucoup d'espace. Une fois positionné, connectez le circuit aux deux moteurs. Enfin, branchez le récepteur sans fil dans le blindage hôte USB.

6. Le code

Le code est basé sur les exemples de l'USB Host Library 2.0 hébergé sur GitHub par Kristian Lauszus de circuits@home

USB_Host_Shield_2.0
/*Exemple de croquis pour la bibliothèque Xbox Wireless Reciver - développé par Kristian LauszusIl prend en charge jusqu'à quatre contrôleurs sans filPour plus d'informations, consultez l'article de blog :http://blog.tkjelectronics.dk/2012/12 /xbox-360-receiver-add-to-the-usb-host-library/ ou envoyez-moi un e-mail :[email protected]*/#include // Satisfaire l'IDE, qui n'a qu'à voir l'instruction include dans l'ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //La broche choisie doit avoir PWM#define motorPinTwo 6 //La broche choisie doit avoir PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Définit la vitesse de rotation du moteur. DOIT être compris entre 0 et 255. */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 n'a pas démarré")); tandis que (1); //arrêt motors_stop(); centre(); } Serial.print(F("\r\nBibliothèque du récepteur sans fil Xbox démarrée")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, SORTIE); pinMode (FREIN, SORTIE); digitalWrite (BRAKE, LOW);}boucle vide() { 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)); impulsion =Xbox.getButtonPress(L2, i); avant =0 ; dans le sens des aiguilles d'une montre (); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); impulsion =Xbox.getButtonPress(R2, i); avant =1 ; dans le sens antihoraire(); } 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(); else 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) <-2600) turn_left(); else 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(LEFT, i)) { Serial.println(F("Gauche")); } 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("Back")); } 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(ROTATION, i); Serial.println(F("Xbox")); } if(Xbox.getButtonClick(A, i)) { Serial.println(F("A")); } if(Xbox.getButtonClick(B, i)) { Serial.println(F("B")); digitalWrite (FREIN, HAUT); Brake_on =1 ; pouls =100 ; if (en avant) dans le sens des aiguilles d'une montre (); else dans le sens antihoraire(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); moteurs_arrêt(); } } } delay(1);}void dans le sens des aiguilles d'une montre(){ Serial.print("La rotation est dans le sens des aiguilles d'une montre et la vitesse est "); Serial.println(impulsion); analogWrite(motorPinOne,pulse); // définit la jambe 1 du pont en H low analogWrite(motorPinTwo,0) ; if (brake_on) { délai (600); digitalWrite(FREIN, BAS); Brake_on =0 ; pouls =0; }}void counterClockwise(){ Serial.print("La rotation est dans le sens inverse des aiguilles d'une montre et la vitesse est "); Serial.println(impulsion); analogWrite(motorPinOne,0) ; // définit la jambe 1 du pont en H bas analogWrite(motorPinTwo,pulse); if (brake_on) { délai (600); digitalWrite(FREIN, BAS); Brake_on =0 ; pouls =0; }}void turn_left(){ digitalWrite(motor2PinOne,HIGH); // définit la jambe 1 du pont en H digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // définit la jambe 1 du pont en H low digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0) ; analogWrite(motorPinTwo,0) ; pulse =0;}centre du vide(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);} 

Code

  • Extrait de code n° 1
Extrait de code #1Arduino
/* Exemple de croquis pour la bibliothèque Xbox Wireless Reciver - développé par Kristian Lauszus Il prend en charge jusqu'à quatre contrôleurs sans fil Pour plus d'informations, consultez l'article de blog :http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-add-to-the-usb-host-library/ ou envoyez-moi un e-mail :[email protected] */#include // Satisfy IDE, qui n'a besoin que de voir la déclaration d'inclusion dans l'ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //La broche choisie doit avoir PWM#define motorPinTwo 6 //La broche choisie doit avoir PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* Définit la vitesse de rotation du moteur. DOIT être compris entre 0 et 255. */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 n'a pas démarré")); tandis que (1); //arrêt motors_stop(); centre(); } Serial.print(F("\r\nBibliothèque du récepteur sans fil Xbox démarrée")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, SORTIE); pinMode (FREIN, SORTIE); digitalWrite (BRAKE, LOW);}boucle vide() { 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)); impulsion =Xbox.getButtonPress(L2, i); avant =0 ; dans le sens des aiguilles d'une montre (); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); impulsion =Xbox.getButtonPress(R2, i); avant =1 ; dans le sens antihoraire(); } 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(); else 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) <-2600) turn_left(); else 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(LEFT, i)) { Serial.println(F("Gauche")); } 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("Back")); } 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(ROTATION, i); Serial.println(F("Xbox")); } if(Xbox.getButtonClick(A, i)) { Serial.println(F("A")); } if(Xbox.getButtonClick(B, i)) { Serial.println(F("B")); digitalWrite (FREIN, HAUT); Brake_on =1 ; pouls =100 ; if (en avant) dans le sens des aiguilles d'une montre (); else dans le sens antihoraire(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); moteurs_arrêt(); } } } delay(1);}void dans le sens des aiguilles d'une montre(){ Serial.print("La rotation est dans le sens des aiguilles d'une montre et la vitesse est "); Serial.println(impulsion); analogWrite(motorPinOne,pulse); // définit la jambe 1 du pont en H low analogWrite(motorPinTwo,0) ; if (brake_on) { délai (600); digitalWrite(FREIN, BAS); Brake_on =0 ; pouls =0; }}void counterClockwise(){ Serial.print("La rotation est dans le sens inverse des aiguilles d'une montre et la vitesse est "); Serial.println(impulsion); analogWrite(motorPinOne,0) ; // définit la jambe 1 du pont en H bas analogWrite(motorPinTwo,pulse); if (brake_on) { délai (600); digitalWrite(FREIN, BAS); Brake_on =0 ; impulsion =0 ; } }void turn_left(){ digitalWrite(motor2PinOne,HIGH); // définit la jambe 1 du pont en H digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // définit la jambe 1 du pont en H digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0) ; analogWrite(motorPinTwo,0) ; pulse =0;}centre du vide(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);}
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

Processus de fabrication

  1. Robot Raspberry Pi contrôlé par Bluetooth
  2. Lumière de table interactive à commande gestuelle
  3. LED contrôlées par Alexa via Raspberry Pi
  4. Bras robotique contrôlé par Nunchuk (avec Arduino)
  5. Arduino Nano :contrôler 2 moteurs pas à pas avec joystick
  6. Robot à commande vocale
  7. Compteur de voitures utilisant Arduino + Traitement + PHP
  8. Robot piano contrôlé par Arduino :PiBot
  9. Wi-Servo :Servomoteurs Wi-Fi contrôlés par navigateur