Mündəricat:

İşləyən RC Avtomobil Sürət Göstəricisi: 4 Addım (Şəkillərlə birlikdə)
İşləyən RC Avtomobil Sürət Göstəricisi: 4 Addım (Şəkillərlə birlikdə)

Video: İşləyən RC Avtomobil Sürət Göstəricisi: 4 Addım (Şəkillərlə birlikdə)

Video: İşləyən RC Avtomobil Sürət Göstəricisi: 4 Addım (Şəkillərlə birlikdə)
Video: NƏNƏ SİQARETLƏ TUTDU😂😂 2024, Noyabr
Anonim
İşləyən RC Avtomobil Sürətölçən
İşləyən RC Avtomobil Sürətölçən

Bu, yüngül Land Rover -in daha böyük bir RC quruluşunun bir hissəsi olaraq yaratdığım qısa bir layihədir. Tablosunda işləyən bir sürətölçən olmasını xəyal etdim, amma bir servonun onu kəsməyəcəyini bilirdim. Yalnız bir ağlabatan seçim var idi: arduino yerləşdirin!

Başlamaq üçün bir az məlumat… Mən kodlaşdıran və ya elektronika adamı deyiləm. Hələ də elektrik enerjisini su axını baxımından düşünürəm və rezistorlar tərəfindən bir qədər mistikləşirəm. Dedi ki, hətta bu işi mən edə bilsəm, sən də bacarmalısan!

PARÇA LİSTESİ:

Mikro nəzarətçi: Hər biri təxminən 1 funt olan ATTiny85 çipindən istifadə etdim.

Mikrokontrolör Proqramçısı: Kodu çipə daxil etmək üçün onu proqramlaşdırmaq üçün bir yol lazımdır. Daimi arduino ilə bu sadəcə bir USB kabelidir, ancaq ATTiny çipi üçün əlavə bir şeyə ehtiyacınız var. Bunu etmək üçün başqa bir arduino istifadə edə bilərsiniz və ya mənim kimi Sparkfun -dan kiçik bir AVR proqramçısı istifadə edə bilərsiniz.

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

Onları müxtəlif üsullarla proqramlaşdırmağa çalışdığım üçün bunu tövsiyə edərdim və bu ən asandır. Lövhə bir az bahalıdır, amma bir çox ATTiny layihəsi etsəniz yaxşı bir sərmayədir.

8 Pin Çip Soketi: Çipi birbaşa lehimləmək əvəzinə bir yuvaya qoysanız, montajda özünüzə bəzi səhvlər verə bilərsiniz. Təcrübədən danışılır - heç kim çipləri yenidən proqramlaşdırmaq üçün onların sökülməsini istəmir.

Kondansatör: 100nF (kod 104) bir ayrılma kondansatörü istifadə olunur. Bunun səbəbini tam başa düşmürəm, amma oxudum ki, internetdə kondansatörlərin ayrılması vacibdir, buna görə də bu doğru olmalıdır …

Rezistor: Arduinoya xətti çəkmək üçün 10 kΩ rezistor istifadə olunur. Yenə də elektronikanın başqa bir sirri.

Perfboard/Stripboard: Dövrənizi yığacağınız bəzi lövhələr.

Sarma teli: Normal örtüklü tel, mühərrikə lehimləmək üçün çox qalındır. İncə emaye tel istifadə edərək, motor terminallarında stressi azaldar və həyatınızı xeyli asanlaşdırar.

Servo Wire: 3 pinli JR dişi fişində bitən üç telli lent. "Dəyişdirdiyim" yanmış bir servodan aldım.

Step Motor: 6 mm bipolar Nidec step motor istifadə etdim. Kiçik olmasına baxmayaraq, hər hansı bir kiçik stepper işləməlidir, çünki stepper birbaşa Arduinodan idarə olunur.

Başlıq Pimləri: Əsas deyil, ancaq stepperinizi 4 başlıq sancağına bağlasanız və dövrənizə bir priz qoysanız, quraşdırma asanlığı üçün tablosunuzu asanlıqla ayıra bilərsiniz.

Kompüter: Lövhənizi proqramlaşdırmaq üçün bir kompüterə ehtiyacınız olacaq. Bəlkə də Arduino IDE ilə. Və bəlkə də bir USB kabeli. Bir elektrik kabeli varsa, daha yaxşıdır.

Addım 1: Sistem

Yaratdığım sistemin əsas planı, RC qəbuledicisindən gələn Pulse Width Modulation (PWM) siqnalının ATTiny 85 mikrokontrolörü (uC) vasitəsi ilə bir pilləli motor süpürgəsinə çevrilməsi üsulu idi.

Burada PWM siqnalları və RC haqqında bir qaynaq var, ancaq bunu təkrarlamaq üçün bunu anlamaq lazım deyil.

az.wikipedia.org/wiki/Servo_control

ATTiny, Arduinonun ən sevdiyim ləzzətidir, çünki əsas şeyləri etmək üçün hələ də kifayət qədər I/O pinləri ilə kiçikdir və kiçik modellərə və RC layihələrinə mükəmməl uyğun gəlir. ATTiny -nin əsas çatışmazlığı, proqramlaşdırmaq üçün bir az daha çox konfiqurasiya tələb etməsidir, ancaq qurduqdan sonra o qədər ucuzdur ki, hər cür layihə üçün onları yığa bilərsiniz.

Sürətölçən düymənin ölçüsü geribildirimli dişli mühərrikə sahib olmaq üçün çox kiçikdir, buna görə də mütənasib cavab almaq üçün bir pilləli motor istifadə edilməli idi. Addım motoru, ayrı-ayrı miqdarda (və ya addımlarla …!) Hərəkət edən bir mühərrikdir, bu da belə bir geribildirim sistemi üçün ideal hala gətirir. Yeganə xəbərdarlıq budur ki, 'addımlar' nəticədə meydana gələn hərəkətin hamarlıqdan fərqli olaraq sarsıntılı olmasına səbəb olacaq. Dönmə başına kifayət qədər addım atan bir addım alsanız, bu nəzərə çarpmır, ancaq bu layihədə istifadə etdiyim stepperdə tam fırlanmada cəmi 20 -yə yaxın addım varsa, bucaq sıçrayışı olduqca pisdir.

Sistem, açıldıqda, iynəni sıfıra endirmək üçün stepperi iki inqilab üçün geriyə doğru aparacaq. Sürətölçənə sıfır işarəsinin olmasını istədiyiniz yerdə bir dayanma pimi lazımdır, əks halda əbədi olaraq fırlanacaq. Sonra irəli və tərs PWM siqnallarını motorun müəyyən sayda addımları ilə xəritələyir. Asan, hə …?

Addım 2: Proqram təminatı

İmtina: Mən proqramçı deyiləm. Bu layihə üçün mən, Dr. Frankenşteynin rəqəmsal ekvivalentiyəm, müxtəlif tapılmış kod bitlərindən işləyən bir şey yığıram.

Beləliklə, RC siqnallarını şərh etmək üçün kod hazırlayan Duane B -yə ən dərin təşəkkürümü bildirirəm:

rcarduino.blogspot.com/

Bir analoq ölçmə cihazı olaraq bir addım atma kodunu hazırlayan Ardunauta:

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

Və hər ikisinə, kodunuza etdiklərimə görə ən səmimi üzr istəyirəm.

İndi bu yolda deyil, ATTiny -yə yükləmək üçün budur:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - attachInterrupt #break THROTTLE_SIGNAL_IN_PIN 2 -də kəsmə nömrəsini istifadə edin // INTERRUPT 0 = DİJİTAL PIN 2 - digitalRead #define NEUTRAL_THRETREALTHTH elektrikli RC Avtomobilindəki neytral qazın #define UPPER_THROTTLE 2000 // bu, elektrikli RC Avtomobilin maksimum qazının mikrosaniyəsindəki müddətdir #define LOWER_THROTTLE 1000 // bu, elektrikli RC Maşınındakı minimum qazın mikrosaniyəsindəki müddətdir #define DEADZONE 50 // bu qazın ölü bölgəsidir. Ümumi ölü bölgə bundan iki qat çoxdur. #incdele #define STEPS 21 // inqilab başına addımlar (315 ° ilə məhdudlaşır) Sürətölçənin maksimum gedişini tənzimləmək üçün bunu dəyişin. #define COIL1 3 // Bobin pinləri. ATTiny, stepper üçün 0, 1, 3, 4 sancaqlar istifadə edir. Pin 2, kəsilmələri idarə edə biləcək yeganə pindir, buna görə giriş olmalıdır. #define COIL2 4 // Step motoru düzgün işləmirsə bunları dəyişməyə çalışın. #define COIL3 0 #define COIL4 1 // stepper sinifinin bir nümunəsini yaradın: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Addımlardakı mövqe (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // boş vəziyyətdə ikən sıfırlama vaxtı int Resetval = 0; uçucu int ThrottleIn = LOWER_THROTTLE; uçucu işarəsiz uzun StartPeriod = 0; // fasilə daxilində // ayrı bir dəyişən yerinə nThrottleIn = 0 istifadə edə bilərik, lakin yeni bir siqnalımız olduğunu göstərmək üçün bNewThrottleSignal istifadə etmək // bu ilk nümunə üçün daha aydındır void setup () {// Arduino -ya deyin INT0 (rəqəmsal pin 2) YÜKSƏDƏN LOW ya YÜKSƏ YÜKSƏ dəyişdikdə calcInput funksiyasının çağırılmasını istəyirik // bu dəyişiklikləri tutmaq, giriş nəbzinin nə qədər müddətə bağlı olduğunu hesablamağa imkan verirInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // motor sürətini 30 RPM (təxminən 360 PPS) olaraq təyin edin. step.step (ADIMLAR * 2); // Mövqeyi Sıfırla (X saat yönünün əksinə). } void loop () {Resetval = millis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Sıfırlama = 0; } // Başqa tərs eşleme əgər (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Sıfırlama = 0; } // Başqa bir sıra xaricindədirsə (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Sıfırlama = 0; } // Çərçivə xaricindədirsə (ThrottleInAvg Resetcounter) {stepper.step (4); // RC siqnalı uzun müddət dayanma zonasında olarsa, stepperə özünü yenidən sıfırlamasını söyləməyə çalışıram. Kodun bu hissəsinin həqiqətən işlədiyinə əmin deyiləm. }} int val = SPEED; // potansiometr dəyərini (0-1023 aralığı) əldə edin val = xəritə (val, 0, 255, 0, STEPS * 0.75); // addım aralığında pot qazan aralığını. if (abs (val - pos)> 2) {// fərq 2 addımdan böyükdürsə. if ((val - pos)> 0) {stepper.step (-1); // bir addım sola keçin. pos ++; } if ((val - pos) <0) {stepper.step (1); // bir addım sağa çəkin. pos--; }} // gecikmə (10); } void calcInput () {// pin yüksəkdirsə, (digitalRead (THROTTLE_SIGNAL_IN_PIN) == YÜKSƏK) {// mikro istifadə edərək vaxt əldə edin - kodumuz həqiqətən məşğul olduqda bu qeyri -dəqiq olacaq, lakin cari tətbiq üçün // başa düşülməsi asan və çox yaxşı işləyir StartPeriod = micros (); } başqa {// əgər pin aşağıdırsa, nəbzin düşən kənarıdır, buna görə də // başlanğıc vaxtı ulStartPeriodu micros () ilə qaytarılmış cari vaxtdan // başlanğıc vaxtını çıxarmaqla nəbz müddətini hesablaya bilərik (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

ATTiny85 -in proqramlaşdırılması haqqında daha çox məlumat üçün bura baxın:

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

Addım 3: Hardware

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Dövr qurmaq üçün dövrə diaqramına baxın. Necə yığacağınız sizə bağlıdır, amma elektron lövhənin prototipləşdirilməsi və çipin yuvaya quraşdırılması üçün istifadə olunan bir az şerit/pervaz taxtasından istifadə etməyi təklif edərdim.

C1 = 100nF

R1 = 10kΩ

Kondansatörün ən təsirli olması üçün çipə mümkün qədər yaxın quraşdırılmalıdır.

Emaye edilmiş telləri mühərrikə lehimləyərkən, son dərəcə diqqətli olun, çünki mühərriklərdəki terminallar mühərrikin telini qoparmağı və qoparmağı sevir. Bunu düzəltmək üçün, telləri lehimləmək və sonra birləşmənin üzərinə 2 hissədən ibarət olan böyük bir epoksi ləkə qoymaq, yaxşılaşmasına icazə vermək və sonra telləri bir-birinə bükmək yaxşı bir həlldir. Bu, fərdi terminal oynaqlarındakı stressi azaldır və onların bağlanmasını dayandırmalıdır. Bunu etməsəniz, zəmanət verilərək ən uyğun vaxtda qoparacaqlar.

Başlıq pin konnektoru etsəniz və sancaqları belə qurarsanız: [Ca1, Cb1, Ca2, Cb2] Ca1 ilə Coil A, tel 1 və s. Üçün dayanır. ətrafında.

Göstəricinin sıfır mövqeyini kalibrləmək üçün bir dayanacaq lazımdır. Mümkünsə iynəni metaldan hazırlamağı məsləhət görürəm. Bu, dayanma nöqtəsinə çatanda əyilməsini dayandırır. İğnəni yaxşı vəziyyətə gətirməyin bir yolu, iynəni müvəqqəti olaraq oxa yapışdırmaq, modulu işə salmaq, dayanmasına icazə vermək və sonra iynəni dirəyə söykənərək oxun üzərindəki dirəyə yapışdırmaqdır. dayanmaq. Bu, iynəni motorun maqnit dişləməsi ilə hizalayır və iynənizin dayanma nöqtəsinə qarşı dayanmasını təmin edir.

Addım 4: Epilog

Ümid edirəm bu qısa təlimatdan zövq aldınız və faydalı tapdınız. Bunlardan birini qurarsanız, mənə bildirin!

Uğurlar!

Tövsiyə: