пятница, 15 апреля 2016 г.

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

Есть множество типов сенсорных кнопок и некоторые из них предельно просты в изготовлении, надёжны и долговечны. В этой статье рассмотрим 2 типа кнопок которые можно использовать совместно с Arduino и рассмотрим скетчи для взаимодействия с этими двумя типами кнопок.
Ёмкостную сенсорную кнопку можно сделать из куска двухстороннего фольгированного стеклотекстолита. К одной стороне припаять проводок и соединить его с GND (землёй) Arduino к другой стороне припаять проводок и соединить его с выводом например 3 который будет сконфигурирован как вход к этой же стороне припаять резистор сопротивлением 1.2 МОм а другой вывод этого резистора соединить например с выводом 2 который будет сконфигурирован как выход. На площадку подключённую к выводу 3 приклеивается скотч чтобы не касаться пальцем медной площадки.
 Такая кнопка представляет собой конденсатор ёмкость которого увеличивается при прикосновении (через скотч) к её верхней площадке подключённой к выводу 3.

 Теперь рассмотрим скетч для взаимодействия с такой кнопкой:

int dt_button=0;

void setup()
{
  pinMode(3, INPUT);
  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);
  Serial.begin(57600);
}

void loop()
{
  dt_button=0;
  digitalWrite(2, HIGH);
  while(!digitalRead(3))
  {
    dt_button++;
  }
  digitalWrite(2, LOW);
  Serial.print(dt_button);
  delay(500);
}

Сначала создаётся переменная dt_button в которой будет хранится время за которое данная кнопка-конденсатор заряжается до уровня логической единицы. При прикосновении к кнопке это время увеличится т.к. увеличиться ёмкость. Далее вывод 3 конфигурируется как вход, вывод 2 как выход. На вывод 2 подаётся низкое напряжение и инициализируется последовательный порт. В основном цикле переменная dt_button обнуляется. На вывод 2 подаётся высокое напряжение и с этого момента кнопка-конденсатор начинает заряжаться. Далее в цикле проверяется появилось ли на выводе 3 напряжение уровня логической единицы (т.е. высокое) и при каждой итерации (разе выполнения тела цикла) переменная dt_button увеличивается на единицу (инкрементируется) когда напряжение на кнопке-конденсаторе дорастает до логической единицы происходит выход из цикла и на вывод 2 подаётся низкое напряжение (лог. 0) для того чтобы кнопка-конденсатор начала разряжаться для следующего её опроса. Потом в последовательный порт выводится значение переменной dt_button для того чтобы мы могли его посмотреть и потом использовать эту кнопку как нужно. Если кнопку не менять то dt_button для неё останется неизменным т.к. это параметр именно этой кнопки. Далее делается задержка в пол секунды для того чтобы кнопка-конденсатор наверняка разрядилась до приемлемого уровня. После сборки и подключения кнопки мы загружаем скетч и выясняем dt_button кнопки когда на неё не нажимают (как это сделать смотрите видео внизу статьи)(для просмтора в Arduino IDE  инструменты - монитор последовательного порта - справа внизу выбрать 57600). Для площадки размером 20Х20мм dt_button будет примерно 3 для площадки 55Х20мм dt_button будет примерно 6 - с учётом этого можно переписать скетч для того чтобы при прикосновении к кнопке загорался светодиод подключённый через резистор 220Ом к выводу 4 анодом и к земле катодом (обязательно через резистор):


int dt_button=0;

void setup()
{
  pinMode(3, INPUT);
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  digitalWrite(2, LOW);
  Serial.begin(57600);
}

void loop()
{
  dt_button=0;
  digitalWrite(2, HIGH);
  while(!digitalRead(3))
  {
    dt_button++;
  }
  digitalWrite(2, LOW);
  Serial.print(dt_button);
  if(dt_button>6)//для кнопки 55Х20мм для 20Х20мм 6 меняем на 3
  {
    digitalWrite(4, HIGH);
  }
  else
  {
    digitalWrite(4, LOW);
  }
  delay(500);
}

При использовании данной кнопки возникают некоторые проблемы и по некоторым причинам при нажатии dt_button иногда равняется нулю или меньше dt_button без касания поэтому лучше использовать другой тип сенсорной кнопки:

Это резистивная кнопка которая делается из фольгированного стеклотекстолита который м.б. односторонним. Две площадки на одной стороне разрезаются так чтобы между ними небыло проводящего контакта. К одной из площадок припаивается проводок который соединяется с GND Arduino. Другая площадка соединяется с выводом 3 который конфигурируется как цифровой вход и через резистор сопротивлением 1.2 МОм соединяется с +5В Arduino. При нажатии пальцем на две эти площадки они замыкаются и на выводе 3 падает напряжение даже до уровня логического нуля - это происходит по тому что у кожи сопротивление меньше чем сопротивление резистора. Скетч для взаимодействия с такой кнопкой очень простой:

void setup()
{
pinMode(3, INPUT);
pinMode(4, OUTPUT);
}

void loop() 
{
  if(digitalRead(3))
  {
    digitalWrite(4, LOW);
  }
  else
  {
    digitalWrite(4, HIGH);
  }
}

Можно даже сказать что он точно такой же как и скетч для того чтобы взаимодействовать с обычной кнопкой. Данная кнопка проста не только в изготовлении но и принцип действия её очень прост а также на практике она показывает лучшие результаты чем ёмкостная (см. видео ниже).


КАРТА БЛОГА (содержание)

Arduino UNO можно заказать по ссылке http://ali.pub/1v22bh.