Mục lục:

Tâm trạng cảm ứng điện dung / Ambilight: 8 bước
Tâm trạng cảm ứng điện dung / Ambilight: 8 bước

Video: Tâm trạng cảm ứng điện dung / Ambilight: 8 bước

Video: Tâm trạng cảm ứng điện dung / Ambilight: 8 bước
Video: AMBILIGHT.VN - Hướng dẫn cài đặt và sử dụng Led Ambilight USB Pro Max - RAINBOW MUSIC LED 2024, Tháng bảy
Anonim
Tâm trạng cảm ứng điện dung / Ambilight
Tâm trạng cảm ứng điện dung / Ambilight

Tài liệu hướng dẫn này là một bản ghi nhanh kinh nghiệm của tôi khi tạo ra một đèn pha tâm trạng đa chức năng. Dự kiến một số kiến thức cơ bản về mạch điện tử. Dự án vẫn chưa kết thúc, một số chức năng thêm và điều chỉnh phải được thực hiện nhưng nó đã hoạt động. Nếu các bạn cảm thấy hứng thú với tài liệu hướng dẫn này, tôi sẽ cập nhật nó. Trung tâm của hệ thống là Arduino. Nó sẽ xử lý đầu vào từ USB hoặc từng đầu vào cảm ứng Điện dung và điều khiển đèn RGB. Hướng dẫn này được chia thành ba phần: - Phần cảm ứng điện dung che các nút đầu vào không nhìn thấy được. Tuyên bố từ chối trách nhiệm: Đồ điện tử có thể gây nguy hiểm, bản thân bạn phải chịu trách nhiệm cho bất kỳ thiệt hại nào xảy ra. Một số mã được thu thập từ các diễn đàn và có thể không chứa tên của chủ sở hữu của nó. Vui lòng cho tôi biết và tôi sẽ thêm tên của bạn.

Bước 1: Danh sách mặt hàng

Các thành phần sau đây là cần thiết cho hướng dẫn này: - Arduino + cáp USB- Breadboard- Nguồn điện máy tính- 3x dải RGB, xem dealextreme.com.- 3x TIP120 FET, chẳng hạn như https://uk.farnell.com/stmicroelectronics/tip120 / darlington-transistor-to-220 / dp / 9804005- Một mớ điện trở (6 * 10 kiloOhm, 3 * 2 megaOhm) - Rất nhiều dây. - Dụng cụ Cảm ứng điện dung - Vòng kim loại dùng cho tiếp đất- Dây hoặc tấm đồng- Vật dụng để lắp nó vào (như giá sách:)

Bước 2: Cảm ứng điện dung - Thông tin cơ bản & Mạch

Cảm ứng điện dung - Thông tin cơ bản & Mạch
Cảm ứng điện dung - Thông tin cơ bản & Mạch
Cảm ứng điện dung - Thông tin cơ bản & Mạch
Cảm ứng điện dung - Thông tin cơ bản & Mạch
Cảm ứng điện dung - Thông tin cơ bản & Mạch
Cảm ứng điện dung - Thông tin cơ bản & Mạch

Vì tôi đang sơn giá sách của mình, tôi cũng có cơ hội để 'nâng cấp' chúng. Tôi muốn điều khiển ánh sáng tâm trạng bằng cách chạm vô hình. Lúc đầu, kế hoạch của tôi là sử dụng một vi mạch chuyên dụng cho việc này (như Atmel QT240). Nhưng sau đó tôi tình cờ xem được một trang giải thích rằng Arduino có thể mô phỏng một cảm biến điện dung bằng phần mềm. Có thể tìm thấy mạch điện tử trong hình, cảm biến là một dây đồng xoắn ốc (chỉ có một dây được hiển thị cho đơn giản). Độ nhạy được kiểm soát bởi các điện trở được tìm thấy trước mỗi chân. Chúng có thể dao động từ 1 MegaOhm (cảm ứng tuyệt đối) đến 40 MegaOhm (cách 12-24 inch) tùy thuộc vào việc cần cảm ứng tuyệt đối hay gần (tôi đã sử dụng điện trở 2M Ohm). Thử nghiệm với các giá trị cho đến khi cảm biến hoạt động như mong muốn. Bạn nên lắp đặt một số bề mặt dẫn điện (được ngăn cách bởi một miếng không dẫn điện mỏng) kết nối với đất của mạch ở phía sau của mỗi đường xoắn ốc. Bằng cách này, các cảm biến sẽ ổn định hơn và ít bị ảnh hưởng bởi tiếng ồn. Một phích cắm cũng được cài đặt để dễ dàng kết nối với mạch sau này. Filler được sử dụng để che giấu mọi thứ, và sau đó chúng đã sẵn sàng để sơn.

Bước 3: Cảm ứng điện dung - Mã & Kiểm tra

Cảm ứng điện dung - Mã & Thử nghiệm
Cảm ứng điện dung - Mã & Thử nghiệm

Mã nguồn sau có thể được sử dụng trên Arduino để gỡ lỗi, hãy kiểm tra các giá trị bằng màn hình nối tiếp arduino. Sáu giá trị được tạo ra. Đầu tiên là thước đo hiệu suất của hệ thống. Từ thứ hai đến thứ sáu là các giá trị được cảm nhận trên mỗi chân. Các giá trị sẽ tăng khi gần ngón tay của bạn. Nếu không, hãy kiểm tra các kết nối kém và nhiễu. Các giá trị điện trở có thể được thay đổi để xác định độ nhạy. Bằng cách triển khai cấu trúc if-then được kích hoạt ở một ngưỡng logic nhất định, có thể thực hiện chuyển đổi. Điều này sẽ được sử dụng trong mã arduino cuối cùng. Thông tin thêm, bạn nên đọc: https://www.arduino.cc/playground/Main/CapSense--- Mã gỡ lỗi Arduino CapTouch --- # include void setup () {CapSense cs_2_3 = CapSense (2, 4); // Điện trở 10M giữa chân 2 & 4, chân 4 là chân cảm biến, thêm dây, foilCapSense cs_2_4 = CapSense (2, 7); // Điện trở 10M giữa chân 2 & 7, chân 7 là chân cảm biến, thêm dây, foilCapSense cs_2_5 = CapSense (2, 8); // Điện trở 10M giữa chân 2 & 8, chân 8 là chân cảm biến, thêm dây, foilCapSense cs_2_6 = CapSense (2, 12); // Điện trở 10M giữa chân 2 & 12, chân 12 là chân cảm biến, thêm dây, foilCapSense cs_2_7 = CapSense (2, 13); // Điện trở 10M giữa chân 2 & 13, chân 13 là chân cảm biến, thêm dây, foilvoid setup () {Serial.begin (9600);} void loop () {long start = millis (); long total1 = cs_2_3.capSense (30); long total2 = cs_2_4.capSense (30); tổng dài3 = cs_2_5.capSense (30); tổng dài4 = cs_2_6.capSense (30); tổng dài5 = cs_2_7.capSense (30); Serial.print (millis () - start); // kiểm tra hiệu suất tính bằng mili giây Serial.print ("\ t"); // ký tự tab để gỡ lỗi giãn cách windown Serial.print (total1); // in đầu ra cảm biến 1 Serial.print ("\ t"); Serial.print (tổng 2); // in đầu ra cảm biến 2 Serial.print ("\ t"); Serial.print (tổng 3); // in đầu ra cảm biến 3 Serial.print ("\ t"); Serial.print (tổng 4); // in đầu ra cảm biến 4 Serial.print ("\ t"); Serial.println (tổng 5); // in đầu ra cảm biến trễ 5 (10); // độ trễ tùy ý để giới hạn dữ liệu đến cổng nối tiếp} --- HẾT ---

Bước 4: Ánh sáng tâm trạng - Thông tin cơ bản & Mạch

Mood Light - Khái niệm cơ bản và mạch
Mood Light - Khái niệm cơ bản và mạch
Mood Light - Khái niệm cơ bản và mạch
Mood Light - Khái niệm cơ bản và mạch
Mood Light - Khái niệm cơ bản và mạch
Mood Light - Khái niệm cơ bản và mạch

Bây giờ là lúc xây dựng phần đầu ra của hệ thống. Các chân PWM của arduino sẽ được sử dụng để điều khiển từng màu. PWM có nghĩa là Điều chế độ rộng xung, bằng cách bật và tắt một chân rất nhanh chóng, các đèn led sẽ bị mờ đi từ 0 đến 255. Mỗi chân sẽ được khuếch đại bởi một FET. Hiện tại, hệ thống chỉ có một kênh cho mỗi màu, có nghĩa là tất cả các dải RGB sẽ được điều khiển cùng một lúc và cần 3 chân PWM (một chân cho mỗi màu). Trong tương lai, tôi muốn có thể điều khiển từng dải trong số bốn dải RGB của mình. Điều đó có nghĩa là 4 * 3 = 12 chân PWM (và có thể là Arduino Mega). Ồ, đã đến lúc cho một số sơ đồ! Đây (xem hình) là một đại diện cơ bản của mạch (sẽ sớm làm cho một cái đẹp hơn). Các cảm biến điện dung cũng được bao gồm (phần màu xanh lá cây). Về cơ bản, có ba thành phần phải được giải thích: - FET Đây là bộ khuếch đại mà tôi đã nói đến. Nó có Cổng, Nguồn và Cống. Nó khuếch đại cảm nhận một dòng điện nhỏ trên cổng (được kết nối với Arduino) và mở đường cho dải RGB được điều khiển trên 12 volt. Nguồn phải trên + 12V, thoát trên GND (Mặt đất). Kiểm tra bảng thông số kỹ thuật của FET của bạn để biết sơ đồ chính xác. Mỗi kênh RGB phải được định vị trước FET của chính nó. Theo nghĩa này, nó hoạt động giống như một công tắc điều khiển Arduino. - Dải RGB: Dải RGB 12 volt này thuộc loại cực dương (+) phổ biến. Có nghĩa là dây chung phải được kết nối với + 12V và dòng điện được chìm qua mỗi kênh màu riêng biệt. Dải này đã kết hợp các điện trở, vì vậy đừng lo lắng về điều đó! - Điện trở Ba điện trở 10k sẽ đảm bảo rằng FET sẽ không bật khi chúng không được cho là bật. Ba người khác sẽ giới hạn dòng điện tối đa mà FET sẽ tiêu hao. Ba điện trở hàng đầu đã nằm trong dải RGB. Tôi đã hàn cáp USB vào dải RGB để tôi có thể kết nối chúng theo mô-đun một cách dễ dàng. Các phích cắm từ một trung tâm cũ được đặt trên breadboard của tôi. Sử dụng nguồn cấp điện cho máy tính cũ cho máy tính, 12V để cấp nguồn cho dải RGB và cuối cùng là 5V cho mạch nếu bạn muốn nó chạy mà không cần cáp USB.

Bước 5: Mood Light - Code & Control

Ánh sáng tâm trạng được điều khiển bởi các cảm biến điện dung. Hiện tại, tôi chỉ lập trình cảm biến 2 & 3 để thay đổi màu sắc. Các cảm biến khác vẫn chưa có chức năng. Đây là mã: --- Arduino Mood Control Code --- # include const boolean invert = true; const long timeout = 10000; // Khai báo cảm biến điện dungCapSense In1 = CapSense (2, 4); // Điện trở 2M giữa chân 4 & 2, chân 2 là chân cảm biến, thêm dây, foilCapSense In2 = CapSense (2, 7); // Điện trở 2M giữa chân 4 & 6, chân 6 là chân cảm biến, thêm dây, foilCapSense In3 = CapSense (2, 8); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, foilCapSense In4 = CapSense (2, 12); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, foilCapSense In5 = CapSense (2, 13); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, giấy bạc // Khai báo chân PWMint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Các biến khácint Color1 = 128; // bắt đầu ở màu đỏ như colourint Brightness1 = 255; // bắt đầu ở độ sáng đầy đủint RedValue1, GreenValue1, BlueValue1; // Các thành phần RGB setup () {// đặt các giá trị thời gian chờ của cảm biến In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (hết giờ); In3.set_CS_AutocaL_Millis (hết giờ); In4.set_CS_AutocaL_Millis (hết giờ); In5.set_CS_AutocaL_Millis (timeout);} void loop () {long start = millis (); tổng dài1 = In1.capSense (30); tổng dài2 = In2.capSense (30); tổng dài3 = In3.capSense (30); tổng dài4 = In4.capSense (30); tổng dài5 = In5.capSense (30); if (total2> 150) {Color1 ++; // tăng màu if (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // giảm màu if (Color1 <0) {// Color1 = 255; } // chuyển đổi hue thành rgb hueToRGB (Color1, Brightness1); // ghi màu vào chân PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // chức năng chuyển đổi một màu thành các thành phần Đỏ, Xanh lục và Xanh lam của nó.void hueToRGB (int hue, int morning) {unsigned int scaledHue = (hue * 6); unsigned int segment = scaledHue / 256; // phân đoạn 0 đến 5 xung quanh bánh xe màu unsigned int segmentOffset = scaledHue - (segment * 256); // vị trí trong phân đoạn unsigned int khen = 0; unsigned int pres = (độ sáng * (255 - segmentOffset)) / 256; unsigned int tiếp theo = (độ sáng * segmentOffset) / 256; if (invert) {Bright = 255-độ sáng; khen = 255; trước = 255-trước; tiếp theo = 255-tiếp theo; } switch (segment) {case 0: // red RedValue1 = Bright; GreenValue1 = tiếp theo; BlueValue1 = lời khen; nghỉ; trường hợp 1: // màu vàng RedValue1 = prev; GreenValue1 = độ sáng; BlueValue1 = lời khen; nghỉ; case 2: // green RedValue1 = khen; GreenValue1 = độ sáng; BlueValue1 = tiếp theo; nghỉ; case 3: // cyan RedValue1 = khen; GreenValue1 = trước; BlueValue1 = độ sáng; nghỉ; case 4: // blue RedValue1 = next; GreenValue1 = lời khen; BlueValue1 = độ sáng; nghỉ; case 5: // màu đỏ tươi mặc định: RedValue1 = Bright; GreenValue1 = lời khen; BlueValue1 = trước; nghỉ; }}--- KẾT THÚC ---

Bước 6: Ánh sáng xung quanh - Phía Arduino

Tất nhiên, sẽ rất tuyệt nếu có thể điều khiển ánh sáng tâm trạng từ máy tính của bạn. Ví dụ để tạo một ambilight hoặc một vũ trường được điều khiển bằng âm thanh. Phần này tập trung vào phần ambilight, trong tương lai mình sẽ bổ sung thêm nhiều chức năng hơn, không có mạch bổ sung vì tất cả đều có sẵn trong Arduino. Những gì chúng ta sẽ sử dụng là khả năng giao tiếp nối tiếp và một số phần mềm 'Xử lý 1.0'. Kết nối arduino của bạn với máy tính bằng cáp USB (nếu bạn đang tải các bản phác thảo lên đó thì nó đã có sẵn). Đối với arduino, cũng phải thêm một số mã bổ sung để giao tiếp nối tiếp. Mã sẽ chuyển sang chế độ lắng nghe, chuyển các cảm biến điện dung miễn là nó nhận được các giá trị RGB từ máy tính. Sau đó, nó đặt các giá trị RGB cho các chân PWM. Đây là mã cuối cùng của tôi bây giờ, hãy tự kiểm tra các thay đổi: --- Mã Arduino Ambilight --- # include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // Khai báo cảm biến điện dungCapSense In1 = CapSense (2, 4); // Điện trở 2M giữa chân 4 & 2, chân 2 là chân cảm biến, thêm dây, foilCapSense In2 = CapSense (2, 7); // Điện trở 2M giữa chân 4 & 6, chân 6 là chân cảm biến, thêm dây, foilCapSense In3 = CapSense (2, 8); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, foilCapSense In4 = CapSense (2, 12); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, foilCapSense In5 = CapSense (2, 13); // Điện trở 2M giữa chân 4 & 8, chân 8 là chân cảm biến, thêm dây, giấy bạc // Khai báo chân PWMint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Các biến khácint Color1 = 128; // bắt đầu ở màu đỏ như colourint Brightness1 = 255; // bắt đầu ở độ sáng đầy đủint RedValue1, GreenValue1, BlueValue1; // Các thành phần RGB setup () {Serial.begin (9600); // bắt đầu giao tiếp nối tiếp // đặt giá trị thời gian chờ của cảm biến In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (hết giờ); In3.set_CS_AutocaL_Millis (hết giờ); In4.set_CS_AutocaL_Millis (hết giờ); In5.set_CS_AutocaL_Millis (timeout);} void loop () {long start = millis (); tổng dài1 = In1.capSense (30); tổng dài2 = In2.capSense (30); tổng dài3 = In3.capSense (30); tổng dài4 = In4.capSense (30); tổng dài5 = In5.capSense (30); if (Serial.available ()) {// Nếu có sẵn dữ liệu để đọc, val = Serial.read (); // đọc nó và lưu trữ nó trong val commStart = millis (); if (val == 'S') {// Nếu nhận được start char, while (! Serial.available ()) {} // Chờ cho đến giá trị tiếp theo. RedValue1 = Serial.read (); // Sau khi có sẵn, gán. while (! Serial.available ()) {} // Tương tự như trên. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serial.print (GreenValue1); Serial.println (BlueValue1); } else if ((millis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // tăng màu if (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // giảm màu if (Color1 <0) {// Color1 = 255; }} hueToRGB (Color1, Brightness1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // chức năng chuyển đổi một màu thành các thành phần Đỏ, Lục, lam của nó.void hueToRGB (int hue, int Bright) {unsigned int scaledHue = (hue * 6); unsigned int segment = scaledHue / 256; // phân đoạn 0 đến 5 xung quanh bánh xe màu unsigned int segmentOffset = scaledHue - (segment * 256); // vị trí trong phân đoạn unsigned int khen = 0; unsigned int pres = (độ sáng * (255 - segmentOffset)) / 256; unsigned int tiếp theo = (độ sáng * segmentOffset) / 256; if (invert) {Bright = 255-độ sáng; khen = 255; trước = 255-trước; tiếp theo = 255-tiếp theo; } switch (segment) {case 0: // red RedValue1 = Bright; GreenValue1 = tiếp theo; BlueValue1 = lời khen; nghỉ; trường hợp 1: // màu vàng RedValue1 = prev; GreenValue1 = độ sáng; BlueValue1 = lời khen; nghỉ; case 2: // green RedValue1 = khen; GreenValue1 = độ sáng; BlueValue1 = tiếp theo; nghỉ; case 3: // cyan RedValue1 = khen; GreenValue1 = trước; BlueValue1 = độ sáng; nghỉ; case 4: // blue RedValue1 = next; GreenValue1 = lời khen; BlueValue1 = độ sáng; nghỉ; case 5: // màu đỏ tươi mặc định: RedValue1 = Bright; GreenValue1 = lời khen; BlueValue1 = trước; nghỉ; }}--- KẾT THÚC ---

Bước 7: Ánh sáng xung quanh - Mặt máy tính

Trên mặt của máy tính, một bản phác thảo Xử lý 1.0 được chạy, hãy xem processing.org. Chương trình nhỏ (hơi lộn xộn) này sẽ tính toán màu màn hình trung bình tại mọi thời điểm và gửi nó đến cổng nối tiếp. Nó rất cơ bản và nó có thể sử dụng một số điều chỉnh, nhưng nó hoạt động rất tốt! Tôi sẽ cập nhật nó trong tương lai cho nhiều dải RGB và phần màn hình riêng biệt. Bạn cũng có thể tự mình làm điều đó, ngôn ngữ khá đơn giản. Đây là mã: --- Đang xử lý 1.0 Mã --- 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); //size(screen.width, screen.height); // In danh sách các cổng nối tiếp cho mục đích gỡ lỗi: println (Serial.list ()); // Tôi biết rằng cổng đầu tiên trong danh sách nối tiếp trên mac của tôi // luôn là bộ điều hợp FTDI của tôi, vì vậy tôi mở Serial.list () [0]. // Trên máy Windows, thao tác này thường mở COM1. // Mở bất kỳ cổng nào bạn đang sử dụng. String portName = Serial.list () [0]; myPort = new Serial (this, portName, 9600);} void draw () {// image (screenShot, 0, 0, width, height); screenShot = getScreen (); color kleur = color (0, 0, 0); kleur = color (screenShot); //myPort.write(int(red(kleur))+ ',' + int (green (kleur)) + ',' + int (blue (kleur)) + 13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(blue(kleur))); //myPort.write(13); điền (kleur); direct (30, 20, 55, 55);} color color (PImage img) {int cols = (img.width); int row = (img.height); int chiều = (img.width * img.height); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pixel langs (thứ nguyên) for (int i = 0; i <(mens / 2); i ++) {r = r + ((img.pixels >> 16) & 0xFF); g = g + ((img.pixels >> 8) & 0xFF); b = b + (img.pixels & 0xFF);} int mean_r = r / (kích thước / 2); int mean_g = g / (kích thước / 2); int mean_b = b / (kích thước / 2); màu mean_clr = color (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 () {GraphicsEnosystem ge = GraphicsEnosystem.getLocalGraphicsEnosystem (); GraphicsDevice gs = ge.getScreenDevices (); Chế độ DisplayMode = gs [0].getDisplayMode (); Rectangle bounds = new Rectangle (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage desktop = new BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); thử {desktop = new Robot (gs [0]). createScreenCapture (giới hạn); } catch (AWTException e) {System.err.println ("Không chụp được màn hình."); } return (PImage mới (máy tính để bàn));} --- HẾT ---

Bước 8: Kết quả

Kết quả
Kết quả
Kết quả
Kết quả

Và đây là kết quả, nó thực sự nằm ở phía cuối giường của tôi. Tôi vẫn cần thay miếng vải, nó sẽ khuếch tán ánh sáng nhiều hơn. Sẽ sớm có thêm hình ảnh về điều đó. Tôi hy vọng bạn thích hướng dẫn này và tôi cũng hy vọng nó là cơ sở cho sự sáng tạo của riêng bạn. Vì thời gian hạn chế nên tôi đã viết nó rất nhanh. Bạn có thể cần phải có một số kiến thức cơ bản về arduino / điện tử để hiểu nó nhưng tôi dự định sẽ cập nhật nó trong tương lai nếu nó được đón nhận.

Đề xuất: