Obsah:

Kapacitní dotyková nálada/Ambilight: 8 kroků
Kapacitní dotyková nálada/Ambilight: 8 kroků

Video: Kapacitní dotyková nálada/Ambilight: 8 kroků

Video: Kapacitní dotyková nálada/Ambilight: 8 kroků
Video: Arduino návody | Dotyková kapacitní klávesnice TTP229 2024, Červenec
Anonim
Kapacitní dotyková nálada/Ambilight
Kapacitní dotyková nálada/Ambilight

Tento návod je rychlým sepsáním mých zkušeností s vytvářením multifunkčního náladového světla. Očekává se základní znalost elektronických obvodů. Projekt ještě není dokončen, je třeba provést některé funkce a vylepšení, ale již je funkční. Pokud jste nadšenci této instrukce, aktualizuji ji. Srdcem systému je Arduino. Zpracuje vstup z USB nebo každého z kapacitních dotykových vstupů a ovládá světlo RGB. Tento instruktáž je rozdělen do tří sekcí:- Kapacitní dotyková část pokrývá neviditelná vstupní tlačítka- Sekce náladového světla pokrývá ovládání náladového světla- Sekce Ambilight pokrývá vstup přes sériový port, zpracování hodnot RGB generovaných počítačovým programem pro ovládání světel. Odmítnutí odpovědnosti: Elektronika může být nebezpečná, za případné způsobené škody nesete odpovědnost sami. Některý kód je shromažďován z fór a nemusí obsahovat jméno jeho vlastníka. Dejte mi prosím vědět a já přidám vaše jméno.

Krok 1: Seznam položek

K tomuto pokynu jsou potřeba následující komponenty:- Arduino+USB kabel- Breadboard- Napájení počítače- 3x RGB proužky, podívejte se na dealextreme.com.- 3x FIP TIP120, jako https://uk.farnell.com/stmicroelectronics/tip120 /darlington-transistor-to-220/dp/9804005- Svazek odporů (6 * 10 kiloOhm, 3 * 2 megaOhm)-Spousta drátu. - Nástroje Kapacitní dotek- Kovové kroužky pro základové desky- Měděný drát nebo deska- Něco, do čeho se dá zabudovat (jako knihovna:)

Krok 2: Kapacitní dotek - základy a obvod

Kapacitní dotek - základy a obvod
Kapacitní dotek - základy a obvod
Kapacitní dotek - základy a obvod
Kapacitní dotek - základy a obvod
Kapacitní dotek - základy a obvod
Kapacitní dotek - základy a obvod

Jelikož jsem maloval své poličky na knihy, měl jsem příležitost je také „upgradovat“. Chtěl jsem ovládat náladové světlo pomocí neviditelného dotyku. Zpočátku jsem měl v plánu použít k tomu vyhrazený IC (jako Atmel QT240). Ale pak jsem narazil na stránku s vysvětlením, že Arduino může softwarově emulovat kapacitní senzor. Elektronický obvod najdete na obrázku, senzor je spirálovitý měděný drát (pro jednoduchost je zobrazen pouze jeden). Citlivost je řízena odpory nalezenými před každým kolíkem. Mohou se pohybovat od 1 MegaOhm (absolutní dotek) do 40 MegaOhm (12-24 palců daleko) v závislosti na tom, zda je potřeba absolutní nebo blízký dotek (skončil jsem s použitím 2M ohmových rezistorů). Experimentujte s hodnotami, dokud se senzor nechová podle potřeby. Je dobré nainstalovat nějaký vodivý povrch (oddělený tenkým nevodivým kusem) spojený se zemí obvodů v zadní části každé spirály. Tímto způsobem budou senzory stabilnější a méně ovlivněné hlukem. Několik dalších obrázků o instalaci senzorů do police. Pro snadné připojení s obvodem později je nainstalována také zástrčka. Filler slouží ke skrytí všeho a poté jsou připraveny k malování.

Krok 3: Kapacitní dotek - kód a testování

Kapacitní dotek - kód a testování
Kapacitní dotek - kód a testování

Na Arduinu lze pro ladění použít následující zdrojový kód, zkontrolujte hodnoty pomocí sériového monitoru arduino. Vygeneruje se šest hodnot. První je měřítkem výkonu systému. Druhá až šestá jsou snímané hodnoty na každém pinu. Hodnoty by se měly zvyšovat, když se přibližujete k prstu. Pokud ne, zkontrolujte špatná připojení a rušení. Hodnoty odporu lze změnit a určit citlivost. Implementací struktury if-then, která je aktivována při určitém logickém prahu, lze provést přepnutí. Toto bude použito v konečném arduino kódu. Další informace, doporučeno ke čtení: https://www.arduino.cc/playground/Main/CapSense--- Ladicí kód Arduino CapTouch ---#include void setup () {CapSense cs_2_3 = CapSense (2, 4); // 10M rezistor mezi piny 2 a 4, pin 4 je pin senzoru, přidat vodič, fólieCapSense cs_2_4 = CapSense (2, 7); // 10M odpor mezi piny 2 a 7, pin 7 je pin senzoru, přidejte vodič, fólieCapSense cs_2_5 = CapSense (2, 8); // 10M rezistor mezi piny 2 a 8, pin 8 je pin senzoru, přidat vodič, fólieCapSense cs_2_6 = CapSense (2, 12); // 10M odpor mezi piny 2 a 12, pin 12 je pin senzoru, přidejte drát, fólieCapSense cs_2_7 = CapSense (2, 13); // 10M odpor mezi piny 2 a 13, pin 13 je pin senzoru, přidejte vodič, folikulovat nastavení () {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 () - start); // kontrola výkonu v milisekundách Serial.print ("\ t"); // znak tabulátoru pro ladění mezer okenn Serial.print (total1); // výstup senzoru tisku 1 Serial.print ("\ t"); Serial.print (celkem2); // výstup senzoru tisku 2 Serial.print ("\ t"); Serial.print (celkem3); // výstup senzoru tisku 3 Serial.print ("\ t"); Serial.print (celkem4); // výstup senzoru tisku 4 Serial.print ("\ t"); Serial.println (celkem5); // zpoždění výstupu snímače 5 (10); // libovolné zpoždění pro omezení dat na sériový port} --- KONEC ---

Krok 4: Náladové světlo - základy a obvod

Náladové světlo - základy a obvod
Náladové světlo - základy a obvod
Náladové světlo - základy a obvod
Náladové světlo - základy a obvod
Náladové světlo - základy a obvod
Náladové světlo - základy a obvod

Nyní je čas vybudovat výstupní část systému. K ovládání každé barvy budou použity kolíky PWM arduina. PWM znamená Pulse Width Modulation, velmi rychlým zapínáním a vypínáním pinů se LED diody ztlumí od 0 do 255. Každý pin bude zesílen FET. Prozatím má systém pouze jeden kanál na barvu, což znamená, že všechny RGB pásy budou ovládány najednou a jsou potřeba 3 PWM piny (jeden pro každou barvu). V budoucnu chci mít možnost ovládat každý ze svých čtyř RGB pásů. To znamená 4*3 = 12 pinů PWM (a pravděpodobně Arduino Mega). Dobře, čas na nějaké schémata! Toto (viz obrázek) je základní reprezentací obvodu (brzy bude hezčí). Součástí jsou také kapacitní senzory (zelená část). V zásadě existují tři komponenty, které je třeba vysvětlit:- FET Toto je zesilovač, o kterém jsem mluvil. Má bránu, zdroj a odtok. Zesiluje smysly malým proudem na bráně (připojené k Arduinu) a otevírá cestu pro pás RGB, který je napájen 12 volty. Zdroj by měl být na +12V, odběr na GND (uzemnění). Přesný pinout najdete v listu specifikací vašeho FET. Každý kanál RGB by měl být umístěn před svým vlastním FET. V tomto smyslu funguje jako přepínač ovládaný Arduinem.- RGB pásek Tento 12voltový RGB pás je běžného typu anody (+). To znamená, že společný vodič by měl být připojen k +12V a proud je potopen každým ze samostatných barevných kanálů. Pruh obsahuje rezistory, takže si s tím nemusíte dělat starosti!- Rezistory Tři 10k rezistory zajistí, že se FET nezapne, když se zapnout nemají. Tři další omezí maximální proud, který bude FET odčerpávat. První tři odpory jsou již v RGB pásku. Pájel jsem USB kabely k RGB páskům, abych je mohl snadno modulárně připojit. Na můj prkénko jsou umístěny zástrčky ze starého rozbočovače. Pokud chcete, aby běžel bez kabelu USB, použijte starý počítačový zdroj pro džus, 12 V pro napájení RGB pásu a případně 5 V pro obvod.

Krok 5: Mood Light - kód a ovládání

Náladové světlo je ovládáno kapacitními senzory. Pro změnu barvy jsem zatím naprogramoval pouze senzory 2 a 3. Ostatní senzory zatím nemají žádnou funkci. Zde 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 mezi piny 4 a 2, pin 2 je pin senzoru, přidat drát, fólieCapSense In2 = CapSense (2, 7); // 2M rezistor mezi piny 4 a 6, pin 6 je pin senzoru, přidat drát, fólieCapSense In3 = CapSense (2, 8); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidat drát, fólieCapSense In4 = CapSense (2, 12); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidat vodič, fólieCapSense In5 = CapSense (2, 13); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidejte vodič, fólii // PWM Pin deklaraceint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Další proměnnéint Color1 = 128; // začněte červenou barvou Brightness1 = 255; // začátek při plném jasu RedValue1, GreenValue1, BlueValue1; // Komponenty RGB se vyhýbají nastavení () {// nastavení hodnot časového limitu senzoru 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 (timeout);} 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ýšení barvy if (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // sníží barvu if (Color1 <0) {// Color1 = 255; } // převést odstín na rgb hueToRGB (Color1, Bright1); // zápis barev na piny PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkce pro převod barvy na její komponenty Red, Green a Blue. vyhnout se hueToRGB (int hue, int Bright) {unsigned int scaledHue = (hue * 6); nepodepsaný int segment = scaledHue / 256; // segment 0 až 5 kolem barevného kolečka bez znaménka int segmentOffset = scaledHue - (segment * 256); // pozice v segmentu unsigned int kompliment = 0; nepodepsané int předchozí = (jas * (255 - segmentOffset)) / 256; nepodepsané int další = (jas * segmentOffset) / 256; if (invertovat) {jas = 255-jas; kompliment = 255; prev = 255-předchozí; další = 255-další; } switch (segment) {case 0: // red RedValue1 = jas; GreenValue1 = další; BlueValue1 = kompliment; přestávka; případ 1: // žlutá RedValue1 = předchozí; GreenValue1 = jas; BlueValue1 = kompliment; přestávka; případ 2: // zelená RedValue1 = kompliment; GreenValue1 = jas; BlueValue1 = další; přestávka; případ 3: // azurová RedValue1 = kompliment; GreenValue1 = předchozí; BlueValue1 = jas; přestávka; případ 4: // modrá RedValue1 = další; GreenValue1 = kompliment; BlueValue1 = jas; přestávka; případ 5: // purpurová výchozí: RedValue1 = jas; GreenValue1 = kompliment; BlueValue1 = předchozí; přestávka; }}--- KONEC ---

Krok 6: Ambi Light - Arduino Side

Samozřejmě by bylo naprosto skvělé mít možnost ovládat náladové světlo z počítače. Například k vytvoření ambilight nebo zvukem řízené diskotéky. Tato část se zaměřuje na část ambilight, v budoucnu přidám další funkce. Neexistuje žádný další obvod, protože je vše k dispozici v Arduinu. Co budeme používat, jsou možnosti sériové komunikace a nějaký software 'Processing 1.0'. Připojte arduino k počítači pomocí kabelu USB (pokud jste do něj nahrávali náčrtky, již je). Pro arduino musíte přidat nějaký další kód pro sériovou komunikaci. Kód se přepne do režimu naslouchání a bude otáčet kapacitní senzory, pokud přijímá hodnoty RGB z počítače. Poté nastaví hodnoty RGB na piny PWM. Toto je prozatím můj konečný kód, zkontrolujte změny sami: --- Arduino Ambilight Code ---#include const boolean invert = true; const long timeout = 10000; long commStart = 0; char val; // Capacitive sensor declarationCapSense In1 = CapSense (2, 4); // 2M rezistor mezi piny 4 a 2, pin 2 je pin senzoru, přidat vodič, fólieCapSense In2 = CapSense (2, 7); // 2M rezistor mezi piny 4 a 6, pin 6 je pin senzoru, přidat drát, fólieCapSense In3 = CapSense (2, 8); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidat drát, fólieCapSense In4 = CapSense (2, 12); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidat vodič, fólieCapSense In5 = CapSense (2, 13); // 2M rezistor mezi piny 4 a 8, pin 8 je pin senzoru, přidejte vodič, fólii // PWM Pin deklaraceint PinR1 = 3; int PinG1 = 5; int PinB1 = 6; // Další proměnnéint Color1 = 128; // začněte barvou jako červená Brightness1 = 255; // začátek při plném jasu RedValue1, GreenValue1, BlueValue1; // Komponenty RGB se vyhýbají setup () {Serial.begin (9600); // zahájení sériové komunikace // nastavení hodnot časového limitu senzoru 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 (timeout);} 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 ()) {// Pokud jsou data k dispozici ke čtení, val = Serial.read (); // přečtěte si to a uložte do val commStart = millis (); if (val == 'S') {// Pokud je přijat počáteční znak, while (! Serial.available ()) {} // Počkejte na další hodnotu. RedValue1 = Serial.read (); // Jakmile bude k dispozici, přiřaďte. while (! Serial.available ()) {} // Stejné jako výše. GreenValue1 = Serial.read (); while (! Serial.available ()) {} BlueValue1 = Serial.read (); } Serial.print (RedValue1); Serial.print (GreenValue1); Serial.println (BlueValue1); } else if ((milis () - commStart)> 1000) {if (total2> 150) {Color1 ++; // zvýšení barvy if (Color1> 255) {// Color1 = 0; }} else if (total3> 200) {Color1--; // sníží barvu if (Color1 <0) {// Color1 = 255; }} hueToRGB (Color1, Bright1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // funkce pro převod barvy na její komponenty Red, Green a Blue. vyhnout se hueToRGB (int hue, int Bright) {unsigned int scaledHue = (hue * 6); nepodepsaný int segment = scaledHue / 256; // segment 0 až 5 kolem barevného kolečka bez znaménka int segmentOffset = scaledHue - (segment * 256); // pozice v segmentu unsigned int kompliment = 0; bez znaménka int předchozí = (jas * (255 - segmentOffset)) / 256; unsigned int další = (jas * segmentOffset) / 256; if (invertovat) {jas = 255-jas; kompliment = 255; prev = 255-předchozí; další = 255-další; } switch (segment) {case 0: // red RedValue1 = jas; GreenValue1 = další; BlueValue1 = kompliment; přestávka; případ 1: // žlutá RedValue1 = předchozí; GreenValue1 = jas; BlueValue1 = kompliment; přestávka; případ 2: // zelená RedValue1 = kompliment; GreenValue1 = jas; BlueValue1 = další; přestávka; případ 3: // azurová RedValue1 = kompliment; GreenValue1 = předchozí; BlueValue1 = jas; přestávka; případ 4: // modrá RedValue1 = další; GreenValue1 = kompliment; BlueValue1 = jas; přestávka; případ 5: // purpurová výchozí: RedValue1 = jas; GreenValue1 = kompliment; BlueValue1 = předchozí; přestávka; }}--- KONEC ---

Krok 7: Ambi Light - strana počítače

Na straně počítače je spuštěna skica Processing 1.0, viz processing.org. Tento malý (poněkud chaotický) program vypočítá průměrnou barvu obrazovky v každém okamžiku a odešle ji na sériový port. Je to zatím velmi základní a mohlo by to použít nějaké vylepšení, ale funguje to velmi dobře! V budoucnu jej aktualizuji pro několik samostatných pásů RGB a částí obrazovky. Můžete to také udělat sami, jazyk je docela přímočarý. Zde 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 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); // Vytiskněte seznam sériových portů pro účely ladění: println (Serial.list ()); // Vím, že první port v seznamu seriálů na mém mac // je vždy můj adaptér FTDI, takže otevírám Serial.list () [0]. // Na počítačích se systémem Windows se obecně otevře COM1. // Otevřete jakýkoli port, který používáte. Řetězec portName = Serial.list () [0]; myPort = new Serial (this, portName, 9600);} void draw () {// image (screenShot, 0, 0, width, height); screenShot = getScreen (); color kleur = barva (0, 0, 0); kleur = color (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); fill (kleur); rect (30, 20, 55, 55);} barevná barva (PImage img) {int cols = (img.width); int řádky = (obr. výška); int rozměr = (obr. šířka*obr. výška); int r = 0; int g = 0; int b = 0; img.loadPixels (); // Ga elke pixelové jazyky (dimenze) pro (int i = 0; i <(rozměr/2); i ++) {r = r+((obr. pixely >> 16) & 0xFF); g = g + ((obr. pixely >> 8) & 0xFF); b = b + (obr. pixely & 0xFF);} int průměr_r = r/(rozměr/2); int průměr_g = g/(rozměr/2); int průměr_b = b/(rozměr/2); barva mean_clr = barva (průměr_r, průměr_g, průměr_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élníku = nový Obdélník (0, 0, mode.getWidth (), mode.getHeight ()); BufferedImage desktop = new BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); zkuste {desktop = new Robot (gs [0]). createScreenCapture (bounds); } catch (AWTException e) {System.err.println ("Zachycení obrazovky se nezdařilo."); } return (new PImage (desktop));} --- END ---

Krok 8: Výsledek

Výsledek
Výsledek
Výsledek
Výsledek

A toto je výsledek, je to vlastně na spodní straně mé postele. Ještě potřebuji vyměnit látku, bude více rozptylovat světlo. Další obrázky k tomu brzy. Doufám, že se vám tento návod líbí a také doufám, že je základem vaší vlastní kreativity. Z časových důvodů jsem to napsal velmi rychle. Abyste tomu porozuměli, možná budete potřebovat nějaké základní znalosti arduino/elektroniky, ale plánuji to v budoucnu aktualizovat, pokud bude dobře přijato.

Doporučuje: