INHOUDSOPGAWE:
- Stap 1: materiaal benodig
- Stap 2: Kringdiagram
- Stap 3: Arduino -kode
- Stap 4: 3D -druk van die basis van die lamp
- Stap 5: Led Attachment
- Stap 6: Lampomhulsel
- Stap 7: Opstel
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Hierdie projek word gedoen vir die kursus Tegnologie vir konsepontwerp by die TUDelft
Die finale produk is 'n ESP-32 basis LED-lamp en is aan die bediener gekoppel. Vir die prototipe het die lamp twee funksies; 'n reënboog -effek wat 'n strelende kleur wat na sy omgewing verskuif, uitstraal en tweedens 'n klankvisualiseerder waar die LED -pixels "dans" volgens klankvlakke. Die stelsel is aan wifi gekoppel en die gebruiker kan via WIFI kies watter effek hy van die lamp wil hê.
Die goedkoop ESP-32-mikroskyfie bied ons kragtige verwerkers, ingeboude saalsensor, temperatuursensor, aanraaksensor en ook wifi- en bluetooth-vermoëns. Alhoewel slegs twee effekte vir hierdie projek gekies is, is die implikasie van hierdie 'slim' lamp onbeperk. Dit word gebruik om die weer of die temperatuur van die kamer aan te dui, die lamp self kan 'n alarmskakelaar wees, of dit kan 'n kalmerende sonlig laat skyn langs u bed, wat die sonsopkoms simuleer vir 'n aangename wakker ervaring.
Stap 1: materiaal benodig
Arduino esp32
Klanksensor
Vier-rigting tweerigting-logiese vlakomskakelaar
Neopixel gelei 2m 60 led/m
Springdrade
Mikro -USB -kabel met adapter
internet konneksie
Stap 2: Kringdiagram
'N Skakeldiagram is geteken en die stroombaan is dienooreenkomstig gemaak soos in
die diagram hieronder.
Stap 3: Arduino -kode
Hier is eerstens visualisererskode gemaak. Dan twee voorbeeldkode
; "Neoplxel RGBW starndtest"; en “simpleWebServerWifi” is aangepas en geïntegreer in die visualiseringskode. Alhoewel die kode soms nog steeds karig is (die toevallige LED brand soms). Die volgende herhaling van die kode (sodra ons genoeg tyd kry) sal opgedateer word.
#insluit
#ifdef _AVR_
#insluit
#endif
const int numReadings = 5;
int lesings [numReadings];
int readIndex = 0;
int totaal = 0;
int gemiddelde = 0;
int micPin = 33;
#definieer PIN 4
#definieer 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 };
#insluit
#insluit
char ssid = "jou netwerk"; // jou netwerk SSID (naam)
char pass = "secretPassword"; // u netwerkwagwoord
int keyIndex = 0; // jou indeksnommer vir netwerksleutels (slegs nodig vir WEP)
int status = WL_IDLE_STATUS;
WiFiServer -bediener (80);
leemte opstelling ()
{
Serial.begin (9600); // initialiseer reekskommunikasie
pinMode (9, UITGANG); // stel die LED -penmodus in
// kyk na die teenwoordigheid van die skild:
as (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("WiFi -skild nie teenwoordig nie");
terwyl (waar); // moenie aangaan nie
}
String fv = WiFi.firmwareVersion ();
as (fv! = "1.1.0") {
Serial.println ("Gradeer asseblief die firmware op");
}
// probeer om aan te sluit op die Wifi -netwerk:
terwyl (status! = WL_CONNECTED) {
Serial.print ("Poging om verbinding te maak met die netwerk genaamd:");
Serial.println (ssid); // druk die netwerknaam (SSID) af;
// Koppel aan WPA/WPA2 -netwerk. Verander hierdie reël as u 'n oop of WEP -netwerk gebruik:
status = WiFi.begin (ssid, pass);
// wag 10 sekondes vir verbinding:
vertraging (10000);
}
bediener.begin (); // begin die webbediener op poort 80
printWifiStatus (); // jy is nou verbind, dus druk die status uit
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Initialiseer alle pixels na 'af'
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
lesings [thisReading] = 0;
}
}
leë reënboog (wag nie) {
uint16_t i, j;
vir (j = 0; j <256; j ++) {
vir (i = 0; i
strip.setPixelColor (i, Wheel ((i+j) & 255));
}
strip.show ();
vertraag (wag);
}
}
leemte visualiseerder () {
totaal = totaal - lesings [leesIndeks];
lesings [readIndex] = analogRead (micPin);
totaal = totaal + lesings [leesIndeks];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {
readIndex = 0;
}
gemiddelde = totaal / getalLesings;
vertraging (1);
int micpixel = (gemiddelde-100)/5;
Serial.println (mikpixel);
as (mikpixel> 0) {
{
vir (int j = 0; j <= micpixel; j ++)
strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);
vir (int j = micpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
as (mikpixel <0) {
vir (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
leemte -lus () {
{
WiFiClient -kliënt = server.available (); // luister na inkomende kliënte
as (kliënt) {// as u 'n kliënt kry, Serial.println ("nuwe kliënt"); // druk 'n boodskap uit die seriële poort
String currentLine = ""; // maak 'n string om inkomende data van die kliënt te bewaar
terwyl (client.connected ()) {// loop terwyl die kliënt verbind is
if (client.available ()) {// as daar grepe is om van die kliënt af te lees, char c = client.read (); // lees dan 'n greep
Reeks.skryf (c); // druk die seriële monitor uit
if (c == '\ n') {// as die byte 'n nuwe reël is
// as die huidige reël leeg is, het jy twee nuwe reëlkarakters in 'n ry.
// dit is die einde van die HTTP -versoek van die kliënt, so stuur 'n antwoord:
as (currentLine.length () == 0) {
// HTTP -opskrifte begin altyd met 'n antwoordkode (bv. HTTP/1.1 200 OK)
// en 'n inhoudstipe sodat die kliënt weet wat kom, dan 'n leë reël:
client.println ("HTTP/1.1 200 OK");
client.println ("Inhoudstipe: teks/html");
client.println ();
// die inhoud van die HTTP -antwoord volg op die opskrif:
client.print ("Klik hier Skakel Rainbow -effek aan");
client.print ("Klik hier Skakel Visualizer aan");
// Die HTTP -antwoord eindig met nog 'n leë reël:
client.println ();
// breek uit die while -lus:
breek;
} anders {// as u 'n nuwe lyn gekry het, maak die huidige lyn skoon:
currentLine = "";
}
} anders as (c! = '\ r') {// as u iets anders het as 'n karretjie, currentLine += c; // voeg dit by aan die einde van die currentLine
}
// Kyk of die kliëntversoek 'GET /H' of 'GET /L' was:
if (currentLine.endsWith ("GET /R")) {
Reënboog (10); // Reënboog -effek aangeskakel
}
if (currentLine.endsWith ("GET /V")) {
Visualiseerder (); // Visualizer is aangeskakel
}
}
}
// sluit die verbinding:
client.stop ();
Serial.println ("kliënt ontkoppel");
}
}
ongeldig printWifiStatus () {
// druk die SSID van die netwerk waaraan u gekoppel is:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// druk die IP -adres van u WiFi -skild af:
IPAddress ip = WiFi.localIP ();
Serial.print ("IP -adres:");
Serial.println (ip);
// druk die ontvangen seinsterkte af:
lang rssi = WiFi. RSSI ();
Serial.print ("seinsterkte (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// druk waarheen u in 'n blaaier moet gaan:
Serial.print ( Om 'n bladsy in aksie te sien, maak 'n blaaier oop vir
Serial.println (ip);
}
}
uint32_t Wheel (byte WheelPos) {
WheelPos = 255 - WheelPos;
as (WheelPos <85) {
retourstrook. Kleur (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
as (WheelPos <170) {
WheelPos -= 85;
retourstrook. Kleur (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
retourstrook. Kleur (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t rooi (uint32_t c) {
terugkeer (c >> 16);
}
uint8_t groen (uint32_t c) {
terugkeer (c >> 8);
}
uint8_t blou (uint32_t c) {
opgawe (c);
}
}
//Serial.println(micpixel);
}
Stap 4: 3D -druk van die basis van die lamp
'N 3D -model van die lampvoet is gemeet, ontwerp en gedruk met afmetings wat groot genoeg is om al die elektriese komponente in die basisvak te pas.
Stap 5: Led Attachment
Led's is in kartonrol opgerol en met dubbelzijdige band vasgemaak, 'n gat in die onderste gedeelte geboor om die draad deur te trek
Stap 6: Lampomhulsel
'N Omhulsel is gemaak deur 'n deursigtige bottel met dieselfde breedte as die lampvoet en die hoogte as die LED -aanhangsel te vind. Dit is dan bedek met dik papier vir 'n beter verspreiding van lig. Alternatiewelik is dit moontlik om matglas of deurskynende plastiekbuise as lampomhulsel te gebruik.
Stap 7: Opstel
Alles is vasgeplak en bymekaargemaak. En die lamp was gereed om te toets!
Aanbeveel:
Laser Music Visualizer: 5 stappe
Laser Music Visualizer: U weet hoe u gunsteling liedjies klink. Nou kan u 'n visualiseerder maak en sien hoe dit lyk. Dit werk so: As jy klank deur jou luidspreker speel, tril die diafragma van die luidspreker. Hierdie vibrasies beweeg die spieël wat aan
LightBox Music Visualizer: 5 stappe (met foto's)
LightBox Music Visualizer: Die LightBox gebruik die ingeboude mikrofoon van u telefoon of tablet om musiek te ontleed om pragtige ligpatrone te genereer wat by die musiek pas. Begin die app, plaas u telefoon of tablet êrens naby 'n klankbron, en u boks sal die
Arduino Music Reactive Desktop Lamp: 8 stappe (met foto's)
Arduino Music Reactive Desktop Lamp: Hallo almal! In hierdie weergawe maak ons 'n reaktiewe LED -lessenaarlamp met eenvoudige komponente en basiese Arduino -programmering. Dit maak 'n indrukwekkende effek waar die lig op alle klanke en musiek sal dans. Ek het hierdie projek voltooi met 'n spanmaat
Music Visualizer (ossilloskoop): 4 stappe (met prente)
Music Visualizer (ossilloskoop): Hierdie musikale visualiseerder bied 'n uitstekende manier om die ervaring van u musiek meer diepte te gee, en is redelik maklik om te bou. Dit kan ook nuttig wees as 'n werklike ossilloskoop vir sommige toepassings, al is dit nodig: 'n ou crt (byna alle b & am
Nixie Tube Music Visualizer: 10 stappe (met foto's)
Nixie Tube Music Visualizer: 'n Hipnotiserende musiekvisualiseerder geïnspireer deur die klein balke bo -aan iTunes. Veertien Russiese IN-13 Nixie-staafgrafiekbuise word as vertoning gebruik. Die lengte wat elke nixie -buis aansteek, verteenwoordig die volume van 'n sekere frekwensie in die mu