PÄ hytta hadde jeg en vegg der jeg Þnsket meg noe indirekte lys. En LED stripe hadde vÊrt fint men skulle jeg sette den litt ned pÄ veggen for Ä lyse pÄ taket eller skulle jeg sette den i taket for Ä lyse ned pÄ veggen? Hmmm hva med Ä gjÞre den styrbar med en steppermotor og tilte den som det passet meg?
Â
En U aluminiumsprofl med plass til en LED stripe med adresserbare LEDs.
Profilene kunne henges opp i hver ende med et ELFA garderobestang-feste slik som dette:
Â
Â
med en 3D printet pluggÂ
Â
Â
Og sÄ mÄtte jeg ha en boks pÄ midten der jeg hadde elektronikken og en steppermotor:
Â
Â
Det var allerede et lampepunkt i taket og boksen ble laget stor nok til Ă„ dekke dette.
Â
Fordi steppermotoren jeg hadde var 5V og ganske svak mÄtte jeg ha et gir. Onshape har ferdige rutiner for Wormgear sÄ jeg definerte et sÄnn passe stort ett:
Â
Â
SÄ ble det ganske mye fikling og mÄling, modellering og testprinting:
Â
Â
Og nĂ„r alt var pĂ„ plass og skulle testes sĂ„ vise det seg at poweret fra Ali var av dĂ„rlig kvalitet og sank spenningen nĂ„r det ble belastet slik at ESP32'en restartet đ
Nytt power ble bestillt men jeg orket ikke Ä printe en ny boks sÄ det fikk vÊre at den var litt oversized:
Â
Stepperen er en slik:
Â
Â
og drives av en ULN2003 som ofte fÞlger med nÄr du kjÞper se smÄ stepperne
Â
Â
For Ä slippe Ä mÄtte styre de hÞye strÞmmene med MOS-FET brukte jeg selvfÞlgelig adresserbare LED
Â
Â
SĂ„ var det bare Ă„ skru alt opp i taket:
Â
Â
Fordi lyspunktet i taket styres av en fysisk bryter er det programmert slik at den husker siste innstilling av farge og lysstyrke.
NĂ„r den starter tenner den lysene en og en utover (because I can!)Â
Â
Etter litt testing tror jeg jeg har funnet den optimale vinkelen sĂ„ det er ikke sikkert jeg lager sĂ„ mye Alexa kommandoer for Ă„ justere denne, men barnebarna har fĂ„tt en egen regnbue kommando da đ
Â
Her er en video der jeg skrur pÄ strÞmmen og ber Alexa om rainbow:
Â
Â
ForelÞpig har HS bare fÄtt disse devicene for testing:
Â
Â
Â
Her er koden rÄ, dere fÄr heller spÞrre om dere lurer pÄ noe.
Tar gjerne tips om ting som kan gjÞres bedre ogsÄ.
Â
Sitat#include <Preferences.h>#include "FastLED.h"#include "FastLED_RGBW.h"#include <EspMQTTClient.h>#define NUM_LEDS 193#define DATA_PIN 4 //GPIO nr#define DATA_PIN2 2CRGBW leds[NUM_LEDS];CRGB *ledsRGB = (CRGB *) &leds[0];const uint8_t brightness = 255;#include <Stepper.h>ÂPreferences preferanser;Âconst int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolutionÂ// ULN2003 Motor Driver Pins#define MOTORPIN1 19 //GPIO nr#define MOTORPIN2 18#define MOTORPIN3 5#define MOTORPIN4 17Â// initialize the stepper libraryStepper myStepper(stepsPerRevolution, MOTORPIN1, MOTORPIN3, MOTORPIN2, MOTORPIN4);Âint lastRed;int lastGreen;int lastBlue;int lastWhite;volatile int newRed;volatile int newGreen;volatile int newBlue;volatile int newWhite;Â//MQTTEspMQTTClient MQTTclient( "thePromisedLAN", "pwd", "192.168.x.x",  // MQTT Broker server ip "",  // MQTTUsername Can be omitted if not needed "",  // MQTTPassword Can be omitted if not needed "takLEDClient",   // Client name that uniquely identify your device 1883        // The MQTT port, default to 1883. this line can be omitted);Â// ****************************************void setup() { // initialize the serial port Serial.begin(115200); // Prefs preferanser.begin("Prefs",false); lastRed=preferanser.getShort("red",100); lastGreen=preferanser.getShort("green",100); lastBlue=preferanser.getShort("blue",100); lastWhite=preferanser.getShort("white",100); // FastLED FastLED.addLeds<WS2812B, DATA_PIN, RGB>(ledsRGB, getRGBWsize(NUM_LEDS)); FastLED.addLeds<WS2812B, DATA_PIN2, RGB>(ledsRGB, getRGBWsize(NUM_LEDS)); FastLED.setBrightness(brightness); FastLED.show(); show_last_colors(); MQTTclient.setKeepAlive(60); MQTTclient.enableHTTPWebUpdater("meg","hemmelig"); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overridded with enableHTTPWebUpdater("user", "password"). MQTTclient.enableOTA("pwd"); // Enable OTA (Over The Air) updates. Password defaults to MQTTPassword. Port is the default OTA port. Can be overridden with enableOTA("password", port).Â//Stepper myStepper.setSpeed(10); Â}Âvoid roter (int nRot) { // step one revolution in the other direction: Serial.print("Roter:"); nRot=nRot * 1000; Serial.println(nRot); myStepper.step(nRot);}Â// ***************************************void loop() {  MQTTclient.loop();//  colorFill(CRGB::Red);//  colorFill(CRGB::Green);//  colorFill(CRGB::Blue);//  fillWhite(); //delay(1000);  // LED Connection status  if (MQTTclient.isMqttConnected() && MQTTclient.isWifiConnected() ) {   //     Serial.println("Mqtt wifi");   }  if (!MQTTclient.isMqttConnected() && MQTTclient.isWifiConnected() ) {    leds[NUM_LEDS-1] = CRGBW(0, 0, 255, 0); // blue  for wait MQTT   //  Serial.println("!Mqtt wifi");   }  if (!MQTTclient.isMqttConnected() && !MQTTclient.isWifiConnected() ) {    leds[NUM_LEDS-1] = CRGBW(255, 0, 0, 0); // red for wait WiFi   //  Serial.println("!Mqtt !wifi");   }}Â//********************************Âvoid show_last_colors() {  for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CRGBW(lastRed, lastGreen, lastBlue, lastWhite);   FastLED.show();  delay(10); } leds[NUM_LEDS-1] = CRGBW(255, 0, 0, 0); // red for wait WiFi FastLED.show();}Âvoid show_new_colors() {  for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CRGBW(lastRed, lastGreen, lastBlue, lastWhite); } FastLED.show();}Âvoid skruAvPower() { digitalWrite(MOTORPIN1,LOW); digitalWrite(MOTORPIN2,LOW); digitalWrite(MOTORPIN3,LOW); digitalWrite(MOTORPIN4,LOW); Â}void colorFill(CRGB c){ for(int i = 0; i < NUM_LEDS; i++){  leds[i] = c;  FastLED.show();  delay(20); } delay(500);}void fillWhite(){ for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CRGBW(0, 0, 0, 255);  FastLED.show();  delay(30); } delay(500);}void fillLast(){ for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CRGBW(lastRed, lastGreen, lastBlue, lastWhite); } FastLED.show();}void fillall(){ for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CRGBW(255, 255, 255, 255);  FastLED.show();  delay(15); } delay(500);}void rainbow(){ static uint8_t hue; for(int i = 0; i < NUM_LEDS; i++){  leds[i] = CHSV((i * 256 / NUM_LEDS) + hue, 255, 255); } FastLED.show(); hue++;}void rainbowLoop(int nSec){ long millisIn = millis(); long loopTime = nSec * 1000; //  seconds while(millis() < millisIn + loopTime){  rainbow();  delay(5); }}    ÂÂvoid onConnectionEstablished(){  Serial.println("onConnectionEstablished"); leds[NUM_LEDS-1] = CRGBW(lastRed, lastGreen, lastBlue, lastWhite); FastLED.show(); MQTTclient.publish("takLEDClient/status", "started"); // You can activate the retain flag by setting the third parameter to true MQTTclient.subscribe("takLEDClient/red", [](const String & payload) { Serial.print("red: ");  Serial.println(payload);  lastRed=payload.toInt();  preferanser.putShort("red",lastRed);  show_new_colors(); }); MQTTclient.subscribe("takLEDClient/green", [](const String & payload) { Serial.print("green: ");  Serial.println(payload);  lastGreen=payload.toInt();  preferanser.putShort("green",lastGreen);  show_new_colors(); }); MQTTclient.subscribe("takLEDClient/blue", [](const String & payload) { Serial.print("blue: ");  Serial.println(payload);  lastBlue=payload.toInt();  preferanser.putShort("blue",lastBlue);  show_new_colors(); }); MQTTclient.subscribe("takLEDClient/white", [](const String & payload) { Serial.print("white: ");  Serial.println(payload);  lastWhite=payload.toInt();  preferanser.putShort("white",lastWhite);  show_new_colors(); }); MQTTclient.subscribe("takLEDClient/rainbow", [](const String & payload) { Serial.print("rainbow: ");  Serial.println(payload);  rainbowLoop(payload.toInt());  show_last_colors(); // reset }); MQTTclient.subscribe("takLEDClient/brightness", [](const String & payload) { Serial.print("brightness: ");  Serial.println(payload);  FastLED.setBrightness(payload.toInt());  FastLED.show(); }); MQTTclient.subscribe("takLEDClient/tilt", [](const String & payload) { Serial.print("tilt: ");  Serial.println(payload);  roter(payload.toInt()); }); }
Â
Â
Legg merke til at jeg bruke siste LED pÄ stripa som status LED
Â
Om jeg skulle gjÞre det omigjen nÄ ville jeg valgt en 12V stepper sÄ jeg kunne ha 12V LED.
5V gir veldig hĂžy strĂžm med mulighet for varmgang og fallende spenning i enden av LEDen.
Kanskje til og med 24V med en spenningsregulator til Stepperen og/eller ESP32'en.
Â
Â
Â
-
11
-
3
1 kommentar
Anbefalte kommentarer