Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Lampu Matriks LED Lem Panas

Komponen dan persediaan

Strip LED Beralamat WS2812 Digilent
IP60 (60 LED per meter, Non-tahan air, total 128 LED)
× 128
Arduino Nano R3
× 1
3A Mini DC-DC step down converter volt regulator
× 1
Resistor 10k ohm
× 1
Resistor 330 ohm
× 1
Kapasitor 470 F
Jenis profil rendah 10V
× 1
10K lin 45mm Slider Potensiometer (panjang langkah 30mm misalnya:Bourns PTA3043 )
× 1
Tombol tekan kecil
× 1
Saklar Rocker Kecil
× 1
Soket daya DC (versi panel)
× 1
Stik Lem 7mm x 100mm
× 64

Alat dan mesin yang diperlukan

Printer 3D (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Lampu ini didasarkan pada lampu serupa yang disebut "Fiber Optic" LED Matrix oleh jbumstead. Menggunakan OpenSCAD, tujuannya adalah untuk mengganti LED RGB Digital Difusi 12mm yang digunakan dalam desain jbumstead dengan strip RGB WS2812B murah dan membuat wadah untuk LED dan elektronik setipis mungkin sehingga memungkinkan penggunaan stik lem 7mm yang lebih murah.

Mencetak Kasing

Satu-satunya bagian yang membutuhkan dukungan adalah "Matriks Lem Panas - Bawah.stl". Saya menggunakan tinggi lapisan 0.2mm dan pengisi 15%. Saya menemukan bahwa dengan memperbesar ukuran lubang menggunakan bor 19/64" setelah pencetakan, akan lebih mudah untuk memasukkan stik lem ke dalam lubangnya masing-masing.

Bagian Merakit Lampu

1. Potong strip LED WS2812B menjadi 16 strip yang masing-masing berisi 8 LED.

2. Anda tidak dapat menyambungkan strip LED secara langsung pada formulir atas atau bawah karena ditempatkan pada setiap formulir secara terbalik. Tempelkan 8 strip ke permukaan datar dengan bagian tengah setiap strip 15mm dari strip yang berdekatan. Atur strip sehingga setiap strip alternatif menghadap ke arah yang berlawanan.

Pastikan DIN ada di pojok kiri atas. Kawat strip seperti yang ditunjukkan di atas. Saya menggunakan kawat bungkus kawat tetapi Anda dapat menggunakan kawat tembaga berinsulasi tipis. Setelah kabel, tambahkan tiga kabel panjang multi-untai ke GND, DIN dan +5V. Kabel ini akan melalui lubang dan bergabung dengan GND, DOUT dan +5V dari bagian bawah. Sekarang masukkan ketiga kabel melalui lubang pada formulir "Matriks Lem Panas - Dudukan Atas" dan dengan hati-hati tempatkan strip terbalik ke saluran masing-masing. Strip harus duduk rata. Jika tidak, periksa apakah strip sudah benar. Mereka hanya pergi dengan satu cara. Ada saluran untuk kabel juga. Setelah strip LED berada di posisinya, gunakan Pita Pelukis Biru untuk mengamankannya di tempatnya.

3. Pasang pelat bawah dengan cara yang sama. DOUT di kanan atas. Tambahkan tiga kabel panjang multi-untai ke VCC, DIN dan GND sebelum menempatkan strip terbalik ke formulir. Kabel ini akan menuju ke PCB.

4. Jangan sambungkan kabel dari bagian atas sampai semua lem menempel pada tempatnya.

Menambahkan Lem Stik

Ini akan membutuhkan kesabaran. Pertama, Anda perlu memilah lem tongkat. Tongkat lem 7mm yang Anda dapatkan dari eBay panjangnya sekitar 100m. Saya menemukan bahwa mereka sedikit bervariasi. Milik saya datang dalam kemasan 30 jadi saya punya 90 batang untuk menemukan 64 dengan panjang yang sama. Saya juga perlu memperbesar ukuran lubang menggunakan bor 19/64" setelah mencetak agar lebih mudah dipasang di lubang.

Saya juga menggunakan sedotan bening untuk menempatkan tiga kabel yang menghubungkan strip atas dan bawah menjadi satu.

Tambahkan stik lem satu baris pada satu waktu mulai dari satu ujung dan lanjutkan ke ujung yang lain. Setelah semuanya terpasang, ukur jarak antara bagian atas dan bawah di setiap sudut. Mereka semua harus PERSIS sama. Jika tidak, sesuaikan kedalaman stik lem. Setelah Anda puas dengan penyelarasannya, lepaskan batang lem dari setiap sudut dan pasang kembali ke tempatnya dengan sedikit lem super. (Jangan sampai lem super pada LED). Ini akan membuat strukturnya cukup kuat.

Hubungkan Strip Atas dan Bawah

Angkat strip bawah dengan hati-hati di dekat lubang, potong ketiga kabel dan solder di tempatnya. +5V hingga +5V, DIN (atas) hingga DOUT (bawah), GND hingga GND.

Membuat PCB

Saya telah menyertakan file Eagle jika Anda ingin membuat papan secara komersial atau melakukan seperti yang saya lakukan dan membuatnya sendiri. Saya membuat papan saya menggunakan metode toner. Anda bisa menggunakan sepotong papan proto jika diinginkan karena skemanya sangat sederhana dan mudah dipasang. 4 lubang pemasangan harus dibor dengan bor 2,5 mm dan ulir dibuat dengan keran 3 mm. Gunakan sekrup M3 6mm untuk menahan papan pada tempatnya.

PENTING:Setel output regulator DC ke 5V SEBELUM memasangnya ke board.

Pengkabelan Akhir

Pasang potensiometer geser, sakelar tekan, sakelar daya, dan soket daya DC seperti yang ditunjukkan di bawah ini:

Hubungkan kabel dari strip LED ke PCB.

Perangkat Lunak

Perangkat lunak yang disertakan menjalankan serangkaian animasi uji. Tombol berputar melalui animasi yang tersedia. Potensiometer menyesuaikan kecepatan animasi.

Kode

  • GlueMatrixTest.ino
  • Tombol.h
  • Tombol.cpp
GlueMatrixTest.inoC/C++
#include #ifdef __AVR__ #include #endif#include "Button.h"#define PIN_LED 2#define PIN_SWITCH 3#define PIN_POT A0#define LEDS 128// Parameter 1 =jumlah piksel dalam strip// Parameter 2 =Nomor pin Arduino (sebagian besar valid)// Parameter 3 =flag tipe piksel, tambahkan sesuai kebutuhan:// NEO_KHZ800 800 KHz bitstream (sebagian besar produk NeoPixel dengan LED WS2812)/ / NEO_KHZ400 400 KHz (klasik 'v1' (bukan v2) Piksel FLORA, driver WS2811)// Piksel NEO_GRB dihubungkan untuk bitstream GRB (sebagian besar produk NeoPixel)// Piksel NEO_RGB dihubungkan untuk aliran bit RGB (piksel FLORA v1, bukan v2) // NEO_RGBW Piksel dihubungkan untuk bitstream RGBW (produk NeoPixel RGBW)Adafruit_NeoPixel strip =Adafruit_NeoPixel(LEDS, PIN_LED, NEO_GRB + NEO_KHZ800);Mode tombol =Tombol(PIN_SWITCH);modus boolDitekan =false;//Peta LED fisik untuk bawah dan atas Susunan LED//LED Bawah (Melihat ke belakang dari atas)//064 049 048 033 032 017 016 001//063 050 047 034 031 018 015 002//062 051 046 035 030 019 014 003/ /061 052 045 036 029 020 013 004//060 053 044 037 028 021 012 005//059 054 043 038 027 022 011 006//058 055 042 039 026 023 010 007//057 056 041 040 025 024 009 008/ /(Tampak depan dari atas)//LED Atas (Tampak Belakang dari atas)//065 080 081 096 097 112 113 128//066 079 082 095 098 111 114 127//067 078 083 094 099 110 115 126//068 077 084 093 100 109 116 125//069 076 085 092 101 108 117 124//070 075 086 091 102 107 118 123//071 074 087 090 103 106 119 122//072 073 088 089 104 105 120 121//( Tampak depan dari atas)const uint8_t botLED[] PROGMEM ={ 64,49,48,33,32,17,16,1, 63,50,47,34,31,18,15,2, 62,51,46 ,35,30,19,14,3, 61,52,45,36,29,20,13,4, 60,53,44,37,28,21.12,5, 59,54,43,38 ,27,22.11,6, 58,55,42,39,26,23,10,7, 57,56,41,40,25,24,9,8,};const uint8_t topLED[] PROGMEM ={ 65,80,81,96,97,112,113,128, 66,79,82,95,98,111,114,127, 67,78,83,94,99,110,115,126, 68,77,84,93,100,109,116,125, 69,76,85,92,101,108,117124, 70,75 ,86,91,102,107,118,123, 71,74,87,90,103,106,119,122, 72,73,88,89,104,105,120,1 21};//Penyimpanan untuk nilai saat iniint red =128;int green =128;int blue =128;int pattern =1;// PENTING:Untuk mengurangi risiko kejenuhan NeoPixel, tambahkan kapasitor 1000 uF melintasi// kabel daya piksel, tambahkan Resistor 300 - 500 Ohm pada input data piksel pertama // dan meminimalkan jarak antara Arduino dan piksel pertama. Hindari menghubungkan// pada sirkuit langsung...jika Anda harus, sambungkan GND terlebih dahulu.void setup() { Serial.begin(115200); pinMode(PIN_LED, OUTPUT); pinMode(PIN_SWITCH, INPUT); pinMode(PIN_POT, INPUT); //Pixel Strip Serial.println("Setup()"); strip.mulai(); strip.tampilkan(); // Inisialisasi semua piksel ke 'off' //Panggilan balik tombol //mode.Background(ButtonBackground); //Set ISR untuk perubahan pin pada MODE pin Button::PinChangeSetup(PIN_SWITCH);}void loop() { if (modePressed) { pattern =(pattern % 8) + 1; strip.clear(); } modeTekanan =salah; Serial.print("Modus "); Serial.print(pola, DEC); Serial.println(); switch (pola) { case 1:colorWipe(strip.Color(255, 0, 0)); merusak; // Huruf merah 2:colorWipe(strip.Color(0, 255, 0)); merusak; // Hijau case 3:colorWipe(strip.Color(0, 0, 255)); merusak; // Kasing biru 4:theaterChase(strip.Color(127, 127, 127)); merusak; // Kasus putih 5:pelangi(); merusak; kasus 6:rainbowDifference(); merusak; kasus 7:rainbowCycle(); merusak; kasus 8:rainbowCycleDifference(); merusak; kasus 9:theaterChaseRainbow(); merusak; } if (!modePressed) { modePressed =mode.Pressed(); }}//Tombol mode interupsi untuk keluar dari loop dll//PCINT1 menangani perubahan pin untuk pin A0 ke A5ISR (PCINT2_vect){ modePressed =modePressed | (mode.State() ==LOW);}void ButtonBackground(void){}// Isi titik satu demi satu dengan colorvoid colorWipe(uint32_t c) { int total =strip.numPixels() / 2; for(uint16_t i=0; i  0 &&!modePressed; i--) { uint8_t botIndex =pgm_read_byte(&botLED[i]) - 1; strip.setPixelColor(botIndex, 0); uint8_t topIndex =pgm_read_byte(&topLED[i]) - 1; strip.setPixelColor(Indeks teratas, 0); strip.tampilkan(); delay(peta(analogRead(PIN_POT), 0, 1024, 100, 0)); }}void rainbow() { int total =strip.numPixels() / 2; for(uint16_t j=0; j <256 &&!modePressed; j++) { for(uint16_t i=0; i  
Button.hFile Header C
/*Kelas:ButtonAuthor:John Bradnam ([email protected])Tujuan:Pustaka Arduino untuk menangani tombol*/#pragma sekali#include "Arduino.h"#define DEBOUNCE_DELAY 5//Ulangi kecepatan#define REPEAT_START_SPEED 500# define REPEAT_INCREASE_SPEED 50#define REPEAT_MAX_SPEED 50class Button{ public://Tombol konstruktor sederhana(int Pin); //Fungsi latar belakang dipanggil saat menunggu atau mengulang loop void Background(void (*pBackgroundFunction)()); //Ulangi fungsi yang dipanggil saat tombol ditekan batal Ulangi(void (*pRepeatFunction)()); //Menguji apakah tombol ditekan dan dilepaskan //Akan memanggil fungsi pengulangan jika tersedia bool Ditekan(); //Mengembalikan status tombol (TINGGI atau RENDAH) - RENDAH =Ditekan int Status(); //Ubah Pin Pengaturan Interupsi //ISR (PCINT0_vect) ubah pin interupsi untuk D8 ke D13 //ISR (PCINT1_vect) ubah pin interupsi untuk A0 ke A5 //ISR (PCINT2_vect) ubah pin interupsi untuk D0 ke D7 static void PinChangeSetup(byte pin); pribadi:int _pin; void (*_repeatCallback)(void); void (*_backgroundCallback)(void);};
Button.cppC/C++
#include "Button.h"Button::Button(int pin){ _pin =pin; pinMode(_pin, INPUT);}//Atur fungsi untuk dipanggil dalam penundaan atau pengulangan loopvoid Tombol::Background(void (*pBackgroundFunction)()){ _backgroundCallback =pBackgroundFunction;}//Atur fungsi untuk dipanggil jika sistem berulang diperlukan Tombol batal ::Repeat(void (*pRepeatFunction)()){ _repeatCallback =pRepeatFunction;}static void Tombol::PinChangeSetup(byte pin) { *digitalPinToPCMSK(pin) |=bit (digitalPinToPCMSKbit(pin)); // aktifkan pin PCIFR |=bit (digitalPinToPCICRbit(pin)); // hapus semua interupsi PCICR |=bit (digitalPinToPCICRbit(pin)); // mengaktifkan interupsi untuk grup }//Menguji apakah tombol ditekan dan dilepaskan// mengembalikan nilai true jika tombol ditekan dan dilepaskan// jika panggilan balik berulang diberikan, panggilan balik dipanggil saat tombol ditekanbool Button::Pressed( ){ bool ditekan =salah; if (digitalRead(_pin) ==LOW) { unsigned long wait =millis() + DEBOUNCE_DELAY; while (milis() =waktu) { _repeatCallback(); unsigned lama lebih cepat =kecepatan - REPEAT_INCREASE_SPEED; if (lebih cepat>=REPEAT_MAX_SPEED) { kecepatan =lebih cepat; } waktu =milis() + kecepatan; } } ditekan =benar; } } kembali ditekan;}//Kembalikan status tombol saat ini Tombol::State(){ return digitalRead(_pin);}

Suku cadang dan penutup khusus

File STL untuk pencetakan 3D stl_files_vSNeOCJWDn.zip

Skema

Skema dan PCB dalam format Elang eagle_files_D8oAM5ngf5.zip

Proses manufaktur

  1. Lampu Halogen
  2. Lem
  3. Hot Dog
  4. Lampu Lava
  5. Balon Udara
  6. Lem Super
  7. Matriks LED + Tampilan Pintu Sensor Gerak [Arduino Holiday]
  8. 8x Pencahayaan LED dengan Suara
  9. Arduino Quadruped
  10. Materi Komunikasi Data Berbasis LED Generasi Berikutnya