INHOUDSOPGAWE:
- Stap 1: Voorste laag
- Stap 2: Ontwerp die gidslaag
- Stap 3: Bou die gidslaag
- Stap 4: Bedrading van die LED's
- Stap 5: Ontwerp die elektronika
- Stap 6: Bedrading van die elektronika
- Stap 7: Programmering
- Stap 8: Die behuising
- Stap 9: Slotopmerkings
Video: Ondergrondse kaarthorlosie in Londen: 9 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
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
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
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
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
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
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
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
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
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:
Neem wonderlike foto's met 'n iPhone: 9 stappe (met foto's)
Neem wonderlike foto's met 'n iPhone: die meeste van ons dra deesdae 'n slimfoon oral, daarom is dit belangrik om te weet hoe u u slimfoonkamera kan gebruik om fantastiese foto's te neem! Ek het net 'n paar jaar 'n slimfoon gehad, en ek hou daarvan om 'n ordentlike kamera te hê om dinge te dokumenteer wat ek
Howto: Raspberry PI 4 Headless (VNC) installeer met Rpi-imager en foto's: 7 stappe (met foto's)
Howto: Raspberry PI 4 Headless (VNC) installeer met Rpi-imager en foto's: ek is van plan om hierdie Rapsberry PI te gebruik in 'n klomp prettige projekte in my blog. Kyk gerus daarna. Ek wou weer my Raspberry PI gebruik, maar ek het nie 'n sleutelbord of muis op my nuwe plek gehad nie. Dit was 'n rukkie sedert ek 'n Framboos opgestel het
Hacking van 'n Londense ondergrondse Jubilee Line -deurknoppie: 12 stappe (met foto's)
Hacking a London Underground Jubilee Line Door Button: Die London Transport Museum -winkel verkoop deurknoppies van die Jubilee Line (beide links en regs is beskikbaar). As u dit oorweeg om 'n projek uit te voer wat 'n knoppie en een of ander indikatorliggie benodig, sou u
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino - Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter - Rc Helikopter - Rc -vliegtuig met Arduino: 5 stappe (met foto's)
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino | Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter | Rc Helikopter | Rc -vliegtuig met Arduino: om 'n Rc -motor te bestuur | Quadcopter | Drone | RC -vliegtuig | RC -boot, ons het altyd 'n ontvanger en sender nodig, veronderstel dat ons vir RC QUADCOPTER 'n 6 -kanaals sender en ontvanger nodig het en dat die tipe TX en RX te duur is, so ons maak een op ons
Hoe om 'n rekenaar met maklike stappe en foto's uitmekaar te haal: 13 stappe (met foto's)
Hoe om 'n rekenaar uitmekaar te haal met eenvoudige stappe en foto's: dit is 'n instruksie oor hoe om 'n rekenaar uitmekaar te haal. Die meeste basiese komponente is modulêr en kan maklik verwyder word. Dit is egter belangrik dat u daaroor georganiseerd is. Dit sal u verhinder om onderdele te verloor, en ook om die montering weer