Indholdsfortegnelse:
- Trin 1: Nødvendigt materiale
- Trin 2: Kredsløbsdiagram
- Trin 3: Arduino -kode
- Trin 4: 3d Udskrivning af lampens bund
- Trin 5: Led vedhæftet fil
- Trin 6: Lampeindkapsling
- Trin 7: Opsætning
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette projekt udføres på kurset Teknologi til konceptdesign på TUDelft
Det endelige produkt er en ESP-32 base LED-lampe og er forbundet til serveren. Til prototypen har lampen to funktioner; en regnbueeffekt, der udsender en beroligende farveskiftende glød mod sine omgivelser og for det andet lydvisualisator, hvor LED -pixels "danser" efter lydniveauer. Systemet er forbundet til wifi, og brugeren kan vælge, hvilken effekt de ønsker fra lampen via WIFI.
Den billige ESP-32 mikrochip giver os kraftfulde processorer, indbygget hall-sensor, temperatursensor, berøringssensor og også wifi og bluetooth-kapacitet. Med dette, mens kun to effekter blev valgt til dette projekt, er implikationen af denne "smarte" lampe ubegrænset. Det ville blive brugt til at angive vejret for brugeren eller temperaturen i rummet, selve lampen kan fungere som en alarmudløser, eller det kan give et beroligende sollys ved siden af din seng og simulere solopgang for en dejlig vågneoplevelse.
Trin 1: Nødvendigt materiale
Arduino esp32
Lydsensor
Firevejs tovejs logisk niveauomformer
Neopixel LED 2m 60 LED/m
Jumper ledninger
Micro USB -kabel med adapter
internetforbindelse
Trin 2: Kredsløbsdiagram
Et kredsløbsdiagram blev tegnet, og kredsløbet blev lavet i overensstemmelse hermed som angivet i
diagrammet herunder.
Trin 3: Arduino -kode
Her blev der for det første lavet en visualisererkode. Derefter to eksempler på kode
; "Neoplxel RGBW starndtest"; og “simpleWebServerWifi” blev ændret og integreret i visualiseringskoden. Selvom koden til tider stadig er buggy (tilfældig LED lyser af og til). Næste iteration af koden (når vi får nok tid) vil blive opdateret.
#omfatte
#ifdef _AVR_
#omfatte
#Afslut Hvis
const int numReadings = 5;
int aflæsninger [numReadings];
int readIndex = 0;
int total = 0;
int gennemsnit = 0;
int micPin = 33;
#definer pinkode 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 };
#omfatte
#omfatte
char ssid = "dit netværk"; // dit netværks -SSID (navn)
char pass = "secretPassword"; // din netværksadgangskode
int keyIndex = 0; // din netværksnøgle Indeksnummer (kun nødvendigt for WEP)
int status = WL_IDLE_STATUS;
WiFiServer -server (80);
ugyldig opsætning ()
{
Serial.begin (9600); // initialisere seriel kommunikation
pinMode (9, OUTPUT); // indstil LED pin -tilstand
// tjek for skjoldets tilstedeværelse:
hvis (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("WiFi -skjold ikke til stede");
mens (sandt); // ikke fortsætte
}
String fv = WiFi.firmwareVersion ();
hvis (fv! = "1.1.0") {
Serial.println ("Opgrader venligst firmwaren");
}
// forsøg på at oprette forbindelse til Wifi -netværk:
mens (status! = WL_CONNECTED) {
Serial.print ("Forsøger at oprette forbindelse til netværk navngivet:");
Serial.println (ssid); // udskriv netværksnavnet (SSID);
// Opret forbindelse til WPA/WPA2 -netværk. Skift denne linje, hvis du bruger åbent eller WEP -netværk:
status = WiFi.begin (ssid, pass);
// vent 10 sekunder på forbindelse:
forsinkelse (10000);
}
server.begin (); // start webserveren på port 80
printWifiStatus (); // du har forbindelse nu, så udskriv status
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Initialiser alle pixels til 'off'
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
aflæsninger [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 - aflæsninger [readIndex];
aflæsninger [readIndex] = analogRead (micPin);
total = total + aflæsninger [readIndex];
readIndex = readIndex + 1;
hvis (readIndex> = numReadings) {
readIndex = 0;
}
gennemsnit = total / numReadings;
forsinkelse (1);
int micpixel = (gennemsnit-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 (); // lyt efter indgående klienter
hvis (klient) {// hvis du får en klient, Serial.println ("ny klient"); // udskriv en besked ud af den serielle port
String currentLine = ""; // lav en streng for at gemme indgående data fra klienten
while (client.connected ()) {// loop mens klienten er tilsluttet
if (client.available ()) {// hvis der er bytes at læse fra klienten, char c = client.read (); // læs en byte
Serial.write (c); // udskriv den serielle skærm
hvis (c == '\ n') {// hvis byte er et nyt linjetegn
// hvis den aktuelle linje er tom, har du to newline -tegn i træk.
// det er slutningen på klientens HTTP -anmodning, så send et svar:
hvis (currentLine.length () == 0) {
// HTTP -headere starter altid med en svarskode (f.eks. HTTP/1.1 200 OK)
// og en indholdstype, så klienten ved, hvad der kommer, derefter en tom linje:
client.println ("HTTP/1.1 200 OK");
client.println ("Indholdstype: tekst/html");
client.println ();
// indholdet af HTTP -svaret følger overskriften:
client.print ("Klik her Slå Rainbow -effekt til");
client.print ("Klik her Slå Visualizer til");
// HTTP -svaret slutter med endnu en tom linje:
client.println ();
// bryde ud af mens loop:
pause;
} ellers {// hvis du har en ny linje, skal du rydde currentLine:
currentLine = "";
}
} ellers hvis (c! = '\ r') {// hvis du har andet end en vognretur, currentLine += c; // tilføj det til slutningen af currentLine
}
// Kontroller, om klientanmodningen var "GET /H" eller "GET /L":
hvis (currentLine.endsWith ("GET /R")) {
Regnbue (10); // Rainbow -effekt slået til
}
hvis (currentLine.endsWith ("GET /V")) {
Visualizer (); // Visualizer er slået til
}
}
}
// luk forbindelsen:
client.stop ();
Serial.println ("klient afbrudt");
}
}
void printWifiStatus () {
// udskriv SSID for det netværk, du er knyttet til:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// udskriv dit WiFi -skjolds IP -adresse:
IPAddress ip = WiFi.localIP ();
Serial.print ("IP -adresse:");
Serial.println (ip);
// udskriv den modtagne signalstyrke:
lang rssi = WiFi. RSSI ();
Serial.print ("signalstyrke (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// print hvor du skal hen i en browser:
Serial.print ( For at se denne side i aktion skal du åbne en browser til
Serial.println (ip);
}
}
uint32_t Wheel (byte WheelPos) {
WheelPos = 255 - WheelPos;
hvis (WheelPos <85) {
returstrimmel. Farve (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
hvis (WheelPos <170) {
WheelPos -= 85;
returstrimmel. Farve (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
returstrimmel. Farve (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t rød (uint32_t c) {
retur (c >> 16);
}
uint8_t grøn (uint32_t c) {
retur (c >> 8);
}
uint8_t blå (uint32_t c) {
retur (c);
}
}
//Serial.println(micpixel);
}
Trin 4: 3d Udskrivning af lampens bund
En 3d -model af lampefoden blev målt, designet og printet med dimensioner, der var store nok til at passe til alle de elektriske komponenter inde i bundrummet.
Trin 5: Led vedhæftet fil
Led’er blev viklet i paprulle og fastgjort ved hjælp af dobbeltsidet tape, der blev boret et hul i den nederste del for at føre tråden igennem
Trin 6: Lampeindkapsling
Et kabinet blev lavet ved at finde en gennemsigtig flaske med lignende bredde som lampefod og højde som LED -vedhæftet fil. Dette blev derefter dækket med tykt papir for bedre diffusion af lys. Alternativt er det muligt at bruge frostet glas eller gennemsigtige plastrør som lampeindretning.
Trin 7: Opsætning
Alt blev limet sammen og samlet. Og lampen var klar til nogle test !.
Anbefalede:
LightBox Music Visualizer: 5 trin (med billeder)
LightBox Music Visualizer: LightBox bruger din telefons eller tablets indbyggede mikrofon til at analysere musik til at generere smukke lysmønstre, der matcher musikken. Bare start appen, placer din telefon eller tablet et sted tæt på en lydkilde, og din boks vil visualisere
Bluetooth -højttaler med Music Visualizer: 10 trin (med billeder)
Bluetooth -højttaler med Music Visualizer: I denne instrukser viser jeg dig, hvordan jeg bygger denne Bluetooth -højttaler, der har en musikvisualiseringsværktøj øverst. Det ser virkelig fedt ud og gør lyden af din sang mere fantastisk. Du kan beslutte, om du vil tænde visualiseren eller ej
Arduino Music Reactive Desktop Lamp: 8 trin (med billeder)
Arduino Music Reactive Desktop Lamp: Hej alle sammen! I denne build vil vi lave en reaktiv LED -skrivebordslampe ved hjælp af enkle komponenter og nogle grundlæggende Arduino -programmering. Det gør en imponerende effekt, hvor lyset vil danse til alle lyde og musik. Jeg gennemførte dette projekt med en teamkammerat
Music Visualizer (oscilloskop): 4 trin (med billeder)
Music Visualizer (oscilloskop): Denne musikalske visualizer giver en glimrende måde at tilføre mere dybde til oplevelsen af din musik og er ret let at bygge. Det kan også være nyttigt som et egentligt oscilloskop til nogle applikationer, alt hvad der kræves er: -en gammel crt (næsten alle b & am
Nixie Tube Music Visualizer: 10 trin (med billeder)
Nixie Tube Music Visualizer: En hypnotiserende musik visualizer inspireret af de små søjler øverst i iTunes. Fjorten russiske IN-13 Nixie bargraph-rør bruges som display. Længden, som hvert nixie -rør lyser, repræsenterer volumenet af en bestemt frekvens i mu