At the SEMA Show last fall an air compressor company I've done some work for gave me two small compressors suitable for air bag systems. I've got AirLift 1000 systems in the rear of all three of my Jeeps and I've always inflated them as necessary with a hand bicycle pump, but I wanted to experiment with a small compressor for this purpose so I asked the compressor company for some samples to play with and they gave me these:
But more than just connecting a compressor to the air bags, my plan was to experiment with microprocessor control of the airbag system. A microprocessor is way overkill and really unnecessary for a simple load enhancement air bag application, but I've always wanted to get into microprocessor control of real-world hardware and this seemed like a fun place to start. This project may not become anything more than a bench test science experiment because my bicycle pump works just fine for maintaining and adjusting the pressure in the air bags I currently have, but I thought it would be a fun and educational project that could lead to other things.
I put together a test fixture so I could experiment with the air bag hardware at my workbench. It's got only one air bag because that's enough to test the system for now and it simulates what's in my Jeeps because in all 3 Jeeps both rear air bags are plumbed together.
Besides the compressor, the key hardware components are a pressure transducer, which will provide the microprocessor with the pressure in the system, and a solenoid-operated pressure release valve, which the microprocessor can open to bring the pressure in the system down when needed.
The manual pressure release and the pressure gauge on the fixture are just for test purposes. The pressure gauge will be used to help calibrate the pressure transducer's data and the manual pressure release will allow me to manually reduce the pressure to test whether the microprocessor responds correctly to an unplanned reduction in pressure.
On the microprocessor side, I used an Arduino Uno microcontroller board. The Uno is based on the ATmega328P, which is an 8-bit microprocessor with 32kb of on-board programmable flash memory. The board has 14 digital input/output pins, 6 analog inputs, a USB connection, a power jack and more. It's the larger board in this photo:
Also in the photo are a 12v to 5v voltage regulator which can power the electronics when installed in the Jeep, a voltage sensor which will interface the pressure transducer to one of the Uno's analog inputs, a relay board which will control the compressor and the solenoid pressure release and will interface to the Uno's digital output ports (a single relay is shown in this photo but a dual relay will be used, I didn't have the dual relay on hand when this photo was taken). And finally, a small OLED display for showing system status.
I started by writing small programs to control each of the devices individually, with the idea that when I had figured out the code to interface to and control each device, I could combine all of the code into a single main program. In this next photo, I'm testing the OLED display. Also in this photo the Arduino microprocessor board is connected to my laptop via USB so the laptop can download code to the microprocessor's flash ram:
All of the components are connected in this next photo. The box on the left is a 12v 30a DC power supply, a stand-in for the Jeep's battery, it provides power for the system.
A closer look at the microprocessor and related circuitry:
All of the circuitry is simply breadboarded together at this point, I'd make a PC board if I planned to use this in the Jeeps. The two round black things on the breadboard are momentary pushbutton switches which are used to request airing up or airing down. Currently the code increases/decreases in 5 lb. psi. increments because less than that isn't really meaningful to the Airlift air bags, but the increments are easily changed in the code if needed. Also the last requested pressure setting is saved in the microprocessor's EEPROM so when the vehicle is shut off and later restarted the airbag system will revert to that last pressure setting. The square black thing to the left of the switches is the OLED display, nothing is showing on it because the circuit isn't powered up right now but it will show both the current pressure in the bags and the requested pressure as entered via the switches. The blue USB cable connects to my laptop and is used to download compiled code to the microprocessor.
After combining all the code fragments into a single main program there were a few electronic issues to solve, for example when the solenoid air valve shut off it sent a reverse voltage spike through the system that sometimes crashed the microprocessor (a diode fixed that). Also the pressure transducer has some "bobble" in it - when the pressure changes, it takes a while for the transducer to settle down and because of that the microprocessor would obey the transducer and cycle on and off around the exact pressure until the transducer settled on a final reading. I was able to work around the bobble in the code. Both of these are things that ordinary coding on a computer would never experience, but when you're dealing with the real world to some degree real world anomalies are more in control than your code. But all is working now, so here's a demo:
So what? That's a lot of technology to replace what I currently do with a bicycle pump. True, but this is just a first step - now that the basic system is working, it could be expanded, perhaps to create an active suspension system that can control airbags at all 4 corners of the Jeep to maintain ride height and load balance, or with different air bags than the Airlift 1000's it could be used to control a variable lift system - no lift for daily driving or higher lift for trail clearance. With the addition of an attitude/angle sensor (a less than $1 component), the air bag(s) at the low corner/low side of the Jeep on the trail could be increased in height to improve trail stability. Or, using a different version of the Arduino board with a Bluetooth interface an app could be built to control the airbags. There's a lot that could be built based on the simple starting point that I've implemented.
I will be turning the over the code, circuit diagram and component specs of the airbag project to the compressor company - they expressed enough interest in the project to give me the compressors; I don't know if they'll want to do anything with it now that's it's working but perhaps they'll be interested in marketing a low-cost digital controller for load-management air bag systems based on this project. The electronics could easily be turned from the breadboarded wiring I've done into a very compact PC board and the total electronic component cost at the manufacturing level would be less than $25 so a simple plug and play digital airbag controller is practical.
I'm not sure where I'll take this project next but it's been a lot of fun making all of these components work together and interfacing the microprocessor to the real world. The quirks of real world devices provided coding challenges I'd never experienced in my tens of thousands of lines of code experience so it was a great learning project as well. I do have some other ideas I might pursue, such as interfacing the microprocessor to the OBDII port; in my '06's it wouldn't be able to do much except monitor engine parameters but in my JK it could possibly control accessories on the Jeep's CAN bus. But for the moment I'll call this "science project" done.
Happy to provide more details or answer any questions anyone might have.
But more than just connecting a compressor to the air bags, my plan was to experiment with microprocessor control of the airbag system. A microprocessor is way overkill and really unnecessary for a simple load enhancement air bag application, but I've always wanted to get into microprocessor control of real-world hardware and this seemed like a fun place to start. This project may not become anything more than a bench test science experiment because my bicycle pump works just fine for maintaining and adjusting the pressure in the air bags I currently have, but I thought it would be a fun and educational project that could lead to other things.
I put together a test fixture so I could experiment with the air bag hardware at my workbench. It's got only one air bag because that's enough to test the system for now and it simulates what's in my Jeeps because in all 3 Jeeps both rear air bags are plumbed together.
Besides the compressor, the key hardware components are a pressure transducer, which will provide the microprocessor with the pressure in the system, and a solenoid-operated pressure release valve, which the microprocessor can open to bring the pressure in the system down when needed.
The manual pressure release and the pressure gauge on the fixture are just for test purposes. The pressure gauge will be used to help calibrate the pressure transducer's data and the manual pressure release will allow me to manually reduce the pressure to test whether the microprocessor responds correctly to an unplanned reduction in pressure.
On the microprocessor side, I used an Arduino Uno microcontroller board. The Uno is based on the ATmega328P, which is an 8-bit microprocessor with 32kb of on-board programmable flash memory. The board has 14 digital input/output pins, 6 analog inputs, a USB connection, a power jack and more. It's the larger board in this photo:
Also in the photo are a 12v to 5v voltage regulator which can power the electronics when installed in the Jeep, a voltage sensor which will interface the pressure transducer to one of the Uno's analog inputs, a relay board which will control the compressor and the solenoid pressure release and will interface to the Uno's digital output ports (a single relay is shown in this photo but a dual relay will be used, I didn't have the dual relay on hand when this photo was taken). And finally, a small OLED display for showing system status.
I started by writing small programs to control each of the devices individually, with the idea that when I had figured out the code to interface to and control each device, I could combine all of the code into a single main program. In this next photo, I'm testing the OLED display. Also in this photo the Arduino microprocessor board is connected to my laptop via USB so the laptop can download code to the microprocessor's flash ram:
All of the components are connected in this next photo. The box on the left is a 12v 30a DC power supply, a stand-in for the Jeep's battery, it provides power for the system.
A closer look at the microprocessor and related circuitry:
All of the circuitry is simply breadboarded together at this point, I'd make a PC board if I planned to use this in the Jeeps. The two round black things on the breadboard are momentary pushbutton switches which are used to request airing up or airing down. Currently the code increases/decreases in 5 lb. psi. increments because less than that isn't really meaningful to the Airlift air bags, but the increments are easily changed in the code if needed. Also the last requested pressure setting is saved in the microprocessor's EEPROM so when the vehicle is shut off and later restarted the airbag system will revert to that last pressure setting. The square black thing to the left of the switches is the OLED display, nothing is showing on it because the circuit isn't powered up right now but it will show both the current pressure in the bags and the requested pressure as entered via the switches. The blue USB cable connects to my laptop and is used to download compiled code to the microprocessor.
After combining all the code fragments into a single main program there were a few electronic issues to solve, for example when the solenoid air valve shut off it sent a reverse voltage spike through the system that sometimes crashed the microprocessor (a diode fixed that). Also the pressure transducer has some "bobble" in it - when the pressure changes, it takes a while for the transducer to settle down and because of that the microprocessor would obey the transducer and cycle on and off around the exact pressure until the transducer settled on a final reading. I was able to work around the bobble in the code. Both of these are things that ordinary coding on a computer would never experience, but when you're dealing with the real world to some degree real world anomalies are more in control than your code. But all is working now, so here's a demo:
So what? That's a lot of technology to replace what I currently do with a bicycle pump. True, but this is just a first step - now that the basic system is working, it could be expanded, perhaps to create an active suspension system that can control airbags at all 4 corners of the Jeep to maintain ride height and load balance, or with different air bags than the Airlift 1000's it could be used to control a variable lift system - no lift for daily driving or higher lift for trail clearance. With the addition of an attitude/angle sensor (a less than $1 component), the air bag(s) at the low corner/low side of the Jeep on the trail could be increased in height to improve trail stability. Or, using a different version of the Arduino board with a Bluetooth interface an app could be built to control the airbags. There's a lot that could be built based on the simple starting point that I've implemented.
I will be turning the over the code, circuit diagram and component specs of the airbag project to the compressor company - they expressed enough interest in the project to give me the compressors; I don't know if they'll want to do anything with it now that's it's working but perhaps they'll be interested in marketing a low-cost digital controller for load-management air bag systems based on this project. The electronics could easily be turned from the breadboarded wiring I've done into a very compact PC board and the total electronic component cost at the manufacturing level would be less than $25 so a simple plug and play digital airbag controller is practical.
I'm not sure where I'll take this project next but it's been a lot of fun making all of these components work together and interfacing the microprocessor to the real world. The quirks of real world devices provided coding challenges I'd never experienced in my tens of thousands of lines of code experience so it was a great learning project as well. I do have some other ideas I might pursue, such as interfacing the microprocessor to the OBDII port; in my '06's it wouldn't be able to do much except monitor engine parameters but in my JK it could possibly control accessories on the Jeep's CAN bus. But for the moment I'll call this "science project" done.
Happy to provide more details or answer any questions anyone might have.