Isi kandungan:

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

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

Video: Speedometer Kereta RC Bekerja: 4 Langkah (dengan Gambar)
Video: Drift Masa Awek Bergambar di Genting 2024, September
Anonim
Speedometer Kereta RC yang berfungsi
Speedometer Kereta RC yang berfungsi

Ini adalah projek pendek yang saya buat sebagai sebahagian daripada binaan RC Lightweight Land Rover yang lebih besar. Saya memutuskan bahawa saya suka mempunyai speedometer yang berfungsi di papan pemuka, tetapi saya tahu bahawa servo tidak akan memotongnya. Hanya ada satu pilihan yang munasabah: gunakan arduino!

Sedikit latar belakang untuk bermula dengan … Saya bukan orang pengkodan atau elektronik. Saya masih memikirkan elektrik dari segi aliran air dan agak dikejutkan oleh perintang. Walaupun begitu, jika saya dapat membuat karya ini, anda juga seharusnya dapat melakukannya!

SENARAI BAHAGIAN:

Mikrokontroler: Saya menggunakan cip ATTiny85, yang berharga sekitar £ 1 setiap satu.

Pengaturcara Mikrokontroler: Untuk memasukkan kod ke dalam cip, anda memerlukan kaedah untuk memprogramnya. Dengan arduino biasa, ini hanyalah kabel USB, tetapi untuk cip ATTiny, anda memerlukan sesuatu yang tambahan. Anda boleh menggunakan arduino lain untuk melakukan ini atau, seperti saya, anda boleh menggunakan programmer Tiny AVR dari Sparkfun.

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

Saya mengesyorkan ini, kerana saya telah mencuba memprogramnya dengan pelbagai kaedah dan kaedah ini adalah yang paling mudah. Papannya agak mahal, tetapi pelaburan yang baik jika anda melakukan banyak projek ATTiny.

8 Pin Chip Socket: Sekiranya anda memasukkan chip ke dalam soket dan bukannya menyoldernya secara langsung, anda boleh membuat kesalahan pada pemasangan. Bercakap dari pengalaman - tidak ada yang mahu memisahkan cip untuk memprogramnya semula.

Kapasitor: Kapasitor pemutusan 100nF (kod 104) digunakan. Saya tidak faham mengapa, tetapi saya membaca bahawa kapasitor pemutusan adalah penting di internet, jadi mesti betul …

Perintang: Perintang 10kΩ digunakan untuk menarik garisan ke arduino. Sekali lagi, satu lagi misteri elektronik.

Perfboard / Stripboard: Beberapa papan bawah untuk memasang litar anda.

Kawat Penggulungan: Kawat berselubung biasa terlalu tebal untuk disolder ke motor. Menggunakan wayar enamel halus akan mengurangkan tekanan pada terminal motor dan menjadikan hidup anda lebih mudah.

Kawat Servo: Pita tiga dawai yang berakhir pada palam wanita JR 3-pin. Saya mendapat khidmat dari servo yang sudah habis dan saya 'ubah suai'.

Stepper Motor: Saya menggunakan motor stepper Nidec bipolar 6mm. Mana-mana anak tangga yang kecil mesti berfungsi, walaupun tetap kecil, kerana anak tangga itu dihalau terus dari Arduino.

Pin Header: Tidak penting, tetapi jika anda memasukkan stepper anda ke 4 pin header dan meletakkan soket di litar anda, anda boleh mencabut papan pemuka anda dengan mudah untuk memudahkan pemasangan.

Komputer: Untuk memprogram papan anda, anda memerlukan komputer. Mungkin dengan Arduino IDE. Dan mungkin kabel USB. Sekiranya ia juga mempunyai kabel kuasa, maka lebih baik.

Langkah 1: Sistem

Garis besar asas sistem yang saya buat adalah kaedah di mana isyarat Pulse Width Modulation (PWM) yang datang dari penerima RC diubah menjadi sapu motor stepper melalui mikrokontroler ATTiny 85 (uC).

Berikut adalah sumber pada isyarat PWM dan RC, tetapi untuk mereplikasi ini, anda tidak perlu memahaminya.

en.wikipedia.org/wiki/Servo_control

ATTiny adalah rasa Arduino kegemaran saya kerana ia kecil dengan pin I / O yang masih mencukupi untuk melakukan perkara asas, jadi sangat sesuai dengan model kecil dan projek RC. Kelemahan utama ATTiny adalah bahawa ia memerlukan sedikit lebih banyak persediaan untuk memprogramnya, tetapi setelah anda menyiapkannya, ia sangat murah sehingga anda dapat membeli setumpuknya untuk semua jenis projek.

Ukuran dail speedometer terlalu kecil untuk memiliki motor yang diarahkan dengan maklum balas, jadi untuk mendapatkan tindak balas berkadar motor stepper harus digunakan. Motor stepper adalah motor yang digerakkan dalam jumlah yang berbeza (atau langkah…!), Yang menjadikannya ideal untuk sistem tanpa maklum balas seperti ini. Satu-satunya peringatan adalah bahawa 'langkah' akan menyebabkan pergerakan yang dihasilkan menjadi tersentak berbanding dengan lancar. Sekiranya anda mendapat stepper dengan langkah yang cukup per putaran, itu tidak dapat dilihat, tetapi dengan stepper yang saya gunakan dalam projek ini hanya mempunyai 20 atau lebih langkah dalam putaran penuh, lompatan sudut agak buruk.

Sistem, semasa dihidupkan, akan menggerakkan stepper ke belakang untuk dua putaran, sehingga dapat menolakkan jarum. Speedometer memerlukan pin rehat di mana anda mahu tanda sifar berada, jika tidak, ia akan berputar selamanya. Kemudian memetakan isyarat PWM maju dan mundur ke sejumlah langkah motor. Mudah, bukan …?

Langkah 2: Perisian

Penafian: Saya bukan pengaturcara. Untuk projek ini saya adalah setara digital Dr. Frankenstein, mengumpulkan sesuatu yang berfungsi dengan pelbagai kod yang dijumpai.

Oleh itu, terima kasih saya ucapkan kepada Duane B, yang membuat kod untuk mentafsirkan isyarat RC:

rcarduino.blogspot.com/

Dan kepada Ardunaut, yang membuat kod untuk menjalankan stepper sebagai alat pengukur analog:

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

Dan kepada kedua-duanya, permintaan maaf saya yang tulus atas apa yang saya lakukan terhadap kod anda.

Sekarang sudah tidak tentu, inilah yang perlu dimuat naik ke ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - gunakan nombor interrupt di attachInterrupt # define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = PIN DIGITAL 2 - gunakan nombor PIN dalam digitalRead #define NEUTRAL_THROTT ini adalah dalam masa 1500 ini throttle neutral pada RC RC elektrik #define UPPER_THROTTLE 2000 // ini adalah jangka masa dalam mikrodetik pendikit maksimum pada RC elektrik elektrik #define LOWER_THROTTLE 1000 // ini adalah jangka masa dalam mikrodetik pendikit minimum pada RC Car #define elektrik DEADZONE 50 // ini adalah zon mati pendikit. Jumlah zon mati adalah dua kali ganda daripada ini. #include #define LANGKAH 21 // langkah per revolusi (terhad kepada 315 °) Ubah ini untuk menyesuaikan perjalanan maksimum speedometer. #define COIL1 3 // Coil Pins. ATTiny menggunakan pin 0, 1, 3, 4 untuk stepper. Pin 2 adalah satu-satunya pin yang dapat menangani gangguan sehingga perlu menjadi input. #define COIL2 4 // Cuba ubah ini jika motor stepper tidak berjalan dengan baik. #define COIL3 0 #define COIL4 1 // buat contoh kelas stepper: Stepper stepper (LANGKAH, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Kedudukan dalam langkah (0-630) = (0 ° -315 °) int SPEED = 0; terapung ThrottleInAvg = 0; int MeasurementsToAverage = 60; Resetcounter apungan = 10; // masa untuk menetapkan semula semasa berada di idle throttle int Resetval = 0; turun naik int ThrottleIn = LOWER_THROTTLE; StartPeriod panjang tidak stabil yang tidak menentu = 0; // set in interrupt // kita boleh menggunakan nThrottleIn = 0 dalam gelung dan bukannya pemboleh ubah yang terpisah, tetapi menggunakan bNewThrottleSignal untuk menunjukkan bahawa kita mempunyai isyarat baru // lebih jelas untuk contoh pertama ini void setup () {// beritahu Arduino kami mahu fungsi calcInput dipanggil setiap kali INT0 (pin digital 2) berubah dari HIGH ke LOW atau LOW ke HIGH // menangkap perubahan ini akan membolehkan kita mengira berapa lama denyut input dilampirkanInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // tetapkan kelajuan motor ke 30 RPM (360 PPS aproks.). stepper.step (LANGKAH * 2); // Tetapkan semula Kedudukan (langkah X berlawanan arah jam). } gelung kosong () {Resetval = millis; untuk (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = peta (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Tetapan semula = 0; } // Pemetaan terbalik yang lain jika (ThrottleInAvg LOWER_THROTTLE) {SPEED = peta (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Tetapan semula = 0; } // Di luar jangkauan lebih tinggi jika (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Tetapan semula = 0; } // Di luar jangkauan lebih rendah jika lain (ThrottleInAvg Resetcounter) {stepper.step (4); // Saya cuba memberitahu stepper untuk menetapkan semula dirinya sendiri sekiranya isyarat RC berada di zon mati untuk masa yang lama. Tidak pasti sama ada bahagian kod ini benar-benar berfungsi. }} int val = SPEED; // dapatkan nilai potensiometer (julat 0-1023) val = peta (val, 0, 255, 0, LANGKAH * 0.75); // julat periuk peta dalam julat stepper. jika (abs (val - pos)> 2) {// jika perbezaan lebih besar daripada 2 langkah. jika ((val - pos)> 0) {stepper.step (-1); // gerakkan selangkah ke kiri. pos ++; } jika ((val - pos) <0) {stepper.step (1); // bergerak selangkah ke kanan. pos--; }} // kelewatan (10); } void calcInput () {// jika pin tinggi, ini adalah permulaan gangguan jika (digitalRead (THROTTLE_SIGNAL_IN_PIN) == TINGGI) {// meluangkan masa menggunakan mikro - apabila kod kami benar-benar sibuk ini akan menjadi tidak tepat, tetapi untuk aplikasi semasa // mudah difahami dan berfungsi dengan baik StartPeriod = mikro (); } lain {// jika pin rendah, pinggirnya jatuh sehingga sekarang kita dapat mengira jangka masa nadi dengan mengurangkan // start time ulStartPeriod dari masa semasa yang dikembalikan oleh mikro () jika (StartPeriod) {ThrottleIn = (int) (mikro () - StartPeriod); StartPeriod = 0; }}}

Rujuk ini untuk maklumat lebih lanjut mengenai pengaturcaraan ATTiny85:

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

Langkah 3: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan

Rujuk rajah litar untuk membina litar. Bagaimana anda memasangnya terserah kepada anda, tetapi saya cadangkan untuk menggunakan sedikit papan tulis / minyak wangi yang digunakan untuk prototaip papan litar, dan memasang cip di soket.

C1 = 100nF

R1 = 10kΩ

Kapasitor harus dipasang sedekat mungkin dengan cip agar paling berkesan.

Semasa menyisipkan kabel enamel ke motor, berhati-hati, kerana terminal pada motor suka melepaskan dan memutuskan wayar gegelung ke motor. Untuk mengatasinya, penyelesaian yang baik adalah dengan menyolder wayar, dan kemudian letakkan gumpalan besar epoksi 2 bahagian pada sendi, biarkan ia sembuh, kemudian putar wayar bersama-sama. Ini mengurangkan tekanan pada sendi terminal individu dan harus menghentikannya terputus. Sekiranya anda tidak melakukan ini, mereka akan terjamin pada masa yang paling tidak selesa, dijamin.

Sekiranya anda membuat penyambung pin pengepala, dan pasangkan pin dengan demikian: [Ca1, Cb1, Ca2, Cb2] dengan Ca1 berdiri untuk Coil A, wire 1 dll. Ini membolehkan anda mengubah arah putaran tolok dengan menukar palam sekitar.

Tolok akan memerlukan penghentian hujung untuk menentukurkan kedudukan sifar melawan. Saya akan mengesyorkan membuat jarum daripada logam jika boleh. Ini menghentikannya melentur ketika menyentuh bahagian hujung. Cara untuk mendapatkan jarum pada kedudukan yang baik adalah dengan merekatkan jarum ke gandar buat sementara waktu, menghidupkan modul, membiarkannya berehat, dan kemudian mengeluarkan dan merekatkan jarum pada gandar, dengan jarum bersandar pada penghujung. Ini sejajar jarum dengan cogging magnet motor, dan memastikan bahawa jarum anda harus selalu berhenti di hujung hujung.

Langkah 4: Epilog

Mudah-mudahan anda telah menikmati pengajaran ringkas ini, dan menganggapnya berguna. Sekiranya anda membina salah satu daripadanya, beritahu saya!

Semoga berjaya!

Disyorkan: