Isi kandungan:

Mood Sentuhan Kapasitif / Ambilight: 8 Langkah
Mood Sentuhan Kapasitif / Ambilight: 8 Langkah

Video: Mood Sentuhan Kapasitif / Ambilight: 8 Langkah

Video: Mood Sentuhan Kapasitif / Ambilight: 8 Langkah
Video: How to use ttp223 touch sensor? #diy #shorts 2024, Julai
Anonim
Mood Sentuhan Kapasitif / Ambilight
Mood Sentuhan Kapasitif / Ambilight

Instruksional ini adalah penulisan ringkas dari pengalaman saya mencipta suasana hati yang pelbagai fungsi. Sebilangan pengetahuan asas mengenai litar elektronik diharapkan. Projek ini belum selesai, beberapa fungsi penambahan dan penyesuaian harus dilakukan tetapi sudah berfungsi. Sekiranya anda berminat dengan arahan ini, saya akan mengemas kini. Di tengah-tengah sistem ini adalah Arduino. Ia akan memproses input dari USB atau setiap input Capacitive touch dan mengawal cahaya RGB. Instruksional ini dibahagikan kepada tiga bahagian: - Bahagian sentuhan kapasitif merangkumi butang input yang tidak dapat dilihat - Bahagian cahaya suasana merangkumi pengendalian cahaya suasana - Bahagian ambilight merangkumi input oleh port bersiri, memproses nilai RGB yang dihasilkan oleh program komputer untuk mengawal lampu. Penafian: Elektronik boleh membahayakan, anda sendiri yang bertanggungjawab atas kerosakan yang berlaku. Beberapa kod dikumpulkan dari forum dan mungkin tidak mengandungi nama pemiliknya. Tolong beritahu saya dan saya akan menambah nama anda.

Langkah 1: Senarai Item

Komponen berikut diperlukan untuk petunjuk ini: - Kabel Arduino + USB- Papan roti- Bekalan kuasa komputer- jalur 3x RGB, lihat dealextreme.com.- 3x TIP120 FET, seperti https://uk.farnell.com/stmicroelectronics/tip120 / darlington-transistor-to-220 / dp / 9804005- Sekumpulan perintang (6 * 10 kiloOhm, 3 * 2 megaOhm) - Banyak wayar. - Alat Sentuhan Kapasitif - Cincin logam untuk pelat tanah - Kawat atau pinggan tembaga - Sesuatu untuk memasangnya (seperti rak buku:)

Langkah 2: Sentuhan Kapasitif - Asas & Litar

Sentuhan Kapasitif - Asas & Litar
Sentuhan Kapasitif - Asas & Litar
Sentuhan Kapasitif - Asas & Litar
Sentuhan Kapasitif - Asas & Litar
Sentuhan Kapasitif - Asas & Litar
Sentuhan Kapasitif - Asas & Litar

Sejak saya melukis rak buku saya, saya mempunyai peluang untuk 'menaik taraf' mereka juga. Saya mahu mengawal suasana hati dengan sentuhan yang tidak kelihatan. Pada mulanya, rancangan saya adalah menggunakan IC khusus untuk ini (seperti Atmel QT240). Tetapi kemudian saya tersandung pada halaman yang menjelaskan bahawa Arduino dapat meniru sensor kapasitif dengan perisian. Litar elektronik boleh didapati dalam gambar, sensornya adalah wayar tembaga berputar (hanya satu yang ditunjukkan untuk kesederhanaan). Sensitiviti dikawal oleh perintang yang dijumpai sebelum setiap pin. Mereka boleh berkisar antara 1 MegaOhm (sentuhan mutlak) hingga 40 MegaOhm (jarak 12-24 inci) bergantung pada jika sentuhan mutlak atau dekat diperlukan (saya akhirnya menggunakan perintang Ohm 2M). Eksperimen dengan nilai sehingga sensor berkelakuan seperti yang dikehendaki. Adalah idea yang baik untuk memasang beberapa permukaan pengalir (dipisahkan oleh sekeping bukan konduktif nipis) yang disambungkan ke tanah litar di bahagian belakang setiap lingkaran. Dengan cara ini sensor akan lebih stabil dan kurang dipengaruhi oleh bunyi bising. Beberapa lagi gambar mengenai pemasangan sensor di rak buku. Palam dipasang juga untuk hubungan mudah dengan litar di kemudian hari. Pengisi digunakan untuk menyembunyikan segalanya, dan setelah itu siap dicat.

Langkah 3: Sentuhan Kapasitif - Kod & Ujian

Sentuhan Kapasitif - Kod & Ujian
Sentuhan Kapasitif - Kod & Ujian

Kod sumber berikut boleh digunakan di Arduino untuk debugging, periksa nilainya dengan monitor bersiri arduino. Enam nilai dihasilkan. Yang pertama adalah ukuran prestasi sistem. Yang kedua hingga keenam adalah nilai yang dirasakan pada setiap pin. Nilai harus meningkat ketika mendekati jari anda. Sekiranya tidak, periksa sambungan dan gangguan yang tidak baik. Nilai perintang boleh diubah untuk menentukan kepekaan. Dengan menerapkan struktur if-then yang diaktifkan pada ambang logik tertentu, peralihan dapat dibuat. Ini akan digunakan dalam kod arduino akhir. Maklumat lanjut, disarankan untuk dibaca: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch Debugging Code --- # include setup void () {CapSense cs_2_3 = CapSense (2, 4); // Perintang 10M antara pin 2 & 4, pin 4 adalah pin sensor, tambah wayar, foilCapSense cs_2_4 = CapSense (2, 7); // Perintang 10M antara pin 2 & 7, pin 7 adalah pin sensor, tambah wayar, foilCapSense cs_2_5 = CapSense (2, 8); // Perintang 10M antara pin 2 & 8, pin 8 adalah pin sensor, tambah wayar, foilCapSense cs_2_6 = CapSense (2, 12); // Perintang 10M antara pin 2 & 12, pin 12 adalah pin sensor, tambah wayar, foilCapSense cs_2_7 = CapSense (2, 13); // Perintang 10M antara pin 2 & 13, pin 13 adalah pin sensor, tambah wayar, persediaan foilvoid () {Serial.begin (9600);} gelung kosong () {panjang mula = milis (); jumlah panjang1 = cs_2_3.capSense (30); jumlah panjang2 = cs_2_4.capSense (30); panjang panjang3 = cs_2_5.capSense (30); panjang panjang4 = cs_2_6.capSense (30); panjang panjang5 = cs_2_7.capSense (30); Serial.print (milis () - mula); // periksa prestasi dalam milidetik Serial.print ("\ t"); // watak tab untuk jarakkan debug Window spial.print (total1); // output sensor cetak 1 Serial.print ("\ t"); Serial.print (total2); // output sensor cetak 2 Serial.print ("\ t"); Serial.print (total3); // output sensor cetak 3 Serial.print ("\ t"); Serial.print (total4); // output sensor cetak 4 Serial.print ("\ t"); Serial.println (total5); // output sensor cetak 5 kelewatan (10); // kelewatan sewenang-wenangnya untuk menghadkan data ke port bersiri} --- TAMAT ---

Langkah 4: Mood Light - Asas & Litar

Mood Light - Asas & Litar
Mood Light - Asas & Litar
Mood Light - Asas & Litar
Mood Light - Asas & Litar
Mood Light - Asas & Litar
Mood Light - Asas & Litar

Kini tiba masanya untuk membina bahagian output sistem. Pin PWM arduino akan digunakan untuk mengawal setiap warna. PWM bermaksud Pulse Width Modulation, dengan menghidupkan dan mematikan pin dengan cepat, led akan dimalapkan dari 0 hingga 255. Setiap pin akan diperkuat oleh FET. Buat masa ini, sistem ini hanya mempunyai satu saluran per warna, yang bermaksud bahawa semua jalur RGB akan dikendalikan sekaligus dan 3 pin PWM diperlukan (satu untuk setiap warna). Pada masa akan datang saya ingin dapat mengawal setiap empat jalur RGB saya. Ini bermakna 4 * 3 = 12 pin PWM (dan mungkin Arduino Mega). Baiklah, masa untuk beberapa skema! Ini (lihat gambar) adalah gambaran asas litar (akan segera dibuat lebih baik). Sensor kapasitif disertakan juga (bahagian hijau). Pada dasarnya ada tiga komponen yang harus dijelaskan: - FETIni adalah penguat yang saya bicarakan. Ia memiliki Gerbang, Sumber dan Saliran. Ini menguatkan deria arus kecil di pintu gerbang (disambungkan ke Arduino) dan membuka jalan untuk jalur RGB yang didorong pada 12 volt. Sumber harus berada di + 12V, toskan di GND (Ground). Periksa lembaran spesifikasi FET anda untuk mengetahui tepat. Setiap saluran RGB harus diletakkan sebelum FET sendiri. Dalam pengertian ini, ia bertindak seperti suis terkawal Arduino. - Jalur RGB Jalur RGB 12 volt ini adalah jenis anod (+) biasa. Maksudnya, bahawa wayar biasa harus disambungkan ke + 12V dan arus dialirkan melalui setiap saluran warna yang terpisah. Jalur ini mempunyai perintang, jadi jangan risau! - Perintang Tiga perintang 10k akan memastikan bahawa FET tidak akan menyala apabila tidak sepatutnya dihidupkan. Tiga yang lain akan menghadkan arus maksimum yang akan dikurangkan oleh FET. Tiga perintang teratas sudah ada dalam jalur RGB. Saya menyolder kabel USB ke jalur RGB sehingga saya dapat menghubungkannya dengan mudah. Palam dari hab lama diletakkan di papan roti saya. Gunakan bekalan kuasa komputer lama untuk jus, 12V untuk menghidupkan jalur RGB dan akhirnya 5V untuk litar jika anda mahu ia berjalan tanpa kabel USB.

Langkah 5: Mood Light - Kod & Kawalan

Cahaya suasana dikawal oleh sensor kapasitif. Buat masa ini, saya hanya memprogramkan sensor 2 & 3 untuk perubahan warna. Sensor lain belum berfungsi. Inilah kodnya: --- Arduino Mood Control Code --- # include const boolean invert = true; const long timeout = 10000; // Deklarasi sensor kapasitif CapSense In1 = CapSense (2, 4); // Perintang 2M antara pin 4 & 2, pin 2 adalah pin sensor, tambah wayar, foilCapSense In2 = CapSense (2, 7); // Perintang 2M antara pin 4 & 6, pin 6 adalah pin sensor, tambah wayar, foilCapSense In3 = CapSense (2, 8); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foilCapSense In4 = CapSense (2, 12); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foilCapSense In5 = CapSense (2, 13); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foil // PWM Pin deklarasiint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Pemboleh ubah lainint warna1 = 128; // mulakan dengan warna merah seperti Brightness1 = 255; // mulakan dengan penuh kecerahanint RedValue1, GreenValue1, BlueValue1; // Komponen RGBhindari penyediaan () {// tetapkan nilai masa tamat sensor In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (tamat masa); In3.set_CS_AutocaL_Millis (tamat masa); In4.set_CS_AutocaL_Millis (tamat masa); In5.set_CS_AutocaL_Millis (timeout);} gelung kosong () {permulaan panjang = milis (); jumlah panjang1 = In1.capSense (30); jumlah panjang2 = In2.capSense (30); jumlah panjang3 = In3.capSense (30); panjang panjang4 = In4.capSense (30); panjang panjang5 = In5.capSense (30); jika (total2> 150) {Color1 ++; // tingkatkan warna jika (Warna1> 255) {// Warna1 = 0; }} lain jika (total3> 200) {Color1--; // kurangkan warna jika (Warna1 <0) {// Warna1 = 255; } // menukar hue menjadi rgb hueToRGB (Color1, Brightness1); // tulis warna ke pin PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // berfungsi untuk menukar warna ke komponennya Merah, Hijau, dan Biru. kosongkan hueToRGB (int hue, int brightness) {unsigned int scaledHue = (hue * 6); segmen int yang tidak ditandatangani = scaledHue / 256; // segmen 0 hingga 5 di sekitar roda warna segmen int tidak bertandaOffset = scaledHue - (segmen * 256); // kedudukan dalam segmen pujian int tidak bertanda = 0; int tidak bertanda prev = (kecerahan * (255 - segmen Offset)) / 256; unsigned int next = (brightness * segmen Offset) / 256; jika (terbalik) {brightness = 255-brightness; pujian = 255; prev = 255-prev; seterusnya = 255-seterusnya; } beralih (segmen) {kes 0: // merah RedValue1 = kecerahan; GreenValue1 = seterusnya; BlueValue1 = pujian; rehat; kes 1: // kuning Nilai Merah1 = prev; GreenValue1 = kecerahan; BlueValue1 = pujian; rehat; kes 2: // GreenValue1 = pujian; GreenValue1 = kecerahan; BlueValue1 = seterusnya; rehat; kes 3: // cyan RedValue1 = pujian; GreenValue1 = sebelumnya; BlueValue1 = kecerahan; rehat; kes 4: // biru Nilai Merah1 = seterusnya; GreenValue1 = pujian; BlueValue1 = kecerahan; rehat; kes 5: // magenta lalai: RedValue1 = kecerahan; GreenValue1 = pujian; BlueValue1 = sebelumnya; rehat; }} --- TAMAT ---

Langkah 6: Ambi Light - Arduino Side

Sudah tentu, sangat baik untuk mengawal cahaya suasana dari komputer anda. Contohnya untuk membuat pengambilanight atau disko kawalan suara. Bahagian ini memfokuskan pada bahagian ambilight, pada masa akan datang saya akan menambahkan lebih banyak fungsi. Nah, tidak ada litar tambahan kerana semuanya tersedia di Arduino. Apa yang akan kita gunakan adalah kemampuan komunikasi bersiri dan beberapa perisian 'Processing 1.0'. Sambungkan arduino anda ke komputer anda dengan kabel USB (jika anda memuat naik lakaran, sudah ada). Untuk arduino, perlu menambahkan beberapa kod tambahan untuk komunikasi bersiri. Kod akan beralih ke mod mendengar, memutar sensor kapasitif selagi ia menerima nilai RGB dari komputer. Ia kemudian menetapkan nilai RGB ke pin PWM. Ini adalah kod terakhir saya untuk sekarang, periksa sendiri perubahannya: --- Arduino Ambilight Code --- # include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // Deklarasi sensor kapasitif In1 = CapSense (2, 4); // Perintang 2M antara pin 4 & 2, pin 2 adalah pin sensor, tambah wayar, foilCapSense In2 = CapSense (2, 7); // Perintang 2M antara pin 4 & 6, pin 6 adalah pin sensor, tambah wayar, foilCapSense In3 = CapSense (2, 8); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foilCapSense In4 = CapSense (2, 12); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foilCapSense In5 = CapSense (2, 13); // Perintang 2M antara pin 4 & 8, pin 8 adalah pin sensor, tambah wayar, foil // PWM Pin deklarasiint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Pemboleh ubah lainint warna1 = 128; // mulakan dengan warna merah seperti Brightness1 = 255; // mulakan dengan penuh kecerahanint RedValue1, GreenValue1, BlueValue1; // Komponen RGBhindari penyediaan () {Serial.begin (9600); // mulakan komunikasi bersiri // tetapkan nilai timeout sensor In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (tamat masa); In3.set_CS_AutocaL_Millis (tamat masa); In4.set_CS_AutocaL_Millis (tamat masa); In5.set_CS_AutocaL_Millis (timeout);} gelung void () {long start = millis (); jumlah panjang1 = In1.capSense (30); panjang panjang2 = In2.capSense (30); jumlah panjang3 = In3.capSense (30); panjang panjang4 = In4.capSense (30); panjang panjang5 = In5.capSense (30); if (Serial.available ()) {// Sekiranya data tersedia untuk dibaca, val = Serial.read (); // baca dan simpan dalam val commStart = millis (); if (val == 'S') {// Jika permulaan char diterima, sementara (! Serial.available ()) {} // Tunggu sehingga nilai seterusnya. RedValue1 = Serial.read (); // Setelah tersedia, tetapkan. sementara (! Serial.available ()) {} // Sama seperti di atas. GreenValue1 = Serial.read (); sementara (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (Nilai Merah1); Serial.print (Nilai Hijau1); Serial.println (BlueValue1); } lain jika ((milis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // tingkatkan warna jika (Warna1> 255) {// Warna1 = 0; }} lain jika (total3> 200) {Color1--; // kurangkan warna jika (Warna1 <0) {// Warna1 = 255; }} hueToRGB (Warna1, Kecerahan1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // berfungsi untuk menukar warna ke komponen Merah, Hijau, dan Biru. hindari hueToRGB (int hue, int brightness) {unsigned int scaledHue = (hue * 6); segmen int yang tidak ditandatangani = scaledHue / 256; // segmen 0 hingga 5 di sekitar roda warna yang tidak bertanda segmen int Offset = scaledHue - (segmen * 256); // kedudukan dalam segmen pujian int tidak bertanda = 0; int tidak bertanda prev = (kecerahan * (255 - segmen Offset)) / 256; unsigned int next = (brightness * segmen Offset) / 256; jika (terbalik) {brightness = 255-brightness; pujian = 255; prev = 255-prev; seterusnya = 255-seterusnya; } beralih (segmen) {kes 0: // merah RedValue1 = kecerahan; GreenValue1 = seterusnya; BlueValue1 = pujian; rehat; kes 1: // kuning Nilai Merah1 = prev; GreenValue1 = kecerahan; BlueValue1 = pujian; rehat; kes 2: // GreenValue1 = pujian; GreenValue1 = kecerahan; BlueValue1 = seterusnya; rehat; kes 3: // cyan RedValue1 = pujian; GreenValue1 = sebelumnya; BlueValue1 = kecerahan; rehat; kes 4: // biru Nilai Merah1 = seterusnya; GreenValue1 = pujian; BlueValue1 = kecerahan; rehat; kes 5: // magenta lalai: RedValue1 = kecerahan; GreenValue1 = pujian; BlueValue1 = sebelumnya; rehat; }} --- TAMAT ---

Langkah 7: Ambi Light - Bahagian Komputer

Di sisi komputer lakaran Pemprosesan 1.0 dijalankan, lihat processing.org. Program kecil (agak tidak kemas) ini mengira warna rata-rata setiap saat dan menghantarnya ke port bersiri. Ini sangat asas hingga sekarang dan boleh menggunakan beberapa tweak, tetapi ia berfungsi dengan baik! Saya akan mengemas kini pada masa akan datang untuk beberapa jalur RGB dan bahagian skrin yang berasingan. Anda juga boleh melakukannya sendiri, bahasanya cukup mudah. Inilah kodnya: --- Memproses 1.0 Kod --- 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 utama (String args ) {PApplet.main (String baru {"--present", "shooter"}))}} kekosongan persediaan () {size (100, 100); //size(screen.width, screen.height); // Cetak senarai port bersiri, untuk tujuan penyahpepijatan: println (Serial.list ()); // Saya tahu bahawa port pertama dalam senarai bersiri pada mac // saya selalu menjadi penyesuai FTDI saya, jadi saya membuka Serial.list () [0]. // Pada mesin Windows, ini biasanya membuka COM1. // Buka port apa sahaja yang anda gunakan. String portName = Serial.list () [0]; myPort = Serial baru (ini, portName, 9600);} undian batal () {// image (screenShot, 0, 0, lebar, tinggi); screenShot = getScreen (); warna kleur = warna (0, 0, 0); kleur = warna (tangkapan skrin); //myPort.write(int(red(kleur))+ ',' + int (hijau (kleur)) + ',' + int (biru (kleur)) + 13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(blue(kleur))); //myPort.write(13); isi (kleur); segiempat tepat (30, 20, 55, 55);} warna warna (PImage img) {int cols = (img. lebar); int baris = (img.height); int dimensi = (img. lebar * img.tinggi); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pixel langs (dimensi) untuk (int i = 0; i <(dimensi / 2); i ++) {r = r + ((img.pixels >> 16) & 0xFF); g = g + ((img.pixels >> 8) & 0xFF); b = b + (img.pixels & 0xFF);} int mean_r = r / (dimensi / 2); int mean_g = g / (dimensi / 2); int mean_b = b / (dimensi / 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 (); Mod DisplayMode = gs [0].getDisplayMode (); Batas segi empat tepat = Segi empat tepat baru (0, 0, mode.getWidth (), mode.getHeight ()); Desktop BufferedImage = BufferedImage baru (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); cuba {desktop = Robot baru (gs [0]). createScreenCapture (had); } tangkapan (AWTException e) {System.err.println ("Rakaman skrin gagal."); } kembali (PImage baru (desktop));} --- TAMAT ---

Langkah 8: Hasilnya

Keputusan
Keputusan
Keputusan
Keputusan

Dan inilah hasilnya, ia sebenarnya terletak di bahagian bawah katil saya. Saya masih perlu mengganti kain, akan lebih menyebar cahaya. Lebih banyak gambar akan segera. Saya harap anda menyukai arahan ini dan saya juga berharap ia menjadi asas kreativiti anda sendiri. Oleh kerana kekangan masa saya menulisnya dengan cepat. Anda mungkin perlu mempunyai pengetahuan asas arduino / elektronik untuk memahaminya tetapi saya merancang untuk mengemas kini pada masa akan datang jika diterima dengan baik.

Disyorkan: