2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Я хотел построить какие-то интерактивные садовые фонари для своего заднего двора. Идея заключалась в том, что когда кто-то идет в одну сторону, это вызывает анимацию в том направлении, в котором вы идете. Я начал с солнечных фонарей Dollar General за $ 1,00.
Шаг 1: потрошите Solor Lights
Первым шагом было потушить свет, чтобы освободить место для более забавных вещей. Я начал с вырезания оригинального светодиода и аккумулятора. Обязательно сохраните эти детали, так как они будут полезны в другом проекте. Я также удалил хромированный купол, который был внизу солнечного светильника, и приклеил его к верху, как показано на фотографиях.
Шаг 2: Установка Better Lights
для светодиода я использовал водонепроницаемый ws2811b, который можно найти здесь
www.ebay.com/itm/50-X-12mm-LED-Module-RGB-…
Изначально я планировал разместить датчики PIR внутри солнечных фонарей. но это оказалось несколько проблематичным, потому что датчик практически не мог видеть сквозь пластик. у него должна быть какая-то фильтрация УФ-излучения. так что я выбрал что-то подобное
www.thingiverse.com/thing:2590216
Шаг 3. Кодирование
Если вы хотите, чтобы свет не использовал датчик или просто работал все время, просто найдите место, которое отмечено как «изменение состояния флага», и установите его в эфир 1 или 0, я добавлю больше фотографий, когда я закончу это для себя, поэтому работа над ним все еще продолжается, но я думаю, что это слишком аккуратно, чтобы не поделиться им сразу. спасибо, что посмотрели
void setup () {
// поместите сюда свой установочный код для однократного запуска: FastLED.addLeds (leds, NUM_LEDS); Serial.begin (9600); pinMode (buttonPin1, ВХОД); pinMode (buttonPin2, ВХОД); }
void loop () {
Serial.println (FlagState);
если (FlagState == 0) {ForwardLeds (); } если (FlagState == 1) {RevLeds (); } если (FlagState == 2) {Ожидание (); }}
void ForwardLeds () {
FirstLed = -1; LastLed = 16; для (int я = 0; я <8; я ++) {LastLed--; FirstLed ++; светодиоды [LastLed] = CRGB:: Белый; светодиоды [FirstLed] = CRGB:: Белый; задержка (750); FastLED.show (); Serial.print («белый пропуск»); Serial.print (i); Serial.println («из 8»); } FirstLed = -1; LastLed = 16; для (int я = 0; я <8; я ++) {LastLed--; FirstLed ++; светодиоды [LastLed] = CRGB:: Синий; светодиоды [FirstLed] = CRGB:: Синий; задержка (250); FastLED.show (); Serial.print («Синий пропуск»); Serial.print (i); Serial.println («из 8»); } FirstLed = -1; LastLed = 16; для (int я = 0; я <8; я ++) {LastLed--; FirstLed ++; светодиоды [LastLed] = CRGB:: Purple; светодиоды [FirstLed] = CRGB:: Purple; задержка (250); FastLED.show (); Serial.print («Красный пропуск»); Serial.print (i); Serial.println («из 8»); } FirstLed = -1; LastLed = 16; для (int я = 0; я <8; я ++) {LastLed--; FirstLed ++; светодиоды [LastLed] = CRGB:: Черный; светодиоды [FirstLed] = CRGB:: Черный; задержка (250); FastLED.show (); Serial.print («Выключение светодиода»); Serial.print (i); Serial.println («из 8»); } FlagState = 2; // изменение состояния флага} void RevLeds () {Serial.println ("в обратном направлении"); FirstLed = 8; LastLed = 7; для (int я = 0; я <8; я ++) {LastLed ++; FirstLed--; светодиоды [LastLed] = CRGB:: Белый; светодиоды [FirstLed] = CRGB:: Белый; задержка (750); FastLED.show (); Serial.print («Белый пропуск»); Serial.print (i); Serial.println («из 8»); } FirstLed = 8; LastLed = 7; для (int я = 0; я <8; я ++) {LastLed ++; FirstLed--; светодиоды [LastLed] = CRGB:: Синий; светодиоды [FirstLed] = CRGB:: Синий; задержка (250); FastLED.show (); Serial.print («Синий пропуск»); Serial.print (i); Serial.println («из 8»); } FirstLed = 8; LastLed = 7; для (int я = 0; я <8; я ++) {LastLed ++; FirstLed--; светодиоды [LastLed] = CRGB:: Purple; светодиоды [FirstLed] = CRGB:: Purple; задержка (250); FastLED.show (); Serial.print («Красный пропуск»); Serial.print (i); Serial.println («из 8»); }
FirstLed = 8;
LastLed = 7; для (int я = 0; я <8; я ++) {LastLed ++; FirstLed--; светодиоды [LastLed] = CRGB:: Черный; светодиоды [FirstLed] = CRGB:: Черный; задержка (250); FastLED.show (); Serial.print («Выключение светодиода»); Serial.print (i); Serial.println («из 8»); } FlagState = 2; // изменение состояния флага} void Waiting () {buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); if (buttonState1 == HIGH) {Serial.println ("запускается вперед"); FlagState = 0; } else if (buttonState2 == HIGH) {Serial.println ("Rev triggered"); FlagState = 1; } Serial.println ("цикл завершен в ожидании"); }