Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Carro RC controlado por joystick

Componentes e suprimentos

Arduino UNO
× 1
Arduino USB Host Shield
× 1
Controlador sem fio XBOX360
× 1
Receptor XBOX360
× 1
1 driver de motor L293D
× 1
7812
× 1
78S12
× 1
Switch
× 1
dissipadores de calor
× 1
Tomada de energia
× 1
conector de bateria para 8 baterias AA 1v5 com plugue de bateria 9V
× 1

Sobre este projeto





1. Pegue o carro!


Antes de mais nada, você precisa de um carro RC antigo. Felizmente encontrei um caminhão monstro. Isso pode ser muito interessante!

Remova todos os componentes eletrônicos, exceto os cabos para controlar os dois motores.





2. Arduino e o escudo


Pegue uma placa Arduino (eu escolhi um Arduino UNO) e conecte o escudo do host USB nela.





3. Conecte o Arduino ao carro


Conecte a blindagem na parte superior do Arduino UNO e a blindagem do host USB e aparafuse-os no carro. Usei um dos orifícios do antigo circuito eletrônico.





4. Faça o circuito


Eu fiz o meu em uma placa de ensaio, mas você também pode construí-lo em um perfboard. Essencialmente, o circuito é composto por dois drivers (L293D ou SN754410) e dois estabilizadores de tensão. Os estabilizadores de tensão são usados ​​para limitar a tensão das baterias. Na verdade, eu sugiro que você use 10-12 pilhas AA 1.5V para ter uma tensão máxima de 15-18V que lhe dará mais tempo para brincar com o carro RC. Como o motor requer uma grande quantidade de corrente, para mover o carro da posição de repouso (cerca de 2A), precisamos de um estabilizador de tensão poderoso como o 78S12.

Se você quiser mais informações sobre como funciona o driver, dê uma olhada aqui!





5. Conecte o circuito ao carro


Encontre um lugar vazio no carro RC onde você pode colocar o circuito. No caminhão monstro que tenho, há muito espaço. Uma vez posicionado, conecte o circuito aos dois motores. Por fim, conecte o receptor sem fio à blindagem do host USB.





6. O Código


O código é baseado nos exemplos da USB Host Library 2.0 hospedada no GitHub por Kristian Lauszus da circuits @ home
USB_Host_Shield_2.0
  / * Esboço de exemplo para a biblioteca Xbox Wireless Reciver - desenvolvido por Kristian Lauszus. Suporta até quatro controladores sem fio. Para obter mais informações, consulte a postagem do blog:http://blog.tkjelectronics.dk/2012/12 / xbox-360-receiver-added-to-the-usb-host-library / ouenvie-me um e-mail:[email protected]*/#include  // Satisfaça o IDE, que só precisa ver a declaração de inclusão no ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // O pino escolhido deve ter PWM # define motorPinTwo 6 // O pino escolhido deve ter PWM # define motor2PinOne 4 # define motor2PinTwo 7 # define BRAKE 2 / * Define a velocidade de rotação do motor. DEVE estar entre 0 e 255. * / int pulso =0; int forward =0; int Brake_on =0; configuração vazia () {TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin (115200); if (Usb.Init () ==-1) {Serial.print (F ("\ r \ nOSC não iniciou")); enquanto (1); // halt motors_stop (); Centro(); } Serial.print (F ("\ r \ nXbox Wireless Receiver Library iniciada")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, OUTPUT); pinMode (FREIO, SAÍDA); 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)); pulso =Xbox.getButtonPress (L2, i); forward =0; sentido horário(); } if (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); pulso =Xbox.getButtonPress (R2, i); forward =1; sentido anti-horário(); } 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) <-26000) 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 ("Left")); } 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 (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 (FREIO, ALTO); freio_on =1; pulso =100; if (avançar) no sentido horário (); senão no sentido anti-horário (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motors_stop (); }}} delay (1);} void clockwise () {Serial.print ("Rotação em sentido horário e velocidade"); Serial.println (pulso); analogWrite (motorPinOne, pulso); // define a perna 1 da ponte H low analogWrite (motorPinTwo, 0); if (freio_on) {atraso (600); digitalWrite (FREIO, BAIXO); freio_on =0; pulso =0; }} void counterClockwise () {Serial.print ("A rotação é no sentido anti-horário e a velocidade é"); Serial.println (pulso); analogWrite (motorPinOne, 0); // define a perna 1 da ponte H low analogWrite (motorPinTwo, pulse); if (freio_on) {atraso (600); digitalWrite (FREIO, BAIXO); freio_on =0; pulso =0; }} vazio turn_left () {digitalWrite (motor2PinOne, HIGH); // define a perna 1 da ponte H baixa digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // define a perna 1 da ponte H baixa digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); pulso =0;} centro vazio () {digitalWrite (motor2PinOne, LOW); digitalWrite (motor2PinTwo, LOW);}  

Código

  • Snippet de código # 1
Snippet de código # 1 Arduino
 / * Esboço de exemplo para a biblioteca Xbox Wireless Reciver - desenvolvido por Kristian Lauszus. Suporta até quatro controladores sem fio. Para obter mais informações, consulte a postagem do blog:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library / ou envie-me um e-mail:[email protected] * / # include  // Satisfaça o IDE, que só precisa ver a declaração de inclusão no ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // O pino escolhido deve ter PWM # define motorPinTwo 6 // O pino escolhido deve ter PWM # define motor2PinOne 4 # define motor2PinTwo 7 # define BRAKE 2 / * Define a velocidade de rotação do motor. DEVE estar entre 0 e 255. * / int pulso =0; int forward =0; int Brake_on =0; configuração vazia () {TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin (115200); if (Usb.Init () ==-1) {Serial.print (F ("\ r \ nOSC não iniciou")); enquanto (1); // halt motors_stop (); Centro(); } Serial.print (F ("\ r \ nXbox Wireless Receiver Library iniciada")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, OUTPUT); pinMode (FREIO, SAÍDA); 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)); pulso =Xbox.getButtonPress (L2, i); forward =0; sentido horário(); } if (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); pulso =Xbox.getButtonPress (R2, i); forward =1; sentido anti-horário(); } 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) <-26000) 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 ("Left")); } 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 (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 (FREIO, ALTO); freio_on =1; pulso =100; if (avançar) no sentido horário (); senão no sentido anti-horário (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); if (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motors_stop (); }}} delay (1);} void clockwise () {Serial.print ("Rotação em sentido horário e velocidade"); Serial.println (pulso); analogWrite (motorPinOne, pulso); // define a perna 1 da ponte H low analogWrite (motorPinTwo, 0); if (freio_on) {atraso (600); digitalWrite (FREIO, BAIXO); freio_on =0; pulso =0; }} void counterClockwise () {Serial.print ("A rotação é no sentido anti-horário e a velocidade é"); Serial.println (pulso); analogWrite (motorPinOne, 0); // define a perna 1 da ponte H low analogWrite (motorPinTwo, pulse); if (freio_on) {atraso (600); digitalWrite (FREIO, BAIXO); freio_on =0; pulso =0; }} vazio turn_left () {digitalWrite (motor2PinOne, HIGH); // define a perna 1 da ponte H baixa digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // define a perna 1 da ponte H baixa digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); pulso =0;} centro vazio () {digitalWrite (motor2PinOne, LOW); digitalWrite (motor2PinTwo, LOW);} 
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

Processo de manufatura

  1. Robô Raspberry Pi controlado por Bluetooth
  2. Luz da mesa interativa controlada por gestos
  3. LEDs controlados por Alexa através do Raspberry Pi
  4. Braço robótico controlado por Nunchuk (com Arduino)
  5. Arduino Nano:Controle 2 motores de passo com joystick
  6. Robô controlado por fala
  7. Contador de carros usando Arduino + Processing + PHP
  8. Robô de piano controlado por Arduino:PiBot
  9. Wi-Servo:Servomotores controlados por navegador Wi-Fi
  10. Joystick Arduino