Статьи » Разработки
Добавить статью

Емкостной сенсор для управления бытовой техникой

2021-02-14 в 12:34 (последнее изменение 2023-11-09 в 12:43)

В современном мире довольно часто вместо кнопок используются сенсорные датчики. Их преимущество заключается в том, что нет необходимости прикладывать силу для нажатия кнопки, мы можем активировать клавишу едва касаясь ее. Сенсорные технологии становятся все более популярными день ото дня. В настоящее время в электронной технике используются два основных типа сенсорных экранов: резистивный и емкостной. В этой статье мы обсудим как сделать емкостной датчик касания с ESP32. А в реализации нашей задумки как всегда помогает сервис PCBWay.

Протравленная печатная плата является проводящим материалом, а наклейка действует как диэлектрик. Возникает вопрос, каким должно быть прикосновение к медной площадке, чтобы вызывать изменение емкости, которое сможет обнаружить контроллер сенсорного датчика? И, конечно, это прикосновение пальцем.

Объяснить это можно двумя моментами: первое - наши пальцы обладают диэлектрическими свойствами, второе - это проводящие свойства наших пальцев. Мы собираемся использовать емкостное касание. Важно отметить, что никакой проводимости не происходит, так как палец изолирован бумажной наклейкой.

Палец действует как диэлектрик:
Конденсатор имеет постоянное значение, которое может быть определено площадью двух проводящих пластин, расстоянием между пластинами и его диэлектрической постоянной. Мы не можем изменить площадь конденсатора, просто прикоснувшись к нему, но мы можем точно изменить диэлектрическую проницаемость конденсатора, потому что человеческий палец имеет диэлектрическую постоянную, отличную от диэлектрической проницаемости материала, отображающего ее. В нашем случае это воздух, вытесняем воздух пальцами. Взаимодействие пальца с электрическим полем конденсатора вызывает увеличение диэлектрической проницаемости, следовательно, увеличивается емкость.

Теперь, когда мы поняли принцип, давайте перейдем к созданию печатных плат.

Создание четырехпозиционного емкостного сенсорного датчика
Емкостной сенсорный датчик, используемый в этом проекте имеет четыре клавиши. Ниже подробный процесс его создания.

Создаем печатную плату для датчика с помощью инструмента проектирования печатных плат Dip Trace, который выглядит примерно так, как на изображении ниже.

С помощью размеров и Photoshop мы сделали шаблон и, наконец, наклейку для датчика, которая выглядит примерно так, как на изображении ниже.

Теперь, когда мы закончили с наклейкой, мы переходим к созданию фактического шаблона платы, который мы собираемся использовать для изготовления нашей печатной платы.

Теперь мы можем распечатать этот файл и продолжить процесс изготовления самодельной печатной платы.

После этого печатная плата будет выглядеть, как на изображении ниже.

Делаем отверстия и соединяем провода с печатной платой, чтобы подключить к плате ESP32.

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

Переходим к созданию схемы управления для сенсорной панели.

Компоненты, необходимые для создания контроллера с использованием ESP32, приведены ниже.

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

1    Реле - 4
2    Транзистор BD139 - 4
3    Винтовой зажим 5мм*2 - 4
4    1N4007 - 5
5    0,1мкФ - 1
6    100мкФ, 25В -  2
7    LM7805 - 1
8    1 kOm - 4
9    560 Om - 4
10    Желтый светодиод - 4
11    Разъем "папа" - 4
12    Разъем "мама" - 30
13    Красный светодиод - 1
14    ESP32 Dev Board V1 - 1
15    Фольгированный текстолит - 1
16    Перемычки - 4
17    Проводки - 5

Схема управления емкостного сенсорного датчика
На изображении ниже показана полная схема сенсорного датчика на базе ESP32.

Как видите, это очень простая схема с минимальным количеством компонентов.

На схеме цилиндрический разъем постоянного тока используется в качестве входа, где мы обеспечиваем необходимую мощность для питания схемы. Стабилизатор напряжения 7805 преобразует входное напряжение в стабилизированные 5 В постоянного тока, которое обеспечивает питание модуля ESP32.

Далее на схеме у нас есть сенсорные разъемы на контактах 25, 26, 27, 28, к которым мы собираемся подключить сенсорную панель.

Затем у нас есть наши реле, которые переключаются через транзистор BD139. Диоды D2, D3, D4, D5 предназначены для защиты схемы от любого переходного напряжения, которое генерируется при переключении реле. Резисторы 560 Ом на базе каждого транзистора используются для ограничения протекания тока через базу.

dip trace

Конструкция печатной платы для цепи емкостного сенсорного датчика
Печатная плата для нашей схемы сенсорного датчика была разработана для односторонней платы . Мы использовали Dip Trace для разработки печатной платы. 2D и 3D изображение нашего дизайна платы показано ниже.

Для создания силовых цепей была предусмотрена необходимая ширина дорожек. Мы поместили винтовой зажим вверху, таким образом гораздо проще подключить нагрузку, а разъем питания, был размещен сбоку, что также обеспечивает легкий доступ. Полный файл дизайна для Dip Trace вместе с Gerber можно скачать в конце статьи.

Теперь, когда наш дизайн готов, пришло время протравить и припаять плату . После завершения процесса травления, сверления и пайки плата выглядит так, как показано на рисунке ниже.

Код Arduino для емкостного сенсорного датчика на базе ESP32
Для этого проекта мы запрограммируем ESP32 с помощью специального кода. Код очень прост и удобен в использовании.

Мы начинаем с определения всех необходимых контактов, в нашем случае мы определяем контакты для сенсорных датчиков и реле.

Код
#define Relay_PIN_1 15
#define Relay_PIN_2 2
#define Relay_PIN_3 4
#define Relay_PIN_4 16
#define TOUCH_SENSOR_PIN_1 13
#define TOUCH_SENSOR_PIN_2 12
#define TOUCH_SENSOR_PIN_3 14
#define TOUCH_SENSOR_PIN_4 27

Затем, в разделе настройки, мы начинаем с инициализации UART для отладки, затем мы вводим задержку в 1с, которая дает нам немного времени для открытия окна Serial Monitor. Затем используем функцию Arduinos pinMode, чтобы сделать выводы Relay выходными.

Код
void setup() {
 Serial.begin(115200);
 delay(1000);
 pinMode(Relay_PIN_1, OUTPUT);
 pinMode(Relay_PIN_2, OUTPUT);
 pinMode(Relay_PIN_3, OUTPUT);
 pinMode(Relay_PIN_4, OUTPUT);
}

Начинаем раздел цикла с оператора if , встроенная функция touchRead (pin_no) используется, чтобы определить, был ли нажат контакт или нет. Функция touchRead (pin_no) возвращает целочисленные диапазоны значений (0 - 100), значение постоянно находится около 100, но если мы коснемся выбранного контакта, значение упадет почти до нуля, и с помощью изменяющегося значения, мы можем определить, касался ли конкретный штифт пальцем или нет.

В операторе if мы проверяем любое изменение целочисленных значений, и если значение достигает значения ниже 28, мы можем быть уверены, что подтвердили касание. Как только  оператор if становится истинным, мы ждем 50 мс и снова проверяем параметр, это поможет нам определить, было ли значение датчика срабатыванием ложно, после этого мы инвертируем состояние вывода, используя digitalWrite (Relay_PIN_1,! DigitalRead (Relay_PIN_1)), а остальная часть кода останется прежней.

Код
if ( touchRead(TOUCH_SENSOR_PIN_1) < 28) {
 if ( touchRead(TOUCH_SENSOR_PIN_1) < 28) {
 Serial.println("Sensor one is touched");
 digitalWrite(Relay_PIN_1, !digitalRead(Relay_PIN_1));
 }
 }
 else if (touchRead(TOUCH_SENSOR_PIN_2) < 28) {
 if (touchRead(TOUCH_SENSOR_PIN_2) < 28) {
 Serial.println("Sensor Two is touched");
 digitalWrite(Relay_PIN_2, !digitalRead(Relay_PIN_2));
 }
 }
 else if ( touchRead(TOUCH_SENSOR_PIN_3) < 28) {
 if (touchRead(TOUCH_SENSOR_PIN_3) < 28) {
 Serial.println("Sensor Three is touched");
 digitalWrite(Relay_PIN_3, !digitalRead(Relay_PIN_3));
 }
 }
 else if (touchRead(TOUCH_SENSOR_PIN_4) < 28) {
 if (touchRead(TOUCH_SENSOR_PIN_4) < 28) {
 Serial.println("Sensor Four is touched");
 digitalWrite(Relay_PIN_4, !digitalRead(Relay_PIN_4));
 }
 }

Наконец, мы заканчиваем наш код с задержкой блокировки еще 200 мс.

Тестирование цепи датчика касания на базе ESP32

Набор для тестирования очень прост, как вы можете видеть, я соединил 4 светодиода с резисторами, которые действуют как нагрузки, поскольку он подключен к реле, вы можете легко подключить любую нагрузку до 3 ампер.

Код
#define Relay_PIN_1 15
#define Relay_PIN_2 2
#define Relay_PIN_3 4
#define Relay_PIN_4 16
//All relay pin definitions
#define TOUCH_SENSOR_PIN_1 13
#define TOUCH_SENSOR_PIN_2 12
#define TOUCH_SENSOR_PIN_3 14
#define TOUCH_SENSOR_PIN_4 27
// all touch sensor pin definitions
void setup() {
  Serial.begin(115200); //Begin the UART
  delay(1000); // give me time to bring up serial monitor
  pinMode(Relay_PIN_1, OUTPUT);
  pinMode(Relay_PIN_2, OUTPUT);
  pinMode(Relay_PIN_3, OUTPUT);
  pinMode(Relay_PIN_4, OUTPUT);
  // all the relay pins set as output
}
void loop() {
  /*
     Uncomment for debug
      Serial.println(" ");
      Serial.println("#############################");
      Serial.print("Button1: ");
      Serial.println(touchRead(TOUCH_SENSOR_PIN_1));  // get value of Touch 0 pin = GPIO 4
      Serial.print("Button2: ");
      Serial.println(touchRead(TOUCH_SENSOR_PIN_2));
      Serial.print("Button3: ");
      Serial.println(touchRead(TOUCH_SENSOR_PIN_3));
      Serial.print("Button4: ");
      Serial.println(touchRead(TOUCH_SENSOR_PIN_4));
      Serial.println("#############################");
      Serial.println(" ");
  */
  if ( touchRead(TOUCH_SENSOR_PIN_1) < 28) { // check if the value reaches belo 28
    delay(50);
    if ( touchRead(TOUCH_SENSOR_PIN_1) < 28) { //again check if the value reaches below 28
      Serial.println("Sensor one is touched");
      digitalWrite(Relay_PIN_1, !digitalRead(Relay_PIN_1));
    }
  }
  else if (touchRead(TOUCH_SENSOR_PIN_2) < 28) {
    delay(50);
    if (touchRead(TOUCH_SENSOR_PIN_2) < 28) {
      Serial.println("Sensor Two is touched");
      digitalWrite(Relay_PIN_2, !digitalRead(Relay_PIN_2));
    }
  }
  else if ( touchRead(TOUCH_SENSOR_PIN_3) < 28) {
    delay(50);
    if (touchRead(TOUCH_SENSOR_PIN_3) < 28) {
      Serial.println("Sensor Three is touched");
      digitalWrite(Relay_PIN_3, !digitalRead(Relay_PIN_3));
    }
  }
  else if (touchRead(TOUCH_SENSOR_PIN_4) < 28) {
    delay(50); // works as a debounce delay.
    if (touchRead(TOUCH_SENSOR_PIN_4) < 28) {
      Serial.println("Sensor Four is touched");
      digitalWrite(Relay_PIN_4, !digitalRead(Relay_PIN_4));
    }
  }
  delay(200);
}

Как обычно, сделал заказ на сервисе PCBWay - всегда точно, качественно и в кратчайшие сроки. Платы заказываю только здесь, очень доволен данным сервисом. Подробно о том, как разместить заказ на PCBWay, вы можете прочитать в нашей статье

Исходные файлы проекта.


Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!

Просмотров: 2876. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель

Об авторе - Администратор

More by Администратор

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]