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 izmjena: 2024-01-30 08:04
2014. godine, nakon stažiranja u konsultantskoj kući za 3D štampanje u Londonu i eksperimenta sa litofanom u boji koristeći njihovu mašinu Stratasys, dizajnirao sam svoj vlastiti poklon za odlazak, kolorni 3D ispis linija cijevi u njihovim uredima. Bio sam odlučan da napravim nešto od toga. Kratke 2 godine kasnije, 2016. godine, imao sam vlastiti 3D štampač i počeo sam raditi na tome da od njega napravim sat.
Kao klinac mislio sam da su Tokyo Flash digitalni satovi najveće stvari ikad, pa sam se potrudio da to bude inspiracija za dizajn.
A sada je prošlo samo 4 godine pauze dok nisam stigao to napisati!
Iako će se točna uputstva teško ponoviti, a smanjenje troškova u proizvodnji hobističkih PCB -a u posljednjih nekoliko godina moglo bi učiniti moju tač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 bila Stratasys mašina koja je koristila sloj praha i modifikovani kertridž sa mastilom za vezivo i pigment.
Datoteka je izgubljena u istoriji, ali ovaj sloj može biti bilo šta, fotografija ili litofan u jednoj boji učinili bi čuda.
Ovaj dio je napravljen u 3DS maxu 2014. godine, ali danas postoje mrežni alati za pretvaranje slike u SLT na osnovu 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.
Oni su napravljeni 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 cijeli dan, 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 dio broji u 3 ili 5, a zatim još jedno popunjavanje 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 bio toliko zabrinut 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 Inkscape -u direktno na vrhu skeniranja koje sam koristio za izgled dizajna. U blender je dodana debljina 1 mm prije slanja na štampač.
Ovo je bio jedan od najtežih otisaka koje moram napraviti na svom oskudnom Makiboxu A6, dio je otisnut u trbušnjacima tako da 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 lampe kako bi provjerila ima li razmaka.
Gledajući unatrag, izlijevanje između svjetla duž linije moglo bi zapravo biti poželjnije za vizuale, nije teže za čitanje, to se može 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 je ručni postavljanje pravilnog oblika prilikom postavljanja vodećeg sloja.
Zbog niske tolerancije mog 3D štampača, neki su bili labavi i zahtijevali su malo ljepila da ostanu na mjestu, dok su drugi bili previše čvrsti, ali su ohrabreni pritiskom na LED tijekom lemljenja, što je zapravo bolje odgovaralo rupa ispravne veličine, koja je morala da se izvuče nakon što je priključena.
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 nacrtunu kartu svake od ovih veza koja je nažalost izgubljena.
Korištena je emajlirana žica kako bi se dijelovi mogli izložiti zagrijavanjem dijela sa željezom i kalajisanjem prije spajanja.
Ovaj proces je dugotrajan, toplo preporučujem dizajniranje PCB -a
Korak 5: Dizajniranje elektronike
Moj prvi plan je bio da koristim Arduino mikrokontroler sa RTC -om, ali sam se odlučio za ESP8266 na Node MCU D1 ploči jer je dopuštao automatsko ljetno računanje vremena i mogućnost kontrole nad WIFI -jem.
Da 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 mi je bio od pomoći pri postavljanju dijelova i razumijevanju ožičenja
Priložio sam svoje 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š ekran 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.
Ovo 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 nisam bio zamrznut.
Dakle, skoro na kraju. i vrijeme za novu odluku koja nije ostarila 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 sumnjivu odluku da redovno pingem google servere da očitam vrijeme. Ovo je zaobišlo potrebu za RTC -om za minimiziranje zanošenja, ovo funkcionira, ali vama bi bilo bolje da koristite API za pravo vrijeme.
halfSec = 0hour = 0 minute = 0 second = 0
lowIntensity = 0
visoki intenzitet = 9
lokalni SSID = "Wifi"
local SSID_PASSWORD = "Lozinka"
function time () -povežite se na internet da biste dobili trenutno vrijeme i datum
ako wifi.sta.getip () onda 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 (kompatibilno; 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 satima, minutima, sekundama, danima, mjesečnim satima = 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 ()-teško kodirano BST (britansko ljetno vrijeme) ljetno računanje ispisa (sat, minut, druga) polusek = (second%6)*2 --print (halfSec) else print ("ažuriranje weba nije uspjelo!") end end -function) -kraj uključenog rukovaoca događaja "primi"
conn: on ("prekid veze", funkcija (conn, payload) conn = nil payload = nil end) kraj ispisa ("još nema WiFi") kraj
funkcija borTable (a, b, …) -zajedno po bitovima ILI tabele
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 tabele
ako arg [1] tada b = bxorTable (b, raspakiraj (arg)) završava lokalni z = {} za i, v u ipairima (a) radi table.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) update end funkcija 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, 0x08 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x0C, 0c0,, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, 0 0, 0, 0, 0, 0 0x0C 0x0C 0x0C 0x48}, 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}}; -otisak (sat, minut, sekunda)
--tabela 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 intezitet})
-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 --print (halfSec) vraća bxorTable (okviri [halfSec+1], mirni) kraj
Korak 8: Stanovanje
Sada je vaše vrijeme da pokažete svoju nevjerovatnu 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 je sendvič mogao biti složen i zalijepljen 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 snimci sa mojim pričanjem 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 ekrana koji koriste 3D štampanje, ali smanjenje RGB traka uglavnom je uklonilo potrebu za alternativom.
Nadam se da je ovo bilo informativno i postavljajte pitanja jer ću pokušati dati više detalja o odjeljcima koji ne zadovoljavaju u potpunosti.
Živjeli
Preporučuje se:
Sat za penziju / Odbrojavanje / Dn sat: 4 koraka (sa slikama)
Sat za odlazak u penziju / Odbrojavanje / Dn sat: U ladici sam imao nekoliko ovih 8x8 LED matričnih ekrana i razmišljao sam šta ću s njima. Inspirisan drugim instrukcijama, došao sam na ideju da napravim ekran za odbrojavanje/povećanje za odbrojavanje do budućeg datuma/vremena i ako ciljno vreme p
Vortex sat: ručni sat s ogledalom u beskonačnosti: 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
Sonda za mjerenje nivoa podzemne vode za postavke niskih resursa: 4 koraka (sa slikama)
Sonda za mjerenje nivoa podzemnih voda za postavke niskih resursa: Uvod Primili smo zahtjev od Oxfama da razvijemo jednostavan način na koji bi školska djeca u Afganistanu mogla pratiti nivo podzemnih voda u obližnjim bunarima. Ovu stranicu je na dari preveo dr. Amir Haidari, a prijevod se može
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 digitalni digitalni sat od 2 bita 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 vaš kućni obični sat u samosvijetleći sat. > > Za ovo