Sadržaj:
- Korak 1: Prednji sloj
- Korak 2: Dizajniranje sloja vodiča
- Korak 3: Izgradnja sloja vodiča
- Korak 4: Ožičenje LED dioda
- Korak 5: Dizajniranje elektronike
- Korak 6: Ožičenje elektronike
- Korak 7: Programiranje
- Korak 8: Stanovanje
- Korak 9: Zatvaranje napomena
Video: Sat londonske podzemne karte: 9 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Godine 2014., nakon stažiranja u konzultantskoj tvrtki za 3D ispis u Londonu i eksperimenta s litofanom u boji pomoću njihovog stroja Stratasys, osmišljavam svoj vlastiti poklon za odlazak, 3D ispis cijevnih linija u boji koji se nalazi u njihovim uredima. Bio sam odlučan napraviti nešto od toga. Kratke 2 godine kasnije, 2016. godine, imao sam vlastiti 3D pisač i počeo sam raditi na tome da od njega napravim sat.
Kao klinac pomislio sam da su digitalni satovi Tokyo Flash najveće stvari ikad, pa sam to odvratio od inspiracije za dizajn.
A sad je prošlo samo 4 godine pauze dok nisam stigao to napisati!
Iako će se točne upute teško ponoviti, a smanjenje troškova u proizvodnji hobističkih PCB -a u posljednjih nekoliko godina moglo bi učiniti moju točnu metodu postavljanja LED dioda zastarjelom. Nadam se da bi podijeljene ideje mogle dovesti do toga da drugi naprave čudne satove od tankih predmeta!
Korak 1: Prednji sloj
Kao što je spomenuto u uvodu, ovo je bio 3D ispis u boji, vjerujem da je to bio stroj Stratasys koji je koristio sloj praha i modificirani spremnik tinte za vezivo i pigment.
Datoteka je izgubljena u povijesti, ali ovaj sloj može biti bilo što, fotografija ili litofan u jednoj boji učinio bi čuda.
Ovaj je dio izrađen u 3DS maxu 2014. godine, ali danas postoje mrežni alati za pretvaranje slike u SLT na temelju svjetline
Korak 2: Dizajniranje sloja vodiča
Tu odlučujemo o složenosti projekta i načinu čitanja vremena. Slike prikazuju 2 ideje s kojima sam se igrao.
To je napravljeno skeniranjem u dizajnu i crtanjem linija po njemu u inkscape -u.
Ovo nije jako čitljiv sat, ali više sam volio ideju da se redovi pune tijekom dana pa je to postao cilj dizajna.
Binarno brojanje je održiva metoda za smanjenje broja LED dioda i poboljšalo bi čitljivost ako je binarno vaše zaglavljivanje, ali to je potkopalo moju ideju o "punjenju linija", pa nije bila opcija za ovaj projekt
Uobičajeno je u Tokyo Flash Satovima da se smanji broj LED dioda, ali da jedan odjeljak broji u 3 ili 5, a zatim još jedno punjenje za svaki put kad se taj dio popuni, koristio sam ovu tehniku za minute, kako bih ih smanjio sa 60 na 20 plus 2. I Nisam se toliko brinuo zbog preciznosti ovo nekoliko sekundi.
Korak 3: Izgradnja sloja vodiča
Ovaj vodeći sloj za LED diode ima 2 svrhe, drži LED diode na mjestu i sprječava izlijevanje između njih
Nacrtan je kao sloj na Inkscapeu izravno na vrhu skeniranja koje sam koristio za izgled dizajna. U blender je dodano 1 mm debljine prije slanja na pisač.
Ovo je bio jedan od najtežih otisaka koje moram napraviti na svom oskudnom Makiboxu A6, dio je otisnut u trbušnjacima pa je tona acetonske kaše upotrijebljena za držanje pričvršćenog na platformu uz minimalno savijanje. Na sreću ovaj dio se ne vidi na konačnom proizvodu
Konačna slika pokazuje da je držana do svjetiljke radi provjere razmaka.
Gledajući unatrag, izlijevanje između svjetla duž crte moglo bi zapravo biti poželjnije za vizuale, nije teže za čitanje, to bi se moglo postići dodavanjem skošenja vodiču na kratkim stranama svakog svjetla
Korak 4: Ožičenje LED dioda
Slika šake prikazuje probni otisak koji sam napravio za provjeru veličine rupa, imao sam za cilj da LED dioda čvrsto stane u čipku s malom silom, a zatim se ručno stavljao ispravan oblik pri polaganju vodećeg sloja.
Zbog niske tolerancije mog 3D pisača, neki su bili labavi i zahtijevali su malo ljepila kako bi ostali na mjestu, dok su drugi bili previše tijesni, ali su potaknuti pritiskom na LED tijekom lemljenja, što je zapravo bolje odgovaralo rupe ispravne veličine, koje je trebalo jednom podstanarsko povući.
Kako bi se smanjio broj žica, LED diode su lemljene u matrici 7 x 8, što znači da se svih 55 LED dioda moglo kontrolirati sa samo 13 pinova. Imao sam ručno nacrtanu kartu svake od ovih veza koja je nažalost izgubljena.
Korištena je emajlirana žica kako bi se dijelovi mogli izložiti zagrijavanjem dijela s željezom i kalajisanjem prije spajanja.
Ovaj proces je dugotrajan, toplo preporučujem projektiranje PCB -a
Korak 5: Dizajniranje elektronike
Moj je prvi plan bio koristiti Arduino mikrokontroler s RTC -om, ali sam se odlučio za ESP8266 na ploči Node MCU D1 jer je dopuštao automatsko ljetno računanje vremena i mogućnost kontrole nad WIFI -jem.
Kako bih dodatno smanjio broj pinova, imao sam savršen broj LED dioda za korištenje MAX7219 (koji može podnijeti do 64 LED diode).
Ovaj se IC obično koristi za pogon LED 7 -segmentnih zaslona, ali imao je vrlo sličan slučaj korištenja s mojim, osvjetljavajući proizvoljan broj LED dioda s minimalnim treperenjem, čak ima i kontroliranu svjetlinu.
Odlučio sam koristiti protoboard za ožičenje, ali orao je bio od pomoći pri postavljanju dijelova i razumijevanju ožičenja
Priložio sam datoteke s ploče, ali ovo je bilo prvi put da koristim eagle (i zastarjelu verziju do sada) pa su samo za referencu
Korak 6: Ožičenje elektronike
Ovo je bio ponavljajući jednostavan korak, slijedeći Eagleovu shemu, upotreba zaglavlja za ESP i LED matrica uvelike su pomogli pri sastavljanju.
Pin 1 na anodnim i katodnim LED zaglavljima bio je označen srebrnom oštricom, mogli su se razlikovati kao što je 7 bilo ostalih 8.
Korak 7: Programiranje
Kako naš zaslon nije tradicionalna matrica, morao sam pronaći metodu za vizualizaciju koje bitove treba uključiti koje je poslao na MAX IC u HEX. Srećom, znam samo dovoljno excela da upadnem u nevolje i napravio sam 'hex čarobnjaka' koji će me voditi iako je uzorak koji sam želio prikazati, ručno postavljene potvrdne okvire sve.
To je došlo s revalorizacijom da se heksadecimalni broj mojih sati, minuta i sekundi može kombinirati pomoću bitova ILI za proizvodnju posljednje hex naredbe za slanje na max7219, uključujući malu animaciju koju sam dodao sekundama kako bih mogao biti siguran da je ploča nije bilo smrznuto.
Dakle, gotovo pri kraju. i vrijeme za drugu odluku koja nije odležala previše dobro.
Kôd za ESP je u LUA -i. Danas bih preporučio korištenje arduino IDE -a radi bolje dokumentacije i robusne biblioteke paketa, u vrijeme kada je ESP zajednica još sazrijevala, a ja sam izabrao LUA kao jezik za ovaj projekt.
Donio sam upitnu odluku da redovito pingam google poslužitelje kako bih pročitao vrijeme. To je zaobišlo potrebu za RTC -om za smanjenje zanošenja, ovo funkcionira, ali vama bi bilo bolje da koristite API za istinsko vrijeme.
polusek = 0sat = 0 minuta = 0 sekundi = 0
nizak intenzitet = 0
visoki intenzitet = 9
lokalni SSID = "Wifi"
local SSID_PASSWORD = "Lozinka"
function time () -povežite se s internetom kako biste dobili trenutno vrijeme i datum
ako wifi.sta.getip () tada lokalni conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")
conn: on ("veza", funkcija (conn, korisni teret) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Prihvati: */ *\ r / n".. " Korisnički agent: Mozilla/4.0 (kompatibilan; esp8266 Lua;) ".." / r / n / r / n ") kraj)
conn: on ("primi", function (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -pronaći niz vremena i datuma u korisnom opterećenju s interneta, promijeniti za vremensku zonu ako je p ~ = nil then-izdvojite brojeve koji odgovaraju satu, minuti, sekundi, danu, mjesecu sat = tonumber (string.sub (korisni teret, p-9, p-8)) minute = tonumber (string.sub (korisni teret, p- 6, p-5)) druga = broj (string.sub (korisni teret, p-3, p-2)) addHour ()-tvrdo kodirano BST (britansko ljetno vrijeme) ljetna ušteda ispisa (sat, minuta, druga) polusek = (drugi%6)*2 --print (halfSec) else ispis ("ažuriranje weba nije uspjelo!") end end -function) --end na "primiti" rukovatelj događaja
conn: on ("prekid veze", funkcija (conn, korisni teret) conn = nil korisni teret = nil end) kraj ispisa ("još nema WiFi") kraj
funkcija borTable (a, b, …) -zajedno po bitovima ILI tablice
ako je arg [1] tada je b = borTable (b, raspakiraj (arg)) kraj lokalnog z = {} za i, v u ipairima (a) do table.insert (z, bit.bor (v, b )) end return z end
funkcija bxorTable (a, b, …) -zajedno po bitovima ILI tablice
ako arg [1] tada je b = bxorTable (b, raspakiraj (arg)) završi lokalno z = {} za i, v u ipairima (a) učini tablicu.insert (z, bit.bxor (v, b )) end return z end
funkcija addSecond ()
second = second+1 if second> = 60 then second = 0 minute = minute+1 if minute> = 60 then minute = 0 addHour () end end end
funkcija addHour ()
sat = sat+1 ako je sat> = 24 tada je sat = 0 kraj ako je sat == 2 ili sat == 16 tada max7219.setIntensity (lowIntensity) završava ako je sat == 8 ili sat == 18 tada max7219.setIntensity (visoki intezitet) 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, 0x0C, }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x0C, 0x0C, 0x04, 0x04, 0x0C, 0x0C, 0x04, 0x0C, 0x0C, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, 0C0, 0x0C, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4, 0x4, 0x4, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48} {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48} {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48} {0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -ispis (sat, minuta, sekunda)
-tablica počinje s 0, pa u 1 kao trenutno sec [0] = nula)
max7219.write ({animate (borTable (sec [1+ (second/secGap)]), min [1+ (minute/minGap)], hor [1+ (sat/horGap)])}})
kraj --funkcija
wifi.setmode (wifi. STATION)
wifi.sta.config (SSID, SSID_PASSWORD) wifi.sta.autoconnect (1)
--konfigurirajte max7219
max7219 = zahtijevaju ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intenzitet = visoki intenzitet})
-Glavni program
checkOnline = tmr.create ()
tmr.alarm (0, 180000, 1, vrijeme)
tmr.alarm (1, 1000, 1, addSecond)
tmr.alarm (2, 500, 1, ažuriranje)
funkcija animirana (mirna)
lokalni okviri = {{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 ako halfSec> = 12 tada halfSec = 0 kraj -ispis (halfSec) povratak bxorTable (okviri [halfSec+1], mirni) kraj
Korak 8: Stanovanje
Sada je vrijeme da pokažete svoju nevjerojatnu vještinu i smjestite projekt.
Ili to ili uzmite amazonski paket iz recikliranja i napravite privremeno stanovanje koje se i danas koristi.
Prednost korištenja ovog pristupa bila je u tome što je svaki sloj projekta gotovo savršeno odgovarao debljini kartona, tako da se sendvič mogao slagati i lijepiti zajedno. Slična premium verzija mogla bi koristiti akril
Korak 9: Zatvaranje napomena
Hvala vam na čitanju. Kao što mnogi od vas znaju dokumentiranje projekta može biti jednako teško kao i izrada. postoje dijelovi videa sa mnom koji razgovaraju koji bi na kraju mogli ugledati svjetlo dana.
U godinama između izrade ovog projekta i njegovog pisanja očekivao sam da ću vidjeti više primjera proizvoljnih LED zaslona koji koriste 3D ispis, ali smanjenje RGB traka uglavnom je uklonilo potrebu za alternativom.
Nadam se da je ovo bilo informativno, pa postavite pitanja jer ću pokušati dati više detalja o odjeljcima koji ne zadovoljavaju u potpunosti.
Živjeli
Preporučeni:
Sat za umirovljenje / Brojanje sati / Dn sat: 4 koraka (sa slikama)
Umirovljenički sat / Brojanje gore / Dn sat: Imao sam nekoliko ovih 8x8 LED matričnih zaslona u ladici i razmišljao sam što ću s njima. Nadahnut drugim instrukcijama, došao sam na ideju da napravim zaslon za odbrojavanje/povećanje za odbrojavanje do budućeg datuma/vremena i ako ciljno vrijeme p
Vortex sat: Infinity Mirror ručni sat: 10 koraka (sa slikama)
Vortex Watch: Infinity Mirror ručni sat: Cilj ovog projekta bio je stvoriti nosivu verziju beskonačnog zrcalnog sata. Koristi svoje RGB LED diode za označavanje vremena dodjeljujući sate, minute i sekunde crvenom, zelenom i plavom svjetlu i preklapajući ove nijanse t
C51 4 -bitni elektronički sat - drveni sat: 15 koraka (sa slikama)
C51 4 -bitni elektronički sat - drveni sat: Imao sam slobodnog vremena ovog vikenda pa sam otišao naprijed i sastavio ovaj 4 -bitni elektronički digitalni sat od 2,40 USD koji sam kupio prije nekog vremena na AliExpressu
Pretvorite obični kućni sat u samosvijetleći sat: 8 koraka (sa slikama)
Pretvorite kućni obični sat u samosvijetleći sat: PRVO DAJEM SVOJU SRČNU HVALU INSTRUKTIVNIM TIMOVIMA DA MOGU ZDRAVSTVENE DANE Oporavak učini što odgovornijim ….. U ovim uputama želim podijeliti s vama kako pretvoriti svoj kućni obični sat u samosvijetli sat. > > Za ovo
Napravite pravi sat koji zvoni za vaše računalo i sat za gašenje požara: 3 koraka (sa slikama)
Napravite pravi sat za svoje računalo i sat za udaranje vatrogasnih aparata: Mesingano zvono, mali relej, još nekoliko stvari i pravo zvono mogu otkucati sate na vašoj radnoj površini. Iako ovaj projekt radi na Windowsima i Mac-u OS X također, odlučio sam instalirati Ubuntu Linux na računalo koje sam našao u smeću i poraditi na tome: nikad nisam