Емкостный сенсор

Тема в разделе "Arduino & Shields", создана пользователем enclouder, 29 ноя 2015.

  1. enclouder

    enclouder Нерд

    Господа и, маловероятно, дамы, приветствую вас!
    Наткнулся в инете на одну шикарную статью по изготовлению емкостного сенсора из простейших компонентов:

    http://www.pjrc.com/teensy/td_libs_CapacitiveSensor.html
    [​IMG]

    Вместо медной ленты я использовал пищевую фольгу с алюминием.
    Отправляющий пин подключал через 220КОм, принимающий через 10Ом.
    Все работает, но! Работает только при непосредственном прикосновении, через слой бумаги приходится продавливать пальцем, через один слой офисного файлика - так же приходится продавливать чтоб получить контакт. На данном примере у товарища все работает через слой пластика.
    Увеличил сопротивление резисторов: отправляющий 40МОм, принимающий 220КОм. Результат абсолютно тот же.
    В скетче использовал код из примера библиотеки (тот, что указан по ссылке выше).

    Неужели вся проблема в том, что я использую фольгу, а не медь?
     
  2. Unixon

    Unixon Оракул Модератор

    Откалибровать не забыли?
     
  3. enclouder

    enclouder Нерд

    Что подразумеваете под "откалибровать"?
    При запуске в serial порту показывает значения 0 и 1, если не касаемся.
    Как только дотрагиваемся до фольги, значения мгновенно возрастают до 59 и 60.

    Хотя на видео, значения при касании значительно выше, как и значения в режиме ожидания касания.
    Скажите мне, что все дело только в фольге)
    Использовал фольгу и напрямую от резисторов и через медные провода длинной 10см. Результат без изменений.
     
  4. Unixon

    Unixon Оракул Модератор

    Очевидно, у ваших площадок получается другая емкость, особенно если вы меняете диэлектрик (воздух, бумага, полиэтилен и т.п.), и время разряда-заряда тоже изменяется. Вам нужно вместо "30" в вызове "capacitiveSensor(30);" использовать другое значение для ваших площадок, либо включить (не отключать в setup() ) автокалибровку, чтобы библиотека сама подстроила характерное время перезаряда емкости под ваши площадки.
     
  5. enclouder

    enclouder Нерд

    Использовал другое значение в вызове "capacitiveSensor(30", отключил автокалибровку. Все, чего смог добиться - при касании вместо 59 и 60, начали появляться цифры большим значением. Теперь это от 200 до 600. Но опять же - только при прикосновении. С бумагой или файликом - так же 0 эффекта. не говоря уже о пластике.

    Код (C++):
    #include <CapacitiveSensor.h>

    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);
       
    void setup()                  
    {
       //cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
       Serial.begin(9600);
    }

    void loop()                  
    {
        long start = millis();
        long total1 =  cs_4_2.capacitiveSensor(1000);

        Serial.print(millis() - start);
        Serial.print("\t");                
        Serial.println(total1);            

        delay(100);
    }
    Использовал калибровку и 1, и 300 и 500 и 1000.
     
  6. Unixon

    Unixon Оракул Модератор

    Изменение емкости без прикосновения намного меньше, чем с таковым, и оно у вас не регистрируется. Насколько я понял, способ измерения емкости здесь такой же, как и в Makey Makey, его мне на практике не удалось заставить работать бесконтактным образом.

    Попробуйте увеличить площадь сенсорной площадки.
     
  7. enclouder

    enclouder Нерд

    пробовал ещё изначально, на результат не влияет.
    А какой нибудь другой способ измерения емкости, который можно заставить работать бесконтактным образом, вы можете посоветовать?

    У кого ещё какие мысли на этот счет?
     
  8. Unixon

    Unixon Оракул Модератор

    Для измерения меньших емкостей, насколько я помню, используется несколько другая техника - емкость формируется между одной опрашиваемой площадкой и всеми остальными. Площадки по умолчанию подключены через 10кОм резисторы, но если контроллер не успевает, то сопротивление можно увеличить до 100кОм или даже до 1МОм. Площадки могут быть подключены к АЦП, тогда измеряется напряжение через фиксированное время, но можно обойтись и без этого, если измерять время перехода от 0 к 1 и/или обратно.

    Т.е. нет отдельно передающих и принимающих пинов, используется схема один пин - одна площадка. Пины динамически переключаются между режимами входов и выходов, а в режиме выхода между 0 и 1.

    Точное описание технологии можно найти у Atmel в документации по Proximity Sensors.
     
    Последнее редактирование: 30 ноя 2015
  9. Unixon

    Unixon Оракул Модератор

    Вот, почитайте.
     

    Вложения:

    Tomasina и enclouder нравится это.