সুচিপত্র:

কাঠের LED ঘড়ি - এনালগ স্টাইল: 11 টি ধাপ (ছবি সহ)
কাঠের LED ঘড়ি - এনালগ স্টাইল: 11 টি ধাপ (ছবি সহ)

ভিডিও: কাঠের LED ঘড়ি - এনালগ স্টাইল: 11 টি ধাপ (ছবি সহ)

ভিডিও: কাঠের LED ঘড়ি - এনালগ স্টাইল: 11 টি ধাপ (ছবি সহ)
ভিডিও: জি-শক ওয়াচগুলি 250 ডলারের নিচে-শীর্ষ 15 স... 2024, জুলাই
Anonim
কাঠের LED ঘড়ি - এনালগ স্টাইল
কাঠের LED ঘড়ি - এনালগ স্টাইল

এটি একটি এনালগ স্টাইলের কাঠের LED ঘড়ি। আমি জানি না কেন আমি এর আগে একটিও দেখিনি..যদিও ডিজিটাল প্রকারগুলি খুব সাধারণ। যাইহোক, আমরা এখানে যাই!

ধাপ 1:

ছবি
ছবি
ছবি
ছবি

প্লাইউড ঘড়ি প্রকল্পটি সিএনসি রাউটারের জন্য একটি সহজ স্টার্টার প্রকল্প হিসাবে শুরু হয়েছিল। আমি অনলাইনে সহজ প্রকল্পগুলি দেখছিলাম এবং এই বাতিটি দেখতে পেলাম (উপরের চিত্র)। আমি ডিজিটাল ঘড়িগুলিও দেখেছি যা কাঠের ব্যহ্যাবরণ (উপরের চিত্র) দিয়ে জ্বলজ্বল করে। সুতরাং, দুটি প্রকল্প একত্রিত করা একটি সুস্পষ্ট ধারণা ছিল। নিজেকে চ্যালেঞ্জ করতে খুঁজছি, আমি ব্যহ্যাবরণ ব্যবহার না করার সিদ্ধান্ত নিয়েছি কিন্তু এই প্রকল্পের জন্য শুধুমাত্র একটি কাঠের টুকরো ব্যবহার করব।

ধাপ 2: নকশা

নকশা
নকশা
নকশা
নকশা

আমি ইঙ্কস্কেপে ঘড়িটি ডিজাইন করেছি (উপরের চিত্র)। নকশা পছন্দ দ্বারা খুব সহজ। আমি তারের জন্য রাউটিং ট্রেসগুলির বিরুদ্ধে সিদ্ধান্ত নিয়েছিলাম কারণ এই মুহুর্তে আমি অনিশ্চিত ছিলাম যে আমি রেডিয়াল বা ঘেরের তারের সাথে যেতে চাই। (আমি অবশেষে পেরিমিটার ওয়্যারিং দিয়ে যাওয়ার সিদ্ধান্ত নিয়েছি।) পাঁচ মিনিটের নির্ভুলতার সাথে মিনিট এবং ঘন্টার সময় দেখানোর জন্য প্রতিটি একটি ছোট বৃত্তাকার গর্তের মধ্যে একটি নিওপিক্সেল যায়। ইলেকট্রনিক্স সামঞ্জস্য করার জন্য মাঝখানে বৃত্তটি বাতিল করা হবে।

ধাপ 3: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

আমি মাস্টারক্যামে টুলপাথ ডিজাইন করেছি, এবং 3/4 ইঞ্চি পাতলা পাতলা কাঠ থেকে ঘড়ি বের করার জন্য একটি টেকনো রাউটার ব্যবহার করেছি। আমি এই জন্য 15 "x15" টুকরা ব্যবহার করি, ন্যূনতম অপচয় সহ। কৌশলটি হল কাঠ না ভেঙে যতটা সম্ভব কাঠ বের করে দেওয়া। 0.05 "-0.1" ছেড়ে হালকা কাঠের জন্য একটি ভাল পছন্দ। আপনি যদি অনিশ্চিত হন তবে আরও কাঠ রেখে দেওয়া ভাল, কারণ আপনি সর্বদা অন্য মুখ বালি করতে পারেন। আমি কিছু অংশ থেকে একটু বেশি কাঠ সরিয়ে শেষ করেছি, কিন্তু সৌভাগ্যক্রমে এই কারণে ফলাফল খুব বেশি ভোগ করে না।

একটি CNC অ্যাক্সেস ছাড়া ব্যবহারকারীদের জন্য নোট:

একটি ড্রিল প্রেস দিয়ে এই প্রকল্পটি সহজেই করা যায়। আপনাকে কেবল একটি স্থানে স্টপ সেট করতে হবে যেখানে আপনি গোড়ায় প্রায় 0.1 কাঠ অবশিষ্ট থাকবেন। আপনাকে সুনির্দিষ্ট হতে হবে, কিন্তু খুব সুনির্দিষ্ট নয়। সর্বোপরি, আদর্শভাবে কেউই সমস্ত LEDs দেখতে পাবে না একই সময়ে, যাতে আপনি একটু opালু হয়ে যেতে পারেন।

ধাপ 4: ইলেকট্রনিক্স

ইলেকট্রনিক্স
ইলেকট্রনিক্স
ইলেকট্রনিক্স
ইলেকট্রনিক্স
ইলেকট্রনিক্স
ইলেকট্রনিক্স

ইলেকট্রনিক্স মোটামুটি সহজ। এখানে 24 টি নিওপিক্সেল, ঘন্টা দেখানোর জন্য বারো এবং মিনিট দেখানোর জন্য বারো, পাঁচ মিনিটের নির্ভুলতা রয়েছে। একটি Arduino প্রো মিনি neopixels নিয়ন্ত্রণ করে এবং এটি একটি DS3231 রিয়েল টাইম ক্লক (RTC) মডিউলের মাধ্যমে সঠিক সময় পায়। আরটিসি মডিউলের ব্যাকআপ হিসাবে একটি মুদ্রা সেল রয়েছে, তাই এটি বিদ্যুৎ বন্ধ থাকা সত্ত্বেও সময় হারায় না।

উপাদান:

আরডুইনো প্রো মিনি (বা এই বিষয়টির জন্য অন্য কোন আরডুইনো)

DS3231 ব্রেকআউট বোর্ড

পৃথক ব্রেকআউট বোর্ডে নিওপিক্সেল

ধাপ 5: ইলেকট্রনিক্স সমাবেশ

ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ
ইলেকট্রনিক্স সমাবেশ

আমি প্রথম বার লেডগুলির জন্য 2.5 তারের এবং পরবর্তী বারোটির জন্য চার ইঞ্চি তারের ব্যবহার করে একটি স্ট্রিংয়ে নিওপিক্সেল সংযুক্ত করেছি। আমি তারের দৈর্ঘ্য কিছুটা ছোট করতে পারতাম। স্ট্রিং তৈরির পরে, আমি এটি পরীক্ষা করে দেখেছি, সোল্ডারটি নিশ্চিত করেছি জয়েন্টগুলো ভালো ছিল। আমি সব লেড চালু করার জন্য একটি ক্ষণস্থায়ী সুইচ যোগ করেছি, শুধু দেখানোর জন্য।

ধাপ 6: ড্রাই রান

ড্রাই রান
ড্রাই রান
ড্রাই রান
ড্রাই রান
ড্রাই রান
ড্রাই রান
ড্রাই রান
ড্রাই রান

পরীক্ষা করার পরে, গর্তে এলইডি লাগানো এবং সেগুলি সব চালু করা, আমি ফলাফলে সন্তুষ্ট। তাই আমি সামনের মুখটা একটু স্যান্ড করে একটা PU কোট লাগালাম। আমি পরে কোট sanding শেষ, কিন্তু এটি একটি ভাল ধারণা যদি আপনি এটি নান্দনিকভাবে অপ্রীতিকর না মনে হয় এটি ছেড়ে।

ধাপ 7: Epoxy

ইপক্সি
ইপক্সি
ইপক্সি
ইপক্সি

গর্তের মধ্যে নেতৃত্বাধীন অবস্থানের সাথে কিছু পরীক্ষা করার পর, আমি বুঝতে পেরেছিলাম যে LEDs যখন গর্তের শেষ থেকে প্রায় 0.2 দূরে থাকে তখন সবচেয়ে ভাল আলোচনা হয়। প্রতিটি গর্ত। এটা নিয়ে চিন্তা করবেন না; আমরা এটি কোডে ঠিক করে দেব। এটি আমি যে ধরনের ড্রিল বিট ব্যবহার করেছি তার কারণে। যদি আমি এটি আবার করতে চাই, তাহলে আমি গর্তের জন্য একটি বল এন্ড ড্রিল বিট ব্যবহার করব কিন্তু, যাই হোক না কেন, দূরত্ব পেতে আমি কিছু ইপোক্সি মিশ্রিত করেছি এবং প্রতিটি গর্তে কিছুটা বিট করেছি।

ধাপ 8: সব একসাথে রাখা

সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ

এলইডিগুলি 12 ঘন্টার হাতের অবস্থান থেকে শুরু করে ঘড়ির কাঁটার বিপরীতে সমস্ত ঘন্টার হাতের অবস্থানের মধ্য দিয়ে এবং তারপর মিনিট হাতে চলে যাবে, আবার 60 মিনিটের চিহ্ন থেকে ঘড়ির কাঁটার বিপরীত দিকে চলে যাবে। এর ফলে আমরা যখন সামনে থেকে দেখি তখন LED প্যাটার্নটি ঘড়ির কাঁটার দিকে যাচ্ছে।

ইপক্সি এক ঘন্টার জন্য নিরাময়ের পর, আমি আরও কিছু ইপক্সি রাখলাম। এই সময়, আমি গর্তে এলইডি স্থাপন করেছি, ইপক্সির সাথে তারের এবং সোল্ডার জয়েন্টগুলি coverেকে রাখা নিশ্চিত করে। এটি ভাল আলো ছড়িয়ে দেয় এবং তারগুলি সুরক্ষিত করে।

ধাপ 9: কোড

কোড
কোড

কোডটি GitHub এ আছে, আপনার ব্যবহারের জন্য নির্দ্বিধায় এটি সংশোধন করুন। যখন আপনি সমস্ত এলইডি একই স্তরে স্যুইচ করেন, তখন প্রতিটি গর্তে আলোর উজ্জ্বলতা খুব আলাদা হবে। এটি গর্তে কাঠের বিভিন্ন বেধ এবং কাঠের ছায়ায় পার্থক্যের কারণে, আপনি দেখতে পাচ্ছেন কাঠের রঙ আমার টুকরোতে বেশ কিছুটা পরিবর্তিত হয়। উজ্জ্বলতার এই পার্থক্যের প্রতিকারের জন্য, আমি নেতৃত্বাধীন উজ্জ্বলতার মাত্রার একটি ম্যাট্রিক্স তৈরি করেছি। এবং উজ্জ্বল LEDs এর উজ্জ্বলতা হ্রাস। এটি একটি ট্রায়াল এবং ত্রুটি প্রক্রিয়া এবং কয়েক মিনিট সময় নিতে পারে, কিন্তু ফলাফলগুলি এটির মূল্যবান।

পাতলা পাতলা কাঠ

