Сенсорная кнопка для 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;    
}
Рассказать друзьям:


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

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

*