Sadržaj:

Sat londonske podzemne karte: 9 koraka (sa slikama)
Sat londonske podzemne karte: 9 koraka (sa slikama)

Video: Sat londonske podzemne karte: 9 koraka (sa slikama)

Video: Sat londonske podzemne karte: 9 koraka (sa slikama)
Video: Красивая история о настоящей любви! Мелодрама НЕЛЮБОВЬ (Домашний). 2024, Srpanj
Anonim
Londonski sat podzemne karte
Londonski sat podzemne karte
Londonski sat podzemne karte
Londonski sat podzemne karte

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

Prednji sloj
Prednji sloj
Prednji sloj
Prednji sloj
Prednji sloj
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

Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
Dizajniranje sloja vodiča
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

Izgradnja sloja vodiča
Izgradnja sloja vodiča
Izgradnja sloja vodiča
Izgradnja sloja vodiča
Izgradnja sloja vodiča
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

Ožičenje LED dioda
Ožičenje LED dioda
Ožičenje LED dioda
Ožičenje LED dioda
Ožičenje LED dioda
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

Projektiranje elektronike
Projektiranje elektronike
Projektiranje elektronike
Projektiranje elektronike
Projektiranje elektronike
Projektiranje elektronike
Projektiranje elektronike
Projektiranje 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

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

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

Programiranje
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

Stanovanje
Stanovanje
Stanovanje
Stanovanje
Stanovanje
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: