Kapacitív érzékelő ingadozásának csökkentése az RGB Led közelségben

Kapacitív érzékelő ingadozásának csökkentése az RGB Led közelségben

Tartalomjegyzék:

Anonim

Ez egy meglehetősen specifikus instructable, hogyan lehet beágyazni egy kapacitív érzékelőt más vezetékek közvetlen közelében, itt egy RGB. Egy olyan projekt részeként, amellyel dolgozom, egy kapacitív érzékelőn keresztül vezetett RGB-t akarok vezérelni. Van azonban egy probléma: a kék és a zöld több energiát vonz, mint a vörös, és az elektromos áramlás által létrehozott indukció (azt hiszem) a kapacitív érzékelőt befolyásolja. Az alábbiakban bemutatott megoldást bármi másra is lehet alkalmazni, egyszerűen úgy, hogy a "színspektrumot" az "eszköz lehetséges állapotaira", például a hangszóró decibeljeire cseréli.

Míg 0-2000 értéket olvasok a "hand closyy" értékekre, a leolvasások 0 és 1000 között ingadoznak, attól függően, hogy a közeli LED-ek milyen színt adnak (az erejük, amit rajzolnak). A fenti grafikonon a vízszintes tengely a színspektrum összes színét ábrázolja, míg a függőleges tengely a kapacitív érzékelő értékeit mutatja, míg a közelben nincs semmi. A kék vonal a "stabil állapot" értékeket mutatja. A legmagasabb tüske cián, ahol mind a zöld, mind a kék aktiválódik. Nyilvánvaló, hogy ez az első látszólag véletlenszerű ingadozás lehetetlenné teszi a közeli gesztusok ellenőrzését.

A grafikon narancssárga vonala a szórás, ami kb. 0,5% körül van, ami azt jelzi, hogy az ingadozásokat határozottan a színspektrum okozza, és így nem mindegyik véletlenszerű.

Az egyik megoldás az lenne, ha a vezetést néhány milliszekundumra letiltaná, mérjük és újra engedélyezzük; de ez csökkenti a fénykibocsátást, így jobb megoldásnak kell lennie. Ehelyett beállítunk egy sor értéket, amely elválik a leolvasásoktól, attól függően, hogy milyen színt kapunk. Ez hatékonyan stabilizálja a leolvasott kimenetet anélkül, hogy befolyásolná a led kimenetet.

kellékek:

1. lépés: Adatok gyűjtése a színes spektrumon keresztül

Ehhez az instructablehoz az ebben az útmutatóban megadott Arduino kódot használom:

http: //www.instructables.com/id/How-to-Make-Prope …

Amely szinusz hullámot használ a színspektrumon keresztül. Ha van saját kódja, ami ugyanúgy működik.

Először gyűjtjük az adatmintát a soros monitoron keresztül. Csatlakoztassa a projektet és nyomtassa ki a következőket a soros monitoron:

  • Színérték, amely a színes kerékpáros kódban 1 lépésenként számít, itt 1-től 360-ig terjed.
  • A Kapacitív érzékelő mért értéke

Most hagyd, hogy a projekted párszor átadja a színeket. 100 iteráció után véget ért az enyém. Mindent másoljon egy excel fájlba, helyezze el az egymás melletti értékeket színnel és átlagolja őket. Ezután térképezd ezeket az értékeket egy grafikonba és voila! A színspektrumon belüli jelenlegi különbségek okozta magadban minden olyan hibás kapacitív érzékelő értéket, amelyik a hibás. Ezt kézzel is megteheti, de ez a kicsit az Excel makró jelentősen megkönnyíti a folyamatot (feltételezve, hogy 100x360 színértéket illesztett be az A oszlopba és beillesztette a mért értékeket a B oszlopba):

Sub Macro1 ()

Dim k As Long

A k = 1-től 100-ig terjedő tartományban ("B" & ((k * 360) + 1) & ":" & "B" & ((k * 360) + 360).).Offset (0, 1).Válassza az ActiveSheet.Paste Next End Sub-t

2. lépés: A leolvasások javítása az Arduino kódban

Most, hogy a hiba pontos értékei vannak, egyszerűen kivonhatjuk őket a Kapacitív érzékelő leolvasásunkból, és az eredmény nagyon közel lesz a nulla körüli szép, egyenes vonalhoz. Amint az első grafikonon látható, a 100 leolvasásom standard szórása ~ 0,5%, így a vonal leginkább -50 és +50 között ingadozik.

Ezek kivonásához állítsa be az olvasások átlagainak tömbjét:

const uint16_t K_values ​​360 = {

110, 112, 114, 116, 119, 121, 122, 124, 125, 126, 127, 127, 126, 125, 124, 123, 122, 120, 119, 117, 116, 116, 116, 116, 116, 118, 120, 123, 126, 130, 135, 141, 149, 157, 166, 176, 186, 197, 208, 220, 234, 249, 264, 281, 297, 312, 327, 338, 349, 363, 374, 383, 392, 401, 411, 415, 418, 420, 423, 425, 424, 419, 420, 423, 423, 425, 426, 428, 427, 424, 422, 421, 422, 421, 419, 418, 421, 419, 417, 412, 407, 403, 396, 386, 380, 372, 362, 351, 338, 326, 314, 302, 288, 272, 258, 244, 229, 217, 206, 194, 182, 172, 161, 151, 143, 135, 127, 121, 116, 111, 106, 103, 101, 99, 99, 98, 99, 101, 104, 106, 109, 111, 114, 116, 119, 120, 121, 123, 124, 124, 123, 121, 119, 116, 112, 109, 106, 103, 99, 96, 93, 91, 88, 87, 86, 86, 88, 91, 95, 100, 105, 111, 116, 123, 132, 141, 152, 163, 175, 186, 199, 212, 225, 238, 254, 279, 311, 341, 386, 428, 477, 527, 577, 628, 678, 729, 781, 833, 884, 931, 968, 998, 1029, 1044, 1059, 1067, 1074, 1079, 1081, 1078, 1071, 1062, 1053, 1040, 1024, 1004, 978, 939, 894, 846, 796, 748, 693, 643, 596, 548, 499, 451, 404, 359, 317, 283, 259, 241, 227, 213, 197, 186, 172, 160, 149, 138, 127, 119, 113, 108, 102, 98, 96, 92, 91, 90, 90, 92, 94, 97, 101, 104, 107, 111, 113, 116, 119, 122, 124, 127, 128, 129, 128, 128, 126, 125, 122, 120, 116, 114, 111, 108, 105, 102, 100, 98, 97, 97, 98, 99, 101, 102, 104, 107, 109, 112, 115, 119, 123, 128, 133, 137, 143, 148, 155, 163, 172, 182, 194, 206, 219, 230, 241, 253, 262, 272, 283, 293, 303, 312, 319, 325, 331, 334, 338, 335, 337, 340, 342, 346, 348, 349, 349, 348, 347, 345, 342, 339, 336, 331, 332, 330, 325, 319, 313, 304, 294, 285, 276, 264, 253, 243, 233, 222, 212, 201, 190, 180, 170, 159, 152, 146, 140, 134, 129, 124, 120, 116, 112, 109, 107, 104, 102, 100, 99, 98, 98, 97, 98, 99, 101, 103, 106, 109};

Ezután, miközben a színes spektrumon halad, a következő kódban a "k" a 0 és 360 közötti időérték-ciklus, jelezve, hogy milyen színt vetít a LED. Tehát egyszerűen vonja le őket:

hosszú CurrentReading = 0;

hosszú ProjectedReading = 0;

érvénytelen hurok () {

(int k = 0; k <360; k ++) {CurrentReading = CSMain.capacitiveSensor (20); // az aktuális olvasást

ProjectedReading = korlátozás (CurrentReading-K_values ​​k, 0,20000); // az átlagolt értéket, amelyet ezen a színen "k" mérett, a jelenlegi "k" -ból az aktuális olvasatból levonni.

sineLED (0, k); // Aktiválja a LED-et a színk késleltetéshez (30); // Később a szebb kerékpározásért}}

Összességében nullára korlátozom az értékeket, mert a negatív értékek haszontalan ingadozást jelentenek a projektemben, és általában csak nehéz dolgozni. Előfordulhat, hogy egy extra -100-ra becsapja a standard eltérést.

Meg kell jegyezném, hogy mind a K_values ​​leolvasás, mind a CurrentReadings esetében az elmúlt tíz eredményt egyre átlagolva átlagolom őket, mert ez jobb stabilitási szintet biztosít az imo számára. Ez nem igazán szükséges, de hasznosnak tartom. A kódot itt találja:

Továbbá, ha a projekt rövid a memóriában, ezek a tömbök sok helyet foglalnak el. A részleteket nyerhetjük el, hogy megnyerjük a teret azáltal, hogy mindent felosztunk 5-nél (256 alatti értékek leképezése) és egy 8 bites tömböt egy 16 bites tömb helyett; utána ismételten kiírja a kódban szereplő értékeket. Nem hiszem, hogy ez hatással lenne a teljesítményre.

Ez az! Élvezze a mostani stabil olvasmányait!