Hackster Inc.
Zmogljivost kapacitivnosti na konici prsta!
MPR121 je 12-pinski senzor dotika, ki uporablja kapacitivnost integriranega vezja.
Za ta IC obstajata 2 knjiÅŸnici, osebno raje uporabljam prevodno [1].
Komponente uporabljene v tem projektu
Hardverske komponente:
1x Arduino UNO
1x Adafruit kapacitivni senzor – MPR121
1x LED-ica
Softver:
Arduino IDE
Äip ima proÅŸilni prikljuÄek, ki vam omogoÄa, da veste, da se je enega od prikljuÄkov nekdo dotaknil ali ga je sprostil, kar vam omogoÄa odliÄen odzivni Äas in moÅŸnost uporabe prekinitve namesto skeniranja stanja v zanki – kot je prikazano v primeru. Edina slabost je, da imate samo en proÅŸilni prikljuÄek za vseh 12 prikljuÄkov IO IC. Naslov I2C lahko nastavite s pomoÄjo ADDR, ki je prikljuÄek za izbiro I2C naslova. Privzeto je z uporom 100k potegnjen navzdol na maso, tako da je naslov I2C 0x5A. Lahko ga poveÅŸete tudi na 3Vo prikljuÄek za naslov 0x5B, SDA prikljuÄek za naslov 0x5C ali SCL za naslov 0x5D. Ta nastavitev velja za ploÅ¡Äe Adafruit, nekatere klonirane ploÅ¡Äe imajo drugaÄne nastavitve naslovov I2C in privzete nastavitve. Äe ne veste, kateri naslov je za vaÅ¡o ploÅ¡Äo, lahko uporabite I2C skener.
Povezovanje ploÅ¡Ä je zelo preprosto, kot je prikazano na risbi.
Ena stvar, ki jo upoÅ¡tevajte – veÄina napajalnih ploÅ¡Ä je predvidenih za napajanje s 3,3 V, ne napajajte jih s 5 V. Kaj pa napetostni nivoji podatkov? Zaradi narave strojne opreme I2C ne boste poÅ¡kodovali MPR121 s 5 V Arduino logiÄnimi signali. Äe pa opazite teÅŸave pri branju z njega ali ga celo ne najdete na vodilu – poskusite uporabiti pretvornik logiÄnega nivoja med njima.
V preteklih letih sem naredil nekaj stvari s tem odliÄnim IC. Od prvih stvari, ki sem jih ustvaril, je bila igra za mojega otroka, Ärke na vrhu so povezane z dvema MPR121 in vsak dotik bo sproÅŸil MP3 zapis mene, ki povem ime Ärke.
Hkrati sem eksperimentiral tudi z golo prevodno barvo – to je zelo zabavno in odliÄno deluje z MPR121.
Program za utripanje LED-ice je enostaven in se nahaja spodaj:
#include<MPR121.h>
#include<Wire.h>
#define numElectrodes 2
#define LEDPIN 3
voidsetup()
{
Serial.begin(115200);
Serial.println(âSystem startedâ);
pinMode(LEDPIN, OUTPUT);
Wire.begin();
// 0x5C is the MPR121 I2C address on the Bare Touch Board
if (!MPR121.begin(0x5A)) {
Serial.println(âerror setting up MPR121â);
switch (MPR121.getError()) {
caseNO_ERROR:
Serial.println(âno errorâ);
break;
caseADDRESS_UNKNOWN:
Serial.println(âincorrect addressâ);
break;
caseREADBACK_FAIL:
Serial.println(âreadback failureâ);
break;
caseOVERCURRENT_FLAG:
Serial.println(âovercurrent on REXT pinâ);
break;
caseOUT_OF_RANGE:
Serial.println(âelectrode out of rangeâ);
break;
caseNOT_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();
}
voidloop()
{
if (MPR121.touchStatusChanged()) {
MPR121.updateTouchData();
for (inti=0; i<numElectrodes; i++) {
if (MPR121.isNewTouch(i)) {
if (i==0) {
digitalWrite(LEDPIN, HIGH);
}
} elseif (MPR121.isNewRelease(i)) {
if (i==1) {
digitalWrite(LEDPIN, LOW);
}
}
}
}
Povzeto po:
https://www.hackster.io/talofer99/turn-almost-any-surface-into-a-touch-button-with-mpr121-cc4205