Inhaltsverzeichnis:

Smart Lamp (TCfD) - Rainbow + Music Visualizer - Gunook
Smart Lamp (TCfD) - Rainbow + Music Visualizer - Gunook

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer - Gunook

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer - Gunook
Video: LG Life’s Good Award : Conference - Full | LG 2024, November
Anonim
Image
Image
Schaltplan
Schaltplan

Dieses Projekt wird für den Studiengang Technologie für Konzeptdesign an der TUDelft durchgeführt

Das Endprodukt ist eine ESP-32-Sockel-LED-Lampe und wird mit dem Server verbunden. Für den Prototyp hat die Lampe zwei Funktionen; ein Regenbogeneffekt, der ein beruhigendes, farbwechselndes Leuchten in Richtung seiner Umgebung aussendet, und zweitens eine Klangvisualisierung, bei der die LED-Pixel je nach Geräuschpegel „tanzen“. Das System ist mit WLAN verbunden und der Benutzer kann über WLAN auswählen, welchen Effekt er von der Lampe haben möchte.

Der günstige ESP-32-Mikrochip bietet uns leistungsstarke Prozessoren, einen eingebauten Hall-Sensor, einen Temperatursensor, einen Berührungssensor sowie WLAN- und Bluetooth-Fähigkeiten. Während für dieses Projekt nur zwei Effekte ausgewählt wurden, sind die Auswirkungen dieser „intelligenten“Lampe grenzenlos. Sie wird verwendet, um dem Benutzer das Wetter oder die Temperatur des Raums anzuzeigen, die Lampe selbst kann als Alarmauslöser fungieren oder ein beruhigendes Sonnenlicht neben Ihrem Bett abgeben, das den Sonnenaufgang für ein schönes Aufwacherlebnis simuliert.

Schritt 1: Benötigtes Material

Arduino esp32

Schallsensor

Vier-Wege-bidirektionaler Logikpegelwandler

Neopixel-LED 2m 60 LED/m

Überbrückungsdrähte

Micro-USB-Kabel mit Adapter

Internetverbindung

Schritt 2: Schaltplan

Ein Schaltplan wurde gezeichnet und die Schaltung wurde entsprechend wie in angegeben hergestellt

das Diagramm unten.

Schritt 3: Arduino-Code

Hier wurde zunächst Visualizer-Code erstellt. Dann zwei Beispielcodes

;“Neoplxel RGBW Starndtest”; und „simpleWebServerWifi“wurde modifiziert und in den Visualizer-Code integriert. Obwohl der Code manchmal immer noch fehlerhaft ist (zufällige LEDs leuchten von Zeit zu Zeit auf). Die nächste Iteration des Codes (sobald wir genug Zeit haben) wird aktualisiert.

#enthalten

#ifdef _AVR_

#enthalten

#endif

const int numReadings = 5;

int Messwerte[numReadings];

int readIndex = 0;

int gesamt = 0;

int-Durchschnitt = 0;

int micPin = 33;

#definiere PIN 4

#define NUM_LEDS 120

#define HELLIGKEIT 100

Adafruit_NeoPixel-Streifen = 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 };

#enthalten

#enthalten

char ssid = "IhrNetzwerk"; // Ihre Netzwerk-SSID (Name)

char pass = "geheimesPasswort"; // Ihr Netzwerk-Passwort

int keyIndex = 0; // Ihr Netzwerkschlüssel Indexnummer (wird nur für WEP benötigt)

int-Status = WL_IDLE_STATUS;

WiFiServer-Server (80);

Void-Setup ()

{

Serial.begin (9600); // serielle Kommunikation initialisieren

pinMode(9, AUSGANG); // Setze den LED-Pin-Modus

// Überprüfen Sie, ob das Schild vorhanden ist:

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

Serial.println ("WiFi-Schild nicht vorhanden");

während (wahr); // nicht weiter

}

String fv = WiFi.firmwareVersion();

if (fv != "1.1.0") {

Serial.println ("Bitte aktualisieren Sie die Firmware");

}

// Versuch, eine Verbindung zum Wifi-Netzwerk herzustellen:

while (status != WL_CONNECTED) {

Serial.print ("Versuch, eine Verbindung zum Netzwerk mit dem Namen herzustellen: ");

Serial.println (ssid); // drucke den Netzwerknamen (SSID);

// Verbindung zum WPA/WPA2-Netzwerk herstellen. Ändern Sie diese Zeile, wenn Sie ein offenes oder WEP-Netzwerk verwenden:

status = WiFi.begin(ssid, pass);

// 10 Sekunden auf Verbindung warten:

Verzögerung (10000);

}

server.begin(); // starte den Webserver auf Port 80

printWifiStatus(); // Sie sind jetzt verbunden, also drucken Sie den Status aus

}

{

Serial.begin (9600);

strip.setHelligkeit (HELLIGKEIT);

strip.begin();

Strip-Show(); // Alle Pixel auf 'off' initialisieren

pinMode (micPin, INPUT);

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

Messwerte[thisReading] = 0;

}

}

void rainbow(uint8_t warte) {

uint16_t i, j;

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

für(i=0; i

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

}

Strip-Show();

verzögern (warten);

}

}

Void Visualisierer () {

total = total - Messwerte[readIndex];

Messwerte[readIndex] = analogRead(micPin);

Gesamt = Gesamt + Messwerte[readIndex];

readIndex = readIndex + 1;

if (readIndex >= numReadings) {

readIndex = 0;

}

Durchschnitt = gesamt / numReadings;

Verzögerung(1);

int-Micpixel = (Durchschnitt-100)/5;

Serial.println (Micpixel);

wenn (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();

}

}

if (Micpixel < 0) {

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

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

Strip-Show();

}

}

Leere Schleife () {

{

WiFiClient-Client = server.available(); // auf eingehende Kunden hören

if (client) { // wenn du einen Client bekommst, Serial.println("neuer Kunde"); // eine Nachricht über den seriellen Port ausgeben

String currentLine = ""; // einen String erstellen, um eingehende Daten vom Client aufzunehmen

while (client.connected()) { // Schleife während der Client verbunden ist

if (client.available()) { // wenn Bytes vom Client zu lesen sind, char c = client.read(); // ein Byte lesen, dann

Serial.write (c); // den seriellen Monitor ausdrucken

if (c == '\n') { // wenn das Byte ein Zeilenumbruchzeichen ist

// Wenn die aktuelle Zeile leer ist, haben Sie zwei Zeilenumbrüche hintereinander.

// Das ist das Ende der HTTP-Anfrage des Clients, also senden Sie eine Antwort:

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

// HTTP-Header beginnen immer mit einem Antwortcode (z. B. HTTP/1.1 200 OK)

// und einen Inhaltstyp, damit der Client weiß, was kommt, dann eine Leerzeile:

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

client.println("Inhaltstyp:text/html");

client.println();

// Der Inhalt der HTTP-Antwort folgt dem Header:

client.print("Klicken Sie hier, um den Regenbogeneffekt zu aktivieren");

client.print("Hier klicken Visualizer einschalten");

// Die HTTP-Antwort endet mit einer weiteren Leerzeile:

client.println();

// aus der while-Schleife ausbrechen:

brechen;

} else { // Wenn Sie einen Zeilenumbruch haben, löschen Sie currentLine:

aktuelleLine = "";

}

} else if (c != '\r') { // wenn du etwas anderes als ein Wagenrücklaufzeichen hast, aktuelle Zeile += c; // füge es am Ende der aktuellen Zeile hinzu

}

// Überprüfen Sie, ob die Client-Anfrage "GET /H" oder "GET /L" war:

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

Regenbogen(10); // Regenbogeneffekt eingeschaltet

}

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

Visualisierer(); // Visualizer ist eingeschaltet

}

}

}

// Verbindung schließen:

client.stop();

Serial.println ("Client getrennt");

}

}

void printWifiStatus() {

// drucke die SSID des Netzwerks, mit dem du verbunden bist:

Serial.print("SSID:");

Serial.println (WiFi. SSID());

// drucke die IP-Adresse deines WiFi-Shields:

IPAdresse ip = WiFi.localIP();

Serial.print ("IP-Adresse: ");

Serial.println (ip);

// die empfangene Signalstärke ausgeben:

lange rssi = WiFi. RSSI();

Serial.print ("Signalstärke (RSSI):");

Serial.print (rssi);

Serial.println("dBm");

// Drucken Sie, wohin Sie in einem Browser gehen sollen:

Serial.print ( Um diese Seite in Aktion zu sehen, öffnen Sie einen Browser zu

Serial.println (ip);

}

}

uint32_t Wheel(byte WheelPos) {

WheelPos = 255 - WheelPos;

if(RadPos < 85) {

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

}

if(RadPos <170) {

RadPos -= 85;

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

}

RadPos -= 170;

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

}

uint8_t red(uint32_tc) {

zurück (c >> 16);

}

uint8_t grün(uint32_t c) {

zurück (c >> 8);

}

uint8_t blau(uint32_t c) {

zurück (c);

}

}

//Seriell.println (Micpixel);

}

Schritt 4: 3D-Druck der Basis der Lampe

3D-Druck der Basis der Lampe
3D-Druck der Basis der Lampe

Ein 3D-Modell des Lampensockels wurde gemessen, entworfen und mit Abmessungen gedruckt, die groß genug waren, um alle elektrischen Komponenten in das Sockelfach zu passen.

Schritt 5: LED-Befestigung

LED-Aufsatz
LED-Aufsatz

LEDs wurden in Kartonrolle gewickelt und mit doppelseitigem Klebeband befestigt, im unteren Teil wurde ein Loch gebohrt, um den Draht hindurchzuführen

Schritt 6: Lampengehäuse

Lampengehäuse
Lampengehäuse

Ein Gehäuse wurde hergestellt, indem eine transparente Flasche mit einer ähnlichen Breite wie der Lampensockel und einer Höhe wie der LED-Aufsatz gefunden wurde. Dieser wurde dann zur besseren Lichtstreuung mit dickem Papier abgedeckt. Alternativ können auch Milchglas- oder transluzente Kunststoffrohre als Lampengehäuse verwendet werden.

Schritt 7: Einrichtung

Aufstellen
Aufstellen

Alles wurde zusammengeklebt und zusammengebaut. Und die Lampe war bereit für einige Tests!.