«Датчик пальца» на Arduino. Вопросы…


[Лирическое отступление]Эх.. Не так я себе представлял свой первый пост на этом сайте, но увы. Со времён микроэлектроники в университете прошло уже достаточно времени, чтобы забылись основы.[/Лирическое отступление]

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

А дальше подробнее и вопросы.

Суть датчика и его «обоснование» можно прочесть по ссылке на Хабре.
На Ардуине я изобразил это так:

Сопротивление стоит 600 кОм.

Дальше собственно скетч.

///////////////////
// TouchBlinker  //
//     v1.0      //
///////////////////
int tPin      = 4;  //Пин, на который мы посылаем сигнал
int pPin      = 3;  //Пин, который выполняет роль приёмника
int ledPin    = 9;  //Пин, к которому подключён светодиод

int freedelay = 0;

//-----------------
void setup() 
{
  pinMode(pPin, OUTPUT);
  pinMode(tPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
GetDelay();
}

int GetDelay()
{
  int t1=0;  //Время, когда посылаем сигнал
  int t2=0;  //Время, когда сигнал пришёл на контрольный пин
  int dt=0;  //Задержка
  
  t1=micros();
  digitalWrite(pPin,HIGH);         //Посылаем сигнал на сенсор
  while(digitalRead(tPin)==LOW);   //Ждём, пока сигнал дойдёт до контрольного пина
  t2=micros();                     
  dt=t2-t1;                        //Задержка
  Serial.println(dt);              //Выводим
  digitalWrite(pPin,LOW);         //Обнуляем сенсор
  return dt;    
}

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

Но этого не происходит.
В консоль стабильно выпадает 12-20 микросекунд.

Вобщем-то, главный вопрос — почему оно не реагирует на касание, хотя должно?))
Буду признателен, если кто-нибудь откликнется и попробует помочь разобраться.


4 комментария на «“«Датчик пальца» на Arduino. Вопросы…”»

  1. хм… только что проверил ваш скетч. Всё работает 🙂
    Только в loop() добавил после вызова функции GetDelay(); небольшую задержку:

    delay(10);

    Вот что выдаётся в порт без касания:

    16
    16
    16
    16
    16
    16
    16
    16
    16
    

    а вот, что выдаётся при прикосновении к проводу:

    2080
    116
    12
    80
    148
    12
    1172
    4672
    176
    12
    460
    152
    12
    780

    так что остаётся просто усреднить и вперёд 🙂

    • С Capacitive Sensing Library срабатывание почётче будут… Там на мегаомном резюке — без касания — еденицы с касанием тыщщи лезуть…

    • Спасибо за ссылку. Посмотрел и нашёл очень схожим с тем, что читал на хабре) Понятно теперь откуда товарищ брал обоснование) Попробую на этой библиотеке собрать. Хотя, думаю, что алгоритм тот же будет)

    • Спасибо за помощь!
      Поставил паузу, всё равно не заработало. Закрались подозрения. Пересобрал макет, в итоге всё начало работать. Проводок, который шёл к пальцу оказался перебитым…
      Впрочем, радовался я недолго, т.к. минут через 30 после того как всё заработало, задержка при касании стала мало чем отличаться от задержки в холостом режиме.
      Грешу на «дребезг контактов». На выходных посажу всё на пайку и поставлю мегаомный резистор.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение