Sisukord:
- Samm: üksuste loend
- 2. etapp: mahtuvuslik puudutus - põhitõed ja vooluring
- 3. samm: mahtuvuslik puudutus - kood ja testimine
- 4. samm: meeleoluvalgus - põhitõed ja vooluring
- 5. samm: meeleoluvalgus - kood ja juhtimine
- 6. samm: Ambi Light - Arduino pool
- Samm 7: Ambi Light - arvuti pool
- 8. samm: tulemus
Video: Mahtuvuslik puutetundlik meeleolu/Ambilight: 8 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:51
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
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
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
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
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:
ESP32 mahtuvuslik puutetundlik sisend nuppude metallist augukorkide abil: 5 sammu (piltidega)
ESP32 mahtuvuslik puutetundlik sisend nuppude metallist aukude pistikute abil: kui olin viimistlemas eelseisva ESP32 WiFi Kit 32 põhise projekti, mis nõuab kolme nupu sisestamist, projekteerimisotsuseid, oli üks märgatav probleem see, et WiFi komplekt 32 ei sisalda ühtki mehaanilist nuppu aga üksi kolm mehaanilist nuppu, f
Lisage oma projektidele mahtuvuslik puutetundlik lüliti: 7 sammu
Lisage oma projektidele mahtuvuslik puutetundlik lüliti: kuidas kodus oma projektidele mahtuvuslikku puutetundlikku lülitit lisada professionaalne välimus
Mahtuvuslik puudutus PIC16F886 mikrokontrolleriga: 3 sammu
Mahtuvuslik puudutus PIC16F886 mikrokontrolleri abil: selles õpetuses käsitleme, kuidas saate kasutada PIC16F886 mikrokontrollerit mahtuvuse erinevuste tuvastamiseks. Seda saab hiljem kasutada puuteplaadi vajutamise tuvastamiseks. Enne selle tegemist on hea olla kursis pic -mikrokontrolleritega
DIY mahtuvuslik tühjenemine 18650 punkt -aku keevitaja #6: 11 sammu (piltidega)
DIY mahtuvuslik tühjenemine 18650 täispatarei keevitaja #6: Siin on kuues aku vahelehe keevitaja, mille olen siiani loonud. Alates esimesest MOT -keevitajast olen tahtnud ühte neist teha ja olen õnnelik, et tegin! Selle otsustasin teha kondensaatoriga. ProTip on see, kuidas valmistada lihtsat aku vahelehe keevitajat
Elupuu (Arduino mahtuvuslik puutetundlik andurimootor): 6 sammu (koos piltidega)
Elupuu (Arduino mahtuvuslik puutetundlik andurimootor): Selle projekti jaoks valmistasime riisi andva puu, mis koosnes mahtuvuslikust puutetundlikust andurist ja servomootorist. Matti puudutades aktiveerub servomootor ja vabastatakse riis (või mis iganes soovite sinna panna). Siin on lühike video