Chevy NPP/Bi-Valve Exhaust Controller
thingiverse
Disclaimer: I am NOT responsible for any damage you may do. This is offered for free with no intention to profit, monetize or take responsibility for your actions. This was made possible by some amazing research from the C8 Corvette, adding the NPP RPO-code to cars that never came with the feature. I am sharing this information gathered between several websites and the code written by corvetteforum.com member CityOf9Gates, a super nice guy and was willing to talk to me years later about his earlier work. I am only adding the 3D printed case that can zip tie to the trunk/battery area. Two initial designs were done several years ago, one created the pulse width signal using hardware and the this one (what I think is more sustainable) uses a cheap Arduino microcontroller to do the job. A transistor is used to do the heavy lifting, as to protect the Arduino’s relatively low power output (think amplifier power wire on an old car stereo system) and a 12 Volt voltage regulator is used to keep everything tidy. It may get warm but shouldn’t get ‘hot’. The resistors keep the signal from bouncing from high to low, thereby opening the valve when you don’t want it to. This is a 9th grade level electrical project at its finest… Using Arduino: If you do not know how to open a sketch, include a library and compile/upload using an Arduino, there are great tutorials on youtube to show you how. You download the free software, download the library for PWM from here and install it in your Arduino Libaries https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads Then, copy and paste the following text into a new sketch: #include <PWM.h> // pwm-frequency-library #include <EEPROM.h> const int _pwmPin = 9; //pin9 on arduino board const int _buttonPin = 7; // pin7 on board bool _isRunning = true; bool ReadValveState() { int valveSt = EEPROM.read(0); //read the last valve state from memory if (valveSt == 1) { return true; } else { return false; } } void DoOpenValves()//sends a pwm signal to valves causing them to open { pwmWrite(_pwmPin, 203); } void DoCloseValves()//sends a pwm signal to valves causing them to close { pwmWrite(_pwmPin, 51); } void setup() { InitTimersSafe(); SetPinFrequencySafe(_pwmPin, 200); //sets the pwm pin frequency to 200 Hz pinMode(_pwmPin, OUTPUT); // sets the pwm pin as an output pin pinMode(_buttonPin, INPUT_PULLUP); //sets the input pin for the button pinMode(LED_BUILTIN, OUTPUT); if (ReadValveState() == true) //initialize the valves to the last state (if the valves were open when the car was turned off, the valves will be open when the car is turned on, etc { DoCloseValves(); } else { DoOpenValves(); } _isRunning = false; } void loop() //the main body of our arduino code, this is run over and over as long as there is power { if (_isRunning == false) //this is to prevent repeated button presses { if (digitalRead(_buttonPin) == LOW) //check the state of the button if it's pressed { _isRunning == true; if (ReadValveState() == true) //if the valves are closed, { EEPROM.write(0, 0); //set the new valve state and open the valves DoOpenValves(); } else //the must be opened { EEPROM.write(0, 1); //set the new valve state and close the valves DoCloseValves(); } FlashBuiltInLED(); // this will give a delay of 1 seconds this helps in debugging to know if your circuit is working when not connected to a valve. If your button is pressed and you see a flashing, then the button is triggering the open/close of the the valve pwm _isRunning == false; } } } void FlashBuiltInLED() { for (int i = 0; i <= 10; i++) { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on delay(100); // wait for tenth a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off delay(100); // wait for tenth a second } } Note: The Arduino will use a USB cable to upload the program. Once you’ve done that you will not need to use the USB any longer. The Arduino CAN run on 12V IF you power it through the Vin pin on the board. Doing this eliminates the need for a power adapter or any additional power supplies. Theory: Bi Valve controllers use 12 volts to power a motor that is CONTROLLED by a pulse width modulated signal. The Arduino controls on and off of this PWM signal by means of a pushbutton (which would require wiring to the front of the car, or an inexpensive wireless remote control). This simulates the controls of the 16 and 17 SS (or any car using this controller). The Arduino is an inexpensive and simple to replace part. It runs the code you upload to it every time you apply power. By writing the last memory of the button to its built in nonvolatile memory, the Arduino remembers if you had the valves open or closed on your last ignition cycle…. a nice addition. Parts list: Arduino Uno (generic is fine) https://www.amazon.com/ELEGOO-Board-ATmega328P-ATMEGA16U2-Compliant/dp/B01EWOE0UU/ref=sr_1_4?crid=1K6Y2P696JUCR&keywords=arduino+uno&qid=1676042593&sprefix=arduino+uno%2Caps%2C160&sr=8-4 Resistors: (you only need a few but these are what they look like. I used ½ watt as I like them better than ¼ watt to solder together; either should work fine) https://www.amazon.com/dp/B08FHPJ5G8?psc=1&ref=ppx_yo2ov_dt_b_product_details Remote Control (single button, automotive grade) https://www.amazon.com/dp/B08F7T2THH?psc=1&ref=ppx_yo2ov_dt_b_product_details Transistor (I like this one better than the one the Corvette guy used) https://www.digikey.com/en/products/detail/onsemi/KSD1616AGTA/1048586?s=N4IgTCBcDaINIGUAiBGAbOgggcQCqYGFcBaAOSRAF0BfIA 12V Voltage Regulator (any 7812 would work here, as would several other devices but this lets you run the whole shebang from your fuse panel in the trunk and no issues with power) https://www.digikey.com/en/products/detail/rohm-semiconductor/BA7812CP-E2/2357078?s=N4IgTCBcDaIEIEEDsAOAjGAwgBQLQFEsAVXAOQBEQBdAXyA Connectors for the muffler controllers. These are the GM factory pieces, they are used in other applications: Connector body: (order 2) https://www.mouser.com/ProductDetail/TE-Connectivity/1-1718806-1?qs=GQ3BsEl46plaAad1FW4V%2Fg%3D%3D Contact Pins: (order 6 minimum but you may want a few spares) https://www.mouser.com/ProductDetail/TE-Connectivity-AMP/7-1452668-1-Loose-Piece?qs=u4fy%2FsgLU9N8brtj9fejMQ%3D%3D Seals: (you’ll need 10, but they’re small so order a few extra) https://www.mouser.com/ProductDetail/TE-Connectivity/967056-1?qs=0%2FgE9CgFqPz6uB5nwJRlHA%3D%3D Some sort of a project board, I used this shield so I can plug it into the Arduino: https://www.amazon.com/dp/B00Q9YB7PI?psc=1&ref=ppx_yo2ov_dt_b_product_details CityOf9’s drawing is perfect. It shows what pins to connect and where to make connections. He shows it in color lines, I recommend printing a copy of it out in COLOR when you start. This eliminates the need for guessing. A transistor in this application is acting like a relay, it will last for many years in this capacity. The wiring is up to you. I will measure my wiring length when I install my setup, I recommend a roll of wire in 3 different colors just to simplify things. Small gauge is fine, these don’t take much current. I will hunt around for a good fuse to piggyback off of. I am thinking there is an Auxiliary fuse opening in the back, that will be perfect for this.
With this file you will be able to print Chevy NPP/Bi-Valve Exhaust Controller with your 3D printer. Click on the button and save the file on your computer to work, edit or customize your design. You can also find more 3D designs for printers on Chevy NPP/Bi-Valve Exhaust Controller .