Blog (83)
Komentarze (2k)
Recenzje (1)

Arduino — wykrywamy dotyk z modułem MPR121

@cyrylloArduino — wykrywamy dotyk z modułem MPR12119.03.2017 15:39

Od dłuższego czasu tworzę przeróżne projekty z wykorzystaniem układów Atmega, Attiny gotowych płytek Arduino oraz popularnych Raspberry Pi czy Banana PRO nie tylko hobbistycznie ale również komercyjnie. Tworzyłem dla klientów sterowniki węzłów ciepłowniczych z wykorzystaniem Raspberry Pi z komunikacją RS485 jak również inteligentne słupy oświetleniowe. Ostatni projekt dla muzeum wymagał zrobienia dotykowych paneli po dotknięciu których miały reagować i wykonywać pewne rzeczy. Tak przy okazji tego zlecenia zainteresowałem się biblioteką CapacitiveSensor czyli pojemnościowym sensorem mówiąc po polsku. Lecz nie do końca ta biblioteka rozwiązała mój problem, dlatego poszukałem dalej i zainteresowałem się układem MPR121.

Jako, że w moim przypadku z panelami dla muzeum biblioteka CapacitiveSensor nie spełniła do końca moich jak i klienta oczekiwań poszukałem gotowych modułów dotykowych i tak po poszukiwaniach w sklepie Botland.com.pl znalazłem ciekawe moduły oparte na układzie MPR121. Skontaktowałem się ze sklepem i udało mi się otrzymać 4 takie moduły do testów. Oprócz tego poprosiłem również o moduł mp3 DFplayer aby można było po reakcji na dotknięcie odegrać jakieś dźwięki.

Moduł MPR121 produkcji Adafruit dostarczane są z zestawem goldpinów, które można samemu przylutować.Jest to dobre rozwiązanie bo przy niektórych projektach dobrze jest przylutować bezpośrednio kabelki dzięki czemu moduł nie ma większej wysokości. Moduł komunikuje się za pomocą protokołu I2C i może być zasilany jak również pracuje z napięciem 3.3V (domyślnie)oraz 5V dzięki wbudowanemu konwerterowi napięcia co umożliwia nam pracę z nim zarówno na Arduino jak i Raspberry Pi.

  • VIN - Napięcie zasilania od 3 V do 5V
  • GND - Masa układu
  • SCL - Linia zegarowa magistrali I2C
  • SDA -Linia danych magistrali I2C
  • ADDR - Zmiana adresu magistrali I2C
  • IRQ - wyjście przerwań
  • 3Vo - dodatkowe wyjście 3V

Do dyspozycji mamy 12 pinów odczytujących dotyk za pomocą wyliczania oporności dotykanego elementu. Za pomocą pinu ADDR możemy ustawić 4 różne adresy urządzenia co daje nam możliwość użycia 4 takich modułów MPR121 co daje nam łącznie 48 możliwości odczytów.

  • ADDR niepodłączone: 0x5A
  • ADDR podłączone do 3V: 0x5B
  • ADDR podłączone do SDA: 0x5C
  • ADDR podłączone do SCL: 0x5D

Na module mamy też dodatkowe złącze GND oraz wyjście 3V dzięki czemu możemy podłączyć do niego kolejny moduł lub inne urządzenie. Moduł ma małe zapotrzebowanie na energię i zużywa maksymalnie wg specyfikacji 29 µA.

Jako, że jest to moduł od znanego producenta Adafruit to został przez ich pracowników przygotowany przewodnik użytkownika wraz z biblioteką w serwisie GitHub dla użytkowników Arduino i Raspberry Pi. My dzisiaj zajmiemy się obsługą modułu za pomocą Arduino.

Biblioteka do obsługi modułu jest dostępna w domyślnym repozytorium bibliotek w Arduino IDE 1.6+ wybierając odpowiednio Szkic>Dołącz bibliotekę>Zarządzaj bibliotekami... i wpisując w oknie wyszukiwarki mpr121 a następnie naciskamy przycisk instaluj. Po poprawnym zainstalowaniu biblioteki możemy podłączyć moduł do naszego Arduino. Ja wykorzystam Arduino UNO i stworzymy prosty układ z samego modułu MPR121 i kabelkami. Wykorzystamy do tego gotowy przykład dla tej biblioteki aby zaprezentować działanie układu.

Schemat podłączenia modułu do Arduino jest prosty bo wystarczą nam tylko 4 kabelki. 2 kabelki zasilania i 2 kabelki do komunikacji I2C. Oczywiście wlutuje dostarczone goldpiny do modułów aby łatwiej wszystko podłączyć.

[1/2]
[2/2]

Poniżej przedstawiam podłączenie modułu do Arduino UNO. Uno posiada złącza I2C na pinach A4 (SDA) i A5 (SCL). Niektóre moduły Arduino UNO głownie nieoryginalne posiadają wyprowadzone złącza I2C dodatkowo.

Schemat podłączenie modułu MPR121 do Arduino UNO
Schemat podłączenie modułu MPR121 do Arduino UNO

Do złącz 0-11 na module MPR121 możemy podłączyć nawet zwykłe kabelki lub nawet jakieś płytki lub folie aluminiowe (cokolwiek co przewodzi prąd).

W Arduino IDE otwieramy przykład biblioteki mpr121 Pliki>Przykłady>Adafruit MPR121>MPR121test

[1/2]
[2/2]

Sam kod nie jest długi i przedstawię wam go pokrótce poniżej bez zbędnych komentarzy. Jedyne co zmodyfikowałem to zakomentowałem funkcje return abyśmy mogli zobaczyć jakie dostajemy wartości przy odczytach pinów (debugowanie).



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

Adafruit_MPR121 cap = Adafruit_MPR121();

uint16_t lasttouched = 0;
uint16_t currtouched = 0;

void setup() {
  while (!Serial);        

  Serial.begin(9600);
  Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); 
   //inicjacja połączenia modułu mpr121 pod adresem 0x5A
  if (!cap.begin(0x5A)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  }
  Serial.println("MPR121 found!");
}

void loop() {
// odczytanie stanów pinów
  currtouched = cap.touched();

  for (uint8_t i=0; i<12; i++) {
    // Porównujemy stanprzeszły i obecny 
    // następnie sprawdzamy czy się wartości zmniejszyly
       if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" touched");
    }
    // Porównujemy san obecny i przeszły
   // następnie sprawdzamy czy się wartości zwiekszyły
       if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" released");
    }
  }
 //przypisywanie obecnych stanów do ostatnich
  lasttouched = currtouched;

  //return;

  // Informacje debugowania
  Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
  Serial.print("Filt: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.filteredData(i)); Serial.print("\t");
  }
  Serial.println();
  Serial.print("Base: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.baselineData(i)); Serial.print("\t");
  }
  Serial.println();

  // put a delay so it isn't overwhelming
  delay(100);
}

Wynik powyższego kodu można zobaczyć na poniższym nagraniu wideo

Program można modyfikować wg naszego uznania i dawać polecenia naszemu Arduino aby wykonywał różne reakcje na dotknięcia panelów jak również na jego puszczanie.

W następnym wpisie opiszę obsługę modułu MP3 DFPlayer, a w kolejnym zrobię i zaprezentuję ciekawe projekt z wykorzystaniem modułu MPR121 i MP3. Po prostu muzyka musi grać ;)

Bardzo dziękuje sklepowi botland.com.pl za dostarczenie modułów do testów.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.