Arduino Led Controller
I wanted to make a box to control my led strips. I wanted it to be a hands on experiencie. So no apps!
Supplies
- 3x - 10kΩ potmeter Standaard
- 1x - Mean Well Power Supply - 5V 10A - Switching Power Supply - LRS-50-5
- 1x - 3 Way Switch On-Off-On - MTS-103
- 3x - WS2813 Digitale 5050 RGB LED Strip - 30 LEDs 1m
- 3x - Button 16mm - On-Off
- 1x - Arduino Uno
- 3x - 10kΩ Resistor
- Soldering Iron & Solder
- Case
Schematic
I had three led strips I wanted to control. So I chose to have 3 buttons to put them on or off separately, 3 pot meters to change the colours (hue value). One echo sensor so you can change the amount of LEDs lit.
I also have a three way switch. I decided I wanted 3 modes on that switch.
1. Off
2. Fully controllable with the potentiometers and buttons
3. Static colour where the controls where bypassed.
Soldering
The first things I soldered where the potentiometers than the buttons and the three-way switch and at last the echo sensor. After that, I built in the power supply and my Arduino.
I used a separate power supply even though my led strips where 5v. I had a total of 90 LEDs "pixels" that means I had to power 90 x 3 = 270 led. This used way more ampere than the Arduino could give it.
Coding
//library
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
//led strips #define NUM_LEDS_PER_STRIP 31
#define LED_TYPE WS2813 #define COLOR_ORDER GRB CRGB eenLeds[NUM_LEDS_PER_STRIP]; CRGB tweeLeds[NUM_LEDS_PER_STRIP]; CRGB drieLeds[NUM_LEDS_PER_STRIP];
//echo sensor const int TRIG_PIN = 12; const int ECHO_PIN = 13; const unsigned int MAX_DIST = 2900;
void setup() { Serial.begin(9600);
//echo sensor // The Trigger pin will tell the sensor to range find pinMode(TRIG_PIN, OUTPUT); digitalWrite(TRIG_PIN, LOW);
// fastled FastLED.addLeds(eenLeds, NUM_LEDS_PER_STRIP); FastLED.addLeds(tweeLeds, NUM_LEDS_PER_STRIP); FastLED.addLeds(drieLeds, NUM_LEDS_PER_STRIP);
//pot pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A3, INPUT);
//three way switch pinMode (10, INPUT); pinMode (11, INPUT);
//buttons pinMode (7, INPUT); pinMode (8, INPUT); pinMode (9, INPUT); }
int echosensor() {
unsigned long t1; unsigned long t2; unsigned long pulse_width; float cm; float inches;
// Hold the trigger pin high for at least 10 us digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW);
// Wait for pulse on echo pin while ( digitalRead(ECHO_PIN) == 0 );
// Measure how long the echo pin was held high (pulse width) // Note: the micros() counter will overflow after ~70 min t1 = micros(); while ( digitalRead(ECHO_PIN) == 1); t2 = micros(); pulse_width = t2 - t1;
// Print out results // if ( pulse_width > MAX_DIST ) { // Serial.println("Out of range"); // } else { // Serial.println(pulse_width); // }
// Wait at least 60ms before next measurement delay(60);
int echovalue = map(pulse_width, 200, 1500, 0, NUM_LEDS_PER_STRIP);
// Print out results if ( pulse_width > MAX_DIST || echovalue > 31 ) { return 31; } else { return echovalue; }
}
void loop() {
echosensor();
//three way switch int switchState2 = digitalRead(10); int switchState3 = digitalRead(11);
//functies en iff if (switchState2 == 1) { FastLED.clear (); } else if (switchState2 == 0 && switchState3 == 0) { fill_rainbow( &(eenLeds[0]), 30, 1); fill_rainbow( &(tweeLeds[0]), 30, 1); fill_rainbow( &(drieLeds[0]), 30, 1); } else if (switchState2 == 0 && switchState3 == 1) { ledsControl(); }
FastLED.show(); delay(30);
}
int ledsControl() {
int NumbersOfLeds = echosensor(); Serial.println(NumbersOfLeds);
//potHue1 int valuePotHue1 = analogRead(A1); int hue1 = map(valuePotHue1, 0, 1023, 0, 255);
//potHue2 int valuePotHue2 = analogRead(A0); int hue2 = map(valuePotHue2, 0, 1023, 0, 255);
//potHue3 int valuePotHue3 = analogRead(A2); int hue3 = map(valuePotHue3, 0, 1023, 0, 255);
FastLED.clear();
//button1 int buttonState1 = digitalRead(7);
if (buttonState1 == 1) { fill_solid( eenLeds, NUM_LEDS_PER_STRIP, CHSV(hue1, 255, 0)); } else if (buttonState1 == 0) { for (int led = 0; led < NumbersOfLeds; led++) { fill_solid( eenLeds, led, CHSV(hue1, 255, 155)); } }
//button2 int buttonState2 = digitalRead(8);
if (buttonState2 == 1) { fill_solid( tweeLeds, NUM_LEDS_PER_STRIP, CHSV(hue2, 255, 0)); } else if (buttonState2 == 0) { for (int led = 0; led < NumbersOfLeds; led++) { fill_solid( tweeLeds, led, CHSV(hue2, 255, 155)); } }
//button3 int buttonState3 = digitalRead(9);
if (buttonState3 == 1) { fill_solid( tweeLeds, NUM_LEDS_PER_STRIP, CHSV(hue3, 255, 0)); } else if (buttonState3 == 0) { for (int led = 0; led < NumbersOfLeds; led++) { fill_solid( drieLeds, led, CHSV(hue3, 255, 155)); } } }