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, Novembar
Anonim
Londonski sat podzemne karte
Londonski sat podzemne karte
Londonski sat podzemne karte
Londonski sat podzemne karte

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

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

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.

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

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

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

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

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š 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

The Housing
The Housing
The Housing
The Housing
The Housing
The Housing

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: