Статьи » Разработки |
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 емкостных датчиков без мультитача не ограничивается. Что ещё можно на них реализовать, подскажет ваша фантазия, а помогут в реализации - навыки программиста.
Посмотрите еще эти статьи
Управляем вытяжкой на кухне пультом от телевизора на Arduino Вывод картинки на дисплей 128x64 Детектор микронаушников Ethernet shield w5100 таймер включения на веб странице Вывод различных данных на дисплей LCD 128x64 Обзор макетной платы 830 точек и модуля питания MB-102 Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 5112. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель |
Всего комментариев: 0 | |