Cronograf cu pușcă cu aer comprimat ieftin


În acest articol, vom analiza cum puteți face un cronograf simplu din piese ieftine și accesibile. Dispozitivul este necesar pentru a măsura viteza unui glonț de la o pușcă. Aceste numere sunt necesare pentru a determina starea puștii, deoarece în timp, unele componente pneumatice se uzează și trebuie înlocuite.

Pregătim materialele și instrumentele necesare:
- Digispark chinezesc (a costat 80 de ruble la momentul achiziției);
- afișaj de tip segment pe TM1637 (a costat 90 de ruble la cumpărare);
- LED-uri în infraroșu și fototranzistoare (10 perechi) - costul a fost de 110 ruble;
- o sută de rezistențe de 220 ohmi costă 70 de ruble, dar vor fi necesare doar două dintre ele.

Asta este tot, aceasta este întreaga listă de articole pe care va trebui să le cumpărați. Apropo, rezistențele pot fi găsite și în aparatele electrocasnice vechi. Puteți paria mai mult la valoarea nominală, dar nu mai puțin. Drept urmare, puteți întâlni 350 de ruble, dar acest lucru nu este atât de mult, având în vedere că cronograful din fabrică va costa cel puțin 1000 de ruble, iar asamblarea acolo este mult mai rău decât cea făcută în casă.

Printre altele, trebuie să vă aprovizionați cu detalii precum:
- fire;
- o bucată de țeavă de cel puțin 10 cm lungime (se potrivește instalațiile sanitare din plastic);
- toate pentru lipit;
- multimetru (optional).


Primele trei detalii descrise au propriile lor nuanțe, așa că fiecare dintre ele trebuie luate în considerare separat.

Digispark
Acest articol este o placă în miniatură compatibilă cu Arduino și are un ATtiny85 la bord. Cum să conectați acest element la IDE-ul Arduino, puteți citi mai departe, puteți descărca și drivere pentru el acolo.
Această placă are mai multe opțiuni, una folosește microUSB, iar cealaltă este echipată cu un conector USB care este conectat chiar pe placă. Datorită faptului că produsul de casă nu are o sursă de alimentare individuală, autorul a ales prima versiune a plăcii. Dacă instalați o baterie sau un acumulator într-un produs de casă, acest lucru va crește foarte mult prețul acestuia și nu va afecta foarte mult caracterul practic. Și aproape toată lumea are un cablu pentru încărcarea unui telefon mobil și Power Bank.


În ceea ce privește caracteristicile, acestea sunt similare cu ATtiny85, aici capabilitățile sale sunt mai mult decât suficiente. Microcontrolerul din cronograf sondajează doar senzorii și controlează afișajul.
Dacă nu ați întâlnit niciodată Digispark până acum, puteți vedea cele mai importante nuanțe în tabel.


Este important să țineți cont de faptul că numerotarea pinului pentru funcția analogRead() este diferită. Și pe al treilea pin există un rezistor pull-up cu o valoare nominală de 1,5 kOhm, deoarece este utilizat în USB.

Câteva cuvinte despre afișaj
Se poate folosi orice afișaj pentru produse de casă, însă autorul a optat pentru o variantă ieftină. Pentru a face dispozitivul și mai ieftin, afișajul poate fi complet abandonat. Datele pot fi pur și simplu transmise unui computer printr-un cablu. Aici va fi nevoie. Afișajul considerat este o copie a afișajului.
Cum arată afișajul în față și în spate poate fi văzut în fotografie.




Deoarece distanțele dintre cifre sunt aceleași, cu două puncte dezactivate, cifrele sunt citite fără probleme. Biblioteca standard este capabilă să scoată numere în intervalul 0-9. litere în intervalul a-f și există și posibilitatea de a modifica luminozitatea întregului afișaj. Valorile cifrelor pot fi setate folosind funcția de afișare (int 0-3, int 0-15).


Cum se utilizează afișajul

// 1. Declarați un fișier antet
#include
// 2. Setați știfturi
#define CLK 0
#define DIO 1
// 3. Declara un obiect
TM1637 tm1637(CLK, DIO);
// 4. Inițializați
void setup()(
tm1637.init();
tm1637.set(6); // Luminozitate
}
// 5. Utilizare
void loop() (
// Afișează numărul x pe afișaj
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);
întârziere (500);
}

Dacă încercați să depășiți valorile, atunci afișajul va afișa confuzie, care, plus orice altceva, nu este statică. Prin urmare, pentru a afișa caractere speciale, cum ar fi grade, minusuri etc., va trebui să mânuiești.


Autorul a dorit ca afișajul să arate energia finală a zborului glonțului, care ar fi calculată în funcție de viteza glonțului și de masa acestuia. Așa cum a fost planificat, valorile ar fi trebuit să fie afișate secvențial și, pentru a înțelege unde este, acestea trebuie să fie marcate cumva, de exemplu, folosind litera „J”. Ca ultimă soluție, puteți folosi pur și simplu două puncte, dar acest lucru nu i s-a potrivit autorului și a intrat în bibliotecă. Ca urmare, pe baza funcției de afișare, a fost realizată funcția setSegments(byte addr, byte data), luminează segmentele codificate în date în cifra cu numărul adresei:


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

Astfel de segmente sunt codificate destul de simplu, bitul de date scăzut este responsabil pentru segmentul superior, iar apoi în sensul acelor de ceasornic, al 7-lea bit este responsabil pentru segmentul din mijloc. Caracterul „1” atunci când este codificat arată ca 0b00000110. Al optulea cel mai semnificativ bit este responsabil pentru colon, este folosit în a doua cifră și este ignorat în toate celelalte. Ulterior, autorul a automatizat procesul de obținere a codurilor folosind Excel.


Ce s-a întâmplat până la urmă, puteți vedea în fotografie




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

void setSegments (adresă octet, date octet)
{
tm1637.start();
tm1637.writeByte(ADDR_FIXED);
tm1637.stop();
tm1637.start();
tm1637.writeByte(addr|0xc0);
tm1637.writeByte(date);
tm1637.stop();
tm1637.start();
tm1637.writeByte(tm1637.Cmd_DispCtrl);
tm1637.stop();
}

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

void loop() (
// Ieșire Salut
setSegments(0, 118);
setSegments(1, 121);
setSegment(2, 54);
setSegments(3, 63);
întârziere (500);
}



Și în sfârșit, senzorii

Nu sunt furnizate informații precise despre senzori, se știe doar că aceștia au o lungime de undă de 940 nm. În timpul experimentelor, s-a constatat că senzorii nu sunt capabili să reziste la un curent mai mare de 40 mA. În ceea ce privește tensiunea de alimentare, aceasta nu trebuie să fie mai mare de 3,3V. În ceea ce privește fototranzistorul, acesta are o carcasă ușor transparentă și reacționează la lumină.


Să începem asamblarea și configurarea unui produs de casă:

Primul pas. Asamblare

Totul este asamblat după o schemă foarte simplă. Dintre toți pinii, vor fi necesari doar P0, P1 și P2. Primele două sunt folosite pentru afișaj, iar P2 este necesar pentru ca senzorii să funcționeze.
După cum puteți vedea, un rezistor este folosit pentru a limita curentul pentru LED-uri, în timp ce al doilea trage P2 la masă. Datorită faptului că fototranzistoarele sunt conectate în paralel, atunci când glonțul trece prin fața oricărui optocupler, tensiunea pe P2 va scădea. Pentru a determina viteza unui glonț, trebuie să cunoașteți distanța dintre senzori, să măsurați două supratensiuni și să determinați timpul în care au avut loc.
Datorită faptului că va fi folosit un singur știft, nu contează din ce parte să tragi. Fototranzistoarele vor observa oricum glonțul.










Totul este asamblat din detaliile care se văd în fotografie. Pentru a asambla totul, autorul a decis să folosească o placă. Apoi, întreaga structură pentru rezistență a fost umplută cu adeziv topit la cald. Senzorii sunt plasați pe țeavă și firele sunt lipite de ei.
Pentru a preveni pulsarea diodelor atunci când sunt alimentate de o bancă de alimentare, autorul a instalat un electrolit de 100 uF în paralel cu LED-urile.




De asemenea, este important de menționat că pinul P2 a fost ales dintr-un motiv, fapt este că P3 și P4 sunt folosite în USB, așa că acum cu ajutorul lui P2 este posibil să flashezi un produs de casă după asamblare.
P2 este, de asemenea, o intrare analogică, deci nu este nevoie să folosiți o întrerupere. Puteți măsura pur și simplu citirile dintre valoarea curentă și cea anterioară, dacă diferența devine peste un anumit prag, atunci în acel moment glonțul trece doar lângă optocupler.

Pasul doi. Firmware

Prescaler este un divizor de frecvență, în cazurile standard în plăci precum Arduino este 128. Această cifră afectează cât de des este interogat ADC-ul. Adică, pentru 16 MHz implicit, iese 16/128 = 125 kHz. Fiecare digitizare constă din 13 operații, astfel încât pinul poate fi interogat la o rată maximă de 9600 kHz. În practică, aceasta nu este mai mare de 7 kHz. Ca urmare, intervalul dintre măsurători este de 120 μs, ceea ce este prea lung pentru munca de casă. Dacă glonțul zboară cu o viteză de 300 m/s, acesta va acoperi o distanță de 3,6 cm în acest timp, adică controlerul pur și simplu nu va putea observa acest lucru. Pentru ca totul să funcționeze corect, intervalul dintre măsurători trebuie să fie de cel puțin 20 µs. Pentru a face acest lucru, valoarea divizorului trebuie să fie egală cu 16. Autorul a făcut un divizor de 8, cum se face acest lucru poate fi văzut mai jos.


#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);
...
}


Ce s-a întâmplat să învețe în timpul experimentului, poate fi văzut în fotografie

Logica firmware-ului are mai multe etape:

Măsurarea diferenței dintre valorile de pe pin înainte și după;
- dacă diferența depășește pragul, atunci bucla iese și ora curentă este stocată (micros());
- al doilea ciclu functioneaza asemanator cu primul si are un contor de timp in ciclu;
- dacă contorul a atins valoarea specificată, atunci există un mesaj de eroare și trecerea la starea inițială. În acest caz, ciclul nu intră în eternitate dacă glonțul nu a fost prins brusc de al doilea senzor;
- dacă contorul nu a depășit și diferența de valoare este mai mare decât pragul, se măsoară timpul curent (micros());
- acum, pe baza diferenței de timp și distanță dintre senzori, puteți calcula viteza glonțului și puteți afișa informațiile pe ecran. Ei bine, atunci totul începe din nou.

Etapa finală. Testare
Dacă totul este făcut corect, dispozitivul va funcționa fără probleme. Singura problemă este răspunsul slab la iluminatul fluorescent și LED, cu o frecvență de pulsație de 40 kHz. În acest caz, pot apărea erori în dispozitiv.

Lucrări de casă în trei moduri:

După pornire, există un salut, apoi ecranul este umplut cu dungi, ceea ce indică faptul că dispozitivul așteaptă o fotografie


Dacă există erori, este afișat mesajul „Err” și apoi modul de așteptare este activat.


Ei bine, apoi vine limita de viteză


Imediat după împușcare, dispozitivul va afișa viteza glonțului (marcat cu simbolul n), iar apoi vor fi afișate informații despre energia glonțului (simbol J). Când se afișează jouli, este afișat și două puncte.
Articole similare

2022 videointerfons.ru. Handyman - Aparate de uz casnic. Iluminat. Prelucrarea metalelor. Cutite. Electricitate.