Turinys:
- 1 žingsnis: priekinis sluoksnis
- 2 veiksmas: kreipiamojo sluoksnio projektavimas
- 3 žingsnis: sukurkite kreipiamąjį sluoksnį
- 4 žingsnis: Šviesos diodų prijungimas
- 5 žingsnis: Elektronikos projektavimas
- 6 žingsnis: Elektronikos prijungimas
- 7 žingsnis: programavimas
- 8 žingsnis: būstas
- 9 žingsnis: Baigiamosios pastabos
Video: Londono metro žemėlapio laikrodis: 9 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
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
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
Č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į
Š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
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
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
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
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
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:
Žemėlapio patarimai: 3 žingsniai
Žemėlapių patarimai: kad ir kokia būtų jūsų veikla, ar tai būtų vaikščiojimas pėsčiomis, žygiai pėsčiomis, važiavimas dviračiu ar net vairavimas, galite įrašyti pasirinktus maršrutus. Tada galite pasidalinti šiais maršrutais su draugais ir šeima. Be to, įrašytą maršrutą galite naudoti norėdami pridėti vietų prie bet kokių nuotraukų, kurias galite
„Vortex“laikrodis: „Infinity Mirror“rankinis laikrodis: 10 žingsnių (su nuotraukomis)
„Vortex Watch“: begalybės veidrodinis laikrodis: Šio projekto tikslas buvo sukurti nešiojamą begalybės veidrodžio laikrodžio versiją. Jis naudoja savo RGB šviesos diodus, norėdamas nurodyti laiką, priskirdamas valandas, minutes ir sekundes atitinkamai raudonai, žaliai ir mėlynai šviesai ir sutampa su šiais atspalviais
Įsilaužimas į Londono metro jubiliejinės linijos durų mygtuką: 12 žingsnių (su nuotraukomis)
Įsilaužimas į Londono požeminės jubiliejinės linijos durų mygtuką: Londono transporto muziejaus parduotuvėje parduodami nebenaudojami durų mygtukai iš „Jubilee Line“(yra ir kairė, ir dešinė). Jei ketinate vykdyti projektą, kuriam reikia tam tikro mygtuko ir indikatoriaus lemputės, būsite „
C51 4 bitų elektroninis laikrodis - medinis laikrodis: 15 žingsnių (su nuotraukomis)
C51 4 bitų elektroninis laikrodis - medinis laikrodis: šį savaitgalį turėjote šiek tiek laisvo laiko, todėl surinko šį 2,40 USD vertės 4 bitų „pasidaryk pats“elektroninį skaitmeninį laikrodį, kurį prieš kurį laiką nusipirkau iš „AliExpress“
Navigacija robotu su batų jutikliais, be GPS, be žemėlapio: 13 žingsnių (su nuotraukomis)
Navigacija robotu su batų jutikliais, be GPS, be žemėlapio: robotas juda iš anksto užprogramuotu keliu ir perduoda (per „Bluetooth“) savo faktinę judėjimo informaciją į telefoną, kad būtų galima sekti realiuoju laiku. „Arduino“yra iš anksto užprogramuotas keliu, o „oblu“naudojamas roboto judesio jutimui. oblu perduoda informaciją apie judėjimą