Как использовать capactive touch на плате Adafruit в режиме Arduino?

У меня есть брелок M0, который имеет три контакта, способных к емкостному касанию, A0, A3 и A4. При использовании CircuitPython на этих платах можно использовать библиотеку CapTouch. Но, насколько я могу судить, это не существует для использования в режиме Arduino. Кто - нибудь знает, как заставить эти контакты воспринимать емкостное прикосновение? Я пробовал библиотеку Adafruit_FreeTouch, но с нулевой документацией это не очень удобно. Я думал, что он работает с двумя штифтами, но когда оба штифта обнаруживают емкость, емкость делится между ними, поэтому оба штифта сообщают об одной и той же емкости.

Любая помощь будет очень ценна.

Этот вопрос действительно кажется дублированным встроенным емкостным сенсорным обнаружением с помощью платы разработки SAMD21 (Arduino Zero Compatible), но никогда не было решения.

Спасибо!

, 👍1

Обсуждение

пробовали ли вы пример кода, входящего в состав библиотеки Adafruit_FreeTouch?, @jsotola

посмотрите на страницу 861 таблицы ... http://ww1.microchip.com/downloads/en/DeviceDoc/SAM_D21_DA1_Family_DataSheet_DS40001882F.pdf ... сенсорные контакты могут использоваться дискретно или в матричной конфигурации, @jsotola


1 ответ


Лучший ответ:

5

Пример кода для емкостного касания на брелке M0. Примечание: обязательно установите библиотеку Adafruit FreeTouch.

// сенсорная демонстрация емкостного касания с использованием FreeTouch. Trinket версии M0.
// Примечание: вывод с шелкографическим экраном 1 является аналоговым выводом 0.

#include "Adafruit_FreeTouch.h"

Adafruit_FreeTouch qt_1 = Adafruit_FreeTouch(A0, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE);

void setup() 
{
  // Initialize A0 as a touch sensor
  if (! qt_1.begin())  
    Serial.println("Failed to begin qt on pin A0");
}

void loop() 
{
  int counter, result = 0; 
  counter = millis();
  result = qt_1.measure(); 
  Serial.print("QT 1: "); Serial.print(result);
  Serial.print(" (");  Serial.print(millis() - counter); Serial.println(" ms)");
  Serial.println("\n*************************************"); 
  delay(200);
}

Информацию о параметрах конструктора можно найти по адресу: https://forums.adafruit.com/viewtopic.php?f=8&p=610501 и перефразированы ниже, если ссылка отключится.

Параметры конструктора следующие:

p - Входной вывод, подключенный к датчику.

t - Величина избыточной выборки входных данных. Одно из следующих:

OVERSAMPLE_1
OVERSAMPLE_2
OVERSAMPLE_4
OVERSAMPLE_8
OVERSAMPLE_16
OVERSAMPLE_32
OVERSAMPLE_64

Передискретизация-это процесс проведения нескольких измерений, нахождения среднего значения и отчетности об этом вместо фактических показаний. Это позволяет снизить уровень шума, но также повышает точность измерений. Среднее значение шума равно нулю (если бы его не было, это был бы источник свободной энергии), поэтому, чем больше показаний вы складываете вместе, тем ближе ошибка шума в измерениях приближается к нулю.

Однако есть еще один побочный эффект добавления шума к измерениям: он приводит к искажению выходного сигнала датчика относительно реального входного значения. Если у меня есть оконный компаратор, который измеряет только "ниже 1 В" и "выше 2 В", и подает сигнал на 1,1 В плюс пару вольт шума, я могу ожидать увидеть около десяти выходов "ниже 1 В" для каждого выхода "выше 2 В". Шум толкает сигналы выше и ниже пороговых значений, но исчезает, если я беру среднее значение достаточно большой выборки. По статистике, для такого улучшения разрешения 10:1 потребуется около 64 показаний, чтобы сделать ошибку шума достаточно малой, чтобы ее можно было игнорировать.

Однако передискретизация занимает больше времени, поэтому всегда есть компромисс между тем, сколько вы можете сделать, и тем, как долго сигнал будет оставаться стабильным.

r - значение резистора, который будет разряжать сенсорную панель. Одно из следующих:

RESISTOR_0
RESISTOR_20K
RESISTOR_50K
RESISTOR_100K

режим f - частоты. Одно из следующих:

FREQ_MODE_NONE
FREQ_MODE_HOP
FREQ_MODE_SPREAD
FREQ_MODE_SPREAD_MEDIAN

Для систем, которые проводят повторные измерения, существует один вид шума, который в среднем не достигает нуля: шум, возникающий с той же частотой, что и частота дискретизации. Существуют всевозможные видео, которые показывают эффект синхронизации камеры с вещью, которую она записывает.. это особенно приятно: https://www.youtube.com/watch?v=uENITui5_jU

Для емкостных датчиков такие вещи, как индуцированный сигнал от флуоресцентных ламп, могут создавать шум, и если частота лампы немного отличается от частоты дискретизации, сенсорная система подумает, что это похоже на серию прикосновений.

(Если у вас есть осциллограф, зажмите кончик зонда между пальцами и поместите руку примерно в футе от флуоресцентной лампы.)

Один из способов предотвратить это-изменить частоту дискретизации. Вы можете перемещать его вверх и вниз по предсказуемой схеме, переходить с одной частоты на другую или добавлять случайное дрожание. Библиотека QTouch Atmel поддерживает все эти опции, но " НЕТ " (показания с фиксированной частотой) является самым простым.

,

Да, FreeTouch-это ответ., @River