ዝርዝር ሁኔታ:

የእንጨት LED ሰዓት - የአናሎግ ዘይቤ 11 ደረጃዎች (ከስዕሎች ጋር)
የእንጨት LED ሰዓት - የአናሎግ ዘይቤ 11 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእንጨት LED ሰዓት - የአናሎግ ዘይቤ 11 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእንጨት LED ሰዓት - የአናሎግ ዘይቤ 11 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: [አዲስ] Casio G-Shock አናሎግ-ዲጂታል ካርቦን ኮር | GA2200-2 ኤ 2024, ሀምሌ
Anonim
የእንጨት የ LED ሰዓት - የአናሎግ ዘይቤ
የእንጨት የ LED ሰዓት - የአናሎግ ዘይቤ

እሱ የአናሎግ ዘይቤ የእንጨት LED ሰዓት ነው። ከዚህ በፊት ከእነዚህ ውስጥ አንዱን ለምን እንዳላየሁ አላውቅም.. ምንም እንኳን የዲጂታል ዓይነቶች በጣም የተለመዱ ቢሆኑም። Anyhoo ፣ እዚህ እንሄዳለን!

ደረጃ 1

ምስል
ምስል
ምስል
ምስል

የፓንኬክ ሰዓት ፕሮጀክት ለ CNC ራውተር እንደ ቀላል የማስጀመሪያ ፕሮጀክት ተጀመረ። በመስመር ላይ ቀላል ፕሮጄክቶችን እየተመለከትኩ እና ይህንን መብራት (ከላይ ያለው ምስል) አገኘሁ። እኔ ደግሞ በእንጨት ሽፋን (ከላይ ያለው ምስል) የሚያንፀባርቁ ዲጂታል ሰዓቶችን አይቻለሁ። ስለዚህ ሁለቱን ፕሮጀክቶች ማዋሃድ ግልፅ ሀሳብ ነበር። እራሴን ለመገዳደር ስፈልግ ፣ ለዚህ ፕሮጀክት ቪንኬን ላለመጠቀም ወሰንኩ።

ደረጃ 2: ንድፍ

ንድፍ
ንድፍ
ንድፍ
ንድፍ

ሰዓቱን በ Inkscape (ከላይ ያለው ምስል) ውስጥ ዲዛይን አደረግሁ። ንድፉ በምርጫ በጣም ቀላል ነው። እኔ የሽቦቹን ዱካዎች ላለማስተላለፍ ወሰንኩ ምክንያቱም በዚህ ጊዜ ራዲያል ወይም የፔሚሜትር ሽቦን ለመሄድ ስለመፈለግ እርግጠኛ አልነበርኩም። (በመጨረሻ ከፔሪሜትር ሽቦ ጋር ለመሄድ ወሰንኩ።) አንድ ኒኦፒክስል በእያንዳንዱ ደቂቃ ውስጥ የክብ ቀዳዳዎች እና ደቂቃ ሰዓትን ለማሳየት በአምስት ደቂቃ ትክክለኛነት ይሄዳል። በመሃል ላይ ያለው ክበብ ኤሌክትሮኒክስን ለማስተናገድ እንዲወጣ ይደረጋል።

ደረጃ 3: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

እኔ በ MasterCAM ላይ የመሣሪያ መንገዶችን ነድፌያለሁ ፣ እና ሰዓቱን ከ 3/4 ኢንች ጣውላ ለማውጣት ቴክኖ ራውተርን ተጠቀምኩ። እኔ በትንሹ ብክነት ለዚህ 15 "x15" ቁራጭ እጠቀማለሁ። ዘዴው እንጨቱን ሳያቋርጡ በተቻለ መጠን ከእንጨት መውጣት ነው። 0.05 "-0.1" ን መተው ለቀላል እንጨት ጥሩ ምርጫ ነው። እርግጠኛ ካልሆኑ ሁል ጊዜ ሌላውን ፊት አሸዋ ማድረግ ስለሚችሉ ብዙ እንጨት መተው ይሻላል። ከአንዳንድ ክፍሎች ትንሽ በጣም ብዙ እንጨትን በማስወገድ አበቃሁ ፣ ግን አመሰግናለሁ ውጤቶቹ በዚህ ምክንያት ብዙ አይሠቃዩም።

ማስታወሻ ወደ CNC መዳረሻ ለሌላቸው ተጠቃሚዎች

ይህ ፕሮጀክት በቀላሉ በቁፋሮ ፕሬስ ሊከናወን ይችላል። ከመሠረቱ 0.1 ኢንች አካባቢ ባለው እንጨት ላይ በሚተውበት ቦታ ላይ ማቆሚያውን ማዘጋጀት ያስፈልግዎታል። ትክክለኛ መሆን አለብዎት ፣ ግን በጣም ትክክል አይደሉም። ከሁሉም በኋላ ፣ ሁሉም የ LEDs መብራቱን ማንም ማንም አያይም። በተመሳሳይ ጊዜ ፣ ስለዚህ በትንሽ ተንሸራታች ማምለጥ ይችላሉ።

ደረጃ 4 ኤሌክትሮኒክስ

ኤሌክትሮኒክስ
ኤሌክትሮኒክስ
ኤሌክትሮኒክስ
ኤሌክትሮኒክስ
ኤሌክትሮኒክስ
ኤሌክትሮኒክስ

ኤሌክትሮኒክስ በጣም ቀላል ነው። 24 ኒኦፒክስሎች አሉ ፣ ሰዓቶቹን ለማሳየት አስራ ሁለት ፣ እና ደቂቃዎቹን ለማሳየት አስራ አምስት ፣ በአምስት ደቂቃ ትክክለኛነት። አንድ Arduino pro mini ኒዮፒክስሎችን ይቆጣጠራል እና በ DS3231 በእውነተኛ ሰዓት ሰዓት (RTC) ሞዱል በኩል ትክክለኛውን ጊዜ ያገኛል። የ RTC ሞዱል እንደ ምትኬ ሳንቲም ሴል አለው ፣ ስለዚህ ኃይሉ ጠፍቶ እንኳን ጊዜ አይጠፋም።

ቁሳቁስ:

አርዱዲኖ ፕሮ ሚኒ (ወይም ሌላ ማንኛውም አርዱinoኖ ለዚያ ጉዳይ)

DS3231 መለያየት ቦርድ

Neopixels በግለሰብ የመለያያ ሰሌዳዎች ውስጥ

ደረጃ 5 የኤሌክትሮኒክስ ስብሰባ

የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ
የኤሌክትሮኒክስ ስብሰባ

ለመጀመሪያዎቹ አስራ ሁለት ሌዲዎች 2.5 ሽቦዎችን እና ለሚቀጥሉት አስራ ሁለት የአራት ኢንች ሽቦን በመጠቀም ኒዮፒክሴሎችን በአንድ ገመድ ውስጥ አገናኘሁት። ትንሽ አነስ ያሉ የሽቦ ርዝመቶችን መጠቀም እችል ነበር። ሕብረቁምፊውን ከሠራሁ በኋላ ሻጩን በማረጋገጥ ሞከርኩት። መገጣጠሚያዎች ጥሩ ነበሩ። ለማሳየት ሁሉንም ለማሳየት ሌዲዎቹን ለማብራት ጊዜያዊ መለወጫ ጨመርኩ።

ደረጃ 6: ደረቅ ሩጫ

ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ
ደረቅ አሂድ

ከሙከራ በኋላ ፣ ኤልዲዎቹን ወደ ጉድጓዶቹ ውስጥ በማስገባት ሁሉንም ካበራሁ በኋላ በውጤቱ ረክቻለሁ። ስለዚህ የፊት ፊቱን ትንሽ አሸዋ እና የ PU ኮት ተጠቀምኩ። በኋላ ላይ ካባውን አሸዋ አደረግሁት ፣ ነገር ግን ውበት ባያስደስትዎት እሱን መተው ጥሩ ሀሳብ ነው።

ደረጃ 7 - ኢፖክሲ

ኢፖክሲ
ኢፖክሲ
ኢፖክሲ
ኢፖክሲ

በጉድጓዶቹ ውስጥ ከተመራው ቦታ ጋር ጥቂት ሙከራ ካደረግሁ በኋላ ፣ በጣም ጥሩው ውይይት የሚሳካው ኤልዲዎቹ ከጉድጓዱ መጨረሻ 0.2 ኢንች አካባቢ ሲደርሱ ነው። ይህንን እራስዎ ሲሞክሩ ፣ የኤልዲዎቹ ብሩህነት በ ውስጥ በጣም የተለየ ይሆናል። እያንዳንዱ ጉድጓድ። በዚህ አይጨነቁ ፣ እኛ በኮድ ውስጥ እናስተካክለዋለን። ይህ በተጠቀመበት የመቦርቦር ዓይነት ምክንያት ነው። ይህንን እንደገና ካደረግኩ ለጉድጓዶቹ የኳስ መጨረሻ ቁፋሮ ቢት እጠቀማለሁ። ነገር ግን ፣ በማንኛውም ሁኔታ ፣ ርቀቱን ለማግኘት አንዳንድ ኤፒኮዎችን ቀላቅዬ በእያንዳንዱ ቀዳዳ ውስጥ ትንሽ አደረግሁ።

ደረጃ 8 - ሁሉንም በአንድ ላይ ማዋሃድ

ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ
ሁሉንም በአንድ ላይ ማዋሃድ

ኤልዲዎቹ ከ 12 ሰዓት ሰዓት የእጅ አቀማመጥ በተቃራኒ ሰዓት አቅጣጫ ሁሉ በሰዓት የእጅ አቀማመጥ እና ከዚያም ወደ ደቂቃው እጅ በመሄድ እንደገና ከ 60 ደቂቃ ምልክት በተቃራኒ ሰዓት አቅጣጫ ይንቀሳቀሳሉ። ይህ ከፊት ለፊት ስናይ የ LED ንድፍ በሰዓት አቅጣጫ የሚሄድ ሆኖ እንዲታይ ነው።

ኤፒኮው ለአንድ ሰዓት ከተፈወሰ በኋላ አንዳንድ ተጨማሪ ኤፒኮዎችን አኖርኩ። በዚህ ጊዜ ገመዶቹን እና የሽያጭ መገጣጠሚያዎቹን ከኤፒኮ ጋር እንዲሸፍኑ በማድረግ ቀዳዳዎቹን ውስጥ የ LEDs አደረግሁ። ይህ ጥሩ የብርሃን ስርጭትን ይፈጥራል እና ሽቦዎችን ይጠብቃል።

ደረጃ 9 ኮድ

ኮድ
ኮድ

ኮዱ በ GitHub ላይ ነው ፣ ለአጠቃቀምዎ ለመቀየር ነፃነት ይሰማዎ። ሁሉንም ኤልኢዲዎች ወደ ተመሳሳይ ደረጃ ሲያበሩ ፣ በእያንዳንዱ ቀዳዳ ውስጥ የሚያበራ የብርሃን ብሩህነት በጣም የተለየ ይሆናል። ይህ የሆነው በጫካዎቹ ውስጥ ባለው የተለያዩ የእንጨት ውፍረት እና በእንጨት ጥላ ውስጥ ባለው ልዩነት ምክንያት እርስዎ እንደሚመለከቱት የእንጨት ቀለም በእኔ ቁራጭ ውስጥ ትንሽ ይለያያል። ይህንን ልዩነት በብሩህነት ለማስተካከል ፣ የመሪ ብሩህነት ደረጃዎችን ማትሪክስ ሠራሁ። እና የደማቁ LED ዎች ብሩህነት ቀንሷል። የሙከራ እና የስህተት ሂደት ነው እና ብዙ ደቂቃዎችን ሊወስድ ይችላል ፣ ግን ውጤቶቹ በጣም የሚያስቆጭ ነው።

plywoodClock.ino

// የፓንኮክ ሰዓት
// ደራሲ: tinkrmind
// Attribution 4.0 International (CC BY 4.0)። እርስዎ ነፃ ነዎት
// ያጋሩ - ይዘቱን በማንኛውም መካከለኛ ወይም ቅርጸት ይቅዱ እና እንደገና ያሰራጩ
// መላመድ - ለንግድ ዓላማም ቢሆን ለማንኛውም ዓላማ እንደገና ይቀላቅሉ ፣ ይለውጡ እና ይገንቡ።
// Hurረ!
#ያካትቱ
#"RTClib.h" ን ያካትቱ
RTC_DS3231 rtc;
#"አዳፍ ፍሬ_ኔኦፒክስል.ህ" ን ያካትቱ
#ifdef _AVR_
#ያካትቱ
#ኤንዲፍ
#ፒን 6 ን ይግለጹ
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60 ፣ ፒን ፣ NEO_GRB + NEO_KHZ800) ፤
int hourPixel = 0;
int minutePixel = 0;
ያልተፈረመ lastRtcCheck;
ሕብረቁምፊ ግብዓት String = ""; // ገቢ ውሂብን ለመያዝ ሕብረቁምፊ
ቡሊያን stringComplete = ሐሰት; // ሕብረቁምፊው የተጠናቀቀ ይሁን
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} ፤
voidsetup () {
#ifndef ESP8266
ሳለ (! ተከታታይ); // ለሊዮናርዶ/ማይክሮ/ዜሮ
#ኤንዲፍ
// ይህ ለ Trinket 5V 16MHz ነው ፣ ትሬንኬት የማይጠቀሙ ከሆነ እነዚህን ሶስት መስመሮች ማስወገድ ይችላሉ
#ከተገለጸ (_AVR_ATtiny85_)
ከሆነ (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#ኤንዲፍ
// የትሪኬት ልዩ ኮድ መጨረሻ
Serial.begin (9600);
strip.begin ();
strip.show (); // ሁሉንም ፒክሰሎች ወደ ‹ጠፍቷል› ያስጀምሩ።
ከሆነ (! rtc.begin ()) {
Serial.println ("RTC ን ማግኘት አልተቻለም");
ሳለ (1);
}
pinMode (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 (DateTime (2017 ፣ 11 ፣ 06 ፣ 2 ፣ 49 ፣ 0)));
}
// rtc.adjust (DateTime (2017 ፣ 11 ፣ 06 ፣ 2 ፣ 49 ፣ 0)));
// lightUpEven ();
// እያለ (1);
lastRtcCheck = 0;
}
voidloop () {
ከሆነ (ሚሊስ () - lastRtcCheck> 2000) {
DateTime now = rtc.now ();
Serial.print (now.hour (), DEC);
Serial.print (':');
Serial.print (now.minute (), DEC);
Serial.print (':');
Serial.print (now.second (), DEC);
Serial.println ();
ማሳያ ሰዓት ();
lastRtcCheck = millis ();
}
ከሆነ (! 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 ("በሁሉም LED ዎች ላይ መቀያየር");
lightUp (ስትሪፕ ቀለም (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 intensity = temp.toInt ();
Serial.print ("ቅንብር");
Serial.print (pixNum);
Serial.print ("ወደ ደረጃ");
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);
int rIntensity = temp.toInt ();
intgIndex = inputString.indexOf (',', rIndex + 1) + 1;
temp = inputString.substring (gIndex);
intgIntensity = temp.toInt ();
int bIndex = inputString.indexOf (',', gIndex + 1) + 1;
temp = inputString.substring (bIndex);
int bIntensity = temp.toInt ();
Serial.print ("ቅንብር");
Serial.print (pixNum);
Serial.print ("R to");
Serial.print (rIntensity);
Serial.print ("G to");
Serial.print (gIntensity);
Serial.print ("ለ ለ");
Serial.println (bIntensity);
ስትሪፕ.
strip.show ();
}
ከሆነ (inputString [0] == 's') {
ሕብረቁምፊ የሙቀት መጠን;
int ሰዓት ፣ ደቂቃ;
temp = inputString.substring (1);
ሰዓት = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
ደቂቃ = temp.toInt ();
Serial.print ("የማሳያ ጊዜ:");
Serial.print (ሰዓት);
Serial.print (":");
Serial.print (ደቂቃ);
ማሳያ ሰዓት (ሰዓት ፣ ደቂቃ);
መዘግየት (1000);
}
inputString = "";
stringComplete = ሐሰት;
}
// መዘግየት (1000);
}
voidserialEvent () {
ሳለ (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
ከሆነ (inChar == '\ n') {
stringComplete = እውነት;
}
መዘግየት (1);
}
}
voidclear () {
ለ (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
DateTime now = rtc.now ();
hourPixel = now.hour () % 12;
minutePixel = (አሁን ደቂቃዎች () / 5) % 12 + 12;
ግልጽ ();
// strip.
// strip.
strip.setPixelColor (hourPixel ፣ strip. Color (ደረጃ [hourPixel] ፣ ደረጃ [hourPixel] ፣ ደረጃ [hourPixel]));
strip.
// lightUp (ስትሪፕ ቀለም (255 ፣ 255 ፣ 255));
strip.show ();
}
voidshowTime (int ሰዓት ፣ int ደቂቃ) {
hourPixel = ሰዓት % 12;
minutePixel = (ደቂቃ / 5) % 12 + 12;
ግልጽ ();
// strip.
// strip.
strip.setPixelColor (hourPixel ፣ strip. Color (ደረጃ [hourPixel] ፣ ደረጃ [hourPixel] ፣ ደረጃ [hourPixel]));
strip.
// lightUp (ስትሪፕ ቀለም (255 ፣ 255 ፣ 255));
strip.show ();
}
voidlightUp (uint32_t ቀለም) {
ለ (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i ፣ ቀለም);
}
strip.show ();
}
voidlightUpEven () {
ለ (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i ፣ strip. Color (ደረጃ ፣ ደረጃ ፣ ደረጃ ));
}
strip.show ();
}

በ GitHub በ hosted የተስተናገደ rawplywoodClock.ino ን ይመልከቱ

ደረጃ 10 የኮምፒተር ራዕይ - መለካት

የኮምፒተር ራዕይ - መለካት
የኮምፒተር ራዕይ - መለካት
የኮምፒተር ራዕይ - መለካት
የኮምፒተር ራዕይ - መለካት

በዚህ ፕሮጀክት ውስጥ ቬኒን ላለመጠቀም የንቃተ ህሊና ምርጫ አደረግሁ። ቢኖረኝ የእንጨት ውፍረት በሁሉም ኤልኢዲዎች ፊት ተመሳሳይ ነበር። ነገር ግን ፣ ከእያንዳንዱ ኤልኢዲ ፊት ለፊት የተለየ የእንጨት ውፍረት ስላለኝ እና የእንጨት ቀለም እንዲሁ ብዙ ስለሚለያይ ፣ ለእያንዳንዱ የ LED መብራት የተለየ ነው። ሁሉም ኤልኢዲዎች አንድ ዓይነት ብሩህነት እንዲመስሉ ለማድረግ ፣ አንድ የሚያምር ብልሃት አወጣሁ።

የሰዓቱን ፎቶግራፍ የሚወስድ አንዳንድ የሂደት ኮድ (በ GitHub ላይ) ጻፍኩ እና የእያንዳንዱን የ LED ን ብሩህነት በተራው ይተነትናል። ከዚያ ሁሉም እንደ ደብዛዛው ኤልዲ ተመሳሳይ ብሩህነት እንዲኖራቸው ለማድረግ ለእያንዳንዱ ኤልኢዲ ኃይልን ይለያያል። አሁን ፣ ይህ ከመጠን በላይ መሞላት መሆኑን አውቃለሁ ፣ ግን የምስል ሂደት በጣም አስደሳች ነው! እናም ፣ የመለኪያ ኮዱን እንደ ቤተ -መጽሐፍት ለማዳበር ተስፋ አደርጋለሁ።

ከላይ ባሉት ፎቶዎች ውስጥ ከማስተካከሉ በፊት እና በኋላ የ LED ን ብሩህነት ማየት ይችላሉ።

calibrateDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
ተከታታይ myPort;
ቪዲዮ መቅረጽ;
የመጨረሻ ቁጥር 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;
ረጅም ledIntensity;
int ledPower;
ረጅም ዒላማIntensity = 99999999;
voidsetup () {
ተከናውኗል = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = newlong [numLed];
ledPower = newint [numLed];
ለ (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
ሕብረቁምፊ ወደብ ስም = Serial.list () [31];
myPort = newSerial (ይህ ፣ የወደብ ስም ፣ 9600);
መጠን (640, 480);
ቪዲዮ = newCapture (ይህ ፣ ስፋት ፣ ቁመት);
video.start ();
noStroke ();
ለስላሳ ();
መዘግየት (1000); // ተከታታይ ወደብ እስኪከፈት ይጠብቁ
}
ባዶነት () {
ከሆነ (ቪዲዮ. ይገኛል ()) {
ከሆነ (ተከናውኗል [ledNum] == 0) {
clearDisplay ();
መዘግየት (1000);
ቪዲዮ.ንባብ ();
ምስል (ቪዲዮ ፣ 0 ፣ 0 ፣ ስፋት ፣ ቁመት); // የድር ካሜራ ቪዲዮውን በማያ ገጹ ላይ ይሳሉ
saveFrame ("ውሂብ/no_leds.jpg");
ከሆነ (runNumber! = 0) {
ከሆነ ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> ተቀባይነት ያለው ስህተት) {
ledPower [ledNum] -= ዱቄት (0.75 ፣ runNumber)*100+1;
}
ከሆነ ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> ተቀባይነት ያለው ስህተት) {
ledPower [ledNum] += ዱቄት (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);
ቪዲዮ.ንባብ ();
ምስል (ቪዲዮ ፣ 0 ፣ 0 ፣ ስፋት ፣ ቁመት); // የድር ካሜራ ቪዲዮውን በማያ ገጹ ላይ ይሳሉ
መዘግየት (10);
ሳለ (myPort.available ()> 0) {
int inByte = myPort.read ();
// ህትመት (ቻር (inByte));
}
ሕብረቁምፊ imageName = "ውሂብ/";
የምስል ስም+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (የምስል ስም);
ሕብረቁምፊ originalImageName = "data/org";
originalImageName+= str (ledNum);
originalImageName += ". jpg";
ከሆነ (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (የምስል ስም);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
ዳራ (0);
loadPixels ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
ለ (int x = 0; x <ስፋት; 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];
}
updatePixels ();
}
ማተም (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);
ማተም ("\ t");
println (ledPower );
}
ማተም ("int level [");
ማተም (ledNum);
ማተም ("] = {");
ለ (int i = 0; i <numLed-1; i ++) {
ማተም (ledPower );
ማተም (',');
}
ማተም (ledPower [numLed -1]);
println ("};");
lightUpEven ();
ሳለ (እውነት);
}
ማተም ("የዒላማ ጥንካሬ:");
ከሆነ (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx ፣ inty ፣ int pixelArray ፣ intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // ቀለሞቹን እንደ ኢንች ከፒክሴሎች ማግኘት
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]; // ቀለሞቹን እንደ ኢንች ከፒክሴሎች ማግኘት
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]; // ቀለሞቹን እንደ ኢንች ከፒክሴሎች ማግኘት
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) {
ሀ = (ሀ << 24);
r = r << 16; // እኛ ሁሉንም 4 ጥንቅሮች በአንድ int ውስጥ እንጭናለን
g = g << 8; // ስለዚህ እነሱን ወደ ቦታቸው መለወጥ አለብን
ቀለም argb = a | አር | ሰ | ለ; // ሁለትዮሽ “ወይም” ክዋኔ ሁሉንም ወደ አንድ int ያክላል
pixelArray [x+y*pixelsWidth] = አርግ; // በመጨረሻ እኛ ውስጡን ከቲ ቀለሞች ጋር ወደ ፒክሰሎች እናስገባለን
}

በ GitHub በ hosted የተስተናገደ rawcalibrateDispllay.pde ን ይመልከቱ

ደረጃ 11: የመለያየት አስተያየቶች

ሊያስወግዷቸው የሚችሉ ጉድለቶች ፦

* በእንጨት ፣ የሚከፍሉትን ያገኛሉ። ስለዚህ ጥሩ ጥራት ያለው እንጨት ያግኙ። የበርች ጣውላ ጥሩ ምርጫ ነው። ማንኛውም ቀላል ጠንካራ እንጨት እንዲሁ በጥሩ ሁኔታ ይሠራል። እኔ በእንጨት ላይ ርካሽ ሆ my ውሳኔዬን ተጸጽቻለሁ።

* ከብዙ ባነሰ ቁፋሮ ማድረግ የተሻለ ነው። አንድ ሁለት ቀዳዳዎች ለእኔ ቁራጭ በጣም ጠልቀዋል። እና ኤፒኮው ከፊት ለፊት በኩል ያሳያል። አንዴ ካስተዋሉት በጣም ጎልቶ ይታያል።

* ከቀጥታ ጫፍ ይልቅ የኳስ መጨረሻ መሰርሰሪያን ይጠቀሙ። በኳሱ መጨረሻ ትንሽ አልሞከርኩም ፣ ግን ውጤቱ በጣም የተሻለ እንደሚሆን እርግጠኛ ነኝ።

በኤቲ ወይም ቲንዲ ላይ እነዚህን የመሸጥ ሀሳብ እያሽኮርመም ነው። ምክንያታዊ ነው ብለው ካሰቡ ከዚህ በታች አስተያየት ከሰጡ በእውነት አመሰግናለሁ:)

የሚመከር: