विषयसूची:

स्मार्ट लैंप (टीसीएफडी) - इंद्रधनुष + संगीत विज़ुअलाइज़र: 7 कदम (चित्रों के साथ)
स्मार्ट लैंप (टीसीएफडी) - इंद्रधनुष + संगीत विज़ुअलाइज़र: 7 कदम (चित्रों के साथ)

वीडियो: स्मार्ट लैंप (टीसीएफडी) - इंद्रधनुष + संगीत विज़ुअलाइज़र: 7 कदम (चित्रों के साथ)

वीडियो: स्मार्ट लैंप (टीसीएफडी) - इंद्रधनुष + संगीत विज़ुअलाइज़र: 7 कदम (चित्रों के साथ)
वीडियो: [10 Hours] Fractal Animations Electric Sheep - Video Only [1080HD] SlowTV 2024, जुलाई
Anonim
Image
Image
सर्किट आरेख
सर्किट आरेख

यह परियोजना TUDelft. में अवधारणा डिजाइन के लिए प्रौद्योगिकी पाठ्यक्रम के लिए की गई है

अंतिम उत्पाद एक ईएसपी -32 बेस एलईडी लैंप है और सर्वर से जुड़ा है। प्रोटोटाइप के लिए, दीपक के दो कार्य हैं; एक इंद्रधनुष प्रभाव जो अपने परिवेश की ओर एक सुखदायक रंग स्थानांतरण चमक का उत्सर्जन करता है और दूसरा ध्वनि विज़ुअलाइज़र जहां एलईडी पिक्सेल ध्वनि स्तरों के अनुसार "नृत्य" करते हैं। सिस्टम वाईफाई से जुड़ा है और उपयोगकर्ता यह चुनने में सक्षम है कि वे वाईफ़ाई के माध्यम से दीपक से क्या प्रभाव चाहते हैं।

सस्ता ESP-32 माइक्रोचिप हमें शक्तिशाली प्रोसेसर, इनबिल्ट हॉल सेंसर, तापमान सेंसर, टच सेंसर और वाईफाई और ब्लूटूथ क्षमता प्रदान करता है। इसके साथ, जबकि इस परियोजना के लिए केवल दो प्रभावों का चयन किया गया था, इस "स्मार्ट" लैंप का निहितार्थ असीमित है। इसका उपयोग उपयोगकर्ता को मौसम, या कमरे के तापमान को इंगित करने के लिए किया जाएगा, दीपक स्वयं अलार्म ट्रिगर के रूप में कार्य कर सकता है या यह आपके बिस्तर के बगल में एक शांत धूप की चमक दे सकता है जो एक अच्छे वेकअप अनुभव के लिए सूर्योदय का अनुकरण करता है।

चरण 1: आवश्यक सामग्री

Arduino esp32

ध्वनि संवेदक

चार तरह से द्वि-दिशात्मक तर्क स्तर कनवर्टर

नियोपिक्सल ने 2 एम 60 एलईडी / एम. का नेतृत्व किया

जम्पर तार

एडेप्टर के साथ माइक्रो यूएसबी केबल

इंटरनेट कनेक्शन

चरण 2: सर्किट आरेख

एक सर्किट आरेख तैयार किया गया था और तदनुसार सर्किट बनाया गया था जैसा कि में दिया गया है

नीचे दिया गया आरेख।

चरण 3: Arduino कोड

यहां, सबसे पहले विज़ुअलाइज़र कोड बनाया गया था। फिर, दो उदाहरण कोड

;“नियोप्लक्सेल RGBW स्टारटेस्ट”; और "simpleWebServerWifi" को विज़ुअलाइज़र कोड में संशोधित और एकीकृत किया गया था। हालाँकि कोड अभी भी कई बार छोटा होता है (समय-समय पर यादृच्छिक एलईडी लाइट)। कोड की अगली पुनरावृत्ति (एक बार जब हमें पर्याप्त समय मिल जाए) को अपडेट कर दिया जाएगा।

#शामिल

#ifdef _AVR_

#शामिल

#अगर अंत

कॉन्स्ट इंट numReadings = 5;

इंट रीडिंग [संख्या रीडिंग];

इंट रीडइंडेक्स = 0;

इंट कुल = 0;

इंट औसत = 0;

इंट माइकपिन = ३३;

#पिन परिभाषित करें 4

#परिभाषित करें NUM_LEDS 120

#ब्राइटनेस को परिभाषित करें १००

Adafruit_NeoPixel स्ट्रिप = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

बाइट नियोपिक्स_गामा = {

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 };

#शामिल

#शामिल

चार एसएसआईडी = "आपका नेटवर्क"; // आपका नेटवर्क SSID (नाम)

चार पास = "गुप्त पासवर्ड"; // आपका नेटवर्क पासवर्ड

इंट कीइंडेक्स = 0; // आपका नेटवर्क कुंजी इंडेक्स नंबर (केवल WEP के लिए आवश्यक)

इंट स्थिति = WL_IDLE_STATUS;

वाईफाई सर्वर सर्वर (80);

व्यर्थ व्यवस्था()

{

सीरियल.बेगिन (९६००); // सीरियल कम्युनिकेशन को इनिशियलाइज़ करें

पिनमोड (9, आउटपुट); // एलईडी पिन मोड सेट करें

// ढाल की उपस्थिति के लिए जाँच करें:

अगर (वाईफाई। स्थिति () == WL_NO_SHIELD) {

Serial.println ("वाईफाई शील्ड मौजूद नहीं है");

जबकि (सच); // जारी न रखें

}

स्ट्रिंग fv = WiFi.firmwareVersion ();

अगर (एफवी! = "१.१.०") {

Serial.println ("कृपया फर्मवेयर अपग्रेड करें");

}

// वाईफाई नेटवर्क से कनेक्ट करने का प्रयास:

जबकि (स्थिति!= WL_CONNECTED) {

Serial.print ("नाम के नेटवर्क से कनेक्ट करने का प्रयास कर रहा है:");

सीरियल.प्रिंट्लन (एसएसआईडी); // नेटवर्क नाम (SSID) प्रिंट करें;

// WPA/WPA2 नेटवर्क से कनेक्ट करें। यदि खुले या WEP नेटवर्क का उपयोग कर रहे हैं तो इस लाइन को बदलें:

स्थिति = वाईफाई। शुरू (एसएसआईडी, पास);

// कनेक्शन के लिए 10 सेकंड प्रतीक्षा करें:

देरी (10000);

}

सर्वर। शुरू (); // पोर्ट 80. पर वेब सर्वर शुरू करें

प्रिंट वाईफाईस्टैटस (); // आप अभी जुड़े हुए हैं, इसलिए स्थिति का प्रिंट आउट लें

}

{

सीरियल.बेगिन (९६००);

स्ट्रिप.सेटब्राइटनेस (ब्राइटनेस);

पट्टी। शुरू ();

कपड़े उतारने का प्रदर्शन(); // सभी पिक्सल को 'ऑफ' करने के लिए इनिशियलाइज़ करें

पिनमोड (माइकपिन, इनपुट);

के लिए (int thisReading = 0; thisReading < numReadings; thisReading++) {

रीडिंग [यह पढ़ना] = 0;

}

}

शून्य इंद्रधनुष (uint8_t प्रतीक्षा करें) {

uint16_t मैं, जे;

के लिए (जे = 0; जे <256; जे ++) {

के लिए(i=0; मैं

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

}

कपड़े उतारने का प्रदर्शन();

देरी (प्रतीक्षा);

}

}

शून्य विज़ुअलाइज़र () {

कुल = कुल - रीडिंग [रीडइंडेक्स];

रीडिंग [रीडइंडेक्स] = एनालॉग रीड (माइकपिन);

कुल = कुल + रीडिंग [रीडइंडेक्स];

रीडइंडेक्स = रीडइंडेक्स + 1;

अगर (रीडइंडेक्स>= numReadings) {

रीडइंडेक्स = 0;

}

औसत = कुल / संख्या रीडिंग;

देरी(1);

इंट माइकपिक्सेल = (औसत-100)/5;

Serial.println (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++)

स्ट्रिप.सेट पिक्सेलकलर (जे, 0, 0, 0, 0);

कपड़े उतारने का प्रदर्शन();

}

}

अगर (माइक्रोपिक्सेल <0) {

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

स्ट्रिप.सेट पिक्सेलकलर (जे, 0, 0, 50, 0);

कपड़े उतारने का प्रदर्शन();

}

}

शून्य लूप () {

{

वाईफाई क्लाइंट क्लाइंट = सर्वर उपलब्ध (); // आने वाले ग्राहकों के लिए सुनो

अगर (क्लाइंट) {// अगर आपको क्लाइंट मिलता है, Serial.println ("नया क्लाइंट"); // सीरियल पोर्ट से एक संदेश प्रिंट करें

स्ट्रिंग करंटलाइन = ""; // क्लाइंट से आने वाले डेटा को होल्ड करने के लिए एक स्ट्रिंग बनाएं

जबकि (क्लाइंट.कनेक्टेड ()) {// लूप जबकि क्लाइंट कनेक्टेड है

अगर (क्लाइंट.उपलब्ध ()) {// अगर क्लाइंट से पढ़ने के लिए बाइट्स हैं, चार सी = क्लाइंट.रीड (); // एक बाइट पढ़ें, फिर

सीरियल.राइट (सी); // इसे सीरियल मॉनिटर का प्रिंट आउट लें

अगर (c == '\n') {// अगर बाइट एक न्यूलाइन कैरेक्टर है

// यदि वर्तमान पंक्ति रिक्त है, तो आपको एक पंक्ति में दो न्यूलाइन वर्ण मिलते हैं।

// यह क्लाइंट HTTP अनुरोध का अंत है, इसलिए एक प्रतिक्रिया भेजें:

अगर (currentLine.length() == 0) {

// HTTP हेडर हमेशा एक प्रतिक्रिया कोड से शुरू होते हैं (जैसे HTTP / 1.1 200 OK)

// और एक सामग्री-प्रकार ताकि ग्राहक जानता है कि क्या आ रहा है, फिर एक खाली रेखा:

client.println ("HTTP / 1.1 200 ओके");

client.println ("सामग्री-प्रकार: टेक्स्ट/एचटीएमएल");

क्लाइंट.प्रिंट्लन ();

// HTTP प्रतिक्रिया की सामग्री हेडर का अनुसरण करती है:

क्लाइंट.प्रिंट ("यहां क्लिक करें इंद्रधनुष प्रभाव चालू करें");

क्लाइंट.प्रिंट ("यहां क्लिक करें विज़ुअलाइज़र चालू करें");

// HTTP प्रतिक्रिया एक और रिक्त रेखा के साथ समाप्त होती है:

क्लाइंट.प्रिंट्लन ();

// थोड़ी देर के लूप से बाहर निकलें:

टूटना;

} और {// यदि आपको एक नई लाइन मिली है, तो वर्तमान लाइन को साफ़ करें:

करंटलाइन = "";

}

} और अगर (c != '\r') {// अगर आपको कैरिज रिटर्न कैरेक्टर के अलावा कुछ और मिला है, करंटलाइन + = सी; // इसे करंट लाइन के अंत में जोड़ें

}

// यह देखने के लिए जांचें कि क्या क्लाइंट अनुरोध "GET /H" या "GET /L" था:

अगर (currentLine.endsWith("GET /R")) {

इंद्रधनुष(१०); // इंद्रधनुष प्रभाव चालू हो गया

}

अगर (currentLine.endsWith("GET /V")) {

विज़ुअलाइज़र (); // विज़ुअलाइज़र चालू है

}

}

}

// कनेक्शन बंद करें:

क्लाइंट.स्टॉप ();

Serial.println ("क्लाइंट डिस्कनेक्ट किया गया");

}

}

शून्य प्रिंट वाईफाईस्टैटस () {

// उस नेटवर्क का SSID प्रिंट करें जिससे आप जुड़े हुए हैं:

सीरियल.प्रिंट ("एसएसआईडी:");

Serial.println (वाईफाई.एसएसआईडी ());

// अपने वाईफाई शील्ड का आईपी पता प्रिंट करें:

आईपीएड्रेस आईपी = वाईफाई.लोकलआईपी ();

सीरियल.प्रिंट ("आईपी पता:");

सीरियल.प्रिंट्लन (आईपी);

// प्राप्त सिग्नल की शक्ति को प्रिंट करें:

लंबी आरएसएसआई = वाईफाई। आरएसएसआई ();

सीरियल.प्रिंट ("सिग्नल स्ट्रेंथ (RSSI):");

सीरियल.प्रिंट (आरएसआई);

Serial.println ("डीबीएम");

// प्रिंट करें कि ब्राउज़र में कहां जाना है:

Serial.print ("इस पृष्ठ को क्रिया में देखने के लिए, https://" पर एक ब्राउज़र खोलें);

सीरियल.प्रिंट्लन (आईपी);

}

}

uint32_t व्हील (बाइट व्हीलपॉज़) {

व्हीलपोस = 255 - व्हीलपोस;

अगर (व्हीलपॉस <85) {

वापसी पट्टी। रंग (255 - व्हीलपॉस * 3, 0, व्हीलपॉस * 3, 0);

}

अगर (व्हीलपॉस <१७०) {

व्हीलपोस - = 85;

वापसी पट्टी। रंग (0, व्हीलपॉस * 3, 255 - व्हीलपॉस * 3, 0);

}

व्हीलपोस - = १७०;

वापसी पट्टी। रंग (व्हीलपॉस * 3, 255 - व्हीलपॉस * 3, 0, 0);

}

uint8_t लाल (uint32_t c) {

वापसी (सी >> 16);

}

uint8_t हरा (uint32_t c) {

वापसी (सी >> 8);

}

uint8_t नीला (uint32_t c) {

वापसी (सी);

}

}

// सीरियल.प्रिंट्लन (मिकपिक्सेल);

}

चरण ४: ३डी लैंप के आधार को प्रिंट करना

3 डी लैंप के आधार को प्रिंट करना
3 डी लैंप के आधार को प्रिंट करना

लैंप बेस का एक 3डी मॉडल मापा गया, डिज़ाइन किया गया और बड़े आयामों के साथ प्रिंट किया गया ताकि बेस कंपार्टमेंट के अंदर सभी इलेक्ट्रिक घटकों को फिट किया जा सके।

चरण 5: एलईडी अटैचमेंट

एलईडी अटैचमेंट
एलईडी अटैचमेंट

एलईडी को कार्डबोर्ड रोल में घुमाया गया था और दो तरफा टेप का उपयोग करके संलग्न किया गया था, तार को पार करने के लिए नीचे के हिस्से में एक छेद ड्रिल किया गया था।

चरण 6: लैंप संलग्नक

लैंप संलग्नक
लैंप संलग्नक

एलईडी अटैचमेंट के रूप में लैंप बेस और ऊंचाई के समान चौड़ाई वाली पारदर्शी बोतल ढूंढकर एक संलग्नक बनाया गया था। इसके बाद प्रकाश के बेहतर प्रसार के लिए इसे मोटे कागज से ढक दिया गया। वैकल्पिक रूप से, पाले सेओढ़ लिया गिलास या पारभासी प्लास्टिक ट्यूबों को दीपक बाड़े के रूप में उपयोग करना संभव है।

चरण 7: सेटअप

सेट अप
सेट अप

सब कुछ एक साथ चिपका और इकट्ठा किया गया था। और दीपक कुछ परीक्षण के लिए तैयार था!

सिफारिश की: