Përmbajtje:

Ora e Hartës së Nëndheshme të Londrës: 9 Hapa (me fotografi)
Ora e Hartës së Nëndheshme të Londrës: 9 Hapa (me fotografi)

Video: Ora e Hartës së Nëndheshme të Londrës: 9 Hapa (me fotografi)

Video: Ora e Hartës së Nëndheshme të Londrës: 9 Hapa (me fotografi)
Video: Rama: Nuk i ndahem Kukësit derisa të sjell çunat e Londrës, me tarifa simbolike - Vizion Plus 2024, Nëntor
Anonim
Ora e Hartës së Nëndheshme të Londrës
Ora e Hartës së Nëndheshme të Londrës
Ora e Hartës së Nëndheshme të Londrës
Ora e Hartës së Nëndheshme të Londrës

Në vitin 2014, në prag të praktikës në një konsulencë për printimin 3D në Londër dhe një eksperiment me litofanët me ngjyra duke përdorur makinën e tyre Stratasys, unë hartoj të tashmen time, një print 3D me ngjyra të linjave të tubave në zyrat e tyre. Isha i vendosur të bëja diçka prej saj. 2 vjet më vonë në vitin 2016 kisha printerin tim 3D dhe fillova të punoj duke e bërë atë një orë.

Si fëmijë, megjithëse orët dixhitale Tokio Flash ishin gjërat më të mëdha ndonjëherë, dhe të dekoruara do të ishin pika frymëzuese për dizajnin.

Dhe tani ka qenë vetëm një pushim i vogël 4 vjeçar derisa të arrij ta shkruaj!

Ndërsa udhëzimet e sakta do të jenë të vështira për t'u përsëritur, dhe ulja e kostos në prodhimin e PCB -ve hobiste në dy vitet e fundit mund të bëjë të vjetëruar metodën time të saktë për vendosjen e LED -ve. Shpresoj se idetë e ndara mund të çojnë që të tjerët të bëjnë orë të çuditshme nga objekte të holla!

Hapi 1: Shtresa e përparme

Shtresa e përparme
Shtresa e përparme
Shtresa e përparme
Shtresa e përparme
Shtresa e përparme
Shtresa e përparme

Siç u përmend në hyrje, kjo ishte një print 3D me ngjyra, besoj se një makinë Stratasys e cila përdorte një shtrat pluhur dhe një fishek boje të modifikuar për lidhës dhe pigment.

Dosja humbet në histori, por kjo shtresë mund të jetë çdo gjë, një fotografi ose një litofan me një ngjyrë të vetme do të bënte mrekulli.

Kjo pjesë është bërë në 3DS max në 2014, por sot ka mjete online për ta kthyer një imazh në një SLT bazuar në shkëlqimin

Hapi 2: Hartimi i shtresës udhëzuese

Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese
Hartimi i shtresës udhëzuese

Këtu vendosim kompleksitetin e projektit dhe metodën për leximin e kohës. Imazhet tregojnë 2 idetë me të cilat po luaja.

Këto janë bërë duke skanuar në dizajn dhe duke vizatuar linja përgjatë tij në inkscape.

Kjo nuk është një orë shumë e lexueshme, por unë preferova idenë e mbushjes së linjave gjatë gjithë ditës, kështu që u bë qëllimi i projektimit.

Numërimi binar është një metodë e zbatueshme për zvogëlimin e numërimit të LED -ve dhe do të përmirësonte lexueshmërinë nëse binarja është bllokimi juaj, por kjo minoi idenë time të "mbushjes së linjave", kështu që nuk ishte një opsion për këtë projekt

It'sshtë e zakonshme në Tokio Flash Watches të minimizoni numërimin e LED -ve, por duke pasur një seksion duke numëruar në 3 ose 5 dhe më pas një mbushje tjetër për çdo herë që e mbush atë seksion, e kam përdorur këtë teknikë për minutat, për t'i zvogëluar ato nga 60 në 20 plus 2. I nuk ishte aq i shqetësuar për saktësinë e tij për sekonda.

Hapi 3: Ndërtimi i shtresës udhëzuese

Ndërtimi i shtresës udhëzuese
Ndërtimi i shtresës udhëzuese
Ndërtimi i shtresës udhëzuese
Ndërtimi i shtresës udhëzuese
Ndërtimi i shtresës udhëzuese
Ndërtimi i shtresës udhëzuese

Kjo shtresë udhëzuese për LED ka 2 qëllime, mban LED në vend dhe parandalon derdhjen midis tyre

Ajo u vizatua si një shtresë në Inkscape direkt në krye të skanimit që po përdoreja për paraqitjen e dizajnit. Trashësia 1 mm u shtua në blender para se ta dërgoja në printerin tim.

Ky ishte një nga printimet më të vështira që duhet të bëj në Makibox A6 tim të varfër, pjesa u shtyp në abs kështu që një ton llaç acetoni u përdor për ta mbajtur atë të lidhur me platformën e ndërtimit me shtrembërim minimal. Për fat të mirë kjo pjesë nuk shihet në produktin përfundimtar

Imazhi përfundimtar tregon se është mbajtur deri në një llambë për të kontrolluar distancën.

Në të kaluarën, derdhja midis dritave përgjatë një linje në të vërtetë mund të jetë e preferueshme për pamjet vizuale, nuk është e vështirë të lexohet, kjo mund të arrihet duke shtuar një kunj në udhëzues në anët e shkurtra të secilës dritë

Hapi 4: Instalimi i LED -ve

Instalimi i LED -ve
Instalimi i LED -ve
Instalimi i LED -ve
Instalimi i LED -ve
Instalimi i LED -ve
Instalimi i LED -ve

Imazhi i grushtit tregon printimin e provës që kam bërë për të kontrolluar madhësinë e vrimës, po synoja që LED të përshtatet fort në dantella me pak forcë, forma e saktë më pas u vendos me dorë kur shtroja shtresën udhëzuese.

Për shkak të tolerancës së ulët të printerit tim 3D, disa ishin të lirshme dhe kërkonin një copëz super -ngjitëse për të qëndruar në vend, ndërsa të tjerët ishin shumë të ngushtë, por u inkurajuan në vend duke shtypur LED gjatë bashkimit, kjo ishte në të vërtetë një përshtatje më e mirë sesa vrima me madhësinë e duhur, e cila kishte një qira për t'u tërhequr sapo të lidhej.

Për të zvogëluar numrin e telave, LED -të u ngjitën në një matricë 7 me 8, që do të thotë se të gjitha 55 LED -të mund të kontrolloheshin nga vetëm 13 kunja, unë kisha një hartë të vizatuar me dorë të secilës prej këtyre lidhjeve e cila fatkeqësisht është humbur.

Teli i smaltit u përdor në mënyrë që pjesët të mund të ekspozoheshin në vend duke ngrohur një pjesë me hekur dhe kallajisje para se të bëhej lidhja.

Ky proces ishte shumë kohë, unë do të rekomandoja shumë hartimin e një PCB

Hapi 5: Dizajnimi i pajisjeve elektronike

Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike
Projektimi i pajisjeve elektronike

Plani im fillestar ishte të përdorja një mikrokontrollues Arduino me një RTC, por zgjodha një ESP8266 në tabelën Node MCU D1 pasi lejonte kursimet automatike të ditës dhe potencialin për kontroll mbi WIFI.

Për të zvogëluar numrin e kunjave më tej, kisha numrin e përsosur të LED -ve për të qenë në gjendje të përdorja një MAX7219 (i cili mund të trajtojë deri në 64 LED).

Ky IC përdoret zakonisht për të drejtuar ekranet LED 7 Segment, por kishte një rast përdorimi shumë të ngjashëm me timen, duke ndezur një numër arbitrar LED me dridhje minimale, madje ka shkëlqim të kontrollueshëm.

Vendosa të përdor protoboard për instalime elektrike, por shqiponja ishte e dobishme për vendosjen e pjesëve dhe kuptimin e instalimeve elektrike

Unë i kam bashkangjitur skedarët e bordit, por kjo ishte hera ime e parë që përdor shqiponjë (dhe një version të vjetëruar deri tani) kështu që ato janë vetëm për referencë

Hapi 6: Instalimi i pajisjeve elektronike

Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike
Instalimi i pajisjeve elektronike

Ky ishte një hap i thjeshtë i përsëritur, pas skemës Eagle, përdorimi i titujve për ESP dhe matrica LED ndihmoi jashtëzakonisht në montim.

Kunja 1 në titujt LED të Anode & Cathode u shënua me një mprehtë argjendi, ato mund të diferencoheshin mes tyre si në 7, 8 të tjerat.

Hapi 7: Programimi

Programimi
Programimi

Meqenëse ekrani ynë nuk është një matricë tradicionale, më duhej të gjeja një metodë për të vizualizuar se cilat pjesë të ndizen të cilat i dërgoi në IC MAX në HEX. Për fat të mirë, unë e di mjaftueshëm Excel për të hyrë në telashe dhe bëra një "magjistar gjashtëkëndësh" që të më drejtonte edhe pse modeli që doja të shfaqet, kutitë e kontrollit të vendosura me dorë në tërësi.

Kjo erdhi me rivlerësimin që gjashtëkëndëshi për orën, minutën dhe sekondat e mia mund të kombinohej duke përdorur një bit OSE për të prodhuar komandën përfundimtare të gjashtëkëndëshit për të dërguar në max7219, duke përfshirë një animacion të vogël që i shtova sekondave në mënyrë që të sigurohesha që tabela nuk ishte ngrirë;

Pra, pothuajse në fund. dhe koha për një vendim tjetër i cili nuk është plakur shumë mirë.

Kodi për ESP është në LUA, Sot unë do të rekomandoja përdorimin e arduino IDE për dokumentacionin më të mirë dhe bibliotekën e paketës së fortë, në atë kohë komuniteti ESP ishte ende duke u pjekur dhe unë zgjodha LUA si gjuhë për këtë projekt.

Mora vendimin e diskutueshëm për të ping rregullisht serverët e Google për të lexuar kohën. Kjo mori nevojë për një RTC për të minimizuar zhvendosjen, kjo funksionon, por nuk do të ishte më mirë të përdorni një API të kohës së vërtetë.

halfSec = 0 orë = 0 minutë = 0 sekondë = 0

intensitet i ulët = 0

intensitet i lartë = 9

SSID lokale = "Wifi"

lokale SSID_PASSWORD = "Fjalëkalimi"

koha e funksionit () -lidheni me internetin për të marrë kohën dhe datën aktuale

nëse wifi.sta.getip () atëherë lidhja lokale = net.createConnection (net. TCP, 0) lidhje: lidheni (80, "google.com")

lidh: on ("lidhje", funksioni (lidhja, ngarkesa) conn: dërgoni ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Prano: */ *\ r / n".. " Agjenti i Përdoruesit: Mozilla/4.0 (i pajtueshëm; esp8266 Lua;) ".." / r / n / r / n ") fund)

lidh: në ("marr", funksion (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -gjeni vargun e kohës dhe datës në ngarkesën nga interneti, ndryshoni për zonën kohore nëse p ~ = zero atëherë-nxjerr numra që korrespondojnë me orën, minutën, të dytën, ditën, orën e muajit = numri (vargu. nën (ngarkesa, p-9, p-8)) minutë = numri (vargu. nën (ngarkesa, p- 6, p-5)) e dyta = numri (vargu. Nën (ngarkesa, p-3, p-2)) shtoni orë ()-e rëndë e koduar BST (ora britanike e verës) printimi i dritave ditore (orë, minutë, sekondë) gjysmëSec = (%e dytë 6)*2 --print (halfSec) tjetër print ("përditësimi i uebit dështoi!") fundi i fundit -funksioni) -fundi i mbajtësit të ngjarjes "prano"

lidh: në ("shkëputje", funksioni (lidhje, ngarkesë) conn = zero ngarkesë = fund zero) përfundim printimi ("ende pa wifi") fund

funksioni borTable (a, b,…) -dy ose dy tabela së bashku

nëse arg [1] atëherë b = borTable (b, shpaketoni (arg)) përfundoni z = {} për i, v në ipairs (a) bëni tabelën. futni (z, bit.bor (v, b )) fund ktheje z fund

funksioni bxorTable (a, b,…) -dy ose dy tabela së bashku

nëse arg [1] atëherë b = bxorTable (b, shpaketoj (arg)) përfundoj z lokale {=} për i, v në ipairs (a) bëj tabelën. fut (z, bit.bxor (v, b )) fund ktheje z fund

funksion addSecond ()

e dyta = e dyta+1 nëse e dyta> = 60 atëherë e dyta = 0 minutë = minutë+1 nëse minuta> = 60 atëherë minuta = 0 shtoOr () fund përfundimi fund

funksion addHour ()

orë = orë+1 nëse ora> = 24 atëherë ora = 0 fund nëse ora == 2 ose ora == 16 pastaj max7219.setIntensiteti (i ulëtIntensiteti) përfundon nëse ora == 8 ose ora == 18 pastaj max7219.setIntensiteti (intensiteti i lartë) përfundimi i funksionit përfundimtar () secGap lokal = 6 minGap lokal = 3 horGap lokale = 1 sek. lokal = {{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, 0x1, 0x00, 0x00, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x01, 0x1 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; min. lokal = {{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, 0x2, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x2, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x2 } {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 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}}; hor lokale = {{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}, {0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04 0 0, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08} {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08} {0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x08 } {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08} {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08} {0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08} {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08} {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08} {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x48} {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48} {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x48} {0x0C, 0x0C, 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}}; --print (orë, minutë, sekondë)

--tabela fillon me 0, pra në 1 si sekonda aktualisht [0] = zero)

max7219.shkruaj ({animate (borTable (sec [1+ (second/secGap)], min [1+ (minutë/minGap)], hor [1+ (orë/horGap)])))

fundi -funksioni

wifi.setmode (wifi. STATION)

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

-konfiguroni max7219

max7219 = kërkojnë ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensiteti = Intensiteti i lartë})

-Programi kryesor

checkOnline = tmr.create ()

tmr.alarm (0, 180000, 1, kohë)

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

tmr.alarm (2, 500, 1, përditësim)

funksion animate (akoma)

kuadro lokale = {{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 nëse halfSec> = 12 atëherë halfSec = 0 fund -printoni (halfSec) ktheni bxorTable (kornizat [halfSec+1], akoma) fund

Hapi 8: Strehimi

Strehimi
Strehimi
Strehimi
Strehimi
Strehimi
Strehimi

Tani është koha juaj për të treguar mjeshtërinë tuaj të jashtëzakonshme dhe për të vendosur projektin.

Ose ose merrni një paketë amazon nga riciklimi dhe bëni një strehë të përkohshme që është ende në përdorim sot.

Përfitimi i përdorimit të kësaj qasjeje ishte se secila shtresë e projektit përputhej pothuajse në mënyrë të përkryer me trashësinë e kartonit, kështu që një sanduiç mund të vendoset dhe ngjitet së bashku. Një version premium i ngjashëm mund të përdorë akrilik

Hapi 9: Vërejtjet përmbyllëse

Faleminderit për leximin, Siç e dini shumë prej jush dokumentimi i një projekti mund të jetë po aq i vështirë sa realizimi i tij. ka copëza video me mua duke folur të cilat përfundimisht mund të shohin dritën e ditës.

Në vitet midis krijimit të këtij projekti dhe shkrimit të tij, unë prisja të shihja më shumë shembuj të ekraneve arbitrare LED duke përdorur printimin 3D, por zvogëlimi i shiritave RGB kryesisht ka hequr nevojën për një alternativë.

Shpresoj se kjo ka qenë informuese, dhe ju lutemi bëni pyetje pasi do të përpiqem të jap më shumë detaje mbi pjesët që nuk kënaqin plotësisht.

Urime

Recommended: