সুচিপত্র:

স্মার্ট ল্যাম্প (TCfD) - রেইনবো + মিউজিক ভিজুয়ালাইজার: 7 টি ধাপ (ছবি সহ)
স্মার্ট ল্যাম্প (TCfD) - রেইনবো + মিউজিক ভিজুয়ালাইজার: 7 টি ধাপ (ছবি সহ)

ভিডিও: স্মার্ট ল্যাম্প (TCfD) - রেইনবো + মিউজিক ভিজুয়ালাইজার: 7 টি ধাপ (ছবি সহ)

ভিডিও: স্মার্ট ল্যাম্প (TCfD) - রেইনবো + মিউজিক ভিজুয়ালাইজার: 7 টি ধাপ (ছবি সহ)
ভিডিও: MI bedside Smart lamp Unboxing & Review | কতো টুকু স্মার্ট এই ল্যাম্প ? Must Watch 🔥🔥🔥 2024, নভেম্বর
Anonim
Image
Image
বর্তনী চিত্র
বর্তনী চিত্র

এই প্রকল্পটি TUDelft- এ কনসেপ্ট ডিজাইনের জন্য প্রযুক্তির কোর্সের জন্য করা হয়েছে

চূড়ান্ত পণ্যটি একটি ESP-32 বেস LED বাতি এবং সার্ভারের সাথে সংযুক্ত। প্রোটোটাইপের জন্য, বাতি দুটি ফাংশন আছে; একটি রামধনু প্রভাব যা তার আশেপাশের দিকে একটি প্রশান্তিময় রঙ বদলানোর আভা নির্গত করে এবং দ্বিতীয়ত সাউন্ড ভিজ্যুয়ালাইজার যেখানে সাউন্ড লেভেল অনুযায়ী LED পিক্সেলগুলি "নাচ" করে। সিস্টেমটি ওয়াইফাই এর সাথে সংযুক্ত এবং ব্যবহারকারী ওয়াইফাই এর মাধ্যমে প্রদীপ থেকে কী প্রভাব চান তা চয়ন করতে সক্ষম।

সস্তা ESP-32 মাইক্রোচিপ আমাদের শক্তিশালী প্রসেসর, অন্তর্নির্মিত হল সেন্সর, তাপমাত্রা সেন্সর, টাচ সেন্সর এবং ওয়াইফাই এবং ব্লুটুথ সক্ষমতা প্রদান করে। এর সাথে, এই প্রকল্পের জন্য মাত্র দুটি প্রভাব বেছে নেওয়া হয়েছিল, এই "স্মার্ট" বাতিটির অন্তর্নিহিত সীমাহীন। এটি ব্যবহারকারীর কাছে আবহাওয়া, বা ঘরের তাপমাত্রা নির্দেশ করতে ব্যবহৃত হবে, প্রদীপ নিজেই একটি এলার্ম ট্রিগার হিসেবে কাজ করতে পারে অথবা এটি আপনার বিছানার পাশে সূর্যোদয়ের অনুকরণে একটি শান্ত সূর্যরশ্মি দিতে পারে।

ধাপ 1: উপাদান প্রয়োজন

Arduino esp32

সাউন্ড সেন্সর

ফোর ওয়ে দ্বি-নির্দেশমূলক লজিক লেভেল কনভার্টার

Neopixel নেতৃত্বে 2m 60 LED/m

জাম্পার তার

অ্যাডাপ্টারের সাথে মাইক্রো ইউএসবি কেবল

ইন্টারনেট সংযোগ

ধাপ 2: সার্কিট ডায়াগ্রাম

একটি সার্কিট ডায়াগ্রাম আঁকা হয়েছিল এবং সার্কিটটি সেই অনুযায়ী দেওয়া হয়েছিল

নীচের চিত্র।

ধাপ 3: Arduino কোড

এখানে প্রথমে ভিজ্যুয়ালাইজার কোড তৈরি করা হয়েছিল। তারপর, দুটি উদাহরণ কোড

; "Neoplxel RGBW starndtest"; এবং "simpleWebServerWifi" ভিজ্যুয়ালাইজার কোডের মধ্যে সংশোধন এবং সংহত করা হয়েছিল। যদিও কোড এখনও মাঝে মাঝে বগি (র্যান্ডম LED এর আলো সময় সময়)। পরবর্তী কোডের পুনরাবৃত্তি (একবার আমরা পর্যাপ্ত সময় পেলে) আপডেট করা হবে।

#অন্তর্ভুক্ত

#ifdef _AVR_

#অন্তর্ভুক্ত

#যদি শেষ

const int numReadings = 5;

int রিডিং [numReadings];

int readIndex = 0;

int মোট = 0;

int গড় = 0;

int micPin = 33;

#পিন 4 নির্ধারণ করুন

#নির্ধারণ করুন NUM_LEDS 120

#উজ্জ্বলতা 100 নির্ধারণ করুন

Adafruit_NeoPixel স্ট্রিপ = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

বাইট 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 };

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

char ssid = "yourNetwork"; // আপনার নেটওয়ার্ক SSID (নাম)

char pass = "secretPassword"; // আপনার নেটওয়ার্ক পাসওয়ার্ড

int keyIndex = 0; // আপনার নেটওয়ার্ক কী ইনডেক্স নম্বর (শুধুমাত্র WEP এর জন্য প্রয়োজন)

int অবস্থা = WL_IDLE_STATUS;

ওয়াইফাই সার্ভার সার্ভার (80);

অকার্যকর সেটআপ()

{

Serial.begin (9600); // সিরিয়াল যোগাযোগ শুরু করুন

পিনমোড (9, আউটপুট); // LED পিন মোড সেট করুন

// ofালের উপস্থিতি পরীক্ষা করুন:

যদি (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("ওয়াইফাই ieldাল উপস্থিত নেই");

while (সত্য); // চালিয়ে যাবেন না

}

স্ট্রিং fv = WiFi.firmwareVersion ();

যদি (fv! = "1.1.0") {

Serial.println ("দয়া করে ফার্মওয়্যার আপগ্রেড করুন");

}

// ওয়াইফাই নেটওয়ার্কে সংযোগ করার চেষ্টা:

যখন (অবস্থা! = WL_CONNECTED) {

সিরিয়াল.প্রিন্ট ("নামযুক্ত নেটওয়ার্কের সাথে সংযোগ স্থাপনের প্রচেষ্টা:");

Serial.println (ssid); // নেটওয়ার্ক নাম (SSID) মুদ্রণ করুন;

// WPA/WPA2 নেটওয়ার্কের সাথে সংযোগ স্থাপন করুন। খোলা বা WEP নেটওয়ার্ক ব্যবহার করলে এই লাইনটি পরিবর্তন করুন:

অবস্থা = WiFi.begin (ssid, pass);

// সংযোগের জন্য 10 সেকেন্ড অপেক্ষা করুন:

বিলম্ব (10000);

}

server.begin (); // পোর্ট 80 এ ওয়েব সার্ভার শুরু করুন

printWifiStatus (); // আপনি এখন সংযুক্ত, তাই স্থিতি মুদ্রণ করুন

}

{

Serial.begin (9600);

strip.set উজ্জ্বলতা (উজ্জ্বলতা);

strip.begin ();

strip.show (); // সব পিক্সেল 'বন্ধ' করতে শুরু করুন

পিনমোড (মাইকপিন, ইনপুট);

জন্য (int thisReading = 0; thisReading <numReadings; thisReading ++) {

রিডিং [thisReading] = 0;

}

}

অকার্যকর রংধনু (uint8_t অপেক্ষা) {

uint16_t i, j;

জন্য (j = 0; j <256; j ++) {

জন্য (i = 0; i

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

}

strip.show ();

বিলম্ব (অপেক্ষা);

}

}

অকার্যকর ভিজ্যুয়ালাইজার () {

মোট = মোট - রিডিং [readIndex];

রিডিং [readIndex] = analogRead (micPin);

মোট = মোট + রিডিং [readIndex];

readIndex = readIndex + 1;

যদি (readIndex> = numReadings) {

readIndex = 0;

}

গড় = মোট / numReadings;

বিলম্ব (1);

int micpixel = (গড় -100)/5;

Serial.println (micpixel);

যদি (micpixel> 0) {

{

জন্য (int j = 0; j <= micpixel; j ++)

strip.setPixelColor (j, (micpixel*2), 0, (90-micpixel), 0);

জন্য (int j = micpixel; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

যদি (micpixel <0) {

জন্য (int j = 0; j <= 20; j ++)

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

strip.show ();

}

}

অকার্যকর লুপ () {

{

WiFiClient client = server.available (); // আগত ক্লায়েন্টদের জন্য শুনুন

যদি (ক্লায়েন্ট) {// যদি আপনি একজন ক্লায়েন্ট পান, Serial.println ("নতুন ক্লায়েন্ট"); // সিরিয়াল পোর্ট থেকে একটি বার্তা প্রিন্ট করুন

স্ট্রিং কারেন্টলাইন = ""; // ক্লায়েন্ট থেকে আগত ডেটা ধরে রাখার জন্য একটি স্ট্রিং তৈরি করুন

while (client.connected ()) {// loop যখন ক্লায়েন্ট সংযুক্ত থাকে

যদি (client.available ()) {// যদি ক্লায়েন্ট থেকে পড়ার জন্য বাইট থাকে, char c = client.read (); // তারপর একটি বাইট পড়ুন

Serial.write (c); // এটি সিরিয়াল মনিটর মুদ্রণ করুন

if (c == '\ n') {// যদি বাইট একটি নতুন লাইন অক্ষর হয়

// যদি বর্তমান লাইনটি ফাঁকা থাকে, আপনি পরপর দুটি নতুন লাইন অক্ষর পেয়েছেন।

// এটি ক্লায়েন্ট HTTP অনুরোধের শেষ, তাই একটি প্রতিক্রিয়া পাঠান:

যদি (currentLine.length () == 0) {

// HTTP হেডার সবসময় একটি প্রতিক্রিয়া কোড দিয়ে শুরু করে (যেমন HTTP/1.1 200 ঠিক আছে)

// এবং একটি কন্টেন্ট-টাইপ যাতে ক্লায়েন্ট জানে কি আসছে, তারপর একটি ফাঁকা লাইন:

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

client.println ("বিষয়বস্তু-প্রকার: পাঠ্য/এইচটিএমএল");

client.println ();

// HTTP প্রতিক্রিয়ার বিষয়বস্তু শিরোনাম অনুসরণ করে:

client.print ("এখানে ক্লিক করুন রেইনবো ইফেক্ট চালু করুন");

client.print ("এখানে ক্লিক করুন Visualizer চালু করুন");

// HTTP প্রতিক্রিয়া আরেকটি ফাঁকা লাইন দিয়ে শেষ হয়:

client.println ();

// যখন লুপ থেকে বিরতি:

বিরতি;

} অন্যথায় {// যদি আপনি একটি নতুন লাইন পান, তাহলে currentLine সাফ করুন:

currentLine = "";

}

} অন্যথায় যদি (c! = '\ r') {// যদি আপনি একটি ক্যারেজ রিটার্ন চরিত্র ছাড়া অন্য কিছু পান, currentLine += c; // কারেন্টলাইনের শেষে এটি যোগ করুন

}

// ক্লায়েন্টের অনুরোধ "GET /H" বা "GET /L" ছিল কিনা তা পরীক্ষা করুন:

যদি (currentLine.endsWith ("GET /R")) {

রেইনবো (10); // রেনবো ইফেক্ট চালু

}

যদি (currentLine.endsWith ("GET /V")) {

ভিজুয়ালাইজার (); // ভিজুয়ালাইজার চালু আছে

}

}

}

// সংযোগ বন্ধ করুন:

client.stop ();

Serial.println ("ক্লায়েন্ট সংযোগ বিচ্ছিন্ন");

}

}

অকার্যকর মুদ্রণ ওয়াইফাই স্ট্যাটাস () {

// আপনি সংযুক্ত নেটওয়ার্কের SSID মুদ্রণ করুন:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// আপনার ওয়াইফাই শিল্ডের আইপি ঠিকানা প্রিন্ট করুন:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP Address:");

Serial.println (ip);

// প্রাপ্ত সংকেত শক্তি মুদ্রণ করুন:

দীর্ঘ rssi = WiFi. RSSI ();

Serial.print ("সংকেত শক্তি (RSSI):");

সিরিয়াল.প্রিন্ট (rssi);

Serial.println ("dBm");

// ব্রাউজারে কোথায় যেতে হবে তা মুদ্রণ করুন:

Serial.print ( এই পৃষ্ঠাটি কার্যক্রমে দেখতে, https:// এ একটি ব্রাউজার খুলুন);

Serial.println (ip);

}

}

uint32_t চাকা (বাইট হুইলপস) {

WheelPos = 255 - WheelPos;

যদি (হুইলপস <85) {

রিটার্ন স্ট্রিপ রঙ (255 - হুইলপস * 3, 0, হুইলপস * 3, 0);

}

যদি (হুইলপস <170) {

হুইলপস -= 85;

রিটার্ন স্ট্রিপ রঙ (0, হুইলপস * 3, 255 - হুইলপস * 3, 0);

}

হুইলপস -= 170;

রিটার্ন স্ট্রিপ রঙ (হুইলপস * 3, 255 - হুইলপস * 3, 0, 0);

}

uint8_t লাল (uint32_t c) {

প্রত্যাবর্তন (c >> 16);

}

uint8_t সবুজ (uint32_t c) {

প্রত্যাবর্তন (c >> 8);

}

uint8_t নীল (uint32_t c) {

ফেরত (গ);

}

}

// সিরিয়াল.প্রিন্টলন (মাইকপিক্সেল);

}

ধাপ 4: 3 ডি ল্যাম্পের বেস মুদ্রণ

3 ডি ল্যাম্প বেস মুদ্রণ
3 ডি ল্যাম্প বেস মুদ্রণ

ল্যাম্প বেসের একটি 3 ডি মডেলটি পরিমাপ করা হয়েছিল, ডিজাইন করা হয়েছিল এবং বেসের কম্পার্টমেন্টের ভিতরে সমস্ত বৈদ্যুতিক উপাদানগুলি মাপসই করার জন্য যথেষ্ট পরিমাণে মুদ্রিত হয়েছিল।

ধাপ 5: নেতৃত্ব সংযুক্তি

নেতৃত্বাধীন সংযুক্তি
নেতৃত্বাধীন সংযুক্তি

এলইডিগুলি কার্ডবোর্ড রোলে ঘুরানো হয়েছিল এবং ডবল পার্শ্বযুক্ত টেপ ব্যবহার করে সংযুক্ত করা হয়েছিল, তারের মধ্য দিয়ে যাওয়ার জন্য নীচের অংশে একটি গর্ত করা হয়েছিল

ধাপ 6: ল্যাম্প ঘের

ল্যাম্প এনক্লোজার
ল্যাম্প এনক্লোজার

ল্যাম্প বেসের সমান প্রস্থ এবং LED সংযুক্তির মতো উচ্চতা সহ একটি স্বচ্ছ বোতল খুঁজে একটি ঘের তৈরি করা হয়েছিল। আলোর ভাল বিস্তারের জন্য এটি তখন মোটা কাগজ দিয়ে coveredাকা ছিল। বিকল্পভাবে, হিমায়িত কাচ বা স্বচ্ছ প্লাস্টিকের টিউবগুলি বাতি ঘের হিসাবে ব্যবহার করা সম্ভব।

ধাপ 7: সেটআপ

সেটআপ
সেটআপ

সবকিছু একসাথে আঠালো এবং একত্রিত করা হয়েছিল। এবং প্রদীপ কিছু পরীক্ষার জন্য প্রস্তুত ছিল!

প্রস্তাবিত: