Talaan ng mga Nilalaman:
- Hakbang 1:
- Hakbang 2: Disenyo
- Hakbang 3: CNCing
- Hakbang 4: Elektronika
- Hakbang 5: Assembly ng Elektronika
- Hakbang 6: Dry Run
- Hakbang 7: Epoxy
- Hakbang 8: Pagsasama-sama sa Lahat ng Ito
- Hakbang 9: Code
- Hakbang 10: Paningin sa Computer - Pagkakalibrate
- Hakbang 11: Mga Pamamagitan ng Paghiwalay
Video: Wooden LED Clock - Estilo ng Analog: 11 Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:15
Ito ay isang istilong analog na gawa sa kahoy na LED na orasan. Hindi ko alam kung bakit hindi ko pa nakikita ang isa sa mga ito dati.. kahit na ang mga digital na uri ay napaka-pangkaraniwan. Anyhoo, eto na!
Hakbang 1:
Ang proyekto sa orasan ng playwud ay nagsimula bilang isang simpleng proyekto ng starter para sa router ng CNC. Tumitingin ako sa mga simpleng proyekto sa online at nahanap ang lampara na ito (larawan sa itaas). Nakita ko rin ang mga digital na orasan na lumiwanag sa pamamagitan ng kahoy na pakitang-tao (imahe sa itaas). Kaya, ang pagsasama-sama ng dalawang mga proyekto ay isang malinaw na ideya. Naghahanap upang hamunin ang aking sarili, nagpasya akong huwag gumamit ng pakitang-tao ngunit isang piraso lamang ng kahoy para sa proyektong ito.
Hakbang 2: Disenyo
Dinisenyo ko ang orasan sa Inkscape (imahe sa itaas). Ang disenyo ay napaka-simple ayon sa pagpili. Nagpasya ako laban sa pagruruta ng mga bakas para sa mga wire dahil sa puntong ito hindi ako sigurado kung nais kong pumunta sa mga kable ng radial o perimeter. (Nagpasiya akong pumunta sa wakas ng mga kable ng perimeter.) Ang isang neopixel ay napupunta sa bawat isa sa maliit na mga pabilog na butas para sa pagpapakita ng minuto at oras na oras, na may limang minutong katumpakan. Ang bilog sa gitna ay ililipat upang mapaunlakan ang mga electronics.
Hakbang 3: CNCing
Dinisenyo ko ang mga toolpath sa MasterCAM, at gumamit ng isang technoRouter upang i-mill out ang orasan mula sa 3/4 pulgada na playwud. Gumagamit ako ng isang 15 "x15" na piraso para dito, na may kaunting pag-aaksaya. Ang bilis ng kamay ay upang mag-ruta ng maraming kahoy hangga't maaari nang hindi sinisira ang kahoy. Ang pag-iwan sa 0.05 "-0.1" ay isang mahusay na pagpipilian para sa magaan na kahoy. Kung hindi ka sigurado, mas mahusay na mag-iwan ng maraming kahoy, dahil palagi mong mabuhangin ang iba pang mukha. Natapos kong mag-alis ng kaunting sobrang kahoy mula sa ilang bahagi, ngunit mabuti na lang ang mga resulta ay hindi masyadong naghihirap dahil dito.
Tandaan para sa mga gumagamit na walang access sa isang CNC:
Madaling magawa ang proyektong ito sa isang drill press. Kailangan mo lamang itakda ang paghinto sa isang punto kung saan ka umalis sa paligid ng 0.1 na kahoy na natitira sa base. Kailangan mong maging tumpak, ngunit hindi masyadong tumpak. Pagkatapos ng lahat, perpekto na walang makakakita ng lahat ng mga ilaw ng LED sa sa parehong oras, upang maaari kang makawala sa isang maliit na slop.
Hakbang 4: Elektronika
Ang electronics ay medyo simple. Mayroong 24 na neopixel, labindalawa para sa pagpapakita ng oras at labindalawa para sa pagpapakita ng mga minuto, na may limang minutong katumpakan. Kinokontrol ng isang Arduino pro mini ang mga neopixel at nakakakuha ito ng tumpak na oras sa pamamagitan ng module ng DS3231 real time na orasan (RTC). Ang module ng RTC ay may isang coin cell bilang backup, kaya't hindi mawawalan ng oras kahit na patayin ang kuryente.
Materyal:
Arduino pro mini (o anumang iba pang Arduino para sa bagay na iyon)
Breakout board ng DS3231
Mga neopixel sa mga indibidwal na breakout board
Hakbang 5: Assembly ng Elektronika
Ikinonekta ko ang mga neopixel sa isang string, gamit ang 2.5 na mga wire para sa unang labindalawang leds at apat na pulgada na kawad para sa susunod na labindalawa. Maaaring gumamit ako ng bahagyang mas maliit na haba ng kawad. Matapos gawin ang string, sinubukan ko ito, tinitiyak ang solder mabuti ang mga kasukasuan. Nagdagdag ako ng isang pansamantalang switch upang buksan ang lahat ng mga leds, upang magpakitang-gilas lamang.
Hakbang 6: Dry Run
Matapos mag-eksperimento, ilagay ang mga LED sa mga butas at i-on ang lahat, nasiyahan ako sa mga resulta. Kaya't pinalamasan ko ng konti ang harapan at naglagay ng PU coat. Natapos ko ang pag-sanding ng amerikana sa paglaon, ngunit magandang ideya na iwanan ito kung hindi mo makita na hindi kanais-nais sa aesthetically.
Hakbang 7: Epoxy
Matapos ang ilang pagsubok na may humantong posisyon sa loob ng mga butas, naisip ko na ang pinakamahusay na talakayan ay nakakamit kapag ang mga LED ay nasa paligid ng 0.2 ang layo mula sa dulo ng butas. Kapag sinubukan mo ito mismo, ang ningning ng mga LED ay magkakaiba sa bawat butas. Huwag magalala tungkol dito; aayusin namin ito sa code. Ito ay dahil sa uri ng drill bit na ginamit ko. Kung gagawin ko ito ulit, gagamit ako ng ball end drill bit para sa mga butas Ngunit, sa anumang kaso, upang makuha ang distansya ay naghalo ako ng epoxy at naglagay ng kaunti sa bawat butas.
Hakbang 8: Pagsasama-sama sa Lahat ng Ito
Ang mga LED ay mailalagay simula sa posisyon ng kamay na 12 oras na gumagalaw na anti-clockwise sa lahat ng mga posisyon ng oras na oras at pagkatapos ay sa minutong kamay, muling lumilipat mula sa 60 minutong markahan ng paglipat ng anti-clockwise. Ito ay upang pagtingin namin mula sa harap ang pattern ng LED ay lilitaw na umaandar.
Matapos ang epoxy ay gumaling ng isang oras, naglagay ako ng higit pang epoxy. Sa oras na ito, inilagay ko ang mga LED sa mga butas, tinitiyak na takpan ang mga wire at solder joint ng epoxy. Ginagawa nito ang mahusay na pagsasabog ng ilaw at sinisiguro ang mga wire.
Hakbang 9: Code
Ang code ay nasa GitHub, huwag mag-atubiling baguhin ito para sa iyong paggamit. Kapag binago mo ang lahat ng mga LED sa parehong antas, ang ningning ng ilaw na nagniningning sa pamamagitan ng magiging ibang-iba sa bawat butas. Ito ay dahil sa iba't ibang kapal ng kahoy sa mga butas at ang pagkakaiba sa lilim ng kahoy, Tulad ng nakikita mo na ang kulay ng kahoy ay medyo nag-iiba sa aking piraso. Upang malunasan ang pagkakaiba-iba na ito sa ningning, gumawa ako ng isang matrix ng humantong antas ng liwanag. At nabawasan ang ningning ng mas maliwanag na mga LED. Ito ay isang proseso ng pagsubok at error at maaaring tumagal ng ilang minuto, ngunit sulit ang mga resulta.
playwudClock.ino
// Plywood Clock |
// May-akda: tinkrmind |
// Attribution 4.0 International (CC BY 4.0). Malaya ka sa: |
// Share - kopyahin at ipamahagi muli ang materyal sa anumang medium o format |
// Adapt - remix, transform, at bumuo sa materyal para sa anumang layunin, kahit na sa komersyo. |
// Hurray! |
# isama |
# isama ang "RTClib.h" |
RTC_DS3231 rtc; |
# isama ang "Adafruit_NeoPixel.h" |
#ifdef _AVR_ |
# isama |
#tapusin kung |
# kahuluganPIN6 |
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800); |
int hourPixel = 0; |
int minutePixel = 0; |
unsignedlong lastRtcCheck; |
String inputString = ""; // isang string upang hawakan ang papasok na data |
boolean stringComplete = false; // kung kumpleto ang string |
int level [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 |
habang (! Serial); // para kay Leonardo / Micro / Zero |
#tapusin kung |
// Ito ay para sa Trinket 5V 16MHz, maaari mong alisin ang tatlong mga linya na ito kung hindi ka gumagamit ng isang Trinket |
# kung tinukoy (_AVR_ATtiny85_) |
kung (F_CPU == 16000000) orasan_prescale_set (orasan_div_1); |
#tapusin kung |
// Pagtatapos ng espesyal na code ng trinket |
Serial.begin (9600); |
strip.begin (); |
strip.show (); // Initialize all pixel to 'off' |
kung (! rtc.begin ()) { |
Serial.println ("Hindi mahanap ang RTC"); |
habang (1); |
} |
pinMode (2, INPUT_PULLUP); |
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); |
kung (rtc.lostPower ()) { |
Serial.println ("Nawalan ng lakas ang RTC, hinahayaan mong itakda ang oras!"); |
// ang sumusunod na linya ay nagtatakda ng RTC sa petsa at oras na naipon ang sketch na ito |
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); |
// Itinatakda ng linyang ito ang RTC na may isang malinaw na petsa at oras, halimbawa upang maitakda |
// Enero 21, 2014 ng 3am tatawag ka: |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
} |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
// lightUpEven (); |
// habang (1); |
lastRtcCheck = 0; |
} |
voidloop () { |
kung (millis () - lastRtcCheck> 2000) { |
DateTime ngayon = rtc.now (); |
Serial.print (ngayon.hour (), DEC); |
Serial.print (':'); |
Serial.print (now.minute (), DEC); |
Serial.print (':'); |
Serial.print (ngayon.second (), DEC); |
Serial.println (); |
showTime (); |
lastRtcCheck = millis (); |
} |
kung (! digitalRead (2)) { |
lightUpEven (); |
} |
kung (stringComplete) { |
Serial.println (inputString); |
kung (inputString [0] == 'l') { |
Serial.println ("Antas"); |
lightUpEven (); |
} |
kung (inputString [0] == 'c') { |
Serial.println ("Ipinapakita ang oras"); |
showTime (); |
strip.show (); |
} |
kung (inputString [0] == '1') { |
Serial.println ("Paglipat sa lahat ng LEDs"); |
lightUp (strip. Kulay (255, 255, 255)); |
strip.show (); |
} |
kung (inputString [0] == '0') { |
Serial.println ("Pag-clear strip"); |
malinaw (); |
strip.show (); |
} |
// # 3, 255 itatakda ang humantong bilang 3 sa antas 255, 255, 255 |
kung (inputString [0] == '#') { |
String temp; |
temp = inputString.substring (1); |
int pixNum = temp.toInt (); |
temp = inputString.substring (inputString.indexOf (',') + 1); |
int intensity = temp.toInt (); |
Serial.print ("Setting"); |
Serial.print (pixNum); |
Serial.print ("sa antas"); |
Serial.println (intensity); |
strip.setPixelColor (pixNum, strip. Color (intensity, intensity, intensity)); |
strip.show (); |
} |
// # 3, 255, 0, 125 ay magtatakda ng humantong bilang 3 sa antas 255, 0, 125 |
kung (inputString [0] == '$') { |
String temp; |
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 ("Setting"); |
Serial.print (pixNum); |
Serial.print ("R to"); |
Serial.print (rIntensity); |
Serial.print ("G to"); |
Serial.print (gIntensity); |
Serial.print ("B to"); |
Serial.println (bIntensity); |
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity)); |
strip.show (); |
} |
kung (inputString [0] == 's') { |
String temp; |
int oras, minuto; |
temp = inputString.substring (1); |
oras = temp.toInt (); |
int rIndex = inputString.indexOf (',') + 1; |
temp = inputString.substring (rIndex); |
minuto = temp.toInt (); |
Serial.print ("Ipinapakita ang oras:"); |
Serial.print (oras); |
Serial.print (":"); |
Serial.print (minuto); |
showTime (oras, minuto); |
pagkaantala (1000); |
} |
inputString = ""; |
stringComplete = false; |
} |
// pagkaantala (1000); |
} |
voidserialEvent () { |
habang (Serial.available ()) { |
char inChar = (char) Serial.read (); |
inputString + = inChar; |
kung (inChar == '\ n') { |
stringComplete = true; |
} |
antala (1); |
} |
} |
walang bisa () { |
para sa (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, strip. Color (0, 0, 0)); |
} |
} |
voidshowTime () { |
DateTime ngayon = rtc.now (); |
hourPixel = now.hour ()% 12; |
minutoPixel = (now.minute () / 5)% 12 + 12; |
malinaw (); |
// 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 oras, int minuto) { |
hourPixel = oras% 12; |
minutoPixel = (minuto / 5)% 12 + 12; |
malinaw (); |
// 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 (kulay uint32_t) { |
para sa (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, kulay); |
} |
strip.show (); |
} |
voidlightUpEven () { |
para sa (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, strip. Color (level , level , level )); |
} |
strip.show (); |
} |
tingnan ang rawplywoodClock.ino na naka-host sa ❤ ng GitHub
Hakbang 10: Paningin sa Computer - Pagkakalibrate
Gumawa ako ng isang may malay-tao na pagpipilian upang hindi gumamit ng pakitang-tao sa proyektong ito. Kung mayroon ako, ang kapal ng kahoy ay magiging pareho sa harap ng lahat ng mga LED. Ngunit, dahil mayroon akong iba't ibang kapal ng kahoy sa harap ng bawat LED at dahil ang kulay ng kahoy ay nag-iiba rin, ang ilaw ng LED ay naiiba para sa bawat LED. Upang gawin ang lahat ng mga LED na tila magkaparehong ningning, gumawa ako ng isang magandang trick.
Sumulat ako ng ilang processing code (sa GitHub) na kumukuha ng larawan ng orasan, at pinag-aaralan ang ningning ng bawat LED. Pagkatapos ay nag-iiba ang kapangyarihan sa bawat LED upang subukang makuha silang lahat na magkaroon ng parehong ningning tulad ng pinaka-dimmest na LED. Ngayon, alam kong labis na itong labis, ngunit ang pagproseso ng imahe ay nakakatuwa! At, inaasahan kong mabuo ang code ng pagkakalibrate bilang isang silid-aklatan.
Maaari mong makita ang LED brightness bago at pagkatapos ng pagkakalibrate sa mga larawan sa itaas.
calibrateDispllay.pde
importprocessing.video. *; |
importprocessing.serial. *; |
Serial myPort; |
Pagkuha ng video; |
finalint numLed = 24; |
int ledNum = 0; |
// dapat mayroon kang mga pandaigdigan na varable na ito upang magamit ang PxPGetPixelDark () |
int rDark, gDark, bDark, aDark; |
int rLed, gLed, bLed, aLed; |
int rOrg, gOrg, bOrg, aOrg; |
int rTemp, gTemp, bTemp, aTemp; |
I-PImage ang amingImage; |
int runNumber = 0; |
int acceptError = 3; |
int tapos na; |
int numPixelsInLed; |
mahaba ledIntensity; |
int ledPower; |
mahabang targetIntensity = 99999999; |
voidsetup () { |
tapos = newint [numLed]; |
numPixelsInLed = newint [numLed]; |
ledIntensity = newlong [numLed]; |
ledPower = newint [numLed]; |
para sa (int i = 0; i <numLed; i ++) { |
ledPower = 255; |
} |
printArray (Serial.list ()); |
String portName = Serial.list () [31]; |
myPort = newSerial (ito, portName, 9600); |
laki (640, 480); |
video = newCapture (ito, lapad, taas); |
video.start (); |
noStroke (); |
makinis (); |
pagkaantala (1000); // Hintaying magbukas ang serial port |
} |
voiddraw () { |
kung (video.available ()) { |
kung (tapos [ledNum] == 0) { |
clearDisplay (); |
pagkaantala (1000); |
video.read (); |
imahe (video, 0, 0, lapad, taas); // Iguhit ang video ng webcam sa screen |
saveFrame ("data / no_leds.jpg"); |
kung (runNumber! = 0) { |
kung ((ledIntensity [ledNum] - targetIntensity) * 100 / targetIntensity> katanggap-tanggap na Error) { |
ledPower [ledNum] - = pow (0.75, runNumber) * 100 + 1; |
} |
kung ((targetIntensity - ledIntensity [ledNum]) * 100 / targetIntensity> katanggap-tanggap na Error) { |
ledPower [ledNum] + = pow (0.75, runNumber) * 100 + 1; |
} |
kung (abs (targetIntensity - ledIntensity [ledNum]) * 100 / targetIntensity <= acceptError) { |
tapos na [ledNum] = 1; |
i-print ("Led"); |
i-print (ledNum); |
i-print ("tapos"); |
} |
kung (ledPower [ledNum]> 255) { |
ledPower [ledNum] = 255; |
} |
kung (ledPower [ledNum] <0) { |
ledPower [ledNum] = 0; |
} |
} |
setLedPower (ledNum, ledPower [ledNum]); |
pagkaantala (1000); |
video.read (); |
imahe (video, 0, 0, lapad, taas); // Iguhit ang video ng webcam sa screen |
antala (10); |
habang (myPort.available ()> 0) { |
int inByte = myPort.read (); |
// print (char (inByte)); |
} |
String imageName = "data /"; |
imageName + = str (ledNum); |
imageName + = "_ led.jpg"; |
saveFrame (imageName); |
String originalImageName = "data / org"; |
originalImageName + = str (ledNum); |
originalImageName + = ". jpg"; |
kung (runNumber == 0) { |
saveFrame (originalImageName); |
} |
PImage noLedImg = loadImage ("data / no_leds.jpg"); |
PImage ledImg = loadImage (imageName); |
Orihinal na PImageImg = loadImage (originalImageName); |
noLedImg.loadPixels (); |
ledImg.loadPixels (); |
orihinalImg.loadPixels (); |
background (0); |
loadPixels (); |
ledIntensity [ledNum] = 0; |
numPixelsInLed [ledNum] = 0; |
para sa (int x = 0; x <lapad; x ++) { |
para sa (int y = 0; y <taas; y ++) { |
PxPGetPixelDark (x, y, noLedImg.pixels, lapad); |
PxPGetPixelLed (x, y, ledImg.pixels, lapad); |
PxPGetPixelOrg (x, y, originalImg.pixels, lapad); |
kung ((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] ++; |
} iba pa { |
rTemp = 0; |
gTemp = 0; |
bTemp = 0; |
} |
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, mga pixel, lapad); |
} |
} |
ledIntensity [ledNum] / = numPixelsInLed [ledNum]; |
kung (targetIntensity> ledIntensity [ledNum] && runNumber == 0) { |
targetIntensity = ledIntensity [ledNum]; |
} |
updatePixels (); |
} |
i-print (ledNum); |
i-print (','); |
i-print (ledPower [ledNum]); |
i-print (','); |
println (ledIntensity [ledNum]); |
ledNum ++; |
kung (ledNum == numLed) { |
int taposzo = 0; |
para sa (int i = 0; i <numLed; i ++) { |
tapos na + = tapos na ; |
} |
kung (taposzo == numLed) { |
println ("TAPOS"); |
para sa (int i = 0; i <numLed; i ++) { |
i-print (i); |
i-print ("\ t"); |
println (ledPower ); |
} |
i-print ("int level ["); |
i-print (ledNum); |
i-print ("] = {"); |
para sa (int i = 0; i <numLed-1; i ++) { |
i-print (ledPower ); |
i-print (','); |
} |
i-print (ledPower [numLed -1]); |
println ("};"); |
lightUpEven (); |
habang (totoo); |
} |
i-print ("Target na intensity:"); |
kung (runNumber == 0) { |
targetIntensity - = 1; |
} |
println (targetIntensity); |
ledNum = 0; |
runNumber ++; |
} |
} |
} |
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x + y * pixelWidth]; // pagkuha ng mga kulay bilang isang int mula sa mga pixel |
aOrg = (thisPixel >> 24) & 0xFF; // kailangan naming maglipat at mag-mask upang mag-isa ang bawat sangkap |
rOrg = (thisPixel >> 16) & 0xFF; // mas mabilis ito kaysa sa pagtawag sa pula (), berde (), asul () |
gOrg = (thisPixel >> 8) & 0xFF; |
bOrg = thisPixel & 0xFF; |
} |
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x + y * pixelWidth]; // pagkuha ng mga kulay bilang isang int mula sa mga pixel |
aDark = (thisPixel >> 24) & 0xFF; // kailangan naming maglipat at mag-mask upang mag-isa ang bawat sangkap |
rDark = (thisPixel >> 16) & 0xFF; // mas mabilis ito kaysa sa pagtawag sa pula (), berde (), asul () |
gDark = (thisPixel >> 8) & 0xFF; |
bDark = thisPixel & 0xFF; |
} |
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x + y * pixelWidth]; // pagkuha ng mga kulay bilang isang int mula sa mga pixel |
aLed = (thisPixel >> 24) & 0xFF; // kailangan naming maglipat at mag-mask upang mag-isa ang bawat sangkap |
rLed = (thisPixel >> 16) & 0xFF; // mas mabilis ito kaysa sa pagtawag sa pula (), berde (), asul () |
gLed = (thisPixel >> 8) & 0xFF; |
bLed = thisPixel & 0xFF; |
} |
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) { |
a = (isang << 24); |
r = r << 16; // Kami ay naka-pack ang lahat ng 4 na mga bahagi sa isang int |
g = g << 8; // kaya kailangan nating ilipat ang mga ito sa kanilang mga lugar |
kulay argb = a | r | g | b; // binary "o" operasyon ay nagdaragdag sa kanilang lahat sa isang int |
pixelArray [x + y * pixelWidth] = argb; // finaly itinakda namin ang int na may mga kulay sa mga pixel |
} |
tingnan ang rawcalibrateDispllay.pde na naka-host sa ❤ ng GitHub
Hakbang 11: Mga Pamamagitan ng Paghiwalay
Mga pitfalls upang maiwasan:
* Sa kahoy, makukuha mo ang binabayaran mo. Kaya, kumuha ng mahusay na de-kalidad na kahoy. Ang Birch playwud ay isang mahusay na pagpipilian; ang anumang magaan na solidong kahoy ay magagawa din nang maayos. Nag-mura ako sa kahoy at pinagsisisihan ang aking pasya.
* Mas mahusay na mag-drill ng mas mababa sa higit pa. Ang isang pares ng mga butas ay napakalalim para sa aking piraso. At ang epoxy ay ipinapakita sa harapan. Kapansin-pansin ito kapag napansin mo ito.
* Gumamit ng isang ball end drill bit sa halip na isang tuwid na dulo. Hindi ako nag-eksperimento sa ball end bit, ngunit sigurado akong ang mga resulta ay magiging mas mahusay.
Nanliligaw ako sa ideya ng pagbebenta ng mga ito sa Etsy o tindie. Talagang pinahahalagahan ko ito kung maaari kang magkomento sa ibaba kung sa palagay mo may katuturan:)
Inirerekumendang:
LED Lighted Wooden Wedding Clock: 8 Hakbang (na may Mga Larawan)
LED Lighted Wooden Wedding Clock: Sinimulan ko ang proyektong ito upang makagawa ng isang natatanging, isa sa isang uri ng Clock sa Kasal para sa aking Kapatid at Bayaw. Nais na gumawa ng isang bagay na maaari silang magkaroon ng ilaw at ipakita ang ilang aspeto ng kanilang araw ng kasal sa mahabang panahon. Nagpunta sa maraming mga disenyo
Wooden LED Clock: 5 Hakbang (na may Mga Larawan)
Wooden LED Clock: Ang kahoy na LED na orasan ay mukhang isang nakakainip na kahon na gawa sa kahoy na may pagbubukod na ang oras ay kumikinang sa harap nito. Sa halip na isang tipak ng kulay-abong plastik ang titingnan, mayroon kang isang mas masarap na piraso ng kahoy. Pinapanatili pa rin nito ang lahat ng mga pagpapaandar nito, kabilang ang
C51 4 Bits Electronic Clock - Wooden Clock: 15 Hakbang (na may Mga Larawan)
C51 4 Bits Electronic Clock - Wooden Clock: Nagkaroon ng ekstrang oras sa katapusan ng linggo kaya't nagpatuloy at binuo ang AU $ 2.40 4-Bits DIY Electronic Digital Clock na binili ko mula sa AliExpress kanina pa
"Wooden" Desktop Clock * Modern Hinahanap *: 9 Mga Hakbang (na may Mga Larawan)
"Wooden" Desktop Clock * Modern Hinahanap *: Kumusta ang lahat, ito ang aking pangalawang maaaring turuan! Sa oras na ito ay magtatayo kami ng isang kahoy na orasan na may temperatura at pagpapakita ng halumigmig. Tulad ng ipinakita sa larawan, ang aming oras ay ipapakita sa pamamagitan ng " kahoy ". Dahil ang ilaw ay hindi malakas na enoug
Wooden Gear Clock: 9 Mga Hakbang (na may Mga Larawan)
Wooden Gear Clock: Nagdagdag ako ng video ng orasan. Nagtatrabaho ako sa pag-ukit ng mga bintana sa harap ng orasan. Mag-a-upload ako ng mga larawan at / o isang video niyan kapag natapos na ako. Ilang taon na ako sa paggawa ng kahoy. Gustung-gusto ko ang ideya ng kakayahang gumawa ng