Isi kandungan:

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, semasa menjalani latihan magang di perundingan percetakan 3D di London dan percubaan dengan lithophanes warna menggunakan mesin Stratasys mereka, saya merancang sendiri masa sekarang, cetakan 3D warna tiub tempatan di pejabat mereka. Saya bertekad untuk membuat sesuatu daripadanya. 2 tahun kemudian pada tahun 2016 saya mempunyai pencetak 3D saya sendiri, dan mula berfungsi menjadikannya seperti jam.

Sebagai seorang kanak-kanak, saya walaupun jam tangan digital Tokyo Flash adalah perkara paling hebat yang pernah ada, dan menjadi titik inspirasi untuk reka bentuk.

Dan sekarang ini adalah rehat kecil selama 4 tahun hingga saya berjaya menulisnya!

Walaupun arahan yang tepat akan sukar ditiru, dan pengurangan kos pembuatan PCB hobi dalam beberapa tahun terakhir mungkin menjadikan kaedah tepat saya untuk penempatan LED menjadi usang. Saya harap idea yang dikongsi dapat mendorong orang lain membuat jam pelik dari objek nipis!

Langkah 1: Lapisan Depan

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

Seperti yang disebutkan di intro, ini adalah cetakan 3D warna, saya percaya mesin Stratasys yang menggunakan bedak bedak dan kartrij dakwat yang diubah suai untuk pengikat dan pigmen.

Fail hilang dari sejarah, tetapi lapisan ini boleh menjadi apa-apa, foto atau litofan warna tunggal akan membuat keajaiban.

Bahagian ini dibuat dalam 3DS max pada tahun 2014, tetapi hari ini ada alat dalam talian untuk mengubah gambar menjadi SLT berdasarkan kecerahan

Langkah 2: Merancang Lapisan Panduan

Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan
Merancang Lapisan Panduan

Di sinilah kita memutuskan kerumitan projek dan kaedah untuk membaca masa. Gambar menunjukkan 2 idea yang saya mainkan.

Ini dibuat dengan mengimbas pada reka bentuk dan melukis garis melintangnya dalam inkscape.

Ini bukan jam yang sangat mudah dibaca, tetapi saya lebih suka idea mengisi garis sepanjang hari sehingga menjadi matlamat reka bentuk.

Pengiraan binari adalah kaedah yang sesuai untuk mengurangkan kiraan LED, dan ini akan meningkatkan kebolehbacaan sekiranya binari adalah kesesakan anda, tetapi itu melemahkan idea 'mengisi garis' saya, jadi bukan pilihan untuk projek ini

Sudah biasa di Tokyo Flash Watches untuk meminimumkan jumlah LED tetapi mempunyai satu bahagian yang dikira dalam 3 atau 5 dan kemudian mengisi lagi untuk setiap kali bahagian itu mengisi, saya menggunakan teknik ini selama beberapa minit, untuk mengurangkannya dari 60 hingga 20 tambah 2. Saya tidak begitu risau tentang ketepatan ini selama beberapa saat.

Langkah 3: Membina Lapisan Panduan

Membina Lapisan Panduan
Membina Lapisan Panduan
Membina Lapisan Panduan
Membina Lapisan Panduan
Membina Lapisan Panduan
Membina Lapisan Panduan

Lapisan panduan ini untuk LED mempunyai 2 tujuan, ia meletakkan LED di tempatnya, dan ia mencegah tumpahan di antara mereka

Ia dilukis sebagai lapisan di Inkscape tepat di atas imbasan yang saya gunakan untuk reka bentuk reka bentuk. Ketebalan 1mm ditambahkan dalam pengisar sebelum dihantar ke pencetak saya.

Ini adalah salah satu cetakan paling sukar yang harus saya buat pada Makibox A6 saya yang sedikit, bahagiannya dicetak dalam abs sehingga satu ton bubur aseton digunakan untuk melekatkannya pada platform binaan dengan sedikit melengkung. Nasib baik bahagian ini tidak kelihatan pada produk akhir

Gambar terakhir menunjukkan bahawa ia dipegang pada lampu untuk memeriksa jarak.

Pada pandangan belakang, tumpahan antara lampu di sepanjang garis mungkin lebih disukai untuk visual, tidak sukar dibaca, ini dapat dicapai dengan menambahkan bilah ke panduan pada sisi pendek setiap cahaya

Langkah 4: Pendawaian LED

Pendawaian LED
Pendawaian LED
Pendawaian LED
Pendawaian LED
Pendawaian LED
Pendawaian LED

Gambar kepalan menunjukkan cetakan ujian yang saya buat untuk memeriksa ukuran lubang, saya bertujuan agar LED sesuai dengan renda dengan sedikit kekuatan, bentuk yang betul kemudian diletakkan dengan tangan ketika meletakkan lapisan panduan.

Oleh kerana toleransi pencetak 3D saya yang rendah, ada yang longgar dan memerlukan superglue sedikit untuk tetap berada di tempatnya sementara yang lain terlalu ketat, tetapi didorong ke tempatnya dengan menekan LED semasa menyolder, ini sebenarnya lebih sesuai daripada lubang berlubang yang betul, yang mempunyai sewa untuk ditarik keluar setelah disambungkan.

Untuk mengurangkan bilangan wayar, LED disolder dalam matriks 7 hingga 8, yang bermaksud semua 55 LED dapat dikendalikan dengan hanya 13 pin, saya mempunyai peta yang dilukis dengan tangan untuk setiap sambungan ini yang sayangnya telah hilang.

Kawat enamel digunakan sehingga bahagian dapat terkena di tempatnya dengan memanaskan bahagian dengan besi dan timah sebelum membuat sambungan.

Proses ini sangat memakan masa, saya sangat mengesyorkan merancang PCB

Langkah 5: Merancang Elektronik

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

Rancangan awal saya adalah menggunakan mikrokontroler Arduino dengan RTC, tetapi memilih ESP8266 pada papan Node MCU D1 kerana ia membolehkan penjimatan siang hari automatik dan potensi untuk mengawal WIFI.

Untuk mengurangkan bilangan pin lebih jauh, saya mempunyai jumlah LED yang sempurna untuk dapat menggunakan MAX7219 (yang dapat menangani hingga 64 LED).

IC ini biasanya digunakan untuk menggerakkan paparan Segmen LED 7, tetapi memiliki kasus penggunaan yang sangat mirip dengan saya, menyalakan sebilangan LED yang sewenang-wenang dengan kerlipan minimum, bahkan memiliki kecerahan yang dapat dikendalikan.

Saya memutuskan untuk menggunakan protoboard untuk pendawaian, tetapi helang sangat membantu untuk penempatan bahagian dan memahami pendawaian

Saya telah melampirkan fail papan saya, tetapi ini adalah kali pertama saya menggunakan helang (dan versi yang sudah lapuk sekarang) jadi mereka hanya untuk rujukan

Langkah 6: Pendawaian Elektronik

Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik
Pendawaian Elektronik

Ini adalah langkah mudah berulang, mengikuti skema Eagle, menggunakan header untuk ESP dan matriks LED sangat membantu dalam pemasangan.

Pin 1 pada tajuk LED Anode & Cathode ditandai dengan perak tajam, mereka dapat dibezakan antara seperti pada 7 yang lain 8.

Langkah 7: Pengaturcaraan

Pengaturcaraan
Pengaturcaraan

Oleh kerana paparan kami bukan matriks tradisional, saya harus mencari kaedah untuk memvisualisasikan bit mana yang akan dihidupkan ke IC MAX dalam HEX. Nasib baik saya tahu cukup cemerlang untuk menghadapi masalah dan membuat 'Hex wizard' untuk membimbing saya walaupun corak yang saya mahukan dipaparkan, kotak centang yang diletakkan di tangan dengan semua.

Ini datang dengan penilaian semula bahawa heks untuk jam, minit dan saat saya dapat digabungkan menggunakan sedikit demi sedikit ATAU untuk menghasilkan perintah hex akhir untuk dihantar ke max7219, termasuk sedikit animasi yang saya tambahkan pada detik sehingga saya dapat memastikan papan belum beku.

Jadi, hampir berakhir. dan masa untuk keputusan lain yang belum terlalu tua.

Kod untuk ESP ada di LUA, Hari ini saya akan mengesyorkan menggunakan arduino IDE untuk dokumentasi yang lebih baik dan pustaka pakej yang lebih baik, pada masa komuniti ESP masih matang dan saya memilih LUA sebagai bahasa untuk projek ini.

Saya membuat keputusan yang dipersoalkan untuk melakukan ping pelayan google secara berkala untuk membaca masa. Ini memerlukan RTC untuk meminimumkan drift, ini berfungsi, tetapi anda harus lebih baik menggunakan API masa sebenar.

halfSec = 0jam = 0 minit = 0 saat = 0

lowIntensity = 0

tinggiIntensiti = 9

SSID tempatan = "Wifi"

SSID_PASSWORD tempatan = "Kata Laluan"

masa fungsi () --hubungkan ke internet untuk mendapatkan masa dan tarikh terkini

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

samb: on ("sambungan", fungsi (conn, payload) conn: send ("HEAD / HTTP / 1.1 / r / n".. "Host: time.is / r / n".. "Terima: * / * / r / n".. " Ejen Pengguna: Mozilla / 4.0 (serasi; esp8266 Lua;) ".." / r / n / r / n ") akhir)

samb: on ("terima", fungsi (conn, payload) --print (payload) conn: close () local p = string.find (payload, "GMT") - cari rentetan waktu dan tarikh dalam muatan dari internet, ubah untuk zon waktu jika p ~ = nih kemudian - ekstrak nombor yang berkaitan dengan jam, minit, kedua, hari, bulan bulan = jumlah (string.sub (muatan, p-9, p-8)) minit = jumlah (string.sub (muatan, p- 6, p-5)) kedua = jumlah (string.sub (muatan, p-3, p-2)) addHour () - BST berkod keras (waktu musim panas Britain) menjimatkan cetakan (jam, minit, kedua) setengahSec = (% kedua 6) * 2 - cetak (halfSec) cetakan lain ("kemas kini web gagal!") akhir akhir --fungsi) - akhir pengendali acara "terima"

samb: pada ("pemutusan", fungsi (conn, payload) conn = nih payload = nil end) cetakan akhir ("belum ada wifi") akhir

fungsi borTable (a, b,…) - dua arah ATAU jadual bersama

jika arg [1] maka b = borTable (b, unpack (arg)) akhiri local z = {} untuk i, v di ipairs (a) lakukan table.insert (z, bit.bor (v, b )) akhir kembali z akhir

fungsi bxorTable (a, b,…) - dua arah ATAU jadual bersama

jika arg [1] maka b = bxorTable (b, unpack (arg)) akhiri local z = {} untuk i, v di ipairs (a) lakukan table.insert (z, bit.bxor (v, b )) akhir kembali z akhir

fungsi addSecond ()

kedua = kedua + 1 jika kedua> = 60 kemudian kedua = 0 minit = minit + 1 jika minit> = 60 kemudian minit = 0 tambahHour () akhir akhir akhir

fungsi addHour ()

jam = jam + 1 jika jam> = 24 kemudian jam = 0 berakhir jika jam == 2 atau jam == 16 maka max7219.setIntensity (lowIntensity) berakhir jika jam == 8 atau jam == 18 maka max7219.setIntensity (highIntensity) kemas kini fungsi hujung akhir () secGap tempatan = 6 minGap tempatan = 3 horGap tempatan = 1 saat tempatan = {{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, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03}, {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, 0x01, 0x01, 0x03, 0x01, 0x03}}; min tempatan = {{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, 0x00, 0, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x0, 0x00, 0x0, 0x00, 0x, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x10, 0x02, 0x02, 0x02, 0x02, 0x10 }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 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}}; hor tempatan = {{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, 000, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x0, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0 0, 0x }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0, 0x0, 0x0, 0x0, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4, 0x4, 0x4, 0x4, 0x4, 0x, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; - cap (jam, minit, saat)

- jadual bermula pada 0, jadi pada 1 seperti saat ini [0] = nihil)

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 max7219

max7219 = memerlukan ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensiti = tinggiIntensiti})

--Program Utama

checkOnline = tmr.create ()

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

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

tmr.alarm (2, 500, 1, kemas kini)

fungsi bernyawa (pegun)

bingkai tempatan = {{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 if halfSec> = 12 maka halfSec = 0 end --print (halfSec) return bxorTable (frame [halfSec + 1], still) akhir

Langkah 8: Perumahan

Perumahan
Perumahan
Perumahan
Perumahan
Perumahan
Perumahan

Sekarang adalah masa anda untuk mempamerkan ketukangan yang luar biasa dan membina projek ini.

Entah itu atau ambil pakej amazon dari kitar semula dan buat perumahan sementara yang masih digunakan hingga kini.

Manfaat menggunakan pendekatan ini adalah bahawa setiap lapisan projek hampir sama dengan ketebalan kadbod, sehingga sandwic dapat ditumpuk dan ditempelkan bersama. Versi premium yang serupa boleh menggunakan akrilik

Langkah 9: Ucapan Penutup

Terima kasih kerana membaca, Sebanyak daripada anda tahu mendokumentasikan projek boleh menjadi sukar seperti membuatnya. terdapat sekeping video dengan saya bercakap yang akhirnya dapat melihat cahaya hari.

Selama bertahun-tahun antara membuat projek ini dan menulisnya, saya menjangkakan akan melihat lebih banyak contoh paparan LED sewenang-wenang menggunakan percetakan 3D, tetapi pengurangan jalur RGB kebanyakannya menghilangkan keperluan untuk alternatif.

Saya harap ini memberi maklumat, dan ajukan soalan kerana saya akan cuba memberikan lebih banyak perincian mengenai bahagian yang tidak memuaskan sepenuhnya.

Sorakan

Disyorkan: