Initial commit: D1 Mini Blinkin LED Driver Emulator for FTC
This commit is contained in:
commit
dca4c4cb26
12 changed files with 2155 additions and 0 deletions
209
README.md
Normal file
209
README.md
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
# D1 Mini Blinkin LED Driver Emulator
|
||||
|
||||
This project allows a D1 Mini (ESP8266) to emulate a REV Blinkin LED Driver, enabling control of WS2812B LED strips via PWM signals from an FTC robot's REV Control Hub or Expansion Hub.
|
||||
|
||||
## Features
|
||||
|
||||
- **Full Blinkin Pattern Support**: Emulates 100+ Blinkin patterns including solid colors, animations, and effects
|
||||
- **PWM Signal Input**: Reads standard servo PWM signals (900-2100 microseconds)
|
||||
- **60 LED Support**: Configured for 60 WS2812B LEDs (adjustable in code)
|
||||
- **FastLED Library**: High-performance LED control with color correction
|
||||
- **Debug Mode**: Serial output for troubleshooting PWM values and patterns
|
||||
- **No WiFi**: WiFi disabled to save power and improve performance
|
||||
|
||||
## Hardware Requirements
|
||||
|
||||
- D1 Mini (ESP8266) or compatible board
|
||||
- WS2812B LED strip (60 LEDs default, adjustable)
|
||||
- Voltage divider circuit (5V to 3.3V for PWM input)
|
||||
- 5V power supply capable of 3-4A for 60 LEDs
|
||||
- REV Control Hub or Expansion Hub
|
||||
|
||||
## Wiring Connections
|
||||
|
||||
### PWM Signal Input (from REV Hub Servo Port)
|
||||
**IMPORTANT**: The REV Hub outputs 5V PWM signals. The D1 Mini requires 3.3V input. You MUST use a voltage divider!
|
||||
|
||||
```
|
||||
REV Hub Servo Port | Voltage Divider | D1 Mini
|
||||
-------------------|-----------------|----------
|
||||
Signal (White) | Input → Output | D2 (GPIO4)
|
||||
Power (Red) | - | 5V
|
||||
Ground (Black) | - | GND
|
||||
```
|
||||
|
||||
### Voltage Divider Circuit
|
||||
```
|
||||
REV PWM Signal (5V) ──┬── R1 (2.2kΩ) ──┬── To D1 Mini D2
|
||||
│ │
|
||||
│ R2 (3.3kΩ)
|
||||
│ │
|
||||
GND ───────────────┴── GND
|
||||
```
|
||||
|
||||
### LED Strip Connection
|
||||
```
|
||||
D1 Mini Pin | LED Strip | Description
|
||||
-------------|--------------|-------------
|
||||
D4 (GPIO2) | Data In | LED data signal
|
||||
5V | 5V | Power (use external supply)
|
||||
GND | GND | Ground
|
||||
```
|
||||
|
||||
**Power Note**: For 60 LEDs at full brightness, current draw can reach 3.6A. Use an external 5V power supply, not the REV Hub's servo power.
|
||||
|
||||
## Software Setup
|
||||
|
||||
### Method 1: PlatformIO (Recommended)
|
||||
|
||||
1. Install [Visual Studio Code](https://code.visualstudio.com/)
|
||||
2. Install PlatformIO IDE extension
|
||||
3. Clone this repository
|
||||
4. Open project folder in VS Code
|
||||
5. Connect D1 Mini via USB
|
||||
6. Click PlatformIO: Upload (→) in the bottom toolbar
|
||||
|
||||
### Method 2: Arduino IDE
|
||||
|
||||
1. Install [Arduino IDE](https://www.arduino.cc/en/software)
|
||||
2. Add ESP8266 Board Support:
|
||||
- File → Preferences → Additional Board Manager URLs:
|
||||
- Add: `http://arduino.esp8266.com/stable/package_esp8266com_index.json`
|
||||
- Tools → Board → Board Manager → Search "ESP8266" → Install
|
||||
3. Install FastLED Library:
|
||||
- Tools → Manage Libraries → Search "FastLED" → Install
|
||||
4. Select Board: Tools → Board → "LOLIN(WEMOS) D1 R2 & mini"
|
||||
5. Open `src/main.cpp` and upload
|
||||
|
||||
## FTC Robot Configuration
|
||||
|
||||
### Hardware Configuration
|
||||
1. Connect the voltage divider output to a servo port on the REV Hub
|
||||
2. In the Robot Controller app, configure the servo in your hardware map
|
||||
3. Name it something meaningful like "blinkin" or "ledDriver"
|
||||
|
||||
### Example FTC Java Code
|
||||
|
||||
```java
|
||||
import com.qualcomm.robotcore.hardware.Servo;
|
||||
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
|
||||
|
||||
public class BlinkinExample extends LinearOpMode {
|
||||
private Servo blinkin;
|
||||
|
||||
@Override
|
||||
public void runOpMode() {
|
||||
// Initialize
|
||||
blinkin = hardwareMap.get(Servo.class, "blinkin");
|
||||
|
||||
// Set to solid red (pattern value from Blinkin manual)
|
||||
blinkin.setPosition(0.61); // Solid Red
|
||||
|
||||
waitForStart();
|
||||
|
||||
while (opModeIsActive()) {
|
||||
// Alliance color selection
|
||||
if (gamepad1.x) {
|
||||
blinkin.setPosition(0.87); // Solid Blue
|
||||
} else if (gamepad1.b) {
|
||||
blinkin.setPosition(0.61); // Solid Red
|
||||
} else if (gamepad1.a) {
|
||||
blinkin.setPosition(0.77); // Solid Green
|
||||
} else if (gamepad1.y) {
|
||||
blinkin.setPosition(0.93); // Solid White
|
||||
}
|
||||
|
||||
// Special effects
|
||||
if (gamepad1.left_bumper) {
|
||||
blinkin.setPosition(0.41); // Rainbow
|
||||
}
|
||||
if (gamepad1.right_bumper) {
|
||||
blinkin.setPosition(0.43); // Confetti
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Common Blinkin Pattern Values
|
||||
|
||||
| Pattern | Servo Position | PWM (μs) | Description |
|
||||
|---------|---------------|----------|-------------|
|
||||
| Rainbow | 0.41 | 1005 | Rainbow palette |
|
||||
| Confetti | 0.43 | 1015 | Random colored pixels |
|
||||
| Red Shot | 0.53 | 1065 | Red chase pattern |
|
||||
| Blue Shot | 0.54 | 1075 | Blue chase pattern |
|
||||
| Red | 0.61 | 1505 | Solid red |
|
||||
| Orange | 0.65 | 1535 | Solid orange |
|
||||
| Yellow | 0.69 | 1555 | Solid yellow |
|
||||
| Green | 0.77 | 1595 | Solid green |
|
||||
| Blue | 0.87 | 1645 | Solid blue |
|
||||
| Violet | 0.91 | 1665 | Solid violet |
|
||||
| White | 0.93 | 1675 | Solid white |
|
||||
| Black/Off | 0.99 | 1695 | All LEDs off |
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit these values in `src/main.cpp`:
|
||||
|
||||
```cpp
|
||||
#define NUM_LEDS 60 // Number of LEDs in your strip
|
||||
#define BRIGHTNESS 100 // Brightness (0-255)
|
||||
#define DEBUG_MODE true // Serial debug output
|
||||
```
|
||||
|
||||
## Testing & Debugging
|
||||
|
||||
1. **Serial Monitor**: Connect via USB and open serial monitor at 115200 baud
|
||||
- Shows current PWM value and selected pattern
|
||||
- Displays startup messages and status
|
||||
|
||||
2. **LED Test**: On startup, a green sweep animation indicates the system is ready
|
||||
|
||||
3. **Manual PWM Test**: Use a servo tester to send PWM signals and verify pattern changes
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### LEDs not lighting up
|
||||
- Check 5V power supply (must provide sufficient current)
|
||||
- Verify D4 (GPIO2) is connected to LED data line
|
||||
- Confirm ground connections between all components
|
||||
|
||||
### Wrong patterns displaying
|
||||
- Verify voltage divider is working (PWM signal must be ~3.3V)
|
||||
- Check serial monitor for PWM values (should be 900-2100μs)
|
||||
- Ensure servo position in FTC code is between 0.0 and 1.0
|
||||
|
||||
### Erratic behavior
|
||||
- Add a 1000μF capacitor across LED power lines
|
||||
- Add a 470Ω resistor between D4 and LED data
|
||||
- Ensure all grounds are connected together
|
||||
|
||||
### Pattern doesn't match Blinkin
|
||||
- Some complex patterns may differ slightly from original Blinkin
|
||||
- Adjust PWM thresholds in `pwmToPattern()` function if needed
|
||||
|
||||
## Power Calculations
|
||||
|
||||
- Each WS2812B LED: ~60mA at full white brightness
|
||||
- 60 LEDs × 60mA = 3.6A maximum
|
||||
- With brightness set to 100/255: ~1.4A typical
|
||||
- D1 Mini consumption: ~80mA
|
||||
- **Recommended PSU: 5V 4A minimum**
|
||||
|
||||
## Build Guide Documentation
|
||||
|
||||
Additional documentation is available:
|
||||
- [INSTALLATION_GUIDE.md](INSTALLATION_GUIDE.md) - Detailed setup instructions
|
||||
- [VOLTAGE_DIVIDER_BUILD_GUIDE.md](VOLTAGE_DIVIDER_BUILD_GUIDE.md) - How to build the voltage divider
|
||||
- [VOLTAGE_DIVIDER_ALTERNATIVES.md](VOLTAGE_DIVIDER_ALTERNATIVES.md) - Alternative protection methods
|
||||
- [QUICK_FLASH_GUIDE.md](QUICK_FLASH_GUIDE.md) - Quick programming reference
|
||||
|
||||
## License
|
||||
|
||||
This project is open source and available for FTC teams to use and modify.
|
||||
|
||||
## Credits
|
||||
|
||||
Created for Kraken Koders FTC Team
|
||||
Based on REV Blinkin LED Driver patterns and functionality
|
||||
Loading…
Add table
Add a link
Reference in a new issue