Tartalomjegyzék:

Londoni földalatti térképóra: 9 lépés (képekkel)
Londoni földalatti térképóra: 9 lépés (képekkel)

Videó: Londoni földalatti térképóra: 9 lépés (képekkel)

Videó: Londoni földalatti térképóra: 9 lépés (képekkel)
Videó: PSGOGLI7 összebalhézik Győzikével [ !Verekedés! ] 2024, November
Anonim
London Underground Map Clock
London Underground Map Clock
London Underground Map Clock
London Underground Map Clock

2014 -ben, a londoni 3D nyomtatási tanácsadó intézetben végzett gyakorlat és a színes litofánokkal végzett kísérlet során, a Stratasys gépük segítségével, megtervezem saját távozó ajándékomat, az irodájukban található csővezetékek színes 3D -s nyomtatását. Elhatároztam, hogy készítek belőle valamit. Rövid két évvel később, 2016 -ban megvolt a saját 3D nyomtatóm, és elkezdtem dolgozni, hogy órát csináljak belőle.

Gyerekkoromban bár a Tokyo Flash digitális órák voltak a valaha volt legnagyobb dolgok, és kicsúsztatva ez ihlette a dizájnt.

És most csak egy kisebb 4 éves szünet volt, amíg rá nem jöttem, hogy megírjam!

Bár a pontos utasításokat nehéz lesz megismételni, és a hobbista PCB -gyártás költségeinek csökkentése az elmúlt néhány évben elavulttá teheti a LED -elhelyezésre vonatkozó pontos módszeremet. Remélem, a megosztott ötletek ahhoz vezethetnek, hogy mások furcsa órákat készítenek vékony tárgyakból!

1. lépés: Elülső réteg

Elülső réteg
Elülső réteg
Elülső réteg
Elülső réteg
Elülső réteg
Elülső réteg

Amint a bevezetőben említettük, ez egy színes 3D nyomtatás volt, azt hiszem, egy Stratasys gép, amely porágyat és módosított tintapatront használt a kötőanyag és a pigment számára.

A fájl elveszett a történelemben, de ez a réteg bármi lehet, egy fotó vagy egyszínű litofán csodákra képes.

Ez a rész 2014 -ben készült a 3DS max -ban

2. lépés: A vezetőréteg tervezése

A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése
A vezetőréteg tervezése

Itt döntjük el a projekt összetettségét és az idő leolvasásának módszerét. A képek azt a 2 ötletet mutatják, amelyekkel játszottam.

Ezeket a tervezés során végzett szkenneléssel és az inkcape -ben vonalak rajzolásával készítették.

Ez nem túl jól olvasható óra, de én inkább azt az elképzelést részesítettem előnyben, hogy egész nap kitöltik a sorokat, így ez lett a tervezési cél.

A bináris számolás egy életképes módszer a LED -ek számának csökkentésére, és javítaná az olvashatóságot, ha a bináris a lekvár, de ez aláásta a „kitöltési vonalak” ötletemet, ezért nem volt lehetőség erre a projektre

A Tokyo Flash órákon gyakori, hogy minimalizálják a LED -számot, de ha egy szakasz 3 -ban vagy 5 -ben számol, majd egy másik töltés minden alkalommal, amikor a szakasz kitöltődik, ezt a technikát használtam a percekben, hogy 60 -ról 20 -ra csökkentsem őket. I másodpercekig nem aggódott annyira a pontosság miatt.

3. lépés: A vezetőréteg felépítése

A vezetőréteg felépítése
A vezetőréteg felépítése
A vezetőréteg felépítése
A vezetőréteg felépítése
A vezetőréteg felépítése
A vezetőréteg felépítése

Ennek a LED -eknek a vezetőrétegének két célja van, a helyén tartja a LED -eket, és megakadályozza a köztük lévő kiömlést

Rétegként rajzolta az Inkscape -en közvetlenül a tervezés elrendezéséhez használt szkennelés tetejére. 1 mm vastagságot adtak hozzá a turmixgépben, mielőtt elküldték a nyomtatómra.

Ez volt az egyik legnehezebb nyomat, amelyet a sovány Makibox A6 -on kell készítenem, az alkatrészt hasizomban nyomtatták ki, így egy tonna acetonos hígtrágyát használtak, hogy minimális deformációval rögzítsék az építési platformhoz. Szerencsére ez a rész nem látható a végterméken

A végső kép azt mutatja, hogy lámpához tartotta, hogy ellenőrizze a távolságot.

Utólag visszagondolva, a fények közötti kiömlés egy vonal mentén valóban előnyösebb lehet a látvány szempontjából, nem nehezebb leolvasni, ezt úgy érhetjük el, ha letörést teszünk az útmutatóhoz az egyes fények rövid oldalain.

4. lépés: A LED -ek bekötése

A LED -ek bekötése
A LED -ek bekötése
A LED -ek bekötése
A LED -ek bekötése
A LED -ek bekötése
A LED -ek bekötése

Az első képen a lyukméret ellenőrzéséhez készített próbanyomtatás látható, arra törekedtem, hogy a LED kis erővel illeszkedjen a csipkébe, majd a megfelelő alakot kézzel helyezték el a vezetőréteg lefektetésekor.

A 3D nyomtatóm alacsony tűrőképessége miatt egyesek lazák voltak, és egy szuper ragasztó kellett, hogy a helyükön maradjanak, míg mások túl szorosak, de a helyükre szorították őket a LED lenyomásával forrasztás közben, ez valójában jobban illeszkedett, mint a megfelelő méretű lyuk, amelyet bérbeadás után ki kellett húzni.

A vezetékek számának csökkentése érdekében a LED -eket 7 x 8 -as mátrixba forrasztották, ami azt jelenti, hogy mind az 55 LED -et csak 13 érintkezővel lehet vezérelni. Kézzel rajzolt térképem volt ezekről a kapcsolatokról, amelyek sajnos elvesztek.

Zománcdrótot használtak, így a szakaszok a helyükre kerülhetnek, ha egy részt vasalóval melegítenek és bádogoznak a csatlakozás előtt.

Ez a folyamat nagyon időigényes volt, nagyon ajánlom egy NYÁK tervezését

5. lépés: Az elektronika tervezése

Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése
Az elektronika tervezése

A kezdeti tervem egy Arduino mikrokontroller használata volt RTC -vel, de az ESP8266 mellett döntöttem a Node MCU D1 táblán, mivel ez lehetővé tette az automatikus nyári időszámítást és a WIFI feletti vezérlés lehetőségét.

Annak érdekében, hogy tovább csökkentsem a csapok számát, tökéletes számú LED -del rendelkeztem ahhoz, hogy MAX7219 -et használhassak (amely akár 64 LED -et is képes kezelni).

Ezt az IC -t általában a LED 7 szegmenses kijelzők meghajtására használják, de nagyon hasonló volt az enyémhez, tetszőleges számú LED -et világított minimális villódzással, még szabályozható fényereje is van.

Úgy döntöttem, hogy a protoboardot használom a huzalozáshoz, de a sas hasznos volt az alkatrészek elhelyezésében és a vezetékek megértésében

Csatoltam az alaplapom fájljait, de ez volt az első alkalom, amikor az eagle -t (és mára elavult verziót) használtam, így csak referenciaként szolgálnak

6. lépés: Az elektronika bekötése

Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése
Az elektronika bekötése

Ez ismétlődő egyszerű lépés volt, az Eagle sematikáját követve, az ESP és a LED mátrix fejléceinek használata nagyban segített az összeszerelésben.

Az Anode & Cathode LED fejlécek 1 -es tüskéjét ezüst élességgel jelöltük, meg lehetett különböztetni őket, mivel a 7 -es a másik 8 volt.

7. lépés: Programozás

Programozás
Programozás

Mivel a kijelzőnk nem hagyományos mátrix, meg kellett találnom egy módszert annak megjelenítésére, hogy mely biteket kell bekapcsolni, amelyeket a HEX MAX IC -jére küldött. Szerencsére csak annyit tudok Excelből, hogy bajba keveredjek, és készítettem egy „Hex varázslót”, hogy vezessen a kívánt minta megjelenítése mellett, kézzel elhelyezett jelölőnégyzetekkel.

Ez azzal az átértékeléssel járt, hogy az órám, percem és másodperceim hexadecímét bitenként VAGY kombinálhatjuk, hogy előállítsuk az utolsó hexadecimális parancsot, amelyet el kell küldeni a max7219 -nek, beleértve egy kis animációt, amelyet hozzáadtam a másodpercekhez, hogy megbizonyosodhassam arról, hogy a tábla nem fagyott meg;

Szóval, majdnem a végén. és ideje egy újabb döntésnek, amely nem öregedett túl jól.

Az ESP kódja a LUA -ban van. Ma javaslom az arduino IDE használatát a jobb dokumentáció és a megbízható csomagkönyvtár érdekében, abban az időben, amikor az ESP közösség még érett volt, és én a LUA -t választottam a projekt nyelveként.

Azt a megkérdőjelezhető döntést hoztam, hogy rendszeresen pingelni fogom a Google szervereit az idő leolvasásához. Ennek elkerülése érdekében szükség volt egy RTC -re a sodródás minimalizálása érdekében, ez működik, de jobb, ha valós idejű API -t használ.

halfSec = 0 óra = 0 perc = 0 másodperc = 0

lowIntensity = 0

highIntensity = 9

local SSID = "Wifi"

local SSID_PASSWORD = "Jelszó"

function time () -csatlakozzon az internethez, hogy megkapja az aktuális időt és dátumot

ha wifi.sta.getip (), akkor helyi conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")

conn: on ("kapcsolat", function (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Elfogadás: */ *\ r / n".. " User-Agent: Mozilla/4.0 (kompatibilis; esp8266 Lua;) ".." / r / n / r / n ") end)

conn: on ("fogad", függvény (conn, hasznos terhelés) --print (hasznos terhelés) conn: close () local p = string.find (hasznos terhelés, "GMT") -keresse meg az idő és a dátum karakterláncát a hasznos terhelésben az internetről, változtassa meg az időzónát, ha p ~ = nulla akkor-számok kivonása az óra, perc, másodperc, nap, hónap óra szerint = tonumber (string.sub (hasznos terhelés, p-9, p-8)) perc = tonumber (string.sub (hasznos terhelés, p- 6, p-5)) second = tonumber (string.sub (payload, p-3, p-2)) addHour ()-kemény kódolású BST (brit nyári időszámítás) nyári időszámítás takarékos nyomtatás (óra, perc, másodperc) fél = (második%6)*2 --print (halfSec) else print ("a webes frissítés nem sikerült!") end end -function) -end of "Receive" eseménykezelő vége

conn: on ("leválasztás", függvény (conn, payload) conn = nil payload = nil end) end print ("még nincs wifi") vége

függvény borTable (a, b,…) -bites VAGY táblák együtt

ha arg [1], akkor b = borTable (b, kicsomagolás (arg)) end local z = {} i, v esetén ipairs (a) do table.insert (z, bit.bor (v, b )) vége visszatér z vége

függvény bxorTable (a, b,…) -bites vagy VAGY táblák együtt

ha arg [1], akkor b = bxorTable (b, kicsomagolás (arg)) end local z = {} i, v esetén ipairs (a) do table.insert (z, bit.bxor (v, b )) vége visszatér z vége

függvény addSecond ()

másodperc = második+1, ha második> = 60, majd második = 0 perc = perc+1, ha perc> = 60, majd perc = 0 addHour () vége vége vége

függvény addHour ()

óra = óra+1, ha óra> = 24, akkor óra = 0 vége, ha óra == 2 vagy óra == 16, akkor max7219.setIntensity (lowIntensity) vége, ha óra == 8 vagy óra == 18, majd max7219.setIntensity (highIntensity) end end function 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, 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}}; helyi min = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x002, 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}}; helyi 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, 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, 0x08 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; -nyomtatás (óra, perc, másodperc)

-a táblázat 0-ról indul, tehát 1-nél, mint jelenleg [0] = nulla)

max7219.write ({animate (borTable (sec [1+ (second/secGap))], min [1+ (perc/percGap)], hor [1+ (óra/horGap)]))})

vége -funkció

wifi.setmode (wifi. STATION)

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

--konfigurálja a max7219-et

max7219 = szükséges ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensitás = highIntensity})

-fő program

checkOnline = tmr.create ()

tmr.alarm (0, 180000, 1, idő)

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

tmr.alarm (2, 500, 1, frissítés)

animate funkció (állókép)

helyi keretek = {{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, ha halfSec> = 12, majd halfSec = 0 end --print (halfSec) return bxorTable (frame [halfSec+1], still) end

8. lépés: A ház

A Ház
A Ház
A Ház
A Ház
A Ház
A Ház

Itt az ideje, hogy megmutassa hihetetlen mesterségbeli tudását és vezesse be a projektet.

Vagy vegyél ki egy amazon csomagot az újrahasznosításból, és készíts egy ideiglenes házat, amely még ma is használatban van.

Ennek a megközelítésnek az előnye az volt, hogy a projekt minden rétege szinte tökéletesen megfelelt a karton vastagságának, így egy szendvicset fel lehetett rakni és ragasztani. Egy hasonló prémium verzióban akril is használható

9. lépés: Záró megjegyzések

Köszönjük, hogy elolvasta. Sokan tudják, hogy egy projekt dokumentálása ugyanolyan nehéz lehet, mint elkészítése. vannak olyan videófoszlányok, amelyekben beszélgetek, és amelyek végül napvilágot láthatnak.

A projekt elkészítése és megírása között eltelt években arra számítottam, hogy több példát fogok látni a 3D nyomtatást használó tetszőleges LED -kijelzőkre, de az RGB csíkok csökkentése többnyire megszüntette az alternatíva szükségességét.

Remélem, hogy ez informatív volt, és tegyen fel kérdéseket, miközben megpróbálok részletesebben leírni azokat a részeket, amelyek nem teljesen kielégítőek.

Egészségére

Ajánlott: