Kazalo:

Ura londonskega podzemnega zemljevida: 9 korakov (s slikami)
Ura londonskega podzemnega zemljevida: 9 korakov (s slikami)

Video: Ura londonskega podzemnega zemljevida: 9 korakov (s slikami)

Video: Ura londonskega podzemnega zemljevida: 9 korakov (s slikami)
Video: Встречай златоглавая. Босс Голдфри ► 15 Прохождение Elden Ring 2024, Julij
Anonim
Ura londonskega podzemnega zemljevida
Ura londonskega podzemnega zemljevida
Ura londonskega podzemnega zemljevida
Ura londonskega podzemnega zemljevida

Leta 2014 sem na koncu pripravništva v svetovalnici za 3D tiskanje v Londonu in eksperimenta z barvnimi litofani s svojim strojem Stratasys oblikoval svojega lastnega darila za odhod, barvnega 3D tiskanja cevnih linij v njihovih pisarnah. Odločen sem bil, da bom iz tega nekaj naredil. Kmalu dve leti kasneje, leta 2016, sem imel svoj 3D tiskalnik in se lotil dela, ki bi ga spremenil v uro.

Kot otrok sem pomislil, da so digitalne ure Tokyo Flash največje stvari doslej, zato sem se odločil, da bo to navdih za oblikovanje.

In zdaj je minilo le 4 -letno prekinitev, dokler se mi ni uspelo zapisati!

Medtem ko bo natančna navodila težko ponoviti in bi lahko zaradi znižanja stroškov pri izdelavi PCB -jev za ljubitelje v zadnjih nekaj letih moja natančna metoda namestitve LED zastarela. Upam, da bodo delile ideje druge pripeljale do čudnih ur iz tankih predmetov!

Korak: Sprednja plast

Sprednji sloj
Sprednji sloj
Sprednji sloj
Sprednji sloj
Sprednji sloj
Sprednji sloj

Kot je bilo omenjeno v uvodu, je bil to barvni 3D tisk, verjamem, stroj Stratasys, ki je uporabil prašno plast in spremenjeno kartušo s črnilom za vezivo in pigment.

Datoteka je izgubljena v zgodovini, toda ta plast je lahko karkoli, fotografija ali enobarvni litofan bi naredil čudeže.

Ta del je bil narejen v 3DS max leta 2014, danes pa obstajajo spletna orodja za pretvorbo slike v SLT na podlagi svetlosti

2. korak: Oblikovanje vodilne plasti

Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti
Oblikovanje vodilne plasti

Tu se odločimo za kompleksnost projekta in način odčitavanja časa. Slike prikazujejo 2 ideji, s katerimi sem se igral.

Te so bile narejene s skeniranjem v načrtovanju in risanjem črt po njem v inkscape.

To ni zelo berljiva ura, vendar sem raje zamislil, da se vrstice polnijo ves dan, tako da je to postal cilj oblikovanja.

Binarno štetje je učinkovita metoda za zmanjšanje števila LED in bi izboljšalo berljivost, če je binarno vaše zastoj, vendar je to spodkopalo mojo zamisel o "polnilnih črtah", zato ta možnost ni bila možnost

Običajno je pri urah Tokyo Flash za zmanjšanje števila LED -jev, vendar je pri vsakem polnjenju tega odseka uporabljen en odsek, ki šteje tri ali pet, nato pa še eno polnilo. To minuto sem uporabil za zmanjšanje s 60 na 20 plus 2. I sekunde me ni skrbelo zaradi natančnosti.

3. korak: Izdelava vodilne plasti

Ustvarjanje vodilne plasti
Ustvarjanje vodilne plasti
Ustvarjanje vodilne plasti
Ustvarjanje vodilne plasti
Ustvarjanje vodilne plasti
Ustvarjanje vodilne plasti

Ta vodilni sloj za LED diode ima 2 namena, drži LED na mestu in preprečuje razlitje med njimi

Narisan je bil kot plast na Inkscapeu neposredno na skeniranju, ki sem ga uporabil za oblikovalsko postavitev. Pred pošiljanjem v tiskalnik sem v mešalnik dodala debelino 1 mm.

To je bil eden najtežjih odtisov, ki jih moram narediti na svojem skromnem Makiboxu A6, del je bil natisnjen v abs, zato je bila uporabljena tona acetonske kaše, da je bila pritrjena na gradbeno ploščad z minimalnim upogibanjem. Na srečo ta del ni viden na končnem izdelku

Končna slika prikazuje, da jo drži do svetilke, da preveri razmik.

Če pogledamo nazaj, je lahko razlitje med lučmi vzdolž črte dejansko boljše za vizualizacijo, ni ga težje prebrati, to bi lahko dosegli z dodajanjem posnetka na vodilo na kratkih straneh vsake luči

4. korak: Ožičenje LED

Ožičenje LED
Ožičenje LED
Ožičenje LED
Ožičenje LED
Ožičenje LED
Ožičenje LED

Na sliki s prsti je prikazan preskusni odtis, ki sem ga naredil za preverjanje velikosti lukenj, želel sem, da se LED prilega čipki z malo sile, pravilna oblika je bila nato postavljena z roko pri polaganju vodilne plasti.

Zaradi nizke tolerance mojega 3D tiskalnika so bili nekateri ohlapni in so potrebovali kanček lepila, da so ostali na mestu, drugi pa pretesni, vendar so jih med spajkanjem pritisnili na LED, kar je dejansko bolje ustrezalo kot luknje pravilne velikosti, ki jih je bilo treba po ožičenju izvleči.

Da bi zmanjšali število žic, so bile LED spajkane v matriko 7 x 8, kar pomeni, da je vseh 55 LED mogoče krmiliti le s 13 zatiči, jaz sem imel ročno narisan zemljevid vsake od teh povezav, ki je bil žal izgubljen.

Uporabljena je bila emajlirana žica, tako da so odseki lahko izpostavljeni tako, da se pred priključitvijo segrejejo odsek z železom in pokosita.

Ta postopek je bil zelo dolgotrajen, toplo priporočam oblikovanje tiskanega vezja

5. korak: Oblikovanje elektronike

Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike
Oblikovanje elektronike

Moj prvotni načrt je bil uporabiti mikrokrmilnik Arduino z RTC, vendar sem se odločil za ESP8266 na plošči Node MCU D1, saj je omogočal samodejni poletni čas in možnost nadzora nad WIFI.

Za dodatno zmanjšanje števila zatičev sem imel popolno število LED, da sem lahko uporabljal MAX7219 (ki zmore do 64 LED).

Ta IC se običajno uporablja za pogon LED 7 -segmentnih zaslonov, vendar je imel zelo podoben primer uporabe pri meni, pri čemer je prižgal poljubno število LED z minimalnim utripanjem, celo svetlost je mogoče nadzorovati.

Odločil sem se, da bom za ožičenje uporabil protoboard, vendar je bil orel v pomoč pri postavitvi delov in razumevanju ožičenja

Priložil sem datoteke na plošči, vendar sem prvič uporabil eagle (in do zdaj zastarelo različico), zato so le za referenco

6. korak: Ožičenje elektronike

Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike
Ožičenje elektronike

To je bil ponavljajoč se preprost korak, ki je sledil shemi Eagle, z uporabo glav za ESP in LED matrico je pri sestavljanju močno pomagala.

Pin 1 na anodnih in katodnih LED -glavah je bil označen s srebrno ostrino, zato jih je bilo mogoče razlikovati, kot je bilo na 7 drugih 8.

7. korak: Programiranje

Programiranje
Programiranje

Ker naš zaslon ni tradicionalna matrika, sem moral najti metodo za vizualizacijo, katere bite vklopiti, ki jih je poslal na MAX IC v HEX. Na srečo poznam ravno toliko excela, da bi lahko naletel na težave, in naredil "šeststranskega čarovnika", ki me je vodil, čeprav je želeni vzorec prikazan, ročno postavljena potrditvena polja vse.

To je prišlo s prevrednotenjem, da je mogoče šestnajstiko za mojo uro, minuto in sekunde združiti z uporabo bitov ALI za izdelavo zadnjega šestnajstiškega ukaza za pošiljanje na max7219, vključno z malo animacije, ki sem jo dodal sekundam, da sem lahko prepričan, da je deska ni bil zamrznjen

Torej skoraj na koncu. in čas za drugo odločitev, ki se ni preveč starala.

Koda za ESP je v LUA, danes bi priporočil uporabo arduino IDE za boljšo dokumentacijo in robustno knjižnico paketov, v času, ko je skupnost ESP še zorela, in kot jezik za ta projekt sem izbral LUA.

Sprejel sem vprašljivo odločitev, da redno pingam Googlove strežnike, da berem čas. To je prineslo potrebo po RTC, da bi zmanjšali odmik, to deluje, vendar bi bilo bolje, če uporabite API za pravi čas.

halfSec = 0 ura = 0 minuta = 0 sekunda = 0

nizka intenzivnost = 0

visoka intenzivnost = 9

lokalni SSID = "Wifi"

local SSID_PASSWORD = "Geslo"

function time () -povežite se z internetom, da dobite trenutni čas in datum

če wifi.sta.getip () potem lokalni conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")

conn: on ("povezava", function (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Gostitelj: time.is / r / n".. "Sprejmi: */ *\ r / n".. " Uporabniški agent: Mozilla/4.0 (združljivo; esp8266 Lua;) ".." / r / n / r / n ") konec)

conn: on ("prejemi", function (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -poiščite čas in datum v tovoru iz interneta, spremenite časovni pas, če je p ~ = nič potem-izvleči številke, ki ustrezajo uri, minuti, drugi, dnevu, mesečni uri = tonumber (string.sub (koristna obremenitev, p-9, p-8)) minute = tonumber (string.sub (koristna obremenitev, p- 6, p-5)) druga = število (string.sub (koristna obremenitev, p-3, p-2)) addHour ()-trdo kodiran BST (britanski poletni čas) poletni čas, ki prihrani tisk (ura, minuta, druga) polsek = (second%6)*2 --print (halfSec) else print ("spletna posodobitev ni uspela!") end end --function) -konec vključenega upravljalca dogodkov "prejemanje"

conn: on ("prekinitev povezave", funkcija (conn, koristna obremenitev) conn = nič koristna obremenitev = nič konca) konec tiskanja ("še ni wifi") konec

funkcija borTable (a, b,…) -po razbitih ALI tabele skupaj

če arg [1], potem b = borTable (b, razpakiraj (arg)) končaj lokalno z = {} za i, v v ipairjih (a) naredi table.insert (z, bit.bor (v, b )) end return z end

funkcija bxorTable (a, b,…) -po razbitih ALI tabele skupaj

če arg [1], potem b = bxorTable (b, razpakiraj (arg)) končaj lokalno z = {} za i, v v ipairjih (a) naredi table.insert (z, bit.bxor (v, b )) end return z end

funkcija addSecond ()

druga = druga+1, če je druga> = 60, potem druga = 0 minuta = minuta+1, če je minuta> = 60, potem je minuta = 0 addHour () end end end

funkcija addHour ()

ura = ura+1, če je ura> = 24, potem je ura = 0 konec, če je ura == 2 ali ura == 16, potem max7219.setIntensity (lowIntensity) se konča, če je ura == 8 ali ura == 18, potem max7219.setIntensity (highIntensity) funkcija end end update () local secGap = 6 local minGap = 3 local horGap = 1 local sec = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; lokalni min = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x12, 0x10, 0x12, 0x10 }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x12, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x32, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}}; lokalni hor = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x04, 0x04, 0x0C, 0x08 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x0C, 0x0C, 0x04, 0x04, 0x0C, 0C0, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4, 0x0C, 0x0C, 0x4C, 0x4, 0x4, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, 0 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4x, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -tisk (ura, minuta, sekunda)

-tabela se začne pri 0, torej pri 1 kot trenutno sek [0] = nič)

max7219.write ({animate (borTable (sec [1+ (second/secGap)]), min [1+ (minute/minGap)], hor [1+ (ura/horGap)])}})

konec -funkcija

wifi.setmode (wifi. STATION)

wifi.sta.config (SSID, SSID_PASSWORD) wifi.sta.autoconnect (1)

-konfigurirajte max7219

max7219 = zahteva ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intenzivnost = visoka intenzivnost})

-Glavni program

checkOnline = tmr.create ()

tmr.alarm (0, 180000, 1, čas)

tmr.alarm (1, 1000, 1, addSecond)

tmr.alarm (2, 500, 1, posodobitev)

animirana funkcija (še vedno)

lokalni okvirji = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; halfSec = halfSec+1, če halfSec> = 12, potem halfSec = 0 konec --print (halfSec) vrne bxorTable (okvirji [halfSec+1], miren) konec

8. korak: Stanovanje

Stanovanje
Stanovanje
Stanovanje
Stanovanje
Stanovanje
Stanovanje

Zdaj je čas, da pokažete svojo neverjetno obrt in svoj projekt postavite v hišo.

Ali pa to ali vzemite amazonski paket iz recikliranja in naredite začasno ohišje, ki se uporablja še danes.

Prednost uporabe tega pristopa je bila v tem, da se je vsaka plast projekta skoraj popolnoma ujemala z debelino kartona, zato je bilo mogoče sendvič zložiti in lepiti skupaj. Podobna različica premium bi lahko uporabila akril

9. korak: Zaključek opomb

Hvala, ker ste prebrali, saj mnogi veste, da je dokumentiranje projekta lahko tako težko kot izdelava. so posnetki videa, v katerih govorim, ki bodo sčasoma ugledali luč sveta.

V letih med izdelavo tega projekta in pisanjem sem pričakoval, da bom videl več primerov poljubnih LED zaslonov, ki uporabljajo 3D tiskanje, vendar je zmanjšanje trakov RGB večinoma odpravilo potrebo po alternativi.

Upam, da je bilo to informativno, in prosim postavite vprašanja, saj bom poskušal dati več podrobnosti o razdelkih, ki ne ustrezajo v celoti.

Na zdravje

Priporočena: