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

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

Componentes e Materiais

Arduino UNO × 1
Shield USB Host para Arduino × 1
Controle Sem Fio Xbox 360 × 1
Receptor Sem Fio Xbox 360 × 1
Driver de Motor L293D (ou SN754410) × 1
Regulador 7812 × 1
Regulador 78S12 (5A) × 1
Chave Liga/Desliga × 1
Dissipadores de calor × 1
Plug de alimentação (jack barril) × 1
Conector de bateria para 8 pilhas AA 1,5V com plug 9V × 1

Sobre o Projeto

1. Consiga o Carro!

Encontre um carro RC antigo. Usei um monster truck. Remova toda a eletrônica original, mantendo apenas os fios dos dois motores.

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

2. Arduino e Shield

Encaixe o Shield USB Host sobre o Arduino UNO.

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

3. Fixando o Arduino no Carro

Parafuse o conjunto (Arduino + shield) na carroceria, reaproveitando furos da placa original.

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

4. Montando o Circuito

Montei em protoboard, mas pode ser em placa perfurada. O circuito usa dois drivers L293D (ou SN754410) e dois reguladores de tensão. Os reguladores limitam a tensão das pilhas. Sugiro 10–12 pilhas AA 1,5V (15–18V) para maior autonomia. Como os motores exigem alta corrente na partida (~2A), use o regulador 78S12 (5A) para a etapa de potência.

Para entender o funcionamento do driver L293D, veja datasheet.

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

5. Instalando o Circuito no Carro

Encontre espaço para a protoboard, conecte os motores e plugue o receptor Xbox no shield USB Host.

Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino

6. O Código

Baseado nos exemplos da USB Host Library 2.0 de Kristian Lauszus (GitHub).

Sketch Principal

/* Exemplo para biblioteca Xbox Wireless Receiver - Kristian Lauszus
   Suporta até 4 controles sem fio
   Mais info: https://blog.tkjelectronics.dk/2012/12/xbox-360-receiver-added-to-the-usb-host-library/ */
#include <XBOXRECV.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
XBOXRECV Xbox(&Usb);

#define motorPinOne 5   // PWM
#define motorPinTwo 6   // PWM
#define motor2PinOne 4
#define motor2PinTwo 7
#define BRAKE 2

int pulse = 0;
int forward = 0;
int brake_on = 0;

void setup() {
  TCCR1B = TCCR1B & 0b11111000 | 0x02; // Ajusta frequência PWM pinos 5/6
  Serial.begin(115200);
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while(1); // travar
    motors_stop();
    center();
  }
  Serial.print(F("\r\nXbox Wireless Receiver Library Started"));
  pinMode(motorPinOne, OUTPUT);
  pinMode(motorPinTwo, OUTPUT);
  pinMode(motor2PinOne, OUTPUT);
  pinMode(motor2PinTwo, OUTPUT);
  pinMode(BRAKE, OUTPUT);
  digitalWrite(BRAKE, LOW);
}

void loop() {
  Usb.Task();
  if (Xbox.XboxReceiverConnected) {
    for (uint8_t i = 0; i < 4; i++) {
      // Gatilhos L2/R2 controlam velocidade e direção (frente/trás)
      if (Xbox.getButtonPress(L2, i)) {
        pulse = Xbox.getButtonPress(L2, i);
        forward = 0;
        clockwise();
      }
      if (Xbox.getButtonPress(R2, i)) {
        pulse = Xbox.getButtonPress(R2, i);
        forward = 1;
        counterClockwise();
      }
      // Analógico esquerdo controla direção (esquerda/direita)
      if (abs(Xbox.getAnalogHat(LeftHatX, i)) > 7500 || abs(Xbox.getAnalogHat(LeftHatY, i)) > 7500 ||
          abs(Xbox.getAnalogHat(RightHatX, i)) > 7500 || abs(Xbox.getAnalogHat(RightHatY, i)) > 7500) {
        if (Xbox.getAnalogHat(LeftHatX, i) > 7500) {
          if (Xbox.getAnalogHat(LeftHatX, i) > 26000) turn_right();
          else center();
        }
        if (Xbox.getAnalogHat(LeftHatX, i) < -7500) {
          if (Xbox.getAnalogHat(LeftHatX, i) < -26000) turn_left();
          else center();
        }
      }
      // Botão B = freio de emergência (ré curta)
      if (Xbox.getButtonClick(B, i)) {
        digitalWrite(BRAKE, HIGH);
        brake_on = 1;
        pulse = 100;
        if (forward) clockwise(); else counterClockwise();
      }
      // Botão Y = parar motores
      if (Xbox.getButtonClick(Y, i)) motors_stop();
    }
  }
  delay(1);
}

void clockwise() {
  analogWrite(motorPinOne, pulse);
  analogWrite(motorPinTwo, 0);
  if (brake_on) { delay(600); digitalWrite(BRAKE, LOW); brake_on = 0; pulse = 0; }
}
void counterClockwise() {
  analogWrite(motorPinOne, 0);
  analogWrite(motorPinTwo, pulse);
  if (brake_on) { delay(600); digitalWrite(BRAKE, LOW); brake_on = 0; pulse = 0; }
}
void turn_left()  { digitalWrite(motor2PinOne, HIGH); digitalWrite(motor2PinTwo, LOW); }
void turn_right() { digitalWrite(motor2PinOne, LOW);  digitalWrite(motor2PinTwo, HIGH); }
void motors_stop() { analogWrite(motorPinOne, 0); analogWrite(motorPinTwo, 0); pulse = 0; }
void center() { digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW); }

Código

O código completo está no repositório da biblioteca: github.com/felis/USB_Host_Shield_2.0

Processo de manufatura

  1. Construa um Robô Raspberry Pi Controlado por Bluetooth com Feedback de Áudio
  2. Lâmpada de Mesa RGB Controlada por Gestos – Iluminação Interativa e Sem Toque
  3. Controlar LEDs com Alexa via Raspberry Pi – Guia Passo a Passo Fácil
  4. Braço Robótico 6 GDL Controlado por Nunchuk com Arduino Mega
  5. Controle Dois Motores de Passo com Arduino Nano e Joystick – Tutorial Simples
  6. Construa um Robô Controlado por Voz com Arduino Nano
  7. Contador Inteligente de Vagas: Rastreamento de Veículos em Tempo Real com Arduino, Processing e PHP
  8. PiBot: Robô Pianista Arduino para Performance Musical de Precisão
  9. Wi-Servo: Controle Servomotores via Wi-Fi pelo Navegador
  10. Volante Joystick Arduino Personalizado para Jogos