İçindekiler:
- Aşama 1:
- 2. Adım: Tasarım
- Adım 3: CNC İşleme
- Adım 4: Elektronik
- Adım 5: Elektronik Montaj
- Adım 6: Kuru Çalıştırma
- Adım 7: Epoksi
- 8. Adım: Hepsini Bir Araya Getirmek
- 9. Adım: Kod
- Adım 10: Bilgisayarla Görü - Kalibrasyon
- Adım 11: Ayrılık Açıklamaları
Video: Ahşap LED Saat - Analog Stil: 11 Adım (Resimli)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Analog tarzda ahşap bir LED saattir. Bunlardan birini neden daha önce görmediğimi bilmiyorum.. Dijital türleri çok yaygın olmasına rağmen. Her neyse, işte başlıyoruz!
Aşama 1:
Kontrplak saat projesi, CNC router için basit bir başlangıç projesi olarak başladı. Çevrimiçi basit projelere bakıyordum ve bu lambayı buldum (yukarıdaki resim). Ayrıca ahşap kaplamadan parlayan dijital saatler de görmüştüm (yukarıdaki resim). Dolayısıyla, iki projeyi birleştirmek bariz bir fikirdi. Kendime meydan okumak için bu proje için kaplama değil, sadece bir tahta parçası kullanmaya karar verdim.
2. Adım: Tasarım
Saati Inkscape'de tasarladım (yukarıdaki resim). Tasarım seçime göre çok basittir. Kablolar için yönlendirme izlerine karşı karar verdim çünkü bu noktada radyal kabloyla mı yoksa çevresel kabloyla mı gitmek istediğimden emin değildim. (Sonunda çevresel kablolamaya karar verdim.) Dakika ve saat zamanını beş dakikalık hassasiyetle göstermek için küçük dairesel deliklerin her birine bir neopiksel giriyor. Ortadaki daire, elektroniği yerleştirmek için yönlendirilecektir.
Adım 3: CNC İşleme
Takım yollarını MasterCAM üzerinde tasarladım ve saati 3/4 inç kontrplaktan frezelemek için bir technoRouter kullandım. Bunun için minimum israfla 15"x15"lik bir parça kullanıyorum. İşin püf noktası, ahşabı kırmadan mümkün olduğu kadar ahşabı yönlendirmektir. 0.05"-0.1" bırakmak, hafif ahşap için iyi bir seçimdir. Emin değilseniz, daha fazla odun bırakmak daha iyidir, çünkü diğer yüzü her zaman zımparalayabilirsiniz. Sonunda bazı kısımlardan biraz fazla odun çıkardım, ama şükürler olsun ki sonuçlar bundan dolayı çok fazla acı çekmiyor.
CNC'ye erişimi olmayan kullanıcılar için not:
Bu proje bir matkap ile kolayca yapılabilir. Durdurma noktasını, tabanda yaklaşık 0,1 inçlik ahşabın kaldığı bir noktaya ayarlamanız yeterlidir. Kesin olmanız gerekir, ancak çok hassas değil. Sonuçta, ideal olarak hiç kimse tüm LED'lerin yandığını görmez. aynı zamanda, böylece küçük bir eğimle kurtulabilirsiniz.
Adım 4: Elektronik
Elektronik oldukça basittir. Beş dakikalık hassasiyetle saatleri göstermek için on iki ve dakikaları göstermek için on iki olmak üzere 24 neopiksel vardır. Bir Arduino pro mini, neopikselleri kontrol eder ve bir DS3231 gerçek zamanlı saat (RTC) modülü aracılığıyla doğru zamanı alır. RTC modülü yedek olarak bir madeni para hücresine sahiptir, bu nedenle güç kapalıyken bile zaman kaybetmez.
Malzeme:
Arduino pro mini (veya bu konuda başka herhangi bir Arduino)
DS3231 koparma kartı
Bireysel koparma panolarında neopikseller
Adım 5: Elektronik Montaj
Neopikselleri ilk on iki led için 2,5 kablo ve sonraki on iki led için dört inç kablo kullanarak bir diziye bağladım. Biraz daha küçük kablo uzunlukları kullanabilirdim. Dizeyi yaptıktan sonra, lehimin doğru olduğundan emin olarak test ettim. Eklemler iyiydi, tüm ledleri yakmak için bir anlık anahtar ekledim, gösteriş olsun diye.
Adım 6: Kuru Çalıştırma
Denedikten, LED'leri deliklere yerleştirdikten ve hepsini açtıktan sonra sonuçlardan memnun kaldım. Bu yüzden ön yüzü biraz zımparaladım ve bir PU kat uyguladım. Paltoyu daha sonra zımparaladım, ancak estetik olarak hoşunuza gitmediyse, açık bırakmak iyi bir fikirdir.
Adım 7: Epoksi
Deliklerin içindeki led konumu ile bazı testler yaptıktan sonra, en iyi tartışmanın LED'ler deliğin ucundan yaklaşık 0,2 uzakta olduğunda elde edildiğini düşündüm. Bunu kendiniz denediğinizde, LED'lerin parlaklığı çok farklı olacaktır. Her delik için endişelenmeyin, kodda düzelteceğiz. Bu, kullandığım matkap ucunun türünden kaynaklanıyor. Bunu tekrar yapsaydım, delikler için bir bilye uçlu matkap kullanırdım. Ama her durumda, mesafeyi elde etmek için biraz epoksi karıştırdım ve her deliğe biraz koydum.
8. Adım: Hepsini Bir Araya Getirmek
LED'ler, tüm akrep pozisyonları boyunca saat yönünün tersine hareket eden saat 12 akrep pozisyonundan başlayarak ve daha sonra yelkovana, yine saat yönünün tersine hareket eden 60 dakika işaretinden hareket ederek yerleştirilecektir. Bu, önden baktığımızda LED deseninin saat yönünde ilerlediğini görünecek şekildedir.
Epoksi bir saat kürlendikten sonra biraz daha epoksi koydum. Bu sefer LED'leri deliklere yerleştirdim, telleri ve lehim bağlantılarını epoksi ile kapladığından emin oldum. Bu, iyi bir ışık yayılımı sağlar ve kabloları sabitler.
9. Adım: Kod
Kod GitHub'da, kullanımınız için değiştirmekten çekinmeyin. Tüm LED'leri aynı seviyeye getirdiğinizde, her delikten parlayan ışığın parlaklığı çok farklı olacaktır. Bunun nedeni, deliklerdeki ahşabın farklı kalınlıkları ve ahşabın gölgesindeki farklılıktır, Gördüğünüz gibi ahşabın rengi benim parçamda biraz değişiyor. Parlaklıktaki bu farkı gidermek için bir led parlaklık seviyeleri matrisi yaptım. Ve daha parlak LED'lerin parlaklığını azalttı. Bu bir deneme yanılma sürecidir ve birkaç dakika sürebilir, ancak sonuçlar buna değer.
kontrplakClock.ino
// Kontrplak Saat |
// Yazar: tinkrmind |
// Atıf 4.0 Uluslararası (CC BY 4.0). Şunları yapmakta özgürsünüz: |
// Paylaş - materyali herhangi bir ortamda veya biçimde kopyalayın ve yeniden dağıtın |
// Uyarla - ticari olarak bile olsa herhangi bir amaç için malzemeyi yeniden karıştırın, dönüştürün ve üzerine inşa edin. |
// Yaşasın! |
#Dahil etmek |
#include"RTClib.h" |
RTC_DS3231 rtc; |
#include"Adafruit_NeoPixel.h" |
#ifdef _AVR_ |
#Dahil etmek |
#endif |
#definePIN6 |
Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); |
int saatPiksel = 0; |
int dakikaPiksel = 0; |
imzasız uzun lastRtcCheck; |
String inputString = ""; // gelen verileri tutacak bir dize |
boolean stringComplete = false; // dizenin tamamlanıp tamamlanmadığı |
int seviye[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}; |
geçersiz kurulum () { |
#ifndef ESP8266 |
while (!Seri); // Leonardo/Mikro/Sıfır için |
#endif |
// Bu Biblo 5V 16MHz içindir, Biblo kullanmıyorsanız bu üç satırı kaldırabilirsiniz |
#if tanımlı (_AVR_ATtiny85_) |
if (F_CPU == 16000000) clock_prescale_set(clock_div_1); |
#endif |
// Biblo sonu özel kodu |
Seri.başla(9600); |
strip.begin(); |
şerit.göster(); // Tüm pikselleri 'kapalı' olarak başlat |
if (! rtc.begin()) { |
Serial.println("RTC bulunamadı"); |
iken (1); |
} |
pinMode(2, INPUT_PULLUP); |
// rtc.adjust(DateTime(F(_DATE_), F(_TIME_))); |
if (rtc.lostPower()) { |
Serial.println("RTC güç kaybetti, zamanı ayarlayalım!"); |
// aşağıdaki satır, RTC'yi bu çizimin derlendiği tarih ve saate ayarlar |
rtc.adjust(DateTime(F(_DATE_), F(_TIME_))); |
// Bu satır, RTC'yi açık bir tarih ve saatle ayarlar, örneğin |
// 21 Ocak 2014, saat 3'te arayacaksınız: |
// rtc.adjust(DateTime(2017, 11, 06, 2, 49, 0)); |
} |
// rtc.adjust(DateTime(2017, 11, 06, 2, 49, 0)); |
// lightUpEven(); |
// süre (1); |
lastRtcCheck = 0; |
} |
boşluk döngüsü () { |
if (millis() - lastRtcCheck >2000) { |
DateTime şimdi = rtc.now(); |
Seri.print(şimdi.saat(), Aralık); |
Seri.print(':'); |
Seri.print(şimdi.dakika(), Aralık); |
Seri.print(':'); |
Seri.print(şimdi.ikinci(), Aralık); |
Seri.println(); |
gösteri zamanı(); |
lastRtcCheck = millis(); |
} |
if (!digitalRead(2)) { |
lightUpEven(); |
} |
if (stringComplete) { |
Serial.println(inputString); |
if (inputString[0] == 'l') { |
Serial.println("Seviye"); |
lightUpEven(); |
} |
if (inputString[0] == 'c') { |
Serial.println("Zaman gösteriliyor"); |
gösteri zamanı(); |
şerit.göster(); |
} |
if (inputString[0] == '1') { |
Serial.println("Tüm LED'lerin Açılması"); |
lightUp(şerit. Renk(255, 255, 255); |
şerit.göster(); |
} |
if (inputString[0] == '0') { |
Serial.println("Temizleme şeridi"); |
açık(); |
şerit.göster(); |
} |
// #3, 255, led numarası 3'ü seviye 255, 255, 255'e ayarlar |
if (inputString[0] == '#') { |
dize sıcaklığı; |
temp = inputString.substring(1); |
int pixNum = temp.toInt(); |
temp = inputString.substring(inputString.indexOf(', ') + 1); |
int yoğunluk = temp.toInt(); |
Serial.print("Ayarlar"); |
Serial.print(pixNum); |
Serial.print("seviyeye"); |
Seri.println(yoğunluk); |
strip.setPixelColor(pixNum, strip. Color(yoğunluk, yoğunluk, yoğunluk)); |
şerit.göster(); |
} |
// #3, 255, 0, 125, led numarası 3'ü seviye 255, 0, 125'e ayarlar |
if (inputString[0] == '$') { |
dize sıcaklığı; |
temp = inputString.substring(1); |
int pixNum = temp.toInt(); |
int rIndex = inputString.indexOf(', ') + 1; |
temp = inputString.substring(rIndex); |
int rYoğunluk = 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 bYoğunluk = temp.toInt(); |
Serial.print("Ayarlar"); |
Serial.print(pixNum); |
Serial.print(" R'den "); |
Serial.print(rYoğunluk); |
Serial.print(" G'den "); |
Serial.print(gYoğunluk); |
Serial.print(" B'den "); |
Serial.println(bYoğunluk); |
strip.setPixelColor(pixNum, strip. Color(rYoğunluk, gYoğunluk, bYoğunluk)); |
şerit.göster(); |
} |
if (inputString[0] == 's') { |
dize sıcaklığı; |
int saat, dakika; |
temp = inputString.substring(1); |
saat = temp.toInt(); |
int rIndex = inputString.indexOf(', ') + 1; |
temp = inputString.substring(rIndex); |
dakika = temp.toInt(); |
Serial.print("Zaman gösteriliyor: "); |
Seri.baskı(saat); |
Seri.print(":"); |
Seri.baskı(dakika); |
showTime(saat, dakika); |
gecikme(1000); |
} |
inputString = ""; |
stringComplete = yanlış; |
} |
// gecikme(1000); |
} |
voidserialEvent() { |
while (Serial.available()) { |
char inChar = (char)Serial.read(); |
inputString += inChar; |
if (inChar == '\n') { |
stringComplete = doğru; |
} |
gecikme(1); |
} |
} |
voidclear() { |
for (uint16_t i = 0; i < strip.numPixels(); i++) { |
strip.setPixelColor(i, strip. Color(0, 0, 0)); |
} |
} |
voidshowTime() { |
DateTime şimdi = rtc.now(); |
saatPixel = şimdi.saat() % 12; |
dakikaPiksel = (şimdi.dakika() / 5) % 12 + 12; |
açık(); |
// strip.setPixelColor(hourPixel, strip. Color(40 + 40 * seviye[saatPixel], 30 + 30 * seviye[saatPixel], 20 + 20 * seviye[saatPixel])); |
// strip.setPixelColor(dakikaPixel, strip. Color(40 + 40 * seviye[dakikaPiksel], 30 + 30 * seviye[dakikaPiksel], 20 + 20 * seviye[dakikaPiksel])); |
strip.setPixelColor(hourPixel, strip. Color(level[hourPixel], level[hourPixel], level[hourPixel])); |
strip.setPixelColor(dakikaPixel, strip. Color(seviye[dakikaPixel], seviye[dakikaPixel], seviye[dakikaPixel])); |
// lightUp(şerit. Renk(255, 255, 255); |
şerit.göster(); |
} |
voidshowTime(int saat, int dakika) { |
saatPiksel = saat %12; |
dakikaPiksel = (dakika / 5) % 12 + 12; |
açık(); |
// strip.setPixelColor(hourPixel, strip. Color(40 + 40 * seviye[saatPixel], 30 + 30 * seviye[saatPixel], 20 + 20 * seviye[saatPixel])); |
// strip.setPixelColor(dakikaPixel, strip. Color(40 + 40 * seviye[dakikaPiksel], 30 + 30 * seviye[dakikaPiksel], 20 + 20 * seviye[dakikaPiksel])); |
strip.setPixelColor(hourPixel, strip. Color(level[hourPixel], level[hourPixel], level[hourPixel])); |
strip.setPixelColor(dakikaPixel, strip. Color(seviye[dakikaPixel], seviye[dakikaPixel], seviye[dakikaPixel])); |
// lightUp(şerit. Renk(255, 255, 255); |
şerit.göster(); |
} |
voidlightUp(uint32_t renk) { |
for (uint16_t i = 0; i < strip.numPixels(); i++) { |
strip.setPixelColor(i, renk); |
} |
şerit.göster(); |
} |
voidlightUpEven() { |
for (uint16_t i = 0; i < strip.numPixels(); i++) { |
strip.setPixelColor(i, strip. Color(seviye, seviye, seviye)); |
} |
şerit.göster(); |
} |
GitHub tarafından ❤ ile barındırılan rawplywoodClock.ino'yu görüntüle
Adım 10: Bilgisayarla Görü - Kalibrasyon
Bu projede kaplama kullanmamak için bilinçli bir seçim yaptım. Yapsaydım, ahşap kalınlığı tüm LED'lerin önünde aynı olurdu. Ancak, her LED'in önünde farklı bir ahşap kalınlığına sahip olduğumdan ve ahşap rengi de çok değiştiğinden, LED parlaklığı her LED için farklıdır. Tüm LED'lerin aynı parlaklıkta görünmesini sağlamak için şık bir numara geliştirdim.
Saatin fotoğrafını çeken ve sırayla her LED'in parlaklığını analiz eden bazı işlem kodları (GitHub'da) yazdım. Ardından, hepsinin en sönük LED ile aynı parlaklığa sahip olmasını sağlamak için her bir LED'in gücünü değiştirir. Bunun abartılı olduğunu biliyorum ama görüntü işleme çok eğlenceli! Ve kalibrasyon kodunu bir kütüphane olarak geliştirmeyi umuyorum.
Yukarıdaki fotoğraflarda kalibrasyon öncesi ve sonrası LED parlaklığını görebilirsiniz.
kalibreDisplay.pde
importprocessing.video.*; |
importprocessing.seri.*; |
Seri myPort; |
Video yakala; |
finalint numLed =24; |
int ledNum = 0; |
// PxPGetPixelDark()'ı kullanmak için bu global değişkenlere sahip olmalısınız |
int rDark, gDark, bDark, aDark; |
int rLed, gLed, bled, aLed; |
int rOrg, gOrg, bOrg, aOrg; |
int rTemp, gTemp, bTemp, aTemp; |
PImage ourImage; |
int runNumber =0; |
int kabul edilebilirHata =3; |
int yapıldı; |
int numPixelsInLed; |
uzun ledYoğunluk; |
int ledPower; |
uzun hedefYoğunluk =99999999; |
voidsetup() { |
done =yeniint[numLed]; |
numPixelsInLed =newint[numLed]; |
ledYoğunluk =yeniuzun[numLed]; |
ledPower =newint[numLed]; |
for (int i=0; i<numLed; i++) { |
ledGüç =255; |
} |
printArray(Serial.list()); |
String portName =Serial.list()[31]; |
myPort =newSerial(bu, portAdı, 9600); |
boyut(640, 480); |
video =newCapture(bu, genişlik, yükseklik); |
video.start(); |
noStroke(); |
düz(); |
gecikme(1000); // Seri portun açılmasını bekleyin |
} |
voiddraw() { |
if (video.available()) { |
if (done[ledNum] ==0) { |
clearDisplay(); |
gecikme(1000); |
video.read(); |
resim(video, 0, 0, genişlik, yükseklik); // Web kamerası videosunu ekrana çizin |
saveFrame("data/no_leds.jpg"); |
if (runNumber !=0) { |
if ((ledIntensity[ledNum] - targetIntensity)*100/targetIntensity > kabul edilebilirHata) { |
ledPower[ledNum] -=pow(0.75, runNumber)*100+1; |
} |
if ((targetIntensity - ledIntensity[ledNum])*100/targetIntensity > kabul edilebilirHata) { |
ledPower[ledNum] +=pow(0.75, runNumber)*100+1; |
} |
if (abs(targetIntensity - ledIntensity[ledNum])*100/targetIntensity <= kabul edilebilirHata) { |
bitti[ledNum] =1; |
print("Led"); |
print(ledNum); |
print("bitti"); |
} |
if (ledPower[ledNum] >255) { |
ledGüç[ledNum] =255; |
} |
if (ledPower[ledNum] <0) { |
ledPower[ledNum]=0; |
} |
} |
setLedPower(ledNum, ledPower[ledNum]); |
gecikme(1000); |
video.read(); |
resim(video, 0, 0, genişlik, yükseklik); // Web kamerası videosunu ekrana çizin |
gecikme(10); |
while (myPort.available() >0) { |
int inByte = myPort.read(); |
//print(char(inByte)); |
} |
String imageName ="veri/"; |
imageName+=str(ledNum); |
resimAdı +="_led.jpg"; |
saveFrame(imageName); |
String orijinalImageName ="veri/org"; |
orijinalImageName+=str(ledNum); |
orijinalResimAdı +=".jpg"; |
if (runNumber ==0) { |
saveFrame(orijinalResimAdı); |
} |
PImage noLedImg =loadImage("data/no_leds.jpg"); |
PImage ledImg =loadImage(imageName); |
PImage orijinalImg =loadImage(orijinalImageName); |
noLedImg.loadPixels(); |
ledImg.loadPixels(); |
orijinalImg.loadPixels(); |
arka plan (0); |
loadPixels(); |
ledYoğunluk[ledNum] =0; |
numPixelsInLed[ledNum] =0; |
for (int x =0; x<genişlik; x++) { |
for (int y =0; y<yükseklik; y++) { |
PxPGetPixelDark(x, y, noLedImg.pixels, genişlik); |
PxPGetPixelLed(x, y, ledImg.pixels, genişlik); |
PxPGetPixelOrg(x, y, orijinalImg.piksel, genişlik); |
if ((rOrg+gOrg/2+bOrg/3)-(rDark+gDark/2+bDark/3) >75) { |
ledYoğunluk[ledNum] = ledYoğunluk[ledNum] +(rLed+gLed/2+bLed/3) -(rDark+gDark/2+bDark/3); |
rSıcaklık=255; |
gSıcaklık=255; |
bSıcaklık=255; |
numPixelsInLed[ledNum]++; |
} Başka { |
rTemp=0; |
gTemp=0; |
bSıcaklık=0; |
} |
PxPSetPixel(x, y, rTemp, gTemp, bTemp, 255, piksel, genişlik); |
} |
} |
ledYoğunluk[ledNum] /= numPixelsInLed[ledNum]; |
if (targetIntensity > ledIntensity[ledNum] && runNumber ==0) { |
hedefYoğunluk = ledYoğunluk[ledNum]; |
} |
güncellemePixels(); |
} |
print(ledNum); |
Yazdır(', '); |
print(ledPower[ledNum]); |
Yazdır(', '); |
println(ledYoğunluk[ledNum]); |
ledNum++; |
if (ledNum == numLed) { |
int donzo =0; |
for (int i=0; i<numLed; i++) { |
donezo += bitti; |
} |
if (donezo == numLed) { |
println("BİTTİ"); |
for (int i=0; i<numLed; i++) { |
yazdır(i); |
yazdır("\t"); |
println(ledPower); |
} |
print("int seviye["); |
print(ledNum); |
print("] = {"); |
for (int i=0; i<numLed-1; i++) { |
print(ledPower); |
Yazdır(', '); |
} |
print(ledPower[numLed -1]); |
println("};"); |
lightUpEven(); |
while (doğru); |
} |
print("Hedef yoğunluk: "); |
if (runNumber ==0) { |
hedefYoğunluk -=1; |
} |
println(hedef Yoğunluk); |
ledNum =0; |
runNumber++; |
} |
} |
} |
voidPxPGetPixelOrg(intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel=pixelArray[x+y*pixelsWidth]; // renkleri piksellerden int olarak almak |
aOrg = (buPixel >>24) &0xFF; // her bileşeni tek başına almak için kaydırmamız ve maskelememiz gerekiyor |
rOrg = (buPixel >>16) &0xFF; // bu red(), green(), blue() çağırmaktan daha hızlıdır |
gOrg = (buPixel >>8) &0xFF; |
bOrg = buPixel &0xFF; |
} |
voidPxPGetPixelDark(intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel=pixelArray[x+y*pixelsWidth]; // renkleri piksellerden int olarak almak |
aDark = (buPixel >>24) &0xFF; // her bileşeni tek başına almak için kaydırmamız ve maskelememiz gerekiyor |
rDark = (buPixel >>16) &0xFF; // bu red(), green(), blue() çağırmaktan daha hızlıdır |
gDark = (bu Piksel >>8) &0xFF; |
bDark = thisPixel &0xFF; |
} |
voidPxPGetPixelLed(intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel=pixelArray[x+y*pixelsWidth]; // renkleri piksellerden int olarak almak |
aLed = (buPixel >>24) &0xFF; // her bileşeni tek başına almak için kaydırmamız ve maskelememiz gerekiyor |
rLed = (buPixel >>16) &0xFF; // bu red(), green(), blue() çağırmaktan daha hızlıdır |
gLed = (buPixel >>8) &0xFF; |
bLed = thisPixel &0xFF; |
} |
voidPxPSetPixel(intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) { |
bir =(a <<24); |
r = r <<16; // 4 bileşenin tümünü tek bir int'de paketliyoruz |
g = g <<8; // bu yüzden onları yerlerine kaydırmamız gerekiyor |
renk argb = bir | r | g | B; // ikili "veya" işlemi hepsini bir int'ye ekler |
pixelArray[x+y*pixelsWidth]= argb; // son olarak int'yi te renklerle piksellere ayarladık |
} |
GitHub tarafından ❤ ile barındırılan rawcalibrateDispllay.pde dosyasını görüntüleyin
Adım 11: Ayrılık Açıklamaları
Kaçınılması gereken tuzaklar:
* Ahşap ile ödediğinizin karşılığını alırsınız. Bu yüzden kaliteli ahşap alın. Huş kontrplak iyi bir seçimdir; herhangi bir hafif masif ahşap da güzel bir şekilde yapacaktır. Ahşabı ucuza aldım ve kararımdan pişman oldum.
* Daha az delmek, daha fazla delmekten daha iyidir. Birkaç delik benim parçam için fazla derine gitti. Ve epoksi ön yüzde kendini gösteriyor. Bunu fark ettiğinizde çok fark edilir.
* Düz uç yerine bilye uçlu matkap ucu kullanın. Top ucu ile deneme yapmadım ama sonuçların çok daha iyi olacağına eminim.
Bunları Etsy'de veya tindie'de satma fikriyle flört ediyorum. Mantıklı olduğunu düşünüyorsanız aşağıya yorum yaparsanız çok sevinirim:)
Önerilen:
Ahşap LED Saat: 5 Adım (Resimli)
Ahşap LED Saat: Ahşap LED saat, zamanın önünden parlıyor olması dışında sıkıcı bir ahşap kutuya benziyor. Bakmak için bir gri plastik parçası yerine, daha güzel bir tahta parçasına sahipsiniz. Dahil olmak üzere tüm işlevlerini hala korur
Saat, Amplifikatör ve Az Miktar Ahşap: 6 Adım (Resimli)
Saat, Amplifikatör ve Az Miktarda Odun…: Projenin başlangıcı bir fikirden geldi, internette "Bir şeyler yapmayı seviyorum" adlı YouTube kanalında yayınlanan bir videodan ilham aldı… bir saat, dijital bir ana bilgisayar barındıran monitörlerimden biri için bir stand yapmam gerekiyor
C51 4 Bit Elektronik Saat - Ahşap Saat: 15 Adım (Resimli)
C51 4 Bit Elektronik Saat - Ahşap Saat: Bu hafta sonu biraz boş vaktim vardı, bu yüzden bir süre önce AliExpress'ten satın aldığım bu 2,40 AU$'lık 4 Bit DIY Elektronik Dijital Saati monte ettim
Ahşap Jaluzi Nixie Saat Aka Sara'nın Küçük Kızkardeşi: 7 Adım (Resimli)
Ahşap Jaluzi Nixie Clock Aka Sara'nın Küçük Kızkardeşi: Geçenlerde, kullanmayı planladığım pencerelere sığmayacak kadar büyük, ikinci el ahşap jaluziler aldım. Onları dikkatli bir şekilde yeniden yapılandırdıktan sonra, bir sürü kesilmiş bölümle baş başa kaldım ve onları gelecekteki bir dönem için sakladım
Masif Ahşap Dijital Saat: 11 Adım (Resimli)
Masif Ahşap Dijital Saat: Dahili alarmı ve oyunları olan bir atmega168 (arduino) tarafından desteklenen ahşap bir dijital saat nasıl yapılır. Ahşap kaplama ile kaplanmış bir LED saat gördüğümde bunu yapmayı düşündüm. Fiyatını görene kadar görünce beğenmiştim. İşte bu