Talaan ng mga Nilalaman:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Hakbang (na may Mga Larawan)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Hakbang (na may Mga Larawan)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Hakbang (na may Mga Larawan)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Hakbang (na may Mga Larawan)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Hulyo
Anonim
Image
Image
Diagram ng Circuit
Diagram ng Circuit

Ang proyektong ito ay tapos na para sa kurso Teknolohiya para sa Disenyo ng Konsepto sa TUDelft

Ang Huling produkto ay isang base lamp na LED na ESP-32 at nakakonekta sa server. Para sa prototype, ang lampara ay may dalawang pag-andar; isang epekto ng bahaghari na naglalabas ng isang nakapapawing pagod na kulay na paglilipat patungo sa mga paligid nito at pangalawa ng tunog na visualizer kung saan ang "LED pixel" sumayaw "ayon sa mga antas ng tunog. Ang system ay konektado sa wifi at ang gumagamit ay maaaring pumili kung anong epekto ang nais nila mula sa lampara sa pamamagitan ng WIFI.

Ang murang ESP-32 microchip ay nagbibigay sa amin ng mga makapangyarihang processor, inbuilt na sensor ng hall, sensor ng temperatura, touch sensor at may kakayahan din sa wifi at bluetooth. Sa pamamagitan nito, habang dalawang epekto lamang ang napili para sa proyektong ito, Ang implikasyon ng "matalinong" lampara na ito ay walang hanggan. Gagamitin ito upang ipahiwatig ang lagay ng panahon sa gumagamit, o ang temperatura ng silid, ang lampara mismo ay maaaring kumilos bilang isang gatilyo ng alarma o maaari itong magbigay ng isang pagpapatahimik na sikat ng araw sa tabi ng iyong kama na tumutulad sa pagsikat ng araw para sa isang magandang karanasan sa paggising.

Hakbang 1: Kailangan ng Materyal

Arduino esp32

Sound sensor

Apat na paraan Bi-Directional Logic Level converter

Pinangunahan ng Neopixel 2m 60 led / m

Jumper wires

Micro USB cable na may adapter

Internet connection

Hakbang 2: Diagram ng Circuit

Ang isang diagram ng circuit ay iginuhit at ang circuit ay ginawa nang naaayon tulad ng naibigay sa

ang diagram sa ibaba.

Hakbang 3: Arduino Code

Dito, unang ginawa ang code ng visualizer. Pagkatapos, dalawang halimbawa ng code

; "Neoplxel RGBW starndtest"; at ang "simpleWebServerWifi" ay binago at isinama sa loob ng visualizer code. Bagaman ang code ay maraming surot pa rin (paminsan-minsang light up light up light). Susunod na pag-ulit ng code (sa sandaling makakuha kami ng sapat na oras) ay maa-update.

# isama

#ifdef _AVR_

# isama

#tapusin kung

const int numReadings = 5;

int readings [numReadings];

int readIndex = 0;

int kabuuang = 0;

int average = 0;

int micPin = 33;

# tukuyin ang PIN 4

# tukuyin ang NUM_LEDS 120

# tukuyin ang KARAPATAN 100

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

byte 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 };

# isama

# isama

char ssid = "yourNetwork"; // iyong network SSID (pangalan)

pass pass = "secretPassword"; // iyong network password

int keyIndex = 0; // iyong network key Index number (kailangan lang para sa WEP)

int status = WL_IDLE_STATUS;

WiFiServer server (80);

walang bisa ang pag-setup ()

{

Serial.begin (9600); // ipasimula ang serial komunikasyon

pinMode (9, OUTPUT); // itakda ang LED pin mode

// suriin ang pagkakaroon ng kalasag:

kung (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("Hindi naroon ang kalasag ng WiFi");

habang (totoo); // huwag mong ituloy

}

String fv = WiFi.firmwareVersion ();

kung (fv! = "1.1.0") {

Serial.println ("Mangyaring i-upgrade ang firmware");

}

// pagtatangka upang kumonekta sa Wifi network:

habang (status! = WL_CONNected) {

Serial.print ("Pagtatangka upang kumonekta sa Network na pinangalanang:");

Serial.println (ssid); // print the network name (SSID);

// Kumonekta sa WPA / WPA2 network. Baguhin ang linyang ito kung gumagamit ng bukas o WEP network:

katayuan = WiFi.begin (ssid, pass);

// maghintay ng 10 segundo para sa koneksyon:

pagkaantala (10000);

}

server.begin (); // simulan ang web server sa port 80

printWifiStatus (); // nakakonekta ka ngayon, kaya i-print ang katayuan

}

{

Serial.begin (9600);

strip.setBightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Initialize all pixel to 'off'

pinMode (micPin, INPUT);

para sa (int thisReading = 0; thisReading <numReadings; thisReading ++) {

mga pagbasa [thisReading] = 0;

}

}

walang bisa ang bahaghari (uint8_t wait) {

uint16_t i, j;

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

para sa (i = 0; i

strip.setPixelColor (i, Wheel ((i + j) & 255));

}

strip.show ();

antala (maghintay);

}

}

