Skip to main content

Grove - Sensor Táctil Capacitivo I2C de 12 Teclas V2 (MPR121)

El Grove - Sensor Táctil Capacitivo I2C de 12 Teclas V2 (MPR121) es un sensor táctil capacitivo de proximidad multicanal. Es un módulo 3 en 1 con las siguientes características: Detección de Capacitancia, Detección Táctil y Detección de Proximidad.

Detección de Capacitancia: Este módulo utiliza un esquema de detección de capacitancia de corriente DC constante. Puede medir capacitancias que van desde 10 pF hasta más de 2000 pF con una resolución de hasta 0.01 pF.

Detección Táctil: Una vez que se adquieren los datos de capacitancia del electrodo, el estado de toque/liberación del electrodo se determina comparándolo con el valor de línea base de capacitancia.

Detección de Proximidad: Una nueva característica del MPR121 es el sistema de detección de proximidad cercana. Esto significa que todos los electrodos del sistema pueden sumarse juntos para crear un solo electrodo grande.

Basado en el Freescale MPR121, este sensor tiene 12 electrodos completamente independientes con autoconfiguración incorporada. Gracias a la interfaz I2C, puedes detectar todas las señales de los 12 electrodos con solo un puerto Grove, y la dirección I2C es configurable por hardware, desde 0X5B hasta 0X5D. Esto también hace posible que múltiples Grove - Sensor Táctil Capacitivo I2C de 12 Teclas V2 (MPR121) se usen juntos para expansiones de canales en un solo sistema, puedes construir un sistema táctil que contenga máximo 36 electrodos.

Este sensor es una versión mejorada del Grove - Sensor Táctil I2C, para satisfacer las necesidades de Matsuzawa.Takashi (uno de nuestros clientes), hicimos la dirección I2C cambiable, e incluso más barata que la versión anterior. Así que si tienes alguna sugerencia sobre todos los Groves, por favor escríbenos. Siempre escucharemos tu voz, puede hacer otra mejora, incluso un nuevo grove. Por favor escribe amablemente tus sugerencias en la página Grove 100+.

Cambio de Versión

ElementoGrove - Sensor Táctil Capacitivo I2C de 12 Teclas V2Grove - Sensor Táctil I2C
Chip PrincipalMPR121MPR121
Dirección I2Ccambiable(0X5B ~ 0X5D)no modificable(0X5A)
Sensor Táctilx
Interfaz de Entradainterfaz de cocodriloConector Hembra DIP 2Pin
Rendimiento de CostoAltoBajo
Fecha de Lanzamiento11 de Septiembre de 201831 de Octubre de 2015

Características

  • ADC interno de 10 bits
  • Autocalibración independiente integrada para cada entrada de electrodo
  • Electrodos completamente independientes con autoconfiguración incorporada
  • Interfaz I2C, con salida de interrupción IRQ para avisar cambios de estado de electrodos
  • Dirección I2C configurable por hardware
  • 12 electrodos/entradas de detección de capacitancia en las cuales 8 son multifuncionales para control de LED y GPIO
  • Autoconfiguración de corriente de carga y tiempo de carga para cada entrada de electrodo
  • Umbrales de activación separados para toque y liberación para cada electrodo, proporcionando histéresis e independencia de electrodos

Especificación

ElementoValor
Voltaje de operación3.3V / 5V
Temperatura de operación-40°C a +85°C
Rango de Temperatura de Almacenamiento-40°C a +125°C
Rango de capacitancias10 pF a más de 2000 pF
Resolución0.01 pF
Corriente Fuente GPIO por Pin12 mA
Corriente Sumidero GPIO por Pin1.2 mA
InterfazI2C
Rango de dirección I2C0x5B,0x5C,0x5D
Dirección I2C por defecto0x5B

Aplicaciones

  • Periféricos de PC
  • Reproductores MP3
  • Controles Remotos
  • Teléfonos Móviles
  • Controles de Iluminación

Descripción General del Hardware

Mapa de Pines

Número de PinNombre del PinFunciónMultiplexado de pin
8CH0Canal0, Electrodo 0, entrada del valor de capacitancia-
9CH1Canal1, Electrodo 1, entrada del valor de capacitancia-
10CH2Canal2, Electrodo 2, entrada del valor de capacitancia-
11CH3Canal3, Electrodo 3, entrada del valor de capacitancia-
12CH4Canal4, Electrodo 4, entrada del valor de capacitanciaGPIO o controlador LED
13CH5Canal5, Electrodo 5, entrada del valor de capacitanciaGPIO o controlador LED
14CH6Canal6, Electrodo 6, entrada del valor de capacitanciaGPIO o controlador LED
15CH7Canal7, Electrodo 7, entrada del valor de capacitanciaGPIO o controlador LED
16CH8Canal8, Electrodo 8, entrada del valor de capacitanciaGPIO o controlador LED
17CH9Canal9, Electrodo 9, entrada del valor de capacitanciaGPIO o controlador LED
18CH10Canal10, Electrodo 10, entrada del valor de capacitanciaGPIO o controlador LED
19CH11Canal11, Electrodo 11, entrada del valor de capacitanciaGPIO o controlador LED
tip

Para los CH0 ~ CH11, una vez que se adquieren los datos de capacitancia del electrodo, el estado de toque/liberación del electrodo se determina comparándolo con el valor de línea base de capacitancia. Y puedes establecer el valor de línea base para cada canal por separado. Los Pin12 ~ Pin19 son multifuncionales, lo que significa que puedes configurarlos como GPIO o controlador LED, para más detalles, consulta la nota de aplicación de freescale AN3894.

caution

La almohadilla central está conectada al cable de dirección, puedes cambiar la dirección I2C cortando el cable y volviéndolo a soldar. Por la seguridad tuya y de otros, ten cuidado con el cuchillo o pistola de soldar que puedas usar.

Esquemático

Alimentación

El voltaje de operación del Freescale MPR121 es de 1.71V a 3.6V, sin embargo, el voltaje de Arduino es 3.3V o 5V. Para hacerlo compatible con el sistema de 5V, usamos un chip de conversión de voltaje para proporcionar 3.3V al Freescale MPR121.

Circuito cambiador de nivel bidireccional

Este es un circuito cambiador de nivel bidireccional típico para conectar dos secciones de voltaje diferentes de un bus I2C. El bus I2C de este sensor usa 3.3V, si el bus I2C del Arduino usa 5V, este circuito será necesario. En el esquemático anterior, Q1 y Q2 son MOSFET de Canal N 2N7002A, que actúan como un interruptor bidireccional. Para entender mejor esta parte, puedes consultar el AN10441

Plataformas Soportadas

ArduinoRaspberry Pi
caution

Las plataformas mencionadas anteriormente como compatibles son una indicación de la compatibilidad de software o teórica del módulo. Solo proporcionamos biblioteca de software o ejemplos de código para la plataforma Arduino en la mayoría de los casos. No es posible proporcionar biblioteca de software / código de demostración para todas las plataformas MCU posibles. Por lo tanto, los usuarios tienen que escribir su propia biblioteca de software.

Primeros Pasos

Jugar Con Arduino

En esta parte, te mostraremos cómo usar el Grove - Sensor Táctil Capacitivo I2C de 12 Teclas V2 (MPR121) como un sensor táctil, en cuanto a cómo configurarlo como un Sensor de Capacitancia o Sensor de Proximidad, por favor consulta la Hoja de Datos.

Hardware

Materiales requeridos

Seeeduino V4.2Base ShieldSensor Táctil I2C V2
enter image description hereenter image description hereenter image description here
Obtener Uno AhoraObtener Uno AhoraObtener Uno Ahora
note

1 Por favor conecta el cable USB con cuidado, de lo contrario podrías dañar el puerto. Por favor usa el cable USB con 4 cables en el interior, el cable de 2 cables no puede transferir datos. Si no estás seguro sobre el cable que tienes, puedes hacer clic aquí para comprar

2 Cada módulo Grove viene con un cable Grove cuando lo compras. En caso de que pierdas el cable Grove, puedes hacer clic aquí para comprar.

  • Paso 1. Conecta el Grove - 12 Key Capacitive I2C Touch Sensor V2 (MPR121) al puerto I2C del Base Shield.

  • Paso 2. Conecta el Grove - Base Shield al Seeeduino.

  • Paso 3. Conecta el Seeeduino a la PC mediante un cable USB.

note

Si no tenemos Grove Base Shield, también podemos conectar directamente este módulo al Seeeduino como se muestra a continuación.

SeeeduinoGrove-MPR121
5VRojo
GNDNegro
SDABlanco
SCLAmarillo

Software

note

Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Comenzando con Arduino antes de empezar.

  • Paso 1. Descarga la librería Grove touch sensor MPR121 desde Github.

  • Paso 2. Consulta Cómo instalar librería para instalar la librería para Arduino.

  • Paso 3. Reinicia el IDE de Arduino. Abre el ejemplo, puedes abrirlo de las siguientes tres maneras:

    1. Ábrelo directamente en el IDE de Arduino a través de la ruta: File --> Examples --> Grove touch sensor MPR121 --> MPR121_demo.

    2. Ábrelo en tu computadora haciendo clic en MPR121_demo.ino que puedes encontrar en xxxx\Arduino\libraries\Grove_touch_sensor_MPR121-master, XXXX es la ubicación donde instalaste el IDE de Arduino.

    3. O, puedes simplemente hacer clic en el icono en la esquina superior derecha del bloque de código para copiar el siguiente código en un nuevo sketch en el IDE de Arduino.

#include "Seeed_MPR121_driver.h"

Mpr121 mpr121;

u16 touch_status_flag[CHANNEL_NUM]={0};
void setup()
{
s32 ret=0;
Serial.begin(115200);
if(mpr121.begin()<0)
{
Serial.println("Can't detect device!!!!");
}
else
{
Serial.println("mpr121 init OK!");
}
delay(100);
}
void loop()
{
u16 result=0;
u16 filtered_data_buf[CHANNEL_NUM]={0};
u8 baseline_buf[CHANNEL_NUM]={0};

result=mpr121.check_status_register();

mpr121.get_filtered_reg_data(&result,filtered_data_buf);

for(int i=0;i<CHANNEL_NUM;i++)
{
if(result&(1<<i)) /*key i is pressed!!*/
{
if(0==touch_status_flag[i])
{
touch_status_flag[i]=1;
Serial.print("key ");
Serial.print(i);
Serial.println("pressed");
}
}
else
{
if(1==touch_status_flag[i])
{
touch_status_flag[i]=0;
Serial.print("key ");
Serial.print(i);
Serial.println("release");
}
}
}
delay(50);
}
  • Paso 4. Sube la demostración. Si no sabes cómo subir el código, por favor revisa Cómo subir código.

  • Paso 5. Abre el Monitor Serie del IDE de Arduino haciendo clic en Herramienta-> Monitor Serie. O presiona las teclas ctrl+shift+m al mismo tiempo. Establece la velocidad de baudios a 115200.

tip

Si todo va bien, obtendrás el resultado. Cuando toques los pads CH0 ~ CH11, se activará key ?pressed y key ?release

mpr121 inmpr121 init OK!
key 11pressed
key 11release
key 10pressed
key 10release
key 0pressed
key 0release
key 2pressed
key 2release

Jugar con Raspberry Pi

Hardware

  • Paso 1. Componentes utilizados en este proyecto:
Raspberry piGrove Base Hat para RasPiSensor Táctil I2C V2
enter image description hereenter image description hereenter image description here
Consigue UNO AhoraConsigue UNO AhoraConsigue UNO Ahora
  • Paso 2. Conecta el Grove Base Hat al Raspberry.
  • Paso 3. Conecta el Grove - 12 Key Capacitive I2C Touch Sensor V2 (MPR121) al puerto I2C del Base Hat.
  • Paso 4. Conecta el Raspberry Pi a la PC a través del cable USB.

Software

caution

Si estás usando Raspberry Pi con Raspberrypi OS >= Bullseye, tienes que usar esta línea de comandos solo con Python3.

  • Paso 1. Sigue Setting Software para configurar el entorno de desarrollo.
  • Paso 2. Descarga el archivo fuente clonando la librería grove.py.
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • Paso 3. Ejecuta el siguiente comando para ejecutar el código.
cd grove.py/grove
python3 grove_12_chan_touch_sensor_MPR121.py

A continuación se muestra el código grove_12_chan_touch_sensor_MPR121.py.

import time
from grove.i2c import Bus


TOUCH_SENSOR_DEFAULT_ADDR = 0x5b

MODE_CONFIG_REG_ADDR = 0x5e
GLOBAL_PARAM_REG_ADDR_L = 0x5c
TOUCH_STATUS_REG_ADDR_L = 0x00
SET_DEBOUNCE_REG_ADDR = 0x5b

FILTERED_DATA_REG_START_ADDR_L = 0x04
CHANNEL_NUM = 12

STOP_MODE = 0
NORMAL_MODE = 0x3c

class TouchSensorMpr121():
def __init__(self,bus_num = 1,addr = TOUCH_SENSOR_DEFAULT_ADDR):
self.bus = Bus(bus_num)
self.addr = addr
self.threshold = 0
self.touch_flag = [0]*CHANNEL_NUM

def sensor_init(self):
self._set_mode(STOP_MODE)
data = [0x23,0x10]
self._set_global_param(data)
self._set_debounce(0x22)
self._set_mode(NORMAL_MODE)

def set_threshold(self,threshold):
self.threshold = threshold

def wait_for_ready(self):
time.sleep(.2)

def _set_mode(self,mode):
self.bus.write_byte_data(self.addr,MODE_CONFIG_REG_ADDR,mode)

def _set_global_param(self,data):
self.bus.write_i2c_block_data(self.addr,GLOBAL_PARAM_REG_ADDR_L,data)

def _set_debounce(self,data):
self.bus.write_byte_data(self.addr,SET_DEBOUNCE_REG_ADDR,data)

def _check_status_register(self):
data_status = self.bus.read_i2c_block_data(self.addr,TOUCH_STATUS_REG_ADDR_L,2)
return data_status

def get_filtered_touch_data(self,sensor_status):
result_value = []
for i in range(CHANNEL_NUM):
time.sleep(.01)
if(sensor_status & (1<<i)):
channel_data = self.bus.read_i2c_block_data(self.addr,FILTERED_DATA_REG_START_ADDR_L+2*i,2)
result_value.append(channel_data[0] | channel_data[1]<<8 )
else:
result_value.append(0)
return result_value

def listen_sensor_status(self):
data = self._check_status_register()
touch_status = data[0] | (data[1]<<8)
touch_result_value = self.get_filtered_touch_data(touch_status)

for i in range(CHANNEL_NUM):
if(touch_result_value[i] < self.threshold ):
touch_result_value[i] = 0
return touch_result_value

def parse_and_print_result(self,result):
for i in range(CHANNEL_NUM):
if(result[i] != 0):
if(0 == self.touch_flag[i]):
self.touch_flag[i] = 1
print("Channel %d is pressed,value is %d" %(i,result[i]))
else:
if(1 == self.touch_flag[i]):
self.touch_flag[i] = 0
print("Channel %d is released,value is %d" %(i,result[i]))



mpr121 = TouchSensorMpr121()
def main():
mpr121.sensor_init()
mpr121.set_threshold(0x60)
mpr121.wait_for_ready()
while 1:
result = mpr121.listen_sensor_status()
mpr121.parse_and_print_result(result)
time.sleep(.1)

if __name__ == '__main__':
main()
tip

Si todo va bien, obtendrás el resultado. Cuando toques las almohadillas CH0 ~ CH11, se activará channel # pressed y Channel # released con los valores de presión correspondientes.

>>> %Run grove_12_chan_touch_sensor_MPR121.py
Channel 8 is pressed, value is 308
Channel 8 is released, value is 0
Channel 9 is pressed, value is 170
Channel 9 is released, value is 0
Channel 10 is pressed, value is 340
Channel 8 is pressed, value is 180

Visor Esquemático Online

Recursos

Proyecto

Este es el video de introducción de este producto, demostraciones simples, puedes intentarlo.

Piano de Hojas: Hicimos un piano usando un sensor táctil, así como hojas para las teclas del piano.

Jugar con Scratch: ¿Cómo jugar un juego de scratch con un Sensor Táctil?

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...