Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Coche RC controlado por joystick

Componentes y suministros

Arduino UNO
× 1
Arduino USB Host Shield
× 1
Mando inalámbrico XBOX360
× 1
Receptor XBOX360
× 1
1 controlador de motor L293D
× 1
7812
× 1
78S12
× 1
Cambiar
× 1
disipadores de calor
× 1
Enchufe
× 1
conector de batería para 8 baterías 1v5 AA con enchufe de 9V
× 1

Acerca de este proyecto

1. ¡Coge el coche!

En primer lugar, necesita un viejo coche RC. Por suerte encontré un camión monstruo. ¡Esto puede ser muy interesante!

Retire todos los componentes electrónicos excepto los cables para controlar los dos motores.

2. Arduino y el escudo

Tome una placa Arduino (elegí una Arduino UNO) y conecte el protector de host USB en ella.

3. Conecte Arduino al automóvil

Enchufe el protector en la parte superior del Arduino UNO y el protector del host USB y atorníllelos al automóvil. Usé uno de los agujeros para el circuito electrónico antiguo.

4. Haz el circuito

Hice el mío en una placa de pruebas, pero también puedes construirlo en una placa de perforación. Básicamente, el circuito está compuesto por dos controladores (L293D o SN754410) y dos estabilizadores de voltaje. Los estabilizadores de voltaje se utilizan para limitar el voltaje de las baterías. De hecho te sugiero que uses 10-12 pilas AA de 1.5V para tener un voltaje máximo de 15-18V que te dará más tiempo para jugar con el auto RC. Dado que el motor requiere una gran cantidad de corriente, para mover el automóvil desde la posición de reposo (aproximadamente 2 A) necesitamos un estabilizador de voltaje potente como el 78S12.

Si desea obtener más información sobre cómo funciona el controlador, ¡eche un vistazo aquí!

5. Conecte el circuito al automóvil

Encuentra un lugar vacío en el auto RC donde puedas colocar el circuito. En el camión monstruo que tengo, hay mucho espacio. Una vez colocado, conecte el circuito a los dos motores. Por último, conecte el receptor inalámbrico al protector de host USB.

6. El Código

El código se basa en los ejemplos de USB Host Library 2.0 alojados en GitHub por Kristian Lauszus de circuits @ home

USB_Host_Shield_2.0
  / * Bosquejo de ejemplo para la biblioteca de receptores inalámbricos Xbox - desarrollado por Kristian Lauszus Admite hasta cuatro controladores de forma inalámbrica Para obtener más información, consulte la publicación del blog:http://blog.tkjelectronics.dk/2012/12 / xbox-360-receiver-added-to-the-usb-host-library / o envíeme un correo electrónico:[email protected]*/#include  // Satisfacer IDE, que solo necesita ver la declaración de inclusión en el ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // El pin elegido debe tener PWM # define motorPinTwo 6 // El pin elegido debe tener PWM # define motor2PinOne 4 #define motor2PinTwo 7 # define BRAKE 2 / * Define la velocidad de rotación del motor. DEBE estar entre 0 y 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 no se inició")); mientras (1); // detener motor_parada (); centrar(); } Serial.print (F ("\ r \ nXbox Wireless Receiver Library Started")); pinMode (motorPinOne, SALIDA); pinMode (motorPinTwo, SALIDA); pinMode (motor2PinOne, SALIDA); pinMode (motor2PinTwo, SALIDA); pinMode (FRENO, SALIDA); digitalWrite (FRENO, BAJO);} bucle vacío () {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)); pulso =Xbox.getButtonPress (L2, i); adelante =0; agujas del reloj(); } if (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); pulso =Xbox.getButtonPress (R2, i); adelante =1; en sentido anti-horario(); } 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 (); más centro (); } 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 (); más centro (); } 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 (ARRIBA, i)) {Serial.println (F ("Arriba")); } if (Xbox.getButtonClick (ABAJO, i)) {Serial.println (F ("Abajo")); } if (Xbox.getButtonClick (IZQUIERDA, i)) {Serial.println (F ("Izquierda")); } if (Xbox.getButtonClick (DERECHA, i)) {Serial.println (F ("Derecha")); } if (Xbox.getButtonClick (INICIO, i)) {Serial.println (F ("Inicio")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Atrás")); } 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 (GIRANDO, i); Serial.println (F ("Xbox")); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (FRENO, ALTO); freno_en =1; pulso =100; if (adelante) en el sentido de las agujas del reloj (); más en sentido contrario a las agujas del reloj (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motor_parada (); }}} delay (1);} void clockwise () {Serial.print ("La rotación es en el sentido de las agujas del reloj y la velocidad es"); Serial.println (pulso); analogWrite (motorPinOne, pulso); // establece el tramo 1 del puente H bajo analogWrite (motorPinTwo, 0); if (freno_en) {retraso (600); digitalWrite (FRENO, BAJO); freno_en =0; pulso =0; }} void counterClockwise () {Serial.print ("La rotación es en sentido antihorario y la velocidad es"); Serial.println (pulso); analogWrite (motorPinOne, 0); // establece el tramo 1 del puente H bajo analogWrite (motorPinTwo, pulse); if (freno_en) {retraso (600); digitalWrite (FRENO, BAJO); freno_en =0; pulso =0; }} void turn_left () {digitalWrite (motor2PinOne, HIGH); // establece el tramo 1 del puente H bajo digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // establece el tramo 1 del puente H bajo digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); pulso =0;} centro vacío () {escritura digital (motor2PinOne, BAJO); digitalWrite (motor2PinTwo, BAJO);}  

Código

  • Fragmento de código n. ° 1
Fragmento de código n. ° 1 Arduino
 / * Bosquejo de ejemplo para la biblioteca de receptores inalámbricos Xbox - desarrollado por Kristian Lauszus Admite hasta cuatro controladores de forma inalámbrica Para obtener más información, consulte la publicación del blog:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library / o envíeme un correo electrónico:[email protected] * / # include  // Satisfacer IDE, que solo necesita ver la declaración de inclusión en el ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // El pin elegido debe tener PWM # define motorPinTwo 6 // El pin elegido debe tener PWM # define motor2PinOne 4 #define motor2PinTwo 7 # define BRAKE 2 / * Define la velocidad de rotación del motor. DEBE estar entre 0 y 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 no se inició")); mientras (1); // detener motor_parada (); centrar(); } Serial.print (F ("\ r \ nXbox Wireless Receiver Library Started")); pinMode (motorPinOne, SALIDA); pinMode (motorPinTwo, SALIDA); pinMode (motor2PinOne, SALIDA); pinMode (motor2PinTwo, SALIDA); pinMode (FRENO, SALIDA); digitalWrite (FRENO, BAJO);} bucle vacío () {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)); pulso =Xbox.getButtonPress (L2, i); adelante =0; agujas del reloj(); } if (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); pulso =Xbox.getButtonPress (R2, i); adelante =1; en sentido anti-horario(); } 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 (); más centro (); } 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 (); más centro (); } 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 (ARRIBA, i)) {Serial.println (F ("Arriba")); } if (Xbox.getButtonClick (ABAJO, i)) {Serial.println (F ("Abajo")); } if (Xbox.getButtonClick (IZQUIERDA, i)) {Serial.println (F ("Izquierda")); } if (Xbox.getButtonClick (DERECHA, i)) {Serial.println (F ("Derecha")); } if (Xbox.getButtonClick (INICIO, i)) {Serial.println (F ("Inicio")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Atrás")); } 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 (GIRANDO, i); Serial.println (F ("Xbox")); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (FRENO, ALTO); freno_en =1; pulso =100; if (adelante) en el sentido de las agujas del reloj (); más en sentido contrario a las agujas del reloj (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motor_parada (); }}} delay (1);} void clockwise () {Serial.print ("La rotación es en el sentido de las agujas del reloj y la velocidad es"); Serial.println (pulso); analogWrite (motorPinOne, pulso); // establece el tramo 1 del puente H bajo analogWrite (motorPinTwo, 0); if (freno_en) {retraso (600); digitalWrite (FRENO, BAJO); freno_en =0; pulso =0; }} void counterClockwise () {Serial.print ("La rotación es en sentido antihorario y la velocidad es"); Serial.println (pulso); analogWrite (motorPinOne, 0); // establece el tramo 1 del puente H bajo analogWrite (motorPinTwo, pulse); if (freno_en) {retraso (600); digitalWrite (FRENO, BAJO); freno_en =0; pulso =0; }} void turn_left () {digitalWrite (motor2PinOne, HIGH); // establece el tramo 1 del puente H bajo digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // establece el tramo 1 del puente H bajo digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); pulso =0;} centro vacío () {escritura digital (motor2PinOne, BAJO); digitalWrite (motor2PinTwo, BAJO);} 
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

Proceso de manufactura

  1. Robot Raspberry Pi controlado por Bluetooth
  2. Luz de mesa interactiva controlada por gestos
  3. LED controlados por Alexa a través de Raspberry Pi
  4. Brazo robótico controlado por Nunchuk (con Arduino)
  5. Arduino Nano:Controla 2 motores paso a paso con joystick
  6. Robot controlado por voz
  7. Contador de autos usando Arduino + Procesamiento + PHP
  8. Robot de piano controlado por Arduino:PiBot
  9. Wi-Servo:Servomotores Wi-Fi controlados por navegador
  10. Joystick de Arduino
  11. RC Porsche Car (Proyecto Arduino)