void visualizer () {

kabuuan = kabuuan - mga pagbasa [readIndex];

mga pagbasa [readIndex] = analogRead (micPin);

total = total + readings [readIndex];

readIndex = readIndex + 1;

kung (readIndex> = numReadings) {

readIndex = 0;

}

average = total / numReadings;

antala (1);

int micpixel = (average-100) / 5;

Serial.println (micpixel);

kung (micpixel> 0) {

{

para sa (int j = 0; j <= micpixel; j ++)

strip.setPixelColor (j, (micpixel * 2), 0, (90-micpixel), 0);

para sa (int j = micpixel; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

kung (micpixel <0) {

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

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

strip.show ();

}

}

void loop () {

{

WiFiClient client = server.available (); // makinig para sa mga papasok na kliyente

kung (client) {// kung makakakuha ka ng isang kliyente, Serial.println ("bagong client"); // print a message out the serial port

String currentLine = ""; // gumawa ng isang String upang hawakan ang papasok na data mula sa client

habang (client.connected ()) {// loop habang ang client ay konektado

kung (client.available ()) {// kung mayroong mga byte na babasahin mula sa client, char c = client.read (); // basahin ang isang byte, pagkatapos

Serial.write (c); // print it out the serial monitor

kung (c == '\ n') {// kung ang byte ay isang bagong character na newline

// kung ang kasalukuyang linya ay blangko, nakakuha ka ng dalawang sunod-sunod na mga character sa isang hilera.

// na ang pagtatapos ng kahilingan sa HTTP ng kliyente, kaya magpadala ng isang tugon:

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

// Palaging nagsisimula ang mga header ng HTTP ng isang code sa pagtugon (hal. HTTP / 1.1 200 OK)

// at isang uri ng nilalaman upang malaman ng kliyente kung ano ang darating, pagkatapos ay isang blangko na linya:

client.println ("HTTP / 1.1 200 OK");

client.println ("Uri ng nilalaman: teksto / html");

client.println ();

// ang nilalaman ng tugon sa HTTP ay sumusunod sa header:

client.print ("Mag-click dito Buksan ang Rainbow effect");

client.print ("Mag-click dito Buksan ang Visualizer");

// Ang pagtugon sa HTTP ay nagtapos sa isa pang blangko na linya:

client.println ();

// break out of the habang loop:

pahinga;

} iba pa {// kung nakakuha ka ng isang bagong linya, pagkatapos i-clear ang kasalukuyangLine:

currentLine = "";

}

} iba pa kung (c! = '\ r') {// kung mayroon kang ibang bagay maliban sa isang character na bumalik sa karwahe, currentLine + = c; // idagdag ito sa dulo ng kasalukuyangLine

}

// Suriin kung ang hiniling ng kliyente ay "GET / H" o "GET / L":

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

Rainbow (10); // Rainbow effect nakabukas

}

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

Visualizer (); // Ang Visualizer ay nakabukas

}

}

}

// isara ang koneksyon:

client.stop ();

Serial.println ("disonnect ng client");

}

}

walang bisa ang printWifiStatus () {

// i-print ang SSID ng network na iyong nakalakip:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// i-print ang IP address ng iyong kalasag sa WiFi:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP Address:");

Serial.println (ip);

// i-print ang natanggap na lakas ng signal:

mahabang rssi = WiFi. RSSI ();

Serial.print ("lakas ng signal (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// print kung saan pupunta sa isang browser:

Serial.print ( Upang makita ang pahinang ito sa pagkilos, buksan ang isang browser sa

Serial.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

kung (WheelPos <85) {

return strip. Kulay (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

kung (WheelPos <170) {

WheelPos - = 85;

return strip. Kulay (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos - = 170;

return strip. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t pula (uint32_t c) {

bumalik (c >> 16);

}

uint8_t berde (uint32_t c) {

bumalik (c >> 8);

}

uint8_t blue (uint32_t c) {

ibalik (c);

}

}

//Serial.println(micpixel);

}

Hakbang 4: 3d Pagpi-print ng Base ng Lampara

Pag-print ng 3d ng Batayan ng Ilaw
Pag-print ng 3d ng Batayan ng Ilaw

Ang isang 3d na modelo ng base ng lampara ay sinukat, dinisenyo at naka-print na may mga sukat na sapat na malaki upang magkasya ang lahat ng mga sangkap ng kuryente sa loob ng base kompartimento.

Hakbang 5: Humantong sa Attachment

Pinangunahan na Attachment
Pinangunahan na Attachment

Ang led's ay pinaliko sa karton na roll at naka-attach gamit ang dobleng panig na tape, isang butas ay drilled sa ilalim na bahagi upang maipasa ang kawad

Hakbang 6: Enclosure ng Lampara

Enclosure ng Lampara
Enclosure ng Lampara

Ang isang enclosure ay ginawa sa pamamagitan ng paghahanap ng isang transparent na bote na may katulad na lapad bilang base ng lampara at taas bilang LED na kalakip. Pagkatapos ay tinakpan ito ng makapal na papel para sa mas mahusay na pagsasabog ng ilaw. Bilang kahalili, posible na gumamit ng frosted glass o translucent plastic tubes bilang lampara ng lampara.

Hakbang 7: Pag-setup

Pag-set up
Pag-set up

Ang lahat ay nakadikit at pinagsama. At ang lampara ay handa na para sa ilang pagsubok !.

Inirerekumendang: