INHOUDSOPGAWE:

Ondergrondse kaarthorlosie in Londen: 9 stappe (met foto's)
Ondergrondse kaarthorlosie in Londen: 9 stappe (met foto's)

Video: Ondergrondse kaarthorlosie in Londen: 9 stappe (met foto's)

Video: Ondergrondse kaarthorlosie in Londen: 9 stappe (met foto's)
Video: Ondergrondse hennepkwekerij opgerold in Vriescheloo 2024, November
Anonim
Londen se ondergrondse kaartklok
Londen se ondergrondse kaartklok
Londen se ondergrondse kaartklok
Londen se ondergrondse kaartklok

In 2014, aan die agterkant van die internskap by 'n 3D -drukkonsultant in Londen en 'n eksperiment met kleurlitofane met behulp van hul Stratasys -masjien, ontwerp ek my eie weggaangeskenk, 'n 3D -kleurafdruk van buislyne in hul kantore. Ek was vasbeslote om iets daaruit te maak. 'N Kort 2 jaar later in 2016 het ek my eie 3D -drukker gehad, en ek het aan die werk gegaan om 'n horlosie te maak.

As kind het ek gedink dat die digitale flitshorlosies van Tokyo die grootste dinge ooit was, en dit sou die inspirasiepunt vir die ontwerp wees.

En nou was dit net 'n geringe 4 jaar ruskans totdat ek dit reggekry het!

Alhoewel dit moeilik sal wees om die presiese instruksies na te gaan, en die verlaging van die koste in die vervaardiging van stokperdjieplate in die afgelope paar jaar, kan my presiese metode vir LED -plasing verouder word. Ek hoop dat die gedeelde idees daartoe kan lei dat ander vreemde horlosies van dun voorwerpe maak!

Stap 1: Voorste laag

Voorste laag
Voorste laag
Voorste laag
Voorste laag
Voorste laag
Voorste laag

Soos in die inleiding genoem, was dit 'n kleur -3D -druk, ek glo 'n Stratasys -masjien wat 'n poeierbed en 'n aangepaste inkpatroon vir bindmiddel en pigment gebruik het.

Die lêer is verlore in die geskiedenis, maar hierdie laag kan enigiets wees, 'n foto of 'n enkele kleur litofaan sal wondere verrig.

Hierdie deel is gemaak in 3DS max in 2014, maar vandag is daar aanlyn gereedskap om 'n beeld te omskep in 'n SLT gebaseer op helderheid

Stap 2: Ontwerp die gidslaag

Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag
Die ontwerp van die gidslaag

Dit is waar ons die kompleksiteit van die projek en die metode vir die lees van die tyd bepaal. Die beelde toon die twee idees waarmee ek gespeel het.

Dit is gemaak deur die ontwerp in te skandeer en lyne daaroor in inkcape te trek.

Dit is nie 'n baie leesbare horlosie nie, maar ek het die idee verkies om lyne gedurende die dag te vul, sodat dit die ontwerpdoelwit geword het.

Binêre telling is 'n lewensvatbare metode om die LED -telling te verminder, en dit sou die leesbaarheid verbeter as binêre u konfyt is, maar dit het my idee van 'vullyne' ondermyn, en dit was dus nie 'n opsie vir hierdie projek nie

Dit is algemeen op die Tokyo Flash Watches om LED -tellings tot 'n minimum te beperk, maar met een gedeelte wat in 3's of 5's tel en dan nog 'n vulsel vir elke keer dat die gedeelte vul, gebruik ek hierdie tegniek vir die minute om dit van 60 na 20 plus 2 te verminder. was vir die sekondes nie so bekommerd oor presisie nie.

Stap 3: Bou die gidslaag

Die bou van die gidslaag
Die bou van die gidslaag
Die bou van die gidslaag
Die bou van die gidslaag
Die bou van die gidslaag
Die bou van die gidslaag

Hierdie geleidingslaag vir die LED's het twee doeleindes; dit hou die LED's op hul plek en voorkom dat dit daardeur mors

Dit is geteken as 'n laag op Inkscape direk bo -op die skandering wat ek vir die ontwerpuitleg gebruik het. 1 mm dikte is in die blender bygevoeg voordat dit na my drukker gestuur is.

Dit was een van die moeilikste afdrukke wat ek op my karige Makibox A6 moes maak; die deel is in abs gedruk, sodat 'n ton asetoonmest gebruik is om dit aan die bouplatform vas te hou met 'n minimale kromming. Gelukkig word hierdie deel nie op die finale produk gesien nie

Die laaste prentjie toon dat dit teen 'n lamp vasgehou is om te kyk of daar 'n afstand is.

Agterna kan die verspreiding tussen ligte langs 'n lyn eintlik beter wees vir die beeldmateriaal, maar dit is nie moeiliker om te lees nie; dit kan bereik word deur 'n afkant aan die gids aan die kort kante van elke lig te voeg

Stap 4: Bedrading van die LED's

Bedrading van die LED's
Bedrading van die LED's
Bedrading van die LED's
Bedrading van die LED's
Bedrading van die LED's
Bedrading van die LED's

Die vuisbeeld toon die toetsafdruk wat ek gemaak het om die grootte van die gate te kontroleer. Ek het gemik dat die LED met 'n bietjie krag in die kant pas, die regte vorm is dan met die hand geplaas by die uitleg van die geleidingslaag.

Vanweë die lae verdraagsaamheid van my 3D -drukker was sommige los en het 'n bietjie superlijm nodig gehad om op hul plek te bly terwyl ander te styf was, maar is aangemoedig om op die LED te druk terwyl dit soldeer, dit pas eintlik beter as die korrekte grootte gat, wat 'n huurkontrak gehad het om uit te trek sodra dit aangesluit is.

Om die draadtelling te verminder, is die LED's in 'n matriks van 7 by 8 gesoldeer, wat beteken dat alle 55 LED's slegs met 13 penne beheer kan word.

Emalje draad is gebruik sodat gedeeltes blootgestel kan word deur 'n gedeelte met die yster te verhit en te blik voordat die verbinding gemaak word.

Hierdie proses was baie tydrowend, ek beveel die ontwerp van 'n PCB sterk aan

Stap 5: Ontwerp die elektronika

Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika
Die ontwerp van die elektronika

My aanvanklike plan was om 'n Arduino -mikrobeheerder met 'n RTC te gebruik, maar het gekies vir 'n ESP8266 op die Node MCU D1 -bord, aangesien dit outomatiese dagligbesparing en die moontlikheid van beheer oor WIFI moontlik maak.

Om die aantal penne verder te verminder, het ek die perfekte aantal LED's gehad om 'n MAX7219 te kan gebruik (wat tot 64 LED's kan hanteer).

Hierdie IC word algemeen gebruik om LED 7 -segmentskerms aan te dryf, maar dit het 'n baie soortgelyke gebruik as myne, wat 'n willekeurige aantal LED's met minimale flikkering aansteek, en dit het selfs beheerbare helderheid.

Ek het besluit om protobord vir die bedrading te gebruik, maar arend was nuttig om onderdele te plaas en om bedrading te verstaan

Ek het my bordlêers aangeheg, maar dit was die eerste keer dat ek 'n arend gebruik (en nou 'n verouderde weergawe), sodat dit slegs vir verwysing is

Stap 6: Bedrading van die elektronika

Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika
Bedrading van die elektronika

Dit was 'n herhalende, eenvoudige stap, volgens die Eagle -skema, met behulp van koppe vir die ESP en die LED -matriks het baie gehelp by die samestelling.

Speld 1 op die Anode & Cathode LED -opskrifte is gemerk met 'n silwer skerp punt; daar kan onderskei word tussen 7 en die ander 8.

Stap 7: Programmering

Programmering
Programmering

Aangesien ons skerm nie 'n tradisionele matriks is nie, moes ek 'n metode vind om te visualiseer watter stukkies om aan te skakel, wat dit na die MAX IC in HEX gestuur het. Gelukkig ken ek net genoeg uitblinker om in die moeilikheid te kom en het ek 'n 'Hex -towenaar' gemaak om my te lei, alhoewel die patroon wat ek wou vertoon, met die hand geplaasde blokkies en alles.

Dit het gepaard gegaan met die herwaardering dat die heks vir my uur, minuut en sekondes met 'n bietjie kan gekombineer word om die finale hex -opdrag te lewer om na die max7219 te stuur, insluitend 'n bietjie animasie wat ek by die sekondes gevoeg het, sodat ek kon seker maak dat die bord het nie gevries nie.

Dus, amper op 'n einde. en tyd vir 'n ander besluit wat nie te goed geword het nie.

Die kode vir die ESP is in LUA. Vandag sou ek aanbeveel om die arduino IDE te gebruik vir die beter dokumentasie en robuuste pakketbiblioteek, toe die ESP -gemeenskap nog volwasse was en ek LUA as taal vir hierdie projek gekies het.

Ek het die twyfelagtige besluit geneem om die Google -bedieners gereeld te ping om die tyd te lees. Dit het 'n RTC nodig om drift te verminder, dit werk, maar dit is beter as u 'n real -time API gebruik.

halfSek = 0uur = 0 minuut = 0 sekonde = 0

lae intensiteit = 0

hoë intensiteit = 9

plaaslike SSID = "Wifi"

local SSID_PASSWORD = "Wagwoord"

funksie tyd () -maak verbinding met die internet om die huidige tyd en datum te kry

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

conn: on ("verbinding", funksie (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Aanvaar: */ *\ r / n".. " Gebruikersagent: Mozilla/4.0 (versoenbaar; esp8266 Lua;) ".." / r / n / r / n ") einde)

conn: on ("ontvang", funksie (conn, payload) -print (payload) conn: close () local p = string.find (payload, "GMT") -vind die tyd en datum string in die payload vanaf internet, verander vir tydsone as p ~ = nul dan-onttrek getalle wat ooreenstem met die uur, minuut, tweede, dag, maanduur = tonumber (string.sub (payload, p-9, p-8)) minute = tonumber (string.sub (payload, p- 6, p-5)) tweede = tonumber (string.sub (payload, p-3, p-2)) addHour ()-hard gekodeerde BST (Britse somertyd) dagligbesparing druk (uur, minuut, tweede) halfSec = (tweede%6)*2 -druk (halfSek) anders druk ("webopdatering misluk!") einde einde -funksie) -einde van op "ontvang" gebeurtenis hanteerder

conn: on ("ontkoppeling", funksie (conn, payload) conn = nul payload = nul end) end print ("nog geen wifi") einde

funksie borTable (a, b, …) -terselfdertyd OF tabelle saam

as arg [1] dan b = borTable (b, uitpak (arg)) eindig local z = {} vir i, v in ipairs (a) doen table.insert (z, bit.bor (v, b )) einde terugkeer z einde

funksie bxorTable (a, b, …) -terselfdertyd OF tabelle saam

as arg [1] dan b = bxorTable (b, uitpak (arg)) eindig lokale z = {} vir i, v in ipairs (a) doen table.insert (z, bit.bxor (v, b )) einde terugkeer z einde

funksie addSecond ()

tweede = tweede+1 as tweede> = 60 dan tweede = 0 minuut = minuut+1 as minuut> = 60 dan minuut = 0 addHour () einde einde

funksie addHour ()

uur = uur+1 as uur> = 24 dan uur = 0 eindig as uur == 2 of uur == 16 dan max7219.setIntensiteit (laeintensiteit) eindig as uur == 8 of uur == 18 dan max7219.setIntensiteit (hoëintensiteit) einde einde funksie 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, 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}}; plaaslike 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, 0x2, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x0, 0x2, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x12, 0x, }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 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}}; plaaslike 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, 0x0,, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x4, 0x0,, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x0, 0x4, 0x0, }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0, 0x0, 0x0,, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0,, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4, 0x, 0x, 0x,, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4, 0x4, 0x4, 0x4, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -druk (uur, minuut, sekonde)

-die tafel begin op 0, dus om 1 as tans sek [0] = nul)

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

einde -funksie

wifi.setmode (wifi. STATION)

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

-konfigureer max7219

max7219 = vereis ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensiteit = highIntensity})

-Hoofprogram

checkOnline = tmr.create ()

tmr.alarm (0, 180000, 1, tyd)

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

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

funksie animeer (steeds)

plaaslike rame = {{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 as halfSec> = 12 dan halfSec = 0 end --print (halfSec) terugkeer bxorTable (rame [halfSec+1], nog) eindig

Stap 8: Die behuising

Die Behuising
Die Behuising
Die Behuising
Die Behuising
Die Behuising
Die Behuising

Dit is u tyd om u ongelooflike vakmanskap te wys en die projek te huisves.

Of dit, of haal 'n Amazon -pakket uit die herwinning en maak 'n tydelike behuising wat vandag nog gebruik word.

Die voordeel van die gebruik van hierdie benadering was dat elke laag van die projek byna perfek by die dikte van die karton pas, sodat 'n toebroodjie gestapel en vasgemaak kan word. 'N Soortgelyke premium weergawe kan akriel gebruik

Stap 9: Slotopmerkings

Dankie dat u gelees het. Soos baie van u weet, is dit net so moeilik om 'n projek te dokumenteer as om dit te maak. daar is stukkies video met my wat praat, wat uiteindelik die lig kan sien.

In die jare tussen die opstel van hierdie projek en die opstel daarvan het ek verwag om meer voorbeelde te sien van willekeurige LED -skerms wat 3D -druk gebruik, maar die vermindering van RGB -stroke het die behoefte aan 'n alternatief meestal verwyder.

Ek hoop dat dit insiggewend was, en stel asseblief vrae, want ek sal probeer om meer besonderhede te gee oor gedeeltes wat nie heeltemal voldoen nie.

Cheers

Aanbeveel: