ESP32:Примеры/Управление светодиодом с помощью емкостного контакта

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление светодиодом с помощью емкостного контакта

Этот скетч-пример демонстрирует как с помощью данных от емкостного сенсорного контакта можно будет управлять светодиодом.

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

Запустите на ESP32 код, из примера Считывание данных с тактильного датчика, и снова откройте монитор порта.

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

Итак, когда мы не касаемся фольги, то значения в среднем достигают значения «70» и чуть выше, а когда касаемся, значение уменьшается до менее «10».

Это позволяет нам задать пороговое значение – если данные от сенсора упадут ниже этого значения, это включит светодиод. То есть, к примеру, хорошим пороговым значением для этой ситуации будет «20».

Теперь скопируйте в IDE Arduino код из раздела снизу. Этот код считывает значение с емкостной фольговой кнопки, подключенной к заданному нами контакту, и включает светодиод, если «фольговое» значение падает ниже заданного порога – это будет значить, что вы приложили палец к кнопке из алюминиевой фольги.

Загрузите скетч на ESP32. Прикоснитесь к алюминиевой фольге – если все сделано правильно, светодиод должен загореться.

Необходимое оборудование

Схема

Примечание

На данной схеме используется плата ESP32S-HiLetgo, если вы используете другую, сверьтесь с вашей распиновкой.

Провод-перемычка с фольгой подключен к GPIO4. Светодиод через резистор подключен к GPIO16.

Код

// задаем номера для контактов:
const int touchPin = 4; 
const int ledPin = 16;

// задаем пороговое значение: 
const int threshold = 20;
// переменная для хранения значения сенсорного контакта: 
int touchValue;

void setup(){
  Serial.begin(115200);
  delay(1000);                    // даем время на установление последовательной коммуникации
  pinMode (ledPin, OUTPUT);       // инициализируем контакт светодиода, также делая его выходным контактом
}

void loop(){
  // считываем состояние емкостной сенсорной кнопки: 
  touchValue = touchRead(touchPin);
  Serial.print(touchValue);
  // проверяем, упало ли значение «touchValue» ниже заданного порога,
  // и если упало, присваиваем контакту «ledPin» значение «HIGH»:
  if(touchValue < threshold){
    // включаем светодиод:
    digitalWrite(ledPin, HIGH);
    Serial.println(" - LED on");  //  " – светодиод включен"
  }
  else{
    // выключаем светодиод:
    digitalWrite(ledPin, LOW);
    Serial.println(" - LED off");  //  " – светодиод выключен"
  }
  delay(500);
}

См.также

Внешние ссылки