The Hungry Hacker's Explanation of Everything

Home » Paintball

Moo-Trigger: DIY Electronic Trigger Board

20 July 2005 No Comment

Addendum 1: This project is still under construction – the basic functionality is there, but reliability is an issue. It’s completely plausible to add things like eye beams and whatnot, but none of that is implemented yet.

Addendum 2: This project used to be called B-Trigger, short for “Bovine”, but I like the word “Moo” better.

Warranty Warning: Considering I removed the PIC from my Spyder Flash’s board with a pocket knife, I’m going to take a wild guess and say this will void your warranty. There’s also a pretty real chance you could end up with a marker that doesn’t work at all, so you might wanna think about whether or not you want to wimp out and buy a pre-made board (see below).

Introduction

We started this project as a way to soup-up the internals of a Spyder electronic trigger frame, without having to buy someone else’s invention… e.g., T-board and like replacement boards. If you’re not interested in the nuts and bolts of making triggers work, buying a T-Board or a Virtue Board is probably going to be cheaper and less aggravating.

However, if you want to get your hands dirty, you like programming and soldering, and want the ultimate in customization ability… then this article might just be for you.

The Code

/*
** B-Trigger: Bovine Trigger for Paintball Markers
** http://www.hungryhacker.com/projects/b_trigger
** (C) 2005-2007 Hungry Hacker Industries
*/
#include "msp430x20x1.h"

#define IO_LED 0x01
#define IO_TRIGGER 0x02
#define IO_SOLENOID 0x04

#define DEL_SOLON 5
#define DEL_SOLOFF 20

void
sleep(int cycles)
{
volatile unsigned int i, j;

i = cycles; // err, cycles / 10k anyway
while (i)
{
j = 1000;
while (j)
j--;
i--;
}
}

int
main(void )
{

/*
** stop watchdog timer
*/
WDTCTL = WDTPW + WDTHOLD;

/*
** setup pins
*/
P1DIR = 0xFF; // all pins output
P1DIR ^= 0x02; // pin 2 input
P1OUT = 0;
for (;;)
{
if (!(P1IN & IO_TRIGGER)) // is trigger pin low
{
P1OUT |= IO_SOLENOID;
P1OUT |= IO_LED;
sleep(DEL_SOLON);
P1OUT &= ~IO_SOLENOID;
P1OUT &= ~IO_LED;
sleep(DEL_SOLOFF);
}
}
/*
** NOT REACHED
*/
return 0;
}

Setting it Up

Stock Spyder Flash board - w/o PIC

In the image to the left, you can see the stock board from my Spyder Flash with the PIC removed. If you click on the image, to go to the Flickr photo page, you can see notes on the photo telling you what some of the various pins are for.

It should be noted that other versions of the Spyder E-Trigger probably have vastly different boards, even down to other Flash models (it stands to reason that the Flash LCD will have a different board). You’ll need to break out the diagnostic tools before you remove the PIC if you want to follow in my footsteps here.

MSP Module Connected

Next I used some thin wire and jumpered the MSP-430 prototype board to the stock Spyder trigger board, allowing me to control it. You can see the awful mess it looks like in the image to the right. It all fits inside the grip, because the MSP-430 board is tiny – about the size of your thumbnail, give or take.

It Works! Sort of…

After compiling the above code and flashing it to the MSP, I’m left with a full-auto trigger board with arbitrary delays. I had hacked up a semi-auto version, which is more or less just a logic problem (another check to see if the trigger is released, at which point you reset a variable, and only allowing the solenoid to cycle if the variable is reset) – but unfortunately I lost the code.

You can see it operating in the video below, I appologize for the black-and-white, grainy footage:

More to Come:

We’re going to completely build a new board, hopefully even down to etching a PCB, which will make for a nice extension to this article and another on etching PCBs. As yet, we’re still waiting on getting around to order the parts.

Don’t try this at home.

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar. Note: By filling out this comment form or emailing us you are signifying that you have read and agree to the terms laid out on the Contact Us page.