Botão mágico para LED no ATtiny4

SESAM


Há muito tempo, tive um interruptor milagroso sensível ao toque SESAM . Eu realmente gostei dele. Mas os tempos estão mudando, ele não se encaixa mais no interior e, em seguida, não foi totalmente projetado para funcionar com todos os tipos de lâmpadas de economia de energia da moda. Gostei do princípio de gerenciamento. Um breve toque no sensor ligou / desligou a luz e um longo ajustou o brilho. Quem se importa - o disjuntor foi o K145AP2 , um análogo da Siemens S576B (o K145AP2 ainda é vendido).


Sob o corte, minha versão de emular a operação deste chip.


Há pouco tempo, construí uma tira de LED em um perfil de alumínio com um difusor acima da mesa para mim e surgiu a pergunta sobre o interruptor. Preparar é algo complicado. Para ficar pendurado no arame - não é bonito, para um interruptor comum - estraga a vista e não há realmente nenhum lugar para ir.


Decidi construir um interruptor, e para um e um dimmer, no final do aglomerado de 16 mm. Faça tocar, cubra com um adesivo, que os fabricantes de móveis mascaram.


Ferro


Começou com um sensor. Tentei o princípio da transferência de carga para o ATtiny13A . A opção está funcionando, mas eu estava com preguiça de me preocupar com os parâmetros de ajuste automático etc. Ele também não pegou o final.


Decidi tentar implementar o sensor na biblioteca QTouch . Como um sensor ATtiny10 . Existe um utilitário pronto que transforma o ATtiny10 em um botão de toque com todos os presentes. Mas na saída, o binário é difícil de adicionar seu código lá. Pensei no que fazer, naveguei na Internet e me deparei com uma menção ao TTP223 - o controlador de um botão de toque. Esta opção me serviu perfeitamente.


Como o MK, a escolha recaiu sobre o ATtiny4 . Tão pequeno quanto o TTP223 , um timer de 16 bits. Sim, e por um longo tempo eu quis fazer algo útil sobre esses tinki.


Como uma chave - P3055LD da antiga placa-mãe.


Placa de circuito


Ao desenvolver uma placa de circuito impresso, passei pelo fato de que os furos no final do cartão precisavam do mínimo possível, decidi que um diâmetro de 7 mm seria suficiente. A placa acabou 7x28mm, duas camadas.


Mais tarde, quando a placa foi soldada, ficou claro que ela não cabia no orifício de 7 mm, pelo menos 9 mm - não levava em consideração a altura dos elementos. De alguma forma, a idéia com um adesivo também deixou de gostar. E então um esboço de móveis chamou minha atenção! Projetado para furo de 10 mm e diâmetro interno exatamente 7 mm! Tudo coincidiu!


O sensor é aplicado em um lenço separado que é soldado na extremidade principal. Nas fotos você pode ver.


Imagens

imagem legal
imagem legal
imagem legal
imagem legal


O programa


O programa de controle é escrito em assembler. A cada 32 ms (Watchdog Timer) o sensor é pesquisado. Dependendo do estado atual e da duração da prensagem, determinadas ações são executadas. A lógica do trabalho é um pouco diferente do protótipo K145AP2


Se a luz estiver apagada (estado após ligar):


  • Um breve toque acende a iluminação no mesmo nível em que foi desligada. Quando ligado pela primeira vez com brilho máximo
  • Pressão longa acende a luz no nível máximo.

Se a luz estiver acesa:


  • Um breve toque apaga a luz
  • Uma pressão longa altera o brilho. A direção da mudança de brilho muda pressionando repetidamente

Pressões muito curtas (interferência) do programa são ignoradas. O brilho é definido pelo coeficiente PWM (16 bits). Frequência PWM de cerca de 122 Hz (8.000.000 Hz / 2 16 ≈ 122 Hz)


Para compensar a percepção psicofisiológica do brilho da iluminação a partir do brilho real, ocorre uma mudança no último ao longo de uma porção da parábola cúbica . Normalmente, as tabelas são usadas para isso, mas na minha versão o coeficiente é calculado. O coeficiente varia com a frequência PWM, ou seja, quando o brilho muda, cada pulso é obtido com sua própria duração. O valor mínimo de PWM é limitado por software.


Na maioria das vezes, o MK dorme e consome cerca de 16 microamperes junto com o TTP223 . Ou seja, o circuito é bastante adequado para dispositivos com energia autônoma.


ATtiny4 tem seis pinos. Dois para energia, um padrão para redefinição. Eu já envolvi dois. Apenas um sobrou. Eu pensei em como usá-lo. E então me lembrei do laptop de um novo amigo com o trackpad Force Touch. Como um experimento, decidi fazer algo semelhante. Não preciso de muita confiabilidade da resposta e há muitos vibromotores de telefones antigos. Como resultado, implementei uma função no programa que aparece um impulso curto em uma saída livre, quando o limite de ajuste é atingido. No K145AP2, quando o limite de ajuste é atingido, a direção do ajuste muda. Portanto, era necessária alguma habilidade para remover a mão do sensor no máximo ou no mínimo. Na minha implementação, quando a borda é atingida, o ajuste é interrompido. O tempo total de ajuste de um limite para outro é de cerca de 4 segundos.


Código disponível no GitHub


TPI via Arduino


Separadamente, observo a programação do MK. Meu JTAGICE3 não suporta a interface de programação TPI. Felizmente, porém, pessoas boas escreveram um esboço no Arduin para programar essa pequena coisa. Não imediatamente, mas tudo deu certo para mim, o firmware foi inundado e tudo funcionou. Além dos arduinos, são necessários 4 resistores. Todo o processo é pintado em um esboço.


Sumário


O botão mágico está instalado e funciona conforme o esperado. O consumo e as dimensões atuais permitem que ele seja incorporado em dispositivos com energia autônoma.


Não obtive o efeito esperado da vibração. Aqui, aparentemente, são necessárias experiências com o local da instalação.


No protótipo K145AP2 e no analógico Siemens S576B, há uma conclusão "Sleep". Este é um modo no qual o brilho diminui muito lentamente até que seja completamente desligado. Conforme planejado pelo fabricante, para isso, um sensor adicional é instalado próximo à cabeceira da cama. 16 bits do timer PWM ativam esse modo.


Isto é de idéias para o futuro.


Botão no lugar

imagem legal


Como tudo.


Obrigado a todos!


UPD: Como prometido, aumentei a frequência PWM para quase 1kHz. Código do Github

Source: https://habr.com/ru/post/pt411263/


All Articles