Transform your car's RPM data into a stunning visual experience! ๐
๐ Features โข ๐ท Demo โข ๐ง Installation โข โ๏ธ Configuration โข ๐ค Contributing
Ever wanted to see your engine's RPM in real-time with a cool LED strip? This project reads OBD2 data directly from your BMW and creates a dynamic RPM tachometer using WS2813 addressable LEDs!
- Real-time RPM visualization ๐
- Color-coded performance zones ๐
- Warning blinks at redline
โ ๏ธ - Plug-and-play OBD2 connection ๐
https://github.com/Arsalan134/BMW-OBD2/blob/master/๐%20bmw_rpm.mp4
Watch your BMW's engine come alive with real-time RPM visualization!
- Smooth Color Transitions: Yellow to red gradient based on RPM
- Real-time Response: Instant LED updates as engine speed changes
- Warning System: Dramatic red blinking at high RPM
- Rainbow Standby: Beautiful flowing colors when engine is off
๐ก Idle Zone (700-1500 RPM) โ Yellow/Green LEDs
๐ Cruise Zone (1500-3000 RPM) โ Orange LEDs
๐ด Power Zone (3000-5000 RPM) โ Red LEDs
โ ๏ธ Danger Zone (5000+ RPM) โ Blinking Red Warning!
- ๐ Real-time RPM Visualization: Dynamic LED strip that fills up based on engine RPM
โ ๏ธ Redline Warning: Aggressive blinking when RPM exceeds safe limits- ๐ Adjustable Brightness: 4 brightness levels controlled by a physical button
- ๐ฏ BMW Optimized: Pre-configured RPM ranges for BMW engines
- ๐ง Dual Environment: Test mode for bench testing without a running engine
Component | Specification | Purpose |
---|---|---|
Arduino Uno | ATmega328P | Main controller |
OBD2 Shield/Module | CAN Bus compatible | Read vehicle data |
WS2813 LED Strip | 9 LEDs (configurable) | Visual display |
Push Button | Momentary switch | Brightness control |
Resistors | 10kฮฉ pull-up | Button debouncing |
Arduino Uno โ Component
Pin 3 โ LED Strip Data (WS2813)
Pin 7 โ Button (with 10kฮฉ pull-up)
5V โ LED Strip VCC
GND โ LED Strip GND + Button GND
OBD2 Shield โ Stacked on Arduino
The LED strip responds to different RPM ranges with stunning visual effects:
- Idle Range: 700-2000 RPM โ Smooth yellow-to-red gradient
- Warning Zone: 2300+ RPM โ Aggressive red blinking
- LED Count: 9 LEDs for precise visualization
- Operating Range: 3000-5000 RPM โ Dynamic color mapping
- Danger Zone: 5200+ RPM โ Critical warning blinks
- Engine Off: <100 RPM โ Rainbow standby mode
- Short Press: Cycle through 4 brightness levels (5, 50, 150, 255)
- Long Press (1s+): Reserved for future features
- Auto-Off: LEDs turn off when engine is stopped (<100 RPM)
# Install PlatformIO (if not already installed)
pip install platformio
# Clone the repository
git clone <your-repo-url>
cd BMW-OBD2
Edit include/main.h
:
// Comment this line for real BMW testing
#define isTesting // For bench testing
// Uncomment for real vehicle use
// #undef isTesting
# Build the project
pio run
# Upload to Arduino
pio run --target upload
# Monitor serial output
pio device monitor
- Connect your Arduino to the BMW OBD2 port
- Mount the LED strip in your desired location
- Secure all connections and test functionality
When the engine is off or RPM is below threshold, enjoy a mesmerizing rainbow pattern that flows across the LED strip with dynamic brightness variations.
- Yellow Zone: Low RPM - Efficient driving range
- Orange Zone: Medium RPM - Performance driving
- Red Zone: High RPM - Maximum performance
- Blinking Red: Danger zone - Protect your engine!
// Edit in main.h
#define RPM_MIN 700 // Start visualization
#define RPM_MAX 2000 // Full LED strip
#define BLINK_RPM_THRESHOLD 2300 // Warning threshold
#define NUM_LEDS 9 // Change to your strip length
#define BLINK_DURATION 75 // milliseconds
- OBD2 Library - Communication with vehicle ECU
- FastLED - High-performance LED control
- Arduino CAN - CAN bus communication
Issue | Solution |
---|---|
No RPM data | Check OBD2 connection and vehicle compatibility |
LEDs not responding | Verify wiring and power supply |
Incorrect RPM values | Adjust RPM_MIN/MAX in configuration |
Button not working | Check pull-up resistor and wiring |
- Multi-Parameter Display: Show speed, coolant temp, fuel level
- Wireless Connectivity: Bluetooth/WiFi data streaming
- Mobile App: Remote monitoring and configuration
- Data Logging: SD card storage for performance analysis
- Custom Profiles: Different visual themes per driving mode
Feel free to contribute to this project! Here's how:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for full details.
- โ Commercial Use - You can use this code in commercial projects
- โ Modification - You can modify and improve the code
- โ Distribution - You can share and redistribute the code
- โ Private Use - You can use it for personal projects
- โน๏ธ Attribution Required - Just include the original license notice
The MIT License is one of the most permissive open-source licenses, making it easy for others to use and contribute to this project!
Arsalan Iravani
iOS Developer & Electronics Enthusiast passionate about bridging digital and physical worlds
This project is for educational and entertainment purposes. Always ensure safe driving practices and comply with local traffic laws. Modifications to vehicle electronics should be performed by qualified professionals.
Made with โค๏ธ for BMW enthusiasts and Arduino hackers alike!