Sisällysluettelo:

Lontoon maanalainen karttakello: 9 vaihetta (kuvilla)
Lontoon maanalainen karttakello: 9 vaihetta (kuvilla)

Video: Lontoon maanalainen karttakello: 9 vaihetta (kuvilla)

Video: Lontoon maanalainen karttakello: 9 vaihetta (kuvilla)
Video: TARINA KIUSATUSTA 2024, Marraskuu
Anonim
Lontoon maanalainen karttakello
Lontoon maanalainen karttakello
Lontoon maanalainen karttakello
Lontoon maanalainen karttakello

Vuonna 2014 suunnittelen omaa lähdölahjaani, värillistä 3D -tulosta heidän toimistojensa paikallisista putkilinjoista, Lontoon 3D -tulostuskonsultoinnin harjoittelun jälkeen ja kokeilin värillitofaaneja heidän Stratasys -koneellaan. Olin päättänyt tehdä siitä jotain. Lyhyet kaksi vuotta myöhemmin vuonna 2016 minulla oli oma 3D -tulostin ja ryhdyin tekemään siitä kelloa.

Lapsena pidin Tokyo Flash -digitaalikelloista kaikkien aikojen suurimpia asioita, ja tämä oli suunnittelun inspiraatiopiste.

Ja nyt on ollut vain pieni 4 vuoden tauko, kunnes olen päässyt kirjoittamaan sen!

Vaikka tarkkoja ohjeita on vaikea toistaa, ja harrastajien piirilevyjen valmistuskustannusten aleneminen parin viime vuoden aikana saattaa tehdä tarkan menetelmäni LED -sijoittelusta vanhentuneeksi. Toivottavasti jaetut ideat voivat johtaa siihen, että muut tekevät oudoista kelloista ohuista esineistä!

Vaihe 1: Etukerros

Etukerros
Etukerros
Etukerros
Etukerros
Etukerros
Etukerros

Kuten esittelyssä mainittiin, tämä oli värillinen 3D -tulostus, uskon Stratasys -koneen, joka käytti jauhepohjaa ja muokattua mustepatruunaa sideaineeseen ja pigmenttiin.

Tiedosto on kadonnut historiaan, mutta tämä kerros voi olla mikä tahansa, valokuva tai yksivärinen litofaani tekisi ihmeitä.

Tämä osa tehtiin 3DS max -muodossa vuonna 2014, mutta nykyään on olemassa online -työkaluja kuvan muuttamiseksi SLT: ksi kirkkauden perusteella

Vaihe 2: Ohjauskerroksen suunnittelu

Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu
Ohjauskerroksen suunnittelu

Tässä päätämme projektin monimutkaisuuden ja ajan lukemisen menetelmän. Kuvat osoittavat 2 ideaa, joilla leikin.

Nämä tehtiin skannaamalla suunnitteluun ja piirtämällä viivoja sen yli inkScapessa.

Tämä ei ole kovin luettava kello, mutta mieluummin ajatus siitä, että rivit täyttyvät koko päivän, niin siitä tuli suunnittelutavoite.

Binäärilukeminen on toteuttamiskelpoinen menetelmä LED -lukumäärän vähentämiseksi, ja se parantaisi luettavuutta, jos binääri on tukoksesi, mutta se heikensi `` täyttölinjojen '' ajatusta, joten se ei ollut vaihtoehto tälle projektille

Tokion flash -kelloissa on tavallista minimoida LED -lukumäärä, mutta kun yksi osa lasketaan 3: ssa tai 5: ssä ja sitten toinen täyttö joka kerta, kun osa täyttyy, käytin tätä tekniikkaa minuutteina vähentääkseni ne 60: stä 20: een. I ei ollut niin huolissani tarkkuudesta sekunneissa.

Vaihe 3: Ohjauskerroksen rakentaminen

Ohjauskerroksen rakentaminen
Ohjauskerroksen rakentaminen
Ohjauskerroksen rakentaminen
Ohjauskerroksen rakentaminen
Ohjauskerroksen rakentaminen
Ohjauskerroksen rakentaminen

Tällä LED -ohjainkerroksella on kaksi tarkoitusta, se pitää LEDit paikallaan ja estää niiden vuotamisen

Se piirrettiin kerrokseksi Inkscapessa suoraan skannauksen päälle, jota käytin suunnittelussa. 1 mm paksuus lisättiin tehosekoittimeen ennen lähettämistä tulostimelle.

Tämä oli yksi vaikeimmista tulosteista, jotka minun on tehtävä niukalle Makibox A6 -laitteelleni, osa painettiin abs -painikkeella, joten tonnia asetonilietettä käytettiin pitämään se kiinni alustaan minimaalisen vääntymisen vuoksi. Onneksi tätä osaa ei näy lopputuotteessa

Lopullinen kuva osoittaa, että se pidettiin lamppua vasten etäisyyden tarkistamiseksi.

Jälkeenpäin ajatellen valojen välinen vuoto viivaa pitkin voisi olla mieluummin visuaalille, ei ole vaikeampaa lukea, tämä voitaisiin saavuttaa lisäämällä viiste jokaisen valon lyhyillä sivuilla olevaan ohjaimeen

Vaihe 4: Kytke LED -valot

LEDien kytkentä
LEDien kytkentä
LEDien kytkentä
LEDien kytkentä
LEDien kytkentä
LEDien kytkentä

Nyrkkikuvassa näkyy testikuvio, jonka tein reiän koon tarkistamiseksi. Tavoittelin, että LED mahtuu tiukasti pitsiin pienellä voimalla, oikea muoto asetettiin sitten käsin asetettaessa ohjauskerrosta.

3D -tulostimeni heikon toleranssin vuoksi jotkut olivat löysiä ja vaativat superliimaa, jotta ne pysyivät paikallaan, kun taas toiset olivat liian tiukkoja, mutta niitä kannustettiin paikalleen painamalla LED -valoa alas juottamisen aikana, tämä oli itse asiassa parempi istuvuus kuin oikean kokoinen reikä, jonka vuokrasopimus oli vedettävä ulos johdotuksen jälkeen.

Johtimien määrän vähentämiseksi LEDit juotettiin 7 x 8 matriisiin, mikä tarkoittaa, että kaikkia 55 LEDiä voitaisiin ohjata vain 13 nastalla, minulla oli käsin piirretty kartta jokaisesta näistä yhteyksistä, joka on valitettavasti kadonnut.

Käytettiin emalilankaa, joten osat voidaan paljastaa paikalleen lämmittämällä osaa raudalla ja tinaamalla ennen liitoksen tekemistä.

Tämä prosessi oli hyvin aikaa vievä, suosittelen lämpimästi piirilevyn suunnittelua

Vaihe 5: Elektroniikan suunnittelu

Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu
Elektroniikan suunnittelu

Alkuperäinen suunnitelmani oli käyttää Arduino -mikrokontrolleria RTC: n kanssa, mutta valitsin ESP8266: n Node MCU D1 -kortille, koska se mahdollisti automaattisen kesäajan säästämisen ja WIFI -yhteyden hallinnan.

Pistemäärän vähentämiseksi edelleen minulla oli täydellinen määrä LED -valoja voidakseni käyttää MAX7219: tä (joka pystyy käsittelemään jopa 64 LEDiä).

Tätä IC: tä käytetään yleisesti LED -segmenttinäyttöjen ohjaamiseen, mutta sen käyttötapa oli hyvin samanlainen kuin minun, se sytytti mielivaltaisen määrän LED -valoja vähäisellä välkkymisellä, ja siinä on jopa säädettävä kirkkaus.

Päätin käyttää protoboardia johdotukseen, mutta kotka auttoi osien sijoittamisessa ja johtimien ymmärtämisessä

Olen liittänyt levytiedostoni, mutta tämä oli ensimmäinen kerta, kun käytin kotkaa (ja vanhentunutta versiota tähän mennessä), joten ne ovat vain viitteellisiä

Vaihe 6: Elektroniikan kytkentä

Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus
Elektroniikan johdotus

Tämä oli toistuva yksinkertainen vaihe, joka seurasi Eaglen kaaviota, ESP: n otsikoiden ja LED -matriisin käyttäminen auttoi valtavasti kokoonpanossa.

Anodin ja katodin LED -otsikoiden nasta 1 oli merkitty hopeisella terävällä terällä, ne voidaan erottaa toisistaan, kuten 7 ja muut 8.

Vaihe 7: Ohjelmointi

Ohjelmointi
Ohjelmointi

Koska näyttömme ei ole perinteinen matriisi, minun piti löytää menetelmä visualisoida, mitkä bitit kytketään päälle ja jotka se lähetti MAX IC: lle HEX: ssä. Onneksi tiedän juuri sen verran exceliä, että joudun vaikeuksiin, ja tein "Hex Wizard" -oppaan, joka opastaa minua halutun kuvion näyttämisessä, käsin asetetuissa valintaruuduissa.

Tähän liittyi uudelleenarviointi siitä, että tunnin, minuutin ja sekuntien heksadesimaali voitaisiin yhdistää bitti -TAI käyttämällä lopullisen heksakomennon lähettämiseksi max7219: lle, mukaan lukien pieni animaatio, jonka lisäsin sekunteihin, jotta voin varmistaa, että levy ei ollut jäätynyt

Eli melkein lopussa. ja aika toiselle päätökselle, joka ei ole vanhentunut liian hyvin.

ESP: n koodi on LUA: ssa, tänään suosittelen käyttämään arduino IDE: tä paremman dokumentoinnin ja vankan pakettikirjaston tarjoamiseksi, sillä ESP -yhteisö oli vielä kypsymässä ja valitsin LUA: n tämän projektin kieleksi.

Tein kyseenalaisen päätöksen pingottaa Googlen palvelimet säännöllisesti ajan lukemiseksi. Tämä johti RTC: n tarpeeseen minimoidakseen ajautumisen, tämä toimii, mutta sinun olisi parempi käyttää tosiaikaista sovellusliittymää.

halfSec = 0 tunti = 0 minuutti = 0 sekunti = 0

lowIntensity = 0

highIntensity = 9

local SSID = "Wifi"

local SSID_PASSWORD = "Salasana"

toiminto aika () -muodosta Internet -yhteys saadaksesi kellonajan ja päivämäärän

jos wifi.sta.getip (), niin paikallinen conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")

conn: on ("yhteys", function (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Isäntä: time.is / r / n".. "Hyväksy: */ *\ r / n".. " User-Agent: Mozilla/4.0 (yhteensopiva; esp8266 Lua;) ".." / r / n / r / n ") end)

conn: on ("vastaanottaa", function (conn, payload) --print (payload) conn: close () local p = string.find (hyötykuorma, "GMT") -etsi aika- ja päivämääräjono hyötykuormasta Internetistä, muuta aikavyöhyke, jos p ~ = nolla sitten-poimi numerot, jotka vastaavat tunti, minuutti, sekunti, päivä, kuukausi tunti = tonumber (string.sub (hyötykuorma, p-9, p-8)) minuutti = tonumber (string.sub (hyötykuorma, p- 6, p-5)) toinen = tonumber (string.sub (hyötykuorma, p-3, p-2)) addHour ()-kovakoodattu BST (brittiläinen kesäaika) kesäaikaa säästävä tuloste (tunti, minuutti, sekunti) = (toinen%6)*2 --print (halfSec) else print ("web -päivitys epäonnistui!") end end -function) -"vastaanottamisen" tapahtumakäsittelijän loppu

conn: on ("katkaisu", toiminto (jatko, hyötykuorma)

funktio borTable (a, b,…) -välissä TAI taulukot yhdessä

jos arg [1] niin b = borTable (b, purkaa (arg)) end local z = {} i, v in ipairs (a) do table.insert (z, bit.bor (v, b )) end return z end

funktio bxorTable (a, b,…) -bittisesti TAI taulukot yhdessä

jos arg [1] niin b = bxorTable (b, purkaa (arg)) end local z = {} i, v ipairs (a) do table.insert (z, bit.bxor (v, b )) end return z end

toiminto addSecond ()

sekunti = sekunti+1, jos sekunti> = 60, sitten toinen = 0 minuutti = minuutti+1, jos minuutti> = 60 sitten minuutti = 0 lisäysTunti () loppu loppu

toiminto addHour ()

tunti = tunti+1 jos tunti> = 24 sitten tunti = 0 loppu, jos tunti == 2 tai tunti == 16 sitten max7219.setIntensity (lowIntensity) loppu jos tunti == 8 tai tunti == 18 sitten max7219.setIntensity (highIntensity) end end function 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, 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}}; paikallinen 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}, {0x0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x102 }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 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}}; paikallinen 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}, {0x04, 0x004, 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, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0x, 0x04, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x080, 0x0C, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48C, 0xC 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -tulosta (tunti, minuutti, sekunti)

--taulukko alkaa nollasta, joten kello 1 kuten tällä hetkellä sekunti [0] = nolla)

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

loppu -toiminta

wifi.setmode (wifi. STATION)

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

--konfiguroi max7219

max7219 = vaatia ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensiteetti = highIntensity})

-pääohjelma

checkOnline = tmr.create ()

tmr.hälytys (0, 180000, 1, aika)

tmr.hälytys (1, 1000, 1, addSecond)

tmr.alarm (2, 500, 1, päivitys)

toiminto animoi (still)

paikalliset kehykset = {{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, jos halfSec> = 12 sitten halfSec = 0 end --print (halfSec) return bxorTable (kehykset [halfSec+1], still) end

Vaihe 8: Kotelo

Asuminen
Asuminen
Asuminen
Asuminen
Asuminen
Asuminen

Nyt on aika näyttää uskomaton ammattitaitosi ja toteuttaa projekti.

Joko se tai nappaa amazon -paketti kierrätyksestä ja tee tilapäinen asunto, joka on edelleen käytössä.

Tämän lähestymistavan hyödyksi oli se, että jokainen projektin kerros vastasi lähes täydellisesti pahvin paksuutta, joten voileipä voidaan pinota ja teipata yhteen. Samanlainen premium -versio voisi käyttää akryylia

Vaihe 9: Loppuhuomautukset

Kiitos, että luit, Kuten monet teistä tietävät, projektin dokumentointi voi olla yhtä vaikeaa kuin sen tekeminen. puheluissani on videopätkiä, jotka saattavat lopulta nähdä päivänvalon.

Projektin ja sen kirjoittamisen välisten vuosien aikana odotin näkeväni enemmän esimerkkejä mielivaltaisista LED -näytöistä, jotka käyttävät 3D -tulostusta, mutta RGB -nauhojen vähentäminen on useimmiten poistanut vaihtoehdon tarpeen.

Toivon, että tämä on ollut informatiivista, ja kysy kysymyksiä, kun yritän kertoa tarkemmin osioista, jotka eivät ole täysin tyydyttäviä.

Kippis

Suositeltava: