Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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 !.