Daftar Isi:

Jam Peta Bawah Tanah London: 9 Langkah (dengan Gambar)
Jam Peta Bawah Tanah London: 9 Langkah (dengan Gambar)

Video: Jam Peta Bawah Tanah London: 9 Langkah (dengan Gambar)

Video: Jam Peta Bawah Tanah London: 9 Langkah (dengan Gambar)
Video: KALIAN MELIHAT TRAMPOLIN APA AIR KOLAM RENANG???! #shorts 2024, November
Anonim
Jam Peta Bawah Tanah London
Jam Peta Bawah Tanah London
Jam Peta Bawah Tanah London
Jam Peta Bawah Tanah London

Pada tahun 2014, setelah magang di sebuah konsultan percetakan 3D di London dan percobaan dengan litofan warna menggunakan mesin Stratasys mereka, saya merancang hadiah perjalanan saya sendiri, cetakan 3D warna dari garis tabung lokal ke kantor mereka. Saya bertekad untuk membuat sesuatu darinya. Singkat 2 tahun kemudian pada tahun 2016 saya memiliki printer 3D saya sendiri, dan mulai bekerja membuatnya menjadi jam.

Sebagai seorang anak saya pikir jam tangan digital Tokyo Flash adalah hal terbesar yang pernah ada, dan menganggap itu akan menjadi titik inspirasi untuk desainnya.

Dan sekarang hanya istirahat kecil selama 4 tahun sampai saya sempat menulisnya!

Sementara instruksi yang tepat akan sulit untuk ditiru, dan pengurangan biaya dalam pembuatan PCB hobi dalam beberapa tahun terakhir mungkin membuat metode saya yang tepat untuk penempatan LED menjadi usang. Saya harap ide yang dibagikan dapat membuat orang lain membuat jam aneh dari benda tipis!

Langkah 1: Lapisan Depan

Lapisan Depan
Lapisan Depan
Lapisan Depan
Lapisan Depan
Lapisan Depan
Lapisan Depan

Seperti disebutkan dalam intro, ini adalah cetak 3D warna, saya percaya mesin Stratasys yang menggunakan tempat tidur bubuk dan kartrid tinta yang dimodifikasi untuk pengikat dan pigmen.

File hilang dari sejarah, tetapi lapisan ini bisa apa saja, foto atau litofan satu warna akan bekerja dengan sangat baik.

Bagian ini dibuat di 3DS max pada tahun 2014, tetapi hari ini ada alat online untuk mengubah gambar menjadi SLT berdasarkan kecerahan

Langkah 2: Mendesain Layer Panduan

Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan
Mendesain Layer Panduan

Di sinilah kami memutuskan kompleksitas proyek dan metode untuk membaca waktu. Gambar menunjukkan 2 ide yang saya mainkan.

Ini dibuat dengan memindai dalam desain dan menggambar garis di atasnya dalam inkscape.

Ini bukan jam yang sangat mudah dibaca, tapi saya lebih suka ide garis mengisi sepanjang hari sehingga menjadi tujuan desain.

Penghitungan biner adalah metode yang layak untuk mengurangi jumlah LED, dan itu akan meningkatkan keterbacaan jika biner adalah kemacetan Anda, tetapi itu merusak ide 'garis pengisian' saya, jadi bukan pilihan untuk proyek ini

Sudah umum di Tokyo Flash Watches untuk meminimalkan jumlah LED tetapi memiliki satu bagian yang dihitung dalam 3 atau 5 dan kemudian pengisian lain untuk setiap kali bagian itu terisi, saya menggunakan teknik ini untuk menit, untuk menguranginya dari 60 menjadi 20 ditambah 2. Saya tidak begitu khawatir tentang presisi ini selama beberapa detik.

Langkah 3: Membangun Layer Panduan

Membangun Lapisan Panduan
Membangun Lapisan Panduan
Membangun Lapisan Panduan
Membangun Lapisan Panduan
Membangun Lapisan Panduan
Membangun Lapisan Panduan

Lapisan panduan untuk LED ini memiliki 2 tujuan, menahan LED di tempatnya, dan mencegah tumpahan di antara mereka

Itu digambar sebagai lapisan pada Inkscape langsung di atas pemindaian yang saya gunakan untuk tata letak desain. Ketebalan 1mm ditambahkan dalam blender sebelum dikirim ke printer saya.

Ini adalah salah satu cetakan tersulit yang harus saya buat pada Makibox A6 saya yang sedikit, bagian itu dicetak dalam perut sehingga satu ton bubur aseton digunakan untuk membuatnya tetap menempel pada platform pembuatan dengan sedikit lengkungan. Untungnya bagian ini tidak terlihat pada produk akhir

Gambar terakhir menunjukkan itu dipegang ke lampu untuk memeriksa jarak.

Di belakang, tumpahan di antara lampu di sepanjang garis mungkin sebenarnya lebih disukai untuk visual, tidak lebih sulit untuk dibaca, ini dapat dicapai dengan menambahkan talang ke panduan di sisi pendek setiap lampu

Langkah 4: Menghubungkan LED

Menghubungkan LED
Menghubungkan LED
Menghubungkan LED
Menghubungkan LED
Menghubungkan LED
Menghubungkan LED

Gambar pertama menunjukkan cetakan uji yang saya buat untuk memeriksa ukuran lubang, saya bertujuan agar LED pas dengan renda dengan sedikit kekuatan, bentuk yang benar kemudian ditempatkan dengan tangan saat meletakkan lapisan pemandu.

Karena toleransi yang rendah dari printer 3D saya, ada yang longgar dan membutuhkan sedikit lem super untuk tetap di tempatnya sementara yang lain terlalu kencang, tetapi didorong ke tempatnya dengan menekan LED saat menyolder, ini sebenarnya lebih cocok daripada lubang berukuran benar, yang memiliki sewa untuk ditarik keluar setelah kabel masuk.

Untuk mengurangi jumlah kabel, LED disolder dalam matriks 7 kali 8, artinya semua 55 LED dapat dikontrol hanya dengan 13 pin, saya memiliki peta yang digambar tangan dari masing-masing koneksi ini yang sayangnya telah hilang.

Kawat email digunakan agar bagian-bagian dapat terbuka di tempatnya dengan memanaskan bagian dengan setrika dan tinning sebelum membuat sambungan.

Proses ini sangat memakan waktu, saya sangat merekomendasikan mendesain PCB

Langkah 5: Merancang Elektronik

Merancang Elektronik
Merancang Elektronik
Merancang Elektronik
Merancang Elektronik
Merancang Elektronik
Merancang Elektronik
Merancang Elektronik
Merancang Elektronik

Rencana awal saya adalah menggunakan mikrokontroler Arduino dengan RTC, tetapi memilih ESP8266 pada papan Node MCU D1 karena memungkinkan penghematan siang hari otomatis dan potensi kontrol melalui WIFI.

Untuk mengurangi jumlah pin lebih lanjut, saya memiliki jumlah LED yang sempurna untuk dapat menggunakan MAX7219 (yang dapat menangani hingga 64 LED).

IC ini biasanya digunakan untuk menggerakkan tampilan LED 7 Segmen, tetapi memiliki kasus penggunaan yang sangat mirip dengan saya, menyalakan sejumlah LED dengan kedipan minimal, bahkan memiliki kecerahan yang dapat dikontrol.

Saya memutuskan untuk menggunakan protoboard untuk pengkabelan, tetapi elang sangat membantu untuk penempatan bagian dan memahami pengkabelan

Saya telah melampirkan file papan saya, tetapi ini adalah pertama kalinya saya menggunakan elang (dan versi kedaluwarsa sekarang) jadi itu hanya untuk referensi

Langkah 6: Menghubungkan Elektronik

Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik
Menghubungkan Elektronik

Ini adalah langkah sederhana yang berulang, mengikuti skema Eagle, menggunakan header untuk ESP dan matriks LED sangat membantu dalam perakitan.

Pin 1 pada header LED Anoda & Katoda ditandai dengan sharpie perak, mereka dapat dibedakan antara seperti pada 7 dan 8 lainnya.

Langkah 7: Pemrograman

Pemrograman
Pemrograman

Karena tampilan kami bukan matriks tradisional, saya harus menemukan metode untuk memvisualisasikan bit mana yang harus dihidupkan yang dikirim ke IC MAX dalam HEX. Untungnya saya tahu cukup excel untuk mendapat masalah dan membuat 'Hex wizard' untuk membimbing saya meskipun pola yang saya ingin ditampilkan, kotak centang ditempatkan tangan semua.

Ini datang dengan penilaian kembali bahwa hex untuk jam, menit, dan detik saya dapat digabungkan menggunakan bitwise ATAU untuk menghasilkan perintah hex terakhir untuk dikirim ke max7219, termasuk sedikit animasi yang saya tambahkan ke detik sehingga saya dapat memastikan papan tidak; tidak beku.

Jadi, hampir berakhir. dan waktu untuk keputusan lain yang belum terlalu matang.

Kode untuk ESP ada di LUA, Hari ini saya akan merekomendasikan menggunakan arduino IDE untuk dokumentasi yang lebih baik dan pustaka paket yang kuat, pada saat komunitas ESP masih matang dan saya memilih LUA sebagai bahasa untuk proyek ini.

Saya membuat keputusan yang dipertanyakan untuk secara teratur melakukan ping ke server google untuk membaca waktu. Ini menyiasati kebutuhan RTC untuk meminimalkan penyimpangan, ini berfungsi, tetapi Anda akan lebih baik menggunakan API waktu yang sebenarnya.

setengah detik = 0 jam = 0 menit = 0 detik = 0

intensitas rendah = 0

intensitas tinggi = 9

SSID lokal = "Wifi"

SSID_PASSWORD lokal = "Kata Sandi"

function time() --hubungkan ke internet untuk mendapatkan waktu dan tanggal saat ini

jika wifi.sta.getip() maka local conn=net.createConnection(net. TCP, 0) conn:connect(80, "google.com")

samb:pada("koneksi", function(sambungan, payload) conn:send("HEAD / HTTP/1.1\r\n".. "Host: time.is\r\n".. "Terima: */*\r\n".. " Agen-Pengguna: Mozilla/4.0 (kompatibel; esp8266 Lua;)".. "\r\n\r\n") akhir)

samb:pada("menerima", function(conn, payload) --print(payload) conn:close() local p=string.find(payload, "GMT") -- temukan string waktu dan tanggal dalam payload dari internet, ubah zona waktu jika p~ =nil lalu -- ekstrak angka yang sesuai dengan jam, menit, detik, hari, bulan jam=tonumber(string.sub(payload, p-9, p-8)) minute=tonumber(string.sub(payload, p- 6, p-5)) detik=tonumber(string.sub(payload, p-3, p-2)) addHour() --kode keras BST (waktu musim panas Inggris) siang hari menghemat cetak(jam, menit, detik) halfSec = (second%6)*2 --print(halfSec) else print("web update failed!") end end --function) --end of on "receive" event handler

samb:on("putus sambungan", function(sambungan, muatan) samb=nil payload=nil end) end print("belum ada wifi") end

fungsi borTable(a, b, …) --bitwise OR tabel bersama-sama

if arg[1] maka b = borTable(b, unpack(arg)) end local z = {} for i, v in ipairs(a) do table.insert(z, bit.bor(v, b)) akhir kembali z akhir

function bxorTable(a, b, …) --bitwise OR tabel bersama-sama

if arg[1] maka b = bxorTable(b, unpack(arg)) end local z = {} for i, v in ipairs(a) do table.insert(z, bit.bxor(v, b)) akhir kembali z akhir

fungsi addSecond()

detik=detik+1 jika detik>=60 lalu detik=0 menit=menit+1 jika menit>=60 lalu menit=0 addHour() akhir akhir akhir

fungsi tambahJam()

jam=jam+1 jika jam>=24 lalu jam=0 akhiri jika jam == 2 atau jam == 16 lalu max7219.setIntensity(Intensitas rendah) akhiri jika jam == 8 atau jam == 18 maka max7219.setIntensity(Intensitas tinggi) 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, 0x00, 0x01, 0x01, 0x03, 0x01, 0x03}, { 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}, { 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03 }, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03} }; min lokal={ { 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, 0x02, 0x00, 0x02, 0x00}, { 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, { 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x10}, { 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, { 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, { 0x02, 0x02, 0x02, 0x02, 0x12, 0x10, 0x12, 0x10 }, { 0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, { 0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, { 0x02, 0x12, 0x12, 0x12, 0x12, 0x10, 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} }; hor lokal={ { 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, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, { 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, { 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08x0C }, { 0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, { 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, { 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, { 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, { 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, 0x0x, 0x0C, 0x0C, 0x0C, 0x48}, { 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, { 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48x}, 0x4C, 0x4, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, { 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, { 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4, {0x48} 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, { 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48} }; --print(jam, menit, detik)

--tabel dimulai pada 0, jadi pada 1 seperti saat ini detik[0] = nil)

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

akhir --fungsi

wifi.setmode(wifi. STATION)

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

--konfigurasi maks7219

max7219 = membutuhkan("max7219") max7219.setup({numberOfModules = 1, slaveSelectPin = 8, intensitas = intensitas tinggi })

--Program Utama

checkOnline = tmr.create()

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

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

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

fungsi bernyawa (masih)

bingkai lokal={ { 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 jika halfSec >=12 maka halfSec = 0 end --print(halfSec) kembalikan bxorTable(frames[halfSec+1], masih) end

Langkah 8: Perumahan

Perumahan
Perumahan
Perumahan
Perumahan
Perumahan
Perumahan

Sekarang saatnya Anda untuk memamerkan keahlian luar biasa Anda dan merumahkan proyek tersebut.

Entah itu atau ambil paket amazon dari daur ulang dan buat rumah sementara yang masih digunakan sampai sekarang.

Manfaat menggunakan pendekatan ini adalah bahwa setiap lapisan proyek hampir cocok dengan ketebalan karton, sehingga sandwich dapat ditumpuk dan direkatkan bersama. Versi premium serupa bisa menggunakan akrilik

Langkah 9: Catatan Penutup

Terima kasih telah membaca, Seperti yang Anda ketahui, mendokumentasikan sebuah proyek sama sulitnya dengan membuatnya. ada potongan-potongan video dengan saya berbicara yang pada akhirnya dapat melihat cahaya hari.

Pada tahun-tahun antara membuat proyek ini dan menulisnya, saya berharap untuk melihat lebih banyak contoh tampilan LED sewenang-wenang menggunakan pencetakan 3D, tetapi pengurangan strip RGB sebagian besar telah menghilangkan kebutuhan akan alternatif.

Saya harap ini informatif, dan silakan ajukan pertanyaan karena saya akan mencoba memberikan lebih banyak detail pada bagian yang tidak sepenuhnya memuaskan.

Bersulang

Direkomendasikan: