Switch Adapting a Rhino Fire Elite NERF Blaster

by NeilBuilds in Circuits > Assistive Tech

47 Views, 0 Favorites, 0 Comments

Switch Adapting a Rhino Fire Elite NERF Blaster

eBay image.png
IMG_20220313_144320765.jpg
IMG_20220322_175152558.jpg
IMG_20220322_175207583.jpg

I was approached to switch adapt a NERF blaster for a local school with complex needs. The story was a bit of a heart breaker - the child used to love playing NERF before they were involved in a life changing incident. This project allowed them to continue to enjoy NERF, with the support of others, and bring back a spark of joy.

It's not an elegant adaption as the firing controller is operated from a micro-servo and I've had to power the Arduino externally but it's certainly something that works.

The Rhino Fire Elite NERF Blaster came from eBay but these regularly appear on Facebook Marketplace and I used empty coffee cans as the targets. Looking at the number that I was able to provide as targets - I'm starting to think I may have a problem there.


The Warnings:

• For use at targets only.

• Do not direct at people or animals.

• The dart has an impressive range – test before setting up.

• Turn off at main power switch before stepping in front of blaster.

• In the event of an issue – use main power switch to turn off power to the dart launcher.

Downloads

Supplies

IMG_20211104_162728293_HDR.jpg

Parts to build

1x Rhino Fire Elite NERF Blaster came from eBay but these regularly appear on Facebook Marketplace and I used empty coffee cans as the target

1x 5V Power bank - Amazon link - chosen as these are on special offer, but any 5V USB powerbank will do.

1xArduino controller - Uno r3 available here for Official Arduino supplier

or

1x Arduino controllers - Uno r3 - AliExpress link - generic (lower price but may require a driver to be installed to work correctly, I also got the cable here too as the ones supplied are data capable)

1x micro-servo these 9G micro-servos worked really well

3mm plywood - 55mm x 50mm piece or you could use 3mm thick plastic or even 3D print this - it's for the micro-servo & switch mount. I used plywood as it's what I had to hand.

1x 3.5mm mono jack socket available here

1x On/ off rocker switch available here

Signal wire - as you see fit (I used multiple lengths) I've used white here but feel free to use whatever colour you prefer - here

Male to female jumper wires - Bitsbox link - these are always useful when building something so you can test as you go.

6x D-cell batteries - the blaster will drain standard batteries very quickly when in use. I suggest these which are expensive for a twin pack but they are rechargeable via USB and will pay for themselves after a few charges.

10x coffee can targets - I use these as I have a number to hand and they have no sharp edges.


Tools to build this:

Good soldering iron starter kit - available here

or a more advanced soldering station with holder that I'm using here

Lead free solder (smaller packs are available) here

Drill - here

20mm diameter hole drill bit - here

8mm diameter drill bit - here

Wire strippers (I use these as they take the work out of wire sizing) - here

Wire cutters - here

Philips head screw driver - hardware shop of choice

Small file to open out the plywood mounting points to give a snug fit.

Pencil - makers choice

Ruler or straight edge


You'll also need a 3.5mm jack button for this which I'll suggest my instructable here as a recommendation.

These links are only suggestions for these supplies mind. I have included a few affiliate links for some supplies but only because they are cheap and effective supplies and I use any funds from this for parts to continue this activity.

Open Up the Blaster

IMG_20211030_122814039.jpg
IMG_20211104_143218401.jpg
IMG-20210919-WA0000.jpeg
IMG-20210919-WA0002.jpeg

Yes - we're in warranty voiding mode here so you can kiss that goodbye.

There are a lot of screws and plastic sections which have slots and slides that need to go into place for this to fit together correctly at the end so I would count your screws out and back in. Don't forget the screw for the battery box on the bottom as you'll need to remove any batteries while you're working on this.

Be gentle with the housing as there may be screws you've missed.

The insides will look like photo 3 - you're looking for the switch showing in photo 4

Make the Servo Mount and Fit

IMG_20220327_171506401.jpg
IMG_20220327_171521225.jpg
IMG_20211009_171057163_HDR.jpg
IMG_20211028_170607579_HDR.jpg

Take your 3mm plywood - 55mm x 50mm piece (or 3mm thick plastic or 3D printed section) mark & cut the slots shown on on the sketch.

These need to be pretty accurate as these holes are for the micro-servo & switch mount as shown in photo 3. Using the linkages that come with the servo, connect them as shown in photo 4 ensuring they move freely. This is how we are going to activate the fire control. Once the switch and servo are mounted and you're happy with their positions, you can move on to the next step.

Servo Wiring Diagram

Fritzing_Servo_diagram.jpg
IMG_20211030_122756787.jpg
IMG_20211030_122745395_HDR.jpg
IMG_20220327_171509909.jpg

See the attached wiring diagram for the servo operation with the button symbol being the 3.5mm jack socket.

For the 3.5mm you'll want to drill an 8mm hole into the blaster housing at the location shown in photo 2 and a 20mm hole for the main power switch. I found it easiest to solder some lengths of wire to the 3.5mm jack and the power switch before mounting them onto the housing. The power switch cables then interupt the power coming from the D-cell batteries - to create a master on/ off switch for the blaster.

From this point the servo can be connected to the Arduino. The wiring diagram shows the servo directly connected to the Arduino, if you have time it's worthwhile providing the servo with a separate power supply to reduce the load on the Arduino. I added a data capable USB power lead to the Arduino so that I was able to modify the program without having to remove all those screws each time with the lead exiting from the rear of the blaster. This lead will be the power supply to the Arduino from the external power bank.

Now it's time to add the code to the Arduino and to test the servo

Adruino Code & Checks

IMG_20211030_131157643_HDR.jpg
IMG_20211104_143311686.jpg
IMG_20211030_122739466.jpg
IMG_20211104_143317364.jpg
IMG_20211030_122731019_MP.jpg
IMG_20211030_122726658.jpg
IMG_20211030_122834736.jpg
IMG_20211104_110247583.jpg
IMG_20211030_122844102.jpg
IMG_20211101_211604911.jpg
IMG_20211101_211610222_HDR.jpg

I uploaded the code to the Ardunio and tested the servo function to ensure everything operated smoothly, you'll be able to see the servo operate and activate the switch. Once testing is completed - the servo mount and Arduino can be secured in place inside the rear of the blaster housing and the blaster re-assembled.

Take care to ensure you're not missing screws or knocking any of the safety switches out of place when reassembling. The hatch on top which is used to remove jammed dart should move freely. There are safety switches on each side of the magazine loading ports which can sometimes not activate correctly if the magazine isn't installed properly.

The designers of this blaster went to great lengths to ensure the safety of this blaster.

/*
Servo powered by a push button

Moves a servo by a number of degrees when pressing a pushbutton connected to digital pin 2.
The servo is connected to digital pin 3.
Pushbutton is connected to pin 2 and ground
Servo is connected to 3 with a separate power supply to reduce the load on the Arduino.

Coded by Neil Williamson using sections of code created by Tim King
from elementsw from 21 Jan 2010 by Tom Igoe including 'debounce' button code
plus INPUT_PULLUP content from left mouse click code for foot operated switch
very simple from apcmag.com author Darren Yates January 9, 2014
*/

#include<Servo.h>

Servo Myservo;
int pos=0;

const int buttonPin = 2; // the pin number of the input pushbutton pin
const int servoPin = 3; // to send signal to Servo
const int PressTime = 300; // the time the button signal is activated

// variables will change:
int playState = LOW; // the current state of the output pin
int buttonState = HIGH; // the current reading from the input pin - active output when LOW
int lastButtonState = LOW; // the previous reading from the input pin
int heldOn = 0; // changes to 1 if button held down all the time

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers

void setup() {

// to allow signal information to be seen in monitor window for troubleshooting
Serial.begin(9600);

// avoid need for resistor but using pullup
pinMode(buttonPin, INPUT_PULLUP);

// define output pins
pinMode(servoPin, OUTPUT);
// pinMode(2,INPUT);
Myservo.attach(3);
}

void loop()
{
// see if input button is pressed and check for debounce:
// read the state of the switch into a local variable:
int reading = digitalRead(buttonPin);
if (reading == HIGH) {
heldOn = 0;
}
// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited
// long enough since the last press to ignore any noise:

// If the switch changed, due to noise or pressing:
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:

// if the button state has changed:
if (reading != buttonState) {
buttonState = reading;

// only activate the servo if the new button state is LOW
if (buttonState == LOW) {

// activate the PLAY signal output to simulate pressing a remote control play button
if (heldOn == 0) {
Serial.println("Sending Go code ");
delay(50);

if(digitalRead(2)==HIGH){
Myservo.write(0);
}
else
Myservo.write(16);

// read the state of the switch into a local variable:
int reading = digitalRead(buttonPin);
if (reading == LOW) {
heldOn = 1;
}
else {
(heldOn == 0);
}
}
}
}


}

// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;

}

Bonus Operation

IMG_20211104_162506703_HDR.jpg
IMG_20211104_162448412_HDR.jpg
IMG_20211101_211319928_HDR.jpg
IMG_20211101_211301527.jpg
IMG_20211104_110237228.jpg

I found that adding a small dowel in the base of the tripod allowed the blaster to be mounted with a slight rise. This kept the darts relatively straight in flight. By all means play with what works for you.

Happy blasting