Lacný chronograf vzduchovej pušky


V tomto článku sa pozrieme na to, ako si môžete vyrobiť jednoduchý chronograf z lacných a cenovo dostupných dielov. Zariadenie je potrebné na meranie rýchlosti strely z pušky. Tieto čísla sú potrebné na zistenie stavu pušky, pretože časom sa niektoré pneumatické komponenty opotrebujú a je potrebné ich vymeniť.

Pripravíme potrebné materiály a nástroje:
- Čínsky Digispark (v čase nákupu stál 80 rubľov);
- zobrazenie segmentového typu na TM1637 (stálo to 90 rubľov pri nákupe);
- infračervené LED a fototranzistory (10 párov) - cena bola 110 rubľov;
- sto 220 ohmových odporov stojí 70 rubľov, ale budú potrebné iba dva z nich.

To je všetko, toto je celý zoznam položiek, ktoré budete musieť kúpiť. Mimochodom, odpory možno nájsť aj v starých domácich spotrebičoch. Môžete staviť viac za nominálnu hodnotu, ale nie menej. Výsledkom je, že môžete stretnúť 350 rubľov, ale to nie je toľko, pretože továrenský chronograf bude stáť najmenej 1 000 rubľov a montáž je oveľa horšia ako naša domáca.

Okrem iného sa musíte zásobiť takými detailmi, ako sú:
- drôty;
- kus rúry s dĺžkou najmenej 10 cm (vhodná je plastová inštalácia);
- všetko na spájkovanie;
- multimeter (voliteľné).


Prvé tri opísané detaily majú svoje vlastné nuansy, takže každý z nich je potrebné zvážiť samostatne.

Digispark
Táto položka je miniatúrna doska, ktorá je kompatibilná s Arduino a má na doske ATtiny85. Ako prepojiť tento prvok s Arduino IDE sa dočítate ďalej, stiahnete si tam aj ovládače k ​​nemu.
Táto doska má niekoľko možností, jedna využíva microUSB a druhá je vybavená USB konektorom, ktorý je zapojený priamo na doske. Vzhľadom na to, že domáci produkt nemá individuálne napájanie, autor zvolil prvú verziu dosky. Ak do domáceho produktu nainštalujete batériu alebo akumulátor, výrazne to zvýši jeho cenu a praktickosť to výrazne neovplyvní. A takmer každý má kábel na nabíjanie mobilu a Power banky.


Pokiaľ ide o vlastnosti, sú podobné ako ATtiny85, tu sú jeho schopnosti viac než dostatočné. Mikrokontrolér v chronografe sa iba pýta na senzory a ovláda displej.
Ak ste sa ešte nikdy nestretli s Digisparkom, najdôležitejšie nuansy môžete vidieť v tabuľke.


Je dôležité vziať do úvahy skutočnosť, že číslovanie pinov pre funkciu analogRead() je odlišné. A na treťom pine je pull-up rezistor s nominálnou hodnotou 1,5 kOhm, keďže sa používa v USB.

Pár slov o displeji
Dá sa použiť akýkoľvek displej na domáce výrobky, ale autor sa rozhodol pre lacnú možnosť. Aby bolo zariadenie ešte lacnejšie, displej možno úplne opustiť. Dáta je možné jednoducho preniesť do počítača cez kábel. Tu to bude potrebné. Uvažovaný displej je kópiou displeja.
Ako vyzerá displej spredu a zozadu je vidieť na fotografii.




Keďže vzdialenosti medzi číslicami sú rovnaké, pri vypnutej dvojbodke sa číslice čítajú bez problémov. Štandardná knižnica je schopná vydávať čísla v rozsahu 0-9. písmen v rozsahu a-f a nechýba ani možnosť meniť jas celého displeja. Číselné hodnoty je možné nastaviť pomocou funkcie displeja (int 0-3, int 0-15).


Ako používať displej

// 1. Deklarujte hlavičkový súbor
#include
// 2. Nastavte kolíky
#define CLK 0
#define DIO 1
// 3. Deklarujte objekt
TM1637 tm1637(CLK, DIO);
// 4. Inicializujte
void setup()(
tm1637.init();
tm1637.set(6); // Jas
}
// 5. Použite
void loop() (
// Zobrazenie čísla x na displeji
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);
oneskorenie(500);
}

Ak sa pokúsite prekročiť hodnoty, na displeji sa zobrazí zmätok, ktorý, plus všetko ostatné, nie je statický. Preto, aby ste zobrazili špeciálne znaky, ako sú stupne, mínusy atď., budete musieť pohrať.


Autor chcel, aby displej zobrazoval hotovú energiu letu strely, ktorá by sa vypočítala v závislosti od rýchlosti strely a jej hmotnosti. Ako bolo naplánované, hodnoty by sa mali zobrazovať postupne a aby ste pochopili, kde ktorá z nich je, je potrebné ich nejako označiť, napríklad pomocou písmena „J“. Ako poslednú možnosť môžete jednoducho použiť dvojbodku, ale to autorovi nevyhovovalo a dostal sa do knižnice. Výsledkom bolo, že na základe funkcie displeja bola vytvorená funkcia setSegments(byte addr, byte data), ktorá rozsvieti segmenty zakódované v dátach v číslici s číslom addr:


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

Takéto segmenty sú kódované celkom jednoducho, nízky dátový bit je zodpovedný za horný segment a potom v smere hodinových ručičiek je 7. bit zodpovedný za stredný segment. Znak „1“ pri zakódovaní vyzerá ako 0b00000110. Ôsmy najvýznamnejší bit je zodpovedný za dvojbodku, používa sa v druhej číslici a vo všetkých ostatných sa ignoruje. Následne autor zautomatizoval proces získavania kódov pomocou Excelu.


Čo sa nakoniec stalo, môžete vidieť na fotografii




#include
#define CLK 0
#define DIO 1
TM1637 tm1637(CLK, DIO);

void setSegments(byte addr, byte data)
{
tm1637.start();
tm1637.writeByte(ADDR_FIXED);
tm1637.stop();
tm1637.start();
tm1637.writeByte(addr|0xc0);
tm1637.writeByte(data);
tm1637.stop();
tm1637.start();
tm1637.writeByte(tm1637.Cmd_DispCtrl);
tm1637.stop();
}

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

void loop() (
// Výstup Dobrý deň
setSegments(0, 118);
setSegments(1, 121);
setSegments(2, 54);
setSegments(3, 63);
oneskorenie(500);
}



A nakoniec senzory

Presné informácie o senzoroch nie sú uvedené, vie sa len, že majú vlnovú dĺžku 940 nm. Počas experimentov sa zistilo, že snímače nie sú schopné vydržať prúd väčší ako 40 mA. Čo sa týka napájacieho napätia, nemalo by byť vyššie ako 3,3V. Čo sa týka fototranzistora, ten má mierne priehľadné puzdro a reaguje na svetlo.


Začnime s montážou a nastavením domáceho produktu:

Krok jedna. zhromaždenie

Všetko je zostavené podľa veľmi jednoduchej schémy. Zo všetkých kolíkov budú potrebné iba P0, P1 a P2. Prvé dva sa používajú na displej a na fungovanie senzorov je potrebný P2.
Ako vidíte, jeden odpor sa používa na obmedzenie prúdu pre LED, zatiaľ čo druhý priťahuje P2 k zemi. Vzhľadom na to, že fototranzistory sú zapojené paralelne, pri prechode guľky pred ktorýmkoľvek optočlenom klesne napätie na P2. Na určenie rýchlosti strely potrebujete poznať vzdialenosť medzi senzormi, zmerať dva prepätia a určiť čas, počas ktorého k nim došlo.
Vzhľadom na to, že bude použitý len jeden kolík, je jedno, z ktorej strany sa strieľa. Fototranzistory si guľku aj tak všimnú.










Všetko je zostavené z detailov, ktoré je možné vidieť na fotke. Na zostavenie všetkého sa autor rozhodol použiť dosku na chlieb. Potom bola celá konštrukcia na pevnosť vyplnená tavným lepidlom. Snímače sú umiestnené na potrubí a sú k nim prispájkované vodiče.
Aby sa zabránilo pulzovaniu diód pri napájaní z powerbanky, autor nainštaloval paralelne s LED diódami 100 uF elektrolyt.




Je tiež dôležité poznamenať, že pin P2 bol vybraný z nejakého dôvodu, faktom je, že P3 a P4 sa používajú v USB, takže teraz pomocou P2 je možné po zložení flashovať domáci produkt.
P2 je tiež analógový vstup, takže nie je potrebné používať prerušenie. Môžete jednoducho zmerať hodnoty medzi súčasnou a predchádzajúcou hodnotou, ak rozdiel prekročí určitú hranicu, potom guľka v tom okamihu len prejde blízko optočlena.

Krok dva. Firmvér

Prescaler je frekvenčný delič, v štandardných prípadoch v doskách ako Arduino je to 128. Tento údaj ovplyvňuje, ako často je ADC dotazovaný. To znamená, že pre predvolených 16 MHz vychádza 16/128 = 125 kHz. Každá digitalizácia pozostáva z 13 operácií, takže pin môže byť vyzvaný maximálnou rýchlosťou 9600 kHz. V praxi to nie je viac ako 7 kHz. V dôsledku toho je interval medzi meraniami 120 μs, čo je príliš dlhý čas na domácu prácu. Ak guľka letí rýchlosťou 300 m / s, počas tejto doby prekoná vzdialenosť 3,6 cm, to znamená, že ovládač si to jednoducho nevšimne. Aby všetko fungovalo správne, interval medzi meraniami musí byť aspoň 20 µs. Aby ste to dosiahli, hodnota deliteľa sa musí rovnať 16. Autor vytvoril deliteľa 8, ako to urobiť, je uvedené nižšie.


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

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


Čo sa stalo počas experimentu, môžete vidieť na fotografii

Logika firmvéru má niekoľko fáz:

Meranie rozdielu medzi hodnotami na kolíku pred a po;
- ak rozdiel prekročí prahovú hodnotu, slučka sa ukončí a aktuálny čas sa uloží (micros());
- druhý cyklus funguje podobne ako prvý a má v cykle počítadlo času;
- ak počítadlo dosiahlo určenú hodnotu, potom sa zobrazí chybové hlásenie a prechod do počiatočného stavu. V tomto prípade cyklus neprejde do večnosti, ak guľku náhle nezachytil druhý snímač;
- ak počítadlo nepretieklo a rozdiel hodnôt je väčší ako prah, meria sa aktuálny čas (mikros());
- teraz môžete na základe rozdielu v čase a vzdialenosti medzi senzormi vypočítať rýchlosť strely a zobraziť informácie na obrazovke. No a potom sa všetko začína odznova.

Záverečná fáza. Testovanie
Ak je všetko vykonané správne, zariadenie bude fungovať bez problémov. Jediným problémom je slabá odozva na žiarivkové a LED osvetlenie, s frekvenciou pulzovania 40 kHz. V tomto prípade sa môžu v zariadení vyskytnúť chyby.

Domáce funguje v troch režimoch:

Po zapnutí sa ozve pozdrav a potom sa obrazovka naplní pruhmi, čo znamená, že zariadenie čaká na výstrel


Ak sa vyskytnú chyby, zobrazí sa správa „Err“ a potom sa zapne pohotovostný režim.


No a potom príde obmedzenie rýchlosti


Ihneď po výstrele prístroj zobrazí rýchlosť strely (označená symbolom n) a následne sa zobrazí informácia o energii strely (symbol J). Pri zobrazovaní joulov sa zobrazuje aj dvojbodka.
Podobné články

2022 videointercoms.ru. Údržbár - Domáce spotrebiče. Osvetlenie. Kovoobrábanie. Nože. Elektrina.