Sadržaj:

Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom: 7 koraka
Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom: 7 koraka

Video: Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom: 7 koraka

Video: Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom: 7 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Novembar
Anonim
Image
Image
Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom
Pametna LED lampa koja se kontroliše Bluetooth pametnim telefonom

Uvijek sanjam da kontrolišem svoje rasvjetne uređaje. Tada je neko napravio neverovatnu šarenu LED lampu. Nedavno sam naišao na LED lampu Josepha Cashe na Youtube -u. Inspiriran time, odlučio sam dodati nekoliko funkcija, zadržavajući suvremeni dizajn.

Planirano je učiniti lampu lakšom za korisnika dodavanjem Bluetooth modula i adresabilne WS2812B RGB LED trake. To je omogućilo kontrolu boje osvjetljenja samo pomoću aplikacije za pametni telefon.

Korak 1: Prikupite materijale

Prikupite materijale
Prikupite materijale
Prikupite materijale
Prikupite materijale

Alati:

• Stanica za lemljenje

• Pištolj grijača grijača

• Mašina za bušenje

• Kružna pila

• Slagalica

• Klešta za sečenje žice

• Klešta za uski nos

Materijali:

• Prozirna akrilna ploča

• drvo japanskog čempresa (ili možete koristiti bilo koje drvo ako je stabilno i dovoljno čvrsto)

• Vijci

• Stub ili štap od nehrđajućeg čelika

• Žice (koristim crvenu i crnu žicu)

• Lim za lemljenje

Komponente elektronike:

• Arduino Nano

• Bluetooth modul HC-05 (odlučio sam ovo upotrijebiti jer je lakše kodirati nego Wifi modul ESP8266)

• WS2812B Adresibilna RGB LED traka

• LM2596 Modul za snižavanje

• DC Barrel priključak za napajanje

Korak 2: Izgradnja strukture lampe

Izgradnja strukture lampe
Izgradnja strukture lampe
Izgradnja strukture lampe
Izgradnja strukture lampe

U ovom koraku imam dva načina izgradnje strukture metode obrade drveta lampe i metode 3D štampe. Ja koristim prvu metodu. Ako više volite da to radite pomoću 3D štampača, slobodno pređite na korak 2 za model koji sam dizajnirao.

Za gornji dio svjetiljke zagrijavam i savijam akrilnu ploču pod kutom od 90 ° kao što je prikazano gore. Treba mi dosta vremena da ga savijem do tako savršenog kuta i smjera.

Zatim, za donji dio lampe. Nažalost … onog dana kada radim na donjem dijelu lampe, potpuno sam zaboravio slikati konstrukciju! To sam shvatio kada sam završio ovaj projekat. Ali ću se potruditi da vam pružim mjerenje donjeg dijela lampe.

U osnovi, samo trebate izrezati četiri drvena bloka dimenzija 13x6x2cm (LxHxW). Zatim morate izrezati stubičasti rez na rubu drva. Slika će biti prikazana gore.

Korak 3: 3D oblici

3D oblici
3D oblici
3D oblici
3D oblici

Za svakoga ko ima svoj 3D štampač na pravom ste koraku. Zbog toga je ova lampa postala laka za upotrebu.

Da budem iskren, ovo je bio najteži korak koji sam učinio. Ovo je prva stvar koju sam napravio odmah nakon instaliranja softvera!

Koristim Sketchup Pro za dizajniranje strukture lampe. Nažalost, nisam dovoljno vješt da dizajniram njegovu unutrašnju komponentu. Veza do mog 3D modela nalazi se u donjoj datoteci.

Korak 4: Shema komponenti

Shema komponenti
Shema komponenti

Koristim Fritzing za izradu shema komponenti. Shema je zapravo prilično laka.

Korak 5: Kôd

Kodeks
Kodeks

Za kodiranje ove lampice raspoloženja koristio sam neke biblioteke iz Arduino IDE -a. Biblioteke će biti navedene dolje u koraku 7.

Za kôd morate imati sam Arduino softver. Ovdje ću dati vezu za preuzimanje.

Takođe, skica ili kôd će biti prikazani ispod?

Dao sam i datoteku koda na Github.com u slučaju da je donji kod predug za kopiranje ovdje;)

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

SoftwareSerial BT (10, 11);

#define LED_PIN 7 #define NUM_LEDS 60 #define BRIGHTNESS 200 #define SPEED 10 #define ODMAH 0 #define RAINBOW_SPEED 50 CRGB LED dioda [NUM_LEDS];

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

bool offOld = LOW;

bool WhiteOld = LOW; bool RedOld = NISKO; bool GreenOld = NISKO; bool BlueOld = NISKO; bool TopazOld = NISKO; bool LilacOld = NISKO; bool RainbowOld = LOW; bool rgbOld = NISKO; int showType = 0;

void setup () {

FastLED.addLeds (LED diode, NUM_LEDS); //////////

BT.begin (9600);

BT.println ("Povezano s Arduinom");

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show ();

}

char a;

void loop () {{100} {101}

for (int i = 0; i <= 59; i ++) {leds = CRGB (255, 255, 255); FastLED.show (); } bool off = LOW; bool Bijela = NISKA; bool Plavo = NISKO; bool Crveno = NISKO; bool zelena = NISKA; bool Topaz = NISKO; bool jorgovan = NISKA; bool Rainbow = LOW; bool rgb = LOW; bool ende; if (BT.available ()) {a = (char) BT.read ();

ako (a == 'o')

{off = HIGH; BT.println ("ISKLJUČIVANJE LED dioda..");

} else {

off = LOW; } // ================================================= ============================================

if (a == 'w')

{Bijela = VISOKA; BT.println ("TRENUTNE LED diode BIJELE");

} else {

Bijela = NISKA; } // ================================================= ============================================

ako (a == 'b')

{Plavo = HIGH; BT.println ("PROMJENA U PLAVO"); } else {Plavo = LOW; }

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

ako (a == 'r')

{Crveno = HIGH; BT.println ("PROMJENA U CRVENU"); } else {Crveno = NISKO; }

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

ako (a == 'g')

{Zelena = VISOKA; BT.println ("PROMJENA U ZELENO"); } else {Green = LOW; }

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

ako (a == 't')

{Topaz = HIGH; BT.println ("PROMJENA NA TOPAZ"); } else {Topaz = LOW; }

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

ako (a == 'l')

{Jorgovan = HIGH; BT.println ("PROMJENA U LILAC"); } else {Lilac = LOW; }

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

ako (a == 'a')

{Rainbow = HIGH; BT.println ("ANIMACIJA DUGE"); } else {Rainbow = LOW; } // ================================================= ============================================

ako (a == 'm')

{rgb = HIGH; BT.println ("MIJESNE BOJE"); } else {rgb = LOW; }} if (off == LOW && offOld == HIGH) {odgoda (20); if (isključeno == LOW) {showType = 0; // Animacija isključena Tip 0 startShow (showType); }}

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

if (Bijelo == LOW && WhiteOld == HIGH) {

kašnjenje (20); if (Bijelo == LOW) {showType = 1; // Bijela animacija Tip 1 startShow (showType); }}

// ================================================ =========================================== ako (Crveno == NISKO && RedOld == HIGH) {kašnjenje (20); if (Crveno == LOW) {showType = 2; // Crvena animacija Tip 2 startShow (showType); }}

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

if (Zeleno == LOW && GreenOld == HIGH) {

kašnjenje (20); if (zelena == LOW) {showType = 3; // Zelena animacija Tip 3 startShow (showType); }} // ============================================== ===============================================

if (Plavo == LOW && BlueOld == HIGH) {

kašnjenje (20); if (Plavo == LOW) {showType = 4; // Plava animacija Tip 4 startShow (showType); }}

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

if (Topaz == LOW && TopazOld == HIGH) {

kašnjenje (20); if (Topaz == LOW) {showType = 5; // Topaz animacija Tip 5 startShow (showType); }}

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

if (jorgovan == LOW && LilacOld == HIGH) {

kašnjenje (20); if (jorgovan == LOW) {showType = 6; // Topaz animacija Tip 6 startShow (showType); }} // ============================================== ===============================================

if (Rainbow == LOW && RainbowOld == HIGH) {

kašnjenje (20);

if (Duga == LOW) {

showType = 8; // Rainbow animacija Tip 8 startShow (showType); }}

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

if (rgb == LOW && rgbOld == HIGH) {

kašnjenje (20);

if (rgb == LOW) {

showType = 7; // Mix animacija Tip 7 rgb = HIGH;

startShow (showType);

} }

WhiteOld = Bijelo;

RedOld = Crveno; BlueOld = Plavo; GreenOld = Zeleno; TopazOld = Topaz; JorgovanStar = Jorgovan; offOld = isključeno; RainbowOld = Rainbow; rgbOld = rgb;

}

void startShow (int i) {

prekidač (i) {

slučaj 0: colorWipe (strip. Color (0, 0, 0), SPEED); // Crno/isključeno

break;

slučaj 1: strip.setBrightness (255); // Mijenja svjetlinu na MAX

colorWipe (strip. Color (255, 255, 255), ODMAH); // Bijela traka.setBrightness (BRIGHTNESS); // Vraćanje svjetline na zadanu vrijednost;

slučaj 2: colorWipe (strip. Color (255, 0, 0), SPEED); // Red

break;

slučaj 3: colorWipe (strip. Color (0, 255, 0), SPEED); // Zeleno

break;

slučaj 4: colorWipe (strip. Color (0, 0, 255), SPEED); // Plava

break;

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

break;

slučaj 6: colorWipe (strip. Color (221, 130, 255), SPEED); // Lilac

break; slučaj 7: colorWipe (strip. Color (255, 0, 0), SPEED); // Crvena colorWipe (strip. Color (0, 255, 0), SPEED); // Zelena colorWipe (strip. Color (0, 0, 255), SPEED); // Plava TheaterChase (strip. Color (0, 0, 127), SPEED); // Plava TheaterChase (strip. Color (127, 0, 0), SPEED); // Red theatreChase (strip. Color (0, 127, 0), SPEED); // Zeleni prekid;

slučaj 8: rainbowCycle (25);

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

void rainbowCycle (uint8_t čekanje) {

uint16_t i, j;

za (j = 0; j <256*10; j ++) {// 5 ciklusa svih boja na kotaču za (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); kašnjenje (čekanje); }}

void theatreChase (uint32_t c, uint8_t čekaj) {

for (int j = 0; j <10; j ++) {// uraditi 10 ciklusa jurenja za (int q = 0; q <3; q ++) {for (int i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // uključuje svaki treći piksel} strip.show ();

kašnjenje (čekanje);

for (int i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // isključuje svaki treći piksel}}}}

uint32_t Wheel (bajt WheelPos) {

WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; povratna traka. Boja (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; povratna traka. Boja (WheelPos * 3, 255 - WheelPos * 3, 0); }

Korak 6: Upravljanje lampom

Upravljanje lampom
Upravljanje lampom
Upravljanje lampom
Upravljanje lampom
Upravljanje lampom
Upravljanje lampom

Boja lampe može se kontrolirati pomoću vašeg pametnog telefona.

Prvo morate instalirati aplikaciju pod nazivom 'Bluetooth Terminal HC-05' iz trgovine Google Play ili Apple App Store.

Ovo su koraci za upravljanje lampom putem vlastitog pametnog telefona:

1. Uključite bluetooth na pametnom telefonu.

2. Otvorite aplikaciju koja je 'Bluetooth Terminal HC-05'.

3. Sada biste trebali vidjeti uparene uređaje na ekranu. Odaberite 'HC-05'.

4. Sada možete vidjeti da se na vašem pametnom telefonu pojavljuje crni ekran koji će označavati 'povezan s Arduinom'.

5. Evo zabavnog dijela, ako u okvir za tekst unesete 'b', lampica će se pretvoriti u plavu boju. Evo liste naredbi koje možete upisati za lampu:

- w za bijelo

- b za plavo

- g za zeleno

- r za crveno

- t za topaz

- Ja za jorgovan

- za animaciju duge

- o za off

Zabavno zar ne?

6. Na kraju, ali ne i najmanje važno, također možete prilagoditi dugme ispod ekrana željenom tekstu, kao što je prikazano na gornjoj slici.

Korak 7: Uživajte u lampi raspoloženja

Uživajte u lampi raspoloženja !!
Uživajte u lampi raspoloženja !!
Uživajte u lampi raspoloženja !!
Uživajte u lampi raspoloženja !!
Uživajte u lampi raspoloženja !!
Uživajte u lampi raspoloženja !!

Nadam se da vam se sviđa ovaj Instructables. Bio je to za mene vrlo izazovan projekt, ali uspio sam ga završiti u potpunosti kao 14-godišnji dječak. Dajte mi povratne informacije za buduća poboljšanja.

Hvala na čitanju i sretan Božić!

Preporučuje se: