Daftar Isi:
- Langkah 1: Lapisan Depan
- Langkah 2: Mendesain Layer Panduan
- Langkah 3: Membangun Layer Panduan
- Langkah 4: Menghubungkan LED
- Langkah 5: Merancang Elektronik
- Langkah 6: Menghubungkan Elektronik
- Langkah 7: Pemrograman
- Langkah 8: Perumahan
- Langkah 9: Catatan Penutup
Video: Jam Peta Bawah Tanah London: 9 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
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
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
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
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
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
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
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
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
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:
Peta Cerdas Idaho Dengan Data LED + Seni: 8 Langkah (dengan Gambar)
Peta Cerdas Idaho Dengan Data LED + Seni: Saya selalu menginginkan cara untuk menampilkan data geografis secara artistik dan dinamis dengan "lukisan" peta dengan cahaya. Saya tinggal di Idaho dan mencintai negara saya jadi saya pikir ini akan menjadi tempat yang bagus untuk memulai! Selain menjadi karya seni
Meretas Tombol Pintu Jubilee Line London Underground: 12 Langkah (dengan Gambar)
Meretas Tombol Pintu London Underground Jubilee Line: Toko London Transport Museum menjual tombol pintu yang telah dinonaktifkan dari Jubilee Line (tersedia di kiri dan kanan). Jika Anda berpikir untuk melakukan proyek yang membutuhkan tombol dan semacam lampu indikator, Anda akan
Menavigasi Robot Dengan Sensor Sepatu, Tanpa GPS, Tanpa Peta: 13 Langkah (dengan Gambar)
Menavigasi Robot Dengan Sensor Sepatu, Tanpa GPS, Tanpa Peta: Robot bergerak di jalur yang telah diprogram dan mentransmisikan (melalui bluetooth) informasi pergerakan aktualnya ke telepon untuk pelacakan waktu nyata. Arduino sudah diprogram dengan path dan oblu digunakan untuk mendeteksi gerakan robot. oblu mengirimkan informasi gerakan
Cara Memotret Film Independen Anda di Kereta Bawah Tanah Kota New York Ketika Anda Tidak Mampu Membayar Izin: 12 Langkah
Cara Menembak Film Independen Anda di Kereta Bawah Tanah Kota New York Ketika Anda Tidak Mampu Membayar Izin: Ini adalah panduan sederhana untuk calon pembuat film independen di luar sana yang memiliki impian untuk merekam adegan ajaib di dalam sistem kereta bawah tanah yang indah di Kota New York tetapi siapa tidak mampu membayar ribuan dolar yang diperlukan untuk mendapatkan izin untuk menembak secara legal
Pena IR Minimalis: Tanpa Solder, Di Bawah Satu Menit, Di Bawah Satu Dolar.: 3 Langkah
Pena IR Minimalis: Tanpa Solder, Di Bawah Menit, Di Bawah Dolar.: Instruksi pertama saya, semoga bermanfaat: Jika Anda ingin menguji JC Lee (JC adalah singkatan dari Johnny Chung, tetapi dia juga melakukan keajaiban. ..) atau program Smoothboard di www.smoothboard.net (tahun cahaya ke depan, karena Boon Jin mulai