Turinys:

Londono metro žemėlapio laikrodis: 9 žingsniai (su nuotraukomis)
Londono metro žemėlapio laikrodis: 9 žingsniai (su nuotraukomis)

Video: Londono metro žemėlapio laikrodis: 9 žingsniai (su nuotraukomis)

Video: Londono metro žemėlapio laikrodis: 9 žingsniai (su nuotraukomis)
Video: Part 1 - The Thirty-Nine Steps Audiobook by John Buchan (Chs 1-5) 2024, Lapkritis
Anonim
Londono metro žemėlapio laikrodis
Londono metro žemėlapio laikrodis
Londono metro žemėlapio laikrodis
Londono metro žemėlapio laikrodis

2014 m., Po praktikos Londone 3D spausdinimo konsultacijų įmonėje ir eksperimento su spalvotais litofanais naudojant jų „Stratasys“mašiną, suprojektuoju savo išvykimo dovaną - spalvotą 3D vamzdžių linijų atspaudą, esantį jų biuruose. Buvau pasiryžęs iš jo ką nors padaryti. Netrukus po dvejų metų, 2016 m., Turėjau savo 3D spausdintuvą ir pradėjau dirbti, paversdamas jį laikrodžiu.

Nors vaikystėje „Tokyo Flash“skaitmeniniai laikrodžiai buvo didžiausi dalykai, ir tai buvo įkvėpimas kuriant dizainą.

O dabar praėjo tik nedidelė 4 metų pertrauka, kol susipratau ją parašyti!

Nors tikslios instrukcijos bus sunkiai pakartojamos, o per pastaruosius porą metų sumažėjus mėgėjų PCB gamybos sąnaudoms mano tikslus šviesos diodų išdėstymo metodas gali pasenti. Tikiuosi, kad pasidalintos idėjos gali paskatinti kitus gaminti keistus laikrodžius iš plonų daiktų!

1 žingsnis: priekinis sluoksnis

Priekinis sluoksnis
Priekinis sluoksnis
Priekinis sluoksnis
Priekinis sluoksnis
Priekinis sluoksnis
Priekinis sluoksnis

Kaip minėta įžangoje, tai buvo spalvotas 3D spausdinimas, manau, „Stratasys“aparatas, kuris naudojo miltelių sluoksnį ir modifikuotą rašalo kasetę rišikliui ir pigmentui.

Failas prarastas istorijai, tačiau šis sluoksnis gali būti bet koks, nuotrauka ar vienspalvis litofanas padarytų stebuklus.

Ši dalis buvo sukurta naudojant „3DS max“2014 m., Tačiau šiandien yra internetinių įrankių, leidžiančių paversti vaizdą SLT pagal ryškumą

2 veiksmas: kreipiamojo sluoksnio projektavimas

Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas
Kreipiamojo sluoksnio projektavimas

Čia mes sprendžiame projekto sudėtingumą ir laiko nuskaitymo metodą. Vaizdai rodo 2 idėjas, su kuriomis žaidžiau.

Tai buvo padaryta skenuojant dizainą ir nubrėžus linijas „inkScape“.

Tai nėra labai lengvai skaitomas laikrodis, bet man labiau patiko idėja, kad eilutės pildomos visą dieną, todėl tai tapo dizaino tikslu.

Dvejetainis skaičiavimas yra perspektyvus būdas sumažinti LED skaičių ir pagerintų skaitomumą, jei dvejetainis yra jūsų uogienė, tačiau tai pakenkė mano „užpildymo eilučių“idėjai, todėl nebuvo šio projekto pasirinkimas

„Tokyo Flash“laikrodžiuose įprasta sumažinti LED skaičių, tačiau vieną sekciją skaičiuojant 3 arba 5, o po to kiekvieną kartą užpildant kitą skyrių, šią techniką naudojau minutėms, kad jas sumažintų nuo 60 iki 20 plius 2. I sekundžių taip nesijaudino dėl tikslumo.

3 žingsnis: sukurkite kreipiamąjį sluoksnį

Vadovo sluoksnio kūrimas
Vadovo sluoksnio kūrimas
Vadovo sluoksnio kūrimas
Vadovo sluoksnio kūrimas
Vadovo sluoksnio kūrimas
Vadovo sluoksnio kūrimas

Šis šviesos diodų kreipiamasis sluoksnis turi du tikslus, jis laiko šviesos diodus vietoje ir neleidžia išsilieti tarp jų

Jis buvo nubrėžtas kaip sluoksnis „Inkscape“tiesiai ant nuskaitymo, kurį naudojau dizaino maketui. Prieš siunčiant į spausdintuvą, maišytuve buvo pridėtas 1 mm storis.

Tai buvo vienas sunkiausių spaudinių, kuriuos turiu padaryti ant savo menko „Makibox A6“, dalis buvo atspausdinta abs, todėl buvo naudojama tona acetono srutų, kad ji būtų minimaliai deformuota. Laimei, ši dalis nėra matoma galutiniame produkte

Galutinis vaizdas rodo, kad jis buvo laikomas prie lempos, kad būtų galima patikrinti atstumą.

Žvelgiant atgal, išsiliejimas tarp šviesų išilgai linijos iš tikrųjų gali būti pageidautinas vaizdams, nesunku perskaityti, tai galima pasiekti pridedant įpjovą prie vadovo trumpose kiekvienos šviesos pusėse

4 žingsnis: Šviesos diodų prijungimas

Šviesos diodų prijungimas
Šviesos diodų prijungimas
Šviesos diodų prijungimas
Šviesos diodų prijungimas
Šviesos diodų prijungimas
Šviesos diodų prijungimas

Pirmame paveikslėlyje matomas bandomasis atspaudas, skirtas patikrinti skylių dydį, siekiau, kad šviesos diodas su maža jėga gerai priglustų prie nėrinių, tada, klojant kreipiamąjį sluoksnį, ranka buvo padėta teisinga forma.

Dėl mažo mano 3D spausdintuvo tolerancijos kai kurie buvo palaidi ir reikalavo, kad liktų vietoje super klijai, o kiti buvo per ankšti, tačiau jie buvo skatinami į vietą, lituojant spaudžiant LED, tai iš tikrųjų buvo geriau nei tinkamo dydžio skylė, kurią vieną kartą prijungus buvo išsinuomota.

Norėdami sumažinti laidų skaičių, šviesos diodai buvo lituojami 7x8 matricoje, o tai reiškia, kad visus 55 šviesos diodus galima valdyti tik 13 kaiščių.

Buvo naudojama emalio viela, todėl prieš sujungimą sekcijos galėjo būti atidengtos, kaitinant dalį lygintuvu ir skardinant.

Šis procesas užėmė daug laiko, labai rekomenduočiau sukurti PCB

5 žingsnis: Elektronikos projektavimas

Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas
Elektronikos projektavimas

Mano pradinis planas buvo naudoti „Arduino“mikrovaldiklį su RTC, tačiau „Node MCU D1“plokštėje pasirinkau ESP8266, nes tai leido automatiškai sutaupyti dienos šviesos ir valdyti WIFI.

Norėdami dar labiau sumažinti kaiščių skaičių, turėjau puikų šviesos diodų skaičių, kad galėčiau naudoti MAX7219 (kuris gali valdyti iki 64 šviesos diodų).

Šis IC dažniausiai naudojamas LED 7 segmentų ekranams vairuoti, tačiau jo naudojimo atvejis buvo labai panašus į mano, jis apšviečia bet kokį skaičių šviesos diodų su minimaliu mirgėjimu, jis netgi turi reguliuojamą ryškumą.

Aš nusprendžiau naudoti protoboardą laidams, tačiau erelis buvo naudingas daliai išdėstyti ir suprasti laidus

Pridėjau savo lentos failus, bet tai buvo pirmas kartas, kai naudoju „Eagle“(o dabar jau pasenusi versija), todėl jie skirti tik nuorodoms

6 žingsnis: Elektronikos prijungimas

Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas
Elektronikos prijungimas

Tai buvo pasikartojantis paprastas žingsnis, vadovaujantis Eagle schema, naudojant ESP ir LED matricos antraštes labai padėjo surinkti.

Anodo ir katodo šviesos diodų antraščių 1 smeigtukas buvo pažymėtas sidabriniu pieštuku, juos buvo galima atskirti, kaip ir 7, o kitus 8.

7 žingsnis: programavimas

Programavimas
Programavimas

Kadangi mūsų ekranas nėra tradicinė matrica, turėjau rasti metodą, kaip vizualizuoti, kuriuos bitus įjungti, kuriuos jis išsiuntė į MAX IC HEX. Laimei, aš žinau tik tiek, kad galėčiau patekti į bėdą, ir sukūriau „šešiabriaunį vedlį“, kuris padėtų man parodyti norimą modelį ir ranka uždėti visus žymimuosius laukelius.

Tai buvo atlikta perkainojus, kad mano valandos, minutės ir sekundžių šešiakampį galima sujungti naudojant bitų skaičių ARBA, kad būtų gauta paskutinė šešiakampė komanda, kurią reikia siųsti į „max7219“, įskaitant nedidelę animaciją, kurią pridėjau prie sekundžių, kad galėčiau įsitikinti, jog lenta nebuvo sušalęs;

Taigi, beveik pabaigoje. ir laikas kitam sprendimui, kuris dar nepaseno.

ESP kodas yra LŽŪU, šiandien rekomenduočiau naudoti „arduino IDE“, kad būtų geresnė dokumentacija ir patikima paketų biblioteka, tuo metu, kai ESP bendruomenė dar buvo brandinama, ir aš pasirinkau LŽŪU kaip šio projekto kalbą.

Aš priėmiau abejotiną sprendimą reguliariai pinginti „Google“serverius, kad perskaitytumėte laiką. Dėl to reikėjo RTC, kad būtų sumažintas nukrypimas, tai veikia, bet jums geriau būtų naudoti tikro laiko API.

halfSec = 0 valanda = 0 minutė = 0 sekundė = 0

žemas intensyvumas = 0

didelis intensyvumas = 9

vietinis SSID = "Wifi"

local SSID_PASSWORD = "Slaptažodis"

funkcija laikas () -prisijunkite prie interneto, kad gautumėte dabartinį laiką ir datą

jei wifi.sta.getip (), tada vietinis conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")

conn: on ("ryšys", funkcija (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Priimti: */ *\ r / n".. " Vartotojo agentas: „Mozilla“/4.0 (suderinama; esp8266 Lua;) „.." / r / n / r / n ") pabaiga)

conn: on ("gauti", funkcija (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -suraskite laiko ir datos eilutę naudingojo krovinio iš interneto, pakeiskite laiko juostą, jei p ~ = nulis tada-ištraukite skaičius, atitinkančius valandą, minutę, antrą, dieną, mėnesį valandą = tonumber (string.sub (naudingoji apkrova, p-9, p-8)) minute = tonumber (string.sub (naudingoji apkrova, p- 6, p-5)) second = tonumber (string.sub (naudingoji apkrova, p-3, p-2)) addHour ()-sunkiai koduotas BST (Didžiosios Britanijos vasaros laikas) vasaros laikas, taupantis spausdinimą (valandą, minutę, sekundę) = (antras%6)*2 --print (halfSec) else print ("žiniatinklio atnaujinimas nepavyko!") pabaigos pabaiga -funkcija) -įvykio apdorojimo "gauti" pabaiga

conn: on ("atjungimas", funkcija (jungtis, naudingoji apkrova)

funkcija borTable (a, b,…) -išilgai arba lentelės kartu

jei arg [1], tada b = borTable (b, išpakuokite (arg)) pabaiga vietinė z = {} i, v ipairs (a) do table.insert (z, bit.bor (v, b )) pabaiga grįžti z pabaiga

funkcija bxorTable (a, b,…) -išilgai arba lentelės kartu

jei arg [1], tada b = bxorTable (b, išpakuokite (arg)) pabaigos vietinis z = {} i, v ipairs (a) do table.insert (z, bit.bxor (v, b )) pabaiga grįžti z pabaiga

funkcija addSecond ()

sekundė = antra+1, jei antra> = 60, tada antra = 0 minutė = minutė+1, jei minutė> = 60, tada minutė = 0 addHour () pabaigos pabaiga

funkcija addHour ()

valanda = valanda+1, jei valanda> = 24, tada valanda = 0 pabaiga, jei valanda == 2 arba valanda == 16, tada max7219.setIntensity (lowIntensity) baigiasi, jei valanda == 8 arba valanda == 18, tada max7219.setIntensity (highIntensity) pabaigos pabaigos funkcijos atnaujinimas () 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, 0x003, 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}}; vietinis 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}, {0x00x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {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, 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}}; vietinis 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, 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, 0x08 0x, 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, 0x0 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -spauda (valanda, minutė, sekundė)

-lentelė prasideda nuo 0, taigi 1, kaip šiuo metu sek. [0] = nulis)

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

pabaiga -funkcija

wifi.setmode (wifi. STATION)

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

--konfigūruoti max7219

max7219 = reikalauti ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensyvumas = highIntensity})

-pagrindinė programa

checkOnline = tmr.create ()

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

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

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

funkcija animuoti (dar)

vietiniai kadrai = {{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, jei halfSec> = 12, tada halfSec = 0 pabaiga -atspaudas (halfSec) grąžina bxorTable (kadrai [halfSec+1], nejudantis) pabaiga

8 žingsnis: būstas

Būstas
Būstas
Būstas
Būstas
Būstas
Būstas

Dabar atėjo laikas parodyti savo neįtikėtiną meistriškumą ir įgyvendinti projektą.

Arba tai, arba paimkite „Amazon“pakuotę iš perdirbimo ir padarykite laikiną būstą, kuris vis dar naudojamas šiandien.

Naudojant šį metodą buvo naudinga tai, kad kiekvienas projekto sluoksnis beveik visiškai atitiko kartono storį, todėl sumuštinį buvo galima sukrauti ir suklijuoti. Panašioje aukščiausios kokybės versijoje gali būti naudojamas akrilas

9 žingsnis: Baigiamosios pastabos

Dėkojame, kad perskaitėte. Daugelis iš jūsų žino, kad dokumentuoti projektą gali būti taip pat sunku, kaip jį įgyvendinti. su manimi kalbant yra vaizdo įrašų fragmentų, kurie galiausiai išvys dienos šviesą.

Per kelerius metus nuo šio projekto kūrimo iki jo surašymo tikėjausi pamatyti daugiau savavališkų LED ekranų, kuriuose naudojamas 3D spausdinimas, pavyzdžių, tačiau sumažinus RGB juostas dažniausiai pašalinta alternatyvos poreikis.

Tikiuosi, kad tai buvo informatyvi, ir užduokite klausimų, nes pabandysiu išsamiau papasakoti apie skyrius, kurie nėra visiškai patenkinti.

Sveikinimai

Rekomenduojamas: