In diesem Blog Eintrag möchte ich euch zeigen wie ihr einen Kapazitiven Sensor mit dem Touch Sensor MPR121 und einem Arduino selber bauen könnt. Zusätzlich werde ich euch auch noch den Mini MP3 Player vorstellen und zeigen wie dieser angesteuert werden kann.
Kapazitiver Touch Sensor MPR121
Der MPR121 ist ein Mikrochip der bis zu 12 kapazitive Elektroden auswerten kann. Das Breakout Board wird über den I2C Bus an dein Arduino angeschlossen. Dank dem I2C ist kein aufwändiges verkabeln notwendig und die Ansteuerung ist mit der geeigneten Library auch sehr einfach zu realisieren. Der MPR-121 kann über den Adress-Pin adressiert werden. Das heisst, du kannst bis zu MPR121 Breakoutboards an einem I2C Bus betreiben. Somit könntest du also 4x12 48 Elektroden auslesen und auswerten. Als Elektroden kannst du leitende Materialen verwenden oder auch organische die leicht leitend sind. Z.B. Obst und Gemüse :-). Ich setze oft auch Kupferklebeband ein. Das kannst du z.B. auch auf die Rückseite eines Papieres kleben und wenn du dann das Papier auf der anderen Seite berührst, kann diese Berührung ausgewertet werden.
Adressierung und Adressen vom MPR121
ADD Pin MPR121 | I2C Adresse |
Nicht verbunden | 0x5A |
Mit 3V verbunden | 0x5B |
Mit SDA verbunden | 0x5C |
Mit SCL verbunden | 0x5D |
Verwendete Arduino Librarys
Ich verwende zum Ansteuern eine Library die ich auf Github gefunden habe und die perfekt für diesen Touch Sensor funktioniert. Ihr findet die Library unter folgendem Link:
https://github.com/BareConductive/mpr121
Die Library ist grundsätzlich selbsterklärend. Ihr müsst nur die Adresse verändern auf 0x5A und könnt gleich loslegen. Je nachdem was für Elektroden ihr einsetzt, müsst ihr zuerst noch den Schwellwert einstellen, ab wann das eine Berührung erkannt wird, und diese wieder zurückgesetzt wird. Dies macht ihr mit folgenden zwei Befehlen:
MPR121.setTouchThreshold(50); // Schwellwert erkennen von Berührung
MPR121.setReleaseThreshold(20); // Schwellwert erkennen loslassen, muss kleiner sein als Berührung
Dies Sensordaten Aktualisiert ihr mit dem Befehl:
MPR121.updateTouchData(); // Touch Daten aktualisieren
Dieser Befehl muss vor jedem auswerten ausgeführt werden, sonst habt ihr alte Messdaten.
Der Zustand einer Elektrode oder Taste kann mit dem Aufruf abgefragt werden:
MPR121.isNewTouch(0); // Pin 0 vom Touch Sensor abfragen (Pin 0 bis 11 möglich)
Kommt als retour Wert 1 zurück wurde die Taste Betätigt und bei 0 wurde keine Berührung erkannt.
Mini MP3 Player Modul
Der Mini MP3 Player ist grundsätzlich ein vollwertiger MP3 Player mit Verstärker. Der Player kann auch autonom ohne Arduino betrieben werden, indem die Playtaste usw. direkt angeschlossen werden. In unserem Beispiel möchten wir den MP3 Player aber über ein Arduino ansteuern. Die Ansteuerung könnte auch ohne Library gemacht werden, jedoch habe ich eine sehr schöne Library gefunden die uns die Ansteuerung noch mehr erleichtert. Du findest die Library auf Github unter folgenden Link:
https://github.com/DFRobot/DFPlayer-Mini-mp3
Arduino Kommunikation mit MP3 Modul
Die Kommunikation zum MP3 Player erfolgt über den Serial Hardware Anschluss des Arduino. Wichtig ist das ihr hier noch zwei Serielle 1k Ohm Widerstände einbaut damit es nicht zu überströmen führt.
SD Karte und Abspielen von MP3 Files
Für den MP3 Player brauchst du noch eine formatierte micro SD Karte. Auf der Micro SD Karte legst du einen Ordner mit der Bezeichnung MP3 an. In diesen Ordner kannst du nun ein *.mp3 File ablegen. Wenn du die Files z.B. 0001.mp3 oder 0002.mp3 usw. anlegst, kannst du die MP3 Files über die Nummer abspielen. Der Player kann bis zu 2999 MP3 Files abspielen. Um z.B. das File 0001.mp3 abzuspielen, kannst du folgenden Befehl zum Abspielen nutzen:
mp3_play (1); // MP3 File im MP3 Ordner mit der Bezeichnung 0001.mp3 abspielen
Lautsprecher
Der Lautsprecher darf nicht mehr als 3W haben. Ich setze für mein Beispiel einen 0.25W Lautsprecher ein der schon sehr laut ist. Ihr könnt hier aber auch einen kleinen Verstärker anschliessen oder auch einfach nur ein Kopfhörer. Die Lautstärke könnt ihr im Bereich von 0 bis 30 mit folgendem Befehl verstellen:
mp3_set_volume (30); // Lautstärke im bereich 0 bs 30 verstellen
Link für Kostenfreie Sound Effekte:
Hier noch ein paar hilfreiche links die ich zum finden von Sound Effekten und erstellen der MP3 Files genutzt habe.
Sasmmlung von Sound Effekten: https://www.freesound.org/
MP3 File Konverter: https://www.freac.org
Schaltplan MPR121 und MP3 Player mit Arduino
Hier noch ein Schaltplan / Schema wie ihr den Touch Sensor und das MP3 Sound Modul an das Arduino UNO anschliessen könnt.
Programm Beispiel für Arduino UNO
Das Programm so wie die Librarys, Schaltpläne und MP3 files könnt ihr auch komplett von unserem FTP Server herunterladen unter folgendem Download Link:
Bastelgarage_FTP_Arduino_MPR121_Capacitive_Touch_MP3.zip
/**************************************************************************************************
**************************************************************************************************
** www.bastelgarage.ch **
** Der Onlineshop mit Videoanleitungen und kompletten Bausätzen für Anfänger und Profis! **
**************************************************************************************************
**************************************************************************************************
** Programm Beispiel zum Ansteuern von unserem mini MP3 Player mit einem Kapazitiven **
** Touch Sensor MPR121. Wichtig ist beim MP3 Player Modul, dass die MP3 Files in einem **
** Ordner mit dem Namen MP3 abgelegt sind. Die MP3 Files können dann über ihre Nummer **
** abgespielt werden. **
** Beim Touch Sensor könnt ihr bis zu 12 Elektroden anschliessen und als Tasten nutzen. **
** Ideale Elektrode ist ein Kupferklebeband. Ihr könnt aber auch Obst oder sonstige **
** Gegenstände nutzen. Probiert es einfach aus. Je nachdem was für eine Elektrode du **
** hast, musst du die Schwellwerte noch anpassen. **
** **
** Für den MPR121 Touch Sensor habe ich folgende Library von GitHub genutzt: **
** https://github.com/BareConductive/mpr121/tree/public/MPR121 **
** **
** Für den MP3 Player habe ich folgende Library von GitHub genutzt: **
** https://github.com/DFRobot/DFPlayer-Mini-mp3 **
** **
** Autor: Philippe Keller **
** Datum: November 2016 **
** Version: 1.0 **
* ************************************************************************************************
*/
/******************************(Importieren der genutzten Bibliotheken)***************************/
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <MPR121.h>
#include <Wire.h>
/*********************************(Definieren der Globale Variablen)******************************/
#define numElectrodes 12 // Anzahl der Elektroden 12
/**********************************************(Setup)********************************************/
void setup () {
Serial.begin (9600);
mp3_set_serial (Serial); // Setzen des Serialport zum MP3 Player
delay(1); // 1ms warten zum Setzen von der Lautstärke
mp3_set_volume (30); // Lautstärke 0~30
MPR121.begin(0x5a); // MPR121 Kapazitiv Touch mit Adresse 0x5a initialisieren
MPR121.setInterruptPin(4); // MPR121 Kapazitiv Touch Interrupt Pin definieren
MPR121.setTouchThreshold(50); // Schwellwert erkennen von Berührung
MPR121.setReleaseThreshold(20); // Schwellwert erkennen loslassen, muss kleiner sein als Berührung
MPR121.updateTouchData(); // Touch Daten aktualisieren
}
/*****************************************(Hauptprogramm)*****************************************/
void loop () {
if (MPR121.touchStatusChanged()) {
MPR121.updateTouchData();
if (MPR121.isNewTouch(0)) mp3_play (1); // Wenn Touch 0 betätigt MP3/1.mp3 File abspielen
if (MPR121.isNewTouch(1)) mp3_play (2); // Wenn Touch 1 betätigt MP3/2.mp3 File abspielen
if (MPR121.isNewTouch(2)) mp3_play (3); // Wenn Touch 2 betätigt MP3/3.mp3 File abspielen
if (MPR121.isNewTouch(3)) mp3_play (4); // Wenn Touch 3 betätigt MP3/4.mp3 File abspielen
if (MPR121.isNewTouch(4)) mp3_play (5); // Wenn Touch 3 betätigt MP3/4.mp3 File abspielen
if (MPR121.isNewTouch(5)) mp3_play (6); // Wenn Touch 3 betätigt MP3/4.mp3 File abspielen
if (MPR121.isNewTouch(6)) mp3_play (7); // Wenn Touch 3 betätigt MP3/4.mp3 File abspielen
}
DebugMPR121(); //Für Analyse vom MPR121 kann auch auskommentiert werden
}
/*************************************(Funktion zum Debuggen)*************************************/
void DebugMPR121() {
// Dient zum Bestimmen der Schwellwerten oder sonstigen Analysen
MPR121.updateBaselineData(); //Daten aktualisieren
MPR121.updateFilteredData(); //Daten aktualisieren
Serial.print("DIFF: ");
for (int i = 0; i < 12; i++) { // 12 Anzahl Elektroden
Serial.print(MPR121.getBaselineData(i) - MPR121.getFilteredData(i), DEC);
if (i < 11) Serial.print(" ");
}
Serial.println();
}

Hey,
Thank you for this tutorial ! very interesting. Following yours I am making a small circuit using two mpr121, I would love to include the mpr121 in my fritzing sketch. Would you share your MPR121 fritzing file ?
Thanks again,
Audrey

Hello,
Unfortunately I can't merge the library with Arduino nano and keep coming back to not being valid. Do you know why this?

Hi,
leider kann ich die Library nicht einbinden bei Arduino kommt immer wieder dass es keine gültige ist. Weißt du woran das liegt?

Hallo, ich versuche gerade genau deine anleitung umzusetzen für ein Teil meines Projektes. Allerdings bekomme ich es einfach nicht zum Laufen scheinbar wegen den Librarys. Wenn ich es mit den aktualisierten versionen der librarys versuche wird mir gesagt das die funktionen nicht deklariert sind. Kannst du mir da helfen oder hast eine aktuelle version von diesem code mit passenden librarys?
Viele dank schon mal, Sabrina

Schön, ein solches Projekt mit Ihnen zu teilen, vielen Dank. Ich habe eine Frage an Sie, Ich möchte das gleiche Projekt wie du machen, aber ich brauche mehrere Ordner und vielleicht zwei Knöpfe, um Ordner zu wechseln. Kannst du mit dem Code helfen?

Hallo George, Mittlerweile gibt es eine neuere Library mit der du MP3 in verschiedenen Ordner abspielen kannst. Du findest die Library unter folgendem Link: https://github.com/DFRobot/DFRobotDFPlayerMini Getestet habe ich es bisher noch nicht. Was willst du den genau Bauen?