Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Arduino Lektion 86: kapazitives Touchpad MPR121

Posted on 6. Mai 20196. März 2024 by Stefan Draeger

In diesem Tutorial möchte ich ein kapazitives Touchpad „MPR121“ vorstellen.

kapazitives Touchpad MPR121

Das kapazitive Touchpad hat 10 Felder welche als Taster verwendet werden können.

  • Bezug
  • Technische Daten des kapazitiven Touchpad MPR121
  • Anschluss
    • Schaltung
      • Besonderheiten beim Betrieb von 2 Touchpads
    • Hinweis
  • Quellcode
    • Bibliothek MPR121 von Adafruit
    • Beispiel mit einem Board
      • Video
  • Beispiel mit 2 Boards
    • Sketch
    • Video
  • Fazit

Bezug

Das kapazitive Touchpad „MPR121“ kann für knapp 6,65 € bei ebay.de erworben werden.

Technische Daten des kapazitiven Touchpad MPR121

  • Betriebsspannung – 3.3V
  • Ausgang – I2C
  • Abmaße – 48 mm x 78 mm

Anschluss

Das kapazitive Touchpad „MPR121“ verfügt über 5 Pins welche wie folgt angeschlossen werden.

MPR121Arduino LeonardoArduino UNO
VCC3.3V3.3V
GNDGNDGND
SDASDAanaloger Pin A4
SCLSCLanaloger Pin A5
IRQbleibt frei*bleibt frei*

* Bei der Verwendung der Bibliothek von Adafruit wird dieser Pin nicht gesetzt. Es gibt jedoch andere Bibliotheken, da wird dieser Pin wiederum benötigt.

Schaltung

Im Folgenden möchte ich zeigen wie man das kapazitive Touchpad MPR121 an den Arduino Leonardo anschließt. Der Arduino Leonardo verfügt über die Fähigkeit, als USB HID zu dienen, d.h. der Mikrocontroller kann eine Tastatur & Maus emulieren.

kapazitives Touchpad MPR121 am Arduino Leonardo
kapazitives Touchpad MPR121 am Arduino Leonardo

Besonderheiten beim Betrieb von 2 Touchpads

Man kann theoretisch 4 MPR121 Boards an einem Mikrocontroller betreiben, jedoch ist bauartbedingt bei dem mir vorliegenden Modul nur möglich zwischen den Adressen 0x5A & 0x5B zu wählen.

Die Wahl der Adresse erfolgt durch das Setzen eines Lötpunktes auf dem Shield.

wahl der Adresse für ide I2C Kommunikation am kapazitiven Touchpad MPR121
wahl der Adresse für ide I2C Kommunikation am kapazitiven Touchpad MPR121

Hinweis

Es gibt im Internet ein Datenblatt (leider nur auf Englisch) zum Chip MPR121 unter https://www.sparkfun.com/datasheets/Components/MPR121.pdf dieses Datenblatt befasst sich jedoch nur mit dem Chip. Des Weiteren gibt es diverse andere Boards, welche den gleichen Chip haben jedoch zusätzlich einen ADDR Pin besitzen. Über diesen zusätzlichen ADDR Pin kann man die Adresse bei diesen Boards bestimmen, somit sind max. 4 Boards an einem I2C Bus lauffähig. In dem mir vorliegenden Board kann man wie bereits erwähnt die Adresse mittels Lötpunkt setzen und kann somit nur 2 Boards an einem I2C Bus verwenden.

Quellcode

Bibliothek MPR121 von Adafruit

Von der Firma Adafruit gibt es eine sehr gute Bibliothek, mit welcher ich das Board zum Laufen gebracht habe und vor allem kann man mit dieser Bibliothek mehr als ein Board am I2C Bus betreiben.

Bibliothek "MPR121" von Adafruit
Bibliothek „MPR121“ von Adafruit

Wie man eine Bibliothek in der Arduino IDE installiert, habe ich im gleichnamigen Tutorial Arduino IDE, Einbinden einer Bibliothek ausführlich erläutert.

Beispiel mit einem Board

Hier nun ein kleines Beispiel mit einem Board am Arduino Leonardo.

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

#ifndef _BV
#define _BV(bit) (1 << (bit)) 
#endif

Adafruit_MPR121 cap = Adafruit_MPR121();

void setup() {
  Serial.begin(9600);
  cap.begin(0x5A);
}

void loop() {
 uint16_t currtouched = cap.touched();  
  for (uint8_t i=0; i<12; i++) {
    if (currtouched & _BV(i)) {
      printTouchedBtn(i);
    }
  }
}

void printTouchedBtn(int btn){
  Serial.println(btn);
}

Als Grundlage zu diesem Sketch diente mir das Beispiel „MPR121test“ welches der Bibliothek beiliegt.

Video

Beispiel mit 2 Boards

Wie bereits erwähnt muss zunächst auf einem Board ein Lötpunkt für die Adresse 0x5B gesetzt werden. D.h. die beiden unteren Lötaugen werden verbunden.

kapazitives Touchpad MPR121 Adresse 0x5B gesetzt durch ein Lötpunkt
kapazitives Touchpad MPR121 Adresse 0x5B gesetzt durch ein Lötpunkt

Sketch

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

int numBoards = 0; 

Adafruit_MPR121 cap0 = Adafruit_MPR121();
Adafruit_MPR121 cap1 = Adafruit_MPR121();

uint16_t currtouched0 = 0;
uint16_t currtouched1 = 0;

void setup() {
  Serial.begin(9600);

  if (cap0.begin(0x5A)) {
    numBoards++;
  }
  
  if (cap1.begin(0x5B)) {
    numBoards++;
  }
}

void loop() {
  currtouched0 = cap0.touched();
  currtouched1 = cap1.touched();
  
  for (uint8_t i=0; i<12; i++) {
    if ((currtouched0 & _BV(i))) {
        printTouchedNumber(0, i);
    }
    
    if ((currtouched1 & _BV(i))) {
       printTouchedNumber(12, i);
    }
  }
}

void printTouchedNumber(int offset, int btn){
  Serial.print(btn+offset); 
  Serial.println(" touched");
}

Video

2x kapazitives Touchpad MPR121 am Arduino Leonardo
Dieses Video auf YouTube ansehen.

Fazit

Die Programmierung eines Boards ist relativ einfach gewesen, jedoch beim zweiten Board war es deutlich schwieriger, da hier das Datenblatt und die Beschreibungen zum Chip MPR121 Informationen liefern welche zu dem mir vorliegenden Shield nicht passen. Ich muss gestehen, das ich mich hier der Schwarmintelligenz bedient habe und einen Beitrag in der Facebook-Gruppe „Arduino Deutschland“ abgesetzt habe, dort wurde mir auf die Sprünge geholfen und ich habe herausgefunden das die beiden fast unscheinbaren Lötpunkte zum Setzen von Adressen sind.

Nachdem das Problem gelöst war, war der Rest schon wieder banal, den was mit einem Board funktioniert, funktioniert auch mit zwei, 🙂 hier war zu Nummer nur ein Offset von 12 zuzurechnen.

4 thoughts on “Arduino Lektion 86: kapazitives Touchpad MPR121”

  1. Robin sagt:
    2. August 2023 um 18:02 Uhr

    Entweder hat mein Touchpad einen Schaden, oder aber man kann das mit „billigen“ Arduino Klonen nicht so einfach nachstellen.
    Die Schleife rennt bei mir endlos durch, wenn ich das Beispiel-Programm lade, erscheint nur: check wiring.
    Obgleich ich das (meines Erachtens nach) sauber verlötet habe. Naja… Schade 😉
    Aber deine Arbeit war sehr hilfreich! Weiter so

    Antworten
    1. Stefan Draeger sagt:
      2. August 2023 um 18:56 Uhr

      Hi,

      ich verwende auch manchmal die günstigen China Klone, die funktionieren ähnlich gut.

      Gruß, Stefan

      Antworten
      1. Robin sagt:
        2. August 2023 um 23:01 Uhr

        ja, mein Modul scheint defekt zu sein. Habe einfach mal nach allen I2C Adressen gescannt. Und: no device attached.
        Werde das Teil nochmal neu ordern und hoffen, dass es dann funktioniert 😉

        Antworten
        1. Stefan Draeger sagt:
          3. August 2023 um 08:14 Uhr

          Hi,

          ggf. mal die Verkabelung prüfen, SDA muss an analog Pin A4 & SCL an A5.
          Und auch mal die Breadboardkabel mit einem Durchgangsprüfer checken, ich hatte schonmal ein kaputtes gehabt und der Fehler ist echt ärgerlich.

          Gruß, Stefan

          Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}