Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

Компоненты и материалы

Описание проекта

1. Берём машину

Нужна старая радиоуправляемая машина (автор нашёл монстр-трак). Удалите всю родную электронику, оставив только провода к двум моторам (привод и рулевое управление).

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

2. Arduino и Shield

Установите USB Host Shield на Arduino UNO.

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

3. Крепление Arduino на машину

Закрепите сборку на шасси (используйте существующие отверстия).

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

4. Сборка схемы

Схема на макетной плате (или монтажной): два драйвера L293D для двух моторов, два стабилизатора (7812 и 78S12) для питания логики и моторов от батарей 15–18В (10–12 элементов AA). Стабилизатор 78S12 выдаёт до 2А — нужен для пускового тока моторов. Подробнее о работе L293D в даташите.

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

5. Установка схемы на машину

Разместите плату на шасси, подключите к моторам. Вставьте USB-приёмник Xbox в USB Host Shield.

Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino

6. Программирование

Код основан на библиотеке USB Host Shield 2.0 (автор Kristian Lauszus). Управление:

Пины: мотор 1 (перед/зад) — PWM 5 и 6; мотор 2 (руль) — 4 и 7; тормоз — пин 2.

Код (основной скетч)

#include <XBOXRECV.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
XBOXRECV Xbox(&Usb);

#define motorPinOne 5
#define motorPinTwo 6
#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; // PWM frequency
  Serial.begin(115200);
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while(1);
  }
  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++) {
      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(); }
      // Аналоговые стики для поворота
      if (abs(Xbox.getAnalogHat(LeftHatX, i)) > 7500) {
        if (Xbox.getAnalogHat(LeftHatX, i) > 26000) turn_right(); else center();
      }
      if (abs(Xbox.getAnalogHat(LeftHatX, i)) < -7500) {
        if (Xbox.getAnalogHat(LeftHatX, i) < -26000) turn_left(); else center();
      }
      // Кнопки
      if (Xbox.getButtonClick(B, i)) { digitalWrite(BRAKE, HIGH); brake_on = 1; pulse = 100; if (forward) clockwise(); else counterClockwise(); }
      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); }

Полезные ссылки

Производственный процесс

  1. Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
  2. Настольная RGB-лампа с управлением жестами – Интерактивное беспроводное освещение
  3. Управление светодиодами через Alexa с помощью Raspberry Pi – простое пошаговое руководство
  4. Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
  5. Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
  6. Голосовой робот на Arduino Nano: Управление речью через Bluetooth
  7. Умный счетчик парковки: Отслеживание машин в реальном времени (Arduino, Processing, PHP)
  8. PiBot: Робот-пианист на Arduino для точного исполнения музыки
  9. Wi-Servo: управление сервоприводами по Wi-Fi через веб-браузер
  10. Своё рулевое управление (джойстик) для игр на Arduino