Obsah:

Kapacitná dotyková nálada/Ambilight: 8 krokov
Kapacitná dotyková nálada/Ambilight: 8 krokov

Video: Kapacitná dotyková nálada/Ambilight: 8 krokov

Video: Kapacitná dotyková nálada/Ambilight: 8 krokov
Video: Arduino návody | Dotyková kapacitní klávesnice TTP229 2024, Júl
Anonim
Kapacitná dotyková nálada/Ambilight
Kapacitná dotyková nálada/Ambilight

Tento návod je rýchlym zápisom mojich skúseností s vytváraním multifunkčného náladového svetla. Očakáva sa základná znalosť elektronických obvodov. Projekt ešte nie je dokončený, je potrebné vykonať niekoľko doplnkov a vylepšení, ale už je funkčný. Ak máte záujem o tento návod, aktualizujem ho. V srdci systému je Arduino. Spracuje vstup z USB alebo každého z kapacitných dotykových vstupov a bude ovládať svetlo RGB. Tento návod je rozdelený do troch sekcií:- kapacitná dotyková časť pokrýva neviditeľné tlačidlá vstupu,- sekcia náladového svetla sa zaoberá ovládaním náladového svetla,- sekcia ambilight pokrýva vstup pomocou sériového portu a spracováva hodnoty RGB generované počítačovým programom na ovládanie svetiel.. Vylúčenie zodpovednosti: Elektronika môže byť nebezpečná. Za škody, ktoré spôsobíte, nesiete zodpovednosť vy. Niektorý kód sa zhromažďuje z fór a nemusí obsahovať meno jeho vlastníka. Dajte mi prosím vedieť a ja doplním vaše meno.

Krok 1: Zoznam položiek

Na vykonanie tohto návodu sú potrebné nasledujúce komponenty:- Arduino+kábel USB- Breadboard- napájanie počítača- 3 x RGB pásy, pozrite sa na dealextreme.com.- 3 x TIP120 FET, napríklad https://uk.farnell.com/stmicroelectronics/tip120 /darlington-transistor-to-220/dp/9804005- Banda odporov (6 * 10 kiloOhm, 3 * 2 megaOhm)-Veľa drôtu. - Nástroje, kapacitný dotyk- Kovové krúžky pre podložky- Medený drôt alebo tanier- Niečo, do čoho je možné ho zabudovať (ako polica s knihami:)

Krok 2: Kapacitný dotyk - základy a obvod

Kapacitný dotyk - základy a obvod
Kapacitný dotyk - základy a obvod
Kapacitný dotyk - základy a obvod
Kapacitný dotyk - základy a obvod
Kapacitný dotyk - základy a obvod
Kapacitný dotyk - základy a obvod

Keďže som maľoval svoje poličky na knihy, mal som príležitosť „upgradovať“ich tiež. Chcel som ovládať náladové svetlo pomocou neviditeľného dotyku. Najprv som mal v pláne použiť na to vyhradený IC (ako Atmel QT240). Potom som však narazil na stránku vysvetľujúcu, že Arduino môže softvérovo emulovať kapacitný snímač. Elektronický obvod nájdete na obrázku, snímač je špirálovitý medený drôt (pre jednoduchosť je zobrazený iba jeden). Citlivosť je riadená odpormi, ktoré sa nachádzajú pred každým kolíkom. Môžu sa pohybovať od 1 MegaOhm (absolútny dotyk) do 40 MegaOhm (vzdialený 12-24 palcov) v závislosti od toho, či je potrebný absolútny alebo blízky dotyk (skončil som s použitím rezistorov 2M Ohm). Experimentujte s hodnotami, kým sa senzor nespráva podľa želania. Je dobré nainštalovať nejaký vodivý povrch (oddelený tenkým nevodivým kusom) spojený so zemou obvodov v zadnej časti každej špirály. Takto budú senzory stabilnejšie a menej ovplyvnené hlukom. Niektoré ďalšie obrázky o inštalácii senzorov do poličky s knihami. Je nainštalovaná aj zástrčka pre neskoršie ľahké pripojenie k obvodu. Filler sa používa na skrytie všetkého a potom sú pripravené na maľovanie.

Krok 3: Kapacitný dotyk - kód a testovanie

Kapacitný dotyk - kód a testovanie
Kapacitný dotyk - kód a testovanie

Na ladenie Arduina je možné použiť nasledujúci zdrojový kód, skontrolujte hodnoty pomocou sériového monitora arduino. Vygeneruje sa šesť hodnôt. Prvá je mierou výkonu systému. Druhý až šiesty sú snímané hodnoty na každom pine. Keď sa priblížite k prstu, hodnoty by mali stúpať. Ak nie, skontrolujte, či nie sú zlé spojenia a rušenie. Hodnoty odporu je možné zmeniť, aby sa určila citlivosť. Implementáciou štruktúry if-then, ktorá je aktivovaná pri určitom logickom prahu, je možné vykonať prepínač. Toto bude použité v konečnom arduino kóde. Viac informácií, navrhovaných na prečítanie: https://www.arduino.cc/playground/Main/CapSense--- Ladiaci kód Arduino CapTouch ---#include void setup () {CapSense cs_2_3 = CapSense (2, 4); // 10M odpor medzi pinmi 2 a 4, pin 4 je pin senzora, pridaj drot, foliaCapSense cs_2_4 = CapSense (2, 7); // 10M odpor medzi pinmi 2 a 7, pin 7 je pin senzora, pridaj drot, foliaCapSense cs_2_5 = CapSense (2, 8); // 10M odpor medzi pinmi 2 a 8, pin 8 je pin senzora, pridaj drot, foliaCapSense cs_2_6 = CapSense (2, 12); // 10M odpor medzi pinmi 2 a 12, pin 12 je pin senzora, pridaj drot, foliaCapSense cs_2_7 = CapSense (2, 13); // 10M odpor medzi pinmi 2 a 13, pin 13 je pin senzora, pridaj drôt, folikulovat setup () {Serial.begin (9600);} void loop () {long start = millis (); long total1 = cs_2_3.capSense (30); long total2 = cs_2_4.capSense (30); long total3 = cs_2_5.capSense (30); long total4 = cs_2_6.capSense (30); long total5 = cs_2_7.capSense (30); Serial.print (millis () - štart); // kontrola výkonu v milisekundách Serial.print ("\ t"); // znak tabulátora na ladenie medzier medzi oknami Serial.print (total1); // výstup senzora tlače 1 Serial.print ("\ t"); Serial.print (total2); // výstup tlačového senzora 2 Serial.print ("\ t"); Serial.print (celkom3); // výstup senzora tlače 3 Serial.print ("\ t"); Serial.print (celkom4); // výstup snímača tlače 4 Serial.print ("\ t"); Serial.println (celkom5); // oneskorenie výstupu výstupu snímača 5 (10); // ľubovoľné oneskorenie na obmedzenie údajov na sériový port} --- KONIEC ---

Krok 4: Náladové svetlo - základy a obvod

Náladové svetlo - základy a obvod
Náladové svetlo - základy a obvod
Náladové svetlo - základy a obvod
Náladové svetlo - základy a obvod
Náladové svetlo - základy a obvod
Náladové svetlo - základy a obvod

Teraz je načase vybudovať výstupnú časť systému. Na ovládanie každej farby budú použité kolíky PWM arduina. PWM znamená moduláciu šírky impulzu, veľmi rýchlym zapnutím a vypnutím kolíka sa diódy LED stlmia od 0 do 255. Každý pin bude zosilnený FET. Systém má zatiaľ iba jeden kanál na farbu, čo znamená, že všetky pásy RGB budú ovládané naraz a sú potrebné 3 piny PWM (jeden pre každú farbu). V budúcnosti chcem byť schopný ovládať každý zo svojich štyroch pásikov RGB. To znamená 4*3 = 12 pinov PWM (a pravdepodobne Arduino Mega). Ok, čas na nejaké schémy! Toto (pozri obrázok) je základným znázornením obvodu (čoskoro bude krajší). Súčasťou sú aj kapacitné snímače (zelená časť). V zásade existujú tri komponenty, ktoré je potrebné vysvetliť:- FET Toto je zosilňovač, o ktorom som hovoril. Má bránu, zdroj a odtok. Zosilňuje zmysly malým prúdom na bráne (pripojenej k Arduinu) a otvára cestu RGB pásu, ktorý je napájaný 12 voltmi. Zdroj by mal byť na +12V, odtok na GND (uzemnenie). Presný vývod nájdete v liste so špecifikáciami vášho FET. Každý kanál RGB by mal byť umiestnený pred vlastný FET. V tomto zmysle funguje ako spínač ovládaný Arduino.- RGB pásik Tento 12 voltový RGB pásik je bežného anódového (+) typu. To znamená, že spoločný vodič by mal byť pripojený k +12 V a prúd prúdil cez každý zo samostatných farebných kanálov. Pás obsahuje zabudované odpory, takže si s tým nemusíte robiť starosti!- Rezistory Tri 10k odpory zaistia, že sa FET nezapne, keď sa zapínať nemá. Tri ďalšie obmedzia maximálny prúd, ktorý bude FET odoberať. Tri najlepšie odpory sú už v páse RGB. Na RGB pásy som spájkoval USB káble, aby som ich mohol jednoducho modulárne pripojiť. Na mojom doske sú umiestnené zástrčky zo starého náboja. Ak chcete, aby zariadenie bežalo bez kábla USB, použite starý počítačový zdroj na džús, 12 V na napájanie pásu RGB a prípadne 5 V na obvod.

Krok 5: Nálada - kód a ovládanie

Náladové svetlo je ovládané kapacitnými senzormi. Zatiaľ som programoval iba senzory 2 a 3 na zmenu farby. Ostatné senzory zatiaľ nefungujú. Tu je kód: --- Arduino Mood Control Code ---#include const boolean invert = true; const long timeout = 10000; // Capacitive sensor declarationCapSense In1 = CapSense (2, 4); // 2M rezistor medzi pinmi 4 a 2, pin 2 je pin senzora, pridaj drot, foliaCapSense In2 = CapSense (2, 7); // 2M rezistor medzi pinmi 4 a 6, pin 6 je pin senzora, pridaj drot, foliaCapSense In3 = CapSense (2, 8); // 2M odpor medzi pinmi 4 a 8, pin 8 je pin senzora, pridaj drot, foliaCapSense In4 = CapSense (2, 12); // 2M rezistor medzi pinmi 4 a 8, pin 8 je pin senzora, pridaj drot, foliaCapSense In5 = CapSense (2, 13); // 2M odpor medzi kolíkmi 4 a 8, pin 8 je kolík senzora, pridajte drôt, fóliu // PWM Vyhlásenia pinovint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Ostatné premennéint Color1 = 128; // začnite červenou farbou ako jas Brightness1 = 255; // začiatok s plným jasom RedValue1, GreenValue1, BlueValue1; // Komponenty RGB sa vyhýbajú setup () {// nastavujú hodnoty časového limitu senzora In1.set_CS_AutocaL_Millis (časový limit); In2.set_CS_AutocaL_Millis (časový limit); In3.set_CS_AutocaL_Millis (časový limit); In4.set_CS_AutocaL_Millis (časový limit); In5.set_CS_AutocaL_Millis (časový limit);} void loop () {long start = millis (); long total1 = In1.capSense (30); long total2 = In2.capSense (30); long total3 = In3.capSense (30); long total4 = In4.capSense (30); long total5 = In5.capSense (30); if (total2> 150) {Color1 ++; // zvýšenie farby, ak (Farba1> 255) {// Farba1 = 0; }} else if (total3> 200) {Color1--; // zníži farbu, ak (Farba1 <0) {// Farba1 = 255; } // previesť odtieň na rgb hueToRGB (farba1, jas1); // zapisovanie farieb na piny PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkcia na konverziu farby na jej červenú, zelenú a modrú zložku. vyhnúť sa hueToRGB (vnútorný odtieň, vnútorný jas) {unsigned int scaledHue = (odtieň * 6); nepodpísaný int segment = scaledHue / 256; // segment 0 až 5 okolo farebného kolieska bez znamienka int segmentOffset = scaledHue - (segment * 256); // pozícia v rámci segmentu bez znamienka int kompliment = 0; bez znamienka int prev = (jas * (255 - segmentový offset)) / 256; unsigned int next = (jas * segmentOffset) / 256; if (invertovať) {jas = 255-jas; kompliment = 255; prev = 255-prev; next = 255-next; } prepínač (segment) {prípad 0: // červená Červená hodnota1 = jas; GreenValue1 = nasledujúci; BlueValue1 = kompliment; prestávka; prípad 1: // žltá RedValue1 = prev; GreenValue1 = jas; BlueValue1 = kompliment; prestávka; prípad 2: // zelená RedValue1 = kompliment; GreenValue1 = jas; BlueValue1 = nasledujúci; prestávka; prípad 3: // azúrová RedValue1 = kompliment; GreenValue1 = prev; BlueValue1 = jas; prestávka; prípad 4: // modrá RedValue1 = ďalšia; GreenValue1 = kompliment; BlueValue1 = jas; prestávka; prípad 5: // purpurová predvolená hodnota: RedValue1 = jas; GreenValue1 = kompliment; BlueValue1 = predchádzajúci; prestávka; }}--- KONIEC ---

Krok 6: Ambi Light - Arduino Side

Samozrejme, bolo by úplne skvelé ovládať svetlo nálady z počítača. Napríklad na vytvorenie ambilightu alebo zvukovo ovládanej diskotéky. Táto časť sa zameriava na časť ambilight, v budúcnosti pridám ďalšie funkcie. Neexistuje žiadny ďalší obvod, pretože všetko je k dispozícii v Arduine. Čo použijeme, sú možnosti sériovej komunikácie a nejaký softvér „Processing 1.0“. Pripojte arduino k počítaču pomocou kábla USB (ak ste naň nahrávali náčrty, už je). Pre arduino musíte pridať nejaký ďalší kód pre sériovú komunikáciu. Kód sa prepne do režimu počúvania a zapne kapacitné snímače, pokiaľ prijíma hodnoty RGB z počítača. Potom nastaví hodnoty RGB na piny PWM. Toto je zatiaľ môj konečný kód, overte si zmeny sami: --- Arduino Ambilight Code ---#include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // Kapacitný snímač deklarácie CapSense In1 = CapSense (2, 4); // 2M rezistor medzi pinmi 4 a 2, pin 2 je pin senzora, pridaj drot, foliaCapSense In2 = CapSense (2, 7); // 2M rezistor medzi pinmi 4 a 6, pin 6 je pin senzora, pridaj drot, foliaCapSense In3 = CapSense (2, 8); // 2M odpor medzi pinmi 4 a 8, pin 8 je pin senzora, pridaj drot, foliaCapSense In4 = CapSense (2, 12); // 2M rezistor medzi pinmi 4 a 8, pin 8 je pin senzora, pridaj drot, foliaCapSense In5 = CapSense (2, 13); // 2M odpor medzi kolíkmi 4 a 8, pin 8 je kolík senzora, pridajte drôt, fóliu // PWM Vyhlásenia pinovint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Ostatné premennéint Color1 = 128; // začnite červenou farbou ako jas Brightness1 = 255; // začiatok s plným jasom RedValue1, GreenValue1, BlueValue1; // Komponenty RGB sa vyhýbajú setup () {Serial.begin (9600); // spustenie sériovej komunikácie // nastavenie hodnôt časového limitu senzora In1.set_CS_AutocaL_Millis (časový limit); In2.set_CS_AutocaL_Millis (časový limit); In3.set_CS_AutocaL_Millis (časový limit); In4.set_CS_AutocaL_Millis (časový limit); In5.set_CS_AutocaL_Millis (časový limit);} void loop () {long start = millis (); long total1 = In1.capSense (30); long total2 = In2.capSense (30); long total3 = In3.capSense (30); long total4 = In4.capSense (30); long total5 = In5.capSense (30); if (Serial.available ()) {// Ak sú údaje dostupné na čítanie, val = Serial.read (); // prečítajte si ho a uložte do val commStart = millis (); if (val == 'S') {// Ak je prijatý počiatočný znak, while (! Serial.available ()) {} // Počkajte na ďalšiu hodnotu. RedValue1 = Serial.read (); // Keď bude k dispozícii, priraďte. while (! Serial.available ()) {} // Rovnako ako vyššie. 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 ++; // zvýšenie farby, ak (Farba1> 255) {// Farba1 = 0; }} else if (total3> 200) {Color1--; // zníži farbu, ak (Farba1 <0) {// Farba1 = 255; }} hueToRGB (farba1, jas1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkcia na konverziu farby na jej červenú, zelenú a modrú zložku. vyhnúť sa hueToRGB (vnútorný odtieň, vnútorný jas) {unsigned int scaledHue = (hue * 6); nepodpísaný int segment = scaledHue / 256; // segment 0 až 5 okolo farebného kolieska bez znamienka int segmentOffset = scaledHue - (segment * 256); // pozícia v rámci segmentu bez znamienka int kompliment = 0; bez znamienka int prev = (jas * (255 - segmentový offset)) / 256; unsigned int next = (jas * segmentOffset) / 256; if (invertovať) {jas = 255-jas; kompliment = 255; prev = 255-prev; next = 255-next; } prepínač (segment) {prípad 0: // červená Červená hodnota1 = jas; GreenValue1 = nasledujúci; BlueValue1 = kompliment; prestávka; prípad 1: // žltá RedValue1 = prev; GreenValue1 = jas; BlueValue1 = kompliment; prestávka; prípad 2: // zelená RedValue1 = kompliment; GreenValue1 = jas; BlueValue1 = nasledujúci; prestávka; prípad 3: // azúrová RedValue1 = kompliment; GreenValue1 = prev; BlueValue1 = jas; prestávka; prípad 4: // modrá RedValue1 = ďalšia; GreenValue1 = kompliment; BlueValue1 = jas; prestávka; prípad 5: // purpurová predvolená hodnota: RedValue1 = jas; GreenValue1 = kompliment; BlueValue1 = predchádzajúci; prestávka; }}--- KONIEC ---

Krok 7: Ambi Light - na strane počítača

Na bočnej strane počítača je spustený náčrt Processing 1.0, pozri processing.org. Tento malý (trochu chaotický) program v každom okamihu vypočíta priemernú farbu obrazovky a odošle ju na sériový port. Zatiaľ je to veľmi základné a mohlo by to vyžadovať určité vyladenie, ale funguje to veľmi dobre! V budúcnosti ho aktualizujem pre niekoľko samostatných pásikov RGB a sekcií obrazovky. Môžete to urobiť aj sami, jazyk je celkom jednoduchý. Tu je kód: --- 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 obrazovka); //size(screen.width, screen.height); // Vytlačte zoznam sériových portov na účely ladenia: println (Serial.list ()); // Viem, že prvý port v zozname sériových čísel na mojom počítači mac // je vždy môj adaptér FTDI, a tak otvorím Serial.list () [0]. // Na počítačoch so systémom Windows sa spravidla otvára COM1. // Otvorte akýkoľvek port, ktorý používate. Reťazec portName = Serial.list () [0]; myPort = new Serial (this, portName, 9600);} void draw () {// image (screenShot, 0, 0, width, height); screenShot = getScreen (); color kleur = farba (0, 0, 0); kleur = farba (screenShot); //myPort.write(int(red(kleur))+ ','+int (zelená (kleur))+','+int (modrá (kleur))+13); //myPort.write(int(red(kleur))); //myPort.write (','); //myPort.write(int(green(kleur))); //myPort.write (','); //myPort.write(int(blue(kleur))); //myPort.write(13); výplň (kleur); rect (30, 20, 55, 55);} farba farby (PImage img) {int cols = (img.width); int riadky = (obr. vyska); int rozmer = (obr. sirka*obr. vyska); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Rozmery pixelov Ga elke (dimenzia) pre (int i = 0; i <(dimenzia/2); i ++) {r = r+((obr. pixely >> 16) & 0xFF); g = g + ((obr. pixelov >> 8) & 0xFF); b = b + (obr. pixely & 0xFF);} stredný priemer_r = r/(rozmer/2); stredný priemer_g = g/(rozmer/2); stredný priemer_b = b/(rozmer/2); farba mean_clr = farba (priemer_r, priemer_g, priemer_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 (); Režim DisplayMode = gs [0].getDisplayMode (); Hranice obdĺžnika = nový Obdĺžnik (0, 0, mode.getWidth (), mode.getHeight ()); Pracovná plocha BufferedImage = nová BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); skúste {desktop = new Robot (gs [0]). createScreenCapture (bounds); } catch (AWTException e) {System.err.println ("Snímanie obrazovky zlyhalo."); } return (new PImage (desktop));} --- END ---

Krok 8: Výsledok

Výsledok
Výsledok
Výsledok
Výsledok

A toto je výsledok, je to vlastne na spodnej strane mojej postele. Potrebujem ešte vymeniť látku, bude viac rozptyľovať svetlo. Ďalšie obrázky k tomu čoskoro. Dúfam, že sa vám tento návod bude páčiť a tiež dúfam, že bude základom pre vašu vlastnú kreativitu. Z časových dôvodov som to napísal veľmi rýchlo. Aby ste to pochopili, možno budete potrebovať nejaké základné znalosti arduino/elektroniky, ale plánujem ich v budúcnosti aktualizovať, ak budú dobre prijaté.

Odporúča: