Obsah:

Hodiny mapy londýnského metra: 9 kroků (s obrázky)
Hodiny mapy londýnského metra: 9 kroků (s obrázky)

Video: Hodiny mapy londýnského metra: 9 kroků (s obrázky)

Video: Hodiny mapy londýnského metra: 9 kroků (s obrázky)
Video: Top 10 nejnebezpečnějších tobogánů na světě! 2021 2024, Listopad
Anonim
Hodiny mapy londýnského metra
Hodiny mapy londýnského metra
Hodiny mapy londýnského metra
Hodiny mapy londýnského metra

V roce 2014, na konci stáže v poradně 3D tisku v Londýně a experimentu s barevnými litofany pomocí jejich stroje Stratasys, navrhuji svůj vlastní odcházející dárek, barevný 3D tisk trubkových linek lokálně do jejich kanceláří. Byl jsem rozhodnutý z toho něco udělat. Krátce o 2 roky později v roce 2016 jsem měl vlastní 3D tiskárnu a pustil se do výroby hodin.

Jako dítě jsem považoval digitální hodinky Tokio Flash za nejlepší věci vůbec, a to je věc, která by byla inspirací pro design.

A teď to byla jen malá 4letá přestávka, než jsem se dostal k napsání!

Zatímco přesné pokyny bude obtížné replikovat a snížení nákladů na výrobu PCB pro nadšence v posledních několika letech by mohlo způsobit, že moje přesná metoda pro umístění LED bude zastaralá. Doufám, že sdílené nápady mohou vést k tomu, že si ostatní vyrobí podivné hodiny z tenkých předmětů!

Krok 1: Přední vrstva

Přední vrstva
Přední vrstva
Přední vrstva
Přední vrstva
Přední vrstva
Přední vrstva

Jak bylo uvedeno v úvodu, jednalo se o barevný 3D tisk, domnívám se, že stroj Stratasys, který používal práškové lože a upravenou inkoustovou kazetu na pojivo a pigment.

Soubor je ztracen v historii, ale tato vrstva může být cokoli, fotografie nebo jednobarevný lithofan by dělaly zázraky.

Tato část byla vytvořena ve 3DS max v roce 2014, ale dnes existují online nástroje pro přeměnu obrazu na SLT na základě jasu

Krok 2: Navrhování vodicí vrstvy

Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy
Navrhování vodicí vrstvy

Zde rozhodujeme o složitosti projektu a způsobu čtení času. Obrázky ukazují 2 nápady, se kterými jsem si hrál.

Ty byly vytvořeny skenováním v designu a kreslením čar přes něj v inkscape.

Nejsou to příliš čitelné hodiny, ale upřednostňoval jsem myšlenku vyplňování řádků po celý den, takže se to stalo cílem návrhu.

Binární počítání je životaschopnou metodou pro snížení počtu LED diod a zlepšilo by to čitelnost, pokud je binární váš jam, ale to podkopalo moji myšlenku „vyplnění řádků“, takže pro tento projekt nebyla volba

Na hodinkách Tokio Flash je běžné minimalizovat počet LED diod, ale když se jedna sekce počítá do 3 nebo 5 let a pak se vyplní pokaždé, když se sekce naplní, použil jsem tuto techniku pro minuty, abych je snížil ze 60 na 20 plus 2. I o tuhle přesnost si už tolik sekund nedělal.

Krok 3: Budování vodicí vrstvy

Budování vodicí vrstvy
Budování vodicí vrstvy
Budování vodicí vrstvy
Budování vodicí vrstvy
Budování vodicí vrstvy
Budování vodicí vrstvy

Tato vodicí vrstva pro LED diody má 2 účely, drží LED na svém místě a zabraňuje rozlití mezi nimi

Byl nakreslen jako vrstva v Inkscape přímo na sken, který jsem používal pro návrhové rozvržení. Před odesláním do mé tiskárny byla do mixéru přidána tloušťka 1 mm.

Toto byl jeden z nejtvrdších tisků, které jsem musel udělat na mém skromném Makiboxu A6, část byla vytištěna na břiše, takže byla použita tuna acetonové kaše, aby byla připevněna k platformě stavby s minimálním pokřivením. Naštěstí tato část není na konečném produktu vidět

Poslední obrázek ukazuje, že držel lampu, aby zkontroloval mezery.

Při zpětném pohledu může být přelévání mezi světly podél čáry ve skutečnosti pro vizuály výhodnější, není hůře čitelné, toho lze dosáhnout přidáním zkosení do vodítka na krátkých stranách každého světla

Krok 4: Zapojení LED diod

Zapojení LED diod
Zapojení LED diod
Zapojení LED diod
Zapojení LED diod
Zapojení LED diod
Zapojení LED diod

První obrázek ukazuje testovací výtisk, který jsem vytvořil pro kontrolu velikosti děr, mířil jsem na to, aby LED dioda s malou silou těsně zapadla do krajky, správný tvar byl poté ručně položen při rozložení vodicí vrstvy.

Vzhledem k nízké toleranci mé 3D tiskárny byly některé uvolněné a vyžadovaly kousek lepidla, aby zůstaly na místě, zatímco jiné byly příliš těsné, ale byly vyzvány na místo stisknutím LED při pájení, to bylo ve skutečnosti vhodnější než správně dimenzovaný otvor, který měl nájemník vytáhnout, jakmile byl zapojen.

Aby se snížil počet vodičů, LED diody byly pájeny v matici 7 x 8, což znamená, že všech 55 LED diod bylo možné ovládat pouze 13 piny. Měl jsem ručně nakreslenou mapu každého z těchto připojení, která byla bohužel ztracena.

Byl použit smaltovaný drát, takže části mohly být vystaveny na místě zahřátím sekce žehličkou a cínováním před vytvořením spojení.

Tento proces byl velmi časově náročný, vřele doporučuji navrhnout desku plošných spojů

Krok 5: Navrhování elektroniky

Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky
Navrhování elektroniky

Mým původním plánem bylo použít mikrokontrolér Arduino s RTC, ale rozhodl se pro ESP8266 na desce Node MCU D1, protože to umožňovalo automatické přepínání denního světla a možnost kontroly nad WIFI.

Abych dále snížil počet pinů, měl jsem perfektní počet LED diod, abych mohl použít MAX7219 (který zvládne až 64 LED).

Tento integrovaný obvod se běžně používá k pohonu LED 7segmentových displejů, ale měl velmi podobný případ použití jako já, osvětlení libovolného počtu LED diod s minimálním blikáním, dokonce má regulovatelný jas.

Rozhodl jsem se použít protoboard pro zapojení, ale orel byl užitečný pro umístění dílů a porozumění zapojení

Připojil jsem své desky, ale toto bylo poprvé, co jsem použil orla (a nyní zastaralou verzi), takže jsou pouze pro informaci

Krok 6: Zapojení elektroniky

Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky
Zapojení elektroniky

Jednalo se o opakující se jednoduchý krok, podle schématu Eagle, použití hlaviček pro ESP a matice LED velmi pomohlo při montáži.

Kolík 1 na LED diodách Anode & Cathode byl označen stříbrným ostřím, mezi nimi bylo možné rozlišit jako na 7 ostatních 8.

Krok 7: Programování

Programování
Programování

Protože náš displej není tradiční matice, musel jsem najít způsob vizualizace, které bity zapnout, které poslaly do MAX IC v HEXu. Naštěstí vím dost Excelu na to, abych se dostal do potíží, a udělal jsem „Hex Wizard“, který mě provedl vzorem, který jsem chtěl, a ručně umístěnými zaškrtávacími políčky.

To přišlo s přehodnocením, že hex pro mou hodinu, minutu a sekundu lze kombinovat pomocí bitového NEBO k vytvoření konečného hexadecimálního příkazu k odeslání na max7219, včetně malé animace, kterou jsem přidal do sekund, abych se mohl ujistit, že deska nezmrzl.

Takže téměř na konci. a čas na další rozhodnutí, které příliš nezestárlo.

Kód pro ESP je v LUA, dnes bych doporučil použít arduino IDE pro jeho lepší dokumentaci a robustní knihovnu balíčků, v době, kdy komunita ESP ještě dozrávala a já jsem si jako jazyk pro tento projekt vybral LUA.

Udělal jsem diskutabilní rozhodnutí pravidelně pingovat servery Google, abych přečetl čas. To se obešlo, když potřebujete RTC k minimalizaci driftu, to funguje, ale vy byste měli být lepší s použitím API v reálném čase.

halfSec = 0hodina = 0 minut = 0 sekund = 0

lowIntensity = 0

vysoká intenzita = 9

místní SSID = "Wifi"

local SSID_PASSWORD = "Heslo"

function time () -připojte se k internetu a získejte aktuální čas a datum

if wifi.sta.getip () then local conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")

conn: on ("připojení", funkce (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Accept: */ *\ r / n".. " User-Agent: Mozilla/4.0 (kompatibilní; esp8266 Lua;) ".." / r / n / r / n ") konec)

conn: on ("receive", function (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -find the time and date string in the payload from internet, change for timezone if p ~ = pak nula-extrahujte čísla odpovídající hodině, minutě, vteřině, dni, měsíci hodině = tonumber (string.sub (užitečné zatížení, p-9, p-8)) minuta = tonumber (string.sub (užitečné zatížení, p- 6, p-5)) s = (druhá%6)*2 --print (halfSec) else tisk („aktualizace webu se nezdařila!“) konec konec -funkce) -konec obsluhy události „příjem“

conn: on ("odpojení", funkce (conn, payload) conn = nil payload = nil end) end print ("no wifi yet") end

funkce borTable (a, b, …) --bitově NEBO tabulky dohromady

if arg [1] then b = borTable (b, unpack (arg)) end local z = {} for i, v in ipairs (a) do table.insert (z, bit.bor (v, b )) konec návrat z konec

funkce bxorTable (a, b, …) --bitově NEBO tabulky dohromady

if arg [1] then b = bxorTable (b, unpack (arg)) end local z = {} for i, v in ipairs (a) do table.insert (z, bit.bxor (v, b )) konec návrat z konec

funkce addSecond ()

sekunda = sekunda+1 pokud sekunda> = 60 pak sekunda = 0 minut = minuta+1 pokud minuta> = 60 pak minuta = 0 addHour () konec konec konec

funkce addHour ()

hodina = hodina+1 pokud hodina> = 24 pak hodina = 0 konec pokud hodina == 2 nebo hodina == 16 pak max7219.setIntensity (lowIntensity) konec pokud hodina == 8 nebo hodina == 18 pak max7219.setIntensity (vysoká intenzita) end end update 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 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; místní 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}}; místní 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, 0, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x08, 0x0C, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; --print (hodina, minuta, sekunda)

-tabulka začíná na 0, takže v 1 jako aktuálně sek [0] = nula)

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

konec -funkce

wifi.setmode (wifi. STATION)

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

--konfigurujte max7219

max7219 = vyžadovat ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intenzita = vysoká intenzita})

--Hlavní program

checkOnline = tmr.create ()

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

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

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

funkce animovat (stále)

místní rámce = {{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 if halfSec> = 12 then halfSec = 0 end --print (halfSec) return bxorTable (frames [halfSec+1], still) end

Krok 8: Bydlení

Bydlení
Bydlení
Bydlení
Bydlení
Bydlení
Bydlení

Nyní je čas předvést své neuvěřitelné řemeslné umění a realizovat projekt.

Buď to, nebo si vezměte balíček Amazon z recyklace a vytvořte dočasné bydlení, které se používá dodnes.

Výhodou použití tohoto přístupu bylo, že každá vrstva projektu téměř dokonale odpovídala tloušťce lepenky, takže sendvič mohl být stohován a lepen dohromady. Podobná prémiová verze by mohla použít akryl

Krok 9: Závěrečné poznámky

Děkujeme za přečtení. Jak mnozí z vás víte, zdokumentování projektu může být stejně obtížné jako jeho realizace. objevují se útržky videa, kde mluvím a které možná nakonec spatří světlo světa.

V letech mezi vytvořením tohoto projektu a jeho napsáním jsem očekával více příkladů libovolných LED displejů využívajících 3D tisk, ale redukce RGB pásků většinou odstranila potřebu alternativy.

Doufám, že to bylo informativní, a pokládejte otázky, pokusím se poskytnout podrobnější informace o částech, které plně nevyhovují.

Na zdraví

Doporučuje: