Poceni kronograf za zračno puško


V tem članku si bomo ogledali, kako lahko naredite preprost kronograf iz poceni in cenovno dostopnih delov. Naprava je potrebna za merjenje hitrosti krogle iz puške. Te številke so potrebne za določitev stanja puške, saj se sčasoma nekatere pnevmatske komponente obrabijo in jih je treba zamenjati.

Pripravimo potrebne materiale in orodja:
- kitajski Digispark (ob nakupu je stal 80 rubljev);
- segmentni zaslon na TM1637 (pri nakupu je stal 90 rubljev);
- infrardeče LED in fototranzistorji (10 parov) - cena je bila 110 rubljev;
- sto uporov 220 ohmov stane 70 rubljev, vendar bosta potrebna le dva.

To je vse, to je celoten seznam predmetov, ki jih boste morali kupiti. Mimogrede, upore lahko najdemo tudi v starih gospodinjskih aparatih. Lahko stavite več na nominalno vrednost, vendar ne manj. Posledično lahko dobite 350 rubljev, vendar to ni tako veliko, glede na to, da bo tovarniški kronograf stal vsaj 1000 rubljev, montaža pa je veliko slabša od naše domače.

Med drugim se morate založiti s podrobnostmi, kot so:
- žice;
- najmanj 10 cm dolg kos cevi (primeren je plastični vodovod);
- vse za spajkanje;
- multimeter (neobvezno).


Prve tri opisane podrobnosti imajo svoje nianse, zato je treba vsako od njih obravnavati ločeno.

Digispark
Ta izdelek je miniaturna plošča, ki je združljiva z Arduinom in ima na krovu ATtiny85. Kako povezati ta element z Arduino IDE, lahko preberete naprej, tam lahko tudi prenesete gonilnike zanj.
Ta plošča ima več možnosti, ena uporablja microUSB, druga pa je opremljena z USB konektorjem, ki je ožičen kar na plošči. Zaradi dejstva, da domači izdelek nima individualnega napajanja, je avtor izbral prvo različico plošče. Če baterijo ali akumulator vgradite v domači izdelek, bo to močno povečalo njegovo ceno in ne bo močno vplivalo na praktičnost. In skoraj vsak ima kabel za polnjenje mobilnika in Power bank.


Kar zadeva značilnosti, so podobne ATtiny85, tukaj so njegove zmogljivosti več kot dovolj. Mikrokrmilnik v kronografu le preverja senzorje in upravlja zaslon.
Če še nikoli niste srečali Digispark, si lahko ogledate najpomembnejše nianse v tabeli.


Pomembno je upoštevati dejstvo, da je številčenje pinov za funkcijo analogRead() drugačno. In na tretjem zatiču je vlečni upor z nominalno vrednostjo 1,5 kOhm, saj se uporablja v USB.

Nekaj ​​besed o zaslonu
Lahko se uporabi kakršnakoli izložba za domače izdelke, vendar se je avtorica odločila za poceni možnost. Da bo naprava še cenejša, se lahko zaslon popolnoma opusti. Podatki se lahko preprosto prenesejo v računalnik prek kabla. Tukaj bo potrebno. Obravnavani zaslon je kopija zaslona.
Kako izgleda zaslon spredaj in zadaj, si lahko ogledate na fotografiji.




Ker so razdalje med ciframi enake, se z izklopljenim dvopičjem števke berejo brez težav. Standardna knjižnica lahko izpiše številke v območju 0-9. črke v območju a-f, obstaja pa tudi možnost spreminjanja svetlosti celotnega zaslona. Številčne vrednosti lahko nastavite s funkcijo display(int 0-3, int 0-15).


Kako uporabljati zaslon

// 1. Deklarirajte datoteko glave
#vključi
// 2. Nastavite zatiče
#define CLK 0
#define DIO 1
// 3. Deklarirajte predmet
TM1637 tm1637(CLK, DIO);
// 4. Inicializiraj
void setup()(
tm1637.init();
tm1637.set(6); // Svetlost
}
// 5. Uporaba
void loop() (
// Prikaz števila x na zaslonu
int x = 1234;
tm1637.display(0, x / 1000);
tm1637.display(1, x / 100 % 10);
tm1637.display(2, x / 10% 10);
tm1637.display(3, x % 10);
zamuda (500);
}

Če poskušate preseči vrednosti, bo na zaslonu prikazana zmeda, ki poleg vsega drugega ni statična. Zato se boste morali za prikaz posebnih znakov, kot so stopinje, minusi itd., poigrati.


Avtor je želel, da bi prikaz prikazoval končno energijo leta krogle, ki bi bila izračunana glede na hitrost krogle in njeno maso. Kot je bilo načrtovano, bi morale biti vrednosti prikazane zaporedno, in da bi razumeli, kje je katera, jih je treba nekako označiti, na primer s črko "J". V skrajnem primeru lahko preprosto uporabite dvopičje, vendar avtorju to ni ustrezalo in prišel je v knjižnico. Posledično je bila na podlagi funkcije prikaza izdelana funkcija setSegments(byte addr, byte data), ki osvetli segmente, kodirane v podatkih v števki s številko addr:


{
tm1637.start();
tm1637.stop();
tm1637.start();
tm1637.writeByte(addr|0xc0);
tm1637.writeByte(podatki);
tm1637.stop();
tm1637.start();
tm1637.stop();
}

Takšni segmenti so kodirani precej preprosto, nizki podatkovni bit je odgovoren za zgornji segment, nato pa v smeri urinega kazalca, 7. bit je odgovoren za srednji segment. Znak "1", ko je kodiran, izgleda kot 0b00000110. Osmi najpomembnejši bit je odgovoren za dvopičje, uporablja se v drugi števki, pri vseh ostalih pa se ne upošteva. Kasneje je avtor avtomatiziral postopek pridobivanja kod s pomočjo Excela.


Kaj se je na koncu zgodilo, si lahko ogledate na fotografiji




#vključi
#define CLK 0
#define DIO 1
TM1637 tm1637(CLK, DIO);

void setSegments(bajt naslov, bajt podatkov)
{
tm1637.start();
tm1637.writeByte(ADDR_FIXED);
tm1637.stop();
tm1637.start();
tm1637.writeByte(addr|0xc0);
tm1637.writeByte(podatki);
tm1637.stop();
tm1637.start();
tm1637.writeByte(tm1637.Cmd_DispCtrl);
tm1637.stop();
}

void setup()(
tm1637.init();
tm1637.set(6);
}

void loop() (
// Izhod Pozdravljeni
setSegments(0, 118);
setSegments(1, 121);
setSegments(2, 54);
setSegments(3, 63);
zamuda (500);
}



In končno, senzorji

Natančnih informacij o senzorjih ni, znano je le, da imajo valovno dolžino 940 nm. Med poskusi je bilo ugotovljeno, da senzorji ne morejo prenesti toka, večjega od 40 mA. Napajalna napetost ne sme biti višja od 3,3 V. Kar zadeva fototranzistor, ima rahlo prozorno ohišje in reagira na svetlobo.


Začnimo sestavljati in postavljati domači izdelek:

Prvi korak. Montaža

Vse je sestavljeno po zelo preprosti shemi. Od vseh zatičev bodo potrebni samo P0, P1 in P2. Prva dva se uporabljata za prikaz, P2 pa je potreben za delovanje senzorjev.
Kot lahko vidite, se en upor uporablja za omejevanje toka za LED, medtem ko drugi potegne P2 na maso. Zaradi dejstva, da so fototranzistorji povezani vzporedno, bo napetost na P2 padla, ko gre krogla pred kateri koli optični sklopnik. Če želite določiti hitrost krogle, morate poznati razdaljo med senzorji, izmeriti dva napetostna sunka in določiti čas, v katerem sta se zgodila.
Ker bo uporabljen samo en keglj, ni pomembno, s katere strani streljati. Fototranzistorji bodo vseeno opazili kroglo.










Vse je sestavljeno iz detajlov, ki se vidijo na fotografiji. Da bi vse sestavil, se je avtor odločil uporabiti mizo. Nato je bila celotna konstrukcija za trdnost napolnjena s talilnim lepilom. Senzorji so nameščeni na cevi in ​​nanje prispajkane žice.
Da bi preprečil utripanje diod, ko jih napaja powerbank, je avtor vzporedno z LED diodami namestil elektrolit 100 uF.




Pomembno je tudi omeniti, da je bil pin P2 izbran z razlogom, dejstvo je, da se P3 in P4 uporabljata v USB-ju, tako da je zdaj s pomočjo P2 mogoče utripati domači izdelek po montaži.
P2 je tudi analogni vhod, zato ni potrebe po uporabi prekinitve. Lahko preprosto izmerite odčitke med trenutno in prejšnjo vrednostjo, če razlika postane nad določenim pragom, potem v tistem trenutku krogla samo preleti optični sklopnik.

Drugi korak. Vdelana programska oprema

Prescaler je frekvenčni delilnik, v standardnih primerih v ploščah, kot je Arduino, je 128. Ta številka vpliva na to, kako pogosto se vpraša ADC. To pomeni, da za privzetih 16 MHz pride 16/128 = 125 kHz. Vsaka digitalizacija je sestavljena iz 13 operacij, tako da je pin mogoče vprašati z največjo hitrostjo 9600 kHz. V praksi to ni več kot 7 kHz. Posledično je interval med meritvami 120 μs, kar je predolgo za domače delo. Če krogla leti s hitrostjo 300 m / s, bo v tem času preletela razdaljo 3,6 cm, kar pomeni, da je krmilnik preprosto ne bo mogel opaziti. Da vse deluje pravilno, mora biti interval med meritvami vsaj 20 µs. Če želite to narediti, mora biti vrednost delitelja enaka 16. Avtor je naredil delitelj 8, kako to narediti si lahko ogledate spodaj.


#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

void setup()(
sbi(ADCSRA,ADPS2);
cbi(ADCSRA,ADPS1);
cbi(ADCSRA,ADPS0);
...
}


Kaj se je zgodilo med poskusom, si lahko ogledate na fotografiji

Logika vdelane programske opreme ima več stopenj:

Merjenje razlike med vrednostmi na zatiču pred in po;
- če razlika preseže prag, se zanka zapusti in trenutni čas se shrani (micros());
- drugi cikel deluje podobno kot prvi in ​​ima v ciklu števec časa;
- če je števec dosegel določeno vrednost, se pojavi sporočilo o napaki in prehod v začetno stanje. V tem primeru cikel ne gre v večnost, če naboja nenadoma ne ujame drugi senzor;
- če števec ni presežen in je razlika v vrednosti večja od praga, se meri trenutni čas (micros());
- zdaj lahko na podlagi razlike v času in razdalji med senzorji izračunate hitrost krogle in prikažete informacije na zaslonu. No, potem se vse začne znova.

Končna faza. Testiranje
Če je vse opravljeno pravilno, bo naprava delovala brez težav. Edina težava je slab odziv na fluorescentno in LED osvetlitev, s frekvenco pulziranja 40 kHz. V tem primeru lahko pride do napak v napravi.

Domača dela v treh načinih:

Po vklopu sledi pozdrav, nato pa se zaslon napolni s črtami, kar pomeni, da naprava čaka na strel


Če pride do napak, se prikaže sporočilo "Err", nato pa se vklopi stanje pripravljenosti.


No, potem pride omejitev hitrosti


Takoj po strelu bo naprava prikazala hitrost krogle (označeno s simbolom n), nato pa se bo prikazal podatek o energiji krogle (simbol J). Pri prikazu joulov je prikazano tudi dvopičje.
Podobni članki

2022 videointercoms.ru. Mojster - Gospodinjski aparati. Razsvetljava. Obdelava kovin. Noži. Elektrika.