Mundarija:

Ishlaydigan RC avtomobil tezligi o'lchagichi: 4 qadam (rasmlar bilan)
Ishlaydigan RC avtomobil tezligi o'lchagichi: 4 qadam (rasmlar bilan)

Video: Ishlaydigan RC avtomobil tezligi o'lchagichi: 4 qadam (rasmlar bilan)

Video: Ishlaydigan RC avtomobil tezligi o'lchagichi: 4 qadam (rasmlar bilan)
Video: Davlat raqam belgisini o‘zgacha usulda yashirgan haydovchi qo‘lga tushdi 2024, Sentyabr
Anonim
Ishlaydigan RC avtomobil tezligi o'lchagichi
Ishlaydigan RC avtomobil tezligi o'lchagichi

Bu men engil Land Rover RC -ning katta qismi sifatida yaratgan qisqa loyihadir. Men asboblar panelida ishlaydigan tezlik o'lchagichi borligini o'ylardim, lekin men servo uni kesmasligini bilardim. Faqat bitta oqilona variant bor edi: arduino -ni joylashtiring!

Boshlash uchun ozgina ma'lumot … Men kod yozuvchi yoki elektronika sohasidagi odam emasman. Men hali ham suv oqimi nuqtai nazaridan elektr energiyasi haqida o'ylayman va rezistorlar tomonidan biroz mistik bo'lib qolaman. Aytgancha, agar men bu ishni qila olgan bo'lsam, siz ham qila olasiz!

QISMLAR Ro'yxati:

Mikrokontroller: Men ATTiny85 chipidan foydalandim, uning har biri taxminan 1 funt turadi.

Mikrokontroller dasturchisi: Kodni chipga olish uchun uni dasturlash usuli kerak. Oddiy arduino bilan bu faqat USB kabeli, lekin ATTiny chipi uchun sizga qo'shimcha narsa kerak bo'ladi. Buni amalga oshirish uchun siz boshqa arduino -dan foydalanishingiz mumkin yoki men kabi Sparkfun -dan kichik AVR dasturchisidan foydalanishingiz mumkin.

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

Men buni tavsiya qilaman, chunki men ularni turli usullar bilan dasturlashni sinab ko'rdim va bu eng oson. Kengash biroz qimmat, lekin agar siz ATTiny loyihalarini ko'p qilsangiz yaxshi sarmoya.

8 pinli chipli rozetka: Agar siz chipni to'g'ridan -to'g'ri lehimlash o'rniga rozetkaga joylashtirsangiz, montaj qilishda o'zingizni xatolarga yo'l qo'yishingiz mumkin. Tajribadan aytilganidek - hech kim chiplarni qayta dasturlash uchun ularni ochishni xohlamaydi.

Kondensator: 100nF (kod 104) ajratuvchi kondansatör ishlatiladi. Men nima uchun ekanligini tushunmayapman, lekin o'qidimki, internetda kondensatorlarni ajratish muhim, shuning uchun bu to'g'ri bo'lishi kerak …

Qarshilik: chiziqni arduino ichiga tushirish uchun 10 kΩ qarshilik ishlatiladi. Yana elektronikaning yana bir siri.

Perfboard/Stripboard: sizning sxemangizni yig'ish uchun bir nechta taglik taxtasi.

O'ralgan sim: oddiy qobiqli sim motorga lehimlash uchun juda qalin. Nozik sirlangan simdan foydalanish motor terminallaridagi stressni kamaytiradi va hayotingizni ancha osonlashtiradi.

Servo sim: 3-pinli JR dişi vilkasida uch simli tasma. Men o'zimni "o'zgartirayotgan" yonib ketgan servodan oldim.

Bosqichli dvigatel: Men 6 mm bipolyar Nidec step motorini ishlatardim. Har qanday kichik stepper ishlashi kerak, garchi ularni kichik bo'lsa ham, chunki qadam to'g'ridan -to'g'ri Arduino -dan haydab chiqariladi.

Sarlavha pinlari: muhim emas, lekin agar siz stepperni 4 ta pinli simga ulab, rozetkaga rozetkani qo'ysangiz, o'rnatish qulayligi uchun boshqaruv panelini osongina uzib qo'yishingiz mumkin.

Kompyuter: Kengashni dasturlash uchun sizga kompyuter kerak bo'ladi. Ehtimol, Arduino IDE bilan. Va, ehtimol, USB kabeli. Agar u elektr kabeliga ega bo'lsa, undan ham yaxshiroq.

1 -qadam: tizim

Men yaratgan tizimning asosiy sxemasi - bu RC qabul qilgichidan keladigan puls kengligi modulyatsiyasi (PWM) signalini ATTiny 85 mikrokontroller (uC) orqali pog'onali dvigatelga aylantirish usuli.

Bu erda PWM signallari va RC manbasi, lekin uni takrorlash uchun uni tushunish shart emas.

uz.wikipedia.org/wiki/Servo_control

ATTiny - bu Arduino -ning eng sevimli lazzati, chunki u asosiy narsalarni bajarish uchun etarli bo'lgan kirish -chiqish pinlari bilan kichik modellar va RC loyihalariga juda mos keladi. ATTiny -ning asosiy salbiy tomoni shundaki, uni dasturlash uchun biroz ko'proq sozlash talab qilinadi, lekin siz o'rnatganingizdan so'ng ular juda arzon, siz ularni har xil loyihalar uchun sotib olishingiz mumkin.

Tezlikni o'lchash moslamasining o'lchami juda kichik, u teskari aloqa bilan ishlaydigan tishli dvigatelga ega emas, shuning uchun mutanosib javob berish uchun qadamli motorni ishlatish kerak edi. Bosqichli dvigatel-bu alohida hajmda (yoki qadamda …!) Harakatlanadigan dvigatel, shuning uchun bu kabi teskari aloqa tizimi uchun idealdir. Faqatgina ogohlantirish shundaki, "qadamlar" natijasida harakat silliq emas, balki silliq bo'ladi. Agar siz aylanishga etarlicha qadam qo'yadigan qadam olsangiz, bu sezilmaydi, lekin men bu loyihada foydalangan qadamda to'liq aylanishda atigi 20 yoki undan ko'p qadam bo'lsa, burchakka sakrash juda yomon.

Tizim ishga tushganda, ignani nolga aylantirish uchun qadamni ikki marta aylantiradi. Tezlik o'lchagichga nol belgisi bo'lishni xohlagan joyni qo'yish kerak, aks holda u abadiy aylanadi. Keyin u oldinga va teskari PWM signallarini dvigatelning belgilangan qadamlar soniga moslashtiradi. Oson, to'g'rimi …?

2 -qadam: dasturiy ta'minot

Ogohlantirishlar: Men dasturchi emasman. Bu loyiha uchun men doktor Frankenshteynning raqamli ekvivalentiman, har xil topilgan kodlardan ishlayotgan narsalarni yig'aman.

Shunday qilib, RC signallarini talqin qilish kodini yaratgan Duane Bga chin dildan minnatdorchilik bildiraman:

rcarduino.blogspot.com/

Va analog o'lchagich sifatida stepperni ishlatish kodini yaratgan Ardunautga:

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

Va ikkalasiga ham, sizning kodingizga qilgan ishim uchun chin dildan uzr so'rayman.

Endi bu yo'l yo'q, ATTiny -ga nima yuklash kerak:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - attachInterrupt #define THROTTLE_SIGNAL_IN_PIN 2 -dagi uzilish raqamini ishlating // INTERRUPT 0 = DIGITAL PIN 2 - raqamli raqamli raqamni ishlating #soniyali sonda aniqlansin elektr RC avtomobilidagi neytral gaz kelebeği #define UPPER_THROTTLE 2000 // bu elektr RC avtomashinasida maksimal gaz kelebeğinin mikrosaniyasida davomiyligi #define LOWER_THROTTLE 1000 // bu elektr RC avtomobilidagi minimal gaz kelebeğinin mikrosaniyasida davomiyligi #define DEADZONE 50 // bu gazni o'chirish zonasi. Umumiy o'lim zonasi bundan ikki baravar ko'p. #include #define STEPS 21 // inqilob uchun qadam (315 ° bilan cheklangan) Tezlik o'lchagichining maksimal harakatlanishini sozlash uchun buni o'zgartiring. #define COIL1 3 // Bobin pinlari. ATTiny qadam uchun 0, 1, 3, 4 pinlaridan foydalanadi. 2 -pin - bu uzilishlarni boshqaradigan yagona pin, shuning uchun u kirish bo'lishi kerak. #define COIL2 4 // Agar qadam dvigateli to'g'ri ishlamasa, ularni o'zgartirishga harakat qiling. #define COIL3 0 #define COIL4 1 // stepper sinfining misolini yarating: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Qadamdagi joylashuv (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // bo'sh turgan gazni qayta o'rnatish vaqti int Resetval = 0; uchuvchi int ThrottleIn = LOWER_THROTTLE; uchuvchan imzosiz uzoq StartPeriod = 0; // uzilishda // biz alohida o'zgaruvchining o'rniga nThrottleIn = 0 dan foydalanishimiz mumkin edi, lekin bizda yangi signal borligini ko'rsatish uchun bNewThrottleSignal yordamida // bu birinchi misol uchun aniqroq void setup () {// Arduinoga ayting biz calcInput funktsiyasini INT0 (raqamli pin 2) HIGHdan LOW yoki LOWdan HIGHgacha o'zgarganda chaqirishini xohlaymiz // bu o'zgarishlarni ushlab turish, kirish pulsining qancha vaqtga biriktirilganligini hisoblash imkonini beradiInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); step.setSpeed (50); // vosita tezligini 30 aylanish tezligiga (taxminan 360 PPS) o'rnating. step.step (QADAMLAR * 2); // Joylashuvni asl holatiga qaytarish (soat yo'nalishi bo'yicha teskari yo'nalishda X qadam). } 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); Qayta tiklash = 0; } // Teskari xaritalash boshqa, agar (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Qayta tiklash = 0; } // "ThrottleInAvg> UPPER_THROTTLE" {SPEED = 255; Qayta tiklash = 0; } // Diapazondan pastroq, agar boshqa (ThrottleInAvg Resetcounter) {stepper.step (4); // Men RC signali uzoq vaqt davomida qulflangan zonada bo'lsa, men qadamchiga o'zini qayta tiklashni aytishga harakat qilaman. Kodning bu qismi haqiqatan ham ishlayotganiga ishonchim komil emas. }} int val = SPEED; // potentsiometr qiymatini oling (diapazon 0-1023) val = map (val, 0, 255, 0, STEPS * 0,75); // qadam oralig'idagi pot potini xaritasi. if (abs (val - pos)> 2) {// agar farq 2 bosqichdan katta bo'lsa. agar ((val - pos)> 0) {step.step (-1); // bir qadam chapga siljiting. pos ++; } agar ((val - pos) <0) {step.step (1); // bir qadam o'ngga siljiting. pos-; }} // kechiktirish (10); } void calcInput () {// agar pin baland bo'lsa, bu uzilishning boshlanishi, agar (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// vaqtni mikrosxemalar yordamida olish - bizning kod juda band bo'lganda, bu noto'g'ri bo'ladi, lekin joriy dastur uchun // tushunilishi oson va juda yaxshi ishlaydi StartPeriod = micros (); } else {// agar pim past bo'lsa, u pulsning tushayotgan qirrasi, shuning uchun biz hozirda boshlanish vaqtini ulStartPeriodni micros () bilan qaytarilgan vaqtdan // boshlanish vaqtini olib tashlash orqali pulsning davomiyligini hisoblashimiz mumkin (), agar (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

ATTiny85 dasturlash haqida qo'shimcha ma'lumot olish uchun bu erga qarang:

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

3 -qadam: Uskuna

Uskuna
Uskuna
Uskuna
Uskuna
Uskuna
Uskuna

Zanjirni qurish uchun sxemaga qarang. Buni qanday yig'ish sizga bog'liq, lekin men elektron kartani prototiplash va chipni rozetkaga o'rnatish uchun ishlatiladigan bir nechta lenta/perfartdan foydalanishni taklif qilaman.

C1 = 100nF

R1 = 10kΩ

Kondansatör eng samarali bo'lishi uchun chipga iloji boricha yaqinroq o'rnatilishi kerak.

Dvigatelga emallangan simlarni lehimlashda, juda ehtiyot bo'ling, chunki motorlar terminallari uzilib, motorga g'altakning simini uzib qo'yishni yaxshi ko'radilar. Buni tuzatish uchun simlarni lehimlash, so'ngra bo'g'imning ustiga 2 qismli epoksiyaning katta bo'lagini qo'yish, davolashga ruxsat berish, so'ngra simlarni bir-biriga burish yaxshi echim bo'ladi. Bu alohida terminal bo'g'inlaridagi stressni kamaytiradi va ularning uzilishini to'xtatishi kerak. Agar buni qilmasangiz, ular hech bo'lmaganda qulay vaqtda uzilib ketadi, kafolatlangan.

Agar siz pim konnektori ulagichini yasasangiz va pimlarni shunday o'rnating: [Ca1, Cb1, Ca2, Cb2] Ca1 bilan A bobini, sim 1 va hokazo. Bu vilkasini almashtirish orqali o'lchagichning aylanish yo'nalishini o'zgartirishga imkon beradi. atrofida.

Nolinchi pozitsiyani kalibrlash uchun o'lchagichga to'xtash joyi kerak bo'ladi. Iloji bo'lsa, ignani metalldan yasashni tavsiya qilaman. Bu uning to'xtash joyiga tegib turganda to'xtashini to'xtatadi. Ignani yaxshi holatga keltirishning bir usuli-bu ignani o'qga vaqtincha yopishtirish, modulni quvvatlantirish, uni dam olishiga ruxsat berish, so'ngra ignani o'qga qo'yib, aksga qayta yopishtirish. to'xtatish. Bu ignani dvigatelning magnit tiqilishi bilan tekislaydi va sizning ignangiz har doim to'xtash joyiga kelib turishini ta'minlaydi.

4 -qadam: epilog

Umid qilamanki, sizga bu qisqa ko'rsatma yoqdi va uni foydali deb topdingiz. Agar siz ulardan birini qursangiz, menga xabar bering!

Omad!

Tavsiya: