Innholdsfortegnelse:
- Trinn 1: Nødvendig materiale
- Trinn 2: Kretsdiagram
- Trinn 3: Arduino -kode
- Trinn 4: 3D -utskrift av lampens base
- Trinn 5: Led -vedlegg
- Trinn 6: Lampehus
- Trinn 7: Oppsett
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Dette prosjektet er gjort for emnet Teknologi for konseptdesign ved TUDelft
Sluttproduktet er en ESP-32 LED-lampe og er koblet til serveren. For prototypen har lampen to funksjoner; en regnbueeffekt som avgir en beroligende fargeskiftende glød mot omgivelsene og for det andre lydvisualiserer der LED -pikslene "danser" etter lydnivåer. Systemet er koblet til wifi, og brukeren kan velge hvilken effekt de vil ha fra lampen via WIFI.
Den billige ESP-32-mikrobrikken gir oss kraftige prosessorer, innebygd hallsensor, temperatursensor, berøringssensor og også wifi- og bluetooth-funksjoner. Med dette, mens bare to effekter ble valgt for dette prosjektet, er implikasjonen av denne "smarte" lampen ubegrenset. Det vil bli brukt til å indikere været for brukeren, eller temperaturen i rommet, selve lampen kan fungere som en alarmutløser, eller den kan gi en beroligende sollys ved siden av sengen din som simulerer soloppgang for en hyggelig oppvåkningsopplevelse.
Trinn 1: Nødvendig materiale
Arduino esp32
Lydsensor
Fireveis toveis logisk nivåomformer
Neopixel led 2m 60 led/m
Jumper ledninger
Micro USB -kabel med adapter
Internett-tilkobling
Trinn 2: Kretsdiagram
Et kretsdiagram ble tegnet og kretsen ble laget tilsvarende som angitt i
diagrammet nedenfor.
Trinn 3: Arduino -kode
Her ble det først laget en visualiseringskode. Deretter to eksempler på kode
; "Neoplxel RGBW starndtest"; og “simpleWebServerWifi” ble endret og integrert i visualiseringskoden. Selv om koden til tider fortsatt er buggy (tilfeldige LED lyser av og til). Neste iterasjon av koden (når vi får nok tid) vil bli oppdatert.
#inkludere
#ifdef _AVR_
#inkludere
#slutt om
const int numReadings = 5;
int avlesninger [numReadings];
int readIndex = 0;
int totalt = 0;
int gjennomsnitt = 0;
int micPin = 33;
#definere PIN 4
#define NUM_LEDS 120
#define BRIGHTNESS 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 };
#inkludere
#inkludere
char ssid = "dittNettverk"; // nettverks -SSID (navn)
char pass = "secretPassword"; // nettverkspassordet ditt
int keyIndex = 0; // nettverksnøkkelen din Indeksnummer (bare nødvendig for WEP)
int status = WL_IDLE_STATUS;
WiFiServer -server (80);
ugyldig oppsett ()
{
Serial.begin (9600); // initialisere seriell kommunikasjon
pinMode (9, OUTPUT); // angi LED -pin -modus
// sjekk om skjoldet er tilstede:
hvis (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("WiFi -skjold ikke tilstede");
mens (sant); // ikke fortsett
}
String fv = WiFi.firmwareVersion ();
hvis (fv! = "1.1.0") {
Serial.println ("Oppgrader fastvaren");
}
// forsøk på å koble til Wifi -nettverk:
mens (status! = WL_CONNECTED) {
Serial.print ("Forsøk på å koble til nettverk med navn:");
Serial.println (ssid); // skrive ut nettverksnavnet (SSID);
// Koble til WPA/WPA2 -nettverk. Endre denne linjen hvis du bruker åpent eller WEP -nettverk:
status = WiFi.begin (ssid, pass);
// vent 10 sekunder på tilkobling:
forsinkelse (10000);
}
server.begin (); // start webserveren på port 80
printWifiStatus (); // du er tilkoblet nå, så skriv ut statusen
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Initialiser alle piksler til "av"
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
avlesninger [thisReading] = 0;
}
}
ugyldig regnbue (uint8_t vent) {
uint16_t i, j;
for (j = 0; j <256; j ++) {
for (i = 0; i
strip.setPixelColor (i, Wheel ((i+j) & 255));
}
strip.show ();
forsinkelse (vent);
}
}
void visualizer () {
total = total - avlesninger [readIndex];
avlesninger [readIndex] = analogRead (micPin);
total = total + avlesninger [readIndex];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {
readIndex = 0;
}
gjennomsnitt = total / numReadings;
forsinkelse (1);
int micpixel = (gjennomsnitt-100)/5;
Serial.println (micpixel);
hvis (micpixel> 0) {
{
for (int j = 0; j <= micpixel; j ++)
strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);
for (int j = micpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
hvis (micpixel <0) {
for (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
void loop () {
{
WiFiClient -klient = server.available (); // lytte etter innkommende klienter
if (klient) {// hvis du får en klient, Serial.println ("ny klient"); // skriv ut en melding ut den serielle porten
String currentLine = ""; // lage en streng for å lagre innkommende data fra klienten
while (client.connected ()) {// loop mens klienten er tilkoblet
if (client.available ()) {// hvis det er byte å lese fra klienten, char c = client.read (); // les en byte, da
Serial.write (c); // Skriv ut den serielle skjermen
if (c == '\ n') {// hvis byten er et nytt linjetegn
// hvis den gjeldende linjen er tom, har du to nylinjetegn på rad.
// det er slutten på klientens HTTP -forespørsel, så send et svar:
hvis (currentLine.length () == 0) {
// HTTP -overskrifter starter alltid med en responskode (f.eks. HTTP/1.1 200 OK)
// og en innholdstype slik at klienten vet hva som kommer, deretter en tom linje:
client.println ("HTTP/1.1 200 OK");
client.println ("Innholdstype: tekst/html");
client.println ();
// innholdet i HTTP -svaret følger overskriften:
client.print ("Klikk her Slå på Rainbow -effekt");
client.print ("Klikk her Slå på Visualizer");
// HTTP -svaret ender med en annen tom linje:
client.println ();
// bryte ut av mens -løkken:
gå i stykker;
} annet {// hvis du har en ny linje, fjern deretter currentLine:
currentLine = "";
}
} annet hvis (c! = '\ r') {// hvis du har noe annet enn en vognretur, currentLine += c; // legg den til slutten av currentLine
}
// Sjekk om klientforespørselen var "GET /H" eller "GET /L":
if (currentLine.endsWith ("GET /R")) {
Regnbue (10); // Rainbow -effekt slått på
}
if (currentLine.endsWith ("GET /V")) {
Visualizer (); // Visualizer er slått på
}
}
}
// steng tilkoblingen:
client.stop ();
Serial.println ("klient frakoblet");
}
}
void printWifiStatus () {
// Skriv ut SSID for nettverket du er koblet til:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// Skriv ut WiFi -skjoldets IP -adresse:
IPAddress ip = WiFi.localIP ();
Serial.print ("IP -adresse:");
Serial.println (ip);
// Skriv ut mottatt signalstyrke:
lang rssi = WiFi. RSSI ();
Serial.print ("signalstyrke (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// Skriv ut hvor du skal dra i en nettleser:
Serial.print ( For å se denne siden i bruk, åpne en nettleser for
Serial.println (ip);
}
}
uint32_t Wheel (byte WheelPos) {
WheelPos = 255 - WheelPos;
hvis (WheelPos <85) {
returlist. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
hvis (WheelPos <170) {
WheelPos -= 85;
returlist. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
returlist. Farge (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t rød (uint32_t c) {
retur (c >> 16);
}
uint8_t grønn (uint32_t c) {
retur (c >> 8);
}
uint8_t blå (uint32_t c) {
retur (c);
}
}
//Serial.println(micpixel);
}
Trinn 4: 3D -utskrift av lampens base
En 3d -modell av lampefoten ble målt, designet og skrevet ut med dimensjoner som var store nok til å passe alle elektriske komponenter inne i baserommet.
Trinn 5: Led -vedlegg
Led -er ble viklet i papprull og festet med dobbeltsidig tape, et hull ble boret i den nedre delen for å føre tråden gjennom
Trinn 6: Lampehus
Et kabinett ble laget ved å finne en gjennomsiktig flaske med lignende bredde som lampefoten og høyden som LED -tilbehøret. Dette ble deretter dekket med tykt papir for bedre diffusjon av lys. Alternativt er det mulig å bruke frostet glass eller gjennomskinnelige plastrør som lampehus.
Trinn 7: Oppsett
Alt ble limt sammen og satt sammen. Og lampen var klar for noen tester !.
Anbefalt:
LightBox Music Visualizer: 5 trinn (med bilder)
LightBox Music Visualizer: LightBox bruker telefonens eller nettbrettets innebygde mikrofon til å analysere musikk for å generere vakre lysmønstre som matcher musikken. Bare start appen, plasser telefonen eller nettbrettet et sted i nærheten av en lydkilde, og boksen din vil visualisere
Bluetooth -høyttaler med Music Visualizer: 10 trinn (med bilder)
Bluetooth -høyttaler med Music Visualizer: I denne instruksjonsfilen skal jeg vise deg hvordan jeg bygger denne Bluetooth -høyttaleren som har en musikkvisualisering øverst. Det ser veldig kult ut og gjør lyttemomentet til sangen din mer fantastisk. Du kan bestemme om du vil slå på visualisereren eller ikke
Arduino Music Reactive Desktop Lamp: 8 trinn (med bilder)
Arduino Music Reactive Desktop Lamp: Hei alle sammen! I denne bygningen vil vi lage en reaktiv LED -bordlampe ved hjelp av enkle komponenter og litt grunnleggende Arduino -programmering. Det gir en imponerende effekt der lyset vil danse til alle lyder og musikk. Jeg fullførte dette prosjektet med en lagkamerat
Music Visualizer (oscilloskop): 4 trinn (med bilder)
Music Visualizer (oscilloskop): Denne musikalske visualisereren gir en utmerket måte å legge mer dybde til opplevelsen av musikken din, og er ganske enkel å bygge. Det kan også være nyttig som et faktisk oscilloskop for noen applikasjoner, alt som kreves er: -en gammel crt (nesten alle b & am
Nixie Tube Music Visualizer: 10 trinn (med bilder)
Nixie Tube Music Visualizer: En hypnotiserende musikk visualizer inspirert av de små stolpene på toppen av iTunes. Fjorten russiske IN-13 Nixie bargraph-rør brukes som display. Lengden som hvert nixie -rør lyser, representerer volumet til en viss frekvens i mu