Sadržaj:

Kapacitivno raspoloženje na dodir/Ambilight: 8 koraka
Kapacitivno raspoloženje na dodir/Ambilight: 8 koraka

Video: Kapacitivno raspoloženje na dodir/Ambilight: 8 koraka

Video: Kapacitivno raspoloženje na dodir/Ambilight: 8 koraka
Video: Атеросклероз — 3 лучших метода избавления от недуга! 2024, Srpanj
Anonim
Kapacitivno raspoloženje na dodir/Ambilight
Kapacitivno raspoloženje na dodir/Ambilight

Ovo uputstvo je brzo zapisivanje mog iskustva stvaranja multifunkcionalnog svjetla raspoloženja. Očekuju se neka osnovna znanja o elektroničkim sklopovima. Projekt još nije dovršen, potrebno je izvršiti dodatnu funkcionalnost i dotjerivanje, ali on je već funkcionalan. Ako ste oduševljeni ovim uputstvom, ažurirat ću ga. U središtu sustava je Arduino. On će obraditi ulaz s USB -a ili svakog od kapacitivnih dodirnih ulaza i kontrolirati RGB svjetlo. Ovo uputstvo podijeljeno je u tri odjeljka:- Kapacitivni dio osjetljiv na dodir pokriva nevidljive gumbe za unos- Odjeljak moodlight pokriva upravljanje svjetlom raspoloženja- Odjeljak Ambilight pokriva unos putem serijskog porta, obrađujući RGB vrijednosti generirane od računalnog programa za upravljanje svjetlima. Odricanje odgovornosti: Elektronika može biti opasna, sami ste odgovorni za bilo kakvu učinjenu štetu. Neki kôd prikupljen je s foruma i možda ne sadrži ime svog vlasnika. Obavijestite me i dodat ću vaše ime.

Korak 1: Popis stavki

Za ovu instrukciju potrebne su sljedeće komponente:- Arduino+USB kabel- Oglasna ploča- Napajanje računala- 3x RGB trake, provjerite dealextreme.com.- 3x TIP120 FET-ova, poput https://uk.farnell.com/stmicroelectronics/tip120 /darlington-tranzistor-to-220/dp/9804005- Hrpa otpornika (6 * 10 kiloOhm, 3 * 2 megaOhm)-Puno žice. - Alati Kapacitivni dodir- Metalni prstenovi za temeljne ploče- Bakrena žica ili ploča- Nešto u što se može ugraditi (poput police za knjige:)

Korak 2: Kapacitivni dodir - osnove i sklop

Kapacitivni dodir - osnove i sklop
Kapacitivni dodir - osnove i sklop
Kapacitivni dodir - osnove i sklop
Kapacitivni dodir - osnove i sklop
Kapacitivni dodir - osnove i sklop
Kapacitivni dodir - osnove i sklop

Budući da sam slikao police za knjige, imao sam priliku i njih 'nadograditi'. Htio sam kontrolirati raspoloženje pomoću nevidljivog dodira. U početku mi je plan bio koristiti namjenski IC za to (poput Atmela QT240). Ali onda sam naletio na stranicu koja objašnjava da Arduino može softverski oponašati kapacitivni senzor. Elektronički krug se može naći na slici, senzor je spiralna bakrena žica (samo je jedna prikazana radi jednostavnosti). Osjetljivost se kontrolira otpornicima koji se nalaze prije svakog pina. Mogu biti u rasponu od 1 MegaOhm (apsolutni dodir) do 40 MegaOhm (udaljeni 12-24 inča) ovisno o tome je li potreban apsolutni ili bliski dodir (na kraju sam koristio 2M Ohm otpornike). Eksperimentirajte s vrijednostima dok se senzor ne ponaša kako želite. Dobra je ideja ugraditi neku vodljivu površinu (odvojenu tankim neprovodnim dijelom) spojenu na masu strujnih krugova na stražnjoj strani svake spirale. Na taj će način senzori biti stabilniji i manje će utjecati na buku. Još nekoliko slika o ugradnji senzora na policu za knjige. Ugrađen je i utikač za kasnije povezivanje s strujnim krugom. Punilo se koristi za skrivanje svega, a nakon toga su spremne za bojanje.

Korak 3: Kapacitivni dodir - Kôd i testiranje

Kapacitivni dodir - Kôd i testiranje
Kapacitivni dodir - Kôd i testiranje

Sljedeći izvorni kod može se koristiti na Arduinu za ispravljanje pogrešaka, provjerite vrijednosti pomoću arduino serijskog monitora. Generira se šest vrijednosti. Prvi je mjera performansi sustava. Od druge do šeste su osjetljive vrijednosti na svakom pinu. Vrijednosti bi se trebale povećati pri približavanju prstu. U protivnom provjerite ima li loših veza i smetnji. Vrijednosti otpornika mogu se mijenjati radi određivanja osjetljivosti. Implementacijom if-then strukture koja se aktivira na određenom logičkom pragu, može se izvršiti prebacivanje. Ovo će se koristiti u konačnom arduino kodu. Više informacija, preporučeno za čitanje: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch kod za ispravljanje pogrešaka ---#include void setup () {CapSense cs_2_3 = CapSense (2, 4); // 10M otpornik između pinova 2 i 4, pin 4 je pin osjetnika, dodajte žicu, folijuCapSense cs_2_4 = CapSense (2, 7); // 10M otpornik između pinova 2 i 7, pin 7 je pin osjetnika, dodajte žicu, folijuCapSense cs_2_5 = CapSense (2, 8); // 10M otpornik između pinova 2 i 8, pin 8 je pin osjetnika, dodajte žicu, folijuCapSense cs_2_6 = CapSense (2, 12); // 10M otpornik između pinova 2 i 12, pin 12 je pin osjetnika, dodajte žicu, folijuCapSense cs_2_7 = CapSense (2, 13); // 10M otpornik između pinova 2 i 13, pin 13 je pin osjetnika, dodajte žicu, foilvoid setup () {Serial.begin (9600);} void loop () {long start = millis (); ukupno ukupno1 = cs_2_3.capSense (30); ukupno ukupno2 = cs_2_4.capSense (30); ukupno ukupno3 = cs_2_5.capSense (30); ukupno ukupno4 = cs_2_6.capSense (30); ukupno ukupno5 = cs_2_7.capSense (30); Serial.print (millis () - početak); // provjeravanje performansi u milisekundama Serial.print ("\ t"); // znak kartice za ispravljanje pogrešaka unutar razmaka unutar Serial.print (ukupno1); // ispis senzorskog izlaza 1 Serial.print ("\ t"); Serijski.ispis (ukupno2); // ispis senzorskog izlaza 2 Serial.print ("\ t"); Serijski.ispis (ukupno3); // ispis senzorskog izlaza 3 Serial.print ("\ t"); Serijski.ispis (ukupno4); // ispis senzorskog izlaza 4 Serial.print ("\ t"); Serial.println (ukupno5); // ispis senzora ispisa 5 kašnjenje (10); // proizvoljno kašnjenje za ograničavanje podataka na serijski port} --- END ---

Korak 4: Svjetlo raspoloženja - osnove i sklop

Raspoloženje - osnove i sklop
Raspoloženje - osnove i sklop
Raspoloženje - osnove i sklop
Raspoloženje - osnove i sklop
Raspoloženje - osnove i sklop
Raspoloženje - osnove i sklop

Sada je vrijeme za izgradnju izlaznog dijela sustava. Arduino PWM pinovi će se koristiti za kontrolu svake boje. PWM znači Pulse Width Modulation, uključivanjem i isključivanjem pina vrlo brzo LED diode će biti prigušene od 0 do 255. Svaki pin bit će pojačan FET -om. Za sada sustav ima samo jedan kanal po boji, što znači da će se sve RGB trake kontrolirati odjednom i potrebna su 3 PWM pina (po jedan za svaku boju). U budućnosti želim moći kontrolirati svaku od svoje četiri RGB trake. To znači 4*3 = 12 PWM pinova (i vjerojatno Arduino Mega). U redu, vrijeme je za neke sheme! Ovo (vidi sliku) je osnovni prikaz kruga (uskoro će biti ljepši). Uključeni su i kapacitivni senzori (zeleni dio). U osnovi postoje tri komponente koje se moraju objasniti:- FETOvo je pojačalo o kojem sam govorio. Ima Vrata, Izvor i Odvod. Pojačava osjetila male struje na vratima (spojen na Arduino) i otvara put za RGB traku koja se napaja na 12 volti. Izvor bi trebao biti na +12V, odvod na GND (uzemljenje). Za točan ispis provjerite list sa specifikacijama vašeg FET -a. Svaki RGB kanal treba postaviti ispred vlastitog FET -a. U tom smislu, djeluje kao Arduino upravljački prekidač.- RGB trakaOva 12 voltna RGB traka je tipa zajedničke anode (+). To znači da bi zajednička žica trebala biti spojena na +12V, a struja provedena kroz svaki od kanala u boji. Traka ima ugrađene otpornike, pa nema brige oko toga!- Otpornici Tri 10k otpornika pobrinut će se da se FET ne uključi kad se ne trebaju uključiti. Tri druge će ograničiti maksimalnu struju koju će FET iscrpiti. Tri gornja otpornika već su u RGB traci. Zalemio sam USB kabele na RGB trake tako da ih mogu lako modularno spojiti. Utikači sa starog čvorišta postavljeni su na moju ploču. Koristite staro napajanje računala za sok, 12V za napajanje RGB trake i na kraju 5V za krug ako želite da radi bez USB kabela.

Korak 5: Svjetlo raspoloženja - Kôd i kontrola

Svjetlost raspoloženja kontrolira kapacitivni senzor. Za sada sam programirao samo senzore 2 i 3 za promjenu boje. Ostali senzori još nemaju funkciju. Evo koda: --- Arduino Mood Control Code ---#include const boolean invert = true; const long timeout = 10000; // deklaracija kapacitivnog senzoraCapSense In1 = CapSense (2, 4); // 2M otpornik između pinova 4 i 2, pin 2 je pin osjetnika, dodajte žicu, folijuCapSense In2 = CapSense (2, 7); // 2M otpornik između pinova 4 i 6, pin 6 je pin osjetnika, dodajte žicu, folijuCapSense In3 = CapSense (2, 8); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodajte žicu, folijuCapSense In4 = CapSense (2, 12); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodajte žicu, folijuCapSense In5 = CapSense (2, 13); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodavanje žice, folije // PWM deklaracija pinovaint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Ostale varijableint Color1 = 128; // počinje sa crvenom bojom Svjetlina1 = 255; // počinje pri punoj svjetliniint RedValue1, GreenValue1, BlueValue1; // RGB componentsvoid setup () {// postavlja vrijednosti vremenskog ograničenja senzora In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (istek vremena); In3.set_CS_AutocaL_Millis (istek vremena); In4.set_CS_AutocaL_Millis (istek vremena); In5.set_CS_AutocaL_Millis (timeout);} void petlja () {long start = millis (); ukupno ukupno1 = In1.capSense (30); ukupno ukupno2 = In2.capSense (30); ukupno ukupno3 = In3.capSense (30); ukupno ukupno4 = In4.capSense (30); ukupno ukupno5 = In5.capSense (30); if (ukupno2> 150) {Boja1 ++; // povećavanje boje if (Color1> 255) {// Color1 = 0; }} else if (ukupno3> 200) {Color1--; // smanjujemo boju if (Color1 <0) {// Color1 = 255; } // pretvoriti nijansu u rgb hueToRGB (boja1, svjetlina1); // zapisujemo boje na PWM pinove analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkcija za pretvaranje boje u njenu crvenu, zelenu i plavu komponentu.void hueToRGB (int nijansa, int svjetlina) {unsigned int scaledHue = (hue * 6); nepotpisani int segment = scaledHue / 256; // segment 0 do 5 oko kotača u boji unsigned int segmentOffset = scaledHue - (segment * 256); // pozicija unutar segmenta unsigned int compliment = 0; bez potpisa int prev = (svjetlina * (255 - segmentOffset)) / 256; unsigned int next = (svjetlina * segmentOffset) / 256; if (obrnuti) {svjetlina = 255-svjetlina; kompliment = 255; prev = 255-prev; next = 255-next; } prekidač (segment) {slučaj 0: // crveno RedValue1 = svjetlina; GreenValue1 = sljedeći; BlueValue1 = kompliment; pauza; slučaj 1: // žuta RedValue1 = prev; GreenValue1 = svjetlina; BlueValue1 = kompliment; pauza; slučaj 2: // zelena RedValue1 = kompliment; GreenValue1 = svjetlina; BlueValue1 = sljedeći; pauza; slučaj 3: // cijan RedValue1 = kompliment; GreenValue1 = prev; BlueValue1 = svjetlina; pauza; slučaj 4: // plava RedValue1 = next; GreenValue1 = kompliment; BlueValue1 = svjetlina; pauza; slučaj 5: // magenta zadano: RedValue1 = svjetlina; GreenValue1 = kompliment; BlueValue1 = prev; pauza; }}--- KRAJ ---

Korak 6: Ambi svjetlo - Arduino strana

Naravno, bilo bi potpuno cool moći kontrolirati svjetlo raspoloženja s vašeg računala. Na primjer, za stvaranje ambilighta ili diska s zvukom. Ovaj se odjeljak fokusira na dio ambilight, u budućnosti ću dodati još funkcionalnosti. Pa, nema dodatnih sklopova jer je sve dostupno u Arduinu. Ono što ćemo koristiti su mogućnosti serijske komunikacije i neki softver 'Processing 1.0'. Priključite svoj arduino na računalo USB kabelom (ako ste na njega prenosili skice, to već jest). Za arduino, moramo dodati neki dodatni kôd za serijsku komunikaciju. Kôd će se prebaciti u način osluškivanja, okrećući kapacitivne senzore sve dok prima RGB vrijednosti od računala. Zatim postavlja RGB vrijednosti na PWM pinove. Ovo je moj konačni kod za sada, provjerite sami promjene: --- Arduino Ambilight kôd ---#uključuje const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // deklaracija kapacitivnog senzoraCapSense In1 = CapSense (2, 4); // 2M otpornik između pinova 4 i 2, pin 2 je pin osjetnika, dodajte žicu, folijuCapSense In2 = CapSense (2, 7); // 2M otpornik između pinova 4 i 6, pin 6 je pin osjetnika, dodajte žicu, folijuCapSense In3 = CapSense (2, 8); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodajte žicu, folijuCapSense In4 = CapSense (2, 12); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodajte žicu, folijuCapSense In5 = CapSense (2, 13); // 2M otpornik između pinova 4 i 8, pin 8 je pin osjetnika, dodavanje žice, folije // PWM deklaracija pinovaint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Ostale varijableint Color1 = 128; // počinje sa crvenom bojom Svjetlina1 = 255; // počinje pri punoj svjetliniint RedValue1, GreenValue1, BlueValue1; // RGB componentsvoid setup () {Serial.begin (9600); // pokretanje serijske komunikacije // postavljanje vrijednosti vremenskog ograničenja senzora In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (istek vremena); In3.set_CS_AutocaL_Millis (istek vremena); In4.set_CS_AutocaL_Millis (istek vremena); In5.set_CS_AutocaL_Millis (timeout);} void petlja () {long start = millis (); ukupno ukupno1 = In1.capSense (30); ukupno ukupno2 = In2.capSense (30); ukupno ukupno3 = In3.capSense (30); ukupno ukupno4 = In4.capSense (30); ukupno ukupno5 = In5.capSense (30); if (Serial.available ()) {// Ako su podaci dostupni za čitanje, val = Serial.read (); // pročitajte ga i spremite u val commStart = millis (); if (val == 'S') {// Ako je primljen početni znak, while (! Serial.available ()) {} // Pričekajte do sljedeće vrijednosti. RedValue1 = Serial.read (); // Kad bude dostupno, dodijeli. while (! Serial.available ()) {} // Isto kao gore. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serijski.ispis (GreenValue1); Serial.println (BlueValue1); } else if ((millis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // povećavanje boje if (Color1> 255) {// Color1 = 0; }} else if (ukupno3> 200) {Color1--; // smanjujemo boju if (Color1 <0) {// Color1 = 255; }} hueToRGB (Boja1, Svjetlina1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkcija za pretvaranje boje u njenu crvenu, zelenu i plavu komponentu.void hueToRGB (int nijansa, int svjetlina) {unsigned int scaledHue = (hue * 6); nepotpisani int segment = scaledHue / 256; // segment 0 do 5 oko kotača u boji unsigned int segmentOffset = scaledHue - (segment * 256); // pozicija unutar segmenta unsigned int compliment = 0; bez potpisa int prev = (svjetlina * (255 - segmentOffset)) / 256; unsigned int next = (svjetlina * segmentOffset) / 256; if (obrnuti) {svjetlina = 255-svjetlina; kompliment = 255; prev = 255-prev; next = 255-next; } prekidač (segment) {slučaj 0: // crveno RedValue1 = svjetlina; GreenValue1 = sljedeći; BlueValue1 = kompliment; pauza; slučaj 1: // žuta RedValue1 = prev; GreenValue1 = svjetlina; BlueValue1 = kompliment; pauza; slučaj 2: // zelena RedValue1 = kompliment; GreenValue1 = svjetlina; BlueValue1 = sljedeći; pauza; slučaj 3: // cijan RedValue1 = kompliment; GreenValue1 = prev; BlueValue1 = svjetlina; pauza; slučaj 4: // plava RedValue1 = next; GreenValue1 = kompliment; BlueValue1 = svjetlina; pauza; slučaj 5: // magenta zadano: RedValue1 = svjetlina; GreenValue1 = kompliment; BlueValue1 = prev; pauza; }}--- KRAJ ---

Korak 7: Ambi Light - računalo

Na bočnoj strani računala pokreće se skica Processing 1.0, pogledajte processing.org. Ovaj mali (pomalo neuredan) program izračunava prosječnu boju ekrana u svakom trenutku i šalje to na serijski port. Zasad je vrlo osnovni i moglo bi mu trebati malo dotjerivanja, ali radi jako dobro! U budućnosti ću ga ažurirati za više zasebnih RGB traka i odjeljaka zaslona. To možete učiniti i sami, jezik je prilično jednostavan. Evo koda: --- Obrada 1.0 koda --- uvoz processing.serial.*; Uvoz java.awt. AWTException; uvoz java.awt. Robot; uvoz java.awt. Rectangle; uvoz 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); // Ispis popisa serijskih portova, u svrhu ispravljanja pogrešaka: println (Serial.list ()); // Znam da je prvi port u serijskom popisu na mom macu // uvijek moj FTDI adapter, pa otvaram Serial.list () [0]. // Na Windows strojevima ovo općenito otvara COM1. // Otvorite bilo koji port koji koristite. Niz portName = Serial.list () [0]; myPort = new Serial (this, portName, 9600);} void draw () {// image (screenshot, 0, 0, width, height); screenShot = getScreen (); boja kleur = boja (0, 0, 0); kleur = boja (snimka zaslona); //myPort.write(int(red(kleur))+ ','+int (zelena (kleur))+','+int (plava (kleur))+13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(blue(kleur))); //myPort.write(13); ispuniti (kleur); rect (30, 20, 55, 55);} boja u boji (PImage img) {int cols = (img.width); int redovi = (img.height); int dimenzija = (img.width*img.height); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pikseli langs (dimenzija) za (int i = 0; i <(dimenzija/2); i ++) {r = r+((img.pikseli >> 16) & 0xFF); g = g + ((img.pikseli >> 8) & 0xFF); b = b + (img.pikseli & 0xFF);} int mean_r = r/(dimenzija/2); int mean_g = g/(dimenzija/2); int mean_b = b/(dimenzija/2); boja srednji_clr = boja (srednji_r, srednji_g, srednji_b); myPort.write ('S'); myPort.write (srednji_r); myPort.write (srednji_g); myPort.write (mean_b); return (mean_clr);} PImage getScreen () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices (); Način DisplayMode = gs [0].getDisplayMode (); Granice pravokutnika = new Rectangle (0, 0, mode.getWidth (), mode.getHeight ()); Radna površina BufferedImage = nova BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); isprobajte {desktop = new Robot (gs [0]). createScreenCapture (granice); } catch (AWTException e) {System.err.println ("Snimanje zaslona nije uspjelo."); } return (nova PImage (desktop));} --- END ---

Korak 8: Rezultat

Proizlaziti
Proizlaziti
Proizlaziti
Proizlaziti

I ovo je rezultat, zapravo je na donjoj strani mog kreveta. Još moram zamijeniti tkaninu, ona će više raspršiti svjetlo. Više slika o tome uskoro. Nadam se da vam se sviđa ovo uputstvo, a također se nadam da je to baza za vašu vlastitu kreativnost. Zbog vremenskih ograničenja napisao sam to vrlo brzo. Možda ćete morati imati osnovno znanje o arduinu/elektronici da biste to razumjeli, ali planiram ga ažurirati u budućnosti ako bude dobro prihvaćen.

Preporučeni: