Inhoudsopgave:
- Stap 1: Vereiste onderdelen en gereedschappen
- Stap 2: Breadboard-testen
- Stap 3: Testen en debuggen
- Stap 4: Hardwaremontage
- Stap 5: Eindmontage
- Stap 6: chronograaf in actie
- Stap 7: Toekomstplannen
Video: Nerf-chronograaf en vuursnelheid - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Invoering
Als knutselaar geeft het altijd veel voldoening om de cijfermatige resultaten van je knutselwerk te zien. Velen van ons hebben eerder Nerf-pistolen aangepast en wie houdt er niet van om stukjes schuim door het huis te gooien met meer dan 100 fps?
Na mijn hele leven veel Nerf-geweren te hebben aangepast, beginnend toen ik ~ 10 was met mijn vader tot nu, wanneer ik en mijn kamergenoten schuim door het appartement naar elkaar blijven gooien, heb ik altijd al precies willen weten hoe snel de darts vliegen, en hoeveel darts per seconde mijn kamergenoten Rapid-Strike schiet. Er zijn commerciële chronografen beschikbaar voor Nerf en Airsoft, maar de zeer nauwkeurige chronografen zijn duur en het is leuk om er zelf een te bouwen. Als je er een wilt kopen, heeft Nerf een vat uitgebracht dat bijna identiek is aan het vat in dit project (met een beter industrieel ontwerp) en het is hier te vinden:
Nerf Modulus Ghost-Ops Chrono Barrel
De Nerf-versie werkt ook op batterijen en toont een teller voor afgevuurde darts. De Instructable bevat hier ook een scherm en een resetknop, maar vertrouwt op de dartlengte voor snelheidsberekening en lijkt geen interrupts te gebruiken. De belangrijkste focus van dit project zal liggen op de seriële communicatie (omdat een eenvoudig voorbeeld zoals dit niet het gemakkelijkst online te vinden was), en het gebruik van interrupts voor nauwkeurige timing. Dit kan waarschijnlijk om dezelfde redenen gemakkelijk worden omgezet in een airsoft-chronograaf met een strakkere behuizing en een beter montagesysteem voor airsoft-geweren. Zonder interrupts kan de code langzamer en minder efficiënt zijn, het is ook veel moeilijker om nauwkeurig te timen met betrekking tot microseconden, aangezien milliseconden geen nauwkeurige waarden voor dartsnelheid produceren.
Ik zal me niet te veel concentreren op het ontwerp van de behuizing, hoewel STL-bestanden beschikbaar zijn in de GitHub, omdat iedereen gewoon de Nerf-versie kan kopen die absoluut beter is voor het echte spel, maar een toekomstige versie hiervan kan de resultaten verminderen.
Basisprincipes (leerresultaten):
- Heeft de vorm van een standaard Nerf Barrel
- Gebruik van fototransistoren als timingpoorten voor de dart.
- Toont het gebruik van Adruino-interrupts voor timing
- Gebruik van verwerking met Arduino voor seriële communicatie
Projectomvang:
Ik ben van plan om de meeste details van dit project te bespreken met enkele korte overzichten en raad aan om de referenties voor Arduino en Processing te lezen voor meer specifieke informatie. Dit leert je niet hoe je moet solderen, maar meer hoe je Arduino en Processing integreert en interrupts gebruikt. Veel van dit leren zal door het lezen van de daadwerkelijke becommentarieerde code, dus zorg ervoor dat u alle code doorleest voordat u blindelings uploadt en probeert om het te laten werken.
Voordelen ten opzichte van vergelijkbare projecten:
- Gebruik van onderbrekingen voor het nauwkeurig meten van hoge snelheid
- Uitgebreide debugging-sectie voor fototransistors
- Rate of Fire (ROF) Berekening uitvoeren van rondes per seconde (RPS)
- Computerinterface op volledig scherm - niet handig tijdens gevechten, maar geweldig als je anderen de resultaten op stream of YouTube wilt laten zien met een schermrecorder.
- Mogelijk om aan te passen voor Airsoft of Paintball door alleen de behuizing aan te passen
- Geen behoefte aan aangepaste PCB's (zou leuk zijn in een toekomstige update, maar iedereen kan dit voor relatief lage kosten maken)
- Totale kosten van minder dan $ 10 wanneer onderdelen worden verwijderd en als een 3D-printer beschikbaar is - Gelijk aan de commerciële kosten, met toevoeging van ROF
Stap 1: Vereiste onderdelen en gereedschappen
Als je een 3D-printer hebt, zal dit een geweldig project voor je zijn, aangezien ik de bestanden voor de behuizing zal leveren. Voel je vrij om de bijlage bij te werken. Ik had geen LCD's bij de hand, maar een tweede versie zal hopelijk een LCD hebben en een WEMOS D1 of vergelijkbaar WiFi/BT-board en een batterij gebruiken. Dit maakt datalogging op mobiel en realtime feedback mogelijk - bijvoorbeeld hoeveel darts er nog in het pistool zitten. Enige soldeerervaring wordt aanbevolen, als je je niet op je gemak voelt, raad ik aan om een Instructable te volgen voor solderen en waarschijnlijk extra elektronische componenten te kopen voor het geval dat.
Benodigd gereedschap:
- Soldeerbout
- Heteluchtblazer/heteluchtpistool/aansteker (bij gebruik van krimpkous)
- Draadstrippers
- Mini - B USB-kabel (of welke kabel dan ook die nodig is voor uw microcontroller)
- Hot Glue Gun of iets dergelijks (ik heb een 3D-printpen gebruikt om alle componenten aan de 3D-geprinte behuizing te bevestigen)
Benodigde materialen:
- 22AWG Solid-core draad ex: Solid Core Wire Set 22AWG
- Arduino Nano (of vergelijkbaar, ik heb een kloon gebruikt) ex: 3 x Arduino Nano (kloon)
- Weerstandskit (2 x 220 ohm, 2 x 220k ohm) Mogelijk kunt u met succes pulldown-weerstanden met een lagere waarde gebruiken, zoals 47k, ik ontdekte toevallig dat ik deze waarde nodig had om te werken. De gids voor probleemoplossing beschrijft hoe u kunt bepalen of de pulldown-weerstand de juiste waarde is voor uw specifieke fototransistor en LED-set. Daarom raad ik aan om een set te kopen: bijv: Weerstandset
- 2 x IR LED ex: IR LED en PhotoTransistor Set
- 2 x fototransistor
- 1 x 3D-geprinte behuizing - In een IR-ondoorzichtig filament (Hatchbox Silver werkte en was de enige kleur die ik heb getest)
- Volledige projectbestanden zijn hier beschikbaar op GitHub en in het bijgevoegde zipbestand. De STL's zijn hier ook beschikbaar op Thingiverse.
Stap 2: Breadboard-testen
Zodra de elektronica is aangekomen, soldeer je naar de fototransistoren en IR-leds ~20-30cm voor debuggen, ik raad aan deze te krimpen. Ik had niet de juiste maat krimpkous en moest elektrische tape gebruiken voor dit prototype. Hierdoor kunt u ze gebruiken voor testen in de behuizing. Als je de behuizing hebt geprint en LED's en fototransistors op de juiste posities hebt, kun je beginnen met testen.
Zorg ervoor dat Arduino en Processing zijn geïnstalleerd.
Het zip-bestand aan het begin bevat alle code en de STL-bestanden voor het afdrukken van de bijlage.
Gebruik Arduino om eerst te debuggen en gebruik de verwerking alleen voor de laatste tests (je kunt alles in de seriële monitor van Arduino zien).
Je kunt gewoon proberen een Nerf-pijltje door de chronograaf te schieten met Chronogrpah_Updated.ino geïnstalleerd op de Arduino. Als dit werkt, ben je helemaal klaar. Als dit niet werkt, moet u waarschijnlijk de weerstandswaarden aanpassen. Dit wordt in de volgende stap besproken.
Een klein beetje over hoe de code werkt:
- Onderbreek de code wanneer een dart door een poort gaat en bepaalt de tijd in microseconden
- Hiermee wordt de snelheid berekend en wordt de tijd opgeslagen
- De tijd tussen schoten wordt berekend en omgezet in rondes per seconde
-
De tijd tussen poorten wordt berekend en omgezet in voet per seconde op basis van poortafstand.
Het gebruik van twee poorten zorgt voor betere resultaten met identieke timing (hoeveel van de sensor moet worden afgedekt) en vermindert hysterese
- De snelheid en vuursnelheid worden via serieel verzonden, gescheiden door een komma naar ofwel de seriële monitor in Arduino of de verwerkingsschets, wat een mooie gebruikersinterface mogelijk maakt (focus op verwerking als al het andere werkt!).
Stap 3: Testen en debuggen
Als u geen succes had met de eerste test, moeten we uitzoeken wat er mis is gegaan.
Open het Arduino-voorbeeld AnalogReadSerial gevonden in Bestand-> Voorbeelden->0.1 Basis -> AnalogReadSerial
We willen ervoor zorgen dat de fototransistoren werken zoals we verwachten. We willen dat ze HOOG lezen als de pijl ze niet blokkeert, en LAAG als de pijl dat niet is. Dit komt omdat de code Interrupts gebruikt om de tijd vast te leggen waarop de dart de sensor passeert, en het type interrupt dat wordt gebruikt FALLING is, wat betekent dat het wordt geactiveerd wanneer het van HOOG naar LAAG gaat. Om ervoor te zorgen dat de pin HOOG is, kunnen we de analoge pinnen gebruiken om de waarde van deze pinnen te bepalen.
Upload het Arduino-voorbeeld AnalogReadSerial en spring van de digitale pin D2 of D3 naar A0.
D2 moet de eerste sensor zijn en D3 moet de tweede sensor zijn. Kies 1 om te lezen en begin daar. Volg de onderstaande gids om de juiste oplossing te bepalen op basis van de meetwaarden:
Waarde is 0 of zeer laag:
De waarde moet aanvankelijk rond de 1000 zijn, als het een zeer lage waarde of nul aangeeft, zorg er dan voor dat uw LED's correct zijn bedraad en niet zijn doorgebrand, en ook goed zijn uitgelijnd. Ik heb mijn LED's doorgebrand tijdens het testen bij het gebruik van een weerstand van 100 ohm in plaats van de 220 ohm. Het is het beste om de datasheet van de LED's te raadplegen om de juiste weerstandswaarde te bepalen, maar de meeste LED's zullen waarschijnlijk werken met de 220 ohm weerstand.
LED's werken en waarde is nog steeds 0 of zeer laag:
Het probleem is waarschijnlijk dat de pull-down-weerstand te laag is in weerstand. Als u een probleem heeft met de 220k-weerstand, kunt u deze misschien hoger verhogen, maar u kunt ruis krijgen. U moet ervoor zorgen dat uw fototransistor niet is doorgebrand.
Waarde is een middenbereik:
Dit zal veel problemen veroorzaken, meestal valse triggers, of nooit een high veroorzaken. We moeten ervoor zorgen dat een HOOG wordt ontvangen, om dit te doen hebben we een waarde van ~600 nodig, maar laten we streven naar 900+ om veilig te zijn. Te dicht bij deze drempelwaarde kan valse triggers veroorzaken, dus we willen valse positieven vermijden. Om deze waarde aan te passen willen we de pulldown weerstand (220K) verhogen. Ik heb dit al een paar keer gedaan in mijn ontwerp en waarschijnlijk hoef je dit niet te doen, omdat dit een zeer grote waarde is voor een pull-down-weerstand.
Value is erg luidruchtig (veel rondspringen zonder externe prikkels):
Zorg ervoor dat uw bedrading correct is met de pull-down-weerstand. Als dit correct is, moet u mogelijk de waarde van de weerstand verhogen.
Waarde blijft hangen op 1000+, zelfs bij het blokkeren van de sensor:
Zorg ervoor dat uw pull-down-weerstand correct is aangesloten, dit zal waarschijnlijk gebeuren als er geen pull-down is. Als dit nog steeds een probleem is, probeer dan de pull-down-weerstandswaarde te verlagen.
Waarde is hoog en gaat naar nul bij het blokkeren van het licht:
Dit zou voldoende moeten zijn om de sensor te laten werken, maar we reageren mogelijk niet snel genoeg als de pijl het pad kruist. Er is enige capaciteit in het circuit en met de 220K-weerstand kan het enige tijd duren voordat de spanning onder de vereiste drempel komt. Als dit het geval is, verlaag dan deze weerstand naar 100K en kijk hoe de tests werken.
ZORG ERVOOR DAT ALLE WEERSTANDWIJZIGINGEN CONSISTEN ZIJN TUSSEN BEIDE SENSOREN
Door te zorgen voor identieke circuits voor beide sensoren, blijft dezelfde latentie tussen de weerstanden behouden, wat de beste nauwkeurigheid bij metingen mogelijk maakt.
Als je nog andere problemen hebt, kun je hieronder een opmerking plaatsen en ik zal mijn best doen om je te helpen.
Stap 4: Hardwaremontage
Soldeer de componenten op de kleine PCB zoals hier te zien is:
De draden voor de LED's en de PhotoTransistors moeten op lengte worden gesneden, ongeveer _.
Soldeer de Arduino op het bord en sluit de weerstanden van de grond aan op toegankelijke pinnen. Zorg er bovendien voor dat de 4 positieve draden gemakkelijk aan elkaar kunnen worden bevestigd. Als je hier problemen mee hebt, kun je een stuk draad strippen en aan het uiteinde over alle draden solderen.
Ik heb de sensoren aan de andere kant van de behuizing aangesloten, maar voel je vrij om ze te bedraden, zolang je de zijkanten maar consistent houdt. Ik heb de draden op lengte gesneden en de draden als laatste aan elk van de diodes gesoldeerd. Ik heb de draadroutering iets bijgewerkt om meer ruimte te bieden en minder zorgen over het hebben van sommige draden onder de printplaat en andere eroverheen voor gebruiksgemak. De STL's bevinden zich in het volledige zipbestand van het project aan het begin van het project.
Stap 5: Eindmontage
Als uw PCB-gaten niet overeenkomen met de gaten op de hoofdchronograafbehuizing, kunt u de elektronica in de behuizing waarschijnlijk vastzetten met wat tape of hete lijm, ik ontdekte dat het niet hoefde te worden vastgezet na de draad en USB aanwezig waren, maar uw resultaten kunnen variëren. Het is ontworpen om 1,75 mm filament in de schroefgaten te drukken voor heatstaking, maar de PCB kan ook worden ingeschroefd of gelijmd. Het belangrijkste onderdeel hier is ervoor te zorgen dat de USB-poort toegankelijk is.
Bedek de elektronica met de elektronica-afdekking. De bijgewerkte bestanden zouden beter moeten passen dan de mijne en zullen hopelijk op hun plaats worden gedrukt, maar ik heb een 3D-printpen gebruikt om de covers op hun plaats te lassen. Je bent nu klaar om wat darts af te vuren!
Een toekomstige update kan interne routing voor de draden gebruiken, maar de covers wijken in dit geval enigszins af van de Nerf-esthetiek.
Stap 6: chronograaf in actie
Het verwerkingsbestand openen: Chronograph_Intitial_Release zorgt voor een heel mooie gebruikersinterface voor de chronograaf die zowel FPS als RPS (rondes per seconde) weergeeft. Als je problemen hebt om verbinding te maken, zorg er dan voor dat je je Arduino seriële monitor hebt gesloten, het kan zijn dat je ook de seriële poort in de code moet wijzigen, maar dit is commentaar en zou eenvoudig moeten zijn. Om de maximale waarden opnieuw in te stellen, drukt u eenvoudig op de spatiebalk op uw computer.
Een klein beetje over hoe de code werkt (foto van UI is hierboven te zien):
- Ontvangt input van de Arduino
- Vergelijkt dit met eerdere invoer om de maximale waarde te vinden
- Geeft de huidige en maximale waarden op volledig scherm weer voor eenvoudige visuele feedback
- Stelt de maximale waarde opnieuw in wanneer op de spatiebalk wordt gedrukt
Stap 7: Toekomstplannen
Een toekomstige update hiervoor zal de volgende verbeteringen bevatten. Als je aanvullende functies hebt die je zou willen, laat het me weten en ik zal proberen ze te implementeren.
- Inclusief LCD-scherm
- Inclusief batterijen
- Nerf-compatibele bevestigingspunten
- Bijgewerkte behuizing
- IJzeren bezienswaardigheden