Índice:

Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: 5 etapas (com imagens)
Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: 5 etapas (com imagens)

Vídeo: Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: 5 etapas (com imagens)

Vídeo: Entrada de toque capacitivo ESP32 usando
Vídeo: ESP32 - Sensor de Toque Capacitivo 2024, Novembro
Anonim
Image
Image
Hardware
Hardware

Enquanto eu estava finalizando as decisões de design para um projeto baseado no ESP32 WiFi Kit 32 que exigia entrada de três botões, um problema perceptível era que o WiFi Kit 32 não possuía um único botão mecânico, apenas três botões mecânicos para entrada. No entanto, o WiFi Kit 32 tem muitas entradas de toque capacitivas, então passei algum tempo montando hardware, escrevendo software e testando um design de entrada de três botões utilizando o recurso de entrada de toque capacitivo ESP32 e três plugues de orifício metálico de 3/8 "" para botões.

Como qualquer um que experimentou as entradas de toque capacitivas ESP32 descobriu, as entradas de toque são certamente barulhentas o suficiente para exigir filtragem para detecção de entrada confiável. Para minimizar a contagem total de peças para o próximo projeto, determinei que um filtro digital controlado por interrupção simples (mais um "debounce" do que um filtro, mas estou divagando), em oposição a adicionar hardware de filtro externo, poderia silenciar as entradas ruidosas. E após o teste, tornou-se aparente que as entradas capacitivas ESP32, três plugues de orifício metálico de 3/8 "e algum software de" filtragem "digital realmente forneceriam uma entrada confiável de três botões para o projeto.

Portanto, se você estiver interessado em testar a entrada capacitiva com filtragem digital em um ESP32, incluí o código-fonte "Buttons.ino" no formato do ambiente Arduino junto com as instruções de montagem e programação, além de uma breve descrição do código-fonte, para o que descobri ser uma entrada de três botões altamente confiável.

E, como de costume, provavelmente esqueci um ou dois arquivos ou quem sabe o que mais, então se você tiver alguma dúvida, não hesite em perguntar, pois eu cometo muitos erros.

E uma nota final, não recebo qualquer forma de compensação, incluindo, mas não se limitando a amostras grátis, por qualquer um dos componentes usados neste projeto

Etapa 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

O projeto utiliza o seguinte hardware:

  • Um, Kit WiFi 32.
  • Três bujões metálicos de 3/8 ".
  • Três, 4 "comprimentos de fio 28awg.

Para montar o hardware, executei as seguintes etapas:

  • Descascou e estanhou as pontas de cada comprimento de fio de 10 cm, conforme mostrado.
  • Soldou o primeiro fio no pino 13 do ESP32 (a entrada TOUCH4, ou "T4").
  • Soldou o segundo fio no pino 12 do ESP32 (a entrada TOUCH5, ou "T5").
  • Soldou o terceiro fio no pino 14 do ESP32 (o TOUCH6 ou entrada "T6").
  • Soldou um de cada um dos três plugues de furo metálico de 3/8 "nas extremidades livres dos três comprimentos de fio.

Etapa 2: Software

Programas
Programas

O arquivo "Buttons.ino" é um arquivo de ambiente Arduino que contém o software para o design. Além deste arquivo, você precisará da biblioteca gráfica "U8g2lib" para o display OLED do WiFi Kit32 (consulte https://github.com/olikraus/u8g2/wiki para obter mais informações sobre esta biblioteca).

Com a biblioteca gráfica U8g2lib instalada no diretório do Arduino e "Buttons.ino" carregado no ambiente do Arduino, compile e baixe o software no ESP32.

Depois de baixado e executado, a linha superior do visor deve mostrar "Botões" com a segunda linha do visor lendo "1 2 3" como os indicadores dos botões. Abaixo de cada um dos indicadores de botão 1, 2, 3 estão os valores de leitura de toque não filtrado, e abaixo de cada um deles estão os indicadores de botão pressionado ("1" para pressionado, "0" para não pressionado). Como pode ser visto no vídeo (e conforme o teste de longo prazo confirmado), o filtro de software fornece detecção de entrada de botão confiável sem disparos falsos.

Etapa 3: Sobre o software

O software contém três seções principais de código; o Arduino exigia as seções "setup ()" e "loop ()" e uma seção "Interrupts". A seção setup () contém o código necessário para inicializar OLED e interromper serviços. As funções de configuração do OLED são descritas no link acima. As funções de configuração do serviço de interrupção são as seguintes:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" cria um semáforo para "InterruptService ()" (a rotina de serviço de interrupção) para informar ao loop () quando é hora de executar uma passagem de loop.
  • "timerInterruptService = timerBegin (0, 80, true)" cria um cronômetro usando o cronômetro de hardware 0 com uma pré-escala de 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" anexa InterruptService () ao cronômetro.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" define a taxa de interrupção do serviço para 1000 Hz.
  • "timerAlarmEnable (timerInterruptService)" inicia o alarme do cronômetro e, portanto, interrompe o serviço.

Com a configuração concluída, o loop () é inserido e para imediatamente na linha:

if (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), o que significa que loop () irá esperar neste ponto até que o semáforo de InterruptService () chegue. Quando o semáforo chega, o código loop () é executado, atualizando a tela OLED com os dados do botão e, em seguida, retornando ao topo para aguardar novamente o próximo semáforo. Com InterruptService () rodando a 1000 Hz e um valor LOOP_DELAY de 30, loop () é executado a cada 30 ms, ou a uma taxa de atualização de exibição de 33.333 Hz. Embora seja uma taxa de atualização de tela mais alta do que a necessária para a maioria dos aplicativos ESP32, usei essa configuração para ilustrar a capacidade de resposta do filtro. Eu testei e determinei que o tempo necessário para executar uma única passagem de loop () era de 20 ms.

InterruptService () é chamado pelo cronômetro criado em setup () a uma taxa de 1000 Hz. Quando chamado, ele atualiza dois contadores decrescentes, nLoopDelay e nButtonDelay. Quando nLoopDelay é contado regressivamente até zero, ele envia o semáforo permitindo que loop () execute uma única passagem e, em seguida, redefine nLoopDelay. Quando nButtonDelay é contado regressivamente até zero, ele também é redefinido e o botão "filtros" é executado.

Cada filtro de botão tem um contador de filtro exclusivo (por exemplo, nButton1Count, nButton2Count e nButton3Count). Enquanto o valor de entrada de toque atribuído ao botão for maior ou igual ao valor limite definido (BUTTON_THRESHHOLD), o contador de filtro atribuído ao botão e o botão permanecerão zero. Se o valor de entrada de toque atribuído ao botão for menor que o limite definido, o contador do filtro atribuído ao botão é incrementado em um a cada 20 ms. Quando o contador do filtro ultrapassa o valor do filtro do botão (BUTTON_FILTER), o botão é considerado "pressionado". O efeito desse método é criar um filtro que requer 80ms (20ms nButtonDelay * 4ms nButtonCountN onde N é o número do botão) de valores de entrada de toque contínuo abaixo do limite definido para considerar o botão realmente pressionado. Qualquer tempo inferior a 80 ms é considerado uma "falha" e é rejeitado pelo filtro.

Dada esta breve descrição, se você tiver alguma dúvida, fique à vontade para perguntar e farei o meu melhor para respondê-la.

Espero que você tenha aproveitado!

Etapa 4: O "Projeto Futuro"

o
o

O próximo projeto, "Intelligrill® Pro", é um monitor de fumante com dupla sonda de temperatura apresentando:

  • Cálculos da sonda de temperatura Steinhart-Hart (em oposição às tabelas de "consulta") para maior precisão.
  • Tempo preditivo para conclusão na sonda 1 incorporando a maior precisão derivada dos cálculos de Steinhart-Hart.
  • Uma segunda sonda, sonda 2, para monitorar a temperatura do fumante (limitada de 32 a 399 graus).
  • Controles de entrada de toque capacitivo (como neste Instructable).
  • Monitoramento remoto baseado em WIFI (com um endereço IP fixo, permite monitorar o progresso do fumante de qualquer lugar onde uma conexão de internet esteja disponível).
  • Faixa de temperatura estendida (novamente 32 a 399 graus).
  • Alarmes de conclusão audíveis no transmissor Intelligrill® e na maioria dos dispositivos de monitoramento com capacidade WiFi.
  • Exibição da temperatura em graus F ou graus C.
  • Formato de hora em HH: MM: SS ou HH: MM.
  • Exibição da bateria em volts ou% carregada.
  • E, em breve, saída PID para fumantes baseados em trado.

O "Intelligrill® Pro" está testando para se tornar o Intelligrill® baseado em HTML mais preciso, cheio de recursos e confiável que eu projetei.

Ainda está em teste, mas com as refeições está ajudando a preparar durante o teste, ganhei mais do que alguns quilos.

Mais uma vez, espero que gostem!

Etapa 5: a seguir: entrada analógica da sonda de temperatura NTP ESP32 com correção Steinhart-Hart

Esteja preparado para tirar a poeira de seus livros de álgebra.

Recomendado: