Turinys:

Veikiantis RC automobilio spidometras: 4 žingsniai (su nuotraukomis)
Veikiantis RC automobilio spidometras: 4 žingsniai (su nuotraukomis)

Video: Veikiantis RC automobilio spidometras: 4 žingsniai (su nuotraukomis)

Video: Veikiantis RC automobilio spidometras: 4 žingsniai (su nuotraukomis)
Video: #ваз #ваз2112 #rc #разгон #0-100 #priora #4x4 2024, Lapkritis
Anonim
Veikiantis RC automobilio spidometras
Veikiantis RC automobilio spidometras

Tai trumpas projektas, kurį sukūriau kaip didesnio lengvojo „Land Rover“RC konstrukcijos dalį. Nusprendžiau, kad man patinka, kad prietaisų skydelyje yra veikiantis spidometras, bet žinojau, kad servo jo nesupjaus. Buvo tik vienas pagrįstas pasirinkimas: įdiegti arduino!

Pradžiai šiek tiek žinių … Nesu kodavimo ar elektronikos žmogus. Aš vis dar galvoju apie elektrą vandens srauto atžvilgiu ir esu šiek tiek pasipiktinęs rezistoriais. Tai reiškia, kad jei net aš sugebėjau padaryti šį darbą, tai turėtumėte sugebėti ir jūs!

DALIŲ SĄRAŠAS:

Mikrokontroleris: naudojau „ATTiny85“lustą, kurio kiekvienas kainavo apie 1 svarą.

Mikrokontrolerio programuotojas: Norėdami gauti kodą į lustą, jums reikia būdo jį užprogramuoti. Su įprastu „arduino“tai tik USB kabelis, tačiau „ATTiny“mikroschemai jums reikia kažko papildomo. Norėdami tai padaryti, galite naudoti kitą arduino arba, kaip ir aš, galite naudoti „Tiny AVR“programuotoją iš „Sparkfun“.

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

Aš rekomenduočiau tai, nes bandžiau juos programuoti įvairiais metodais ir šis yra lengviausias. Lenta yra šiek tiek brangi, tačiau gera investicija, jei atliekate daug ATTiny projektų.

8 kontaktų drožlių lizdas: Jei įdėsite mikroschemą į lizdą, o ne tiesiogiai lituosite, galite sau leisti surinkimo klaidų. Kalbama iš patirties - niekas nenori išvirti lustų, kad juos perprogramuotų.

Kondensatorius: naudojamas 100nF atjungimo kondensatorius (kodas 104). Nelabai suprantu kodėl, bet skaičiau, kad atsiejantys kondensatoriai yra svarbūs internete, todėl tai turi būti tiesa …

Rezistorius: 10kΩ rezistorius naudojamas norint nuleisti liniją į arduino. Vėlgi, dar viena elektronikos paslaptis.

Perfboard/Stripboard: tam tikra grindjuostė, ant kurios galima surinkti grandinę.

Vyniojimo viela: įprasta apvalkalo viela yra per stora, kad lituotų ant variklio. Naudojant smulkią emaliuotą vielą, sumažės variklio gnybtų įtempiai ir jūsų gyvenimas bus daug lengvesnis.

Servo viela: trijų laidų juostelė, besibaigianti 3 kontaktų JR kištuke. Savo gavau iš sudegusio servo, kurį „modifikavau“.

Žingsninis variklis: Aš naudoju 6 mm bipolinį „Nidec“žingsninį variklį. Bet koks mažas žingsnelis turėtų veikti, nors ir nedideli, nes žingsnelis varomas tiesiai iš „Arduino“.

Antraštės kaiščiai: Tai nėra būtina, tačiau jei prijungsite žingsninį įrenginį prie 4 kaiščių ir prijungsite lizdą prie grandinės, galite lengvai atjungti prietaisų skydelį, kad būtų lengviau įdiegti.

Kompiuteris: Norėdami užprogramuoti lentą, jums reikės kompiuterio. Galbūt su „Arduino IDE“. Ir galbūt USB kabelis. Jei jis taip pat turi maitinimo kabelį, tada dar geriau.

1 žingsnis: Sistema

Pagrindinis mano sukurtos sistemos kontūras buvo metodas, pagal kurį impulsinio pločio moduliacijos (PWM) signalas, gaunamas iš RC imtuvo, per ATTiny 85 mikrovaldiklį (uC) paverčiamas žingsninio variklio judesiu.

Čia yra PWM signalų ir RC šaltinis, tačiau norint tai atkartoti, jums to griežtai nereikia suprasti.

en.wikipedia.org/wiki/Servo_control

„ATTiny“yra mano mėgstamiausias „Arduino“skonis, nes jis yra mažas ir vis dar pakankamai įvesties/išvesties kaiščių pagrindiniams dalykams atlikti, todėl puikiai tinka mažiems modeliams ir RC projektams. Pagrindinis „ATTiny“trūkumas yra tas, kad norint jį užprogramuoti reikia šiek tiek daugiau sąrankos, tačiau jį sukūrę jie yra tokie pigūs, kad galite nusipirkti jų krūvas įvairiems projektams.

Spidometro ratuko dydis yra per mažas, kad būtų galima su reduktoriniu varikliu su grįžtamuoju ryšiu, todėl norint gauti proporcingą atsaką, reikėjo naudoti žingsninį variklį. Žingsninis variklis yra variklis, kuris perkeliamas atskirais kiekiais (arba žingsniais …!), Todėl idealiai tinka tokiai sistemai, kurioje nėra grįžtamojo ryšio. Vienintelis įspėjimas yra tas, kad „žingsniai“sukels judesio trūkčiojimą, o ne sklandų. Jei gausite žingsnelį su pakankamai žingsnių per sukimąsi, to nepastebėsite, tačiau jei aš naudoju žingsnį, kurį naudojau šiame projekte, kai sukama tik apie 20 žingsnių visą sukimąsi, kampo šuolis yra gana blogas.

Įjungus sistemą, sistema du kartus pasuks žingsnelį atgal, kad adata būtų nulinė. Spidometrui reikia atraminio kaiščio ten, kur norite, kad būtų nulis, kitaip jis suksis amžinai. Tada jis susieja priekinius ir atbulinius PWM signalus su nustatytu variklio žingsnių skaičiumi. Lengva, tiesa …?

2 žingsnis: programinė įranga

Atsisakymas: nesu programuotojas. Šiam projektui esu skaitmeninis daktaro Frankenšteino atitikmuo, surenkantis kažką iš įvairių rastų kodo bitų.

Taigi nuoširdžiausiai dėkoju Duane B, kuris sukūrė kodą RC signalams interpretuoti:

rcarduino.blogspot.com/

Ir Ardunautui, kuris sukūrė analoginio matuoklio paleidimo kodą:

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

Ir abiems nuoširdžiausiai atsiprašau už tai, ką padariau su jūsų kodu.

Dabar tai ne taip, štai ką įkelti į „ATTiny“:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - naudokite nutraukimo numerį priedeInterrupt #define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - naudokite PIN kodą skaitmeniniame skaityme #define NEUTRAL_THROTTT elektrinio RC automobilio neutralaus droselio droselis #define UPPER_THROTTLE 2000 // tai yra elektrinio RC automobilio maksimalaus droselio trukmė mikrosekundėmis #define LOWER_THROTTLE 1000 // tai yra elektrinio RC automobilio minimalios droselio trukmė mikrosekundėmis #define DEADZONE 50 // tai droselio droselio zona. Bendra mirties zona yra dvigubai didesnė. #include #define STEPS 21 // žingsniai per apsisukimą (apribota iki 315 °) Pakeiskite tai, kad sureguliuotumėte maksimalią spidometro eigą. #define COIL1 3 // Ritės kaiščiai. „ATTiny“naudoja žingsnius 0, 1, 3, 4 kaiščius. 2 kaištis yra vienintelis kaištis, galintis valdyti pertraukimus, todėl jis turi būti įvestis. #define COIL2 4 // Jei žingsninis variklis neveikia tinkamai, pabandykite juos pakeisti. #define COIL3 0 #define COIL4 1 // sukurti stepper klasės egzempliorių: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Padėtis žingsniais (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; plūdės Resetcounter = 10; // laikas atstatyti esant tuščiosios eigos droseliui int Resetval = 0; nepastovus int ThrottleIn = LOWER_THROTTLE; nepastovus nepasirašytas ilgas StartPeriod = 0; // nustatyti pertraukoje // vietoj atskiro kintamojo galėtume naudoti ciklą nThrottleIn = 0, bet naudodami bNewThrottleSignal, kad nurodytume, jog turime naują signalą // yra aiškiau dėl šio pirmojo pavyzdžio void setup () {// pasakykite „Arduino“norime, kad funkcija calcInput būtų iškviesta kiekvieną kartą, kai INT0 (2 skaitmeninis kaištis) pasikeičia iš HIGH į LOW arba LOW į HIGH // šių pakeitimų fiksavimas leis mums apskaičiuoti, kiek laiko įvesties impulsas yra prijungtasInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // nustatykite variklio greitį iki 30 aps/ min (maždaug 360 PPS). stepper.step (ŽINGSNIAI * 2); // Atstatyti padėtį (X žingsniai prieš laikrodžio rodyklę). } void loop () {Resetval = milis; (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Atstatymo laikas = 0; } // Atvirkštinis kartografavimas else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Atstatymo laikas = 0; } // Už diapazono ribų viršutinis if if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Atstatymo laikas = 0; } // Už diapazono žemesnis else if (ThrottleInAvg Resetcounter) {stepper.step (4); // Bandau liepti žingsniuotoją iš naujo nustatyti, jei RC signalas ilgą laiką yra negyvoje zonoje. Nežinote, ar ši kodo dalis iš tikrųjų veikia. }} int val = GREITIS; // gauti potenciometro reikšmę (diapazonas 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // žemėlapio puodo diapazonas žingsnių diapazone. if (abs (val - pos)> 2) {// jei skirtumas yra didesnis nei 2 žingsniai. if ((val - pos)> 0) {stepper.step (-1); // judėti vienu žingsniu į kairę. poz ++; } if ((val - pos) <0) {stepper.step (1); // judėti vienu žingsniu į dešinę. pos--; }} // uždelsimas (10); } void calcInput () {// jei smeigtukas yra aukštas, tai pertraukos pradžia, jei (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// gauti laiko naudojant mikroschemas - kai mūsų kodas bus labai užimtas, tai taps netikslu, bet dabartinei programai jos // lengva suprasti ir labai gerai veikia StartPeriod = micros (); } else {// jei smeigtukas yra žemas, tai krintantis pulso kraštas, todėl dabar galime apskaičiuoti impulsų trukmę, atimdami // pradžios laiką ulStartPeriod iš dabartinio laiko, kurį grąžina micros () if (StartPeriod) {ThrottleIn = (int) (micros () - „StartPeriod“); StartPeriod = 0; }}}

Norėdami gauti daugiau informacijos apie ATTiny85 programavimą, skaitykite čia:

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

3 žingsnis: Aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra

Žiūrėkite grandinės schemą, kaip sukurti grandinę. Kaip jį surinkti, priklauso nuo jūsų, bet aš siūlau naudoti šiek tiek juostelių/perforuotų plokščių, naudojamų plokštės prototipams kurti, ir sumontuoti mikroschemą į lizdą.

C1 = 100 nF

R1 = 10 kΩ

Kondensatorius turi būti sumontuotas kuo arčiau mikroschemos, kad būtų efektyviausias.

Lituodami emaliuotus laidus prie variklio, būkite labai atsargūs, nes variklių gnybtai mėgsta atkabinti ir nutraukti ritės laidą prie variklio. Norėdami tai ištaisyti, geras sprendimas yra prilituoti laidus ir uždėti didelę 2 dalių epoksidinės dėmės dalį ant jungties, leisti jai sukietėti, tada susukti laidus. Tai sumažina atskirų gnybtų sąnarių įtampą ir turėtų sustabdyti jų spragtelėjimą. Jei to nepadarysite, jie išsijungs mažiausiu patogiu laiku, garantuotai.

Jei padarysite antgalio kaiščio jungtį ir nustatysite kaiščius taip: [Ca1, Cb1, Ca2, Cb2], o Ca1 reiškia ritę A, laidą 1 ir tt. Tai leidžia pakeisti matuoklio sukimosi kryptį keičiant kištuką aplinkui.

Manometrui reikės galinio sustojimo, kad būtų galima sukalibruoti nulinę padėtį. Jei įmanoma, rekomenduoju adatą pagaminti iš metalo. Tai sustabdo jo lankstymą, kai jis pasiekia galinę stotelę. Būdas, kaip adatą paversti gera padėtimi, yra laikinai priklijuoti adatą prie ašies, įjungti modulį, leisti jam sustingti, tada nuimti ir vėl priklijuoti adatą ant ašies, adatą atremiant į sustojimas. Tai suderina adatą su magnetiniu variklio užsikimšimu ir užtikrina, kad adata visada atsiremtų į galinę atramą.

4 žingsnis: epilogas

Tikimės, kad jums patiko šis trumpas pamokymas ir tai buvo naudinga. Jei pastatysite vieną iš jų, praneškite man!

Sėkmės!

Rekomenduojamas: