Сенсорная кнопка для arduino своими руками

Сенсорная кнопка для arduino

В этой статье я покажу, как можно просто и быстро реализовать сенсорную кнопку. В данном примере кнопку будет изображать кусок фольгированного текстолита. А вообще на роль сенсора может подойти любой электрический проводник, даже просто кусок провода. Чтобы показать, что сенсор работает, будем включать светодиод, после прикосновения пальцем к сенсору. Ниже приведены две фотографии: схема в положении покоя и в момент прикосновения пальцем к сенсору (куску текстолита).


Сенсорная кнопка для arduino своими руками. Фото 1
Сенсорная кнопка для arduino своими руками. Фото 2

Что использовалось в проекте

Список того, что я использовал, так же привожу ссылки, где это покупал — все с Китая, там дешевле всего )

Схема сборки сенсорной кнопки для arduino

Сенсорная кнопка для arduino своими руками. Фото 3

Остается только написать скетч, но прежде стоит разобраться, как работает наша схема. Мы будем посылать сигнал с одного пина, и получать сигнал другим пином. Пины будут разделены резистором с большим сопротивлением, а также параллельно к ним подключена пластина, которая будет являться очень маленьким конденсатором, емкость которого будет наполняться при каждой отправке сигнала от пина к пину. В связи с тем, что емкость пластинки должна наполняться, каждый раз будет происходить очень короткая задержка (это примерно 15-20 микросекунд). А когда мы касаемся пальцем, емкость конденсатора увеличивается в несколько раз, что скажется на скорости передачи сигнала между пинами. Именно скорость передачи сигнала и будет указывать на то, что было прикосновение к сенсору. Остается только программно обработать передачу, прием и подсчет времени передачи сигнала.
Подробнее почитать о получившейся у нас цепи можно в Википедии тут: RC-цепь

Скетч для сенсорной кнопки

Скачать скетч можно тут: скачать.

int firstPin = 3;   // Пин, который отправляет сигнал
int secondPin = 2;  // Пин, который принимает сигнал
int ledPin = 13;    // Светодиод

void setup() 
{
  pinMode(secondPin, OUTPUT);
  pinMode(firstPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int ms = getDeltaTime();
  if(ms > 100){
    digitalWrite(ledPin,HIGH);
  }else{
    digitalWrite(ledPin,LOW);
  }
  delay(10);
}

int getDeltaTime()
{
  int time_start=0; 
  int time_finish = 0;
  int time_delta = 0;
  
  time_start = micros(); // Количество микросекунд со старта программы
  digitalWrite(secondPin, HIGH); // Отправляем сигнал 
  while(digitalRead(firstPin) == LOW); // Джем пока дойдет сигнал от одного пина к другому
  time_finish = micros(); // Еще раз смотрим сколько прошло микросекунд со старта программы                 
  time_delta = time_finish - time_start; // Высчитываем сколько микросекунд ушло на передачу сигнала между пинами
  digitalWrite(secondPin, LOW); // Останавливаем передачу сигнала
  
  Serial.println(time_delta);
  return time_delta;    
}
Рассказать друзьям:


Оценить:
(3 оценок, среднее: 4,67 из 5)

Сенсорная кнопка для arduino своими руками: 5 комментариев

  1. Подскажите, как изменится схема, если требуется сделать пять кнопок? И второй вопрос можно ли ряд таких кнопок повесить на один пин, как простые кнопки?

  2. Собрал схему и в реальных условиях оказалось, что схема не совсем рабочая. Из-за наводок сети светодиод на 13м выходе моргает, а не загорается. Пришлось дописывать код обработки наводок от сети.

  3. у меня при прикосновении к пластине getDeltaTime() начинает выдавать всякую чушь, в том числе отрицательные значения. Оказалось что она не всегда заходит в блок while(digitalRead(firstPin) == LOW), потому как наводка на пальце даёт HIGH сразу же.
    в моем случае вся та же схема работает, но надо не задержку мерить, а просто ждать 1 на пине, к которому подключена пластина. при этом не забыть пин подтянуть к земле резистором (от сопротивления зависит чувствительность). также нужна разумная задержка, чтобы успеть убрать палец (1 сек например).
    то есть вся программа становится такой:
    void loop()
    {
    if (digitalRead(firstPin) == HIGH) {
    // do something
    delay(1000);
    }
    }

  4. я тоже хочу сделать кнопку, заглянул в интернет, такие мне не продходят.. нужно хотя бы кт315 с большим ку поставить и пластину на базу.

  5. Да. не нужно и кт315, просто пластинку из фольгированого текстолита , фольгу напополам разрезать, одну часть заземлить, на другую подать через 1 мом +5 вольт. подключив к пину. при замыкании пальцем двух частей фольги вторая часть через сопротивление пальца заземляется до напряжения лог. нуля. Легко и четко работает. Резестивная сенсорная кнопка называется.

Добавить комментарий для Дмитрий Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code