Daftar Isi:

Bekerja Speedometer Mobil RC: 4 Langkah (dengan Gambar)
Bekerja Speedometer Mobil RC: 4 Langkah (dengan Gambar)

Video: Bekerja Speedometer Mobil RC: 4 Langkah (dengan Gambar)

Video: Bekerja Speedometer Mobil RC: 4 Langkah (dengan Gambar)
Video: Kecurangan penjual gas elpiji!!!!! 2024, November
Anonim
Speedometer Mobil RC yang berfungsi
Speedometer Mobil RC yang berfungsi

Ini adalah proyek singkat yang saya buat sebagai bagian dari RC yang lebih besar dari Land Rover Ringan. Saya memutuskan bahwa saya ingin memiliki speedometer yang berfungsi di dasbor, tetapi saya tahu bahwa servo tidak akan memotongnya. Hanya ada satu pilihan yang masuk akal: gunakan arduino!

Sedikit latar belakang untuk memulai… Saya bukan orang coding atau elektronik. Saya masih memikirkan listrik dalam hal aliran air dan saya agak bingung dengan resistor. Yang mengatakan, bahkan jika saya bisa membuat ini berhasil, maka Anda juga harus bisa!

DAFTAR BAGIAN:

Mikrokontroler: Saya menggunakan chip ATTiny85, yang harganya masing-masing sekitar £1.

Programmer Mikrokontroler: Untuk memasukkan kode ke dalam chip, Anda memerlukan cara untuk memprogramnya. Dengan arduino biasa, ini hanya kabel USB, tetapi untuk chip ATTiny, Anda memerlukan sesuatu yang ekstra. Anda dapat menggunakan arduino lain untuk melakukan ini atau, seperti saya, Anda dapat menggunakan programmer Tiny AVR dari Sparkfun.

learn.sparkfun.com/tutorials/tiny-avr-prog…

Saya akan merekomendasikan ini, karena saya sudah mencoba memprogramnya dengan berbagai metode dan ini adalah yang termudah. Papannya agak mahal, tetapi investasi yang bagus jika Anda melakukan banyak proyek ATTiny.

Soket Chip 8 Pin: Jika Anda memasukkan chip ke dalam soket daripada menyoldernya secara langsung, Anda dapat membuat kesalahan dalam perakitan. Diucapkan dari pengalaman - tidak ada yang ingin mematri chip untuk memprogram ulang mereka.

Kapasitor: Kapasitor decoupling 100nF (kode 104) digunakan. Saya tidak begitu mengerti mengapa, tetapi saya membaca bahwa kapasitor decoupling penting di internet, jadi itu pasti benar…

Resistor: Resistor 10kΩ digunakan untuk menarik kabel ke arduino. Sekali lagi, misteri elektronik lainnya.

Perfboard/Stripboard: Beberapa alas tiang untuk merakit sirkuit Anda.

Kawat Berliku: Kawat berselubung biasa terlalu tebal untuk disolder ke motor. Menggunakan kawat enamel halus akan mengurangi tekanan pada terminal motor dan membuat hidup Anda jauh lebih mudah.

Kawat Servo: Pita tiga kawat yang diakhiri dengan steker perempuan JR 3-pin. Saya mendapatkan milik saya dari servo yang terbakar yang saya 'modifikasi'.

Stepper Motor: Saya menggunakan motor stepper Nidec bipolar 6mm. Setiap stepper kecil harus berfungsi, meskipun tetap kecil, karena stepper digerakkan langsung dari Arduino.

Pin Header: Tidak penting, tetapi jika Anda menghubungkan stepper Anda ke 4 pin header dan memasang soket di sirkuit Anda, Anda dapat dengan mudah mencabut dasbor Anda untuk kemudahan pemasangan.

Komputer: Untuk memprogram papan Anda, Anda memerlukan komputer. Mungkin dengan Arduino IDE. Dan mungkin kabel USB. Jika memiliki kabel listrik juga, maka lebih baik lagi.

Langkah 1: Sistem

Garis dasar sistem yang saya buat adalah metode dimana sinyal Pulse Width Modulation (PWM) yang berasal dari penerima RC diubah menjadi sapuan motor stepper melalui mikrokontroler ATTiny 85 (UC).

Berikut adalah sumber tentang sinyal PWM dan RC, tetapi untuk mereplikasi ini, Anda tidak perlu benar-benar memahaminya.

en.wikipedia.org/wiki/Servo_control

ATTiny adalah rasa favorit saya dari Arduino karena kecil dengan pin I/O yang masih cukup untuk melakukan hal-hal dasar, sehingga sangat cocok dengan model kecil dan proyek RC. Kelemahan utama dari ATTiny adalah membutuhkan sedikit lebih banyak pengaturan untuk memprogramnya, tetapi setelah Anda mengaturnya, harganya sangat murah sehingga Anda dapat membeli tumpukannya untuk semua jenis proyek.

Ukuran dial speedometer terlalu kecil untuk memiliki motor yang digerakkan dengan umpan balik, jadi untuk mendapatkan respons yang proporsional, motor stepper harus digunakan. Motor stepper adalah motor yang digerakkan dalam jumlah diskrit (atau langkah…!), yang membuatnya ideal untuk sistem tanpa umpan balik seperti ini. Satu-satunya peringatan adalah bahwa 'langkah' akan menyebabkan gerakan yang dihasilkan menjadi tersentak-sentak dan bukannya mulus. Jika Anda mendapatkan stepper dengan langkah yang cukup per rotasi, itu tidak terlihat, tetapi dengan stepper yang saya gunakan dalam proyek ini hanya memiliki 20 langkah atau lebih dalam satu putaran penuh, lompatan sudutnya cukup buruk.

Sistem, pada power-up, akan menjalankan stepper mundur selama dua putaran, sehingga jarum nol. Speedometer membutuhkan pin istirahat di mana Anda ingin tanda nol berada, atau jika tidak, itu hanya akan berputar selamanya. Kemudian memetakan sinyal PWM maju dan mundur ke sejumlah langkah motor yang ditetapkan. Mudah, kan…?

Langkah 2: Perangkat Lunak

Penafian: Saya bukan seorang programmer. Untuk proyek ini saya setara digital dari Dr. Frankenstein, merakit sesuatu yang bekerja dari berbagai potongan kode yang ditemukan.

Jadi, terima kasih yang sebesar-besarnya saya sampaikan kepada Duane B, yang membuat kode untuk menafsirkan sinyal RC:

rcarduino.blogspot.com/

Dan untuk Ardunaut, yang membuat kode untuk menjalankan stepper sebagai pengukur analog:

arduining.com/2012/04/22/arduino-driving-a…

Dan untuk keduanya, permintaan maaf saya yang paling tulus atas apa yang saya lakukan pada kode Anda.

Sekarang tidak ada lagi, inilah yang harus diunggah ke ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = PIN DIGITAL 2 - gunakan nomor interupsi di attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = PIN DIGITAL 2 - gunakan nomor PIN dalam digitalBaca #define NEUTRAL_THROTTLE 1500 // ini durasinya dalam 1500 mikrodetik throttle netral pada mobil RC listrik #define UPPER_THROTTLE 2000 // ini adalah durasi dalam mikrodetik throttle maksimum pada mobil RC listrik #define LOWER_THROTTLE 1000 // ini adalah durasi dalam mikrodetik nthrottle minimum pada mobil RC listrik #define DEADZONE 50 // ini adalah zona mati throttle. Zona mati total dua kali lipat ini. #include #define LANGKAH 21 // langkah per putaran (dibatasi hingga 315 °) Ubah ini untuk menyesuaikan perjalanan maksimum speedometer. #define COIL1 3 // Pin Coil. ATTiny menggunakan pin 0, 1, 3, 4 untuk stepper. Pin 2 adalah satu-satunya pin yang dapat menangani interupsi sehingga perlu menjadi input. #define COIL2 4 // Coba ganti ini jika motor stepper tidak bekerja dengan benar. #define COIL3 0 #define COIL4 1 // membuat turunan dari kelas stepper: Stepper stepper(LANGKAH, COIL1, COIL2, COIL3, COIL4); int pos = 0; //Posisi dalam langkah(0-630)= (0°-315 °) int SPEED = 0; float ThrottleInAvg = 0; int PengukuranToAverage = 60; float Penghitung Ulang = 10; // waktu untuk mereset saat throttle idle int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; volatile unsigned long StartPeriod = 0; // set dalam interupsi // kita bisa menggunakan nThrottleIn = 0 dalam loop alih-alih variabel terpisah, tetapi menggunakan bNewThrottleSignal untuk menunjukkan bahwa kita memiliki sinyal baru // lebih jelas untuk contoh pertama ini void setup() { // beri tahu Arduino kita ingin fungsi calcInput dipanggil setiap kali INT0 (pin digital 2) berubah dari HIGH ke LOW atau LOW ke HIGH // menangkap perubahan ini akan memungkinkan kita menghitung berapa lama pulsa input terpasangInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // atur kecepatan motor ke 30 RPM (sekitar 360 PPS). stepper.step(LANGKAH * 2); //Reset Posisi(X langkah berlawanan arah jarum jam). } void loop() { Resetval = milis; untuk (int i = 0; i (NETRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = peta(ThrottleInAvg, (NETRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Atur Ulang = 0; } // Membalikkan pemetaan else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NETRAL_THROTTLE - DEADZONE), 255, 0); Atur Ulang = 0; } // Di luar rentang atas else if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Atur Ulang = 0; } // Di luar jangkauan lebih rendah lagi if (Penghitung Ulang ThrottleInAvg) { stepper.step(4); // Saya mencoba memberi tahu stepper untuk mengatur ulang sendiri jika sinyal RC berada di zona mati untuk waktu yang lama. Tidak yakin apakah bagian kode ini benar-benar berfungsi. } } int val = KECEPATAN; //mendapatkan nilai potensiometer (rentang 0-1023) val = map(val, 0, 255, 0, STEPS * 0,75); // memetakan kisaran pot di kisaran stepper. if (abs(val - pos) > 2) { //jika perbedaan lebih besar dari 2 langkah. if ((val - pos) > 0) { stepper.step(-1); // pindah satu langkah ke kiri. pos++; } if ((val - pos) < 0) { stepper.step(1); // pindah satu langkah ke kanan. pos--; } } // tunda(10); } void calcInput() { // jika pin tinggi, ini adalah awal dari interupsi if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // dapatkan waktu menggunakan mikro - ketika kode kita menjadi sangat sibuk ini akan menjadi tidak akurat, tetapi untuk aplikasi saat ini // mudah dimengerti dan bekerja dengan sangat baik StartPeriod = micros(); } else { // jika pin rendah, itu adalah tepi jatuh pulsa jadi sekarang kita dapat menghitung durasi pulsa dengan mengurangi // waktu mulai ulStartPeriod dari waktu saat ini yang dikembalikan oleh micros() if (Periode Awal) { ThrottleIn = (int)(mikro() - StartPeriod); Periode Awal = 0; } } }

Lihat ini untuk informasi lebih lanjut tentang pemrograman ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Langkah 3: Perangkat Keras

Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras

Lihat diagram sirkuit untuk membangun sirkuit. Bagaimana Anda merakitnya terserah Anda, tetapi saya sarankan menggunakan sedikit stripboard/perfboard yang digunakan untuk membuat prototipe papan sirkuit, dan memasang chip di soket.

C1 = 100nF

R1 = 10kΩ

Kapasitor harus dipasang sedekat mungkin dengan chip agar paling efektif.

Saat menyolder kabel berenamel ke motor, berhati-hatilah, karena terminal pada motor suka memutuskan dan memutuskan kabel koil ke motor. Untuk mengatasinya, solusi yang baik adalah dengan menyolder kabel, dan kemudian meletakkan gumpalan besar epoksi 2 bagian di atas sambungan,, biarkan mengering, lalu putar kabel bersama-sama. Ini mengurangi stres pada sambungan terminal individu dan harus menghentikannya patah. Jika Anda tidak melakukan ini, mereka akan berhenti pada waktu yang paling tidak nyaman, dijamin.

Jika Anda membuat konektor pin header, dan mengatur pinnya sebagai berikut: [Ca1, Cb1, Ca2, Cb2] dengan Ca1 adalah singkatan dari Coil A, wire 1 dll. Ini memungkinkan Anda untuk mengubah arah putaran pengukur dengan menukar steker sekitar.

Pengukur akan membutuhkan endstop untuk mengkalibrasi posisi nol melawan. Saya akan merekomendasikan membuat jarum dari logam jika memungkinkan. Ini menghentikannya melentur ketika menyentuh endstop. Cara untuk menempatkan jarum pada posisi yang baik adalah dengan merekatkan sementara jarum ke poros, nyalakan modul, biarkan berhenti, lalu lepaskan dan rekatkan kembali jarum pada poros, dengan jarum bertumpu pada pemberhentian terakhir. Ini menyelaraskan jarum dengan cogging magnet motor, dan memastikan bahwa jarum Anda harus selalu bersandar pada endstop.

Langkah 4: Epilog

Semoga Anda menikmati instruksi singkat ini, dan merasa berguna. Jika Anda membangun salah satunya, beri tahu saya!

Semoga beruntung!

Direkomendasikan: