Daftar Isi:

Capacitive Touch Mood/Ambilight: 8 Langkah
Capacitive Touch Mood/Ambilight: 8 Langkah

Video: Capacitive Touch Mood/Ambilight: 8 Langkah

Video: Capacitive Touch Mood/Ambilight: 8 Langkah
Video: How to Make an Arduino Capacitance Meter 2024, Juli
Anonim
Sentuhan Capacitive Mood/Ambilight
Sentuhan Capacitive Mood/Ambilight

Instruksi ini adalah tulisan singkat tentang pengalaman saya menciptakan moodlight multifungsi. Beberapa pengetahuan dasar tentang sirkuit elektronik diharapkan. Proyek belum selesai, beberapa penambahan fungsionalitas dan tweaking harus dilakukan tetapi sudah berfungsi. Jika kalian antusias tentang instruksi ini, saya akan memperbaruinya. Inti dari sistem ini adalah Arduino. Ini akan memproses input dari USB atau setiap input sentuh Capacitive dan mengontrol lampu RGB. Instruksi ini dibagi menjadi tiga bagian:- Bagian sentuh kapasitif mencakup tombol input yang tidak terlihat- Bagian moodlight mencakup pengendalian moodlight- Bagian ambilight mencakup input oleh port serial, memproses nilai RGB yang dihasilkan oleh program komputer untuk mengontrol lampu Penafian: Elektronik bisa berbahaya, Anda sendiri yang bertanggung jawab atas segala kerusakan yang terjadi. Beberapa kode dikumpulkan dari forum dan mungkin tidak berisi nama pemiliknya. Tolong beri tahu saya dan saya akan menambahkan nama Anda.

Langkah 1: Daftar Item

Komponen berikut diperlukan untuk instruksi ini:- Kabel Arduino+USB- Papan tempat memotong roti- Catu daya komputer- Strip RGB 3x, lihat dealextreme.com.- FET 3x TIP120, seperti https://uk.farnell.com/stmicroelectronics/tip120 /darlington-transistor-to-220/dp/9804005- Sekelompok resistor (6* 10 kiloOhm, 3 * 2 megaOhm)- Banyak kabel. - Alat Sentuh kapasitif - Cincin logam untuk pelat dasar- Kawat atau pelat tembaga- Sesuatu untuk membangunnya (seperti rak buku:)

Langkah 2: Sentuhan Kapasitif - Dasar & Sirkuit

Sentuhan Kapasitif - Dasar & Sirkuit
Sentuhan Kapasitif - Dasar & Sirkuit
Sentuhan Kapasitif - Dasar & Sirkuit
Sentuhan Kapasitif - Dasar & Sirkuit
Sentuhan Kapasitif - Dasar & Sirkuit
Sentuhan Kapasitif - Dasar & Sirkuit

Karena saya sedang mengecat rak buku saya, saya memiliki kesempatan untuk 'mengupgrade' mereka juga. Saya ingin mengontrol moodlight melalui sentuhan tak terlihat. Pada awalnya, rencana saya adalah menggunakan IC khusus untuk ini (seperti Atmel QT240). Tapi kemudian saya menemukan halaman yang menjelaskan bahwa Arduino dapat meniru sensor kapasitif oleh perangkat lunak. Sirkuit elektronik dapat ditemukan pada gambar, sensornya adalah kawat tembaga spiral (hanya satu yang ditampilkan untuk kesederhanaan). Sensitivitas dikendalikan oleh resistor yang ditemukan sebelum setiap pin. Mereka dapat berkisar dari 1 MegaOhm (sentuhan mutlak) hingga 40 MegaOhm (12-24 inci) tergantung pada apakah sentuhan mutlak atau dekat diperlukan (saya akhirnya menggunakan resistor 2M Ohm). Percobaan dengan nilai-nilai sampai sensor berperilaku seperti yang diinginkan. Merupakan ide yang baik untuk memasang beberapa permukaan konduktor (dipisahkan oleh bagian non-konduktor tipis) yang terhubung ke ground sirkuit di bagian belakang setiap spiral. Dengan cara ini sensor akan lebih stabil dan tidak terpengaruh oleh noise. Beberapa gambar lagi tentang memasang sensor di rak buku. Sebuah steker dipasang juga untuk koneksi yang mudah dengan sirkuit di kemudian hari. Filler digunakan untuk menyembunyikan semuanya, dan setelah itu siap untuk dicat.

Langkah 3: Sentuhan Kapasitif - Kode & Pengujian

Sentuhan Kapasitif - Kode & Pengujian
Sentuhan Kapasitif - Kode & Pengujian

Kode sumber berikut dapat digunakan pada Arduino untuk debugging, periksa nilainya dengan monitor serial arduino. Enam nilai dihasilkan. Yang pertama adalah ukuran kinerja sistem. Yang kedua hingga keenam adalah nilai yang dirasakan pada setiap pin. Nilainya akan naik saat mendekati jari Anda. Jika tidak, periksa koneksi dan gangguan yang buruk. Nilai resistor dapat diubah untuk menentukan sensitivitas. Dengan menerapkan struktur if-then yang diaktifkan pada treshold logis tertentu, sebuah switch dapat dibuat. Ini akan digunakan dalam kode arduino akhir. Informasi lebih lanjut, disarankan untuk membaca: https://www.arduino.cc/playground/Main/CapSense--- Kode Debugging Arduino CapTouch ---#include void setup() {CapSense cs_2_3 = CapSense(2, 4); // Resistor 10M antara pin 2 & 4, pin 4 adalah pin sensor, tambahkan kabel, foilCapSense cs_2_4 = CapSense(2, 7); // Resistor 10M antara pin 2 & 7, pin 7 adalah pin sensor, tambahkan kabel, foilCapSense cs_2_5 = CapSense(2, 8); // Resistor 10M antara pin 2 & 8, pin 8 adalah pin sensor, tambahkan kabel, foilCapSense cs_2_6 = CapSense(2, 12); // Resistor 10M antara pin 2 & 12, pin 12 adalah pin sensor, tambahkan kabel, foilCapSense cs_2_7 = CapSense(2, 13); // Resistor 10M antara pin 2 & 13, pin 13 adalah pin sensor, tambahkan kawat, pengaturan foilvoid() { Serial.begin(9600);}void loop() { long start = millis(); panjang total1 = cs_2_3.capSense(30); panjang total2 = cs_2_4.capSense(30); panjang total3 = cs_2_5.capSense(30); panjang total4 = cs_2_6.capSense(30); panjang total5 = cs_2_7.capSense(30); Serial.print(milis() - mulai); // periksa performa dalam milidetik Serial.print("\t"); // karakter tab untuk debug jarak jendela Serial.print(total1); // mencetak keluaran sensor 1 Serial.print("\t"); Serial.print(total2); // mencetak keluaran sensor 2 Serial.print("\t"); Serial.print(total3); // mencetak keluaran sensor 3 Serial.print("\t"); Serial.print(total4); // mencetak keluaran sensor 4 Serial.print("\t"); Serial.println(total5); // cetak keluaran sensor 5 delay(10); // penundaan sewenang-wenang untuk membatasi data ke port serial }--- END ---

Langkah 4: Mood Light - Dasar & Sirkuit

Mood Light - Dasar & Sirkuit
Mood Light - Dasar & Sirkuit
Mood Light - Dasar & Sirkuit
Mood Light - Dasar & Sirkuit
Mood Light - Dasar & Sirkuit
Mood Light - Dasar & Sirkuit

Sekarang saatnya untuk membangun bagian output dari sistem. Pin PWM arduino akan digunakan untuk mengontrol setiap warna. PWM berarti Pulse Width Modulation, dengan menyalakan dan mematikan pin dengan sangat cepat, led akan meredup dari 0 hingga 255. Setiap pin akan diperkuat oleh FET. Untuk saat ini, sistem hanya memiliki satu saluran per warna, artinya semua strip RGB akan dikontrol sekaligus dan diperlukan 3 pin PWM (satu untuk setiap warna). Di masa depan saya ingin dapat mengontrol masing-masing dari empat strip RGB saya. Itu berarti 4*3=12 pin PWM (dan mungkin Arduino Mega). Oke, waktunya untuk beberapa skema! Ini (lihat gambar) adalah representasi dasar dari rangkaian (akan segera membuat yang lebih bagus). Sensor kapasitif juga disertakan (bagian hijau). Pada dasarnya ada tiga komponen yang harus dijelaskan: - FETIni adalah amplifier yang saya bicarakan. Ini memiliki Gerbang, Sumber dan Drain. Ini memperkuat indra arus kecil di gerbang (terhubung ke Arduino) dan membuka jalan bagi strip RGB yang digerakkan pada 12 volt. Sumber harus di +12V, tiriskan di GND (Ground). Periksa lembar spesifikasi FET Anda untuk pinout yang tepat. Setiap saluran RGB harus diposisikan sebelum FET-nya sendiri. Dalam pengertian ini, ia bertindak seperti sakelar yang dikendalikan Arduino.- Strip RGB Strip RGB 12 volt ini adalah jenis anoda (+) umum. Artinya, kabel umum harus dihubungkan ke +12V dan arus ditenggelamkan melalui masing-masing saluran warna yang terpisah. Strip telah memasukkan resistor, jadi jangan khawatir tentang itu!- ResistorTiga resistor 10k akan memastikan bahwa FET tidak akan menyala ketika mereka tidak seharusnya menyala. Tiga lainnya akan membatasi arus maksimum yang akan dikuras FET. Tiga resistor teratas sudah ada di strip RGB. Saya menyolder kabel USB ke strip RGB sehingga saya dapat menghubungkannya secara modular dengan mudah. Colokan dari hub lama ditempatkan di papan tempat memotong roti saya. Gunakan catu daya komputer lama untuk jus, 12V untuk memberi daya pada strip RGB dan akhirnya 5V untuk sirkuit jika Anda ingin menjalankannya tanpa kabel USB.

Langkah 5: Cahaya Suasana Hati - Kode & Kontrol

Cahaya suasana hati dikendalikan oleh sensor kapasitif. Untuk saat ini, saya hanya memprogram sensor 2 & 3 untuk perubahan warna. Sensor lainnya belum berfungsi. Berikut kodenya:--- Kode Kontrol Mood Arduino ---#include const boolean invert = true;const long timeout = 10.000;// Deklarasi sensor kapasitifCapSense In1 = CapSense(2, 4); // Resistor 2M antara pin 4 & 2, pin 2 adalah pin sensor, tambahkan kabel, foilCapSense In2 = CapSense(2, 7); // Resistor 2M antara pin 4 & 6, pin 6 adalah pin sensor, tambahkan kabel, foilCapSense In3 = CapSense(2, 8); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambahkan kabel, foilCapSense In4 = CapSense(2, 12); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambahkan kabel, foilCapSense In5 = CapSense(2, 13); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambahkan kawat, foil// Deklarasi Pin PWMsint PinR1 = 3;int PinG1 = 5;int PinB1 = 6;// Variabel lainint Color1 = 128; // mulai dari warna merah seperti colorint Brightness1 = 255; // mulai dengan kecerahan penuhint RedValue1, GreenValue1, BlueValue1; // RGB componentvoid setup() { // setel nilai timeout sensor In1.set_CS_AutocaL_Millis(timeout); In2.set_CS_AutocaL_Millis(batas waktu); In3.set_CS_AutocaL_Millis(batas waktu); In4.set_CS_AutocaL_Millis(batas waktu); In5.set_CS_AutocaL_Millis(timeout);}void loop() { long start = millis(); panjang total1 = In1.capSense(30); panjang total2 = In2.capSense(30); panjang total3 = In3.capSense(30); panjang total4 = In4.capSense(30); panjang total5 = In5.capSense(30); if (total2 > 150) { Color1++; // menambah warna if(Color1 > 255) { // Color1 = 0; } } else if (total3 > 200) { Color1--; // kurangi warna if(Color1 < 0) { // Color1 = 255; } // konversi rona ke rgb hueToRGB(Color1, Brightness1); // menulis warna ke pin PWM analogWrite(PinR1, RedValue1); analogWrite(PinG1, GreenValue1); analogWrite(PinB1, BlueValue1);}// berfungsi untuk mengubah warna menjadi komponen Merah, Hijau, dan Biru.void hueToRGB(int hue, int brightness){ unsigned int scaledHue = (hue * 6); segmen int unsigned = scaledHue / 256; // segmen 0 hingga 5 di sekitar roda warna unsigned int segmentOffset = scaledHue - (segmen * 256); // posisi dalam segmen unsigned int pujian = 0; unsigned int prev = (kecerahan * (255 - segmentOffset)) / 256; unsigned int next = (kecerahan * segmentOffset) / 256; if(invert) { kecerahan = 255-kecerahan; pujian = 255; sebelumnya = 255-sebelumnya; berikutnya = 255-berikutnya; } switch(segmen) { case 0: // merah RedValue1 = kecerahan; NilaiHijau1 = berikutnya; BlueValue1 = pujian; merusak; kasus 1: // kuning RedValue1 = sebelumnya; NilaiHijau1 = kecerahan; BlueValue1 = pujian; merusak; case 2: // hijau RedValue1 = pujian; NilaiHijau1 = kecerahan; BlueValue1 = berikutnya; merusak; case 3: // cyan RedValue1 = pujian; NilaiHijau1 = sebelumnya; BlueValue1 = kecerahan; merusak; case 4: // biru RedValue1 = selanjutnya; GreenValue1 = pujian; BlueValue1 = kecerahan; merusak; kasus 5: // magenta default: RedValue1 = kecerahan; GreenValue1 = pujian; BlueValue1 = sebelumnya; merusak; }}--- AKHIR ---

Langkah 6: Cahaya Ambi - Sisi Arduino

Tentu saja, akan sangat keren untuk dapat mengontrol mood light dari komputer Anda. Misalnya untuk membuat ambilight atau disko yang dikontrol suara. Bagian ini berfokus pada bagian ambilight, kedepannya saya akan menambahkan lebih banyak fungsionalitas. Nah, tidak ada sirkuit tambahan karena semuanya tersedia di Arduino. Apa yang akan kita gunakan adalah kemampuan komunikasi serial dan beberapa perangkat lunak 'Processing 1.0'. Hubungkan arduino Anda ke komputer Anda dengan kabel USB (jika Anda mengunggah sketsa ke sana, sudah ada). Untuk arduino, juga harus menambahkan beberapa kode tambahan untuk komunikasi serial. Kode akan beralih ke mode mendengarkan, memutar sensor kapasitif selama menerima nilai RGB dari komputer. Ini kemudian mengatur nilai RGB ke pin PWM. Ini adalah kode terakhir saya untuk saat ini, periksa sendiri perubahannya:--- Kode Ambilight Arduino ---#include const boolean invert = true;const long timeout = 10000;long commStart = 0;char val;// Deklarasi sensor kapasitifCapSense In1 = CapSense(2, 4); // Resistor 2M antara pin 4 & 2, pin 2 adalah pin sensor, tambahkan kabel, foilCapSense In2 = CapSense(2, 7); // Resistor 2M antara pin 4 & 6, pin 6 adalah pin sensor, tambahkan kabel, foilCapSense In3 = CapSense(2, 8); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambahkan kabel, foilCapSense In4 = CapSense(2, 12); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambahkan kabel, foilCapSense In5 = CapSense(2, 13); // Resistor 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah kawat, foil// Deklarasi Pin PWMsint PinR1 = 3;int PinG1 = 5;int PinB1 = 6;// Variabel lainint Color1 = 128; // mulai dari warna merah seperti colorint Brightness1 = 255; // mulai dengan kecerahan penuhint RedValue1, GreenValue1, BlueValue1; // RGB componentvoid setup() { Serial.begin(9600); // mulai komunikasi serial// setel nilai batas waktu sensor In1.set_CS_AutocaL_Millis(batas waktu); In2.set_CS_AutocaL_Millis(batas waktu); In3.set_CS_AutocaL_Millis(batas waktu); In4.set_CS_AutocaL_Millis(batas waktu); In5.set_CS_AutocaL_Millis(timeout);}void loop() { long start = millis(); panjang total1 = In1.capSense(30); panjang total2 = In2.capSense(30); panjang total3 = In3.capSense(30); panjang total4 = In4.capSense(30); panjang total5 = In5.capSense(30); if (Serial.available()) { // Jika data tersedia untuk dibaca, val = Serial.read(); // baca dan simpan di val commStart = millis(); if (val == 'S') { //Jika start char diterima, while (!Serial.available()) {} //Tunggu sampai nilai berikutnya. RedValue1 = Serial.read(); // Setelah tersedia, tetapkan. while (!Serial.available()) {} //Sama seperti di atas. GreenValue1 = Serial.read(); while (!Serial.available()) {} BlueValue1 = Serial.read(); } Serial.print(RedValue1); Serial.print(Nilai Hijau1); Serial.println(Nilai Biru1); } else if ((millis() - commStart) > 1000) { if (total2 > 150) { Color1++; // menambah warna if(Color1 > 255) { // Color1 = 0; } } else if (total3 > 200) { Color1--; // kurangi warna if(Color1 < 0) { // Color1 = 255; } } hueToRGB(Warna1, Kecerahan1); } analogWrite(PinR1, RedValue1); analogWrite(PinG1, GreenValue1); analogWrite(PinB1, BlueValue1);}// berfungsi untuk mengubah warna menjadi komponen Merah, Hijau, dan Biru.void hueToRGB(int hue, int brightness){ unsigned int scaledHue = (hue * 6); segmen int unsigned = scaledHue / 256; // segmen 0 hingga 5 di sekitar roda warna unsigned int segmentOffset = scaledHue - (segmen * 256); // posisi dalam segmen unsigned int pujian = 0; unsigned int prev = (kecerahan * (255 - segmentOffset)) / 256; unsigned int next = (kecerahan * segmentOffset) / 256; if(invert) { kecerahan = 255-kecerahan; pujian = 255; sebelumnya = 255-sebelumnya; berikutnya = 255-berikutnya; } switch(segmen) { case 0: // merah RedValue1 = kecerahan; NilaiHijau1 = berikutnya; BlueValue1 = pujian; merusak; kasus 1: // kuning RedValue1 = sebelumnya; NilaiHijau1 = kecerahan; BlueValue1 = pujian; merusak; case 2: // hijau RedValue1 = pujian; NilaiHijau1 = kecerahan; BlueValue1 = berikutnya; merusak; case 3: // cyan RedValue1 = pujian; NilaiHijau1 = sebelumnya; BlueValue1 = kecerahan; merusak; case 4: // biru RedValue1 = selanjutnya; GreenValue1 = pujian; BlueValue1 = kecerahan; merusak; kasus 5: // magenta default: RedValue1 = kecerahan; GreenValue1 = pujian; BlueValue1 = sebelumnya; merusak; }}--- AKHIR ---

Langkah 7: Ambi Light - Sisi Komputer

Di sisi komputer, sketsa Processing 1.0 dijalankan, lihat processing.org. Program kecil (agak berantakan) ini menghitung rata-rata warna layar setiap saat dan mengirimkannya ke port serial. Ini masih sangat mendasar dan bisa menggunakan beberapa penyesuaian, tetapi bekerja dengan sangat baik! Saya akan memperbaruinya di masa mendatang untuk beberapa strip RGB dan bagian layar yang terpisah. Anda juga bisa melakukannya sendiri, bahasanya cukup lugas. Berikut kodenya:--- Kode Processing 1.0 ---import processing.serial.*;import java.awt. AWTException;import java.awt. Robot;import java.awt. Rectangle;import java.awt.image. BufferedImage;PImage screenShot;Serial myPort;static public void main(String args) { PApplet.main(new String { "--present", "shooter" });}void setup() { size(100, 100); //ukuran(lebar.layar, tinggi.layar); // Cetak daftar port serial, untuk keperluan debugging: println(Serial.list()); // Saya tahu bahwa port pertama dalam daftar serial di mac saya // selalu merupakan adaptor FTDI saya, jadi saya membuka Serial.list()[0]. // Pada mesin Windows, ini biasanya membuka COM1. // Buka port apa pun yang Anda gunakan. String portName = Serial.list()[0]; myPort = Serial baru(ini, portName, 9600);}void draw () { //image(screenShot, 0, 0, lebar, tinggi); screenShot = getScreen(); warna kleur = warna(0, 0, 0); kleur = warna(screenShot); //myPort.write(int(merah(kleur))+', '+int(hijau(kleur))+', '+int(biru(kleur))+13); //myPort.write(int(merah(kleur))); //myPort.write(', '); //myPort.write(int(hijau(kleur))); //myPort.write(', '); //myPort.write(int(biru(kleur)))); //myPort.write(13); isi (kleur); rect(30, 20, 55, 55);}warna warna(PImage img) { int cols = (img.width); int baris = (img.height); int dimensi = (img.width*img.height); int r = 0; int g = 0; int b = 0; img.loadPixels();// Ga elke pixel langs (dimensi)for (int i = 0; i < (dimensi/2); i++) { r = r + ((img.pixels >> 16) & 0xFF); g = g + ((img.piksel >> 8) & 0xFF); b = b + (img.piksel & 0xFF);}int mean_r = r/(dimension/2);int mean_g = g/(dimension/2);int mean_b = b/(dimension/2);warna mean_clr = warna(mean_r, mean_g, mean_b); myPort.write('S'); myPort.write(mean_r); myPort.write(mean_g); myPort.write(mean_b);return (mean_clr);}PImage getScreen() { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gs = ge.getScreenDevices(); Mode DisplayMode = gs[0].getDisplayMode(); Batas persegi panjang = new Rectangle(0, 0, mode.getWidth(), mode.getHeight()); BufferedImage desktop = new BufferedImage(mode.getWidth(), mode.getHeight(), BufferedImage. TYPE_INT_RGB); coba { desktop = Robot baru(gs[0]).createScreenCapture(batas); } catch(AWTException e) { System.err.println("Tangkapan layar gagal."); } kembali (PImage baru(desktop));}--- END ---

Langkah 8: Hasil

Hasil
Hasil
Hasil
Hasil

Dan inilah hasilnya, sebenarnya di sisi bawah tempat tidur saya. Saya masih perlu mengganti kainnya, itu akan menyebarkan cahaya lebih banyak. Lebih banyak gambar tentang itu segera. Saya harap Anda menyukai instruksi ini dan saya juga berharap ini adalah dasar untuk kreativitas Anda sendiri. Karena keterbatasan waktu, saya menulisnya dengan sangat cepat. Anda mungkin perlu memiliki pengetahuan arduino/elektronik dasar untuk memahaminya, tetapi saya berencana untuk memperbaruinya di masa mendatang jika diterima dengan baik.

Direkomendasikan: