Inhoudsopgave:
- Stap 1: Benodigd materiaal
- Stap 2: Schakelschema
- Stap 3: Arduino-code
- Stap 4: 3D-afdrukken van de voet van de lamp
- Stap 5: Led-bevestiging
- Stap 6: Lampbehuizing
- Stap 7: Instellen
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Dit project is gedaan voor de cursus Technology for Concept Design aan de TUDelft
Het eindproduct is een ESP-32 basis LED-lamp en is verbonden met de server. Voor het prototype heeft de lamp twee functies; een regenboogeffect dat een rustgevende kleurverschuivende gloed uitstraalt naar de omgeving en ten tweede een geluidsvisualizer waarbij de LED-pixels "dansen" op basis van geluidsniveaus. Het systeem is verbonden met wifi en de gebruiker kan via wifi kiezen welk effect hij van de lamp wil.
De goedkope ESP-32-microchip biedt ons krachtige processors, ingebouwde hall-sensor, temperatuursensor, aanraaksensor en ook wifi- en bluetooth-mogelijkheden. Hiermee, Hoewel slechts twee effecten werden gekozen voor dit project, is de implicatie van deze "slimme" lamp grenzeloos. Het zou worden gebruikt om het weer aan de gebruiker of de temperatuur van de kamer aan te geven, de lamp zelf kan fungeren als een alarmtrigger of het kan een kalmerende zonlichtgloed naast je bed geven die de zonsopgang simuleert voor een prettige wakker worden.
Stap 1: Benodigd materiaal
Arduino esp32
Geluidssensor
Vierweg bidirectionele logische niveau-omzetter
Neopixel led 2m 60 led/m
Doorverbindingsdraden
Micro-USB-kabel met adapter
internetverbinding
Stap 2: Schakelschema
Er is een schakelschema getekend en het circuit is overeenkomstig gemaakt zoals aangegeven in
onderstaand schema.
Stap 3: Arduino-code
Hier werd eerst visualizer code gemaakt. Dan, twee voorbeeldcodes:
;“neoplxel RGBW stertest”; en "simpleWebServerWifi" is aangepast en geïntegreerd in de visualizer-code. Hoewel de code soms nog steeds buggy is (willekeurige led's lichten af en toe op). De volgende iteratie van de code (zodra we genoeg tijd hebben) zal worden bijgewerkt.
#erbij betrekken
#ifdef _AVR_
#erbij betrekken
#stop als
const int numReadings = 5;
int lezingen [numReadings];
int readIndex = 0;
int totaal = 0;
int gemiddelde = 0;
int micPin = 33;
#definieer pincode 4
#define NUM_LEDS 120
#define HELDERHEID 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 };
#erbij betrekken
#erbij betrekken
char ssid = "uw netwerk"; // uw netwerk-SSID (naam)
char pass = "geheim wachtwoord"; // uw netwerkwachtwoord
int keyIndex = 0; // uw netwerksleutel Indexnummer (alleen nodig voor WEP)
int-status = WL_IDLE_STATUS;
WiFiServer-server (80);
ongeldige setup()
{
Serieel.begin(9600); // initialiseer seriële communicatie
pinMode(9, UITGANG); // stel de LED-pinmodus in
// controleer op de aanwezigheid van het schild:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi-schild niet aanwezig");
terwijl (waar); // niet doorgaan
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
Serial.println ("Upgrade de firmware alstublieft");
}
// probeer verbinding te maken met wifi-netwerk:
while (status != WL_CONNECTED) {
Serial.print("Poging om verbinding te maken met netwerk genaamd: ");
Seriële.println(ssid); // print de netwerknaam (SSID);
// Maak verbinding met het WPA/WPA2-netwerk. Wijzig deze regel bij gebruik van een open of WEP-netwerk:
status = WiFi.begin(ssid, pass);
// wacht 10 seconden voor verbinding:
vertraging (10000);
}
server.begin(); // start de webserver op poort 80
printWifiStatus(); // je bent nu verbonden, dus print de status uit
}
{
Serieel.begin(9600);
strip.setHelderheid (HELDERHEID);
strip.begin();
strip.show(); // Initialiseer alle pixels op 'uit'
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
lezingen [thisReading] = 0;
}
}
ongeldige regenboog (uint8_t wacht) {
uint16_t i, j;
voor(j=0; j<256; j++) {
voor(i=0; i
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
vertraging (wacht);
}
}
void visualizer(){
totaal = totaal - metingen [readIndex];
metingen [readIndex] = analogRead (micPin);
totaal = totaal + metingen [readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings) {
leesIndex = 0;
}
gemiddelde = totaal / aantal Aflezingen;
vertraging(1);
int micpixel = (gemiddeld-100)/5;
Serieel.println(micpixel);
if (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();
}
}
lege lus() {
{
WiFiClient-client = server.beschikbaar(); // luister naar inkomende klanten
if (client) { // als je een klant krijgt, Serial.println ("nieuwe klant"); // druk een bericht af via de seriële poort
Tekenreeks currentLine = ""; // maak een string om inkomende gegevens van de client vast te houden
while (client.connected()) { // loop while the client's connected
if (client.available()) { // als er bytes zijn om van de client te lezen, char c = cliënt.lezen(); // lees een byte, dan
Serieel.schrijven(c); // print het uit de seriële monitor
if (c == '\n') { // als de byte een teken van een nieuwe regel is
// als de huidige regel leeg is, heb je twee nieuwe regeltekens op een rij.
// dat is het einde van het HTTP-verzoek van de client, dus stuur een antwoord:
if (currentLine.length() == 0) {
// HTTP-headers beginnen altijd met een responscode (bijv. HTTP/1.1 200 OK)
// en een inhoudstype zodat de klant weet wat er gaat komen, dan een lege regel:
client.println ("HTTP/1.1 200 OK");
client.println("Inhoudstype:tekst/html");
klant.println();
// de inhoud van het HTTP-antwoord volgt op de header:
client.print("Klik hier Regenboogeffect inschakelen");
client.print("Klik hier Zet Visualizer aan");
// Het HTTP-antwoord eindigt met nog een lege regel:
klant.println();
// doorbreek de while-lus:
pauze;
} else { // als je een nieuwe regel hebt, wis dan huidige regel:
huidigeLijn = "";
}
} else if (c != '\r') { // als je iets anders hebt dan een regelterugloopteken, huidigeLijn += c; // voeg het toe aan het einde van de huidige regel
}
// Controleer of het clientverzoek "GET /H" of "GET /L" was:
if (currentLine.endsWith("GET /R")) {
Regenboog(10); // Regenboogeffect ingeschakeld
}
if (currentLine.endsWith("GET /V")) {
Visualizer(); // Visualizer is ingeschakeld
}
}
}
// sluit de verbinding:
klant.stop();
Serial.println("client losgekoppeld");
}
}
ongeldig printWifiStatus() {
// druk de SSID af van het netwerk waarmee u bent verbonden:
Serial.print("SSID: ");
Seriële.println(WiFi. SSID());
// print het IP-adres van je wifi-schild:
IP-adres ip = WiFi.localIP();
Serial.print("IP-adres: ");
Serieel.println(ip);
// print de ontvangen signaalsterkte:
lange rssi = WiFi. RSSI();
Serial.print("signaalsterkte (RSSI):");
Seriële.afdruk(rssi);
Serial.println(" dBm");
// print waar te gaan in een browser:
Serial.print( Om deze pagina in actie te zien, opent u een browser naar
Serieel.println(ip);
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WielPos < 85) {
retourstrook. Kleur (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
if(WielPos < 170) {
WielPos -= 85;
retourstrip. Kleur (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WielPos -= 170;
retourstrip. Kleur (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t rood(uint32_t c) {
retour (c >> 16);
}
uint8_t groen(uint32_t c) {
retour (c >> 8);
}
uint8_t blauw(uint32_t c) {
retour (c);
}
}
//Serial.println(micpixel);
}
Stap 4: 3D-afdrukken van de voet van de lamp
Een 3D-model van de lampvoet werd gemeten, ontworpen en afgedrukt met afmetingen die groot genoeg waren om alle elektrische componenten in het basiscompartiment te passen.
Stap 5: Led-bevestiging
Led's werden opgerold in kartonnen rol en bevestigd met dubbelzijdige tape, er werd een gat geboord in het onderste gedeelte om de draad door te laten
Stap 6: Lampbehuizing
Er werd een behuizing gemaakt door een transparante fles te vinden met dezelfde breedte als de lampvoet en de hoogte als de LED-bevestiging. Dit werd vervolgens bedekt met dik papier voor een betere verspreiding van het licht. Als alternatief is het mogelijk om als lampbehuizing gematteerd glas of doorschijnende kunststof buizen te gebruiken.
Stap 7: Instellen
Alles werd aan elkaar gelijmd en gemonteerd. En de lamp was klaar voor wat testen!.
Aanbevolen:
Fire, Music and Lights Sync: 10 stappen (met afbeeldingen)
Synchronisatie van vuur, muziek en licht: we weten allemaal dat elektronica wordt gebruikt voor veel belangrijke taken in ziekenhuizen, scholen en fabrieken. Waarom zou ik er ook niet een beetje plezier mee hebben? In deze Instructable maak ik uitbarstingen van vuur en lichten (Led's) die op muziek reageren om muziek een beetje
Smartphone-gestuurde Bluetooth-leds (met Live Music Sync): 7 stappen
Smartphone-gestuurde Bluetooth-LED's (met Live Music Sync): ik heb er altijd van gehouden om dingen te bouwen, nadat ik ontdekte dat mijn nieuwe studentenhuis vreselijke verlichting had, besloot ik het een beetje op te fleuren. ***WAARSCHUWING*** Als je bouwt dit project op dezelfde schaal als mijn setup, zul je werken met een behoorlijke hoeveelheid ele
Maak Muscle MIDI Music! 7 stappen (met afbeeldingen)
Maak Muscle MIDI Music!: Wanneer uw zenuwstelsel een beweging moet maken, stuurt het kleine elektrische signalen door neuronen om uw spieren te controleren. De techniek van elektromyografie (EMG) stelt ons in staat om deze elektrische signalen te versterken en te meten. Naast het feit
Arduino Music Controller: 9 stappen (met afbeeldingen)
Arduino Music Controller: Dit is een tutorial hoe je een Arduino Music Controller kan maken van 1m lang.Gemaakt door Kyo Schelfhout, Logan Wesse en Janis MosselmansB.OM:38 kabels (13 rood, 13 zwart, 12 geel)Weerstanden: 1010 drukknoppen1 potentiometer1 printplaat (4 gaatjes
Music Visualizer (oscilloscoop): 4 stappen (met afbeeldingen)
Music Visualizer (oscilloscoop): Deze muzikale visualizer biedt een uitstekende manier om meer diepte toe te voegen aan de ervaring van je muziek, en is vrij eenvoudig te bouwen. Het kan ook nuttig zijn als een echte oscilloscoop voor sommige toepassingen