Статьи » Разработки |
2020-02-23 в 09:40 (последнее изменение 2021-04-13 в 00:17)
Как известно, ардуинщики делятся на две категории: которые ещё не применяют модуль на микросхеме MPR121, потому что о нём не знают, и которые знают и применяют. Третьего не дано, ведь это очень удобная вещь. Мало того, что целых 12 кнопок позволяет подключить, заняв у Arduino всего две "ноги", так ещё и кнопки - емкостные, которые могут быть изготовлены самостоятельно из бросовых материалов, грубо говоря - хоть из "фольги от шоколадки", что пусть и частично, но компенсирует стоимость модуля. Более того, несколько модулей могут занимать всё те же две "ноги" Arduino совместно, нужно только перемычками задать им разные адреса - это классическое свойство шины I2C, о котором часто забывают. А ещё емкостные датчики, в отличие от широко применявшихся ранее сенсорных пластин, могут быть и покрыты слоем диэлектрика - реакция на прикосновение всё равно будет. И это решение значительно выгоднее плат серии Teensy, где ничего дополнительного для реализации той же функции не требуются. Но всё же, если модулей несколько, то получается довольно дороговато. А можно ли подключить к одному модулю в той раза больше емкостных датчиков, правда, ценой потери функции мультитача? Оказывается, можно, и автор сайта Arduino Project Hub под довольно необычным ником Arduino “having11” Guy рассказывает, как. Свой проект он выложил по адресу https://create.arduino.cc/project....-f98144 под лицензией GPL версии 3 или более новой на ваш выбор. Весь секрет - в вот такой сетке из полос фольги: Изготовить-то её несложно, чуть сложнее догадаться, как она работает. Нет, между собой горизонтальные полосы с вертикальными при прикосновении не соединяются. Друг от друга, как и от пальца пользователя, они должны быть изолированы всегда. Просто палец при поднесении к пересечению воздействует одновременно на две полосы: одну горизонтальную и одну вертикальную. И программа определяет, какое из 36 пересечений выбрал пользователь. А если прикоснуться одновременно, например, к двум пересечениям, возникнет неопределённость - поэтому в такой конфигурации мультитач и невозможен. Схему мастер показывает вот так: Это даже не Fritzing, это обычная фотография. Но по ней всё понятно. Учтите, что питать устройство необходимо напряжением в 3,3 В - от 5 В модуль выходит из строя. Библиотека MPR121 - скачать Далее - скетч: Код
#include <Wire.h>
#include "Adafruit_MPR121.h" Adafruit_MPR121 cap_sense = Adafruit_MPR121(); #define MPR121_ADDR 0x5A #define PRINT_DELAY 200 uint32_t sensedPoints[6][6]; volatile bool readFlag = false; // Rows are pin 0-5, cols are pins 6-11 /* Pin 6 | 7 | 8 | 9 | 10 | 11 0 | | | | | | ------|---|---|---|----|--- 1 | | | | | | ------|---|---|---|----|--- 2 | | | | | | ------|---|---|---|----|--- 3 | | | | | | ------|---|---|---|----|--- 4 | | | | | | ------|---|---|---|----|--- 5 | | | | | | ------|---|---|---|----|--- */ void setup() { Serial.begin(115200); while(!Serial); if(!cap_sense.begin(MPR121_ADDR)) { //Serial.println("Error setting up MPR121"); while(1); } attachInterrupt(digitalPinToInterrupt(2), updateSensedFlagSet, FALLING); //Serial.println("Ready to sense"); } void loop() { /*if(readFlag) { readFlag = false; updateSensed(); }*/ updateSensed(); printTable(); delay(PRINT_DELAY); } void printTable() { Serial.println("TABLE"); for(int i=0; i<6; i++) { for(int j=0; j<6; j++) { if(j != 5) Serial.print(String(sensedPoints[i][j]) + " | "); else Serial.println(String(sensedPoints[i][j])); } //if(i == 5) Serial.println("\n-------------------\n"); } } void updateSensedFlagSet() { readFlag = true; } void updateSensed() { //Serial.println("Reading"); for(uint8_t i=0; i<6; i++) { for(uint8_t j=0; j<6; j++) sensedPoints[i][j] = cap_sense.filteredData(i) * cap_sense.filteredData(j + 6); } //Serial.println("Table updated"); } При этом модуль может быть и другого производителя, не обязательно Adafruit, главное - на таком же чипе. В текущем виде программа выводит данные о прикосновениях в монитор последовательного порта. Вам же остаётся реализовать какой-нибудь проект - либо на ПК, смартфоне или планшете, подключённом к Arduino, либо на самом Arduino. Это может быть, например, научный калькулятор - 36 кнопок для него в самый раз, а мультитач не требуется: кнопку 2ndF или просто F надо нажимать не одновременно с другой, а перед ней. Ещё можно сделать синтезатор - одноголосный, зато трёхоктавный, что весьма удобно. Но чтобы возможности одноголосного синтезатора были достаточно широкими, следует предусмотреть в нём возможность выбора множества различных тембров - именно так часто компенсируют одноголосность, и слушатель часто даже не догадывается, что она есть. Разумеется, этими двумя примерами применение 36 емкостных датчиков без мультитача не ограничивается. Что ещё можно на них реализовать, подскажет ваша фантазия, а помогут в реализации - навыки программиста. Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 5470. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель |
Всего комментариев: 0 | |