Оглавление:

Емкостный сенсорный ввод ESP32 с использованием металлических заглушек для кнопок: 5 шагов (с изображениями)
Емкостный сенсорный ввод ESP32 с использованием металлических заглушек для кнопок: 5 шагов (с изображениями)

Видео: Емкостный сенсорный ввод ESP32 с использованием металлических заглушек для кнопок: 5 шагов (с изображениями)

Видео: Емкостный сенсорный ввод ESP32 с использованием металлических заглушек для кнопок: 5 шагов (с изображениями)
Видео: Доработка ESP32 ВАЖНО! 2024, Ноябрь
Anonim
Image
Image
Аппаратное обеспечение
Аппаратное обеспечение

Когда я завершал разработку проектных решений для предстоящего проекта на основе ESP32 WiFi Kit 32, требующего ввода трех кнопок, одна заметная проблема заключалась в том, что WiFi Kit 32 не имел одной механической кнопки, а только трех механических кнопок для ввода. Однако Wi-Fi Kit 32 действительно имеет множество емкостных сенсорных входов, поэтому я потратил некоторое время на сборку оборудования, написание программного обеспечения и тестирование конструкции ввода с тремя кнопками с использованием функции емкостного сенсорного ввода ESP32 и трех металлических заглушек 3/8 дюйма для кнопки.

Любой, кто экспериментировал с емкостными сенсорными входами ESP32, обнаружил, что сенсорные входы, безусловно, достаточно шумные, чтобы требовать фильтрации для надежного обнаружения входа. Чтобы свести к минимуму общее количество деталей для предстоящего проекта, я определил, что простой цифровой фильтр, управляемый прерываниями (больше похожий на «противодействие», чем на фильтр, но я отвлекся), в отличие от добавления внешнего аппаратного фильтра, может уменьшить шум на входе.. И после тестирования стало очевидно, что емкостные входы ESP32, три металлических заглушки 3/8 дюйма и некоторое программное обеспечение для цифровой «фильтрации» действительно обеспечат надежный трехкнопочный вход для данной конструкции.

Поэтому, если вы заинтересованы в тестировании емкостного входа с цифровой фильтрацией на ESP32, я включил исходный код «Buttons.ino» в формат среды Arduino вместе с инструкциями по сборке и программированию, а также краткое описание исходного кода для я обнаружил, что это очень надежный трехкнопочный ввод.

И, как обычно, я, вероятно, забыл один или два файла или неизвестно что еще, поэтому, если у вас есть какие-либо вопросы, не стесняйтесь спрашивать, поскольку я делаю много ошибок.

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

Шаг 1: Оборудование

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

В конструкции используется следующее оборудование:

  • Один, комплект Wi-Fi 32.
  • Три металлических заглушки 3/8 дюйма.
  • Три 4-дюймовых отрезка провода 28awg.

Для сборки фурнитуры я выполнил следующие действия:

  • Зачистил и залудил концы каждого провода длиной 4 дюйма, как показано.
  • Припаял первый провод к контакту 13 ESP32 (вход TOUCH4 или «T4»).
  • Припаял второй провод к контакту 12 ESP32 (вход TOUCH5 или «T5»).
  • Третий провод припаял к контакту 14 ESP32 (вход TOUCH6 или "T6").
  • Припаял по одной из трех металлических заглушек 3/8 дюйма к свободным концам трех отрезков проводов.

Шаг 2: Программное обеспечение

Программное обеспечение
Программное обеспечение

Файл «Buttons.ino» - это файл среды Arduino, содержащий программное обеспечение для проектирования. В дополнение к этому файлу вам понадобится графическая библиотека «U8g2lib» для OLED-дисплея WiFi Kit32 (дополнительную информацию об этой библиотеке см. На

С графической библиотекой U8g2lib, установленной в вашем каталоге Arduino, и "Buttons.ino", загруженным в среду Arduino, скомпилируйте и загрузите программное обеспечение в ESP32.

После загрузки и запуска в верхней строке дисплея должно быть написано «Кнопки», а во второй строке дисплея должно быть написано «1 2 3» в качестве индикаторов кнопок. Под каждым из 1, 2, 3 индикаторов кнопок находятся неотфильтрованные значения считывания касанием, а под каждым из них - индикаторы нажатия кнопок («1» - нажатие, «0» - не нажатие). Как видно на видео (и это подтверждено длительными испытаниями), программный фильтр обеспечивает надежное обнаружение нажатия кнопки без ложного срабатывания.

Шаг 3: О программном обеспечении

Программное обеспечение содержит три основных раздела кода; для Arduino требуются разделы «setup ()» и «loop ()», а также раздел «Прерывания». Раздел setup () содержит код, необходимый для инициализации OLED и служб прерывания. Функции настройки OLED описаны по ссылке выше. Функции настройки службы прерывания следующие:

  • «timerLoopSemaphore = xSemaphoreCreateBinary ()» создает семафор для «InterruptService ()» (подпрограммы обслуживания прерывания), чтобы сообщить loop (), когда пришло время выполнить проход цикла.
  • «timerInterruptService = timerBegin (0, 80, true)» создает таймер с использованием аппаратного таймера 0 с предварительным масштабированием 80.
  • «timerAttachInterrupt (timerInterruptService, & InterruptService, true)» присоединяет InterruptService () к таймеру.
  • «timerAlarmWrite (timerInterruptService, 1000, true)» устанавливает частоту обслуживания прерывания в 1000 Гц.
  • «timerAlarmEnable (timerInterruptService)» запускает аварийный сигнал таймера и, таким образом, прерывает обслуживание.

После завершения настройки вводится loop (), который сразу останавливается на строке:

если (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), это означает, что на этом этапе loop () будет ждать, пока не прибудет семафор из InterruptService (). Когда прибывает семафор, выполняется код loop (), обновляя OLED-дисплей данными кнопки, а затем возвращаясь наверх, чтобы снова ожидать следующего семафора. Если InterruptService () работает на частоте 1000 Гц, а значение LOOP_DELAY равно 30, loop () выполняется каждые 30 мсек или с частотой обновления дисплея 33,333 Гц. Хотя это более высокая частота обновления дисплея, чем требуется для большинства приложений ESP32, я использовал этот параметр, чтобы проиллюстрировать отзывчивость фильтра. Я проверил и определил, что время, необходимое для выполнения одного прохода loop (), составляет 20 мс.

InterruptService () вызывается таймером, созданным в setup (), с частотой 1000 Гц. При вызове обновляет два счетчика обратного отсчета, nLoopDelay и nButtonDelay. Когда nLoopDelay обратный отсчет до нуля, он отправляет семафор, разрешающий loop () выполнить один проход, а затем сбрасывает nLoopDelay. Когда nButtonDelay обратный отсчет до нуля, он тоже сбрасывается, после чего выполняется кнопка «фильтры».

Каждый фильтр кнопки имеет уникальный счетчик фильтра (например, nButton1Count, nButton2Count и nButton3Count). Пока значение сенсорного ввода, назначенное кнопке, больше или равно заданному пороговому значению (BUTTON_THRESHHOLD), счетчик фильтра, назначенный кнопке и кнопке, остается нулевым. Если значение сенсорного ввода, назначенное кнопке, меньше заданного порога, счетчик фильтра, назначенный кнопке, увеличивается на единицу каждые 20 мсек. Когда счетчик фильтра превышает значение фильтра кнопки (BUTTON_FILTER), кнопка считается "нажатой". Результатом этого метода является создание фильтра, требующего 80 мс (20 мс nButtonDelay * 4 мс nButtonCountN, где N - номер кнопки) значений непрерывного сенсорного ввода ниже определенного порогового значения, чтобы считать кнопку фактически нажатой. Время менее 80 мс считается "ошибкой" и отклоняется фильтром.

Учитывая это краткое описание, если у вас есть какие-либо вопросы, задавайте их, и я постараюсь ответить на них.

Надеюсь, вам понравилось!

Шаг 4: «Предстоящий проект»

В
В

Предстоящий проект «Intelligrill® Pro» - это монитор для коптильни с двойным датчиком температуры, включающий:

  • Расчеты датчика температуры Steinhart-Hart (в отличие от «справочных» таблиц) для повышения точности.
  • Прогнозируемое время до завершения на зонде 1 с учетом повышенной точности, полученной на основе расчетов Стейнхарта-Харта.
  • Второй датчик, датчик 2, для контроля температуры курильщика (от 32 до 399 градусов).
  • Емкостные сенсорные элементы управления вводом (как в этой инструкции).
  • Удаленный мониторинг на основе WIFI (с фиксированным IP-адресом, позволяет отслеживать прогресс курильщика из любого места, где есть подключение к Интернету).
  • Расширенный температурный диапазон (снова от 32 до 399 градусов).
  • Звуковые сигналы завершения как внутри передатчика Intelligrill®, так и на большинстве устройств мониторинга с поддержкой Wi-Fi.
  • Отображение температуры в градусах F или C.
  • Формат времени в формате ЧЧ: ММ: СС или ЧЧ: ММ.
  • Отображение заряда батареи в вольтах или в процентах заряда.
  • Скоро появится выход PID для курильщиков со шнеком.

«Intelligrill® Pro» тестируется, чтобы стать наиболее точным, функциональным и надежным Intelligrill® на основе HTML, который я разработал.

Он все еще находится на стадии тестирования, но с едой, которую он помогает готовить во время тестирования, я поправился более чем на несколько фунтов.

Опять же, надеюсь, вам понравится!

Шаг 5: Далее: аналоговый вход датчика температуры ESP32 NTP с поправкой Стейнхарта-Харта

Будьте готовы стереть пыль со своих учебников по алгебре ради этого.

Рекомендуемые: