Obsah:
- Krok 1: Přední vrstva
- Krok 2: Navrhování vodicí vrstvy
- Krok 3: Budování vodicí vrstvy
- Krok 4: Zapojení LED diod
- Krok 5: Navrhování elektroniky
- Krok 6: Zapojení elektroniky
- Krok 7: Programování
- Krok 8: Bydlení
- Krok 9: Závěrečné poznámky
Video: Hodiny mapy londýnského metra: 9 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
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
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
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
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
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
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
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í
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í
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:
Vytvořte vlastní mapy pro svůj Garmin GPS: 8 kroků (s obrázky)
Vytvářejte vlastní mapy pro svůj Garmin GPS: Pokud máte Garmin GPS určený pro turistiku a další outdoorové aktivity (včetně řady GPSMAP, eTrex, Colorado, Dakota, Oregon a Montana, mimo jiné), nemusíte spokojit se s mapami holých kostí, které na něm byly předem načteny. E
Jak vytvořit vlastní stylizované mapy pomocí OpenStreetMap: 7 kroků (s obrázky)
Jak vytvářet vlastní stylizované mapy pomocí OpenStreetMap: V tomto návodu popíši postup, pomocí kterého můžete generovat vlastní stylizované mapy na míru. Stylizovaná mapa je mapa, kde uživatel může určit, které datové vrstvy jsou vizualizovány, a také definovat styl, ve kterém je každá vrstva
C51 4bitové elektronické hodiny - dřevěné hodiny: 15 kroků (s obrázky)
C51 4bitové elektronické hodiny - dřevěné hodiny: Měl jsem o víkendu trochu volného času, takže jsem šel dopředu a sestavil jsem tyto digitální bity se 4 -bitovými digitálními hodinami v hodnotě 2,40 USD, které jsem před chvílí koupil od AliExpress
Převeďte domácí obyčejné hodiny na samostatně zářící hodiny: 8 kroků (s obrázky)
Převeďte domácí obyčejné hodiny na samostatně zářící hodiny: PRVNÍ DÁVÁM SVÉ HEARTILKY DÍKY INSTRUKTIVNÍM TÝMU, KTERÝ SE MÉM ZDRAVOTNÍM DENŮM ZÍSKÁVÁ DEN ODPOVĚDNĚJI ….. V tomto návodu se s vámi chci podělit o to, jak převést domácí běžné hodiny do samostatně zářících hodin. > > Za to, že
Navigujte robota se senzory obuvi, bez GPS, bez mapy: 13 kroků (s obrázky)
Navigujte robota pomocí snímačů obuvi, bez GPS, bez mapy: Robot se pohybuje po předem naprogramované dráze a přenáší (přes bluetooth) své aktuální informace o pohybu do telefonu pro sledování v reálném čase. Arduino je předprogramováno s dráhou a oblu slouží k snímání pohybu robota. oblu přenáší pohyb pro