Mündəricat:
- Addım 1: Ön qat
- Addım 2: Bələdçi Layerinin Dizaynı
- Addım 3: Bələdçi Layerinin qurulması
- Addım 4: LED -lərin naqillərə çəkilməsi
- Addım 5: Elektronikanın dizaynı
- Addım 6: Elektronikanı naqilləşdirin
- Addım 7: Proqramlaşdırma
- Addım 8: Mənzil
- Addım 9: yekun qeydlər
Video: London Yeraltı Xəritə Saatı: 9 addım (şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
2014 -cü ildə, Londondakı 3D çap məsləhətxanasında təcrübə keçdikdən və Stratasys maşınlarından istifadə edərək rəngli litofanlarla təcrübə keçirdikdən sonra, ofislərimdə yerli boru xətlərinin rəngli 3D çapını təqdim etdim. Ondan bir şey etmək qərarına gəldim. Qısa 2 il sonra 2016 -cı ildə öz 3D printerim var idi və onu saata çevirmək üçün işə başladım.
Uşaq ikən Tokio Flash rəqəmsal saatları indiyə qədərki ən böyük şeylər idi və bu dizaynın ilham mənbəyi olardı.
Və bunu yazmağa başlayana qədər 4 illik kiçik bir fasilə oldu!
Dəqiq təlimatları təkrarlamaq çətin olsa da və son bir neçə ildə həvəskar PCB istehsalında maya dəyərinin azalması LED yerləşdirmə üçün dəqiq metodumu köhnəltmiş ola bilər. Ümid edirəm ki, paylaşılan fikirlər başqalarının nazik əşyalardan qəribə saatlar yaratmasına səbəb ola bilər!
Addım 1: Ön qat
Girişdə qeyd edildiyi kimi, bu rəngli bir 3D çap idi, inanıram ki, bağlayıcı və piqment üçün toz yatağı və dəyişdirilmiş mürəkkəb kartuşu istifadə edən Stratasys maşını.
Fayl tarixə düşdü, amma bu qat hər şey ola bilər, bir fotoşəkil və ya tək rəngli litofan möcüzələr yaradar.
Bu hissə 2014 -cü ildə 3DS max -da hazırlanmışdır, lakin bu gün görüntünü parlaqlığa əsaslanaraq SLT -ə çevirmək üçün onlayn vasitələr mövcuddur.
Addım 2: Bələdçi Layerinin Dizaynı
Layihənin mürəkkəbliyinə və vaxtı oxumaq üsuluna burada qərar veririk. Şəkillər oynadığım 2 fikri göstərir.
Bunlar dizaynda tarama və inkscape üzərindən xətlər çəkməklə edildi.
Bu çox oxunaqlı bir saat deyil, amma gün ərzində xətlərin doldurulması fikrinə üstünlük verdim ki, bu da dizayn məqsədinə çevrildi.
İkili sayma, LED sayını azaltmaq üçün əlverişli bir üsuldur və ikili sizin tıxacınızdırsa, oxunuşu yaxşılaşdıracaq, ancaq bu "doldurma xətləri" fikrimi pozdu, bu layihə üçün bir seçim deyildi
LED sayını minimuma endirmək Tokio Flaş Saatlərində adi haldır, ancaq 3 və ya 5 saniyədə bir bölmə və sonra hər bir bölmə doldurulduqda başqa bir doldurma var, bunları 60 -dan 20 artı 2 -yə endirmək üçün dəqiqə ərzində bu texnikadan istifadə etdim. dəqiqələr üçün bu qədər narahat olmadı.
Addım 3: Bələdçi Layerinin qurulması
LED -lər üçün bu bələdçi təbəqənin 2 məqsədi var, LED -ləri yerində saxlayır və aralarında dağılmaların qarşısını alır
Dizayn düzeni üçün istifadə etdiyim taramanın üstündəki Inkscape -də bir təbəqə kimi çəkilmişdir. Çapıma göndərməzdən əvvəl blenderə 1 mm qalınlıq əlavə edildi.
Kiçik Makibox A6 -da etməli olduğum ən çətin izlərdən biri idi, hissə abs -da çap olundu, buna görə də minimal əyilmə ilə quruluş platformasına yapışmasını təmin etmək üçün bir ton aseton çamuru istifadə edildi. Xoşbəxtlikdən bu hissə son məhsulda görünmür
Yekun görüntü, aralığın yoxlanılması üçün lampaya qədər dayandığını göstərir.
Bir baxışda, işıqlar arasında bir xətt boyunca tökülmə, görmə qabiliyyətinə görə daha çox üstünlük verilə bilər, oxunması çətin deyil, buna hər işığın qısa tərəflərindəki bələdçiyə yiv əlavə etməklə nail olmaq olar.
Addım 4: LED -lərin naqillərə çəkilməsi
İlk şəkil, çuxurun ölçüsünü yoxlamaq üçün hazırladığım test çapını göstərir, LED -in bir az qüvvə ilə krujevaya möhkəm oturmasını məqsəd qoymuşdum, sonra bələdçi təbəqəsi qoyularkən düzgün forma əllə yerləşdirilmişdi.
3D printerimin aşağı dözümlülüyü səbəbindən bəziləri boş idi və bir yerdə qalmaq üçün super yapışqan lazım idi, digərləri isə çox sıx idi, ancaq lehimləmə zamanı LED -ə basılaraq yerinə təşviq edildi, bu əslində daha yaxşı uyğun gəlirdi. düzgün ölçülü çuxur, içəriyə bir dəfə çəkildikdə çıxarmaq üçün kirayəsi olan.
Tel sayını azaltmaq üçün LEDlər 7 -dən 8 -ə qədər bir matrisdə lehimləndi, yəni 55 LED -in hamısı yalnız 13 sancaqla idarə oluna bilərdi, bu əlaqələrin hər birinin təəssüf ki itirilmiş bir əllə çəkilmiş xəritəm var idi.
Emaye teldən istifadə edildi, belə ki, əlaqəni qurmazdan əvvəl bir hissəni dəmir ilə qızdırmaq və qalaylamaq olar.
Bu proses çox vaxt aparırdı, bir PCB dizayn etməyi çox tövsiyə edərdim
Addım 5: Elektronikanın dizaynı
İlkin planım, RTC ilə bir Arduino mikro nəzarətçisindən istifadə etmək idi, ancaq avtomatik gün işığına qənaət etməyə və WIFI üzərində nəzarət potensialına malik olduğu üçün Node MCU D1 lövhəsində bir ESP8266 seçdi.
Pin sayını daha da azaltmaq üçün MAX7219 (64 LED -ə qədər idarə edə bilən) istifadə etmək üçün mükəmməl sayda LED -ə malik oldum.
Bu IC ümumiyyətlə LED 7 Segment ekranlarını idarə etmək üçün istifadə olunur, lakin çox az sayda titrəyişlə çox sayda LED işıqlandıran, hətta mənimki ilə oxşar bir istifadə vəziyyətinə malik idi, hətta nəzarət edilə bilən parlaqlığa malikdir.
Kablolama üçün protoboard istifadə etmək qərarına gəldim, ancaq qartal hissələrin yerləşdirilməsi və naqilləri başa düşmək üçün faydalı oldu
Lövhə sənədlərimi əlavə etdim, ancaq ilk dəfə qartaldan istifadə etdim (və bu günə qədər köhnəlmiş bir versiyadır), buna görə də onlar yalnız istinad üçündür
Addım 6: Elektronikanı naqilləşdirin
Eagle sxemini izləyən, ESP üçün başlıqlardan istifadə edən və LED matrisinin montajda çox kömək etdiyi təkrarlanan sadə bir addım idi.
Anod və Katod LED başlıqlarında 1 -ci pin gümüş bir kəsici ilə işarələndi, 7 -də digər 8 -də olduğu kimi fərqləndirilə bilər.
Addım 7: Proqramlaşdırma
Ekranınız ənənəvi bir matris olmadığından, HEX -də MAX IC -ə göndərdiyi bitləri açmaq üçün görüntüləmək üçün bir üsul tapmalı oldum. Xoşbəxtlikdən, problemə girmək üçün kifayət qədər excel bilirəm və nümayiş etdirmək istədiyim naxış, əllə yerləşdirilmiş onay qutuları hamısına baxmayaraq mənə rəhbərlik etmək üçün 'Hex sehrbazı' hazırladım.
Bu, saniyələrə əlavə etdiyim kiçik bir animasiya da daxil olmaqla, max7219 -a göndərmək üçün son hex əmrini istehsal etmək üçün saat, dəqiqə və saniyələrdəki hex -in bitsel OR -dan istifadə edərək birləşdirilə biləcəyi yenidən qiymətləndirmə ilə gəldi. donmadı.
Deməli, demək olar ki, sonda. və çox yaxşı yaşlanmayan başqa bir qərarın vaxtıdır.
ESP kodu LUA -dadır, bu gün daha yaxşı sənədləşmə və möhkəm paket kitabxanası üçün arduino IDE -dən istifadə etməyi məsləhət görürəm, ESP icması hələ yetişəndə və bu layihə üçün LUA dilini seçdim.
Saatı oxumaq üçün google serverlərini mütəmadi olaraq ping etmək barədə şübhəli qərar verdim. Bu, sürüşməni minimuma endirmək üçün bir RTC -yə ehtiyac duydu, bu işləyir, amma əsl zaman API istifadə etmək daha yaxşıdır.
yarımSec = 0saat = 0 dəqiqə = 0 saniyə = 0
aşağı sıxlıq = 0
yüksək sıxlıq = 9
yerli SSID = "Wifi"
yerli SSID_PASSWORD = "Şifrə"
function time () -cari vaxtı və tarixi əldə etmək üçün internetə qoşulun
əgər wifi.sta.getip () sonra yerli conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")
conn: on ("əlaqə", function (conn, payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "Host: time.is / r / n".. "Qəbul edin: */ *\ r / n".. " İstifadəçi Agent: Mozilla/4.0 (uyğun; esp8266 Lua;) ".." / r / n / r / n ") son)
conn: on ("qəbul et", function (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") -internetdən gələn yükdə vaxt və tarix simini tapın, əgər p ~ = sıfırdan sonra-saata, dəqiqəyə, saniyəyə, günə, aya uyğun gələn ədədləri çıxarın = tonumber (string.sub (payload, p-9, p-8)) minutes = tonumber (string.sub (payload, p- 6; = (ikinci%6)*2 -çap (halfSec) başqa çap ("web yeniləməsi uğursuz oldu!") sonu sonu -funksiya) -"qəbul et" hadisə işleyicisinin sonu
conn: on ("ayrılma", funksiya (bağlantı, yük) conn = sıfır yük = sıfır son) son çap ("hələ wifi yoxdur") son
borTable (a, b,…) funksiyası -əksinə və ya birlikdə cədvəllər
əgər arg [1] onda b = borTable (b, aç (arg)) sonu yerli z = {} i, v üçün ipairs (a) do table.insert (z, bit.bor (v, b )) son qaytarma z son
bxorTable (a, b, …) funksiyası -əksinə və ya birlikdə cədvəllər
əgər arg [1] onda b = bxorTable (b, aç (arg)) sonu yerli z = {} i, v üçün ipairs (a) da table.insert (z, bit.bxor (v, b )) son qaytarma z son
addSecond () funksiyası
saniyə = saniyə+1 saniyə> = 60 sonra saniyə = 0 dəqiqə = dəqiqə+1 əgər dəqiqə> = 60 sonra dəqiqə = 0 addHour () bitiş sonu
addHour funksiyası ()
saat = saat+1 olarsa saat = = 24 sonra saat = 0 bitərsə saat == 2 və ya saat == 16 sonra max7219.setIntensity (lowIntensity) saat == 8 və ya saat == 18 olarsa max7219.setIntensity (highIntensity) end end funksiyası yeniləməsi () 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, 0x02, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; yerli 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, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x12, 0x12 }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 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}}; yerli 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, 0x004, 0 000, 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, 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, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C 0, 0x0C}, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C0 0x4C, 0x0C, 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}}; -çap (saat, dəqiqə, saniyə)
-cədvəl 0-da başlayır, buna görə də hazırda 1 saniyədə [0] = sıfır)
max7219. yazmaq ({canlandırmaq (borTable (san [1+ (saniyə/saniyəGap)], dəq [1+ (dəqiqə/dəqiqəGap)], hor [1+ (saat/horGap)]))})
son -funksiya
wifi.setmode (wifi. STATION)
wifi.sta.config (SSID, SSID_PASSWORD) wifi.sta.autoconnect (1)
-max7219 konfiqurasiya edin
max7219 = tələb ("max7219") max7219. qurma ({numberOfModules = 1, slaveSelectPin = 8, intensivlik = yüksək intensivlik})
--Ana Proqram
checkOnline = tmr.create ()
tmr.alarm (0, 180000, 1, vaxt)
tmr.alarm (1, 1000, 1, addSecond)
tmr.alarm (2, 500, 1, yeniləmə)
animasiya funksiyası (hələ də)
yerli çərçivələr = {{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 əgər halfSec> = 12 olarsa halfSec = 0 end --print (halfSec) bxorTable (çərçivələr [halfSec+1], hələ) bitər
Addım 8: Mənzil
İnanılmaz sənətkarlığınızı nümayiş etdirmək və layihəni evləndirməyin vaxtıdır.
Ya bu, ya da geri çevrilmədən bir Amazon paketi götür və bu gün də istifadədə olan müvəqqəti bir mənzil tik.
Bu yanaşmanın faydası, layihənin hər bir təbəqəsinin kartonun qalınlığına demək olar ki, mükəmməl uyğun gəlməsi idi, buna görə də bir sandviç yığılıb bantlana bilərdi. Bənzər bir mükafat versiyası akril istifadə edə bilər
Addım 9: yekun qeydlər
Oxuduğunuz üçün təşəkkür edirəm, Bir çoxlarınızın bildiyi kimi bir layihəni sənədləşdirmək onu hazırlamaq qədər çətin ola bilər. mənimlə söhbət edən video parçaları var ki, nəticədə gün işığını görə bilər.
Bu layihənin hazırlanması ilə yazılması arasındakı illər ərzində 3D çapdan istifadə edərək özbaşına LED ekranlarının daha çox nümunəsini görəcəyimi gözləyirdim, lakin RGB şeritlərinin azalması əsasən alternativə olan ehtiyacı aradan qaldırdı.
Ümid edirəm ki, bu məlumatlı idi və zəhmət olmasa suallar verin, çünki tam təmin etməyən bölmələr haqqında daha ətraflı məlumat verməyə çalışacağam.
Sağol
Tövsiyə:
Təqaüd Saatı / Sayma / Dn Saatı: 4 Adım (Şəkillərlə)
Təqaüd Saatı / Sayma / Dn Saatı: Çekmecede bu 8x8 LED nöqtə matrisli ekranlardan bir neçəsi vardı və onlarla nə edəcəyimi düşünürdüm. Digər təlimatlardan ilhamlanaraq, gələcək bir tarixə/saata qədər saymaq üçün geri sayma/yuxarı göstərici qurmaq fikrinə sahib oldum və əgər hədəf vaxt
Xəritə Lampası- Məlumatlı və Gözəl !: 7 Addım
Xəritə Lampası- Məlumatlı və Gözəl !: Bu lampa Yeni/Yeni xəritədən hazırlanıb. 7-12V giriş istifadə edir və fərqli rənglərə və parlaqlığa uyğunlaşdırıla bilər. Hətta USB şarjı da var! Çox sadədir, lakin bəzi lehimləmə tələb edir
London Yeraltı Yubiley Xətti Qapı Düyməsini Hacking: 12 Addım (Şəkillərlə)
London Yeraltı Yubiley Xətti Qapı Düyməsini Hacking: London Nəqliyyat Muzeyi mağazası, yubiley xəttindən çıxarılan qapı düymələrini satır (həm sol, həm də sağ mövcuddur). Bir düyməyə və bir növ göstərici işığına ehtiyacı olan bir layihə həyata keçirməyi düşünürsənsə, "
Aşağı Mənbə Ayarları üçün Yeraltı Səviyyə Ölçmə Probu: 4 Addım (Şəkillərlə)
Aşağı Mənbə Ayarları üçün Yeraltı Səviyyə Ölçmə Probu: Giriş Oxfamdan Əfqanıstanda məktəbli uşaqların yaxınlıqdakı quyulardakı yeraltı suların səviyyəsini izləyə biləcəyi sadə bir yol hazırlamaq üçün bir istək aldıq. Bu səhifə Dr. Amir Haidari tərəfindən Dari dilinə tərcümə edilmişdir və tərcümə f
Cib Telefonunuzla Səs Çirkliliyini Ölçün və Xəritə Edin: 4 Adım (Şəkillərlə)
Cib Telefonunuzla Səs -küy Çirklənməsini Ölçün və Xəritələşdirin: Nicolas Maisonneuve (Sony CSL Paris) Matthias Stevens (Vrije Universiteit Brussel / Sony CSL Paris) Luc Steels (Brüssel Universiteti / Sony CSL Paris Universiteti) Bu " Təlimatlı " GPS ilə təchiz edilmiş mobil telefonunuzdan necə istifadə edə biləcəyinizi öyrənəcəksiniz