Isi kandungan:

Meja Kopi LED Interaktif Arduino: 6 Langkah (dengan Gambar)
Meja Kopi LED Interaktif Arduino: 6 Langkah (dengan Gambar)

Video: Meja Kopi LED Interaktif Arduino: 6 Langkah (dengan Gambar)

Video: Meja Kopi LED Interaktif Arduino: 6 Langkah (dengan Gambar)
Video: DIY Interactive LED Coffee Table - Arduino Project 2024, November
Anonim
Image
Image
Meja Kopi LED Interaktif Arduino
Meja Kopi LED Interaktif Arduino

Saya membuat meja kopi interaktif yang menyalakan lampu led di bawah objek, ketika objek diletakkan di atas meja. Hanya led yang berada di bawah objek itu akan menyala. Ia melakukannya dengan berkesan menggunakan sensor jarak, dan apabila sensor jarak merasakan bahawa objek cukup dekat, ia akan menerangi simpul di bawah objek itu. Ia juga menggunakan Arduino untuk memasang animasi yang tidak memerlukan sensor jarak, tetapi menambahkan kesan yang sangat keren yang saya suka.

Sensor jarak terdiri daripada fotodioda dan pemancar IR. Pemancar menggunakan cahaya inframerah (yang tidak dapat dilihat oleh mata manusia) untuk menyinari cahaya dari meja, dan fotodioda menerima cahaya inframerah yang dipantulkan dari suatu objek. Semakin banyak cahaya yang dipantulkan (semakin dekat objek), semakin banyak voltan turun naik dari fotodioda. Ini digunakan sebagai petunjuk untuk memberitahu simpul mana yang akan dinyalakan. Nod adalah kumpulan led ws2812b dan sensor jarak.

Video yang dilampirkan merangkumi keseluruhan proses pembuatan, sementara saya menggariskan lebih banyak perincian di bawah.

Bekalan

  1. ws2812b Mentol LED -
  2. Bekalan Kuasa 5V -
  3. Apa-apa Arduino saya menggunakan 2560 -
  4. Fotodiod
  5. Pemancar IR
  6. Perintang 10 Ohms
  7. 1 Perintang MOhms
  8. Kapasitor 47 pF
  9. Multiplekser CD4051B
  10. Daftar Shift SN74HC595
  11. ULN2803A Darlington Arrays
  12. Mana-mana substrat untuk digunakan sebagai papan besar untuk led, saya menggunakan papan komposit kertas dari depot rumah

Langkah 1: Buat Papan dan Masukkan LED

Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED
Buat Papan dan Masukkan LED

Perkara pertama yang saya buat ialah membuat papan yang akan mengandungi led yang akan kita masukkan ke dalam meja kopi. Saya menggunakan sehelai papan komposit kertas dari depot rumah dan memotongnya dengan ukuran yang sesuai untuk meja kopi yang saya ada. Setelah memotong papan dengan ukuran yang besar, saya menggerudi semua lubang untuk ke mana arah tuju. Papan itu sendiri mempunyai 8 baris dan 12 tiang led ws2812b yang terpisah 3 inci, dan mereka dipasang dalam corak serpentin. Saya menggunakan gam panas untuk mengamankannya di tempat.

Saya juga harus mengebor lubang di tengah-tengah yang akan menjadi simpul: 4 ws2812b led yang membentuk segi empat, 2 dioda foto dan 2 pemancar IR di sebuah kotak yang lebih kecil di tengahnya. 4 lubang ini di tengah-tengah simpul akan menjadi tempat bagi fotodiod dan pemancar ir (masing-masing 2). Saya bergantian untuk memastikan pendedahan maksimum, dan meletakkannya sekitar 1 inci di tengah-tengah setiap nod. Saya tidak perlu merekatkannya ke tempatnya, saya hanya membengkokkan petunjuk di sisi lain untuk memastikan mereka tidak keluar dari sisi lain. Saya juga memastikan untuk membengkokkan hujung positif dan negatif ke arah tertentu, sehingga mereka berorientasi dengan betul di litar. Semua petunjuk positif berada di sebelah kiri belakang papan, sementara semua petunjuk negatif berada di sebelah kanan papan.

Langkah 2: Fahami Litar

Fahami Litar
Fahami Litar
Fahami Litar
Fahami Litar
Fahami Litar
Fahami Litar

Catatan: Semua gambar animasi tidak tepat untuk pelaksanaannya (beberapa pin arduino berbeza, dan saya daisy rantai beberapa, lebih banyak kemudian). Hasil akhirnya sedikit berbeza kerana kerumitan litar, tetapi semua litar animasi berfungsi sebagai asas yang baik untuk memahami cara memprototaip setiap bahagian. Gambarajah skematik dan litar biasa adalah seperti pada PCB yang digunakan dalam projek.

Kod PCB yang mengandungi projek KiCad dan fail gerber boleh didapati di sini: https://github.com/tmckay1/interactive_coffee_tabl…, sekiranya anda ingin memesan PCB sendiri dan membuat projek serupa. Saya menggunakan NextPCB untuk membuat papan.

Pada asasnya terdapat tiga litar yang berbeza yang membentuk jadual ini. Yang pertama kita tidak akan membahas secara terperinci dan litar mudah yang memberi kuasa pada ws2812b. Isyarat data PWM dihantar dari Arduino ke lampu LED ws2812b dan mengawal warna yang ditunjukkan di mana. Kami menggunakan led ws2812b kerana mereka boleh dihubungi secara individu, jadi kami akan dapat mengawal led mana yang harus dihidupkan, dan yang mana yang harus dimatikan. LED ws2812b dikuasakan oleh sumber kuasa luaran 5V, kerana arduino sahaja tidak mempunyai kuasa yang cukup untuk menyalakan semua lampu. Dalam gambar rajah animasi yang dilampirkan mereka menggunakan resistor penarik 330 Ohms, namun saya tidak menggunakannya dalam binaan saya.

Litar kedua menghidupkan pemancar IR. Litar ini menggunakan shift register untuk mengawal array darlington yang menghantar kuasa ke pemancar IR. Register shift adalah litar bersepadu yang dapat menghantar isyarat TINGGI dan RENDAH ke beberapa pin dari hanya sedikit pin. Dalam kes kami menggunakan SN74HC595 shift register yang dapat dikendalikan dari 3 input, tetapi mengawal hingga 8 output. Manfaat menggunakan ini dengan arduino adalah anda dapat membuat daisy chain hingga 8 register shift berturut-turut (arduino hanya dapat menangani hingga 8 daripadanya). Ini bermakna anda hanya memerlukan 3 pin dari arduino untuk menghidupkan dan mematikan 64 pemancar IR. Array darlington membolehkan anda menghidupkan peranti dari sumber luaran jika isyarat input TINGGI, atau mematikan kuasa untuk peranti tersebut jika isyarat input RENDAH. Oleh itu, dalam contoh kami, kami menggunakan array darlington ULN2803A, yang membolehkan sumber kuasa luaran 5V menghidupkan dan mematikan sehingga 8 pemancar IR. Kami menggunakan perintang 10 Ohm dengan pemancar IR secara bersiri untuk mendapatkan ampere maksimum dari pemancar IR.

Litar ketiga menggunakan multiplexer untuk menerima pelbagai input dari photodiodes, dan mengirimkan output dalam isyarat data. Multiplexer adalah peranti yang digunakan untuk mengambil banyak input yang ingin anda baca, dan hanya memerlukan beberapa pin untuk dibaca dari input tersebut. Ia juga boleh berlaku sebaliknya (demultiplex), tetapi kami tidak menggunakannya untuk aplikasi itu di sini. Oleh itu, kita menggunakan multiplexer CD4051B untuk mengambil sehingga 8 isyarat dari photodiodes, dan kita hanya memerlukan 3 input untuk membaca dari isyarat tersebut. Selain itu, kami dapat membuat daisy chain hingga 8 multiplexer (arduino hanya dapat menangani sehingga 8 daripadanya). Ini bermaksud arduino dapat membaca dari 64 isyarat fotodiod dari hanya 3 pin digital. Fotodioda berorientasikan terbalik terbalik, yang bermaksud bahawa bukannya berorientasi pada arah normal dengan plumbum positif yang melekat pada sumber voltan positif, kita menetapkan timbal negatif ke sumber voltan positif. Ini dengan berkesan mengubah fotodiod menjadi perintang foto, yang berubah dalam rintangan bergantung pada jumlah cahaya yang diterimanya. Kami kemudian membuat pembahagi voltan untuk membaca voltan yang bergantung pada pelbagai rintangan fotodiod dengan menambahkan perintang 1 MOhms yang sangat tahan ke tanah. Ini membolehkan kita menerima voltan yang lebih tinggi dan lebih rendah ke arduino bergantung pada berapa banyak cahaya IR yang diterima oleh fotodioda.

Saya mengikuti sebahagian besar reka bentuk ini dari orang lain yang melakukannya di sini: https://www.instructables.com/Infrared-Proximity-S… Dalam reka bentuk itu mereka juga menambahkan kapasitor 47pF, seperti yang kita lakukan, di seberang perintang 1 MOhm digunakan untuk membuat pembahagi voltan dengan fotodiod. Sebab dia menambahkannya adalah kerana dia berfluktuasi pemancar IR dan mematikan dengan isyarat PWM dan melakukan ini menyebabkan penurunan voltan kecil dari fotodioda ketika pemancar IR segera dihidupkan. Ini membuat dioda foto mengubah rintangan walaupun tidak menerima lebih banyak cahaya IR dari suatu objek kerana pemancar IR berkongsi sumber kuasa 5V yang sama dengan fotodioda. Kapasitor digunakan untuk memastikan tidak ada penurunan voltan ketika pemancar IR dihidupkan dan dimatikan. Pada asalnya saya merancang untuk melakukan strategi yang sama, tetapi kehabisan masa untuk mengujinya, jadi saya selalu membiarkan pemancar IR. Saya ingin mengubahnya pada masa akan datang, tetapi sehingga saya merancang semula kod dan litar, sekarang PCB direka untuk menyalakan lampu IR sepanjang masa, dan saya tetap menyimpan kapasitor. Anda tidak semestinya memerlukan kapasitor jika anda menggunakan reka bentuk PCB ini, tetapi saya akan memperkenalkan versi PCB lain yang menerima input tambahan ke shift shift yang akan membolehkan anda memodulasi pemancar IR hidup dan mati. Ini akan menjimatkan banyak penggunaan tenaga.

Anda boleh memeriksa gambar rajah animasi yang dilampirkan untuk persediaan prototaip untuk menguji arduino anda. Terdapat juga skema berwarna yang lebih terperinci untuk setiap litar yang menggariskan pengaturan dan orientasi peranti elektronik. Dalam skema PCB yang dilampirkan, kami memiliki 4 litar total, 2 litar yang digunakan untuk menghidupkan pemancar IR, dan 2 litar untuk dibaca dari fotodioda. Mereka berorientasi pada kumpulan PCB 2 di sebelah satu sama lain dengan kumpulan yang terdiri daripada 1 litar pemancar IR dan 1 litar fotodiod, sehingga 2 lajur 8 nod dapat dimasukkan ke dalam satu PCB. Kami juga daisy mengaitkan dua litar bersama, jadi tiga pin dari arduino dapat mengawal dua register shift, dan 3 pin tambahan dapat mengendalikan kedua multiplexer di papan. Terdapat header output tambahan untuk dapat membuat rantai daisy ke PCB tambahan.

Berikut adalah beberapa sumber yang saya ikuti untuk membuat prototaip:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Langkah 3: Kabel Pateri ke Node

Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node
Kawat Pateri ke Node

Setelah anda memahami bagaimana litar dibuat, teruskan dan pasangkan wayar ke setiap nod. Saya menyolder fotodiod secara selari (wayar kuning dan kelabu) dan pemancar ir secara bersiri (wayar oren). Saya kemudian menyolder wayar kuning yang lebih panjang pada fotodiod secara selari yang akan dilekatkan pada sumber kuasa 5V, dan wayar biru yang akan dipasang pada input fotodiod dari pcb. Saya menyolder wayar merah panjang ke litar pemancar IR yang akan digunakan untuk menyambung ke sumber kuasa 5V dan wayar hitam yang akan disambungkan ke input pemancar IR PCB. Saya benar-benar membuat wayar sedikit kehabisan masa, jadi saya hanya dapat menyambungkan 5 nod di setiap lajur pada akhirnya (bukannya 7). Saya merancang untuk membetulkannya kemudian.

Langkah 4: Memasukkan Komponen PCB dan Pasangkannya ke Papan

Pateri Komponen PCB dan Pasangkannya ke Papan
Pateri Komponen PCB dan Pasangkannya ke Papan
Pateri Komponen PCB dan Pasangkannya ke Papan
Pateri Komponen PCB dan Pasangkannya ke Papan
Pateri Komponen PCB dan Pasangkannya ke Papan
Pateri Komponen PCB dan Pasangkannya ke Papan

Catatan: PCB dalam gambar yang dilampirkan adalah versi pertama yang saya buat yang kekurangan input dan output kuasa dan juga rangkaian daisy untuk setiap litar dalaman. Reka bentuk PCB baru membetulkan kesilapan ini.

Di sini anda hanya perlu mengikuti skema PCB untuk menyolder komponen ke PCB dan kemudian setelah selesai, pasangkan PCB ke papan. Saya menggunakan papan litar luaran untuk memasang isyarat kuasa 5V, yang saya edarkan ke semua wayar kuning dan merah. Di belakang, saya tidak memerlukan wayar merah dan kuning yang panjang dan boleh menghubungkan nod antara satu sama lain (bukannya menghubungkannya ke papan litar luaran biasa). Ini akan mengurangkan jumlah kekacauan di bahagian belakang papan.

Oleh kerana saya mempunyai 8 baris led ws2812b dan 12 lajur, saya berakhir dengan 7 baris dan 11 lajur nod (jumlah 77 nod). Ideanya adalah menggunakan satu sisi PCB untuk satu lajur nod dan sisi lain untuk lajur yang lain. Oleh kerana saya mempunyai 11 lajur, saya memerlukan 6 PCB (yang terakhir hanya memerlukan satu kumpulan komponen). Oleh kerana wayar terlalu pendek, saya hanya dapat menghubungkan 55 nod, 11 lajur dan 5 baris. Anda dapat lihat dalam gambar, saya membuat kesilapan dan menyisipkan wayar mentah ke papan, yang akan lebih baik jika wayarnya cukup tipis, tetapi dalam kes saya terlalu tebal. Ini bermakna saya mempunyai hujung wayar yang saling berdekatan antara satu sama lain untuk setiap input pemancar IR dan input fotodiod, jadi terdapat banyak penyahpepijatan yang berlaku dari semua pintasan wayar. Pada masa akan datang saya akan menggunakan penyambung untuk menyambungkan PCB ke wayar di papan untuk mengelakkan seluar pendek dan membersihkan barang.

Oleh kerana Arduino hanya dapat rantai daisy hingga 8 register shift dan multiplexer, saya membuat dua rantai berasingan, satu menggunakan 8 lajur pertama dan satu lagi mengambil 3 lajur yang selebihnya. Saya kemudian melampirkan setiap rantai ke pcb lain yang hanya mempunyai 2 multiplexer, sehingga saya dapat membaca setiap rantai isyarat data multiplexer dari kedua multiplexer tersebut ke dalam arduino. Kedua-dua multiplexer ini juga dirantai daisy. Ini bermakna terdapat 16 isyarat output dan 2 input analog yang digunakan dalam arduino: 1 isyarat output untuk mengawal leds ws2812b, 3 isyarat output untuk rantai pertama pergeseran peralihan, 3 isyarat output untuk rantai pertama multiplexer, 3 isyarat output untuk rantai shift berganda kedua, 3 isyarat output untuk rantai kedua multiplexer, 3 isyarat output untuk 2 multiplexer yang menggabungkan setiap isyarat data PCB, dan akhirnya 2 input analog untuk setiap isyarat data dari 2 multiplexer agregat.

Langkah 5: Kaji Kod

Catatan: Sebagai tambahan kepada kod interaktif di bawah, saya menggunakan perpustakaan pihak ketiga untuk menghasilkan animasi untuk led ws2812b. Anda boleh mendapatkannya di sini:

Anda boleh mendapatkan kod yang saya gunakan di sini:

Di bahagian atas saya menentukan pin arduino yang akan disambungkan ke setiap bahagian PCB. Dalam kaedah penyediaan, saya menetapkan pin output untuk multiplexer, menghidupkan pemancar IR, menetapkan array baseVal yang mengawasi bacaan cahaya ambien untuk setiap fotodioda, dan menginisialisasi FastLED yang akan menulis ke led ws2812b. Dalam kaedah gelung, kami menetapkan semula senarai led yang ditugaskan untuk berada di jalur ws2812b. Kemudian kami membaca nilai dari photodiodes dalam rantai multiplexer, dan mengatur lekapan ws2812b yang seharusnya dihidupkan jika bacaan dari photodiod di node melebihi ambang yang ditentukan dari nilai asas bacaan cahaya ambien. Kami kemudian memberikan LED jika ada perubahan pada simpul yang seharusnya dihidupkan. Jika tidak, ia terus berubah sehingga sesuatu berubah untuk mempercepat keadaan.

Kodnya mungkin dapat diperbaiki dan saya ingin melakukannya, tetapi terdapat kira-kira kelewatan 1-2 saat ketika lampu menyala setelah objek diletakkan di atas meja. Saya percaya masalah yang mendasari adalah FastLED memerlukan sedikit masa untuk membuat 96 led di atas meja dan kodnya harus dilalui dan membaca 77 input dari jadual. Saya mencuba kod ini dengan 8 led dan mendapati ia hampir seketika, tetapi saya sedang mencari titik manis LED yang akan berfungsi dengan kod ini dan hampir seketika, serta memperbaiki kodnya.

Langkah 6: Hidupkan Arduino

Hidupkan Arduino!
Hidupkan Arduino!
Hidupkan Arduino!
Hidupkan Arduino!
Hidupkan Arduino!
Hidupkan Arduino!

Sekarang yang perlu anda lakukan ialah menghidupkan arduino dan melihat fungsi jadual! Dengan menggunakan perpustakaan animasi yang disebutkan sebelumnya, anda dapat memakai beberapa animasi led ws2812b yang keren, atau anda dapat memasukkan kod meja kopi dan melihatnya menyala di setiap bahagian. Jangan ragu untuk mengemukakan sebarang pertanyaan atau pendapat, dan saya akan menghubungi anda tepat pada waktunya. Ceria!

Disyorkan: