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

Радиоуправляемая машина с джойстиком

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

Arduino UNO
× 1
Arduino USB Host Shield
× 1
Беспроводной контроллер XBOX360
× 1
Приемник XBOX360
× 1
1 драйвер двигателя L293D
× 1
7812
× 1
78S12
× 1
Переключатель
× 1
радиаторы
× 1
Вилка питания
× 1
батарейный разъем для 8 батареек 1v5 AA с батарейным штекером 9V
× 1

Об этом проекте

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

Прежде всего вам понадобится старая радиоуправляемая машина. К счастью, я нашел грузовик-монстр. Это может быть очень интересно!

Снимите всю электронику, кроме кабелей для управления двумя двигателями.

2. Ардуино и щит

Возьмите плату Arduino (я выбрал Arduino UNO) и подключите к ней экран хоста USB.

3. Присоедините Arduino к автомобилю

Подключите экран сверху Arduino UNO и экран хоста USB и прикрутите их к автомобилю. Я использовал одно из отверстий для старой электронной схемы.

4. Сделайте схему

Я сделал свой на макете, но вы также можете построить его на перфокартоне. По сути, схема состоит из двух драйверов (L293D или SN754410) и двух стабилизаторов напряжения. Стабилизаторы напряжения используются для ограничения напряжения от аккумуляторов. Фактически, я предлагаю вам использовать 10-12 батарей AA 1,5 В, чтобы иметь максимальное напряжение 15-18 В, что даст вам больше времени для игры с радиоуправляемым автомобилем. Поскольку двигателю требуется большой ток, для того, чтобы вывести автомобиль из положения покоя (около 2 А), нам понадобится мощный стабилизатор напряжения, такой как 78S12.

Если вам нужна дополнительная информация о том, как работает драйвер, загляните сюда!

5. Присоедините цепь к автомобилю

Найдите свободное место на радиоуправляемой машине, где вы можете разместить схему. На моем монстр-траке много места. После установки подключите цепь к двум двигателям. Наконец, подключите беспроводной приемник к экрану USB-хоста.

6. Код

Код основан на примерах библиотеки USB Host Library 2.0, размещенной на GitHub Кристианом Лаусусом из схем @ home

USB_Host_Shield_2.0
  / * Пример скетча для библиотеки Xbox Wireless Reciver - разработан Кристианом Лаусусом. Он поддерживает до четырех контроллеров по беспроводной сети. Для получения дополнительной информации см. Сообщение в блоге:http://blog.tkjelectronics.dk/2012/12 / xbox-360-Receiver-added-to-the-usb-host-library / или отправьте мне электронное письмо:[email protected]*/#include  // Удовлетворительная IDE, которую нужно только увидеть статус включения в ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // Выбранный контакт должен иметь PWM # define motorPinTwo 6 // Выбранный контакт должен иметь PWM # define motor2PinOne 4 #define motor2PinTwo 7 # define BRAKE 2 / * Определение скорости вращения двигателя. ДОЛЖЕН быть от 0 до 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 не запустился")); в то время как (1); // остановка motors_stop (); центр(); } Serial.print (F ("\ r \ nБиблиотека беспроводного приемника Xbox запущена")); pinMode (motorPinOne, ВЫХОД); pinMode (motorPinTwo, ВЫХОД); pinMode (motor2PinOne, ВЫХОД); pinMode (motor2PinTwo, ВЫХОД); pinMode (ТОРМОЗ, ВЫХОД); digitalWrite (ТОРМОЗ, НИЗКИЙ);} недействительный цикл () {Usb.Task (); если (Xbox.XboxReceiverConnected) {для (uint8_t я =0; я <4; я ++) {если (Xbox.getButtonPress (L2, я)) {Serial.print ("L2:"); Serial.print (Xbox.getButtonPress (L2, i)); Pulse =Xbox.getButtonPress (L2, i); вперед =0; по часовой стрелке (); } если (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); Pulse =Xbox.getButtonPress (R2, i); вперед =1; против часовой стрелки(); } 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) {если (Xbox.getAnalogHat (LeftHatX, i)> 7500) {Serial.print (F ("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print ("\ t"); если (Xbox.getAnalogHat (LeftHatX, i)> 26000) turn_right (); иначе центр (); } если (Xbox.getAnalogHat (LeftHatX, i) <-7500) {Serial.print (F ("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print ("\ t"); если (Xbox.getAnalogHat (LeftHatX, i) <-26000) turn_left (); иначе центр (); } if (Xbox.getAnalogHat (LeftHatY, i)> 7500 || Xbox.getAnalogHat (LeftHatY, i) <-7500) {Serial.print (F ("LeftHatY:")); Serial.print (Xbox.getAnalogHat (LeftHatY, i)); Serial.print ("\ t"); } если (Xbox.getAnalogHat (RightHatX, i)> 7500) {Serial.print (F ("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print ("\ t"); } если (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 (ВНИЗ, я)) {Serial.println (F ("Вниз")); } 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 ("Старт")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Назад")); } if (Xbox.getButtonClick (L3, i)) Serial.println (F ("L3")); если (Xbox.getButtonClick (R3, i)) Serial.println (F ("R3")); если (Xbox.getButtonClick (L1, i)) Serial.println (F ("L1")); если (Xbox.getButtonClick (R1, i)) Serial.println (F ("R1")); если (Xbox.getButtonClick (XBOX, i)) {Xbox.setLedMode (ВРАЩЕНИЕ, i); Serial.println (F («Xbox»)); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (ТОРМОЗ, ВЫСОКИЙ); Brake_on =1; импульс =100; если (вперед) по часовой стрелке (); иначе против часовой стрелки (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); если (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motors_stop (); }}} delay (1);} void clockwise () {Serial.print ("Вращение по часовой стрелке, а скорость равна"); Serial.println (импульс); analogWrite (motorPinOne, pulse); // устанавливаем ногу 1 H-моста в низкий уровень analogWrite (motorPinTwo, 0); если (тормоз_он) {задержка (600); digitalWrite (ТОРМОЗ, НИЗКИЙ); Brake_on =0; импульс =0; }} void counterClockwise () {Serial.print ("Вращение против часовой стрелки, скорость равна"); Serial.println (импульс); analogWrite (motorPinOne, 0); // устанавливаем ногу 1 H-моста в низкий уровень analogWrite (motorPinTwo, pulse); если (тормоз_он) {задержка (600); digitalWrite (ТОРМОЗ, НИЗКИЙ); Brake_on =0; импульс =0; }} void turn_left () {digitalWrite (motor2PinOne, HIGH); // устанавливаем ногу 1 H-моста в низкий уровень digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // устанавливаем ногу 1 H-моста в низкий уровень digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); Pulse =0;} void center () {digitalWrite (motor2PinOne, LOW); digitalWrite (motor2PinTwo, LOW);}  

Код

  • Фрагмент кода №1
Фрагмент кода №1 Arduino
 / * Пример скетча для библиотеки беспроводного ресивера Xbox - разработан Кристианом Лаусусом. Он поддерживает до четырех контроллеров по беспроводной сети. Для получения дополнительной информации см. сообщение в блоге:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library / или отправьте мне электронное письмо:[email protected] * / # include  // Удовлетворите IDE, которой нужно только увидеть статус включения в ino. # ifdef dobogusinclude # include  #endifUSB Usb; XBOXRECV Xbox (&Usb); # define motorPinOne 5 // Выбранный контакт должен иметь PWM # define motorPinTwo 6 // Выбранный контакт должен иметь PWM # define motor2PinOne 4 #define motor2PinTwo 7 # define BRAKE 2 / * Определение скорости вращения двигателя. ДОЛЖЕН быть от 0 до 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 не запустился")); в то время как (1); // остановка motors_stop (); центр(); } Serial.print (F ("\ r \ nБиблиотека беспроводного приемника Xbox запущена")); pinMode (motorPinOne, ВЫХОД); pinMode (motorPinTwo, ВЫХОД); pinMode (motor2PinOne, ВЫХОД); pinMode (motor2PinTwo, ВЫХОД); pinMode (ТОРМОЗ, ВЫХОД); digitalWrite (ТОРМОЗ, НИЗКИЙ);} недействительный цикл () {Usb.Task (); если (Xbox.XboxReceiverConnected) {для (uint8_t я =0; я <4; я ++) {если (Xbox.getButtonPress (L2, я)) {Serial.print ("L2:"); Serial.print (Xbox.getButtonPress (L2, i)); Pulse =Xbox.getButtonPress (L2, i); вперед =0; по часовой стрелке (); } если (Xbox.getButtonPress (R2, i)) {Serial.print ("R2:"); Serial.println (Xbox.getButtonPress (R2, i)); Pulse =Xbox.getButtonPress (R2, i); вперед =1; против часовой стрелки(); } 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) {если (Xbox.getAnalogHat (LeftHatX, i)> 7500) {Serial.print (F ("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print ("\ t"); если (Xbox.getAnalogHat (LeftHatX, i)> 26000) turn_right (); иначе центр (); } если (Xbox.getAnalogHat (LeftHatX, i) <-7500) {Serial.print (F ("LeftHatX:")); Serial.print (Xbox.getAnalogHat (LeftHatX, i)); Serial.print ("\ t"); если (Xbox.getAnalogHat (LeftHatX, i) <-26000) turn_left (); иначе центр (); } if (Xbox.getAnalogHat (LeftHatY, i)> 7500 || Xbox.getAnalogHat (LeftHatY, i) <-7500) {Serial.print (F ("LeftHatY:")); Serial.print (Xbox.getAnalogHat (LeftHatY, i)); Serial.print ("\ t"); } если (Xbox.getAnalogHat (RightHatX, i)> 7500) {Serial.print (F ("RightHatX:")); Serial.print (Xbox.getAnalogHat (RightHatX, i)); Serial.print ("\ t"); } если (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 (ВНИЗ, я)) {Serial.println (F ("Вниз")); } 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 ("Старт")); } if (Xbox.getButtonClick (BACK, i)) {Serial.println (F ("Назад")); } if (Xbox.getButtonClick (L3, i)) Serial.println (F ("L3")); если (Xbox.getButtonClick (R3, i)) Serial.println (F ("R3")); если (Xbox.getButtonClick (L1, i)) Serial.println (F ("L1")); если (Xbox.getButtonClick (R1, i)) Serial.println (F ("R1")); если (Xbox.getButtonClick (XBOX, i)) {Xbox.setLedMode (ВРАЩЕНИЕ, i); Serial.println (F («Xbox»)); } if (Xbox.getButtonClick (A, i)) {Serial.println (F ("A")); } if (Xbox.getButtonClick (B, i)) {Serial.println (F ("B")); digitalWrite (ТОРМОЗ, ВЫСОКИЙ); Brake_on =1; импульс =100; если (вперед) по часовой стрелке (); иначе против часовой стрелки (); } if (Xbox.getButtonClick (X, i)) Serial.println (F ("X")); если (Xbox.getButtonClick (Y, i)) {Serial.println (F ("Y")); motors_stop (); }}} delay (1);} void clockwise () {Serial.print ("Вращение по часовой стрелке, а скорость равна"); Serial.println (импульс); analogWrite (motorPinOne, pulse); // устанавливаем ногу 1 H-моста в низкий уровень analogWrite (motorPinTwo, 0); если (тормоз_он) {задержка (600); digitalWrite (ТОРМОЗ, НИЗКИЙ); Brake_on =0; импульс =0; }} void counterClockwise () {Serial.print ("Вращение против часовой стрелки, скорость равна"); Serial.println (импульс); analogWrite (motorPinOne, 0); // устанавливаем ногу 1 H-моста в низкий уровень analogWrite (motorPinTwo, pulse); если (тормоз_он) {задержка (600); digitalWrite (ТОРМОЗ, НИЗКИЙ); Brake_on =0; импульс =0; }} void turn_left () {digitalWrite (motor2PinOne, HIGH); // устанавливаем ногу 1 H-моста в низкий уровень digitalWrite (motor2PinTwo, LOW);} void turn_right () {digitalWrite (motor2PinOne, LOW); // устанавливаем ногу 1 H-моста в низкий уровень digitalWrite (motor2PinTwo, HIGH);} void motors_stop () {analogWrite (motorPinOne, 0); analogWrite (motorPinTwo, 0); Pulse =0;} void center () {digitalWrite (motor2PinOne, LOW); digitalWrite (motor2PinTwo, LOW);} 
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

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

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