Sisukord:
- Samm 1:
- 2. samm: disain
- 3. samm: CNCing
- 4. samm: elektroonika
- Samm: elektroonika kokkupanek
- 6. samm: kuivkäivitus
- Samm: epoksü
- 8. samm: pange see kõik kokku
- 9. samm: kood
- 10. samm: arvuti nägemine - kalibreerimine
- 11. samm: märkused lahkuminekuks
Video: Puidust LED -kell - analoogne stiil: 11 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:50
See on analoogstiilis puidust LED -kell. Ma ei tea, miks ma pole ühtegi neist varem näinud … kuigi digitaalsed tüübid on väga levinud. Anyhoo, siit me läheme!
Samm 1:
Vineerkella projekt sai alguse lihtsa stardiprojektina CNC ruuteri jaoks. Vaatasin veebis lihtsaid projekte ja leidsin selle lambi (pilt ülal). Olin näinud ka digitaalseid kellasid, mis paistavad läbi puitvineeri (pilt ülal). Niisiis, kahe projekti ühendamine oli ilmselge idee. Otsides endale väljakutset, otsustasin selle projekti jaoks mitte kasutada spooni, vaid ainult puutükki.
2. samm: disain
Kujundasin kella Inkscape'is (pilt ülal). Disain on valikul väga lihtne. Otsustasin juhtmete juhtimisjälgede vastu mitte, sest sel hetkel ei olnud ma kindel, kas tahan radiaal- või perimeetrijuhtmetega. (Otsustasin lõpuks minna ümbermõõduliste juhtmetega.) Üks väike neopiksel läheb igasse väikestesse ümmargustesse aukudesse minuti ja tunni kuvamiseks viie minuti täpsusega. Keskel olev ring suunatakse elektroonika jaoks välja.
3. samm: CNCing
Kujundasin tööriistateed MasterCAM -is ja kasutasin 3/4 tolli vineerist kella freesimiseks tehnoRouterit. Ma kasutan selleks 15 "x15" tükki, minimaalse raiskamisega. Nipp on võimalikult suur osa puidust välja suunata ilma puitu läbi murdmata. 0,05 "-0,1" jätmine on hea valik heleda puidu jaoks. Kui te pole kindel, on parem jätta rohkem puitu, sest teise näo saate alati lihvida. Lõpuks eemaldasin mõnest osast natuke liiga palju puitu, kuid õnneks ei kannata tulemused seetõttu liiga palju.
Märkus kasutajatele, kellel puudub juurdepääs CNC -le:
Seda projekti saab hõlpsasti teha puuripressiga. Peate lihtsalt seadma peatuse kohas, kus jätate alusele alles umbes 0,1 tolli puitu. Peate olema täpne, kuid mitte liiga täpne. Lõppude lõpuks ei näe keegi ideaalis, et kõik LED -id põlevad kell samal ajal, nii et pääsete väikese lohakusega.
4. samm: elektroonika
Elektroonika on üsna lihtne. Neopiksleid on 24, tundide kuvamiseks kaksteist ja minutite kuvamiseks kaksteist viieminutilise täpsusega. Arduino pro mini juhib neopiksleid ja see saab täpse aja DS3231 reaalajas kella (RTC) mooduli kaudu. RTC moodulil on varukoopiana mündirakk, seega ei kaota see aega ka siis, kui toide on välja lülitatud.
Materjal:
Arduino pro mini (või mis tahes muu Arduino)
DS3231 purunemisplaat
Neopikslid üksikutel purunemisplaatidel
Samm: elektroonika kokkupanek
Ma ühendasin neopikslid nööriga, kasutades kaheteistkümne esimese LED-i jaoks 2,5 juhtmeid ja kaheteistkümne kaheteistkümne juhtme jaoks. Oleksin võinud kasutada veidi väiksemaid juhtmete pikkusi. Pärast nööri tegemist katsetasin seda, veendudes, et jootmine liigesed olid head. Lisasin hetke lüliti kõigi LED -ide sisselülitamiseks, lihtsalt näitamiseks.
6. samm: kuivkäivitus
Pärast katsetamist, LED -ide aukudesse panemist ja nende kõigi sisselülitamist jäin tulemustega rahule. Niisiis lihvisin esipinda natuke ja kandsin peale PU -katte. Lõppesin hiljem mantli maha lihvimisega, kuid see on hea mõte jätta selga, kui see ei tundu esteetiliselt ebameeldiv.
Samm: epoksü
Pärast mõningast katsetamist juhtpositsiooniga aukudes leidsin, et parim arutelu saavutatakse siis, kui valgusdioodid on augu otsast umbes 0,2 tolli kaugusel. Kui proovite seda ise, on valgusdioodide heledus väga erinev iga auk. Ärge muretsege selle pärast; me parandame selle koodiga. See on minu kasutatava puuritüübi tõttu. Kui ma peaksin seda uuesti tegema, kasutaksin aukude jaoks kuuliga otsikut. Kuid igal juhul segasin vahemaa saamiseks epoksiidi ja panin igasse auku natuke.
8. samm: pange see kõik kokku
Valgusdioodid asetatakse alates kella 12-tunnise käe asendist, liikudes vastupäeva kõikides tundide osade asendites ja seejärel minutinäidiku suunas, liikudes uuesti vastupäeva liikuvast 60-minutilisest märgist. Seda nii, et eestpoolt vaadates ilmub LED -muster päripäeva.
Pärast seda, kui epoksiid oli tund aega tahenenud, panin veel mõne epoksüvaigu. Seekord paigutasin valgusdioodid aukudesse, kaetades kindlasti juhtmed ja jootekohad epoksüüdiga. See tagab hea valguse hajumise ja kindlustab juhtmed.
9. samm: kood
Kood on GitHubis, muutke seda oma huvides. Kui lülitate kõik LED -id samale tasemele, on läbi paistva valguse heledus igas augus väga erinev. Selle põhjuseks on aukude puidu erinev paksus ja puidu varju erinevus, nagu näete, varieerub puitvärv minu tükis üsna palju. Selle heleduse erinevuse parandamiseks tegin led -heledustasemete maatriksi. Ja vähendas heledamate valgusdioodide heledust. See on katse -eksituse protsess ja võib kesta mitu minutit, kuid tulemused on seda väärt.
vineerikell.ino
// Vineerikell |
// Autor: tinkrmind |
// Attribution 4.0 International (CC BY 4.0). Võite vabalt: |
// Jaga - kopeerige ja levitage materjali mis tahes kandjal või vormingus |
// Kohandamine - remiksige, muutke ja tuginege materjalile mis tahes eesmärgil, isegi kaubanduslikult. |
// Hurraa! |
#kaasake |
#include "RTClib.h" |
RTC_DS3231 rtc; |
#include "Adafruit_NeoPixel.h" |
#ifdef _AVR_ |
#kaasake |
#endif |
#definePIN6 |
Adafruit_NeoPixel riba = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800); |
int tundPiksel = 0; |
int minutePixel = 0; |
unsignedlong lastRtcCheck; |
String inputString = ""; // string sissetulevate andmete hoidmiseks |
loogiline stringComplete = false; // kas string on täielik |
int tase [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 (! Seeria); // Leonardo/Micro/Zero jaoks |
#endif |
// See on Trinket 5V 16MHz jaoks, saate need kolm rida eemaldada, kui te Trinketit ei kasuta |
#if defineeritud (_AVR_ATtiny85_) |
if (F_CPU == 16000000) clock_prescale_set (clock_div_1); |
#endif |
// nipsasja erikoodi lõpp |
Seriaalne algus (9600); |
riba.algus (); |
strip.show (); // Initsialiseeri kõik pikslid olekusse „väljas” |
kui (! rtc.begin ()) { |
Serial.println ("RTC -d ei leitud"); |
samas (1); |
} |
pinMode (2, INPUT_PULLUP); |
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); |
if (rtc.lostPower ()) { |
Serial.println ("RTC kaotas voolu, määrab aja!"); |
// järgmine rida määrab RTC -le selle visandi koostamise kuupäeva ja kellaaja |
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); |
// See rida määrab RTC -le selgesõnalise kuupäeva ja kellaaja, näiteks seadistamiseks |
// 21. jaanuar 2014 kell 3:00 helistate: |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
} |
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0)); |
// lightUpEven (); |
// while (1); |
lastRtcCheck = 0; |
} |
voidloop () { |
if (millis () - lastRtcCheck> 2000) { |
DateTime now = rtc.now (); |
Serial.print (now.hour (), DEC); |
Serial.print (':'); |
Serial.print (now.minute (), DEC); |
Serial.print (':'); |
Serial.print (nüüd.second (), DEC); |
Serial.println (); |
showTime (); |
lastRtcCheck = millis (); |
} |
if (! digitalRead (2)) { |
lightUpEven (); |
} |
if (stringComplete) { |
Serial.println (inputString); |
if (inputString [0] == 'l') { |
Serial.println ("Tase"); |
lightUpEven (); |
} |
if (inputString [0] == 'c') { |
Serial.println ("Näitab aega"); |
showTime (); |
strip.show (); |
} |
if (inputString [0] == '1') { |
Serial.println ("Kõigi LEDide sisselülitamine"); |
lightUp (riba. Värv (255, 255, 255)); |
strip.show (); |
} |
if (inputString [0] == '0') { |
Serial.println ("Puhastusriba"); |
selge (); |
strip.show (); |
} |
// #3, 255 seaks led -numbri 3 tasemele 255, 255, 255 |
if (inputString [0] == '#') { |
Stringi temp; |
temp = inputString.substring (1); |
int pixNum = temp.toInt (); |
temp = inputString.substring (inputString.indexOf (',') + 1); |
int intensiivsus = temp.toInt (); |
Serial.print ("Seadistus"); |
Serial.print (pixNum); |
Serial.print ("tasemele"); |
Serial.println (intensiivsus); |
strip.setPixelColor (pixNum, strip. Color (intensiivsus, intensiivsus, intensiivsus)); |
strip.show (); |
} |
// #3, 255, 0, 125 seaks led -numbri 3 tasemele 255, 0, 125 |
if (inputString [0] == '$') { |
Stringi 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 ("Seadistus"); |
Serial.print (pixNum); |
Serial.print ("R kuni"); |
Serial.print (rIntensity); |
Serial.print ("G kuni"); |
Serial.print (gIntensity); |
Serial.print ("B kuni"); |
Serial.println (bIntensity); |
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity)); |
strip.show (); |
} |
if (inputString [0] == 's') { |
Stringi temp; |
int tund, minut; |
temp = inputString.substring (1); |
tund = temp.toInt (); |
int rIndex = inputString.indexOf (',') + 1; |
temp = inputString.substring (rIndex); |
minut = temp.toInt (); |
Serial.print ("Näitab aega:"); |
Serial.print (tund); |
Serial.print (":"); |
Serial.print (minut); |
showTime (tund, minut); |
viivitus (1000); |
} |
inputString = ""; |
stringComplete = vale; |
} |
// viivitus (1000); |
} |
voidserialEvent () { |
while (Serial.available ()) { |
char inChar = (char) Serial.read (); |
inputString += inChar; |
kui (inChar == '\ n') { |
stringComplete = true; |
} |
viivitus (1); |
} |
} |
voidclear () { |
for (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, riba. Värv (0, 0, 0)); |
} |
} |
voidshowTime () { |
DateTime now = rtc.now (); |
hourPixel = now.hour () % 12; |
minutPiksel = (praegu.minut () / 5) % 12 + 12; |
selge (); |
// strip.setPixelColor (tundPiksel, riba. Värv (40 + 40 * tase [tunnipiksel], 30 + 30 * tase [tunnipiksel], 20 + 20 * tase [tunnipiksel])); |
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * tase [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel])); |
strip.setPixelColor (tundPiksel, riba. Värv (tase [tundPiksel], tase [tunnipiksel], tase [tunnipiksel])); |
strip.setPixelColor (minutipiksel, riba.värv (tase [minutipiksel], tase [minutipiksel], tase [minutipiksel])); |
// lightUp (riba. Värv (255, 255, 255)); |
strip.show (); |
} |
voidshowTime (int tund, int minut) { |
hourPixel = tund % 12; |
minutePixel = (minut / 5) % 12 + 12; |
selge (); |
// strip.setPixelColor (tundPiksel, riba. Värv (40 + 40 * tase [tunnipiksel], 30 + 30 * tase [tunnipiksel], 20 + 20 * tase [tunnipiksel])); |
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * tase [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel])); |
strip.setPixelColor (tundPiksel, riba. Värv (tase [tundPiksel], tase [tunnipiksel], tase [tunnipiksel])); |
strip.setPixelColor (minutipiksel, riba.värv (tase [minutipiksel], tase [minutipiksel], tase [minutipiksel])); |
// lightUp (riba. Värv (255, 255, 255)); |
strip.show (); |
} |
voidlightUp (uint32_t värv) { |
for (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, värv); |
} |
strip.show (); |
} |
voidlightUpEven () { |
for (uint16_t i = 0; i <strip.numPixels (); i ++) { |
strip.setPixelColor (i, riba. Värv (tase , tase , tase )); |
} |
strip.show (); |
} |
vaata rawplywoodClock.ino, mille hostiks on GitHub ❤
10. samm: arvuti nägemine - kalibreerimine
Tegin teadliku valiku, et selles projektis spooni ei kasutata. Kui oleksin, oleks puidu paksus kõigi LED -ide ees olnud sama. Kuid kuna mul on iga LED -i ees erineva paksusega puit ja kuna ka puidu värv varieerub palju, on LED -i heledus iga LED -i puhul erinev. Et kõik LED -id tunduksid ühesuguse heledusega, mõtlesin välja vahva triki.
Kirjutasin töötlemiskoodi (GitHubis), mis teeb kellast foto ja analüüsib iga LED -i heledust. Seejärel varieerub iga LED -i võimsus, et saavutada nende kõigi heledus sama hämara LED -iga. Nüüd ma tean, et see on liialdus, kuid pilditöötlus on väga lõbus! Ja ma loodan kalibreerimiskoodi raamatukoguna välja töötada.
Ülaltoodud fotodel näete LED -i heledust enne ja pärast kalibreerimist.
calibrateDispllay.pde
importprocessing.video.*; |
importprocessing.serial.*; |
Seeria myPort; |
Jäädvustage video; |
lõplik numberLed = 24; |
int ledNum = 0; |
// PxPGetPixelDark () kasutamiseks peavad teil olema need üldised varablid |
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 aktsepteeritavViga = 3; |
int tehtud; |
int numPixelsInLed; |
pikk ledIntensity; |
int ledPower; |
long targetIntensity = 99999999; |
voidsetup () { |
tehtud = newint [numLed]; |
numPixelsInLed = newint [numLed]; |
ledIntensity = uus [numLed]; |
ledPower = newint [numLed]; |
jaoks (int i = 0; i <numLed; i ++) { |
ledPower = 255; |
} |
printArray (Serial.list ()); |
String portName = Serial.list () [31]; |
myPort = newSerial (see, pordiNimi, 9600); |
suurus (640, 480); |
video = newCapture (see, laius, kõrgus); |
video.start (); |
noStroke (); |
sile (); |
viivitus (1000); // Oodake, kuni jadaport avaneb |
} |
voiddraw () { |
kui (video.available ()) { |
kui (tehtud [ledNum] == 0) { |
clearDisplay (); |
viivitus (1000); |
video.read (); |
pilt (video, 0, 0, laius, kõrgus); // Joonista veebikaamera video ekraanile |
saveFrame ("data/no_leds.jpg"); |
if (runNumber! = 0) { |
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> aktsepteeritavViga) { |
ledPower [ledNum] -= pow (0,75, runNumber)*100+1; |
} |
if ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> aktsepteeritavViga) { |
ledPower [ledNum] += pow (0,75, runNumber)*100 +1; |
} |
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= aktsepteeritav viga) { |
tehtud [ledNum] = 1; |
print ("Led"); |
print (ledNum); |
print ("tehtud"); |
} |
kui (ledPower [ledNum]> 255) { |
ledPower [ledNum] = 255; |
} |
kui (ledPower [ledNum] <0) { |
ledPower [ledNum] = 0; |
} |
} |
setLedPower (ledNum, ledPower [ledNum]); |
viivitus (1000); |
video.read (); |
pilt (video, 0, 0, laius, kõrgus); // Joonista veebikaamera video ekraanile |
viivitus (10); |
samas (myPort.available ()> 0) { |
int inByte = myPort.read (); |
// print (char (inByte)); |
} |
String imageName = "andmed/"; |
pildiNimi+= str (ledNum); |
imageName += "_ led.jpg"; |
saveFrame (pildiNimi); |
String originalImageName = "andmed/organisatsioon"; |
originalImageName+= str (ledNum); |
originalImageName += ". jpg"; |
if (runNumber == 0) { |
saveFrame (originalImageName); |
} |
PImage noLedImg = loadImage ("data/no_leds.jpg"); |
PImage ledImg = loadImage (pildiNimi); |
PImage originalImg = loadImage (originalImageName); |
noLedImg.loadPixels (); |
ledImg.loadPixels (); |
originalImg.loadPixels (); |
taust (0); |
loadPixels (); |
ledIntensity [ledNum] = 0; |
numPixelsInLed [ledNum] = 0; |
jaoks (int x = 0; x <laius; x ++) { |
jaoks (int y = 0; y <kõrgus; y ++) { |
PxPGetPixelDark (x, y, noLedImg.pixels, width); |
PxPGetPixelLed (x, y, ledImg.pixels, width); |
PxPGetPixelOrg (x, y, originaalImg.pikslit, laius); |
kui ((rOrg+gOrg/2+bOrg/3)-(rDark+gTumm/2+bTume/3)> 75) { |
ledIntensity [ledNum] = ledIntensity [ledNum]+(rLed+gLed/2+bLed/3) -(rDark+gDark/2+bDark/3); |
rTemp = 255; |
gTemp = 255; |
bTemp = 255; |
numPixelsInLed [ledNum] ++; |
} muud { |
rTemp = 0; |
gTemp = 0; |
bTemp = 0; |
} |
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, pikslit, laius); |
} |
} |
ledIntensity [ledNum] /= numPixelsInLed [ledNum]; |
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) { |
targetIntensity = ledIntensity [ledNum]; |
} |
updatePixels (); |
} |
print (ledNum); |
print (','); |
print (ledPower [ledNum]); |
print (','); |
println (ledIntensity [ledNum]); |
ledNum ++; |
if (ledNum == numLed) { |
int donezo = 0; |
jaoks (int i = 0; i <numLed; i ++) { |
donezo += valmis ; |
} |
if (donezo == numLed) { |
println ("VALMIS"); |
jaoks (int i = 0; i <numLed; i ++) { |
trükk (i); |
print ("\ t"); |
println (ledPower ); |
} |
print ("int level ["); |
print (ledNum); |
print ("] = {"); |
jaoks (int i = 0; i <numLed-1; i ++) { |
print (ledPower ); |
print (','); |
} |
print (ledPower [numLed -1]); |
println ("};"); |
lightUpEven (); |
samas (tõsi); |
} |
print ("Sihtintensiivsus:"); |
if (runNumber == 0) { |
targetIntensity -= 1; |
} |
println (targetIntensity); |
ledNum = 0; |
runNumber ++; |
} |
} |
} |
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelsWidth]; // värvide hankimine pikslitest int |
aOrg = (seePiksel >> 24) & 0xFF; // peame iga komponendi eraldi saamiseks nihutama ja maskeerima |
rOrg = (seePiksel >> 16) & 0xFF; // see on kiirem kui punaseks (), roheliseks (), siniseks () helistamine |
gOrg = (seePiksel >> 8) & 0xFF; |
bOrg = seePiksel & 0xFF; |
} |
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelsWidth]; // värvide hankimine pikslitest int |
aTume = (seePiksel >> 24) & 0xFF; // peame iga komponendi eraldi saamiseks nihutama ja maskeerima |
rDark = (seePiksel >> 16) & 0xFF; // see on kiirem kui punaseks (), roheliseks (), siniseks () helistamine |
gDark = (seePiksel >> 8) & 0xFF; |
bTume = seePiksel & 0xFF; |
} |
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) { |
int thisPixel = pixelArray [x+y*pixelsWidth]; // värvide hankimine pikslitest int |
aLed = (seePiksel >> 24) & 0xFF; // peame iga komponendi eraldi saamiseks nihutama ja maskeerima |
rLed = (seePiksel >> 16) & 0xFF; // see on kiirem kui punaseks (), roheliseks (), siniseks () helistamine |
gLed = (seePiksel >> 8) & 0xFF; |
bLed = seePiksel & 0xFF; |
} |
voidPxPSetPixel (intx, inty, int, intg, intb, inta, int pixelArray, intpixelsWidth) { |
a = (a << 24); |
r = r << 16; // Pakime kõik 4 komponenti ühte int |
g = g << 8; // seega peame need oma kohtadesse nihutama |
värv argb = a | r | g | b; // binaarne "või" operatsioon lisab need kõik ühte int |
pixelArray [x+y*pixelsWidth] = argb; // Lõpuks seadsime int koos te värvidega pikslitesse |
} |
vaata rawcalibrateDispllay.pde, mille hostiks on GitHub ❤
11. samm: märkused lahkuminekuks
Lõkse, mida vältida:
* Puiduga saate selle, mille eest maksate. Niisiis, hankige kvaliteetne puit. Kasevineer on hea valik; iga hele täispuit sobib hästi. Ostsin puidu välja ja kahetsen oma otsust.
* Parem on puurida vähem kui rohkem. Paar auku läks minu tüki jaoks liiga sügavale. Ja epoksiid paistab esiküljelt läbi. See on väga märgatav, kui seda märkate.
* Kasutage sirge otsa asemel kuulotsaga puurit. Ma ei ole palli otsikuga natuke katsetanud, kuid olen üsna kindel, et tulemused on palju paremad.
Ma flirdin mõttega müüa neid Etsy või tindie kaudu. Oleksin väga tänulik, kui kommenteeriksite allpool, kui arvate, et see on mõttekas:)
Soovitan:
Minipingi toiteallikas - vintage stiil: 6 sammu (koos piltidega)
Minipinki toiteallikas - Vintage stiil: mul on liiga palju taotlusi oma minitoiteallika kohta, nii et tegin selle jaoks juhendatavaks. Mul on pooleli uue kahe kanaliga toiteallika ehitamine, kuid käimasoleva pandeemia tõttu on kohaletoimetamine aeglane ja esemed kaovad pidevalt. Vahepeal otsustasin ehitada
Kuidas liha lõigata - LASER -STIIL!: 3 sammu (piltidega)
Kuidas liha lõigata - LASER -STIIL
Memory Stick puidust messingist alumiiniumist stiil: 6 sammu
Memory Stick puidust messingist alumiiniumistiil: ma ei salli seda, kuidas ma seda tegin. Mul oli õmblusniit õiges suuruses ja peene niidiga, nii et kasutasin neid. Lõikasin need sirgelt välja, nii et pidin selle ümber töötamiseks natuke vaeva nägema. Kui teete seda muul viisil, peaksite seda tegema… ma tahtsin
Pilkupüüdva ekraani loomine (LED -stiil): 9 sammu (piltidega)
Kuidas luua pilkupüüdvat ekraani (LED -stiil): see ei ole nii juhendatav kui rekord sellest, kuidas ma kooliprojekti tegin. Kuigi täpselt selle kordamine, mida ma tegin, ei aita teid tõenäoliselt, saab seda projekti muuta, et muuta peaaegu iga ekraan pilkupüüdvamaks
Audiovisuaalne kunst . FOTC stiil: 7 sammu (koos piltidega)
Audiovisuaalne kunst …. FOTC stiil: see juhendatav põhineb ühel varem postitatud kõlarikunstil ja oli tehtud minu naisele ning austusavaldusena parimatele paroodiaduole „The Flight of the Conchords“. Kui te pole FOTC -st kunagi kuulnud, vaadake neid allpool. Ma näitan sulle, et