Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Chciałem zbudować coś w rodzaju interaktywnych świateł na podwórku. Chodziło o to, że gdy ktoś idzie w jedną stronę, uruchamia się animacja w kierunku, w którym idziesz. Zacząłem od świateł słonecznych Dollar General 1,00 $
Krok 1: Wypatruj światła słonecznego
Pierwszym krokiem było wypatroszenie świateł, aby zrobić miejsce na więcej zabawnych rzeczy. Zacząłem od wycięcia oryginalnej diody i baterii. Koniecznie zachowaj te części gdyż przydadzą się w innym projekcie Usunąłem też chromowaną kopułę która była na dole lampy solarnej i przykleiłem ją do góry jak widać na zdjęciach
Krok 2: Instalowanie lepszych świateł
do diody użyłem wodoodpornego ws2811b, który można znaleźć tutaj
www.ebay.com/itm/50-X-12mm-Moduł-LED-RGB-…
Pierwotnie planowałem umieścić czujniki PIR w lampach słonecznych. ale okazało się to trochę problematyczne, ponieważ czujnik w zasadzie nie widział poza plastikiem. musi mieć jakąś właściwość filtrowania UV. więc zdecydowałem się na coś bardziej takiego
www.thingiverse.com/thing:2590216
Krok 3: Kodowanie
jeśli chcesz, aby światła nie korzystały z czujnika lub po prostu działały cały czas, poszukaj miejsca, które jest skomentowane jako „zmienianie stanu flagi” i ustaw je na ether 1 lub 0, dodam więcej zdjęć, gdy skończę to dla siebie, więc nadal jest w toku, ale myślę, że jest zbyt schludny, aby nie udostępniać od razu. dzięki za obejrzenie
pusta konfiguracja () {
// wstaw tutaj swój kod konfiguracyjny do jednorazowego uruchomienia: FastLED.addLeds(leds, NUM_LEDS); Serial.początek(9600); pinMode(przyciskPin1, WEJŚCIE); pinMode(buttonPin2, INPUT); }
pusta pętla () {
Serial.println(stan flagi);
if(FlagState == 0){ ForwardLeds(); } if(FlagState == 1){ RevLeds(); } if(FlagState == 2){ Oczekiwanie(); } }
void ForwardLeds(){
Pierwsza dioda = -1; LastLed = 16; for(int i=0; i < 8; i++){ LastLed--; Pierwsza dioda++; diody [Ostatnia dioda] = CRGB::Biały; diody [Pierwsza dioda] = CRGB::Biały; opóźnienie(750); FastLED.show(); Serial.print ("Biała Przepustka"); druk.seryjny (i); Serial.println (" z 8"); } Pierwsza dioda = -1; LastLed = 16; for(int i=0; i < 8; i++){ LastLed--; Pierwsza dioda++; diody [Ostatnia dioda] = CRGB::Niebieski; diody [Pierwsza dioda] = CRGB::Niebieski; opóźnienie(250); FastLED.show(); Serial.print („Niebieska karta”); druk.seryjny (i); Serial.println (" z 8"); } Pierwsza dioda = -1; LastLed = 16; for(int i=0; i < 8; i++){ LastLed--; Pierwsza dioda++; diody[OstatniaLed] = CRGB::Fioletowy; diody[PierwszaLed] = CRGB::Fioletowy; opóźnienie(250); FastLED.show(); Serial.print ("Czerwona przepustka"); druk.seryjny (i); Serial.println (" z 8"); } Pierwsza dioda = -1; Ostatnia dioda = 16; for(int i=0; i < 8; i++){ LastLed--; Pierwsza dioda++; diody [Ostatnia dioda] = CRGB::Czarny; diody [Pierwsza dioda] = CRGB::Czarny; opóźnienie(250); FastLED.show(); Serial.print ("Wyłączenie diody"); druk.seryjny (i); Serial.println (" z 8"); } Stan Flagi = 2; // zmiana stanu flagi } void RevLeds(){ Serial.println("in reverse"); Pierwsza dioda = 8; LastLed = 7; for(int i=0; i < 8; i++){ LastLed++; Pierwsza dioda--; diody [Ostatnia dioda] = CRGB::Biały; diody [Pierwsza dioda] = CRGB::Biały; opóźnienie(750); FastLED.show(); Serial.print (" Biała przepustka "); druk.seryjny (i); Serial.println (" z 8"); } Pierwsza dioda = 8; LastLed = 7; for(int i=0; i < 8; i++){ LastLed++; Pierwsza dioda--; diody [Ostatnia dioda] = CRGB::Niebieski; diody [Pierwsza dioda] = CRGB::Niebieski; opóźnienie(250); FastLED.show(); Serial.print („Niebieska przepustka”); druk.seryjny (i); Serial.println (" z 8"); } Pierwsza dioda = 8; LastLed = 7; for(int i=0; i < 8; i++){ LastLed++; Pierwsza dioda--; diody[OstatniaLed] = CRGB::Fioletowy; diody[PierwszaLed] = CRGB::Fioletowy; opóźnienie(250); FastLED.show(); Serial.print („Czerwona przepustka”); druk.seryjny (i); Serial.println (" z 8"); }
Pierwsza dioda = 8;
LastLed = 7; for(int i=0; i < 8; i++){ LastLed++; Pierwsza dioda--; diody [Ostatnia dioda] = CRGB::Czarny; diody [Pierwsza dioda] = CRGB::Czarny; opóźnienie(250); FastLED.show(); Serial.print ("Wyłączanie diody"); druk.seryjny (i); Serial.println (" z 8"); } Stan Flagi = 2; //zmiana stanu flagi } void Waiting(){ buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); if(buttonState1 == HIGH){ Serial.println("wyzwalane przekazywanie"); Stan Flagi = 0; } else if(buttonState2 == HIGH){ Serial.println("Wyzwolony obrót"); Stan Flagi = 1; } Serial.println("oczekiwanie w pętli zakończone"); }