Kapacitív érintés érzékelő


Nagy a választék a különböző arduinohoz kapcsolható touch szenzorokból mi most az egyik legújabb típust, a 12 érintő gombot kezelni tudó MPR121 érzékelőt ismertetjük. I2C adatátvitelt támogatja ezért 2 csatornán keresztül kezelhető.
Az MPR121-es panelok 4 cím csappal megcímezhetők így akár 4panelt, 48érintkezőt is felfűzhetünk az I2C protokoll segítségével.

A kártya tartalmaz egy 3V-os szabályzót így csatlakoztatható 3V-os és 5V-os mikrokontrollerekhez is. A kártyára visszajelző led is be van ültetve, ami bármelyik touch szenzor érintésénél villogni kezd, ez egy kicsit megkönnyíti a hibakeresést.

A panelba érdemes tüskesort forrasztani a könnyebb kezelhetőség érdekében, az érintő lapokat rézfóliából jó kialakítani, de az alufólia is megfelel erre a célra. Az érzékelőket és a panelt vezetékekkel kössük össze amiket mind két ponton forraszunk.

Csatlakozó pontok:

Vin -- Dc bemenet a panelen elhelyezett 3V-os fesz szabályzónak köszönhetően 3-5V között megtáplálható.

3Vo -- 3,3V-os kimeneti feszültség 100mA-ig terhelhető.

GND -- közös föld

SCL -- I2C órajel csatlakozás

SDA -- I2C adatsor csatlakozás

ADDR -- Cím választó pin, alapesetben ezt húzuk a földre egy 100k-os ellenállással

IRQ -- megszakítás kezelő, ha az ic változást észlel az érintkezőkön akkor a pin 0V-ra áll amíg az I2C adatátvitel folyik,passzív állapotban 3,3V-ra van felhúzva.

Kapcsolás:

Kapcsolás:

Vin - Arduino 5V

Gnd - közös föld

SCL - Uno: A5, Mega: digit.21, Leonardo/Micro: digit.3

SDA - Uno: A4, Mega: digit.20, Leonardo/Micro: digit.2

ADDR - földre csatlakoztatva cim: 0x5A

         - 3V-ra kötve cim: 0x5B

         - SDA-ra kötve cim: 0x5C

         - SCL-re kötve a cím: 0x5D.


Könyvtár:

Töltsük le az Adafruit_MPR121 könyvtárat a https://github.com/adafruit/Adafruit_MPR121_Library oldalról.
Csomagoljuk ki, nevezzük át Adafruit_MPR121-ra majd másoljuk be az Arduino/ libraries könyvtárba.
Indítsuk újra az Arduino IDE-t.

Kód:

Nyissuk meg a File/Minták/Adafruit_MPR121 -> MPR121test sketch-ét. Ellenőrizzük és töltsük fel.
A program a soros monitort használja, először kapunk egy "MPR121 found!" üzenetet(megvan az érzékelő).
Ezután érintsük meg a 12 touch érzékelőt az ujjunkkal, evvel aktiváljuk az érintkezőket ezáltal a panel meg tudja különböztetni a megérintett érzékelőt a szabadtól.


#include <Wire.h>
#include "Adafruit_MPR121.h"


// I2C átvitel beállitása ha üres érték, akkor az alapértelmezett 0x5A

Adafruit_MPR121 cap = Adafruit_MPR121();


uint16_t lasttouched = 0;//elhagyott touchhoz változó
uint16_t currtouched = 0;//megérintett touchhoz változó


void setup() {
Serial.begin(9600);
Serial.println("Adafruit MPR121 Capacitive Touch sensor test");
//ha nem érzékeli a 0x5A cimen az eszközt akkor hibaüzenetet ad.
if (!cap.begin(0x5A)) {
Serial.println("MPR121 not found, check wiring?");
while (1);
}
Serial.println("MPR121 found!");//felismert eszköz
}


void loop() {
// jelenleg megérintett touch érzékelése
currtouched = cap.touched();


for (uint8_t i=0; i<12; i++) {
//érintés érzékelése
if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
Serial.print(i); Serial.println(" touched");
}
// elengedés érzékelése
if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
Serial.print(i); Serial.println(" released");
}
}

// állapotok törlése
lasttouched = currtouched;

return;

// debugging info, what
Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
Serial.print("Filt: ");
for (uint8_t i=0; i<12; i++) {
Serial.print(cap.filteredData(i)); Serial.print("\t");
}
Serial.println();
Serial.print("Base: ");
for (uint8_t i=0; i<12; i++) {
Serial.print(cap.baselineData(i)); Serial.print("\t");
}
Serial.println();

// várakozás a felülírásra
delay(100);
}