Índice:
- Etapa 1: Hardware
- Etapa 2: Software
- Etapa 3: Sobre o software
- Etapa 4: O "Projeto Futuro"
- Etapa 5: a seguir: entrada analógica da sonda de temperatura NTP ESP32 com correção Steinhart-Hart
Vídeo: Entrada de toque capacitivo ESP32 usando "plugues de orifício metálico" para botões: 5 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
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
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
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 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:
Controle do computador usando gestos e entrada por toque: 3 etapas
Controle do computador usando gestos e entrada de toque: este é um projeto de demonstração para o novo Piksey Atto. Usamos o TTP224 touch IC e o módulo de gestos APDS-9960 para controlar um computador. Carregamos um esboço para o Atto que o faz funcionar como um teclado USB e, em seguida, envia os códigos de teclas apropriados depen
Jogos de 4 botões usando uma entrada analógica: 6 etapas (com imagens)
Jogos de 4 botões usando uma entrada analógica: Este instrutível foca no uso de uma linha de entrada analógica para vários botões que podem ser detectados independentemente uns dos outros. E para destacar o uso desses botões incluídos, está o software para jogar quatro jogos de 4 botões diferentes. Todos os jogos (8 em t
Alto-falante Bluetooth de mesa com visualização de áudio, botões de toque e NFC: 24 etapas (com imagens)
Alto-falante Bluetooth de mesa com visualização de áudio, botões de toque e NFC: Olá! Neste Instructables vou mostrar como fiz este alto-falante Desk Bluetooth que tem incrível visualização de áudio com botões de toque e NFC. Pode ser facilmente emparelhado com dispositivos habilitados para NFC com apenas um toque. Não há botão físico
Use 1 entrada analógica para 6 botões para Arduino: 6 etapas
Use 1 entrada analógica para 6 botões para Arduino: sempre me perguntei como poderia obter mais entradas digitais para meu Arduino. Recentemente, ocorreu-me que deveria ser capaz de usar uma das entradas analógicas para trazer várias entradas digitais. Fiz uma pesquisa rápida e descobri onde as pessoas estavam
Toque capacitivo com Evive (controlador baseado em Arduino): 6 etapas (com imagens)
Toque capacitivo com Evive (controlador baseado em Arduino): Você sabe como a tela de toque do seu smartphone funciona? O smartphone tem uma série de sensores de toque abaixo da tela de vidro. Hoje em dia, é baseado na tecnologia de detecção de toque de capacitância e até mesmo um toque suave é facilmente detectado. O toque capacitivo é detectado