Mundarija:
- 1 -qadam:
- 2 -qadam: Dizayn
- 3 -qadam: CNCing
- 4 -qadam: elektronika
- 5 -qadam: elektronika yig'ilishi
- 6 -qadam: Quruq yugurish
- 7 -qadam: Epoksi
- 8 -qadam: Hammasini bir joyga to'plash
- 9 -qadam: kod
- 10 -qadam: Kompyuterni ko'rish - kalibrlash
- 11 -qadam: ajralish haqida izohlar
Video: Yog'ochli LED soat - Analog uslub: 11 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:28
Bu analog uslubdagi yog'ochdan yasalgan LED soat. Men bilmayman, nega men bunlardan birini ko'rmaganman … raqamli turlar juda keng tarqalgan bo'lsa ham. Yaxshiyamki, keldik!
1 -qadam:
Kontrplak soati loyihasi CNC router uchun oddiy boshlang'ich loyiha sifatida boshlandi. Men Internetda oddiy loyihalarni ko'rib chiqdim va bu chiroqni topdim (yuqoridagi rasm). Men, shuningdek, yog'ochdan yasalgan shpondan yaltirab turgan raqamli soatlarni ham ko'rganman (yuqoridagi rasm). Shunday qilib, ikkita loyihani birlashtirish aniq g'oya edi. Men o'zimni shubha ostiga qo'ymoqchi bo'ldim, bu loyiha uchun shpon emas, balki faqat yog'och bo'lagidan foydalanishga qaror qildim.
2 -qadam: Dizayn
Men soatni Inkscape -da yaratdim (yuqoridagi rasm). Tanlash bo'yicha dizayn juda oddiy. Men simlarning izlarini yo'naltirmaslikka qaror qildim, chunki bu vaqtda men radial yoki perimetrli simlar bilan borishni xohlamadim. (Men nihoyat perimetrli simlar bilan borishga qaror qildim.) Har birida bitta dumaloq teshikning har birida bir daqiqali va soatlik vaqtni ko'rsatish uchun bitta neopiksel bor, besh daqiqali aniqlik bilan. O'rtadagi aylana elektronikani joylashtirish uchun yo'naltiriladi.
3 -qadam: CNCing
Men MasterCAM -da asboblar yo'llarini ishlab chiqdim va 3/4 dyuymli kontrplakdan soatni ajratish uchun technoRouter -dan foydalandim. Buning uchun men 15 "x15" bo'lagidan foydalanaman, minimal isrofgarchilik bilan. Hiyla - o'tinni kesib o'tmasdan, iloji boricha ko'proq yog'ochni tashqariga chiqarish. 0,05 "-0,1" qoldirish engil yog'och uchun yaxshi tanlovdir. Agar ishonchingiz komil bo'lmasa, yog'ochni ko'proq qoldiring, chunki siz har doim boshqa yuzni zımparalashingiz mumkin. Men oxir -oqibat ba'zi qismlardan juda ko'p yog'ochni olib tashladim, lekin shukurki, natijalar juda ko'p zarar ko'rmaydi.
CNC -ga ulanmagan foydalanuvchilar uchun eslatma:
Ushbu loyihani matkap yordamida oson bajarish mumkin. Siz faqat to'xtash joyini 0,1 dyuymli yog'och qoldirib ketadigan joyga qo'yishingiz kerak. Siz aniq bo'lishingiz kerak, lekin unchalik aniq emas. Axir, hech kim barcha LEDlarning yonishini ko'rmaydi. bir vaqtning o'zida, shuning uchun siz ozgina qiyalik bilan qochishingiz mumkin.
4 -qadam: elektronika
Elektronika juda oddiy. Besh daqiqali aniqlik bilan 24 ta neopiksel, soatni ko'rsatish uchun o'n ikkita va daqiqalarni ko'rsatish uchun o'n ikkita. Arduino pro mini neopixellarni boshqaradi va aniq vaqtni DS3231 real vaqtda soat (RTC) moduli orqali oladi. RTC moduli zaxira sifatida tanga uyasiga ega, shuning uchun elektr quvvati o'chirilgan bo'lsa ham vaqt yo'qotmaydi.
Materiallar:
Arduino pro mini (yoki boshqa Arduino)
DS3231 uzilish taxtasi
Shaxsiy taxtalarda neopiksellar
5 -qadam: elektronika yig'ilishi
Men neopixellarni sim bilan bog'ladim, birinchi o'n ikkita led uchun 2,5 dyuymli simlar va keyingi o'n ikkita uchun to'rt dyuymli simlardan foydalanishim mumkin edi. Men biroz kichikroq sim uzunliklaridan foydalanishim mumkin edi. Ipni yasab bo'lgach, men uni sinab ko'rdim va lehimga ishonch hosil qildim. bo'g'inlar yaxshi edi. Men hamma chiroqlarni yoqish uchun bir lahzali kalitni qo'shdim, faqat ko'rsatish uchun.
6 -qadam: Quruq yugurish
Tajribadan so'ng, LEDlarni teshiklarga qo'yib, hammasini yoqgandan so'ng, natijalardan qoniqdim. Shunday qilib, men old yuzni biroz zımparaladim va poliuretan po'stini qo'lladim. Oxir -oqibat men paltoni silamoqchi bo'ldim, lekin agar siz uni estetik nuqtai nazardan yoqtirmasangiz, uni qoldirganingiz ma'qul.
7 -qadam: Epoksi
Teshiklar ichidagi etakchi pozitsiyani sinab ko'rganimdan so'ng, menimcha, LEDlar teshik oxiridan 0,2 dyuym masofada bo'lsa, eng yaxshi munozaraga erishish mumkin. Buni o'zingiz sinab ko'rganingizda, LEDlarning yorqinligi juda boshqacha bo'ladi. Har bir teshik. Bu haqda xavotir olmang, biz buni kodda tuzatamiz. Bu men ishlatgan matkap turiga bog'liq. Agar men yana shunday qilsam, men teshiklar uchun burg'ulash uchidan foydalanardim. Lekin, har holda, masofani olish uchun men epoksi aralashtirib, har bir teshikka ozgina qo'ydim.
8 -qadam: Hammasini bir joyga to'plash
LEDlar soat yo'nalishi bo'yicha soat sohasi farqli o'laroq, soat yo'nalishi bo'yicha, soat yo'nalishi bo'yicha, keyin soat yo'nalishi bo'yicha, soat yo'nalishi bo'yicha, 60-daqiqali belgidan o'tadi. Shunday qilib, biz old tomondan qaraganimizda, LED chizig'i soat yo'nalishi bo'yicha aylanadi.
Epoksi bir soat quriganidan so'ng, men yana epoksi qo'ydim. Bu safar men LEDlarni teshiklarga joylashtirdim, simlar va lehim bo'g'inlarini epoksi bilan yopganimga ishonch hosil qildim. Bu yaxshi yorug'lik tarqalishini ta'minlaydi va simlarni mustahkamlaydi.
9 -qadam: kod
Kod GitHub -da, uni ishlatish uchun o'zgartirishingiz mumkin. Agar siz barcha LEDlarni bir xil darajaga qo'ysangiz, yorug'lik porlashi har bir teshikda juda farq qiladi. Buning sababi shundaki, teshiklardagi yog'ochning har xil qalinligi va soyaning farqi, Ko'rib turganingizdek, yog'ochning rangi mening qismimda bir oz farq qiladi. Yorqinlikdagi bu farqni bartaraf etish uchun men yorug'lik yorqinligi darajasining matritsasini tuzdim. Va yorqinroq LEDlarning yorqinligi pasayadi. Bu sinov va xato jarayoni va bir necha daqiqa vaqt olishi mumkin, lekin natijalar bunga arziydi.
jahongir
// Kontrplak soati |
// Muallif: tinkrmind |
// Attribution 4.0 International (CC BY 4.0). Siz erkinsiz: |
// Ulashish - materialni istalgan muhitda yoki formatda nusxalash va qayta tarqatish |
// Moslashtiring - materialni har qanday maqsadda, hatto tijorat maqsadlarida ham qayta tuzing, o'zgartiring va asoslang. |
// Ura! |
#qo'shing |
#"RTClib.h" ni qo'shing |
RTC_DS3231 rtc; |
#"Adafruit_NeoPixel.h" ni qo'shing |
#ifdef _AVR_ |
#qo'shing |
#endif |
#PINP6 belgilang |
Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800); |
int hourPixel = 0; |
int daqiqaPixel = 0; |
unsignedlong lastRtcCheck; |
String inputString = ""; // kiruvchi ma'lumotlarni saqlash uchun qator |
boolean stringComplete = false; // satr tugallanganmi |
int darajasi [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 |
while (! Seriyali); // Leonardo/Micro/Zero uchun |
#endif |
// Bu Trinket 5V 16MHz uchun, agar siz Trinketdan foydalanmasangiz, ushbu uchta qatorni olib tashlashingiz mumkin. |
#if aniqlangan (_AVR_ATtiny85_) |
agar (F_CPU == 16000000) clock_prescale_set (clock_div_1); |
#endif |
// Trinketning maxsus kodining oxiri |
Serial.begin (9600); |
strip.begin (); |
strip.show (); // Barcha piksellarni o'chirib qo'ying |
agar (! rtc.begin ()) { |
Serial.println ("RTC topilmadi"); |
vaqt (1); |
} |
pinMod (2, INPUT_PULLUP); |
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))))); |
agar (rtc.lostPower ()) { |
Serial.println ("RTC kuchini yo'qotdi, vaqtni belgilashga ruxsat bering!"); |
// keyingi satrda RTC bu eskiz tuzilgan sana va vaqtga o'rnatiladi |
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))); |
// Bu satr RTCni aniq sana va vaqt bilan belgilaydi, masalan o'rnatish uchun |
// 2014 yil 21 -yanvar, soat 03:00 da siz qo'ng'iroq qilardingiz: |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
} |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
// lightUpEven (); |
// vaqt (1); |
lastRtcCheck = 0; |
} |
voidloop () { |
if (millis () - lastRtcCheck> 2000) { |
DateTime now = rtc.now (); |
Serial.print (hozir.soat (), DEC); |
Serial.print (':'); |
Serial.print (now.minute (), DEC); |
Serial.print (':'); |
Serial.print (hozir.sekund (), DEC); |
Serial.println (); |
vaqtni ko'rsat(); |
lastRtcCheck = millis (); |
} |
agar (! digitalRead (2)) { |
lightUpEven (); |
} |
if (stringComplete) { |
Serial.println (inputString); |
if (inputString [0] == 'l') { |
Serial.println ("Daraja"); |
lightUpEven (); |
} |
if (inputString [0] == 'c') { |
Serial.println ("Vaqt ko'rsatiladi"); |
vaqtni ko'rsat(); |
strip.show (); |
} |
if (inputString [0] == '1') { |
Serial.println ("Barcha LEDlarni yoqish"); |
lightUp (tasma. Rang (255, 255, 255)); |
strip.show (); |
} |
if (inputString [0] == '0') { |
Serial.println ("Tozalash chizig'i"); |
aniq (); |
strip.show (); |
} |
// #3, 255 raqamli 3 -raqamni 255, 255, 255 darajaga o'rnatadi |
if (inputString [0] == '#') { |
String harorati; |
temp = inputString.substring (1); |
int pixNum = temp.toInt (); |
temp = inputString.substring (inputString.indexOf (',') + 1); |
int intensivligi = temp.toInt (); |
Serial.print ("sozlash"); |
Serial.print (pixNum); |
Serial.print ("darajaga"); |
Serial.println (intensivlik); |
strip.setPixelColor (pixNum, strip. Color (intensivlik, intensivlik, intensivlik)); |
strip.show (); |
} |
// #3, 255, 0, 125 3 -sonli raqamni 255, 0, 125 darajaga o'rnatadi |
agar (inputString [0] == '$') { |
String harorati; |
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 ("sozlash"); |
Serial.print (pixNum); |
Serial.print ("R dan"); |
Serial.print (rIntensity); |
Serial.print ("G dan"); |
Serial.print (gIntensity); |
Serial.print ("B dan"); |
Serial.println (bIntensity); |
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity)); |
strip.show (); |
} |
if (inputString [0] == s)) { |
String harorati; |
int soat, daqiqa; |
temp = inputString.substring (1); |
soat = temp.toInt (); |
int rIndex = inputString.indexOf (',') + 1; |
temp = inputString.substring (rIndex); |
daqiqa = temp.toInt (); |
Serial.print ("Vaqt ko'rsatiladi:"); |
Ketma -ket chop etish (soat); |
Serial.print (":"); |
Ketma -ket chop etish (daqiqa); |
showTime (soat, daqiqa); |
kechikish (1000); |
} |
inputString = ""; |
stringComplete = noto'g'ri; |
} |
// kechikish (1000); |
} |
voidserialEvent () { |
while (Serial.available ()) { |
char inChar = (char) Serial.read (); |
inputString += inChar; |
agar (inChar == '\ n') { |
stringComplete = rost; |
} |
kechikish (1); |
} |
} |
voidclear () { |
uchun (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; |
minutesPixel = (now.minute () / 5) % 12 + 12; |
aniq (); |
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * sath [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel])); |
// strip.setPixelColor (minutesPixel, strip. Color (40 + 40 * darajali [minutesPixel], 30 + 30 * darajali [minutesPixel], 20 + 20 * darajali [minutesPixel])); |
strip.setPixelColor (hourPixel, strip. Color (sath [hourPixel], level [hourPixel], level [hourPixel])))); |
strip.setPixelColor (minutesPixel, strip. Color (daraja [minutesPixel], daraja [minutesPixel], daraja [minutesPixel])))); |
// lightUp (strip. Color (255, 255, 255)); |
strip.show (); |
} |
voidshowTime (int soat, int daqiqa) { |
hourPixel = soat % 12; |
minutesPixel = (daqiqa / 5) % 12 + 12; |
aniq (); |
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * sath [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel])); |
// strip.setPixelColor (minutesPixel, strip. Color (40 + 40 * darajali [minutesPixel], 30 + 30 * darajali [minutesPixel], 20 + 20 * darajali [minutesPixel])); |
strip.setPixelColor (hourPixel, strip. Color (sath [hourPixel], level [hourPixel], level [hourPixel]))); |
strip.setPixelColor (daqiqaPixel, strip. Color (daraja [daqiqaPixel], daraja [daqiqaPixel], daraja [daqiqaPixel]))); |
// lightUp (strip. Color (255, 255, 255)); |
strip.show (); |
} |
voidlightUp (uint32_t rangi) { |
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, rang); |
} |
strip.show (); |
} |
voidlightUpEven () { |
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, strip. Color ( darajasi, darajasi, darajasi))); |
} |
strip.show (); |
} |
rawplywoodClock.ino ni GitHub ❤ tomonidan joylashtirilganini ko'ring
10 -qadam: Kompyuterni ko'rish - kalibrlash
Men bu loyihada shpon ishlatmaslikni ongli ravishda tanladim. Agar menda bo'lsa, yog'ochning qalinligi barcha LEDlar oldida bir xil bo'lardi. Lekin, chunki menda har bir LEDning oldida har xil qalinlikdagi yog'och bor va yog'och rangi ham turlicha bo'lgani uchun, har bir LED uchun LED yorqinligi har xil. Barcha LEDlar bir xil yorqinlikka ega bo'lishi uchun, men hiyla -nayrang o'ylab topdim.
Men soatni suratga oladigan va har bir LEDning yorqinligini tahlil qiladigan (GitHub -da) ishlov berish kodini yozdim. Keyin u har bir LEDning quvvatini o'zgartiradi, shunda ularning hammasi eng xira LED bilan bir xil yorqinlikka ega bo'ladi. Men bilaman, bu juda katta ish, lekin tasvirni qayta ishlash juda qiziq! Va men kutubxona sifatida kalibrlash kodini ishlab chiqishga umid qilaman.
Kalibrlashdan oldin va keyin LED yorqinligini yuqoridagi fotosuratlarda ko'rishingiz mumkin.
kalibrlashDispllay.pde
importprocessing.video.*; |
importprocessing.serial.*; |
Seriyali myPort; |
Video yozib olish; |
yakuniy son numLed = 24; |
int ledNum = 0; |
// PxPGetPixelDark () dan foydalanish uchun sizda global parametrlar bo'lishi kerak. |
int rDark, gDark, bDark, aDark; |
int rLed, gLed, bLed, aLed; |
int rOrg, gOrg, bOrg, aOrg; |
int rTemp, gTemp, bTemp, aTemp; |
Bizning rasmimizni tasvirlash; |
int runNumber = 0; |
int acceptableError = 3; |
int bajarildi; |
int numPixelsInLed; |
uzoq ledIntensivlik; |
int ledPower; |
uzoq targetIntensivlik = 99999999; |
voidsetup () { |
bajarilgan = newint [numLed]; |
numPixelsInLed = newint [numLed]; |
ledIntensity = newlong [numLed]; |
ledPower = newint [numLed]; |
uchun (int i = 0; i <numLed; i ++) { |
ledPower = 255; |
} |
printArray (Serial.list ()); |
String portName = Serial.list () [31]; |
myPort = newSerial (bu, portName, 9600); |
hajmi (640, 480); |
video = newCapture (bu, kenglik, balandlik); |
video.start (); |
noStroke (); |
silliq (); |
kechikish (1000); // Seriya portining ochilishini kuting |
} |
voiddraw () { |
agar (video.available ()) { |
agar (bajarilgan [ledNum] == 0) { |
clearDisplay (); |
kechikish (1000); |
video.read (); |
tasvir (video, 0, 0, kenglik, balandlik); // Veb -kamera videosini ekranga torting |
saveFrame ("ma'lumotlar/no_leds.jpg"); |
agar (runNumber! = 0) { |
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> məqbulError) { |
ledPower [ledNum] -= pow (0,75, runNumber)*100+1; |
} |
agar ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> məqbulError) { |
ledPower [ledNum] += pow (0,75, runNumber)*100 +1; |
} |
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= qabul qilinadigan Xato) { |
bajarilgan [ledNum] = 1; |
bosib chiqarish ("Led"); |
bosib chiqarish (ledNum); |
chop etish ("bajarilgan"); |
} |
agar (ledPower [ledNum]> 255) { |
ledPower [ledNum] = 255; |
} |
agar (ledPower [ledNum] <0) { |
ledPower [ledNum] = 0; |
} |
} |
setLedPower (ledNum, ledPower [ledNum]); |
kechikish (1000); |
video.read (); |
tasvir (video, 0, 0, kenglik, balandlik); // Veb -kamera videosini ekranga torting |
kechikish (10); |
while (myPort.available ()> 0) { |
int inByte = myPort.read (); |
// chop etish (char (inByte)); |
} |
String imageName = "ma'lumotlar/"; |
imageName+= str (ledNum); |
imageName += "_ led.jpg"; |
saveFrame (imageName); |
String originalImageName = "data/org"; |
originalImageName+= str (ledNum); |
originalImageName += ". jpg"; |
agar (runNumber == 0) { |
saveFrame (originalImageName); |
} |
PImage noLedImg = loadImage ("ma'lumotlar/no_leds.jpg"); |
PImage ledImg = loadImage (imageName); |
PImage originalImg = loadImage (originalImageName); |
noLedImg.loadPixels (); |
ledImg.loadPixels (); |
originalImg.loadPixels (); |
fon (0); |
yuklanish piksellari (); |
led intensivligi [ledNum] = 0; |
numPixelsInLed [ledNum] = 0; |
uchun (int x = 0; x <kenglik; x ++) { |
uchun (int y = 0; y <balandlik; y ++) { |
PxPGetPixelDark (x, y, noLedImg.pixels, kenglik); |
PxPGetPixelLed (x, y, ledImg.pixel, kenglik); |
PxPGetPixelOrg (x, y, originalImg.pixel, kenglik); |
agar ((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] ++; |
} boshqa { |
rTemp = 0; |
gTemp = 0; |
bTemp = 0; |
} |
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, piksel, kenglik); |
} |
} |
ledIntensity [ledNum] /= numPixelsInLed [ledNum]; |
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) { |
targetIntensity = ledIntensity [ledNum]; |
} |
updatePixels (); |
} |
bosib chiqarish (ledNum); |
bosib chiqarish (','); |
bosib chiqarish (ledPower [ledNum]); |
bosib chiqarish (','); |
println (ledIntensity [ledNum]); |
ledNum ++; |
agar (ledNum == numLed) { |
int dozo = 0; |
uchun (int i = 0; i <numLed; i ++) { |
donezo += bajarilgan ; |
} |
agar (didzo == numLed) { |
println ("BILDI"); |
uchun (int i = 0; i <numLed; i ++) { |
chop etish (i); |
bosib chiqarish ("\ t"); |
println (ledPower ); |
} |
chop etish ("int level ["); |
bosib chiqarish (ledNum); |
bosib chiqarish ("] = {"); |
uchun (int i = 0; i <numLed-1; i ++) { |
bosib chiqarish (ledPower ); |
bosib chiqarish (','); |
} |
chop etish (ledPower [numLed -1]); |
println ("};"); |
lightUpEven (); |
while (rost); |
} |
chop etish ("Maqsad intensivligi:"); |
agar (runNumber == 0) { |
targetIntensivlik -= 1; |
} |
println (targetIntensity); |
ledNum = 0; |
runNumber ++; |
} |
} |
} |
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish |
aOrg = (thisPixel >> 24) & 0xFF; // har bir komponentni yakka o'zi olish uchun biz siljishimiz va maskalashimiz kerak |
rOrg = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq. |
gOrg = (thisPixel >> 8) & 0xFF; |
bOrg = thisPixel & 0xFF; |
} |
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish |
aDark = (thisPixel >> 24) & 0xFF; // har bir komponentni yakka o'zi olish uchun biz siljishimiz va maskalashimiz kerak |
rDark = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq. |
gDark = (thisPixel >> 8) & 0xFF; |
bDark = thisPixel & 0xFF; |
} |
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish |
aLed = (thisPixel >> 24) & 0xFF; // biz har bir komponentni yakka o'zi olish uchun siljishimiz va niqoblashimiz kerak |
rLed = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq. |
gLed = (thisPixel >> 8) & 0xFF; |
bLed = thisPixel & 0xFF; |
} |
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) { |
a = (a << 24); |
r = r << 16; // Biz barcha 4 ta bastakorni bitta intga yig'amiz |
g = g << 8; // shuning uchun biz ularni o'z joylariga ko'chirishimiz kerak |
rang argb = a | r | g | b; // ikkilik "yoki" operatsiyasi ularning barchasini bitta int ga qo'shadi |
pixelArray [x+y*pixelWidth] = argb; // nihoyat biz int rangini te rang bilan pikselga o'rnatdik |
} |
rawcalibrateDispllay.pde ni GitHub tomonidan ❤ bilan joylashtirilganini ko'rish
11 -qadam: ajralish haqida izohlar
Oldini olish uchun tuzoqlardan:
* Yog'och bilan siz to'lagan narsani olasiz. Shunday qilib, sifatli yog'ochni oling. Qayin kontrplak - yaxshi tanlov; har qanday engil qattiq yog'och ham yaxshi ishlaydi. Men o'tinni sotib oldim va qarorimdan afsuslandim.
* Kamroq burg'ilash yaxshidir. Bir nechta teshiklar mening qismim uchun juda chuqur ketdi. Va epoksi oldingi yuzada ko'rinadi. Buni sezganingizdan keyin juda seziladi.
* To'g'ridan -to'g'ri uchi emas, balki bilya uchli matkapdan foydalaning. Men to'pning uchi bilan tajriba o'tkazmadim, lekin ishonchim komilki, natijalar ancha yaxshi bo'ladi.
Men ularni Etsy yoki tindida sotish fikri bilan noz -karashma qilyapman. Agar siz buni mantiqiy deb hisoblasangiz, quyida sharh bersangiz juda minnatdorman:)
Tavsiya:
Yog'ochli LED displey Raspberry Pi Zero tomonidan quvvatlanadi: 11 qadam (rasmlar bilan)
Raspberry Pi Zero bilan ishlaydigan yog'ochdan yasalgan LED displeyi: Ushbu loyiha 20x10 pikselli WS2812 o'lchamli 78x35 sm o'lchamli LED displeyni amalga oshiradi, uni retro o'yinlarni o'ynash uchun yashash xonasiga osongina o'rnatish mumkin. Ushbu matritsaning birinchi versiyasi 2016 yilda qurilgan va boshqa ko'plab odamlar tomonidan qayta tiklangan. Bu ekspluatatsiya
Kichkina yog'ochli kompyuter qutisi: 3 qadam (rasmlar bilan)
Kichkina yog'ochdan yasalgan kompyuter qutisi: Men sizga o'zimning yog'ochdan yasalgan kichkina kompyuter korpusimni qanday qurganimni ko'rsataman, sizga kerak bo'lgan yagona narsa:-qo'l-qalam & o'lchagich-bo'sh vaqt-dremel va burg'ulash-ATX quvvat manbai (metall pa uchun ishlatiladi
Yog'ochli LED soat: 5 qadam (rasmlar bilan)
Yog'ochli LED soat: yog'ochdan yasalgan LED soat zerikarli yog'och qutiga o'xshaydi, bundan tashqari, vaqt old tomondan porlab turadi. Ko'rish uchun kulrang plastmassa o'rniga sizda chiroyli yog'och bor. U hali ham o'z funktsiyalarini saqlab qoladi, shu jumladan
Yog'ochli LED devor chirog'i: 5 qadam (rasmlar bilan)
Yog'ochli LED devor chirog'i: OK, shuning uchun men LEDlar bilan o'ynashni yaxshi ko'raman va men ham yog'och bilan ishlashni yaxshi ko'raman. Nega ikkalasini ham ishlatib, o'ziga xos bir narsa yaratmasligim kerak, mening kompyuter stolimning tepasida yoqimli yorug'lik manbai bo'lishi kerak edi, lekin menga avvalgi chiroq yoqmadi
Qattiq yog'ochli raqamli soat: 11 qadam (rasmlar bilan)
Qattiq yog'ochdan yasalgan raqamli soat: o'rnatilgan signalli va o'yinli atmega168 (arduino) bilan ishlaydigan yog'och raqamli soatni qanday qurish mumkin. Men birinchi marta yog'och shpon bilan qoplangan LED soatni ko'rganimda buni qilish haqida o'yladim. Men uni ko'rganimda, narxini ko'rmagunimcha yoqdi. Bu nima