Емкостное касание на брелке Adafruit M0 становится нестабильным при отсоединении USB-кабеля от ноутбука

Обратите внимание, что, чтобы добраться до этого момента, я использовал большую часть полезной информации из поста Как использовать емкостное касание на плате Adafruit в режиме Arduino?

Я использую брелок M0 с Arduino IDE с Adafruit_FreeTouch.библиотека h. Также использовал пример кода, найденный здесь

https://github.com/adafruit/Adafruit_FreeTouch/blob/master/examples/freetouch/freetouch.ino

Я изменил код, чтобы использовать вход A0 в качестве сенсорного датчика с проводом и алюминиевой фольгой. Использование FET на цифровом выходе A2 для включения или выключения вентилятора при касании фольги. Я использую небольшой настенный трансформатор 12 В постоянного тока (1,25 А), а затем преобразователь постоянного тока в постоянный для вывода 5 В постоянного тока для Trinket на BAT. 12 В постоянного тока также обеспечивает питание небольшого компьютерного вентилятора ( потребляет около 200 мА).

Схема и код отлично работают, когда USB-кабель от моего ноутбука подключен к брелку. НО когда я отсоединяю USB-кабель от брелка и прикасаюсь к датчику, все становится нестабильным. Вентилятор и встроенный светодиод включаются/выключаются случайным образом с интервалом от 0,5 сек до 2 сек.

Я перепробовал все различные параметры библиотеки, включая последовательный резистор, частоту дискретизации и частотные режимы. Я проверял основания несколько раз, и это действительно ставит меня в тупик. Я заподозрил шум вентилятора на ранней стадии, поэтому самый интересный эксперимент, который я пробовал до сих пор, ИМХО, заключается в том, чтобы отключить 12 В постоянного тока от вентилятора, но сохранить подачу преобразователя постоянного тока для 5 В на брелок, но встроенный светодиод имеет ту же нестабильность, что и при подключении вентилятора. Наконец, я использовал Arduino Uno для разработки кода и схемы ранее, и он отлично работал без подключения USB-кабеля. Я чувствую себя так близко. Любые предложения или идеи будут высоко оценены.

Вот мой код

/ touch - Capacitive touch demo using FreeTouch. Trinket M0 version.
// Note: the pin silkscreened 1 is Analog Pin 0.

#include "Adafruit_FreeTouch.h"

Adafruit_FreeTouch qt_1 = Adafruit_FreeTouch(A0, OVERSAMPLE_4, RESISTOR_0, FREQ_MODE_NONE);
int led = 13; // blink 'digital' pin 1 - AKA the built in red LED
int FAN = 2;  //

void setup() {
// initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  pinMode(FAN, OUTPUT);
  digitalWrite(led, LOW); 
  digitalWrite(FAN, LOW); 
  delay(50);
  // Initialize A0 as a touch sensor
  if (! qt_1.begin())  
    //Serial.println("Failed to begin qt on pin A0");
    digitalWrite(led, HIGH);    // Turn on the led 
}  
void loop() 
{
  int counter; 
  int result = 0; 
  counter = millis();
  result = qt_1.measure(); 
  if (result > 950) {
    digitalWrite(FAN, HIGH);    // Turn on the FAN
    digitalWrite(led, HIGH);    // Turn on the led
  }
  else {
      digitalWrite(FAN, LOW);    // Turn off the FAN
      digitalWrite(led, LOW);    // Turn off the led
  }
  delay(50);
}

Вот схема

schematic


Не уверен, правильно ли я поступаю, публикуя ответ?

Я не ожидал, что это будет так сложно! К сожалению, добавление предложения добавить конденсаторы ничего не изменило. Но ответ имеет смысл для меня, потому что, когда я думаю о том, почему он так хорошо работал на моей схеме разработки Arduino Uno, это могло быть связано с тем, что я использовал библиотеку емкостных чувств, в которой использовались два контакта, которые, насколько я понимаю, измеряли тип распада RC для достижения сенсорного восприятия.

Очень жаль, что Trinket работает по-другому. И мои навыки программирования недостаточно сильны, чтобы придумать аналогичное дизайнерское решение, как Arduino Uno RC sensing. Итак, я попробую идею в ответе, где я реализую сенсорный датчик “бок о бок с зазором” просто для обучения. Я часто видел эти сенсорные датчики в виде следов на печатной плате.

Но я должен поделиться тем, какова моя конечная цель дизайна. То есть сделать чувствительную к прикосновению художественную лампу со стальным корпусом. Лампы представляют собой диоды и диодные полосы, яркость которых будет регулироваться с помощью ШИМ-входа. Таким образом, нет необходимости в подключении переменного тока, кроме как для настенного трансформатора, который подает постоянный ток. Конструкция должна ощущать прикосновение всякий раз, когда кто-то касается любого места на корпусе лампы, чтобы SW мог имитировать трехпозиционный переключатель. Таким образом, разрыв “бок о бок” в этом приложении не работает. Я надеялся, что Trinket сработает, так как в моем Arduino proto все работало. И я действительно ищу решение для платы типа “маленькая” Trinket, которое поместилось бы в лампу. В прошлом я успешно реализовывал эту функциональность с лампами переменного тока, используя эти сменные модули сенсорной схемы для ламп с 3-полосным переключением переменного тока. Но для этого я хотел использовать светодиодные энергосберегающие источники света с микроконтроллером.

Я думаю, что попытаюсь исследовать “выделенные или дискретные” схемы сенсорного восприятия, которые могут дать мне цифровой ввод в брелок, когда прикосновение ощущается на корпусе лампы. Любые другие предложения/комментарии будут высоко оценены. Овации

, 👍0

Обсуждение

Что произойдет, если вы подключите заземление кабеля USB с помощью соединительного провода к заземлению источника питания 12 В без подключения кабеля USB?, @Jack O'Flaherty

Насколько я могу судить по схеме Trinker M0, при питании через VBUS или VBAT не должно быть никакой разницы. Итак, вот несколько предложений, которые вы могли бы попробовать: 1) добавьте электронный конденсатор емкостью 10 мкФ на выходе вашего преобразователя постоянного тока (т. Е. между 5 В и землей), 2) добавьте еще 0,1 мкФ между VBat и ЗЕМЛЕЙ рядом с выводом VBat. 3) Вы также должны добавить защитный диод (1N4148 или эквивалент) между вентилятором, подключив катод диода к +12 В, а анод к контакту 1 Q1. 4) уменьшите экспозицию или поверхность алюминиевой фольги, так как она может быть слишком чувствительной и действовать как антенна..., @hcheung

Вы пробовали поместить другую фольгу, подключенную к земле, рядом с чувствительной фольгой? Емкостные сенсорные датчики работают путем создания конденсатора между входным выводом и заземлением, емкость которого изменяется пальцем. Приведение к устройствам, расположенным рядом с фольгой, может помочь, @chrisl


1 ответ


1

Проблема, скорее всего, заключается в вашем источнике питания в сочетании с плохой конструкцией емкостной чувствительной системы.

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

Однако при использовании USB-источника питания у вас больше нет этого "чистого" подключения. Вместо этого ваше "заземление" проходит через отрицательный вывод USB в отрицательную шину USB-источника питания, который затем емкостно соединен с нейтралью сети через конденсатор "класса Y" через трансформатор (для устранения индуктивного шума переключения). Этот конденсатор обрабатывает довольно высокое напряжение и много шума, поэтому этот шум также отражается на "заземлении" USB, что означает, что заземление, которое вы используете в своем "конденсаторе" capsense, действительно довольно шумное. Достаточно шумно, чтобы сделать ваши показания бессмысленными. На некоторых ноутбуках вы можете даже заметить изменения при подключении зарядного устройства по сравнению с работой от батарей по той же причине. (Это также причина, по которой некоторые ранние алюминиевые ноутбуки Apple могут привести к поражению электрическим током, если вы используете их при подключении...)

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

Вам следует взять кусок картона и приклеить на него два куска фольги бок о бок с небольшим зазором между ними. Затем подключите один из них к заземлению Arduino, а другой-к вашему входному контакту. Затем откалибруйте свои показания, чтобы работать с новым устройством. Вы должны найти его гораздо более стабильным и надежным.

,