Есть множество типов сенсорных кнопок и некоторые из них предельно просты в изготовлении, надёжны и долговечны. В этой статье рассмотрим 2 типа кнопок которые можно использовать совместно с Arduino и рассмотрим скетчи для взаимодействия с этими двумя типами кнопок.
КАРТА БЛОГА (содержание)
Arduino UNO можно заказать по ссылке http://ali.pub/1v22bh.
Ёмкостную сенсорную кнопку можно сделать из куска двухстороннего фольгированного стеклотекстолита. К одной стороне припаять проводок и соединить его с 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);
}
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);
}
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.