MPR121 - Touchsensor

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.

MPR121 Erweiterungs-Board

Features (laut Hersteller)

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

I²C-Adresse(n)

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

Verwendete Bauteile

Elektroden (Touch-Sensoren)

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.

Touch-Pad(s)

Vorschau der Touch-Pad(s)

Dieses Panel mit variabler Anzahl an Touch Pads kann an die eigenen Bedürfnisse angepasst werden.

touch_pad.scad
Bau des Touch-Sensors 1/3
Abb.: Touch-Sensor wird innen mit Kupferband beklebt.
Bau des Touch-Sensors 2/3
Abb.: Das gesamte Kupfer muss eine leitende Fläche ergeben, daher werden die einzelnen Bahnen zusammengelötet. Für den Anschluss am MPR121-Board wird ein Kabel mit 2,54mm-Stift angebracht.
Bau des Touch-Sensors 3/3
Abb.: Fertiger Berührungs-Sensor.

Anschlüsse

MPR121 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

Sketch

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);
   }
}
Ausgabe auf der seriellen Konsole

Anwendungen

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)

Touch-Wheel / Touch-Slider
zurück