Tartalomjegyzék:
- 1. lépés: Elülső réteg
- 2. lépés: A vezetőréteg tervezése
- 3. lépés: A vezetőréteg felépítése
- 4. lépés: A LED -ek bekötése
- 5. lépés: Az elektronika tervezése
- 6. lépés: Az elektronika bekötése
- 7. lépés: Programozás
- 8. lépés: A ház
- 9. lépés: Záró megjegyzések
Videó: Londoni földalatti térképóra: 9 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
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
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
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
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
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
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
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
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
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:
DIY 37 LED Arduino rulett játék: 3 lépés (képekkel)
DIY 37 Leds Arduino Roulette Játék: A rulett egy kaszinójáték, amelyet a francia szóról neveztek el, jelentése kis kerék
Útmutató: A Raspberry PI 4 fej nélküli (VNC) telepítése Rpi-képalkotóval és képekkel: 7 lépés (képekkel)
Útmutató: A Raspberry PI 4 fej nélküli (VNC) telepítése Rpi-képalkotóval és képekkel: Ezt a Rapsberry PI-t tervezem használni egy csomó szórakoztató projektben a blogomban. Nyugodtan nézd meg. Vissza akartam kezdeni a Raspberry PI használatát, de nem volt billentyűzetem vagy egér az új helyen. Rég volt, hogy beállítottam egy málnát
Egy londoni metró jubileumi vonal ajtó gombjának feltörése: 12 lépés (képekkel)
Egy londoni földalatti jubileumi vonal ajtó gombjának feltörése: A Londoni Közlekedési Múzeum boltja a Jubilee Line leszerelt ajtógombjait árulja (bal és jobb is kapható). Ha olyan projekt végrehajtásán gondolkodik, amelyhez valamilyen gomb és jelzőlámpa szükséges, akkor
Bolt - DIY vezeték nélküli töltő éjszakai óra (6 lépés): 6 lépés (képekkel)
Bolt - DIY vezeték nélküli töltés éjszakai óra (6 lépés): Az induktív töltés (más néven vezeték nélküli töltés vagy vezeték nélküli töltés) a vezeték nélküli áramátvitel egyik típusa. Elektromágneses indukciót használ a hordozható eszközök áramellátásához. A leggyakoribb alkalmazás a Qi vezeték nélküli töltő
A számítógép szétszerelése egyszerű lépésekkel és képekkel: 13 lépés (képekkel)
A számítógép szétszerelése egyszerű lépésekkel és képekkel: Ez az utasítás a számítógép szétszereléséről szól. A legtöbb alapvető alkatrész moduláris és könnyen eltávolítható. Fontos azonban, hogy szervezett legyen ezzel kapcsolatban. Ez segít elkerülni az alkatrészek elvesztését, és az újra összerakást is