Talaan ng mga Nilalaman:

Wooden LED Clock - Estilo ng Analog: 11 Hakbang (na may Mga Larawan)
Wooden LED Clock - Estilo ng Analog: 11 Hakbang (na may Mga Larawan)

Video: Wooden LED Clock - Estilo ng Analog: 11 Hakbang (na may Mga Larawan)

Video: Wooden LED Clock - Estilo ng Analog: 11 Hakbang (na may Mga Larawan)
Video: On the traces of an Ancient Civilization? 🗿 What if we have been mistaken on our past? 2024, Hulyo
Anonim
Wooden LED Clock - Istilo ng Analog
Wooden LED Clock - Istilo ng Analog

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:

Larawan
Larawan
Larawan
Larawan

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

Disenyo
Disenyo
Disenyo
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

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
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

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
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

Assembly ng Elektronika
Assembly ng Elektronika
Assembly ng Elektronika
Assembly ng Elektronika
Assembly ng Elektronika
Assembly ng Elektronika
Assembly ng Elektronika
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

Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin
Patuyo na Patakbuhin

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

Epoxy
Epoxy
Epoxy
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

Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
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

Code
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

Paningin sa Computer - Pagkakalibrate
Paningin sa Computer - Pagkakalibrate
Paningin sa Computer - Pagkakalibrate
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: