Specifications

  • No Compressor needed. Works with Co2 cartridges.
  • Adjustable pressure 0-60 psi 
  • Adjustable timing from 50 millisecond up to trigger release.
  • Ergonomic Injector hand tool
  • Dimensions : 155 x 120 x 75 mm
  • Weight : 770 gr  (without packaging)
  • Works with 12V DC adapter


PCB

I use eagle to design the board and manufactured it from PCBWay. They did a great job. You can also order yours here: 

PCB from PCBWay

Schematics: 

Board :

Here is the link for PCB source files 


Firmware

I use atmega328P as the microcontroller. It is common and can be programmed with Arduino IDE.

You can take a look a the code below or you can download it from this link

int buttonPin = 15;
int potPin = 0;
int mosfetPin = 16;
int potVal = 0;

const int numReadings = 10;
int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int buttonState = 1;         // current state of the button, HIGH as we have active low with INPUT_PULLUP
int lastButtonState = 1;     // previous state of the button

const int ledCount = 10;    // the number of LEDs in the bar graph
int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};   

void setup() {
  
  // loop over the pin array and set them all to output:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
  }
  
  pinMode(mosfetPin, OUTPUT);  
  pinMode(buttonPin, INPUT);    
  pinMode(potPin, INPUT);  

  pinMode(2, OUTPUT); // Do not know why it did not set in the above for loop

}

void loop() {

  buttonState = digitalRead(buttonPin);
    // compare the buttonState to its previous state
    if (buttonState != lastButtonState) {
  
      if (buttonState == LOW) {  
        // wend from off to on:
          digitalWrite(mosfetPin, LOW);
       
      } else {
        // if the current state is LOW then the button
        // wend from on to off:

        digitalWrite(mosfetPin, HIGH); // sets the digital pin 13 on
        delay(average);            // waits for a second
        // if in full throtle do not make it of
        if (average < 999) {
          digitalWrite(mosfetPin, LOW);
        }
          
       
      }
      // Delay a little bit to avoid bouncing
      delay(50);
    }
    // save the current state as the last state,
    //for next time through the loop
    lastButtonState = buttonState;

  average = readPot();

  showLeds(average,50,1000);
 
}

int readPot() {
  
  return map(analogRead(potPin), 0, 1023, 50, 1000);
  
}

void showLeds(int avarage,int mymin,int mymax){

  int ledLevel = map(avarage, mymin, mymax, 0, ledCount);

  // loop over the LED array:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // if the array element's index is less than ledLevel,
    // turn the pin for this element on:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    }
    // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW);
    }
  }
  
}


3D Files 

I design the 3D printed files with Fusion360. It helped me a lot. You can download the STL files here


2D Dxf file

I laser cut 2mm aluminium sheet metal as the base for the Co2 regulator. You can download the file from the link


Syringe  

I use 5 ml and 3ml syringe with luer lock. It may be better to use a thinner syringe in order to reduce the air that is exhaust out. This way the Co2 cartridge can make more drops.