সুচিপত্র:
- লেখক John Day [email protected].
- Public 2024-01-30 08:02.
- সর্বশেষ পরিবর্তিত 2025-01-23 14:36.
এই প্রকল্পটি 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 ডি মডেলটি পরিমাপ করা হয়েছিল, ডিজাইন করা হয়েছিল এবং বেসের কম্পার্টমেন্টের ভিতরে সমস্ত বৈদ্যুতিক উপাদানগুলি মাপসই করার জন্য যথেষ্ট পরিমাণে মুদ্রিত হয়েছিল।
ধাপ 5: নেতৃত্ব সংযুক্তি
এলইডিগুলি কার্ডবোর্ড রোলে ঘুরানো হয়েছিল এবং ডবল পার্শ্বযুক্ত টেপ ব্যবহার করে সংযুক্ত করা হয়েছিল, তারের মধ্য দিয়ে যাওয়ার জন্য নীচের অংশে একটি গর্ত করা হয়েছিল
ধাপ 6: ল্যাম্প ঘের
ল্যাম্প বেসের সমান প্রস্থ এবং LED সংযুক্তির মতো উচ্চতা সহ একটি স্বচ্ছ বোতল খুঁজে একটি ঘের তৈরি করা হয়েছিল। আলোর ভাল বিস্তারের জন্য এটি তখন মোটা কাগজ দিয়ে coveredাকা ছিল। বিকল্পভাবে, হিমায়িত কাচ বা স্বচ্ছ প্লাস্টিকের টিউবগুলি বাতি ঘের হিসাবে ব্যবহার করা সম্ভব।
ধাপ 7: সেটআপ
সবকিছু একসাথে আঠালো এবং একত্রিত করা হয়েছিল। এবং প্রদীপ কিছু পরীক্ষার জন্য প্রস্তুত ছিল!
প্রস্তাবিত:
লেজার মিউজিক ভিজুয়ালাইজার: 5 টি ধাপ
লেজার মিউজিক ভিজুয়ালাইজার: আপনার প্রিয় গানগুলি কেমন লাগে তা আপনি জানেন। এখন আপনি একটি ভিজ্যুয়ালাইজার তৈরি করতে পারেন এবং দেখতে পারেন যে তারা দেখতে কেমন। এটি এর মতো কাজ করে: যখন আপনি আপনার স্পিকারের মাধ্যমে শব্দ বাজান, তখন স্পিকারের ডায়াফ্রাম কম্পন করে। এই কম্পনগুলি সংযুক্ত আয়নাকে সরায়
লাইটবক্স মিউজিক ভিজুয়ালাইজার: 5 টি ধাপ (ছবি সহ)
লাইটবক্স মিউজিক ভিজুয়ালাইজার: লাইটবক্স সঙ্গীত বিশ্লেষণ করতে আপনার ফোনের বা ট্যাবলেটের অন্তর্নির্মিত মাইক্রোফোন ব্যবহার করে সঙ্গীতের সাথে মিলে যাওয়া সুন্দর আলোর নিদর্শন তৈরি করে। শুধু অ্যাপটি শুরু করুন, আপনার ফোন বা ট্যাবলেটটি সাউন্ড সোর্সের কাছাকাছি কোথাও রাখুন এবং আপনার বাক্সটি দৃশ্যমান হবে
মিউজিক রিঅ্যাক্টিভ লাইট -- কিভাবে ডেস্কটপকে অসাধারণ বানানোর জন্য সুপার সিম্পল মিউজিক রিঅ্যাক্টিভ লাইট তৈরি করবেন ।: ৫ টি ধাপ (ছবি সহ)
মিউজিক রিঅ্যাক্টিভ লাইট || কিভাবে ডেস্কটপ আউসুম তৈরির জন্য সুপার সিম্পল মিউজিক রিঅ্যাক্টিভ লাইট তৈরি করা যায়।: হায় হোয়াটস আপ, আজ আমরা একটি খুব আকর্ষণীয় প্রজেক্ট তৈরি করব। আজ আমরা মিউজিক রিঅ্যাক্টিভ লাইট তৈরি করতে যাচ্ছি। বেস যা আসলে কম ফ্রিকোয়েন্সি অডিও সংকেত। এটি তৈরি করা খুবই সহজ। আমরা করব
মিউজিক ভিজুয়ালাইজার (অসিলোস্কোপ): 4 টি ধাপ (ছবি সহ)
মিউজিক ভিজুয়ালাইজার (অসিলোস্কোপ): এই মিউজিক্যাল ভিজুয়ালাইজার আপনার সঙ্গীতের অভিজ্ঞতার আরও গভীরতা যোগ করার একটি চমৎকার উপায় প্রদান করে এবং এটি তৈরি করা বেশ সহজ। এটি প্রয়োজনীয় কিছু অ্যাপ্লিকেশনের জন্য প্রকৃত অসিলোস্কোপ হিসাবেও কার্যকর হতে পারে:
নিক্সি টিউব মিউজিক ভিজুয়ালাইজার: 10 টি ধাপ (ছবি সহ)
নিক্সি টিউব মিউজিক ভিজুয়ালাইজার: আইটিউনসের উপরের ছোট্ট বারগুলি দ্বারা অনুপ্রাণিত একটি সম্মোহিত সঙ্গীত ভিজ্যুয়ালাইজার। চৌদ্দ রাশিয়ান IN-13 নিক্সি বারগ্রাফ টিউব প্রদর্শন হিসেবে ব্যবহৃত হয়। প্রতিটি নিক্সি টিউব যে দৈর্ঘ্য জ্বালায় তা মিউতে একটি নির্দিষ্ট ফ্রিকোয়েন্সি ভলিউমকে প্রতিনিধিত্ব করে
