Tentang proyek ini
Terima kasih telah memeriksa proyek menara Nerf yang dikontrol Bluetooth saya. Saya rasa tidak ada terlalu banyak penjelasan untuk dilakukan di sini, ini adalah menara Nerf yang dikendalikan melalui Bluetooth baik dari perangkat Android atau PC.
....................https://www.littlefrenchkev.com/bluetooth-nerf-turret.............. .....
BAGAIMANA CARA KERJANYA?
Tidak ada yang super rumit. Gerakan memiringkan dan menggeser ditangani oleh 2 servo yang digerakkan oleh Arduino Nano.
Anak panah ditembak menggunakan 2 rol yang dipintal oleh 2 motor DC kecil. Servo mendorong anak panah ke dalam roller saat perintah untuk menembak dikirim.Magazin dapat menampung 7 anak panah.
Seperti disebutkan di atas, ini dikontrol melalui Bluetooth baik dari perangkat android atau PC.
BAGAIMANA MEMBANGUNNYA?
PERAKITAN :
Tripod dan majalah hadir dalam dua versi berbeda. Satu dirancang untuk servos MG-90s dan yang lainnya untuk servos MG996r. Servo MG996r bisa haus daya. Pastikan catu daya Anda berfungsi dengan baik jika Anda memutuskan untuk menggunakannya.
Tripod :
Majalah :
KABEL :
PERANGKAT LUNAK DAN UJI !!!
BEBERAPA FOTO TAMBAHAN KARENA KENAPA TIDAK!!!
Kode
Kode ArduinoArduino
kode untuk diunggah ke arduino. Kode tetap sama apakah Anda memilih untuk mengontrol turret melalui aplikasi android atau PC .#include //-----Deklarasikan servos dan variabelServo recoil_servo;Servo pan_servo;Servo tilt_servo;const byte pan_limit_1 =0;bita konstanta pan_limit_2 =180;bita konstanta tilt_limit_1 =65;bita konstanta tilt_limit_2 =180;bita konstanta recoil_rest =180; // Sudut servo saat byte restconst recoil_pusshed =125; // Sudut yang harus dicapai servo untuk mendorong panah//-----Variabel yang terkait dengan penanganan data serialbyte byte_from_app;const byte buffSize =30;byte inputBuffer[buffSize];const byte startMarker =255;const byte endMarker =254;byte bytesRecvd =0;boolean data_received =false;//-----Variabel yang terkait dengan timing motor dan firingbool is_firing =false;bool can_fire =false;bool recoiling =false;unsigned long firing_start_time =0;unsigned long firing_current_time =0;const long firing_time =150;unsigned long recoil_start_time =0;unsigned long recoil_current_time =0;const long recoil_time =2 * firing_time;const byte motor_pin =12;boolean motors_ON =false;//8===========================Dvoid setup(){ //-----menentukan mode pin motor pinMode(motor_pin, OUTPUT); digitalWrite(pin_motor, RENDAH); //-----melampirkan servo ke pin recoil_servo.attach(9); pan_servo.attach(10); tilt_servo.attach(11); //-----mulai urutan recoil_servo.write(recoil_rest); pan_servo.write(90); penundaan (1000); tilt_servo.write(105); Serial.begin(9600); // memulai komunikasi serial}//8============================Dvoid loop(){ getDataFromPC(); set_motor(); if (data_diterima) { move_servo(); set_recoil(); set_motor(); } fire();}//8============================Dvoid getDataFromPC() { //struktur data yang diharapkan [start byte , jumlah pan, jumlah kemiringan, motor hidup, tombol tembak ditekan, byte akhir] //start byte =255 //jumlah pan =byte antara 0 dan 253 //jumlah kemiringan =byte antara 0 dan 253 //motor hidup =0 untuk off - 1 on //menekan tombol tembak =0 untuk tidak ditekan - 1 untuk ditekan //end byte =254 if (Serial.available()) { // Jika data tersedia dalam serial byte_from_app =Serial.read(); //membaca karakter berikutnya yang tersedia if (byte_from_app ==255) { // mencari byte awal, jika ditemukan:byteRecvd =0; //reset byte yang diterima ke 0(untuk mulai mengisi inputBuffer dari awal) data_received =false; } else if (byte_from_app ==254) { // cari byte akhir, jika ditemukan:data_received =true; // setel data_received ke true agar data dapat digunakan } else { // tambahkan byte yang diterima ke buffer inputBuffer[bytesRecvd] =byte_from_app; //menambahkan karakter ke buffer masukan byteRecvd++; // kenaikan byte yang diterima (ini bertindak sebagai indeks) if (bytesRecvd ==buffSize) { // hanya keamanan jika inputBuffer terisi (seharusnya tidak terjadi) byteRecvd =buffSize - 1; // jika byteReceived> ukuran buffer set byteReceived lebih kecil dari ukuran buffer } } }}//8==========================Dvoid move_servo( ) { byte pan_servo_position =map(inputBuffer[0], 0, 253, pan_limit_2, pan_limit_1);//mengubah nilai inputbuffer menjadi nilai posisi servo pan_servo.write(pan_servo_position); //set posisi pan servo byte tilt_servo_position =map(inputBuffer[1], 0 , 253, tilt_limit_2, tilt_limit_1); //konversi nilai inputbuffer ke nilai posisi servo tilt_servo.write(tilt_servo_position); //set posisi pan servo}//8============================Dvoid set_recoil() { if (inputBuffer[3] ==1) { //jika tombol api ditekan if (!is_firing &&!recoiling) { //dan belum menembak atau mundur can_fire =true; //set can fire to true (lihat efek di void fire()) } } else { // jika tombol fire tidak ditekan can_fire =false; //set can fire to false (lihat efek di void fire()) }}//8==========================Dvoid set_motor () { //-----start dan stop motor menggunakan transisitor MOSFET . if (inputBuffer[2] ==1) { //jika layar menyentuh digitalWrite(motor_pin, HIGH); //menghidupkan motor motors_ON =true; } else { //jika layar tidak disentuh digitalWrite(motor_pin, LOW); //matikan motor motors_ON =false; }}//8============================Dvoid fire() { //jika motor byte on, hidupkan motor dan periksa waktu sudah menyala if (can_fire &&!is_firing &&motors_ON) { //if (can_fire &&!is_firing) { firing_start_time =millis(); recoil_start_time =milis(); is_firing =benar; } fire_current_time =milis(); mundur_saat_waktu =milis(); if (is_firing &&firing_current_time - firing_start_time recoil_time) { is_firing =false; }}
file python
Aplikasi yang dapat dieksekusi dan android dapat ditemukan di sini:https://www.littlefrenchkev.com/bluetooth-nerf-turrethttps://github.com/LittleFrenchKev/Bluetooth_Nerf_turret Skema
Berikut adalah diagram pengkabelan utama.
Pengkabelan dibagi menjadi bagian-bagian kecil yang dihubungkan bersama menggunakan konektor dupont. Ini untuk kemudahan perakitan. Ini adalah kabel Bluetooth HC-05 .
Potongan kabel ini termasuk pembagi tegangan untuk memungkinkan 5V yang keluar dari arduino diturunkan menjadi sekitar 3,3V untuk pin Penerima HC-05.