Përmbajtje:
- Hapi 1: Materiali i nevojshëm
- Hapi 2: Diagrami i Qarkut
- Hapi 3: Kodi Arduino
- Hapi 4: Shtypja 3D e Bazës së Llambës
- Hapi 5: Bashkëngjitja Led
- Hapi 6: Mbulimi i llambës
- Hapi 7: Konfigurimi
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:27
Ky projekt është bërë për kursin Teknologji për Dizajnim Koncepti në TUDelft
Produkti Final është një llambë LED bazë ESP-32 dhe është e lidhur me serverin. Për prototipin, llamba ka dy funksione; një efekt ylberi që lëshon një ngjyrë qetësuese që zhvendos shkëlqimin drejt mjedisit të tij dhe së dyti vizualizues të zërit ku pikselët LED "vallëzojnë" sipas niveleve të zërit. Sistemi është i lidhur me wifi dhe përdoruesi është në gjendje të zgjedhë efektin që dëshiron nga llamba përmes WIFI.
Mikroçipi i lirë ESP-32 na siguron procesorë të fuqishëm, sensor salle të integruar, sensor të temperaturës, sensor prekje dhe gjithashtu aftësi wifi dhe bluetooth. Me këtë, Ndërsa vetëm dy efekte u zgjodhën për këtë projekt, nënkuptimi i kësaj llambë "të zgjuar" është i pakufizuar. Do të përdoret për të treguar motin tek përdoruesi, ose temperaturën e dhomës, vetë llamba mund të veprojë si një shkas alarmi ose mund të japë një shkëlqim qetësues të dritës së diellit pranë shtratit tuaj duke simuluar lindjen e diellit për një përvojë të këndshme zgjimi.
Hapi 1: Materiali i nevojshëm
Arduino esp32
Sensori i zërit
Konvertuesi i nivelit të logjikës me dy drejtime me katër drejtime
Neopixel led 2m 60 led/m
Telat e kërcyesit
Kabllo mikro USB me përshtatës
lidhje interneti
Hapi 2: Diagrami i Qarkut
Një diagram qark u vizatua dhe qarku u bë në përputhje me rrethanat siç është dhënë në
diagramin më poshtë.
Hapi 3: Kodi Arduino
Këtu, së pari u bë kodi i vizualizuesit. Pastaj, dy shembuj të kodit
; "Neoplxel RGBW starndtest"; dhe "simpleWebServerWifi" u modifikua dhe u integrua brenda kodit të vizualizuesit. Edhe pse kodi është akoma i gabuar ndonjëherë (drita e rastësishme e dritës ndizet herë pas here). Përsëritja tjetër e kodit (sapo të kemi kohë të mjaftueshme) do të përditësohet.
#përfshi
#ifdef _AVR_
#përfshi
#endif
const int numRlexime = 5;
leximet int [numReadings];
int readIndex = 0;
int total = 0;
mesatarja int = 0;
int micPin = 33;
#përcaktoni kodin PIN 4
#përcaktoni NUM_LEDS 120
#përkufizoni shkëlqimin 100
Rrip Adafruit_NeoPixel = 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 };
#përfshi
#përfshi
char ssid = "Rrjeti yt"; // SSID i rrjetit tuaj (emri)
char pass = "passwordPassword"; // fjalëkalimi i rrjetit tuaj
int keyIndex = 0; // Numri i indeksit të çelësit të rrjetit tuaj (nevojitet vetëm për WEP)
int status = WL_IDLE_STATUS;
Serveri WiFiServer (80);
void setup ()
{
Serial.filloj (9600); // inicoj komunikimin serik
pinMode (9, OUTPUT); // vendosni modalitetin e pinit LED
// kontrolloni praninë e mburojës:
nëse (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("Mburoja WiFi nuk është e pranishme");
ndërsa (e vërtetë); // mos vazhdo
}
String fv = WiFi.firmwareVersion ();
nëse (fv! = "1.1.0") {
Serial.println ("Ju lutemi azhurnoni firmware -in");
}
// përpjekja për t'u lidhur me rrjetin Wifi:
ndërsa (statusi! = WL_CONNECTED) {
Serial.print ("Përpjekja për t'u lidhur me Rrjetin me emrin:");
Serial.println (ssid); // printoni emrin e rrjetit (SSID);
// Lidhu me rrjetin WPA/WPA2. Ndryshoni këtë linjë nëse përdorni rrjet të hapur ose WEP:
statusi = WiFi.filloni (ssid, kaloni);
// prisni 10 sekonda për lidhje:
vonesë (10000);
}
server.filloj (); // filloni serverin në internet në portin 80
printWifiStatus (); // ju jeni lidhur tani, kështu që printoni statusin
}
{
Serial.filloj (9600);
strip.setBrightness (BRIGHTNESS);
strip.filloj ();
shirit.shfaq (); // Filloni të gjithë pikselët në "jo"
pinMode (micPin, INPUT);
për (int thisReading = 0; thisReading <numReadings; thisReading ++) {
lexime [thisReading] = 0;
}
}
ylber i pavlefshëm (uint8_t prit) {
uint16_t i, j;
për (j = 0; j <256; j ++) {
për (i = 0; i
strip.setPixelColor (i, Rrota ((i+j) & 255));
}
shirit.shfaq ();
vonesë (pritje);
}
}
vizualizues i pavlefshëm () {
total = total - lexime [readIndex];
leximet [readIndex] = analogRead (micPin);
total = total + lexime [readIndex];
readIndex = readIndex + 1;
nëse (readIndex> = numReadings) {
readIndex = 0;
}
mesatare = total / numR lexime;
vonesa (1);
int mikpixel = (mesatarja-100)/5;
Serial.println (mikpixel);
nëse (micpixel> 0) {
{
për (int j = 0; j <= mikpixel; j ++)
strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);
për (int j = mikpixel; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
shirit.shfaq ();
}
}
nëse (micpixel <0) {
për (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
shirit.shfaq ();
}
}
lak void () {
{
Klienti WiFiClient = server.available (); // dëgjoni për klientët që vijnë
nëse (klienti) {// nëse merrni një klient, Serial.println ("klient i ri"); // printoni një mesazh nga porti serik
String currentLine = ""; // bëni një String për të mbajtur të dhënat hyrëse nga klienti
ndërsa (klienti.lidhur ()) {// lak ndërsa klienti është i lidhur
if (client.available ()) {// nëse ka byte për të lexuar nga klienti, char c = client.read (); // lexoni një byte, atëherë
Serial.shkruani (c); // printoni atë nga monitori serik
if (c == '\ n') {// nëse bajti është një karakter i linjës së re
// nëse rreshti aktual është bosh, keni dy karaktere të linjës së re në një rresht.
// ky është fundi i kërkesës së klientit HTTP, kështu që dërgoni një përgjigje:
nëse (currentLine.length () == 0) {
// Titujt HTTP gjithmonë fillojnë me një kod përgjigjeje (p.sh. HTTP/1.1 200 OK)
// dhe një lloj përmbajtjeje në mënyrë që klienti të dijë se çfarë po vjen, pastaj një vijë bosh:
client.println ("HTTP/1.1 200 OK");
client.println ("Lloji i përmbajtjes: tekst/html");
klient.println ();
// përmbajtja e përgjigjes HTTP ndjek titullin:
client.print ("Kliko këtu Aktivizo efektin Rainbow");
client.print ("Kliko këtu Aktivizo Visualizer");
// Përgjigja HTTP përfundon me një linjë tjetër bosh:
klient.println ();
// dal nga laku while:
pushim;
} else {// nëse keni një linjë të re, atëherë pastroni CurrentLine:
currentLine = "";
}
} tjetër nëse (c! = '\ r') {// nëse keni ndonjë gjë tjetër përveç një karakteri të kthimit të karrocës, currentLine += c; // shtojeni atë në fund të vijës aktuale
}
// Kontrolloni për të parë nëse kërkesa e klientit ishte "GET /H" ose "GET /L":
nëse (currentLine.endsWith ("GET /R")) {
Ylber (10); // Efekti ylber u ndez
}
nëse (currentLine.endsWith ("GET /V")) {
Visualizer (); // Visualizer është aktivizuar
}
}
}
// mbyllni lidhjen:
client.stop ();
Serial.println ("klienti i shkëputur");
}
}
void printWifiStatus () {
// printoni SSID -in e rrjetit ku jeni bashkangjitur:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// printoni adresën IP të mburojës tuaj WiFi:
IPAddress ip = WiFi.localIP ();
Serial.print ("Adresa IP:");
Serial.println (ip);
// printoni fuqinë e marrë të sinjalit:
gjatë rssi = WiFi. RSSI ();
Serial.print ("fuqia e sinjalit (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// printoni ku të shkoni në një shfletues:
Serial.print ( Për të parë këtë faqe në veprim, hapni një shfletues në
Serial.println (ip);
}
}
uint32_t Rrota (byte WheelPos) {
WheelPos = 255 - WheelPos;
nëse (WheelPos <85) {
shiriti i kthimit. Ngjyra (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
nëse (WheelPos <170) {
WheelPos -= 85;
shiriti i kthimit. Ngjyra (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
shiriti i kthimit. Ngjyra (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t e kuqe (uint32_t c) {
kthimi (c >> 16);
}
uint8_t jeshile (uint32_t c) {
kthimi (c >> 8);
}
uint8_t blu (uint32_t c) {
kthimi (c);
}
}
//Serial.println(micpixel);
}
Hapi 4: Shtypja 3D e Bazës së Llambës
Një model 3d i bazës së llambës u mat, u projektua dhe u shtyp me dimensione mjaft të mëdha për të përshtatur të gjithë përbërësit elektrikë brenda ndarjes bazë.
Hapi 5: Bashkëngjitja Led
Led -et u mbështjellën në rrotull kartoni dhe u lidhën duke përdorur shirit të dyanshëm, një vrimë u shpua në pjesën e poshtme për të kaluar tela përmes
Hapi 6: Mbulimi i llambës
Një rrethim u bë duke gjetur një shishe transparente me gjerësi të ngjashme me bazën e llambës dhe lartësinë si shtojca LED. Kjo më pas u mbulua me letër të trashë për shpërndarje më të mirë të dritës. Përndryshe, është e mundur që të përdorni xham të mbuluar me brymë ose tuba plastike të tejdukshme si rrethues llambash.
Hapi 7: Konfigurimi
Gjithçka ishte ngjitur dhe montuar. Dhe llamba ishte gati për disa prova !.
Recommended:
Juuke - një RFID Music Player për të moshuarit dhe fëmijët: 10 hapa (me fotografi)
Juuke - një RFID Music Player për të Moshuarit dhe Fëmijët: Kjo është kutia Juuke. Kutia Juuke është miku juaj muzikor, i bërë që të jetë sa më i lehtë për t'u përdorur. Isshtë krijuar veçanërisht për t'u përdorur nga të moshuarit dhe fëmijët, por sigurisht që mund të përdoret nga të gjitha moshat e tjera. Arsyeja pse e krijuam këtë, është për shkak të
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: 6 hapa (me fotografi)
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: Ky projekt përdor arduino për të kontrolluar një brez led RGB me telefonin tuaj nëpërmjet bluetooth. Mund të ndryshoni ngjyrën, të sinkronizoni dritat me muzikën ose t'i bëni ato të përshtaten automatikisht për ndriçimin e ambientit
Tobias - Arduino Music Box Me TVout: 5 hapa (me fotografi)
Tobias - Arduino Music Box With TVout: Para së gjithash, më lejoni të prezantoj Tobias, arushin gjigant pelushi të të dashurës sime, i cili është frymëzimi për këtë projekt. Tobias ka një personalitet, të ndërtuar me kalimin e kohës, ndërsa ne me shaka pyesim veten në mendjen tonë se çfarë bën ai ndërsa ajo është larg në punë. Projekti po
"Jumbleum" Shuffle MP3 Music Player: 8 hapa (me fotografi)
"Jumbleum" Shuffle MP3 Music Player: Për këtë projekt vendosa të bëj një lojtar të lehtë për t’u përdorur, të fuqishëm për t’u përdorur në punëtorinë time. Pasi provova disa module të tjera MP3 zgjodha lehtësisht të lirë, të lirë " DFPlayer Mini " modul. Ka një " lojë të rastësishme " mënyra POR sepse jam
Nixie Tube Music Visualizer: 10 hapa (me fotografi)
Nixie Tube Music Visualizer: Një vizualizues hipnotizues i muzikës i frymëzuar nga ato bare të vogla në krye të iTunes. Katërmbëdhjetë tuba bargrafikë rusë IN-13 Nixie përdoren si ekran. Gjatësia që ndizet çdo tub nixie përfaqëson vëllimin e një frekuence të caktuar në mu