Volledig geautomatiseerde 3D-geprinte brushless Nerf-blaster aangestuurd door Arduino
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerkingen |
|---|---|---|
| Arduino Nano Every | 1 | Zeer compact om in een Nerf-gun te passen, behoudt alle functionaliteit. |
| Lineaire solenoid, 12 VDC | 1 | Zorg voor 35mm slaglengte, 12V. |
| Brushless DC-motor | 2 | Nerf-vliegwielkassen werken best met outrunner brushless motors. Moet 12V (3s Lipo) aan. |
| Brushless ESC | 2 | Moet min. 20% meer stroom aan dan de motor trekt. Moet 3s Lipo aan. Een ESC per motor. |
| Lipo-batterij 3S 11.1-12.6V 1300mAh 25C | 1 | Ontlaadsnelheid moet de stroomtrek van alles aan plus 20% marge. 1300mAh minimum aanbevolen. |
| Microschakelaar, miniatuur | 2 | Elke generieke microschakelaar. Hoeft niet hoogstroom te zijn. |
| Power MOSFET N-kanaal | 1 | Moet logic level zijn! N-kanaal >20V >15A Drain-to-Source @5V gate voltage. |
| Weerstand 10k ohm | 1 | R3 in schema - voorkomt drijfende spanning op MOSFET gate. |
| Doorverbindweerstand 4.7 kohm | 1 | R1 in schema om MS2 microschakelaar op te trekken. |
| Doorverbindweerstand 150 ohm | 1 | Voor LED's (waarde hangt af van je opstelling). |
| Weerstand 220 ohm | 1 | R2 in schema om stroom van MOSFET gate te beperken. Optioneel, maar niet getest zonder. |
| 1N4007 – Hoogspanningsdiode | 2 | Algemene diode als flyback-diode D2 voor MOSFET bescherming tegen back-EMF van solenoid. D1 voor Arduino voeding tegen omgekeerde polariteit. |
| Condensator 100 µF | 1 | Vermindert spanningsdip naar Arduino voeding - polariteitsgevoelig! C1 in schema. |
| Condensator 100 nF | 1 | Filtert ruis/storing op Arduino voeding. C2 in schema. |
Benodigde tools en machines
- 3D-printer (generic) – Mijn printer is Evnovo (Artillery) X1 - 300x300x400mm
Over dit project
Ik heb altijd genoten van bouwen en creëren, dus ik besloot props en replica's te maken van objecten uit films en videogames. Een virtueel object in de werkelijkheid brengen en mijn technieken delen met gelijke geesten.
Mijn laatste en grootste creatie is de Kang Tao, een slimme pistool uit de komende game Cyberpunk 2077. Om zo'n complex object te maken, werd een 3D-printer gebruikt voor de esthetiek en mechanische pasvorm.
Een statisch object was te makkelijk, ik wilde een uitdaging. Dus ik ontwierp het als een functionele Nerf-blaster.
Om deze functionaliteit te bereiken, moest het een solenoid en ESCs voor brushless motors besturen. Relais en tijdfuncties zouden te onhandig zijn, dus een Arduino was een praktische oplossing.
Deze write-up richt zich op de Arduino en elektrische schakeling van dit project (omdat dit een Arduino-site is). Ik labelde het als 'eenvoudig' omdat het Arduino-gedeelte redelijk simpel is. Het mechanische ontwerp en 3D-printen is wel gevorderd. Als je een brushless ESC, brushless motors en een solenoid met Arduino wilt besturen voor Nerf-blasters, is deze gids voor jou!
CAD-ontwerp, 3D-printen etc. worden uitgelegd hier:
NerfHaven
of hier: Reddit
Videotutorials: YouTube-kanaal
Het schema (zie schema-sectie) toont hoe alles verbonden is. Een Arduino Nano wordt gebruikt vanwege de kleine afmetingen. Dit zou ook met een Uno en andere moeten werken.
Verwijs naar het schema voor de onderstaande terminologie MS1, C2, etc.
Verwijs naar de Code-sectie voor uitleg over hoe de code werkt.
Triggers met vliegwielen & solenoid
De code werkt als volgt: wanneer MS2 (secundaire microschakelaar-trigger) ingedrukt wordt gehouden, draaien de brushless motors op.
Wanneer MS1 (primaire microschakelaar-trigger) ingedrukt of vastgehouden wordt, wordt een signaal naar de MOSFET-gate gestuurd om de solenoid (S) herhaaldelijk te activeren. De solenoid duwt de Nerf-pijl uit het magazijn in de vliegwielen (M1 & M2) die de pijl versnellen uit de loop.
Echter, MS1 activeert alleen terwijl MS2 ingedrukt wordt gehouden. Dit voorkomt vastlopers als een pijl in niet-draaiende vliegwielen wordt geduwd. In de code (zie code-sectie) is dit waar de '&&'-operator wordt gebruikt.
De voeding voor de brushless motors en solenoid loopt niet door de microschakelaars. Dit betekent dat je geen hoogstroom-geschikte microschakelaars nodig hebt.
Brushless motors
Ik ga niet uitleggen hoe brushless van brushed motors verschilt, er zijn geweldige uitleggen online.
Er zijn inrunner en outrunner brushless motors. Je wilt een outrunner motor omdat ze platter zijn, zodat er geen lelijke blikjes aan de zijkant van je Nerf-blaster uitsteken. Outrunner motors hebben een deel van de externe behuizing dat mee draait met de as. Dit maakt het makkelijk om vliegwielen te 3D-printen die over de motor passen.
Kies een motor met achterste montagegaten.
- Spanning: min. 12.6V (3s lipo).
- Stroom: mag ESC-stroomwaarde niet overschrijden.
- Vermogen: >60W. Dit project gebruikt 12.6V x gemeten 7A = ~80W per motor.
- RPM: ~25k, bepaald door kV-rating x spanning. Dit project gebruikt 2600kV motors @ 12.6V → ~32.760 RPM. Ik draai de motors op halve gas en pijlen vliegen 25m / 82ft!
Brushless ESCs
Deze regelen het vermogen van de brushless motors.
- Brushless motors werken NIET met brushed ESCs, kies brushless.
- Je hebt één ESC per motor nodig. Anders verstoort de back-EMF van twee motors op één ESC de timing en beschadigt ESC en/of motors.
- Stroomwaarde ESC moet hoger zijn dan stroomtrek motor. Gemeten 7A per motor. Aanbevolen ESC: 20A of hoger.
- Spanningswaarde ESC min. 12.6V (3s Lipo).
- ESC hoeft geen ingebouwde BEC te hebben. Je kunt 'OPTO' ESCs gebruiken. Als je een ESC met BEC hebt, sluit de ground- en signalkabels aan op de Arduino zoals in het schema. Sluit het rode 5V-kabeltje van de ESC NIET aan op iets. (Tenzij je een specifiek doel hebt en weet wat je doet).
Batterij
Eén batterij voor alles. Ik raad een XT60-connector aan.
- Spanning: 12.6V 3S Lipo.
- Capaciteit: 1300mAh minimum aanbevolen.
- Ontlaadsnelheid: moet voldoende zijn voor de stroomtrek van alle belasting. In dit project ~25A.
- Max ontlaadsnelheid = Ontlaadfactor (25C) x Capaciteit in Ah (1300mAh = 1.3Ah) → 25 x 1.3 = 32A max. Controleer deze cijfers in de batterijspecificaties.
MOSFET
Een 12V / 8A solenoid rechtstreeks van een Arduino voeden rookt de Arduino. Oplossing? MOSFET.
De power MOSFET fungeert als aan/uit-schakelaar voor de solenoid. Het onderbreekt de ground die de solenoid voedt. Dit heet een N-kanaal MOSFET. Zorg dat je een N-kanaal krijgt.
De MOSFET weet wanneer aan/uit te gaan door een signaal op de gate-pin van een Arduino-uitgangspin (D4 in dit geval). Arduino's leveren 5V, de gate moet volledig open zijn op 5V. Daarom moet het een Logic Level MOSFET zijn.
- Stroomtrek solenoid: 8A. MOSFET max stroomwaarde hoger. Dit project gebruikt 30A max.
- Spanning door MOSFET: 12.6V. MOSFET 60V max, voldoende marge.
- Temperatuur MOSFET < 35°C. Bereikt omdat MOSFET 30A is terwijl er maar ~8A loopt. Ook omdat de belasting (solenoid) maar kortstondig aangesloten is, niet constant. Heatsink niet nodig.
Solenoid
De solenoid duwt de pijl in de vliegwielen. Je hebt een 12V solenoid met 35mm slaglengte nodig. Kortere slagen duwen volledige Nerf-pijlen niet ver genoeg.
Upgrade de veer naar 0.9mm draaddiameter, 14mm buiten-diameter & 40mm lengte om vastlopers te voorkomen.
Omdat de solenoid maar kortstondig geactiveerd wordt, wordt hij slechts handwarm (~40°C) en heeft geen koeling nodig.
Deze solenoiden zijn goedkoop en generiek. Te vinden op eBay, AliExpress, etc.
Veiligheidsschakelaar
SW veilighedsschakelaar is een simpele 2-stand schuifschakelaar. Heeft 3 contacten, maar er worden er 2 gebruikt. Haalt voeding van Arduino wanneer veiligheid aanstaat, waardoor vliegwielen en solenoid niet kunnen activeren.
Beschermingsschakeling
Deze sectie legt uit hoe je je elektronica beschermt!
- C1 33µF (100µF aanbevolen) & C2 100nF (0.1µF) verminderen spanningsfluctuaties naar de Arduino-voeding.
- Let op: C1 is polariteitsgevoelig, gestreepte kant is negatief, anders gaat hij KABOEM!
- D1 voorkomt omgekeerde spanning naar Arduino VIN. Let op polariteit.
- D2 is een flyback-/vrijloopdiode. Voorkomt dat de solenoid (of andere spoelen) back-EMF genereert die de MOSFET kan beschadigen. Let op polariteit.
- R1 & R2 zijn 4.7kΩ pull-up weerstanden voor MS1 & MS2. Voorkomt drijfende spanning op de microschakelaars.
- R3 is een 10kΩ pull-down weerstand om drijfende spanning op de MOSFET-gate te voorkomen.
- R4 is 150kΩ voor de optionele LED's. Mijn LED's zitten 2 in serie van 2.4V / 50mA elk. Jouw weerstandswaarde kan afwijken. Deze LED's knipperen synchron met de solenoid om loodvuur na te bootsen!
Videouitleg en testvuur hieronder!
Dit was de gids, vragen? Laat een reactie achter :)
Bestanden downloaden om het zelf te printen!
UPDATE: Hier is de link naar de Thingiverse-bestanden, veel plezier!
https://www.thingiverse.com/thing:3984125
Code
- Nerf Blaster Brushless Motor & Solenoid Arduino Code - Clark3DPR
Nerf Blaster Brushless Motor & Solenoid Arduino Code - Clark3DPR Arduino
1. Bij inschakelen via de veilighedsschakelaar voert de Arduino de armsingssequentie uit voor de brushless ESC's. Mijn ESC's nemen 3,7 sec (3700 in code). Je moet dit misschien verhogen tot 10000 (10 sec) afhankelijk van je ESC om veilige modus te verlaten.
2. Houd secundaire microschakelaar ingedrukt om vliegwielen op te laten draaien, druk dan op primaire microschakelaar om te vuren.
3. Verander throttle.write(92) voor motor idle-snelheid of uitschakelen. Standaard draaien motors op lage snelheid om opstarttijd te verkorten. (Waarde hangt af van motor/ESC). Verander throttle.write(97) voor topsnelheid en pijlsnelheid. (Waarde hangt af van motor/ESC).
Verander delay(90) en delay(100) om vuurfrequentie van solenoid aan te passen.
4. Wanneer microschakelaar losgelaten, stopt ESC PWM-signaal voor vliegwielen & signaal naar MOSFET-gate voor solenoid.
5. Wanneer ESC's signaal van Arduino verliezen (veilighedsschakelaar aan, Arduino uit), gaan ESC's in veilige modus en schakelen motors uit.
const int buttonPinF = 2; // Vliegwiel microschakelaar pin
const int buttonPinS = 5; // Solenoid microschakelaar pin
int buttonStateF = 0;
int buttonStateS = 0;
int solenoidPin = 4; // MOSFET gate pin
#include <Servo.h>
Servo throttle;
int pos = 0;
int pin = 3; // ESC signaal pin
void setup() {
pinMode(buttonPinF, INPUT);
pinMode(buttonPinS, INPUT);
throttle.attach(pin);
pinMode(solenoidPin, OUTPUT);
// ESC Armsingssequentiel
for (pos = 90; pos <= 91; pos += 1) {
throttle.write(pos);
delay(3700); // Wacht tot ESC armed / veilige modus verlaat
// Verhoog deze 3700 waarde afhankelijk van hoe lang je ESC erover doet
}
}
void loop() {
buttonStateF = digitalRead(buttonPinF);
if (buttonStateF == HIGH) {
throttle.write(92); // <(92) = Motor uit / (92) = Idle snelheid
} else {
throttle.write(97); // Motor aan (92) = Idle / ~(115) = Max snelheid
}
buttonStateS = digitalRead(buttonPinS);
if (buttonStateF == LOW && buttonStateS == LOW) {
digitalWrite(solenoidPin, HIGH); // Solenoid AAN
delay(90); // AAN duur
digitalWrite(solenoidPin, LOW); // Solenoid UIT
delay(100); // UIT duur
} else {
digitalWrite(solenoidPin, LOW); // Solenoid UIT
}
}
Schema's
Dit is hoe alles bedraad is. Let goed op polariteit van diodes en condensators. Getekend met AutoCAD.
Productieproces
- Bouw je eigen DIY huiswerk-schrijfmachine thuis
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Slimme doucheregulator – Betrouwbare magnetklep voor nauwkeurige temperatuurcontrole