Tentang proyek ini
1. Naik Mobil!
Pertama-tama Anda membutuhkan mobil RC tua. Untungnya saya menemukan truk monster. Ini bisa sangat menarik!
Lepaskan semua elektronik kecuali kabel untuk mengontrol kedua motor.
2. Arduino dan Perisai
Ambil papan Arduino (saya memilih Arduino UNO) dan pasang pelindung host USB di atasnya.
3. Pasang Arduino ke Mobil
Pasang pelindung di atas Arduino UNO dan pelindung Host USB dan kencangkan ke mobil. Saya menggunakan salah satu lubang untuk sirkuit elektronik lama.
4. Buat Sirkuit
Saya membuat milik saya di papan tempat memotong roti, tetapi Anda juga bisa membuatnya di papan perf. Pada dasarnya rangkaian ini terdiri dari dua driver (L293D atau SN754410) dan dua stabilisator tegangan. Stabilizer tegangan digunakan untuk membatasi tegangan dari baterai. Bahkan saya menyarankan Anda untuk menggunakan baterai AA 1.5V 10-12 agar memiliki tegangan maksimum 15-18V yang akan memberi Anda lebih banyak waktu untuk bermain dengan mobil RC. Karena motor membutuhkan arus yang besar, untuk memindahkan mobil dari posisi diam (sekitar 2A), kita memerlukan penstabil 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 di mana Anda dapat menempatkan sirkuit. Di truk monster yang saya miliki, ada banyak ruang. Setelah diposisikan, sambungkan sirkuit ke dua motor. Terakhir, colokkan penerima nirkabel ke pelindung host USB.
6. Kode
Kode ini didasarkan pada contoh USB Host Library 2.0 yang dihosting di GitHub oleh Kristian Lauszus dari circuits@home
USB_Host_Shield_2.0/*Contoh sketsa untuk perpustakaan Xbox Wireless Reciver - dikembangkan oleh Kristian LauszusIni mendukung hingga empat pengontrol secara nirkabelUntuk informasi lebih lanjut lihat posting blog:http://blog.tkjelectronics.dk/2012/12 /xbox-360-receiver-added-to-the-usb-host-library/ atau kirimi saya email:[email protected]*/#include // Satisfy IDE, yang hanya perlu dilihat pernyataan include di ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //Pin yang dipilih harus memiliki PWM#define motorPinTwo 6 //Pin yang dipilih harus memiliki PWM#define motor2PinOne 4 #define motor2PinTwo 7#define REM 2/* Tentukan kecepatan putaran motor. HARUS antara 0 dan 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 tidak dimulai")); sementara(1); //menghentikan motor_stop(); Tengah(); } Serial.print(F("\r\nPerpustakaan Penerima Nirkabel Xbox Dimulai")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, OUTPUT); pinMode (REM, OUTPUT); digitalWrite (REM, RENDAH);}void loop() { Usb.Tugas(); 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)); pulsa =Xbox.getButtonPress(L2, i); maju =0; searah jarum jam(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); pulsa =Xbox.getButtonPress(R2, i); maju =1; berlawanan arah jarum jam(); } 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(); pusat lain(); } 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(); pusat lain(); } 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("Naik")); } if(Xbox.getButtonClick(BAWAH, i)) { Serial.println(F("Turun")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("Kiri")); } if(Xbox.getButtonClick(KANAN, i)) { Serial.println(F("Kanan")); } if(Xbox.getButtonClick(MULAI, i)) { Serial.println(F("Mulai")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("Kembali")); } 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(REM, TINGGI); rem_on =1; pulsa =100; if (maju) searah jarum jam(); lain berlawanan arah jarum jam(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); motor_stop(); } } } delay(1);}void searah jarum jam(){ Serial.print("Rotasi searah jarum jam dan kecepatan adalah "); Serial.println(pulsa); analogWrite(motorPinOne,pulse); // set kaki 1 dari H-bridge low analogWrite(motorPinTwo,0); if (rem_on) { delay(600); digitalWrite(REM, RENDAH); rem_on =0; pulsa =0; }}void counterClockwise(){ Serial.print("Rotasi berlawanan arah jarum jam dan kecepatan adalah "); Serial.println(pulsa); analogWrite(motorPinOne,0); // set kaki 1 dari H-bridge low analogWrite(motorPinTwo,pulse); if (rem_on) { delay(600); digitalWrite(REM, RENDAH); rem_on =0; pulsa =0; }}batal belok_kiri(){ digitalWrite(motor2PinOne,HIGH); // set kaki 1 dari H-bridge low digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // set kaki 1 dari H-bridge low digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0); analogWrite(motorPinDua,0); pulsa =0;}pusat kosong(){ digitalWrite(motor2PinOne, RENDAH); digitalWrite(motor2PinTwo, RENDAH);}
Kode
Cuplikan kode #1Arduino
/* Contoh sketsa untuk perpustakaan Xbox Wireless Reciver - dikembangkan oleh Kristian Lauszus Mendukung hingga empat pengontrol secara nirkabel Untuk informasi lebih lanjut, lihat posting blog:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library/ atau kirimkan saya email:[email protected] */#include // Satisfy IDE, yang hanya perlu melihat pernyataan include di ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //Pin yang dipilih harus memiliki PWM#define motorPinTwo 6 //Pin yang dipilih harus memiliki PWM#define motor2PinOne 4 #define motor2PinTwo 7#define REM 2/* Tentukan kecepatan putaran motor. HARUS antara 0 dan 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 tidak dimulai")); sementara(1); //menghentikan motor_stop(); Tengah(); } Serial.print(F("\r\nPerpustakaan Penerima Nirkabel Xbox Dimulai")); pinMode (motorPinOne, OUTPUT); pinMode (motorPinTwo, OUTPUT); pinMode (motor2PinOne, OUTPUT); pinMode (motor2PinTwo, OUTPUT); pinMode (REM, OUTPUT); digitalWrite (REM, RENDAH);}void loop() { Usb.Tugas(); 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)); pulsa =Xbox.getButtonPress(L2, i); maju =0; searah jarum jam(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); pulsa =Xbox.getButtonPress(R2, i); maju =1; berlawanan arah jarum jam(); } 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(); pusat lain(); } 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(); pusat lain(); } 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("Naik")); } if(Xbox.getButtonClick(BAWAH, i)) { Serial.println(F("Turun")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("Kiri")); } if(Xbox.getButtonClick(KANAN, i)) { Serial.println(F("Kanan")); } if(Xbox.getButtonClick(MULAI, i)) { Serial.println(F("Mulai")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("Kembali")); } 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(REM, TINGGI); rem_on =1; pulsa =100; if (maju) searah jarum jam(); lain berlawanan arah jarum jam(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); motor_stop(); } } } delay(1);}void searah jarum jam(){ Serial.print("Rotasi searah jarum jam dan kecepatan adalah "); Serial.println(pulsa); analogWrite(motorPinOne,pulsa); // set kaki 1 dari H-bridge low analogWrite(motorPinTwo,0); if (rem_on) { delay(600); digitalWrite(REM, RENDAH); rem_on =0; pulsa =0; }}void counterClockwise(){ Serial.print("Rotasi berlawanan arah jarum jam dan kecepatan adalah "); Serial.println(pulsa); analogWrite(motorPinOne,0); // set kaki 1 dari H-bridge low analogWrite(motorPinTwo,pulse); if (rem_on) { delay(600); digitalWrite(REM, RENDAH); rem_on =0; pulsa =0; } }batalkan belokan_kiri(){ digitalWrite(motor2PinOne,HIGH); // set kaki 1 dari H-bridge low digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // set kaki 1 dari H-bridge low digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0); analogWrite(motorPinDua,0); pulsa =0;}pusat kosong(){ digitalWrite(motor2PinOne, RENDAH); digitalWrite(motor2PinTwo, RENDAH);}
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0