Turinys:

Išmanioji lempa (TCfD) - vaivorykštė + muzikos vizualizatorius: 7 žingsniai (su paveikslėliais)
Išmanioji lempa (TCfD) - vaivorykštė + muzikos vizualizatorius: 7 žingsniai (su paveikslėliais)

Video: Išmanioji lempa (TCfD) - vaivorykštė + muzikos vizualizatorius: 7 žingsniai (su paveikslėliais)

Video: Išmanioji lempa (TCfD) - vaivorykštė + muzikos vizualizatorius: 7 žingsniai (su paveikslėliais)
Video: 16 Полезных товаров и гаджетов с Aliexpress, которые вам пригодятся 2024, Liepa
Anonim
Image
Image
Grandinės schema
Grandinės schema

Šis projektas buvo atliktas kursui „Technology for Concept Design“TUDelfte

Galutinis produktas yra ESP-32 bazinė LED lemputė ir prijungta prie serverio. Prototipui lempa turi dvi funkcijas; vaivorykštės efektas, skleidžiantis raminantį spalvų keitimo švytėjimą savo aplinkos link, ir, antra, garso vizualizatorius, kuriame LED pikseliai „šoka“pagal garso lygį. Sistema prijungta prie „Wi -Fi“ir vartotojas gali pasirinkti, kokio efekto nori iš lempos per WIFI.

Pigi ESP-32 mikroschema suteikia mums galingus procesorius, įmontuotą salės jutiklį, temperatūros jutiklį, jutiklinį jutiklį, taip pat „Wi-Fi“ir „Bluetooth“galimybes. Taigi, nors šiam projektui buvo pasirinkti tik du efektai, šios „protingos“lempos reikšmė yra beribė. Jis būtų naudojamas vartotojui parodyti orą ar kambario temperatūrą, pati lempa gali veikti kaip pavojaus signalas, arba ji gali suteikti raminančią saulės šviesą šalia jūsų lovos, imituojančią saulėtekį, kad būtų malonu pažadinti.

1 žingsnis: reikalinga medžiaga

Arduino esp32

Garso jutiklis

Keturių krypčių dvikryptis loginio lygio keitiklis

„Neopixel“šviesos diodas 2 m 60 led/m

Jumperio laidai

Mikro USB kabelis su adapteriu

interneto ryšys

2 žingsnis: grandinės schema

Buvo sudaryta grandinės schema ir atitinkamai sudaryta grandinė, kaip nurodyta

diagrama žemiau.

3 žingsnis: „Arduino“kodas

Čia pirmiausia buvo sukurtas vizualizatoriaus kodas. Tada du kodo pavyzdžiai

; „Neoplxel RGBW starndtest“; ir „simpleWebServerWifi“buvo modifikuotas ir integruotas į vizualizatoriaus kodą. Nors kodas kartais vis dar yra klaidingas (atsitiktinės šviesos diodai kartais užsidega). Kitas kodo kartojimas (kai turėsime pakankamai laiko) bus atnaujintas.

#įtraukti

#ifdef _AVR_

#įtraukti

#endif

const int numReadings = 5;

int rodmenys [numReadings];

int readIndex = 0;

int viso = 0;

int vidurkis = 0;

int micPin = 33;

#define PIN 4

#define NUM_LEDS 120

#define BRIGHTNESS 100

Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

baitas neopix_gamma = {

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 };

#įtraukti

#įtraukti

char ssid = "jūsų tinklas"; // jūsų tinklo SSID (pavadinimas)

char pass = "secretPassword"; // jūsų tinklo slaptažodis

int keyIndex = 0; // jūsų tinklo raktas Indekso numeris (reikalingas tik WEP)

int būsena = WL_IDLE_STATUS;

„WiFiServer“serveris (80);

negaliojanti sąranka ()

{

Serial.begin (9600); // inicijuoti nuoseklųjį ryšį

pinMode (9, OUTPUT); // nustatyti LED kaiščio režimą

// patikrinkite, ar nėra skydo:

jei („WiFi.status () == WL_NO_SHIELD“{

Serial.println („WiFi skydo nėra“);

o (tiesa); // netęsk

}

Eilutė fv = WiFi.firmwareVersion ();

jei (fv! = "1.1.0") {

Serial.println ("Prašome atnaujinti programinę -aparatinę įrangą");

}

// bandymas prisijungti prie „Wifi“tinklo:

while (būsena! = WL_CONNECTED) {

Serial.print ("Bandoma prisijungti prie tinklo pavadinimu:");

Serial.println (ssid); // spausdinti tinklo pavadinimą (SSID);

// Prisijunkite prie WPA/WPA2 tinklo. Pakeiskite šią eilutę, jei naudojate atvirą arba WEP tinklą:

status = WiFi.begin (ssid, pass);

// palaukite 10 sekundžių, kol prisijungsite:

vėlavimas (10000);

}

server.begin (); // paleiskite žiniatinklio serverį 80 prievade

printWifiStatus (); // dabar esate prisijungę, todėl išspausdinkite būseną

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Inicijuokite visus taškus į „išjungtą“

pinMode („micPin“, INPUT);

for (int thisReading = 0; thisReading <numReadings; thisReading ++) {

rodmenys [thisReading] = 0;

}

}

void rainbow (uint8_t wait) {

uint16_t i, j;

(j = 0; j <256; j ++) {

už (i = 0; t

strip.setPixelColor (i, ratas ((i+j) ir 255));

}

strip.show ();

atidėti (laukti);

}

}

void visualizer () {

total = total - rodmenys [readIndex];

rodmenys [readIndex] = analogRead (micPin);

iš viso = iš viso + rodmenys [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

vidurkis = bendras / numReadings;

uždelsimas (1);

int micpixel = (vidurkis-100)/5;

Serial.println (mikropikselių);

jei (mikropikselių> 0) {

{

(int j = 0; j <= mikropikselių; j ++)

strip.setPixelColor (j, (mikropikselių*2), 0, (90 mikropikselių), 0);

(int j = mikropikselių; j <= NUM_LEDS; j ++)

strip.setPixelColor (j, 0, 0, 0, 0);

strip.show ();

}

}

jei (mikropikselių <0) {

(int j = 0; j <= 20; j ++)

strip.setPixelColor (j, 0, 0, 50, 0);

strip.show ();

}

}

void loop () {

{

„WiFiClient“klientas = serveris.pasiekiamas (); // klausytis atvykstančių klientų

if (klientas) {// jei gausite klientą, Serial.println („naujas klientas“); // išspausdinkite pranešimą iš nuoseklaus prievado

String currentLine = ""; // padaryti eilutę, kad būtų galima laikyti gaunamus duomenis iš kliento

while (client.connected ()) {// kilpa, kol klientas prijungtas

if (client.available ()) {// jei yra baitų skaityti iš kliento, char c = client.read (); // tada skaityk baitą

Serial.write (c); // atsispausdinkite serijinį monitorių

if (c == '\ n') {// jei baitas yra naujos eilutės simbolis

// jei dabartinė eilutė tuščia, iš eilės turite du naujos eilutės simbolius.

// tai kliento HTTP užklausos pabaiga, todėl atsiųskite atsakymą:

if (currentLine.length () == 0) {

// HTTP antraštės visada prasideda nuo atsakymo kodo (pvz., HTTP/1.1 200 Gerai)

// ir turinio tipas, kad klientas žinotų, kas ateina, tada tuščia eilutė:

client.println („HTTP/1.1 200 OK“);

client.println ("Turinio tipas: tekstas/html");

klientas.println ();

// HTTP atsakymo turinys seka po antraštės:

client.print („Spustelėkite čia Įjungti vaivorykštės efektą“);

client.print („Spustelėkite čia Įjungti vizualizatorių“);

// HTTP atsakymas baigiasi kita tuščia eilute:

klientas.println ();

// išsiveržti iš ciklo:

pertrauka;

} else {// jei gavote naują eilutę, išvalykite currentLine:

CurrentLine = "";

}

} else if (c! = '\ r') {// jei turite ką nors kita, išskyrus vežimo grąžinimo simbolį, CurrentLine += c; // pridėti jį prie dabartinės eilutės pabaigos

}

// Patikrinkite, ar kliento užklausa buvo „GET /H“ar „GET /L“:

if (currentLine.endsWith ("GET /R")) {

Vaivorykštė (10); // Vaivorykštės efektas įjungtas

}

if (currentLine.endsWith ("GET /V")) {

Vizualizatorius (); // Vizualizatorius įjungtas

}

}

}

// uždaryti ryšį:

client.stop ();

Serial.println ("klientas atjungtas");

}

}

void printWifiStatus () {

// spausdinkite tinklo, prie kurio esate prisijungę, SSID:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// atspausdinkite „WiFi“skydo IP adresą:

IPAddress ip = WiFi.localIP ();

Serial.print („IP adresas:“);

Serial.println (ip);

// spausdinti gauto signalo stiprumą:

ilgas rssi = WiFi. RSSI ();

Serial.print ("signalo stiprumas (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// spausdinti, kur eiti naršyklėje:

Serial.print ( Norėdami pamatyti šį puslapį veikiant, atidarykite naršyklę adresu

Serial.println (ip);

}

}

uint32_t ratas (baitas „WheelPos“) {

WheelPos = 255 - WheelPos;

jei („WheelPos <85“) {

grąžinimo juostelė. Spalva (255 - „WheelPos“* 3, 0, „WheelPos“* 3, 0);

}

jei („WheelPos <170“) {

„WheelPos“-= 85;

grąžinimo juostelė. Spalva (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

„WheelPos“-= 170;

grąžinimo juostelė. Spalva („WheelPos“* 3, 255 - „WheelPos“* 3, 0, 0);

}

uint8_t raudona (uint32_t c) {

grįžimas (c >> 16);

}

uint8_t žalia (uint32_t c) {

grįžimas (c >> 8);

}

uint8_t blue (uint32_t c) {

grąžinimas (c);

}

}

// Serijinis.println (mikropikselis);

}

4 žingsnis: 3d lempos pagrindo spausdinimas

3d lempos pagrindo spausdinimas
3d lempos pagrindo spausdinimas

Buvo išmatuotas, suprojektuotas ir atspausdintas 3D lempos pagrindo modelis, kurio matmenys yra pakankamai dideli, kad tilptų visi pagrindo skyriaus viduje esantys elektriniai komponentai.

5 žingsnis: LED priedas

Led priedas
Led priedas

Ledai buvo suvynioti į kartoninį ritinį ir pritvirtinti naudojant dvipusę juostą, apatinėje dalyje buvo išgręžta skylė vielai praleisti

6 žingsnis: lempos gaubtas

Lempos gaubtas
Lempos gaubtas

Dangtelis buvo pagamintas radus skaidrų butelį, kurio plotis panašus į lempos pagrindą, o aukštis - kaip LED priedas. Tada jis buvo padengtas storu popieriumi, kad būtų geriau skleidžiama šviesa. Arba kaip lempos gaubtą galima naudoti matinį stiklą arba permatomus plastikinius vamzdelius.

7 veiksmas: sąranka

Sąranka
Sąranka

Viskas buvo suklijuota ir surinkta. Ir lempa buvo paruošta tam tikriems bandymams !.

Rekomenduojamas: