# 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