Kazalo:

Delovni hitrostni merilnik hitrosti avtomobila: 4 koraki (s slikami)
Delovni hitrostni merilnik hitrosti avtomobila: 4 koraki (s slikami)

Video: Delovni hitrostni merilnik hitrosti avtomobila: 4 koraki (s slikami)

Video: Delovni hitrostni merilnik hitrosti avtomobila: 4 koraki (s slikami)
Video: Часть 4 — Аудиокнига «Бэббит» Синклера Льюиса (главы 16–22) 2024, September
Anonim
Delovni RC avtomobilski merilnik hitrosti
Delovni RC avtomobilski merilnik hitrosti

To je kratek projekt, ki sem ga ustvaril kot del večje RC konstrukcije lahkega Land Roverja. Odločil sem se, da mi je všeč, da imam na armaturni plošči delujoč merilnik hitrosti, vendar sem vedel, da ga servo ne bo prerezal. Obstajala je le ena razumna možnost: uvesti arduino!

Za začetek malo ozadja … Nisem oseba za kodiranje ali elektroniko. Še vedno razmišljam o elektriki v smislu pretoka vode in me upori nekoliko zmotijo. Če pa sem to zmogel celo jaz, bi morali biti sposobni tudi vi!

SEZNAM DELOV:

Mikrokrmilnik: Uporabil sem čip ATTiny85, ki stane približno 1 £.

Programer za mikrokrmilnik: Če želite kodo dobiti na čip, potrebujete način za njeno programiranje. Z običajnim arduinom je to le kabel USB, za čip ATTiny pa potrebujete nekaj dodatnega. Za to lahko uporabite drug arduino ali, tako kot jaz, lahko uporabite programerček Tiny AVR iz Sparkfun.

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

Priporočam to, saj sem jih poskusil programirati z različnimi metodami in ta je najlažja. Plošča je nekoliko dražja, vendar dobra naložba, če delate veliko projektov ATTiny.

8 -polna vtičnica za čipe: Če namestite čip v vtičnico in ga ne spajkate neposredno, si lahko pri montaži privoščite nekaj napak. Izrečeno iz izkušenj - nihče ne želi raztapljati čipov, da bi jih ponovno programiral.

Kondenzator: Uporablja se ločilni kondenzator 100nF (koda 104). Ne razumem čisto zakaj, vendar sem prebral, da je ločevanje kondenzatorjev na internetu pomembno, zato mora biti res …

Upor: 10kΩ upor se uporablja za poteg navzdol po arduinu. Spet še ena skrivnost elektronike.

Perfboard/Stripboard: Nekaj podstavka, na katerem lahko sestavite vezje.

Navojna žica: Navadna obložena žica je predebela, da bi jo spajkali na motor. Uporaba fine emajlirane žice bo zmanjšala obremenitve na sponkah motorja in vam olajšala življenje.

Servo žica: Tri žični trak, ki se zaključi v 3-polnem ženskem vtiču JR. Svoje sem dobil iz pregorelega servomotorja, ki sem ga 'spreminjal'.

Koračni motor: Uporabil sem 6 -milimetrski bipolarni koračni motor Nidec. Vsak majhen stepper bi moral delovati, čeprav naj bo majhen, saj se stepper poganja neposredno iz Arduina.

Zatiči glave: To ni nujno, če pa steper priključite na 4 zatiče glave in vtaknete vtičnico v vezje, lahko preprosto odstranite armaturno ploščo za lažjo namestitev.

Računalnik: Za programiranje plošče potrebujete računalnik. Morda z Arduino IDE. In morda kabel USB. Če ima tudi napajalni kabel, potem še bolje.

Korak: Sistem

Osnovni oris sistema, ki sem ga ustvaril, je bila metoda, pri kateri se signal pulzne širinske modulacije (PWM), ki prihaja iz RC sprejemnika, pretvori v pometanje koračnega motorja prek mikrokrmilnika ATTiny 85 (uC).

Tu je vir o signalih PWM in RC, vendar za ponovitev tega ni nujno, da ga razumete.

en.wikipedia.org/wiki/Servo_control

ATTiny je moj najljubši okus Arduina, ker je majhen in ima še vedno dovolj V/I zatičev za osnovne stvari, zato se popolnoma prilega majhnim modelom in projektom RC. Glavna pomanjkljivost ATTinyja je, da za programiranje potrebuje nekoliko več nastavitev, a ko ga nastavite, so tako poceni, da jih lahko kupite za vse vrste projektov.

Velikost številčnice merilnika hitrosti je premajhna, da bi imel gonilni motor s povratnimi informacijami, zato je bilo za sorazmeren odziv treba uporabiti koračni motor. Koračni motor je motor, ki se premika v diskretnih količinah (ali korakih …!), Zaradi česar je idealen za tak sistem brez povratnih informacij. Edino opozorilo je, da bodo "koraki" povzročili, da bo nastalo gibanje sunkovito in ne gladko. Če dobite stepper z dovolj koraki na rotacijo, to ni opazno, toda s korakom, ki sem ga uporabil v tem projektu, ki ima le 20 ali toliko korakov v polni rotaciji, je kotni skok precej slab.

Sistem bo ob vklopu korakal za dva vrtljaja, tako da bo iglo nič. Merilnik hitrosti potrebuje počivalni zatič, kjer želite, da je oznaka nič, sicer se bo vrtel za vedno. Nato preslika signal PWM naprej in nazaj na nastavljeno število korakov motorja. Enostavno, kajne …?

2. korak: programska oprema

Izjava o omejitvi odgovornosti: Nisem programer. Za ta projekt sem digitalni ekvivalent dr. Frankensteina, ki sestavim nekaj, kar dela iz različnih najdenih kodov kode.

Zato se iskreno zahvaljujem Duaneu B, ki je naredil kodo za razlago RC signalov:

rcarduino.blogspot.com/

In Ardunautu, ki je naredil kodo za izvajanje koraka kot analogni merilnik:

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

In obema se iskreno opravičujem za to, kar sem storil vaši kodi.

Zdaj to ni možno, tukaj je tisto, kar lahko naložite v ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - uporabite številko prekinitve v attachInterrupt #definirajte THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - uporabite številko PIN v digitalnem branju #define NEUTRAL_THROTTLE to je 1500 nevtralnega plina na električnem avtomobilu RC #define UPPER_THROTTLE 2000 // to je trajanje največjega plina v mikrosekundah na električnem avtomobilu RC #define LOWER_THROTTLE 1000 // to je trajanje nminimum plina na električnem avtomobilu RC v mikrosekundah #define DEADZONE 50 // to je mrtva cona za plin. Skupno mrtvo območje se podvoji. #include #define STEPS 21 // koraki na vrtljaj (omejeno na 315 °) To spremenite, da prilagodite največji hod merilnika hitrosti. #define COIL1 3 // Zatiči za tuljave. ATTiny za koračnike uporablja nožice 0, 1, 3, 4. Pin 2 je edini pin, ki lahko obvlada prekinitve, zato mora biti vhod. #define COIL2 4 // Poskusite jih spremeniti, če koračni motor ne deluje pravilno. #define COIL3 0 #define COIL4 1 // ustvarite primerek koračnega razreda: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Položaj v korakih (0-630) = (0 ° -315 °) int SPEED = 0; plovec ThrottleInAvg = 0; int MeasurementsToAverage = 60; števec ponastavitve float = 10; // čas za ponastavitev v prostem teku int Resetval = 0; hlapna int ThrottleIn = LOWER_THROTTLE; hlapno nepodpisano dolgo obdobje začetka = 0; // nastavljeno v prekinitvi // lahko bi uporabili nThrottleIn = 0 v zanki namesto ločene spremenljivke, vendar z uporabo bNewThrottleSignal za označbo, da imamo nov signal // je jasnejše za ta prvi primer void setup () {// povejte Arduinu želimo, da se funkcija calcInput pokliče vsakič, ko se INT0 (digitalni pin 2) spremeni iz HIGH v LOW ali LOW v HIGH // lovljenje teh sprememb nam bo omogočilo izračun, kako dolgo je vhodni impulz attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // nastavite hitrost motorja na 30 vrt/ min (približno 360 posnetkov na sekundo). stepper.step (KORAKI * 2); // Ponastavi položaj (X koraki v nasprotni smeri urinega kazalca). } void loop () {Resetval = millis; za (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Ponastavitev = 0; } // Obratno preslikavo else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Ponastavitev = 0; } // Zunaj zgornjega območja else else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Ponastavitev = 0; } // Izven dosega nižje else if ((ThrottleInAvg Resetcounter) {stepper.step (4); // Steperju poskušam povedati, da se ponastavi, če je signal daljinskega upravljalnika dolgo v mrtvem območju. Nisem prepričan, ali ta del kode dejansko deluje. }} int val = SPEED; // dobimo vrednost potenciometra (razpon 0-1023) val = map (val, 0, 255, 0, STEPS * 0,75); // preslikava obsega loncev v območju korakov. if (abs (val - pos)> 2) {// če je razlika večja od 2 korakov. če ((val - pos)> 0) {stepper.step (-1); // premaknite se za en korak v levo. pos ++; } if ((val - pos) <0) {stepper.step (1); // premaknite se za en korak v desno. pos--; }} // zakasnitev (10); } void calcInput () {// če je pin visok, se začne prekinitev if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// dobimo čas z mikroskopi - ko bo naša koda res zasedena, bo to nenatančno, za trenutno aplikacijo pa je // enostaven za razumevanje in deluje zelo dobro StartPeriod = micros (); } else {// če je pin nizek, je njegov padajoči rob impulza, tako da lahko zdaj izračunamo trajanje impulza tako, da odštejemo // začetni čas ulStartPeriod od trenutnega časa, ki ga vrne micros () if (StartPeriod) {ThrottleIn = (int) (micros () - začetno obdobje); StartPeriod = 0; }}}

Za več informacij o programiranju ATTiny85 si oglejte to:

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

3. korak: Strojna oprema

Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema

Za izgradnjo vezja glejte diagram vezja. Kako boste to sestavili, je odvisno od vas, vendar predlagam, da uporabite nekaj trakov/ploščic, ki se uporabljajo za izdelavo prototipov, in namestite čip v vtičnico.

C1 = 100 nF

R1 = 10 kΩ

Kondenzator je treba namestiti čim bližje čipu, da bo najbolj učinkovit.

Pri spajkanju emajliranih žic z motorjem bodite izjemno previdni, saj se sponke na motorjih radi odtrgajo in prerežejo žico tuljave na motor. Če želite to odpraviti, je dobra rešitev, da žice spajkate, nato pa na spoj položite velik blok 2-delnega epoksida, pustite, da se strdi, nato pa žice zvijte skupaj. To zmanjšuje obremenitev posameznih končnih spojev in bi jih moralo ustaviti. Če tega ne storite, bodo zagotovili v najmanj primernem času.

Če naredite konektor za zatič glave in nastavite zatiče tako: [Ca1, Cb1, Ca2, Cb2] s Ca1, ki stoji za tuljavo A, žica 1 itd. To vam omogoča, da spremenite smer vrtenja merilnika z zamenjavo vtikača okoli.

Merilnik bo potreboval končno zaporo, da bo umeril ničelni položaj. Priporočam, da iglo naredite iz kovine, če je mogoče. To prepreči upogibanje, ko zadene zadnjo zaporo. Način, da iglo pripeljete v dober položaj, je, da iglo začasno prilepite na os, vklopite modul, pustite, da se umiri, nato pa odstranite in znova prilepite iglo na os, pri čemer je igla naslonjena na endstop. To poravna iglo z magnetnim zobnikom motorja in zagotovi, da se mora igla vedno nasloniti na zadnjo zaporo.

4. korak: Epilog

Upajmo, da ste uživali v tem kratkem navodilu in se vam je zdelo koristno. Če zgradite enega od teh, mi to sporočite!

Vso srečo!

Priporočena: