Taula de continguts:

Capacitive Touch Mood / Ambilight: 8 passos
Capacitive Touch Mood / Ambilight: 8 passos

Vídeo: Capacitive Touch Mood / Ambilight: 8 passos

Vídeo: Capacitive Touch Mood / Ambilight: 8 passos
Vídeo: Very Easy! Capacitive touch Mood/Ambilight [Full Tutorial] 2024, Desembre
Anonim
Tacte capacitiu Mood / Ambilight
Tacte capacitiu Mood / Ambilight

Aquest instructiu és un resum ràpid de la meva experiència creant una llum d’ànim multifuncional. S'espera un cert coneixement bàsic dels circuits electrònics. El projecte encara no ha acabat, cal afegir algunes funcionalitats i modificacions, però ja és funcional. Si esteu entusiasmats amb aquest instructiu, l’actualitzaré. Al centre del sistema hi ha un Arduino. Processarà l’entrada des de USB o cadascuna de les entrades tàctils capacitives i controlarà la llum RGB. Aquesta instrucció es divideix en tres seccions: - La secció tàctil capacitiva cobreix els botons d'entrada invisibles - La secció moodlight cobreix el control del moodlight - La secció ambilight cobreix l'entrada per port sèrie, processant els valors RGB generats per un programa d'ordinador per controlar els llums. Descàrrega de responsabilitat: l’electrònica pot ser perillosa. Vostè és el responsable dels danys causats. Alguns codis es recopilen en fòrums i és possible que no contingui el nom del seu propietari. Feu-m’ho saber i afegiré el vostre nom.

Pas 1: llista d'elements

Els components següents són necessaris per a aquesta instrucció: - Arduino + cable USB - Taula de pa - Font d'alimentació de l'ordinador - 3x tires RGB, consulteu dealextreme.com.- 3 FET TIP120, com https://uk.farnell.com/stmicroelectronics/tip120 / darlington-transistor-to-220 / dp / 9804005- Un munt de resistències (6 * 10 kiloOhm, 3 * 2 megaOhm): molt de filferro. - Eines Tacte capacitiu - Anells metàl·lics per a plaques de terra- Filferro o placa de coure- Alguna cosa per incorporar-lo (com una prestatgeria:)

Pas 2: tacte capacitiu: conceptes bàsics i circuit

Tacte capacitiu: conceptes bàsics i circuit
Tacte capacitiu: conceptes bàsics i circuit
Tacte capacitiu: conceptes bàsics i circuit
Tacte capacitiu: conceptes bàsics i circuit
Tacte capacitiu: conceptes bàsics i circuit
Tacte capacitiu: conceptes bàsics i circuit

Com que pintava les prestatgeries, vaig tenir l'oportunitat de "actualitzar-les" també. Volia controlar la llum de l’ànim mitjançant el tacte invisible. Al principi, el meu pla era utilitzar una IC dedicada per a això (com l’Atmel QT240). Però després em vaig trobar amb una pàgina que explicava que l’Arduino pot emular un sensor capacitiu mitjançant el programari. El circuit electrònic es pot trobar a la imatge, el sensor és un fil de coure en espiral (només se’n mostra un per simplicitat). La sensibilitat està controlada per les resistències que es troben abans de cada pin. Poden anar des d’1 MegaOhm (tacte absolut) fins a 40 MegaOhm (a 12-24 polzades de distància) en funció de si es necessita un tacte absolut o proper (he acabat utilitzant resistències de 2M Ohm). Experimenteu amb els valors fins que el sensor es comporti de la manera desitjada. És una bona idea instal·lar una superfície conductora (separada per una fina peça no conductora) connectada a la terra dels circuits a la part posterior de cada espiral. D'aquesta manera, els sensors seran més estables i estaran menys influïts pel soroll. Algunes més imatges sobre la instal·lació dels sensors a una prestatgeria. També s’instal·la un endoll per facilitar la connexió amb el circuit més endavant. El farcit s’utilitza per ocultar-ho tot i, després, ja es poden pintar.

Pas 3: codi tàctil capacitiu i proves

Tacte capacitiu: codi i proves
Tacte capacitiu: codi i proves

El següent codi font es pot utilitzar a l'Arduino per a la depuració; comproveu els valors amb el monitor sèrie arduino. Es generen sis valors. La primera és una mesura del rendiment del sistema. El segon al sisè són els valors detectats a cada pin. Els valors haurien d’augmentar quan us acosteu al dit. Si no, comproveu si hi ha connexions i interferències incorrectes. Els valors de la resistència es poden canviar per determinar la sensibilitat. Mitjançant la implementació d’una estructura if-then que s’activa en un determinat límit lògic, es pot fer un canvi. S'utilitzarà al codi arduino final. Es recomana llegir més informació: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch Debugging Code --- # include void setup () {CapSense cs_2_3 = CapSense (2, 4); // 10 M de resistència entre els pins 2 i 4, el pin 4 és el pin del sensor, afegiu filferro CapSense cs_2_4 = CapSense (2, 7); // La resistència de 10 M entre els pins 2 i 7, el pin 7 és el pin del sensor, afegiu filferro CapSense cs_2_5 = CapSense (2, 8); // La resistència de 10 M entre els pins 2 i 8, el pin 8 és el pin del sensor, afegiu filferro CapSense cs_2_6 = CapSense (2, 12); // 10 M de resistència entre els pins 2 i 12, el pin 12 és pin del sensor, afegiu filferro CapSense cs_2_7 = CapSense (2, 13); // La resistència de 10 M entre els pins 2 i 13, el pin 13 és pin del sensor, afegiu cable, configuració de foilvoid () {Serial.begin (9600);} void loop () {long start = millis (); llarg total1 = cs_2_3.capSense (30); llarg total2 = cs_2_4.capSense (30); llarg total3 = cs_2_5.capSense (30); llarg total4 = cs_2_6.capSense (30); llarg total5 = cs_2_7.capSense (30); Serial.print (millis () - start); // comproveu el rendiment en mil·lisegons Serial.print ("\ t"); // caràcter de pestanya per a la depuració de l'espaiat de suspensió Serial.print (total1); // sortida del sensor d'impressió 1 Serial.print ("\ t"); Serial.print (total2); // sortida del sensor d'impressió 2 Serial.print ("\ t"); Serial.print (total3); // sortida del sensor d'impressió 3 Serial.print ("\ t"); Serial.print (total4); // imprimeix la sortida del sensor 4 Serial.print ("\ t"); Serial.println (total5); // sortida del sensor d’impressió 5 retard (10); // retard arbitrari per limitar les dades al port sèrie} --- FIN ---

Pas 4: Mood Light: conceptes bàsics i circuit

Mood Light: conceptes bàsics i circuit
Mood Light: conceptes bàsics i circuit
Mood Light: conceptes bàsics i circuit
Mood Light: conceptes bàsics i circuit
Mood Light: conceptes bàsics i circuit
Mood Light: conceptes bàsics i circuit

Ara és hora de construir la part de sortida del sistema. Els pins PWM de l'arduino s'utilitzaran per controlar cada color. PWM significa modulació de l'amplada de pols, en activar i desactivar un pin molt ràpidament, els leds s'enfosqueixen de 0 a 255. Cada pin serà amplificat per un FET. De moment, el sistema només té un canal per color, és a dir, que es controlaran totes les tires RGB alhora i que es necessitin 3 pins PWM (un per cada color). En el futur vull poder controlar cadascuna de les meves quatre tires RGB. Això vol dir 4 * 3 = 12 pins PWM (i probablement un Arduino Mega). Aquesta (veure imatge) és una representació bàsica del circuit (en farà un de més bonic aviat). També s’inclouen els sensors capacitius (part verda). Bàsicament hi ha tres components que s’han d’explicar: - FET: aquest és l’amplificador del qual parlava. Té una porta, una font i un desguàs. Amplifica els sentits amb un petit corrent a la porta (connectat a l’Arduino) i obre el camí a la banda RGB que funciona a 12 volts. La font ha de ser a + 12V, desguàs a GND (terra). Consulteu el full d’especificacions del vostre FET per obtenir informació exacta. Tots els canals RGB s'han de situar abans del seu propi FET. En aquest sentit, actua com un commutador controlat per Arduino. - Tira RGB Aquesta tira RGB de 12 volts és del tipus ànode comú (+). És a dir, que el cable comú s’ha de connectar a + 12V i el corrent s’enfonsa a través de cadascun dels canals de color separats. La tira ha incorporat resistències, de manera que no us preocupeu! - Resistències: tres resistències de 10 k s’asseguraran que el FET no s’encengui quan se suposa que no s’encén. Altres tres limitaran el corrent màxim que esgotarà el FET. Les tres resistències principals ja són a la tira RGB. He soldat cables USB a les tires RGB per poder connectar-les de manera modular. Els endolls d’un hub antic es col·loquen a la meva taula de treball. Utilitzeu una font d’alimentació d’ordinador antiga per obtenir suc, 12V per alimentar la tira RGB i, finalment, 5V per al circuit si voleu que funcioni sense el cable USB.

Pas 5: Mood Light: codi i control

La llum de l’ànim està controlada pels sensors capacitius. De moment, només he programat els sensors 2 i 3 per canviar el color. Els altres sensors encara no tenen cap funció. Aquí teniu el codi: --- Codi de control d’humor Arduino --- # include const boolean invert = true; const long timeout = 10000; // Declaració del sensor capacitiu CapSense In1 = CapSense (2, 4); // La resistència 2M entre els pins 4 i 2, el pin 2 és el pin del sensor, afegiu filferro CapSense In2 = CapSense (2, 7); // La resistència de 2 M entre els pins 4 i 6, el pin 6 és pin del sensor, afegiu filferro CapSense In3 = CapSense (2, 8); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és el pin del sensor, afegiu filferro CapSense In4 = CapSense (2, 12); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és pin del sensor, afegiu filferro CapSense In5 = CapSense (2, 13); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és pin del sensor, afegiu filferro, làmina // PWM Pin declarationsint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Altres variablesint Color1 = 128; // comença per un color vermell com a color Brillantor1 = 255; // comença a la màxima brillantor: RedValue1, GreenValue1, BlueValue1; // El component RGBvoid setup () {// estableix els valors d’espera del sensor In1.set_CS_AutocaL_Millis (temps d’espera); In2.set_CS_AutocaL_Millis (temps d'espera); In3.set_CS_AutocaL_Millis (temps d'espera); In4.set_CS_AutocaL_Millis (temps d'espera); In5.set_CS_AutocaL_Millis (temps d'espera);} void loop () {long start = millis (); llarg total1 = In1.capSense (30); llarg llarg2 = In2.capSense (30); llarg llarg3 = In3.capSense (30); llarg llarg4 = In4.capSense (30); llarg total5 = In5.capSense (30); if (total2> 150) {Color1 ++; // augmentar el color si (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // disminueix el color si (Color1 <0) {// Color1 = 255; } // converteix el to a rgb hueToRGB (Color1, Brightness1); // escriure colors als pins PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funció per convertir un color als seus components vermell, verd i blau. segment sense signe int = scaledHue / 256; // segmentar del 0 al 5 al voltant de la roda de colors sense signar int segmentOffset = scaledHue - (segment * 256); // posició dins del segment unsigned int compliment = 0; unsigned int prev = (brillantor * (255 - segmentOffset)) / 256; unsigned int next = (brillantor * segmentOffset) / 256; if (invertir) {brillantor = 255-brillantor; compliment = 255; prev = 255-prev; següent = 255-següent; } commutador (segment) {cas 0: // vermell RedValue1 = brillantor; GreenValue1 = següent; BlueValue1 = compliment; trencar; cas 1: // grocValor vermell1 = prev; GreenValue1 = brillantor; BlueValue1 = compliment; trencar; cas 2: // GreenValor1 = compliment; GreenValue1 = brillantor; BlueValue1 = següent; trencar; cas 3: // cian RedValue1 = compliment; GreenValue1 = prev; BlueValue1 = brillantor; trencar; cas 4: // BlauValor vermell1 = següent; GreenValue1 = compliment; BlueValue1 = brillantor; trencar; cas 5: // predeterminat magenta: RedValue1 = brillantor; GreenValue1 = compliment; BlueValue1 = prev; trencar; }}--- FINAL ---

Pas 6: Ambi Light - Arduino Side

Per descomptat, seria totalment fantàstic controlar la llum de l’ànim des de l’ordinador. Per exemple, per crear una ambilight o una discoteca controlada per so. Aquesta secció se centra en la part ambilight, en el futur afegiré més funcionalitats. Bé, no hi ha cap circuit addicional perquè està disponible a l’Arduino. El que farem servir és les funcions de comunicació en sèrie i alguns programes de "Processament 1.0". Connecteu l’arduino a l’ordinador mitjançant un cable USB (si hi pengeu esbossos, ja ho és). Per a l'arduino, haureu d'afegir un codi addicional per a la comunicació en sèrie. El codi canviarà al mode d'escolta, girant els sensors capacitius sempre que rebi valors RGB de l'ordinador. A continuació, estableix els valors RGB als pins PWM. Aquest és el meu codi final per ara, comproveu els canvis vosaltres mateixos: --- Arduino Ambilight Code --- # include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // Declaració del sensor capacitiu CapSense In1 = CapSense (2, 4); // La resistència 2M entre els pins 4 i 2, el pin 2 és el pin del sensor, afegiu filferro CapSense In2 = CapSense (2, 7); // La resistència de 2 M entre els pins 4 i 6, el pin 6 és pin del sensor, afegiu filferro CapSense In3 = CapSense (2, 8); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és el pin del sensor, afegiu filferro CapSense In4 = CapSense (2, 12); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és pin del sensor, afegiu filferro CapSense In5 = CapSense (2, 13); // La resistència de 2 M entre els pins 4 i 8, el pin 8 és pin del sensor, afegiu filferro, làmina // PWM Pin declarationsint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Altres variablesint Color1 = 128; // comença per un color vermell com a color Brillantor1 = 255; // comença a la màxima brillantor: RedValue1, GreenValue1, BlueValue1; // El component RGBvoid setup () {Serial.begin (9600); // iniciar la comunicació en sèrie // establir els valors d’espera del sensor In1.set_CS_AutocaL_Millis (temps d’espera); In2.set_CS_AutocaL_Millis (temps d'espera); In3.set_CS_AutocaL_Millis (temps d'espera); In4.set_CS_AutocaL_Millis (temps d'espera); In5.set_CS_AutocaL_Millis (temps d'espera);} void loop () {long start = millis (); llarg total1 = In1.capSense (30); llarg llarg2 = In2.capSense (30); llarg llarg3 = In3.capSense (30); total llarg4 = In4.capSense (30); llarg total5 = In5.capSense (30); if (Serial.available ()) {// Si hi ha dades disponibles per llegir, val = Serial.read (); // llegiu-lo i deseu-lo a val commStart = millis (); if (val == 'S') {// Si s'inicia el caràcter inicial, mentre que (! Serial.available ()) {} // Espereu fins al següent valor. RedValue1 = Serial.read (); // Un cop disponible, assigneu. while (! Serial.available ()) {} // Igual que l'anterior. 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 ++; // augmentar el color si (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // disminueix el color si (Color1 <0) {// Color1 = 255; }} hueToRGB (Color1, Brillantor1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funció per convertir un color als seus components vermell, verd i blau. segment sense signe int = scaledHue / 256; // segmentar del 0 al 5 al voltant de la roda de colors sense signar int segmentOffset = scaledHue - (segment * 256); // posició dins del segment unsigned int compliment = 0; unsigned int prev = (brillantor * (255 - segmentOffset)) / 256; unsigned int next = (brillantor * segmentOffset) / 256; if (invertir) {brillantor = 255-brillantor; compliment = 255; prev = 255-prev; següent = 255-següent; } commutador (segment) {cas 0: // vermell RedValue1 = brillantor; GreenValue1 = següent; BlueValue1 = compliment; trencar; cas 1: // grocValor vermell1 = prev; GreenValue1 = brillantor; BlueValue1 = compliment; trencar; cas 2: // GreenValor1 = compliment; GreenValue1 = brillantor; BlueValue1 = següent; trencar; cas 3: // cian RedValue1 = compliment; GreenValue1 = prev; BlueValue1 = brillantor; trencar; cas 4: // BlauValor vermell1 = següent; GreenValue1 = compliment; BlueValue1 = brillantor; trencar; cas 5: // predeterminat magenta: RedValue1 = brillantor; GreenValue1 = compliment; BlueValue1 = prev; trencar; }}--- FINAL ---

Pas 7: Ambi Light: costat de l'ordinador

Al lateral de l'ordinador s'executa un esbós de Processament 1.0, consulteu processing.org. Aquest petit programa (una mica desordenat) calcula el color de pantalla mitjà en cada instant i l’envia al port sèrie. És molt bàsic fins ara i podria utilitzar alguns ajustaments, però funciona molt bé. L’actualitzaré en el futur per a diverses tires i seccions de pantalla RGB separades. També podeu fer-ho vosaltres mateixos, l’idioma és bastant senzill. Aquí teniu el codi: --- Processant 1.0 Codi --- import processing.serial. *; Import java.awt. AWTException; import java.awt. Robot; import java.awt. Rectangle; import java.awt.image. BufferedImage; PImage screenShot; MyPort serial; main public void estàtic (String args ) {PApplet.main (new String {"--present", "shooter"});} void setup () {size (100, 100); //size(screen.width, screen.height); // Imprimiu una llista dels ports sèrie, a efectes de depuració: println (Serial.list ()); // Sé que el primer port de la llista de sèries del meu mac // sempre és el meu adaptador FTDI, així que obro Serial.list () [0]. // A les màquines Windows, generalment obre COM1. // Obriu el port que feu servir. 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 (captura de pantalla); //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); farcit (kleur); rect (30, 20, 55, 55);} color del color (PImage img) {int cols = (img.width); int files = (img.height); dimensió int = (img.width * img.height); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pixel langs (dimensió) per a (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); color 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 () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices (); Mode DisplayMode = gs [0].getDisplayMode (); Límits de rectangle = Rectangle nou (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage desktop = new BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); proveu {desktop = new Robot (gs [0]). createScreenCapture (límits); } catch (AWTException e) {System.err.println ("Error de captura de pantalla"); } return (nova imatge PImage (escriptori));} --- END ---

Pas 8: resultat

Resultat
Resultat
Resultat
Resultat

I aquest és el resultat, és a la part inferior del meu llit. Encara necessito substituir el drap, que difondrà més la llum. Aviat hi ha més imatges. Espero que us agradi aquest instructiu i també espero que sigui una base per a la vostra pròpia creativitat. A causa de les limitacions de temps, el vaig escriure molt ràpidament. És possible que hàgiu de tenir coneixements bàsics d’arduino / electrònica per entendre-ho, però penso actualitzar-lo en el futur si és ben rebut.

Recomanat: