Sisukord:

Mahtuvuslik puutetundlik meeleolu/Ambilight: 8 sammu
Mahtuvuslik puutetundlik meeleolu/Ambilight: 8 sammu

Video: Mahtuvuslik puutetundlik meeleolu/Ambilight: 8 sammu

Video: Mahtuvuslik puutetundlik meeleolu/Ambilight: 8 sammu
Video: Peugeot Rifter GT (Short L1) 7 мест (демонстрация, интерьер, экстерьер, обход) 2024, November
Anonim
Mahtuvuslik puutetundlik/Ambilight
Mahtuvuslik puutetundlik/Ambilight

See juhend on minu kogemuste kiire üleskirjutamine multifunktsionaalse meeleolu valgustuse loomisel. Oodatakse mõningaid põhiteadmisi elektrooniliste vooluahelate kohta. Projekt ei ole veel lõppenud, mõned funktsioonid tuleb lisada ja muuta, kuid see on juba toimiv. Kui te olete sellest juhendatavast vaimustuses, värskendan seda. Süsteemi keskmes on Arduino. See töötleb USB -sisendit või kõiki mahtuvuslikke puutetundlikke sisendeid ja juhib RGB -valgust. See juhend on jagatud kolmeks osaks:- mahtuvuslik puutetundlik osa katab nähtamatud sisendnupud; Vastutusest loobumine: elektroonika võib olla ohtlik, teie ise vastutate tehtud kahjude eest. Osa koodi kogutakse foorumitest ja see ei pruugi sisaldada selle omaniku nime. Palun andke mulle teada ja lisan teie nime.

Samm: üksuste loend

Selle juhendi jaoks on vaja järgmisi komponente:- Arduino+USB-kaabel- leivalaud- arvuti toiteallikas- 3x RGB-ribad, vaadake dealextreme.com.- 3x TIP120 FET-sid, näiteks https://uk.farnell.com/stmicroelectronics/tip120 /darlington-transistor-to-220/dp/9804005- Hunnik takisteid (6 * 10 kiloOhm, 3 * 2 megaOhm)-palju traati. - Tööriistad Mahtuvuslik puudutus- Metallrõngad maapindade jaoks- Vasktraat või plaat- Midagi, kuhu see sisse ehitada (näiteks raamaturiiul:)

2. etapp: mahtuvuslik puudutus - põhitõed ja vooluring

Mahtuvuslik puudutus - põhitõed ja vooluring
Mahtuvuslik puudutus - põhitõed ja vooluring
Mahtuvuslik puudutus - põhitõed ja vooluring
Mahtuvuslik puudutus - põhitõed ja vooluring
Mahtuvuslik puudutus - põhitõed ja vooluring
Mahtuvuslik puudutus - põhitõed ja vooluring

Kuna ma oma raamaturiiulit maalisin, oli mul võimalus ka neid „täiendada“. Tahtsin meeleoluvalgust nähtamatu puudutuse abil juhtida. Alguses oli minu plaan kasutada selleks spetsiaalset IC -d (nagu Atmel QT240). Kuid siis sattusin lehele, mis selgitas, et Arduino suudab tarkvara abil mahtuvuslikku andurit jäljendada. Elektrooniline vooluahel on pildil, andur on spiraalitud vasktraat (lihtsuse huvides on näidatud ainult üks). Tundlikkust kontrollivad takistid, mis on leitud enne iga tihvti. Need võivad ulatuda 1 megaohmist (absoluutne puudutus) kuni 40 megaoomini (12–24 tolli kaugusel) sõltuvalt sellest, kas on vaja absoluutset või lähedast puudutust (kasutasin lõpuks 2M oomi takistit). Katsetage väärtustega, kuni andur käitub soovitud viisil. Hea mõte on paigaldada mõni juhtiv pind (eraldatud õhukese mittejuhtiva detailiga), mis on ühendatud ahelate maandusega iga spiraali tagaküljele. Nii on andurid stabiilsemad ja neid ei mõjuta vähem müra. Veel pilte andurite raamaturiiulisse paigaldamise kohta. Pistik on paigaldatud ka vooluringiga hõlpsaks ühendamiseks. Täiteainet kasutatakse kõige varjamiseks ja pärast seda on need värvimiseks valmis.

3. samm: mahtuvuslik puudutus - kood ja testimine

Mahtuvuslik puudutus - kood ja testimine
Mahtuvuslik puudutus - kood ja testimine

Arduino silumiseks saab kasutada järgmist lähtekoodi, kontrollige väärtusi arduino jadamonitoriga. Tekitatakse kuus väärtust. Esimene on süsteemi toimivuse näitaja. Teine kuni kuues on iga tihvti tajutavad väärtused. Sõrmele lähenedes peaksid väärtused tõusma. Kui ei, siis kontrollige, kas ühendused ja häired on halvad. Tundlikkuse määramiseks saab takisti väärtusi muuta. Rakendades struktuuri if-then, mis aktiveeritakse teatud loogilisel künnisel, saab selle ümber lülitada. Seda kasutatakse lõplikus arduino-koodis. Lisateavet soovitatakse lugeda: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch silumiskood ---#include void setup () {CapSense cs_2_3 = CapSense (2, 4); // 10M takisti tihvtide 2 ja 4 vahel, tihvt 4 on anduri tihvt, lisa traat, fooliumCapSense cs_2_4 = CapSense (2, 7); // 10M takisti tihvtide 2 ja 7 vahel, tihvt 7 on anduri tihvt, lisa traat, fooliumCapSense cs_2_5 = CapSense (2, 8); // 10M takisti tihvtide 2 ja 8 vahel, tihvt 8 on anduri tihvt, lisa traat, fooliumCapSense cs_2_6 = CapSense (2, 12); // 10M takisti tihvtide 2 ja 12 vahel, tihvt 12 on anduri tihvt, lisa traat, fooliumCapSense cs_2_7 = CapSense (2, 13); // 10M takisti tihvtide 2 ja 13 vahel, tihvt 13 on anduri tihvt, lisa traat, foilvoid setup () {Serial.begin (9600);} void loop () {long start = millis (); pikk kokku1 = cs_2_3.capSense (30); pikk kokku2 = cs_2_4.capSense (30); pikk kokku3 = cs_2_5.capSense (30); pikk kokku4 = cs_2_6.capSense (30); pikk kokku5 = cs_2_7.capSense (30); Serial.print (millis () - algus); // toimivuse kontrollimine millisekundites Serial.print ("\ t"); // vahekaardi märk silumise tuulevahede jaoks Serial.print (kokku1); // prindianduri väljund 1 Serial.print ("\ t"); Seeria.print (kokku2); // prindianduri väljund 2 Serial.print ("\ t"); Seeria.print (kokku3); // prindianduri väljund 3 Serial.print ("\ t"); Seeria.print (kokku4); // prindianduri väljund 4 Serial.print ("\ t"); Seeria.println (kokku5); // prindianduri väljund 5 viivitus (10); // suvaline viivitus andmete piiramiseks jadapordiga} --- END ---

4. samm: meeleoluvalgus - põhitõed ja vooluring

Mood Light - põhitõed ja vooluring
Mood Light - põhitõed ja vooluring
Mood Light - põhitõed ja vooluring
Mood Light - põhitõed ja vooluring
Mood Light - põhitõed ja vooluring
Mood Light - põhitõed ja vooluring

Nüüd on aeg süsteemi väljundosa üles ehitada. Iga värvi juhtimiseks kasutatakse arduino PWM tihvte. PWM tähendab impulsi laiuse modulatsiooni, lülitades tihvti väga kiiresti sisse ja välja, tuhmuvad LED -id 0 kuni 255. Iga tihvti võimendab FET. Praegu on süsteemil ainult üks kanal värvi kohta, mis tähendab, et kõiki RGB ribasid juhitakse korraga ja vaja on 3 PWM tihvti (üks iga värvi jaoks). Tulevikus tahan juhtida kõiki oma nelja RGB riba. See tähendab 4*3 = 12 PWM tihvti (ja tõenäoliselt Arduino Mega). Okei, aeg mõne skeemi jaoks! See (vt pilti) on ahela põhiesitus (teeb varsti kenamaks). Komplekti kuuluvad ka mahtuvuslikud andurid (roheline osa). Põhimõtteliselt tuleb selgitada kolme komponenti:- FETSee on võimendi, millest ma rääkisin. Sellel on värav, allikas ja äravool. See võimendab väravas väikest voolu (ühendatud Arduinoga) ja avab tee 12 -voldisele RGB -ribale. Allikas peaks olema +12V, äravool GND (maa peal). Kontrollige oma FET -i spetsifikatsioonilehelt täpset väljalülitamist. Iga RGB kanal tuleks paigutada oma FET ette. Selles mõttes toimib see nagu Arduino juhitav lüliti.- RGB riba See 12-voldine RGB-riba on tavalise anoodi (+) tüüpi. See tähendab, et ühine juhe tuleb ühendada +12 V vooluga ja vool lastakse läbi iga eraldi värvikanali. Ribal on takistid, nii et ärge muretsege!- Takistid Kolm 10k takistit tagavad, et FET ei lülitu sisse, kui need ei peaks sisse lülitama. Kolm muud piiravad maksimaalset voolu, mida FET tühjendab. Kolm parimat takistit on juba RGB -ribas. Ma jootsin RGB -ribade külge USB -kaablid, et saaksin neid modulaarselt hõlpsalt ühendada. Pistikud vanast jaoturist on paigutatud minu leivalauale. Kasutage vana arvuti toiteallikat mahla jaoks, 12 V RGB riba toiteks ja lõpuks 5 V vooluahelat, kui soovite, et see töötaks ilma USB -kaablita.

5. samm: meeleoluvalgus - kood ja juhtimine

Meeleolu valgust juhivad mahtuvuslikud andurid. Praegu programmeerisin värvimuutuseks ainult andureid 2 ja 3. Teistel anduritel pole veel ühtegi funktsiooni. Siin on kood: --- Arduino Mood Control Code ---#include const boolean invert = true; const long timeout = 10000; // mahtuvusliku anduri deklaratsioonCapSense In1 = CapSense (2, 4); // 2M takisti tihvtide 4 ja 2 vahel, tihvt 2 on anduri tihvt, lisa traat, fooliumCapSense In2 = CapSense (2, 7); // 2M takisti tihvtide 4 ja 6 vahel, tihvt 6 on anduri tihvt, lisa traat, fooliumCapSense In3 = CapSense (2, 8); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisa traat, fooliumCapSense In4 = CapSense (2, 12); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisa traat, fooliumCapSense In5 = CapSense (2, 13); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisage traat, foolium // PWM tihvti deklaratsioonid PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Muud muutujadvärv1 = 128; // alusta punasest nagu värvitoon Brightness1 = 255; // alustada täieliku heleduse juures // RGB komponendid välistavad seadistamise () {// määravad anduri ajalõpu väärtused In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (ajalõpp); In3.set_CS_AutocaL_Millis (ajalõpp); In4.set_CS_AutocaL_Millis (ajalõpp); In5.set_CS_AutocaL_Millis (timeout);} void loop () {long start = millis (); pikk kokku1 = In1.capSense (30); pikk kokku2 = In2.capSense (30); pikk kokku3 = In3.capSense (30); pikk kokku4 = In4.capSense (30); pikk kokku5 = In5.capSense (30); kui (kokku2> 150) {Värv1 ++; // värvi suurendamine, kui (Värv1> 255) {// Värv1 = 0; }} muu, kui (kokku3> 200) {Värv1--; // värvi vähendamine, kui (Värv1 <0) {// Värv1 = 255; } // teisenda toon rgb -ks hueToRGB (värv1, heledus1); // kirjutada värvid PWM -i tihvtidele analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funktsioon värvi teisendamiseks selle punaseks, roheliseks ja siniseks komponendiks. tühine hueToRGB (int toon, int heledus) {unsigned int scaledHue = (toon * 6); allkirjastamata int segment = scaledHue / 256; // segment 0 kuni 5 ümber värviratta unsigned int segmentOffset = scaledHue - (segment * 256); // positsioon segmendis unsigned int kompliment = 0; unsigned int prev = (heledus * (255 - segmentOffset)) / 256; unsigned int next = (heledus * segmentOffset) / 256; if (invert) {heledus = 255-heledus; kompliment = 255; eelmine = 255-eelmine; järgmine = 255-järgmine; } lüliti (segment) {juhtum 0: // punane RedValue1 = heledus; GreenValue1 = järgmine; BlueValue1 = kompliment; murda; juhtum 1: // kollane RedValue1 = eelmine; GreenValue1 = heledus; BlueValue1 = kompliment; murda; juhtum 2: // roheline RedValue1 = kompliment; GreenValue1 = heledus; BlueValue1 = järgmine; murda; juhtum 3: // tsüaanpunaneVäärtus1 = kompliment; GreenValue1 = eelmine; BlueValue1 = heledus; murda; juhtum 4: // sinine Punaväärtus1 = järgmine; GreenValue1 = kompliment; BlueValue1 = heledus; murda; juhtum 5: // magenta vaikimisi: RedValue1 = heledus; GreenValue1 = kompliment; SinineVäärtus1 = eelmine; murda; }}--- LÕPP ---

6. samm: Ambi Light - Arduino pool

Muidugi oleks täiesti lahe, kui saaksite oma arvutist meeleolu valgust juhtida. Näiteks ambilighti või helikontrollitud disko loomiseks. See jaotis keskendub ambilighti osale, tulevikus lisan rohkem funktsioone. Noh, täiendavat vooluringi pole, sest see kõik on saadaval Arduinos. Mida me kavatseme kasutada, on jadaühendusvõimalused ja tarkvara „Processing 1.0”. Ühendage oma arduino arvutiga USB-kaabli abil (kui laadisite sellele visandeid, on see juba olemas). Arduino jaoks peate jadakommunikatsiooni jaoks lisama lisakoodi. Kood lülitub kuulamisrežiimi, lülitades mahtuvuslikud andurid sisse seni, kuni see saab arvutist RGB väärtusi. Seejärel määrab see RGB väärtused PWM -i tihvtidele. See on praegu minu viimane kood, kontrollige muudatusi ise: --- Arduino Ambilighti kood ---#include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // mahtuvusliku anduri deklaratsioonCapSense In1 = CapSense (2, 4); // 2M takisti tihvtide 4 ja 2 vahel, tihvt 2 on anduri tihvt, lisa traat, fooliumCapSense In2 = CapSense (2, 7); // 2M takisti tihvtide 4 ja 6 vahel, tihvt 6 on anduri tihvt, lisa traat, fooliumCapSense In3 = CapSense (2, 8); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisa traat, fooliumCapSense In4 = CapSense (2, 12); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisa traat, fooliumCapSense In5 = CapSense (2, 13); // 2M takisti tihvtide 4 ja 8 vahel, tihvt 8 on anduri tihvt, lisage traat, foolium // PWM tihvti deklaratsioonid PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Muud muutujadvärv1 = 128; // alusta punase värviga nagu värvitoon Brightness1 = 255; // alusta täieliku heleduse juuresväärtus RedValue1, GreenValue1, BlueValue1; // RGB komponendid ei sisalda seadistust () {Serial.begin (9600); // jadaühenduse alustamine // anduri ajalõpu väärtuste määramine In1.set_CS_AutocaL_Millis (timeout); In2.set_CS_AutocaL_Millis (ajalõpp); In3.set_CS_AutocaL_Millis (ajalõpp); In4.set_CS_AutocaL_Millis (aegumine); In5.set_CS_AutocaL_Millis (timeout);} void loop () {long start = millis (); pikk kokku1 = In1.capSense (30); pikk kokku2 = In2.capSense (30); pikk kokku3 = In3.capSense (30); pikk kokku4 = In4.capSense (30); pikk kokku5 = In5.capSense (30); if (Serial.available ()) {// Kui andmed on lugemiseks saadaval, val = Serial.read (); // loe ja salvesta see valikus commStart = millis (); if (val == 'S') {// Kui algmärk on kätte saadud, samas (! Serial.available ()) {} // Oodake järgmise väärtuseni. RedValue1 = Serial.read (); // Kui saadaval, määrake. while (! Serial.available ()) {} // Sama nagu eespool. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serial.print (GreenValue1); Serial.println (BlueValue1); } else if ((millis () - commStart)> 1000) {kui (kokku2> 150) {Värv1 ++; // värvi suurendamine, kui (Värv1> 255) {// Värv1 = 0; }} muu, kui (kokku3> 200) {Värv1--; // värvi vähendamine, kui (Värv1 <0) {// Värv1 = 255; }} hueToRGB (värv1, heledus1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funktsioon värvi teisendamiseks selle punaseks, roheliseks ja siniseks komponendiks. tühine hueToRGB (int toon, int heledus) {unsigned int scaledHue = (toon * 6); allkirjastamata int segment = scaledHue / 256; // segment 0 kuni 5 ümber värviratta unsigned int segmentOffset = scaledHue - (segment * 256); // positsioon segmendis unsigned int kompliment = 0; unsigned int prev = (heledus * (255 - segmentOffset)) / 256; unsigned int next = (heledus * segmentOffset) / 256; if (invert) {heledus = 255-heledus; kompliment = 255; eelmine = 255-eelmine; järgmine = 255-järgmine; } lüliti (segment) {juhtum 0: // punane RedValue1 = heledus; GreenValue1 = järgmine; BlueValue1 = kompliment; murda; juhtum 1: // kollane RedValue1 = eelmine; GreenValue1 = heledus; BlueValue1 = kompliment; murda; juhtum 2: // roheline RedValue1 = kompliment; GreenValue1 = heledus; BlueValue1 = järgmine; murda; juhtum 3: // tsüaansinine RedValue1 = kompliment; GreenValue1 = eelmine; BlueValue1 = heledus; murda; juhtum 4: // sinine RedValue1 = järgmine; GreenValue1 = kompliment; BlueValue1 = heledus; murda; juhtum 5: // magenta vaikimisi: RedValue1 = heledus; GreenValue1 = kompliment; SinineVäärtus1 = eelmine; murda; }}--- LÕPP ---

Samm 7: Ambi Light - arvuti pool

Arvuti küljel käivitatakse Processing 1.0 eskiis, vt processing.org. See väike (mõnevõrra räpane) programm arvutab igal hetkel keskmise ekraanivärvi ja saadab selle jadaporti. See on siiani väga lihtne ja see võib natuke kohandada, kuid see töötab väga hästi! Uuendan seda tulevikus mitme eraldi RGB riba ja ekraani sektsiooni jaoks. Seda võiks teha ka ise, keel on üsna otsekohene. Siin on kood: --- Processing 1.0 Code --- import processing.serial.*; Import java.awt. AWTException; import java.awt. Robot; import java.awt. Rectangle; import java.awt.image. BufferedImage; PImage screenShot; Serial myPort; staatiline public void main (String args ) {PApplet.main (new String {"--present", "shooter"});} void setup () {size (100, 100); //size(screen.width, screen.height); // Silumise eesmärgil jadaportide loendi printimine: println (Serial.list ()); // Ma tean, et minu maci seerialoendi esimene port // on alati minu FTDI -adapter, seega avan Serial.list () [0]. // Windowsi masinates avab see tavaliselt COM1. // Avage mis tahes port, mida kasutate. String portName = Serial.list () [0]; myPort = uus jada (see, pordiNimi, 9600);} void draw () {// pilt (ekraanipilt, 0, 0, laius, kõrgus); ekraanipilt = getScreen (); värv kleur = värv (0, 0, 0); kleur = värv (ekraanipilt); //myPort.write(int(red(kleur))+ ','+int (roheline (kleur))+','+int (sinine (kleur))+13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(blue(kleur))); //myPort.write (13); täitma (kleur); rect (30, 20, 55, 55);} värvi värv (PImage img) {int cols = (img.width); int read = (img.height); int mõõde = (img.laius*img.kõrgus); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pixel langs (dimension) for (int i = 0; i <(dimension/2); i ++) {r = r+((img.pikslid >> 16) & 0xFF); g = g + ((img.pikslid >> 8) & 0xFF); b = b + (img.pikslid & 0xFF);} int keskmine_r = r/(mõõde/2); int keskmine_g = g/(mõõde/2); int keskmine_b = b/(mõõde/2); värv keskmine_clr = värv (keskmine_r, keskmine_g, keskmine_b); myPort.write ('S'); myPort.write (keskmine_r); myPort.write (keskmine_g); myPort.write (mean_b); return (mean_clr);} PImage getScreen () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices (); Kuvarežiimi režiim = gs [0].getDisplayMode (); Ristküliku piirid = uus Ristkülik (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage desktop = new BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); proovige {desktop = new Robot (gs [0]). createScreenCapture (piirid); } catch (AWTException e) {System.err.println ("Ekraanipilt ebaõnnestus."); } return (uus PImage (töölaud));} --- END ---

8. samm: tulemus

Tulemus
Tulemus
Tulemus
Tulemus

Ja see on tulemus, see on tegelikult minu voodi allosas. Pean lapi veel välja vahetama, see hajutab valgust rohkem. Rohkem pilte sellest varsti. Loodan, et teile meeldib see juhendatav ja loodan ka, et see on teie enda loovuse alus. Ajapiirangute tõttu kirjutasin selle väga kiiresti. Selle mõistmiseks võib teil olla vaja arduino/elektroonika põhiteadmisi, kuid kavatsen seda tulevikus värskendada, kui see on hästi vastu võetud.

Soovitan: