Spisu treści:

Inteligentna lampa LED Bluetooth sterowana smartfonem: 7 kroków
Inteligentna lampa LED Bluetooth sterowana smartfonem: 7 kroków

Wideo: Inteligentna lampa LED Bluetooth sterowana smartfonem: 7 kroków

Wideo: Inteligentna lampa LED Bluetooth sterowana smartfonem: 7 kroków
Wideo: Inteligentne żarówki LED SETTI+ | Funkcjonalności i konfiguracja 2024, Grudzień
Anonim
Image
Image
Inteligentna lampa LED Bluetooth sterowana smartfonem
Inteligentna lampa LED Bluetooth sterowana smartfonem

Zawsze marzę o sterowaniu urządzeniami oświetleniowymi. Wtedy ktoś zrobił niesamowitą kolorową lampę LED. Niedawno natknąłem się na lampę LED autorstwa Josepha Casha na Youtube. Zainspirowany tym, postanowiłem dodać kilka funkcji przy zachowaniu współczesnego designu.

W planach jest uczynienie lampy bardziej przyjazną dla użytkownika poprzez dodanie modułu Bluetooth i adresowalnej taśmy LED WS2812B RGB. Umożliwiło to sterowanie kolorem oświetlenia za pomocą aplikacji na smartfona.

Krok 1: Zbierz materiały

Zbierz materiały
Zbierz materiały
Zbierz materiały
Zbierz materiały

Narzędzia:

• Stacja lutownicza

• Pistolet dmuchawy podgrzewacza

• Wiertarka

• Piła tarczowa

• Puzzle

• Szczypce do cięcia drutu

• Szczypce z wąskimi końcówkami

Materiały:

• Przezroczysta płyta akrylowa

• Japońskie drewno cyprysowe (możesz też użyć dowolnego drewna, o ile jest stabilne i wystarczająco mocne)

• Śruby

• Słup lub kij ze stali nierdzewnej

• Przewody (ja używam przewodu czerwonego i czarnego)

• Cyna lutownicza

Komponenty elektroniczne:

• Arduino Nano

• Moduł Bluetooth HC-05 (zdecydowałem się go użyć, ponieważ jest łatwiejszy do kodowania niż moduł Wifi ESP8266)

• Adresowalna taśma LED RGB WS2812B

• Moduł obniżający LM2596

• Gniazdo zasilania lufy prądu stałego

Krok 2: Budowanie struktury lampy

Budowanie struktury lampy
Budowanie struktury lampy
Budowanie struktury lampy
Budowanie struktury lampy

W tym kroku mam dwa sposoby budowania struktury lampy – metoda obróbki drewna i metoda druku 3D. Używam pierwszej metody. Jeśli wolisz zrobić to za pomocą drukarki 3D, możesz przejść do kroku 2 dla zaprojektowanego przeze mnie modelu.

W górnej części lampy podgrzewam i wyginam płytę akrylową pod kątem 90°, jak pokazano powyżej. Zajęło mi dość dużo czasu, aby wygiąć go pod tak idealnym kątem i kierunkiem.

Następnie dla dolnej części lampy. Niestety… w dniu, w którym pracuję nad dolną częścią lampy, zupełnie zapomniałem zrobić zdjęcie konstrukcji! Zdałem sobie z tego sprawę, kiedy skończyłem ten projekt. Ale postaram się jak najlepiej podać pomiar dolnej części lampy.

Zasadniczo wystarczy wyciąć cztery bloki drewna o wymiarach 13x6x2cm (DxSxW). Następnie musisz wyciąć cięcie przypominające schody na krawędzi drewna. Obrazek zostanie pokazany powyżej.

Krok 3: Kształty 3D

Kształty 3D
Kształty 3D
Kształty 3D
Kształty 3D

Dla każdego, kto ma własną drukarkę 3D, jesteś we właściwym kroku. Dzięki temu ta lampa była przyjazna dla użytkownika.

Szczerze mówiąc, to był najtrudniejszy krok, jaki zrobiłem. To pierwsza rzecz, którą zrobiłem zaraz po zainstalowaniu oprogramowania!

Używam Sketchup Pro do projektowania konstrukcji lampy. Niestety nie umiem zaprojektować jego wnętrza. Link do mojego modelu 3D znajduje się w poniższym pliku.

Krok 4: Schemat komponentów

Schemat komponentów
Schemat komponentów

Używam Fritzinga do konstruowania schematów komponentów. Schemat jest całkiem prosty.

Krok 5: Kodeks

Kod
Kod

Do kodowania tej lampy nastrojowej wykorzystałem kilka bibliotek z Arduino IDE. Biblioteki zostaną wymienione w kroku 7.

Do kodu potrzebne jest samo oprogramowanie Arduino. Podam link do pobrania tutaj.

Również szkic lub kod pokaże się poniżej ?

Udostępniłem również plik z kodem na Github.com na wypadek, gdyby poniższy kod był zbyt długi do skopiowania tutaj;)

#include #include #include #ifdef _AVR_ #include #endif

OprogramowanieSerial BT(10, 11);

#zdefiniuj LED_PIN 7 #zdefiniuj NUM_LEDS 60 #zdefiniuj JASNOŚĆ 200 #zdefiniuj SZYBKOŚĆ 10 #zdefiniuj NATYCHMIAST 0 #zdefiniuj RAINBOW_SPEED 50 diod CRGB [NUM_LEDS];

Pasek Adafruit_NeoPixel = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

bool offStary = NISKI;

bool BiałyStary = NISKI; bool CzerwonyStary = NISKI; bool ZielonyStary = NISKI; bool NiebieskiStary = NISKI; bool TopazStary = NISKI; bool LiliowyStary = NISKI; bool TęczaStary = NISKI; bool rgbStary = NISKI; int showType = 0;

pusta konfiguracja () {

FastLED.addLeds(diody, NUM_LEDS); //////////

BT.początek (9600);

BT.println("Połączono z Arduino");

strip.setJasność(JASNOŚĆ);

strip.początek();

strip.pokaż();

}

znak a;

pusta pętla () {

for (int i = 0; i <= 59; i++) { diody = CRGB(255, 255, 255); FastLED.show(); } bool off = LOW; bool Biały = NISKI; bool Niebieski = NISKI; wartość logiczna Czerwony = NISKI; bool Zielony = NISKI; bool Topaz = NISKI; bool Liliowy = NISKI; wartość logiczna Tęcza = NISKA; bool rgb = NISKI; bool ende; if (BT.available()) { a= (char)BT.read();

jeśli(a=='o')

{ wyłączony = WYSOKI; BT.println("WYŁĄCZANIE diod LED..");

}w przeciwnym razie{

wyłączony = NISKI; } // ========================================== ====================================================

jeśli(a=='w')

{ Biały = WYSOKI; BT.println("WŁĄCZANIE DIOD LED NA BIAŁE");

}w przeciwnym razie{

Biały = NISKI; } // ========================================== =====================================================

jeśli(a=='b')

{ Niebieski = WYSOKI; BT.println("ZMIANA NA NIEBIESKI"); }else{ Niebieski = NISKI; }

// ===========================================================================================

jeśli(a=='r')

{ Czerwony = WYSOKI; BT.println("ZMIANA NA CZERWONY"); }else{ Czerwony = NISKI; }

// ===========================================================================================

jeśli(a=='g')

{ Zielony = WYSOKI; BT.println("ZMIANA NA ZIELONY"); }else{ Zielony = NISKI; }

// ===========================================================================================

jeśli(a=='t')

{ Topaz = WYSOKI; BT.println("ZMIANA NA TOPAZ"); }else{ Topaz = NISKI; }

// ===========================================================================================

jeśli(a=='l')

{ Liliowy = WYSOKI; BT.println("ZMIANA NA LILA"); }else{ Liliowy = NISKI; }

// ===========================================================================================

jeśli(a=='a')

{ Tęcza = WYSOKA; BT.println("TĘCZOWA ANIMACJA"); }else{ Tęcza = NISKA; } // ================================================= ====================================================

jeśli(a=='m')

{ rgb = WYSOKA; BT.println("MIESZAJ KOLORY"); }inny{ rgb = NISKI; } } if (off == NISKI && offStary == WYSOKI) { delay(20); if (off == LOW) { showType = 0; // Wyłącz animację Typ 0 startShow(showType); } }

// ===========================================================================================

if (Biały == NISKI && BiałyStary == WYSOKI) {

opóźnienie(20); if (Biały == LOW) { showType = 1; // Biała animacja Typ 1 startShow(showType); } }

// ======================================================== ============================================ jeśli (Czerwony == NISKI && CzerwonyStary == WYSOKI) { opóźnienie(20); if (Czerwony == NISKI) { showType = 2; // Czerwona animacja Typ 2 startShow(showType); } }

// ===========================================================================================

jeśli (Zielony == NISKI && ZielonyStary == WYSOKI) {

opóźnienie(20); if (Zielony == NISKI) { showType = 3; // Zielona animacja Typ 3 startShow(showType); } } // ================================================ =====================================================

if (Niebieski == NISKI && NiebieskiStary == WYSOKI) {

opóźnienie(20); if (niebieski == LOW) { showType = 4; // Niebieska animacja Typ 4 startShow(showType); } }

// ===========================================================================================

jeśli (Topaz == NISKI && TopazStary == WYSOKI) {

opóźnienie(20); if (Topaz == LOW) { showType = 5; // animacja Topaz Type 5 startShow(showType); } }

// ===========================================================================================

if (Liliowy == NISKI && LiliowyStary == WYSOKI) {

opóźnienie(20); if (liliowy == LOW) { showType = 6; // animacja Topaz Type 6 startShow(showType); } } // ================================================ =====================================================

if (Tęcza == NISKA && TęczaStara == WYSOKA) {

opóźnienie(20);

jeśli (Tęcza == NISKI) {

showType = 8; // animacja tęczy Typ 8 startShow(showType); } }

// ===========================================================================================

if (rgb == NISKI && rgbStary == WYSOKI) {

opóźnienie(20);

jeśli (rgb == NISKI) {

showType = 7; // Mieszaj animację Typ 7 rgb = HIGH;

startShow(showType);

} }

BiałyStary = Biały;

CzerwonyStary = Czerwony; NiebieskiStary = Niebieski; ZielonyStary = Zielony; TopazStary = Topaz; LiliowyStary = Liliowy; niestary = wyłączony; TęczaStara = Tęcza; rgbStary = rgb;

}

void startShow(int i) {

przełącznik(i){

case 0: colorWipe(strip. Color(0, 0, 0), SPEED); // czarny/wył.

przerwa;

przypadek 1: strip.setBrightness(255); // Zmienia Jasność na MAX

colorWipe(strip. Color(255, 255, 255), NATYCHMIAST); // Biały strip.setBrightness(BRIGHTNESS); // Zresetuj Jasność do wartości domyślnej break;

przypadek 2: colorWipe(strip. Color(255, 0, 0), SPEED); // Czerwony

przerwa;

przypadek 3: colorWipe(strip. Color(0, 255, 0), SPEED); // Zielony

przerwa;

przypadek 4: colorWipe(strip. Color(0, 0, 255), SPEED); // Niebieski

przerwa;

przypadek 5: colorWipe(strip. Color(0, 250, 255), SPEED); // Topaz

przerwa;

przypadek 6: colorWipe(strip. Color(221, 130, 255), SPEED); // Liliowy

przerwa; przypadek 7: colorWipe(strip. Color(255, 0, 0), SPEED); // Czerwony colorWipe(strip. Color(0, 255, 0), SPEED); // Zielony colorWipe(strip. Color(0, 0, 255), SPEED); // Niebieski teatrChase(strip. Color(0, 0, 127), SPEED); // Niebieski teatrChase(strip. Color(127, 0, 0), SPEED); // Czerwony teatrChase(strip. Color(0, 127, 0), SPEED); // Zielona przerwa;

przypadek 8: rainbowCycle(25);

przerwa; } } void colorWipe(uint32_t c, uint8_t czekaj) { for(uint16_t i=0; i

void rainbowCycle(uint8_t czekaj) {

uint16_ti, j;

for(j=0; j<256*10; j++) { // 5 cykli wszystkich kolorów na kole for(i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) i 255)); } strip.show(); opóźnienie (czekaj); } }

void theatreChase(uint32_t c, uint8_t czekaj) {

for (int j=0; j<10; j++) { //wykonaj 10 cykli pościgu for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { pasek.setPixelColor(i+q, c); //włącz co trzeci piksel na } strip.show();

opóźnienie (czekaj);

for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //wyłącz co trzeci piksel } } } }

uint32_t Wheel(byte WheelPos) {

Pozycja koła = 255 - Pozycja koła; if(WheelPos < 85) { return strip. Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(PozycjaKół < 170) { PozycjaKół -= 85; powrotna listwa. Kolor(0, Pozycja koła * 3, 255 - Pozycja koła * 3); } Pozycja koła -= 170; return strip. Color(WheelPos * 3, 255 - WheelPos * 3, 0); }

Krok 6: Sterowanie lampą

Sterowanie lampą
Sterowanie lampą
Sterowanie lampą
Sterowanie lampą
Sterowanie lampą
Sterowanie lampą

Kolorem lampy możesz sterować za pomocą smartfona.

Najpierw musisz zainstalować aplikację o nazwie „Bluetooth Terminal HC-05” ze sklepu Google Play lub Apple App Store.

Oto kroki, aby sterować lampą za pomocą własnego smartfona:

1. Włącz bluetooth w swoim smartfonie.

2. Otwórz aplikację „Bluetooth Terminal HC-05”.

3. Powinieneś teraz zobaczyć sparowane urządzenia na ekranie. Wybierz „HC-05”.

4. Teraz możesz zobaczyć czarny ekran w smartfonie, który będzie wskazywał „podłączony do Arduino”.

5. Oto zabawna część, jeśli wpiszesz „b” w polu tekstowym, lampa zmieni kolor na niebieski. Oto lista poleceń, które możesz wpisać dla lampy:

- w dla białego

- b dla niebieskiego

- g dla zielonego

- r dla czerwonego

- t dla topaz

- l na liliowy

- animacja tęczy

- o na off

Zabawne, prawda?

6. Na koniec możesz również dostosować przycisk pod ekranem do żądanego tekstu, jak pokazano na powyższym obrazku.

Krok 7: Ciesz się lampą nastroju

Ciesz się lampą nastroju!!
Ciesz się lampą nastroju!!
Ciesz się lampą nastroju!!
Ciesz się lampą nastroju!!
Ciesz się lampą nastroju!!
Ciesz się lampą nastroju!!

Mam nadzieję, że podoba Ci się ta instrukcja. Był to dla mnie bardzo trudny projekt, ale jako 14-latek udało mi się go ukończyć w całości. Przekaż mi swoją opinię na temat przyszłych ulepszeń.

Dziękujemy za przeczytanie i Wesołych Świąt!

Zalecana: