Сенсорные кнопки на любой поверхности с MPR121 емкостным сенсором
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO | 1 |
| Adafruit Capacitive Touch Sensor Breakout — MPR121 | 1 |
| Светодиод (любой) | 1 |
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
MPR121 — это 12-пиновый сенсор касания, использующий емкостные способности чипа.
Существует 2 библиотеки для этого чипа, я лично предпочитаю использовать библиотеку Bare Conductive: GitHub
У чипа есть пин прерывания (trigger), позволяющий узнать, что один из пинов был затронут или отпущен, обеспечивая отличное время отклика и возможность использовать прерывание вместо опроса состояния в цикле. Недостаток — только один пин прерывания на все 12 IO пинов чипа.
I2C-адрес настраивается через пин ADDR. По умолчанию он подтянут к земле резистором 100кОм, адрес 0x5A. Можно подключить к 3.3В для 0x5B, к SDA для 0x5C или к SCL для 0x5D. Настройки для плат Adafruit, клоны могут иметь другие адреса. Используйте I2C-сканер, если адрес неизвестен.
Подключение плат просто, как показано на схеме.
Важно: большинство breakout-плат питано от 3.3В — не питайте от 5В. Уровни данных I2C: из-за природы I2C 5В Arduino не повредят MPR121, но если есть проблемы с чтением или обнаружением на шине — попробуйте логический преобразователь уровней.
За годы я сделал несколько вещей с этим отличным чипом. Один из первых проектов — игра для ребенка: буквы на верху подключены к 2 MPR121, каждое касание воспроизводит MP3-запись названия буквы.
Также экспериментировал с проводящей краской Bare Conductive — очень весело и отлично работает с MPR121.
Код
Простое включение/выключение светодиода на пине 0/1 (Arduino)
Демонстрирует включение и выключение светодиода на пине 3. Использует пин 0 касания MPR121 для включения и пин 1 на отпускание для выключения.
#include <MPR121.h>
#include <Wire.h>
#define numElectrodes 2
#define LEDPIN 3
void setup() {
Serial.begin(115200);
Serial.println("System started");
pinMode(LEDPIN, OUTPUT);
Wire.begin();
// 0x5C — адрес MPR121 на Bare Touch Board, 0x5A — стандарт для Adafruit
if (!MPR121.begin(0x5A)) {
Serial.println("error setting up MPR121");
switch (MPR121.getError()) {
case NO_ERROR: Serial.println("no error"); break;
case ADDRESS_UNKNOWN: Serial.println("incorrect address"); break;
case READBACK_FAIL: Serial.println("readback failure"); break;
case OVERCURRENT_FLAG: Serial.println("overcurrent on REXT pin"); break;
case OUT_OF_RANGE: Serial.println("electrode out of range"); break;
case NOT_INITED: Serial.println("not initialised"); break;
default: Serial.println("unknown error"); break;
}
while (1);
}
MPR121.setInterruptPin(4);
MPR121.setTouchThreshold(40);
MPR121.setReleaseThreshold(20);
MPR121.updateTouchData();
}
void loop() {
if (MPR121.touchStatusChanged()) {
MPR121.updateTouchData();
for (int i = 0; i < numElectrodes; i++) {
if (MPR121.isNewTouch(i)) {
if (i == 0) digitalWrite(LEDPIN, HIGH);
} else if (MPR121.isNewRelease(i)) {
if (i == 1) digitalWrite(LEDPIN, LOW);
}
}
}
}
Схемы

Производственный процесс
- Обнаружение молний с Raspberry Pi и AS3935: практическое руководство
- Отслеживание ежедневных упражнений хомяка с Raspberry Pi фитнес-трекером
- Начало работы с IoT и MQTT: урок без кода для ESP8266
- Бесшовная I2C-интеграция Arduino и Raspberry Pi 2 для IoT-проектов с датчиками
- Революционное ДНК-хранилище превращает повседневные предметы в долговечные архивы данных
- Гуманоцентрическая трансформация цепочки поставок: повышение эффективности и устойчивости
- Умный токарный станок: передовые сенсорные управления для точной обработки
- OmniFibers: Умная ткань, регулирующая дыхание для производительности и восстановления
- От концепции к реальности: превращение креативных дизайнов в осязаемые продукты
- Изучение преимуществ ЧПУ фрезерно-токарной обработки (Mill-Turn)