Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Ubah Mobil RC Lama menjadi Kendaraan Terkontrol Joystick dengan Arduino

Komponen dan Perlengkapan

Tentang Proyek Ini

1. Ambil Mobilnya!

Pertama-tama Anda perlu mobil RC lama. Untungnya saya menemukan monster truck. Ini bisa sangat menarik!

Hapus semua elektronik kecuali kabel untuk mengontrol dua motor.

2. Arduino dan Shield

Ambil papan Arduino (saya memilih Arduino UNO) dan colokkan USB host shield di atasnya.

3. Pasang Arduino ke Mobil

Colokkan shield di atas Arduino UNO dan USB Host shield dan obrak-abrik mereka ke mobil. Saya menggunakan salah satu lubang untuk sirkuit elektronik lama.

4. Buat Sirkuit

Saya membuat saya pada breadboard, tetapi Anda juga dapat membangunnya pada perfboard. Pada dasarnya sirkuit terdiri dari dua driver (L293D atau SN754410) dan dua stabilisator tegangan. Stabilisator tegangan digunakan untuk membatasi tegangan dari baterai. Faktanya saya menyarankan Anda untuk menggunakan 10-12 baterai AA 1,5V agar memiliki tegangan maksimum 15-18V yang akan memberi Anda lebih banyak waktu untuk bermain dengan mobil RC. Karena motor membutuhkan jumlah arus yang tinggi, untuk menggerakkan mobil dari posisi istirahat (sekitar 2A) kita membutuhkan stabilisator tegangan yang kuat seperti 78S12.

Jika Anda ingin informasi lebih lanjut tentang cara kerja driver, lihat di sini !

5. Pasang Sirkuit ke Mobil

Temukan tempat kosong di mobil RC tempat Anda dapat menempatkan sirkuit. Pada monster truck yang saya miliki, ada banyak ruang. Setelah diposisikan, hubungkan sirkuit ke dua motor. Akhirnya colokkan penerima nirkabel ke USB host shield.

6. Kode

Kode didasarkan pada contoh pustaka USB Host Library 2.0 yang dihosting di GitHub oleh Kristian Lauszus dari circuits@home

/* Contoh sketsa untuk pustaka penerima nirkabel Xbox - dikembangkan oleh Kristian Lauszus Mendukung hingga empat pengontrol secara nirkabel Untuk informasi lebih lanjut lihat posting blog: https://blog.tkjelectronics.dk/2012/12/xbox-360-receiver-added-to-the-usb-host-library/ atau kirim email saya: kristianl@tkjelectronics.com */ #include <XBOXRECV.h> // Satisfy IDE, which only needs to see the include statment in the ino. #ifdef dobogusinclude #include <spi4teensy3.h> #endif USB Usb; XBOXRECV Xbox(&Usb); #define motorPinOne 5 //The chosen pin must have PWM #define motorPinTwo 6 //The chosen pin must have PWM #define motor2PinOne 4 #define motor2PinTwo 7 #define BRAKE 2 /* Define the rotational speed of the motor. MUST be between 0 and 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 did not start")); while(1); //halt 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++) { if(Xbox.getButtonPress(L2, i)) { Serial.print("L2: "); Serial.print(Xbox.getButtonPress(L2, i)); pulse = Xbox.getButtonPress(L2, i); forward = 0; clockwise(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2: "); Serial.println(Xbox.getButtonPress(R2, i)); pulse = Xbox.getButtonPress(R2, i); forward = 1; counterClockwise(); } 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(BRAKE, HIGH); brake_on = 1; pulse = 100; if (forward) clockwise(); else counterClockwise(); } 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("Rotation is clockwise and speed is "); Serial.println(pulse); analogWrite(motorPinOne,pulse); // set leg 1 of the H-bridge low analogWrite(motorPinTwo,0); if (brake_on) { delay(600); digitalWrite(BRAKE, LOW); brake_on = 0; pulse = 0; } } void counterClockwise() { Serial.print("Rotation is counter-clockwise and speed is "); Serial.println(pulse); analogWrite(motorPinOne,0); // set leg 1 of the H-bridge low analogWrite(motorPinTwo,pulse); if (brake_on) { delay(600); digitalWrite(BRAKE, LOW); brake_on = 0; pulse = 0; } } void turn_left() { digitalWrite(motor2PinOne,HIGH); // set leg 1 of the H-bridge low digitalWrite(motor2PinTwo,LOW); } void turn_right() { digitalWrite(motor2PinOne,LOW); // set leg 1 of the H-bridge low digitalWrite(motor2PinTwo,HIGH); } void motors_stop() { analogWrite(motorPinOne,0); analogWrite(motorPinTwo,0); pulse = 0; } void center() { digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW); } 

Kode

Cuplikan kode #1 tersedia di bagian bawah halaman asli.

Github: https://github.com/felis/USB_Host_Shield_2.0

Proses manufaktur

  1. Membuat Robot Raspberry Pi yang Dikontrol Bluetooth dengan Umpan Balik Suara
  2. Lampu Meja RGB Kendali Gerak – Pencahayaan Interaktif Tanpa Tangan
  3. Kendalikan LED dengan Alexa melalui Raspberry Pi – Panduan Langkah demi Langkah yang Mudah
  4. Kit Lengan Robot 6-DoF Berbasis Arduino dengan Pengendali Nunchuk
  5. Kendalikan Dua Motor Stepper dengan Arduino Nano dan Joystick – Tutorial Sederhana
  6. Membangun Robot Kendali Suara dengan Arduino Nano
  7. Smart Parking Counter: Pelacakan Kendaraan Real-Time dengan Arduino, Processing, dan PHP
  8. PiBot: Robot Piano Berbasis Arduino untuk Pertunjukan Musik Presisi
  9. Wi-Servo: Kendalikan Servo melalui Wi-Fi dengan Browser Web
  10. Volant Joystick Arduino Kustom untuk Gaming