Talaan ng mga Nilalaman:

London Underground Map Clock: 9 Mga Hakbang (na may Mga Larawan)
London Underground Map Clock: 9 Mga Hakbang (na may Mga Larawan)

Video: London Underground Map Clock: 9 Mga Hakbang (na may Mga Larawan)

Video: London Underground Map Clock: 9 Mga Hakbang (na may Mga Larawan)
Video: DR. VICKI BELO's TRANSFORMATION💖🤩#vickibelo #doctor #transformation #viral #trending 2024, Nobyembre
Anonim
London Underground Map Clock
London Underground Map Clock
London Underground Map Clock
London Underground Map Clock

Noong 2014, sa likuran ng internship sa isang 3D na pagkonsulta sa pag-print sa London at isang eksperimento sa mga lithophanes na kulay gamit ang kanilang Stratasys machine, dinisenyo ko ang aking sariling paglayo na kasalukuyan, isang kulay na 3D na naka-print na mga linya ng tubo na lokal sa kanilang mga tanggapan. Determinado akong gumawa ng isang bagay mula rito. Isang maikling 2 taon na ang lumipas sa 2016 nagkaroon ako ng aking sariling 3D printer, at itinakdang gumana na ginagawa itong isang orasan.

Bilang isang bata kahit na ang digital na mga relo ng Tokyo Flash ay ang pinakadakilang bagay na kailanman, at naipakita na ang magiging inspirasyon para sa disenyo.

At ngayon ito ay isang menor de edad na 4 na pahinga lamang hanggang sa maikot ko ang pagsulat nito!

Habang ang eksaktong mga tagubilin ay magiging mahirap na kopyahin, at ang pagbawas ng gastos sa paggawa ng libangan ng PCB sa nakaraang ilang taon ay maaaring gawin ang aking eksaktong pamamaraan para sa LED na pagkakalagay. Inaasahan kong ang mga ibinahaging ideya ay maaaring humantong sa iba na gumawa ng mga kakaibang orasan mula sa manipis na mga bagay!

Hakbang 1: Front Layer

Pangunahing Layer
Pangunahing Layer
Pangunahing Layer
Pangunahing Layer
Pangunahing Layer
Pangunahing Layer

Tulad ng nabanggit sa intro, ito ay isang kulay na 3D print, naniniwala ako na isang Stratasys machine na gumamit ng isang bed bed at isang binagong ink cartridge para sa binder at pigment.

Ang file ay nawala sa kasaysayan, ngunit ang layer na ito ay maaaring maging anupaman, isang larawan o isang solong kulay na lithophane na gagana ang mga kababalaghan.

Ang bahaging ito ay ginawa sa 3DS max noong 2014, ngunit ngayon mayroong mga online na tool upang gawing isang SLT batay sa ningning ang isang imahe

Hakbang 2: Pagdidisenyo ng Patnubay sa Patnubay

Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay
Pagdidisenyo ng Patnubay sa Patnubay

Dito namin napagpasyahan ang pagiging kumplikado ng proyekto at ang pamamaraan para sa pagbabasa ng oras. Ipinapakita ng mga imahe ang 2 ideya na pinaglaruan ko.

Ginawa ito sa pamamagitan ng pag-scan sa disenyo at pagguhit ng mga linya sa ito sa inkscape.

Hindi ito masyadong nababasa ng orasan, ngunit ginusto ko ang ideya ng mga linya na pinupuno sa buong araw upang ito ang maging layunin ng disenyo.

Ang pagbibilang ng binary ay isang mabubuhay na pamamaraan para sa pagbawas ng bilang ng LED, at mapapabuti nito ang kakayahang mabasa kung binary ang iyong jam, ngunit pinahina ang aking ideya ng 'pagpuno ng mga linya', kaya hindi isang pagpipilian para sa proyektong ito

Karaniwan sa Tokyo Flash Watches na i-minimize ang bilang ng LED ngunit ang pagkakaroon ng isang seksyon na pagbibilang sa 3 o 5's at pagkatapos ay isa pang pagpuno para sa bawat oras na punan ang seksyon na iyon, ginamit ko ang diskarteng ito sa loob ng ilang minuto, upang mabawasan ang mga ito mula 60 hanggang 20 plus 2. I ay hindi masyadong nag-aalala tungkol sa katumpakan na ito para sa segundo.

Hakbang 3: Pagbuo ng Patnubay sa Patnubay

Pagbuo ng Patnubay ng Patnubay
Pagbuo ng Patnubay ng Patnubay
Pagbuo ng Patnubay sa Patnubay
Pagbuo ng Patnubay sa Patnubay
Pagbuo ng Patnubay sa Patnubay
Pagbuo ng Patnubay sa Patnubay

Ang layer ng gabay na ito para sa LED ay may 2 mga layunin, hinahawakan nito ang mga LED, at pinipigilan nito ang pag-agos sa pagitan nila

Ito ay iginuhit bilang isang layer sa Inkscape nang direkta sa tuktok ng pag-scan na ginagamit ko para sa layout ng disenyo. Ang kapal ng 1mm ay idinagdag sa blender bago ipadala sa aking printer.

Ito ay isa sa pinakamahirap na mga kopya na dapat kong gawin sa aking maliit na Makibox A6, ang bahagi ay naka-print sa abs kaya isang toneladang slurry ng acetone ang ginamit upang mapanatili itong nakakabit sa build platform na may kaunting warping. Sa kasamaang palad ang bahaging ito ay hindi nakikita sa pangwakas na produkto

Ipinapakita ng huling imahe na gaganapin ito sa isang lampara upang suriin kung ang spacing.

Sa pag-iisip, ang pagbagsak sa pagitan ng mga ilaw kasama ang isang linya ay maaaring talagang mas gusto para sa mga visual, hindi mahirap basahin, maaaring makamit ito sa pamamagitan ng pagdaragdag ng isang chamfer sa gabay sa mga maiikling gilid ng bawat ilaw

Hakbang 4: Mga kable ng LED

Kable ng mga LED
Kable ng mga LED
Kable ng mga LED
Kable ng mga LED
Kable ng mga LED
Kable ng mga LED

Ipinapakita ng imahe ng kamao ang test print na ginawa ko para suriin ang sukat ng butas, hangarin ko na ang LED ay magkasya nang maayos sa puntas na may kaunting puwersa, ang tamang hugis ay inilagay sa pamamagitan ng kamay kapag inilalagay ang patnubay ng patnubay.

Dahil sa mababang pagpapaubaya ng aking 3D printer, ang ilan ay maluwag at kinakailangan ng isang dab ng superglue upang manatili sa lugar habang ang iba ay masyadong masikip, ngunit hinihikayat sa lugar sa pamamagitan ng pagpindot sa LED habang hinihinang, ito ay talagang mas mahusay kaysa sa ang tamang sukat na holed, na mayroong isang upa upang mabunot kapag na-wire na.

Upang mabawasan ang bilang ng kawad ang mga LED ay na-solder sa isang matrix na 7 ng 8, nangangahulugang lahat ng 55 LEDs ay maaaring kontrolin ng 13 pin lamang, mayroon akong isang iginuhit na mapa ng bawat isa sa mga koneksyon na ito na sa kasamaang palad ay nawala.

Ginamit ang enamel wire kaya't ang mga seksyon ay maaaring mailantad sa lugar sa pamamagitan ng pag-init ng isang seksyon na may bakal at tinning bago gawin ang koneksyon.

Napakatagal ng prosesong ito, lubos kong inirerekumenda ang pagdidisenyo ng isang PCB

Hakbang 5: Pagdidisenyo ng Elektronika

Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika
Pagdidisenyo ng Elektronika

Ang aking paunang plano ay gumamit ng isang Arduino microcontroller na may RTC, ngunit nagpasyang sumali sa isang ESP8266 sa Node MCU D1 board dahil pinapayagan para sa awtomatikong pagtipid ng daylight at ang potensyal para sa kontrol sa WIFI.

Upang mabawasan pa ang bilang ng pin, nagkaroon ako ng perpektong bilang ng mga LED upang magamit ang isang MAX7219 (na maaaring hawakan hanggang sa 64 LEDs).

Ang IC na ito ay karaniwang ginagamit upang himukin ang mga pagpapakita ng LED 7 Segment, ngunit mayroon itong katulad na kaso ng paggamit sa minahan, pag-iilaw ng isang di-makatwirang bilang ng mga LED na may kaunting pagkutitap, mayroon pa itong kinokontrol na ningning.

Nagpasya akong gumamit ng protoboard para sa mga kable, ngunit ang agila ay kapaki-pakinabang para sa pagkakalagay ng bahagi at pag-unawa sa mga kable

Inilakip ko ang aking mga file ng board, ngunit ito ang aking unang pagkakataon sa paggamit ng agila (at isang wala nang napapanahong bersyon sa ngayon) kaya para lamang sila sa sanggunian

Hakbang 6: Pag-kable ng Elektronika

Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika
Kable ng Elektronika

Ito ay isang paulit-ulit na simpleng hakbang, pagsunod sa eskematiko ng Eagle, na gumagamit ng mga header para sa ESP at ang LED matrix ay lubos na nakatulong sa pagpupulong.

Ang pin 1 sa mga header ng Anode & Cathode LED ay minarkahan ng isang silver sharpie, maaari silang makilala sa pagitan ng 7 sa iba pang 8.

Hakbang 7: Programming

Programming
Programming

Tulad ng aming pagpapakita ay hindi isang tradisyonal na matrix, kinailangan kong makahanap ng isang pamamaraan para sa paglalagay ng isip kung aling mga piraso ang i-on kung saan ipinadala nito sa MAX IC sa HEX. Sa kabutihang palad alam ko ang sapat na excel lamang upang makakuha ng problema at gumawa ng isang 'Hex wizard' upang gabayan ako kahit na ang pattern na nais kong ipakita, ang kamay ay naglagay ng mga kahon ng tsek ng lahat.

Ito ay dumating sa muling pagsusuri na ang hex para sa aking oras, minuto at segundo ay maaaring pagsamahin gamit ang isang bitwise O upang makagawa ng pangwakas na utos na hex upang ipadala sa max7219, kasama ang isang maliit na animation na idinagdag ko sa mga segundo upang matiyak kong ang board ay hindi; hindi nagyelo.

Kaya, halos sa isang dulo. at oras para sa isa pang desisyon na hindi masyadong nag-iipon.

Ang code para sa ESP ay nasa LUA, Ngayon ay inirerekumenda ko ang paggamit ng arduino IDE para sa mas mahusay na dokumentasyon at matatag na package library, sa oras na ang komunidad ng ESP ay huminahon pa at pinili ko ang LUA bilang wika para sa proyektong ito.

Nagawa ko ang kaduda-dudang desisyon na regular na i-ping ang mga server ng google upang basahin ang oras. Napunta ito sa paligid ng nangangailangan ng isang RTC upang i-minimize ang drift, gumagana ito, ngunit ikaw ay mas mahusay na gumamit ng isang tunay na time API.

halfSec = 0hour = 0 minuto = 0 segundo = 0

mababangIntensity = 0

mataas na Intensity = 9

lokal na SSID = "Wifi"

local SSID_PASSWORD = "Password"

oras ng pag-andar () - kumonekta sa internet upang makuha ang kasalukuyang oras at petsa

kung wifi.sta.getip () pagkatapos ay local conn = net.createConnection (net. TCP, 0) conn: ikonekta (80, "google.com")

conn: sa ("koneksyon", function (conn, payload) conn: send ("HEAD / HTTP / 1.1 / r / n".. "Host: time.is / r / n".. "Tanggapin: * / * / r / n".. " User-Agent: Mozilla / 4.0 (katugma; esp8266 Lua;) ".." / r / n / r / n ") pagtatapos)

conn: sa ("makatanggap", function (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") - hanapin ang time at date string sa payload mula sa internet, baguhin para sa timezone kung p ~ = nil pagkatapos - kunin ang mga numero na tumutukoy sa oras, minuto, segundo, araw, buwan oras = tonumber (string.sub (payload, p-9, p-8)) minuto = tonumber (string.sub (payload, p- 6, p-5)) segundo = tonumber (string.sub (payload, p-3, p-2)) addHour () --hard coded BST (British summer time) daylight save print (oras, minuto, segundo) halfSec = (pangalawang% 6) * 2 --print (halfSec) iba pa ang naka-print ("Nabigo ang pag-update sa web!") pagtatapos ng end --function) - katapusan ng sa "makatanggap" handler ng kaganapan

conn: sa ("pagdiskonekta", pagpapaandar (conn, payload) conn = nil payload = nil end) pagtatapos ng pag-print ("wala pang wifi") pagtatapos

pag-andar borTable (a, b,…) --sa kanan OR talahanayan na magkasama

kung arg [1] pagkatapos ay b = borTable (b, i-unpack (arg)) tapusin ang lokal na z = {} para sa i, v sa ipairs (a) gawin table.insert (z, bit.bor (v, b )) end return z pagtatapos

pagpapaandar bxorTable (a, b, …) --sa kaliwa O magkasamang talahanayan

kung ang arg [1] pagkatapos ay b = bxorTable (b, i-unpack (arg)) tapusin ang lokal na z = {} para sa i, v sa ipairs (a) gawin table.insert (z, bit.bxor (v, b )) end return z pagtatapos

pagpapaandar addSecond ()

segundo = segundo + 1 kung segundo> = 60 pagkatapos pangalawa = 0 minuto = minuto + 1 kung minuto> = 60 pagkatapos minuto = 0 addHour () end end end

pagpapaandar addHour ()

oras = oras + 1 kung oras> = 24 pagkatapos oras = 0 pagtatapos kung oras == 2 o oras == 16 pagkatapos max7219.setIntensity (lowIntensity) magtatapos kung oras == 8 o oras == 18 pagkatapos max7219.setIntensity (highIntensity) end end function function () 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, 0x03}, {0x00, 0x00, 0x0, }xx3,, 0x00, 0x00, 0x02, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03}, {0x, 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, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0, 0x01, 0x01, 0x01, 0x0 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; lokal na 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, 0x0, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x 0, 0x0, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x12, 0x12, 0x 0, 0x12, 0x12, 0x12, 0x12, 0x12, 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}}; lokal na 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, 0x, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x 04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0, 0x0, 0x0, 0x0 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0x, 0x0x, 0x0x, 0x04, 0x0x, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 00, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4, 0x4, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; --print (oras, minuto, segundo)

- nagsisimula ang talahanayan sa 0, kaya't sa 1 bilang kasalukuyang sec [0] = nil)

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

pagtatapos --function

wifi.setmode (wifi. STATION)

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

- configure ang max7219

max7219 = nangangailangan ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensity = highIntensity})

- Pangunahing Program

checkOnline = tmr.create ()

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

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

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

gumana buhayin (pa rin)

mga lokal na frame = {{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 kung halfSec> = 12 pagkatapos halfSec = 0 end --print (halfSec) bumalik bxorTable (mga frame [halfSec + 1], pa rin) natapos

Hakbang 8: Ang Pabahay

Ang Pabahay
Ang Pabahay
Ang Pabahay
Ang Pabahay
Ang Pabahay
Ang Pabahay

Ngayon na ang iyong oras upang ipakita ang iyong kamangha-manghang pagka-arte at ilagay ang proyekto.

Alinman o kumuha ng isang amazon package mula sa pag-recycle at gumawa ng isang pansamantalang pabahay na ginagamit pa rin hanggang ngayon.

Ang pakinabang ng paggamit ng diskarte na ito ay ang bawat layer ng proyekto na halos perpektong na tumutugma sa kapal ng karton, kaya ang isang sandwich ay maaaring isinalansan at naidikit. Ang isang katulad na premium na bersyon ay maaaring gumamit ng acrylic

Hakbang 9: Mga Pangwakas na Pangwakas

Maraming salamat sa pagbabasa, Tulad ng marami sa inyong alam ang pagdodokumento ng isang proyekto ay maaaring maging mahirap tulad ng paggawa nito. may mga scrap ng video na nakikipag-usap sa akin na sa kalaunan ay makikita ang ilaw ng araw.

Sa mga taon sa pagitan ng paggawa ng proyektong ito at pagsulat nito inaasahan kong makakita ng mas maraming mga halimbawa ng di-makatwirang LED display gamit ang 3D na pag-print, ngunit ang pagbawas sa mga piraso ng RGB ay halos tinanggal ang pangangailangan para sa isang kahalili.

Inaasahan kong naging kaalaman ito, at mangyaring magtanong ng mga katanungan habang susubukan kong magbigay ng mas maraming detalye sa mga seksyon na hindi ganap na nasiyahan.

Cheers

Inirerekumendang: