Das hier beschriebene Erweiterungs-Modul basiert auf dem MPR121-Chip, der bis zu 12 kapazitive Elektroden (=Berührungssensoren) auswerten kann. Das Modul wird über den I²C-Bus am Arduino angeschlossen.
Betriebsspannung: | 1,71 V bis 3,6 V |
---|---|
Betriebsstrom: | 29 μA (16ms sampling); 3 µA (Stop mode) |
Eingänge: | 12 (8 davon als GPIOs für LEDs nutzbar; #4 bis #11) |
Betriebstemperatur: | -40°C bis +85°C |
Sonstiges: | Auto-Konfiguration und -kalibrierung für jeden Sensor-Eingang |
Die I²C-Adresse des MPR121 kann vier verschiedene (konfigurierbare) Werte annehmen,
je nachdem wie der ADD
-Pin verbunden ist. Daher ist es möglich mit einem
MPR121-Board bis zu 48 Elektroden (=4×12) gleichzeitig zu betreiben.
ADD Pin | I²C-Adresse |
---|---|
Nicht verbunden (default) | 0x5A |
Mit 3.3V verbunden | 0x5B |
Mit SDA verbunden | 0x5C |
Mit SCL verbunden | 0x5D |
Als Berührungssensoren kann man alle möglichen elektrisch leitenden Materialien
nehmen, z.B. Kabel oder Metallfolien. Man könnte z.B. Kupferklebeband auf die
Rückseite eine Papierstücks kleben.
Hier habe ich einen (konfigurierbaren) Mehrfach-Touchsensor mit dem
3D-Drucker ausgedruckt und im Inneren mit
Kupferklebeband beklebt.
Dieses Panel mit variabler Anzahl an Touch Pads kann an die eigenen Bedürfnisse angepasst werden.
touch_pad.scadMPR121 Pin | Bedeutung | Arduino Uno |
---|---|---|
GND | 0V/Ground | GND |
ADD | I²C-Adress-Pin | - |
SDA | Serial Data (I²C) | A4 |
SCL | Serial Clock (I²C) | A5 |
IRQ | "Interrupt Request": Wird auf HIGH (3,3V) gezogen und geht auf 0V, wenn der MPR121 eine Änderung in den Elektroden erkennt. | 4 |
3.3V | Spannungsversorgung | 3V3 |
Zum Testen des Moduls mit einer Elektrode wird an einen beliebigen Kanal (hier Pin #5) ein
Touch-Sensor angebracht und nach der o.g. Tabelle mit dem Arduino angeschlossen.
Die Library BareConductive/mpr121
erleichtert den Umgang mit dem Modul und wird für dieses Beispiel verwendet.
#include <MPR121.h>
#include <MPR121_Datastream.h>
#include <Wire.h/>
#define MPR121_ADDR 0x5A
#define MPR121_IRQ 4
#define ACTIVE_ELECTRODE 5
void setup()
{
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
if (!MPR121.begin(MPR121_ADDR)) {
Serial.println("Error init MPR121");
while (true);
}
MPR121.setInterruptPin(MPR121_IRQ);
MPR121.setFFI(FFI_10);
MPR121.setSFI(SFI_10);
MPR121.setGlobalCDT(CDT_4US);
delay(1000);
MPR121.autoSetElectrodes();
}
void loop()
{
MPR121.updateAll();
if (MPR121.isNewTouch(ACTIVE_ELECTRODE)) {
Serial.println("Electrode #" + String(ACTIVE_ELECTRODE) + " touched");
digitalWrite(LED_BUILTIN, HIGH);
} else if (MPR121.isNewRelease(ACTIVE_ELECTRODE)) {
Serial.println("Electrode #" + String(ACTIVE_ELECTRODE) + " released");
digitalWrite(LED_BUILTIN, LOW);
}
}
Im Datenblatt des MPR121 wird u.a eine Anwendungsmöglichkeit eine "Touch-Wheels" bzw. eines Touch-Sliders angegeben. So könnte eine Leiterbahnfür eine solche Anwendung aussehen. (die roten Bereiche sind leitendes Material)
zurück