// পাতলা পাতলা ঘড়ি
// লেখক: tinkrmind
// Attribution 4.0 International (CC BY 4.0)। আপনি স্বাধীন:
// শেয়ার করুন - যেকোনো মাধ্যম বা ফরম্যাটে উপাদানটি অনুলিপি করুন এবং পুনরায় বিতরণ করুন
// অ্যাডাপ্ট - রিমিক্স, রূপান্তর, এবং যেকোনো উদ্দেশ্যে, এমনকি বাণিজ্যিকভাবে উপাদানটির উপর নির্মাণ।
// হুররে!
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত "RTClib.h"
RTC_DS3231 rtc;
#অন্তর্ভুক্ত "Adafruit_NeoPixel.h"
#ifdef _AVR_
#অন্তর্ভুক্ত
#যদি শেষ
#definePIN6
Adafruit_NeoPixel স্ট্রিপ = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hour পিক্সেল = 0;
int minutePixel = 0;
স্বাক্ষরহীন দীর্ঘ lastRtcCheck;
স্ট্রিং inputString = ""; // ইনকামিং ডেটা রাখার জন্য একটি স্ট্রিং
বুলিয়ান স্ট্রিং সম্পূর্ণ = মিথ্যা; // স্ট্রিং সম্পূর্ণ কিনা
int স্তর [24] = {31, 51, 37, 64, 50, 224, 64, 102, 95, 255, 49, 44, 65, 230, 80, 77, 102, 87, 149, 192, 67, 109 {68, 77};
অকার্যকর সেটআপ () {
#ifndef ESP8266
যখন (! সিরিয়াল); // লিওনার্দো/মাইক্রো/জিরোর জন্য
#যদি শেষ
// এটি Trinket 5V 16MHz এর জন্য, যদি আপনি একটি Trinket ব্যবহার না করেন তাহলে আপনি এই তিনটি লাইন অপসারণ করতে পারেন
#যদি সংজ্ঞায়িত (_AVR_ATtiny85_)
যদি (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#যদি শেষ
// trinket বিশেষ কোড শেষ
Serial.begin (9600);
strip.begin ();
strip.show (); // সব পিক্সেল 'বন্ধ' করতে শুরু করুন
যদি (! rtc.begin ()) {
Serial.println ("RTC খুঁজে পাওয়া যায়নি");
যখন (1);
}
পিনমোড (2, INPUT_PULLUP);
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
যদি (rtc.lostPower ()) {
Serial.println ("RTC শক্তি হারিয়েছে, সময় সেট করতে দেয়!");
// নিম্নলিখিত লাইনটি RTC তারিখ এবং সময় নির্ধারণ করে এই স্কেচটি সংকলিত হয়েছিল
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
// এই লাইনটি একটি স্পষ্ট তারিখ এবং সময় দিয়ে RTC সেট করে, উদাহরণস্বরূপ সেট করতে
// জানুয়ারি 21, 2014 সকাল 3 টায় আপনি কল করবেন:
// rtc.adjust (তারিখ সময় (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (তারিখ সময় (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// যখন (1);
lastRtcCheck = 0;
}
voidloop () {
যদি (মিলিস () - lastRtcCheck> 2000) {
তারিখের সময় এখন = rtc.now ();
Serial.print (now.hour (), DEC);
সিরিয়াল.প্রিন্ট (':');
Serial.print (now.minute (), DEC);
সিরিয়াল.প্রিন্ট (':');
Serial.print (now.second (), DEC);
Serial.println ();
শো টাইম ();
lastRtcCheck = মিলিস ();
}
যদি (! digitalRead (2)) {
lightUpEven ();
}
যদি (stringComplete) {
Serial.println (inputString);
যদি (inputString [0] == 'l') {
Serial.println ("লেভেল");
lightUpEven ();
}
যদি (inputString [0] == 'c') {
Serial.println ("সময় দেখানো");
শো টাইম ();
strip.show ();
}
যদি (inputString [0] == '1') {
Serial.println ("সব এলইডি চালু করা");
lightUp (strip. Color (255, 255, 255));
strip.show ();
}
যদি (inputString [0] == '0') {
Serial.println ("ক্লিয়ারিং স্ট্রিপ");
পরিষ্কার();
strip.show ();
}
// #3, 255 নেতৃত্বাধীন সংখ্যা 3 কে 255, 255, 255 স্তরে সেট করবে
যদি (inputString [0] == '#') {
স্ট্রিং তাপমাত্রা;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int তীব্রতা = temp.toInt ();
সিরিয়াল.প্রিন্ট ("সেটিং");
সিরিয়াল.প্রিন্ট (pixNum);
সিরিয়াল.প্রিন্ট ("লেভেল");
Serial.println (তীব্রতা);
strip.setPixelColor (pixNum, strip. Color (তীব্রতা, তীব্রতা, তীব্রতা));
strip.show ();
}
// #3, 255, 0, 125 নেতৃত্বাধীন সংখ্যা 3 কে 255, 0, 125 স্তরে সেট করবে
যদি (inputString [0] == '$') {
স্ট্রিং তাপমাত্রা;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
r rIntensity = temp.toInt ();
intgIndex = inputString.indexOf (',', rIndex + 1) + 1;
temp = inputString.substring (gIndex);
intgIntensity = temp.toInt ();
+ bIndex = inputString.indexOf (',', gIndex + 1) + 1;
temp = inputString.substring (bIndex);
b bIntensity = temp.toInt ();
সিরিয়াল.প্রিন্ট ("সেটিং");
সিরিয়াল.প্রিন্ট (pixNum);
Serial.print ("R to");
সিরিয়াল.প্রিন্ট (rIntensity);
Serial.print ("G to");
সিরিয়াল.প্রিন্ট (gIntensity);
Serial.print ("B to");
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
যদি (inputString [0] == 's') {
স্ট্রিং তাপমাত্রা;
int ঘন্টা, মিনিট;
temp = inputString.substring (1);
ঘন্টা = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
মিনিট = temp.toInt ();
সিরিয়াল.প্রিন্ট ("দেখানোর সময়:");
সিরিয়াল.প্রিন্ট (ঘন্টা);
সিরিয়াল.প্রিন্ট (":");
সিরিয়াল.প্রিন্ট (মিনিট);
শো টাইম (ঘন্টা, মিনিট);
বিলম্ব (1000);
}
ইনপুটস্ট্রিং = "";
stringComplete = মিথ্যা;
}
// বিলম্ব (1000);
}
voidserialEvent () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
ইনপুট স্ট্রিং += ইনচার;
যদি (inChar == '\ n') {
stringComplete = সত্য;
}
বিলম্ব (1);
}
}
অকার্যকর () {
জন্য (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
তারিখের সময় এখন = rtc.now ();
ঘন্টা পিক্সেল = এখন। ঘন্টা () % 12;
মিনিট পিক্সেল = (এখন। মিনিট () / 5) % 12 + 12;
পরিষ্কার();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * level [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * level [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (hourPixel, strip. Color (level [hourPixel], level [hourPixel], level [hourPixel]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidshowTime (int hour, int minute) {
ঘন্টা পিক্সেল = ঘন্টা % 12;
মিনিট পিক্সেল = (মিনিট / 5) % 12 + 12;
পরিষ্কার();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * level [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * level [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (hourPixel, strip. Color (level [hourPixel], level [hourPixel], level [hourPixel]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t কালার) {
জন্য (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, color);
}
strip.show ();
}
voidlightUpEven () {
জন্য (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (level , level , level ));
}
strip.show ();
}

GitHub দ্বারা raw দিয়ে হোস্ট করা rawplywoodClock.ino দেখুন

ধাপ 10: কম্পিউটার ভিশন - ক্রমাঙ্কন

কম্পিউটার ভিশন - ক্রমাঙ্কন
কম্পিউটার ভিশন - ক্রমাঙ্কন
কম্পিউটার ভিশন - ক্রমাঙ্কন
কম্পিউটার ভিশন - ক্রমাঙ্কন

আমি এই প্রকল্পে ব্যহ্যাবরণ ব্যবহার না করার জন্য একটি সচেতন পছন্দ করেছি। যদি আমি থাকতাম, তাহলে সমস্ত LEDs এর সামনে কাঠের বেধ সমান হত। কিন্তু, কারণ প্রতিটি LED এর সামনে আমার কাঠের একটি ভিন্ন বেধ আছে এবং যেহেতু কাঠের রঙ অনেকটা পরিবর্তিত হয়, তাই প্রতিটি LED এর জন্য LED এর উজ্জ্বলতা আলাদা। সমস্ত এলইডি একই উজ্জ্বলতা বলে মনে করার জন্য, আমি একটি নিফটি কৌশল তৈরি করেছি।

আমি কিছু প্রক্রিয়াকরণ কোড লিখেছিলাম (গিটহাবের উপর) যা ঘড়ির একটি ছবি নেয়, এবং প্রতিটি LED এর উজ্জ্বলতা বিশ্লেষণ করে। এটি তখন প্রতিটি LED এর শক্তির তারতম্য করে যাতে তারা সবগুলিকে dimmest LED এর মতই উজ্জ্বলতা পেতে চেষ্টা করে। এখন, আমি জানি এটা ওভারকিল, কিন্তু ইমেজ প্রসেসিং অনেক মজার! এবং, আমি একটি লাইব্রেরি হিসাবে ক্রমাঙ্কন কোড বিকাশের আশা করছি।

আপনি উপরের ছবিতে ক্রমাঙ্কনের আগে এবং পরে LED উজ্জ্বলতা দেখতে পারেন।

calibrateDispllay.pde

importprocessing.video।*;
importprocessing.serial।*;
সিরিয়াল myPort;
ভিডিও চিত্র ধারণ করা;
finalint numLed = 24;
int ledNum = 0;
// PxPGetPixelDark () ব্যবহার করার জন্য আপনার অবশ্যই এই বৈশ্বিক পরিবর্তনশীলতা থাকতে হবে
int rDark, gDark, bDark, aDark;
int rLed, gLed, bLed, aLed;
int rOrg, gOrg, bOrg, aOrg;
int rTemp, gTemp, bTemp, aTemp;
ছবি আমাদের ছবি;
int runNumber = 0;
int গ্রহণযোগ্য ত্রুটি = 3;
int সম্পন্ন;
int numPixelsInLed;
দীর্ঘ নেতৃত্বাধীনতা;
int ledPower;
দীর্ঘ লক্ষ্য তীব্রতা = 99999999;
অকার্যকর সেটআপ() {
সম্পন্ন = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = newlong [numLed];
ledPower = newint [numLed];
জন্য (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
স্ট্রিং portName = Serial.list () [31];
myPort = newSerial (এই, portName, 9600);
আকার (640, 480);
ভিডিও = newCapture (এই, প্রস্থ, উচ্চতা);
video.start ();
noStroke ();
মসৃণ ();
বিলম্ব (1000); // সিরিয়াল পোর্ট খোলার জন্য অপেক্ষা করুন
}
voiddraw () {
যদি (video.available ()) {
যদি (সম্পন্ন [ledNum] == 0) {
clearDisplay ();
বিলম্ব (1000);
video.read ();
চিত্র (ভিডিও, 0, 0, প্রস্থ, উচ্চতা); // পর্দায় ওয়েবক্যাম ভিডিও আঁকুন
saveFrame ("data/no_leds.jpg");
যদি (runNumber! = 0) {
যদি ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> গ্রহণযোগ্য ত্রুটি) {
ledPower [ledNum] -= pow (0.75, runNumber)*100+1;
}
যদি ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> গ্রহণযোগ্য ত্রুটি) {
ledPower [ledNum] += pow (0.75, runNumber)*100 +1;
}
যদি (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= গ্রহণযোগ্য ত্রুটি) {
সম্পন্ন [ledNum] = 1;
মুদ্রণ ("নেতৃত্বাধীন");
মুদ্রণ (ledNum);
মুদ্রণ ("সম্পন্ন");
}
যদি (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
যদি (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
বিলম্ব (1000);
video.read ();
চিত্র (ভিডিও, 0, 0, প্রস্থ, উচ্চতা); // পর্দায় ওয়েবক্যাম ভিডিও আঁকুন
বিলম্ব (10);
while (myPort.available ()> 0) {
int inByte = myPort.read ();
// মুদ্রণ (char (inByte));
}
স্ট্রিং imageName = "data/";
imageName+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (imageName);
স্ট্রিং originalImageName = "data/org";
originalImageName+= str (ledNum);
originalImageName += "। jpg";
যদি (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (imageName);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
পটভূমি (0);
লোড পিক্সেল ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
জন্য (int x = 0; x <width; x ++) {
জন্য (int y = 0; y <height; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, প্রস্থ);
PxPGetPixelLed (x, y, ledImg.pixels, প্রস্থ);
PxPGetPixelOrg (x, y, originalImg.pixels, প্রস্থ);
যদি ((rOrg+gOrg/2+bOrg/3)-(rDark+gDark/2+bDark/3)> 75) {
ledIntensity [ledNum] = ledIntensity [ledNum]+(rLed+gLed/2+bLed/3) -(rDark+gDark/2+bDark/3);
rTemp = 255;
gTemp = 255;
bTemp = 255;
numPixelsInLed [ledNum] ++;
} অন্য {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, পিক্সেল, প্রস্থ);
}
}
ledIntensity [ledNum] /= numPixelsInLed [ledNum];
যদি (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
আপডেট পিক্সেল ();
}
মুদ্রণ (ledNum);
ছাপা(', ');
মুদ্রণ (ledPower [ledNum]);
ছাপা(', ');
println (ledIntensity [ledNum]);
ledNum ++;
যদি (ledNum == numLed) {
int donezo = 0;
জন্য (int i = 0; i <numLed; i ++) {
donezo += সম্পন্ন ;
}
যদি (donezo == numLed) {
println ("সম্পন্ন");
জন্য (int i = 0; i <numLed; i ++) {
মুদ্রণ (i);
মুদ্রণ ("\ টি");
println (ledPower );
}
মুদ্রণ ("int স্তর [");
মুদ্রণ (ledNum);
মুদ্রণ ("] = {");
জন্য (int i = 0; i <numLed-1; i ++) {
মুদ্রণ (ledPower );
ছাপা(', ');
}
মুদ্রণ (ledPower [numLed -1]);
println ("};");
lightUpEven ();
while (সত্য);
}
মুদ্রণ ("লক্ষ্য তীব্রতা:");
যদি (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // পিক্সেল থেকে একটি int হিসাবে রং পাওয়া
aOrg = (thisPixel >> 24) & 0xFF; // প্রতিটি উপাদানকে একা পেতে আমাদের শিফট এবং মাস্ক করতে হবে
rOrg = (thisPixel >> 16) & 0xFF; // এটি লাল (), সবুজ (), নীল () কল করার চেয়ে দ্রুত
gOrg = (thisPixel >> 8) & 0xFF;
bOrg = thisPixel & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // পিক্সেল থেকে একটি int হিসাবে রং পাওয়া
aDark = (thisPixel >> 24) & 0xFF; // প্রতিটি উপাদানকে একা পেতে আমাদের শিফট এবং মাস্ক করতে হবে
rDark = (thisPixel >> 16) & 0xFF; // এটি লাল (), সবুজ (), নীল () কল করার চেয়ে দ্রুত
gDark = (thisPixel >> 8) & 0xFF;
bDark = thisPixel & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // পিক্সেল থেকে একটি int হিসাবে রং পাওয়া
aLed = (thisPixel >> 24) & 0xFF; // প্রতিটি উপাদানকে একা পেতে আমাদের শিফট এবং মাস্ক করতে হবে
rLed = (thisPixel >> 16) & 0xFF; // এটি লাল (), সবুজ (), নীল () কল করার চেয়ে দ্রুত
gLed = (thisPixel >> 8) & 0xFF;
bLed = thisPixel & 0xFF;
}
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // আমরা 4 টি কম্পোজেন্ট এক ইন্টে প্যাক করছি
g = g << 8; // তাই আমাদের তাদের তাদের জায়গায় স্থানান্তর করতে হবে
রঙ argb = a | r | ছ | খ; // বাইনারি "বা" অপারেশন তাদের সবগুলিকে একটি ইন্টে যোগ করে
pixelArray [x+y*pixelsWidth] = argb; // পরিশেষে আমরা te রং দিয়ে int কে পিক্সেলে সেট করি
}

GitHub দ্বারা raw দিয়ে হোস্ট করা rawcalibrateDispllay.pde দেখুন

ধাপ 11: বিভাজন মন্তব্য

এড়ানোর জন্য সমস্যাগুলি:

* কাঠ দিয়ে, আপনি যা পান তা পান। সুতরাং, ভাল মানের কাঠ পান। বার্চ পাতলা পাতলা কাঠ একটি ভাল পছন্দ; যে কোন হালকা কঠিন কাঠও সুন্দরভাবে কাজ করবে। আমি কাঠের দাম কমিয়ে দিয়েছি এবং আমার সিদ্ধান্তের জন্য দু regretখিত।

* আরো বেশী কম ড্রিল করা ভাল। আমার টুকরোর জন্য কয়েকটি গর্ত খুব গভীর হয়ে গেল। এবং ইপক্সি সামনের মুখ দিয়ে দেখায়। একবার আপনি এটি লক্ষ্য করলে এটি খুব লক্ষণীয়।

* সোজা প্রান্তের পরিবর্তে বল এন্ড ড্রিল বিট ব্যবহার করুন। আমি বল এন্ড বিট নিয়ে পরীক্ষা -নিরীক্ষা করিনি, কিন্তু আমি নিশ্চিত যে ফলাফল অনেক ভালো হবে।

আমি Etsy বা tindie এ বিক্রি করার ধারণা নিয়ে ফ্লার্ট করছি। আমি সত্যিই এটির প্রশংসা করব যদি আপনি নীচে মন্তব্য করতে পারেন যদি আপনি মনে করেন এটি বোধগম্য:)

প্রস্তাবিত: