- cztery pola dotykowe jako obszary miedzi na płytce PCB,
- wyjście analogowe – każdy przycisk odpowiada innej wartości napięcia na tym wyjściu,
- przy każdym polu dotykowym znajduje się dioda RGB zgodna z WS2812.
Stan klawiatury określa sygnał analogowy KEY. Pomiar napięcia na tym wyjściu pozwala na określenie wciśniętego przycisku. Progi dzielnika dobrane są następująco: klawiatura nieaktywna KEY=4 V, aktywne kolejno: Q1=3 V, Q2=2 V, Q3=1 V, Q4=0 V. Dla sygnalizacji stanu klawiatury zastosowano diody LD1...LD4 typu LTST-A683CEGBW.
Diody umieszczone są nad każdym polem dotykowym. Dzięki wbudowanemu sterownikowi, zgodnemu z WS2812, do sterowania diodami LED wystarczy tylko jeden pin procesora połączony z pierwszą diodą łańcucha (LD1), kolejne diody połączone są kaskadowo. Możliwe jest sterowanie ich jasnością i kolorem świecenia.
Budowa i działanie
Schemat układu został pokazany na rysunku 1. Bazuje na specjalizowanym kontrolerze AT42QT1040, który obsługuje cztery pola dotykowe z funkcją przycisku chwilowego. Jako sensory dla służą pola QT1...QT4 o średnicy 10 mm, wykonane bezpośrednio na płytce drukowanej. Kondensatory C1...C4 odpowiadają za czułość przycisków – dla mniejszych wartości (np. 2,2 nF) czułość jest niższa, ale rośnie odporność na zakłócenia i szybkość detekcji. Użyteczny zakres pojemności wynosi 2,2...22 nF i należy je dobrać doświadczalnie, po zamontowaniu klawiatury w obudowie.
Wyprowadzenie SNSK0 określa tryb pracy klawiatury, w modelu jest to tryb AKS, w którym układ sygnalizuje dotknięcie tylko jednego pola. Tryb aktywowany jest rezystorem R6 podciągającym linię SNSK0 do VCC. Wyprowadzenie SNSK1 określa szybkość reakcji na dotyk, w modelu ustawiono szybką detekcję poprzez podciągnięcie linii SNSK1 do VCC rezystorem R5. Układ AT42QT1040 posiada wyjścia typu otwarty dren, które sterują dzielnikiem zbudowanym z rezystorów R8...R13.
Układ zasilany jest napięciem 5 V ±10% poprzez złącze SW (JST PH 2.00 mm). Do złącza doprowadzone są sygnały KEY z U1 i LED z LD1...LD4. Układ pracuje poprawnie także przyzasilaniu 3,3 V, ograniczeniem jest jednak specyfikacja zasilania diod LTST-A683CEGBW. Z testów praktycznych, przy zasilaniu 3,3 V, należy ograniczyć jasność LED i najlepiej korzystać tylko z jednego z kolorów RGB.
Montaż i uruchomienie
Układ zmontowany jest na niewielkiej dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 2.
Diody LD1…4, są elementami z wyprowadzeniami przystosowanymi do montaż odwróconego, należy je wypozycjonować od strony bottom i od tej strony przylutować (fotografia 1).
Płytka została przetestowana ze szkłem hartowanym i pleksi o grubości ok. 2 mm, z C1=10 nF, detekcja naciśnięcia odbywała się niezawodnie. Podczas eksperymentów z materiałem i jego grubością należy wyłączyć zasilanie klawiatury, aby po ponownym jego włączeniu, procedury autokalibracji mogły zoptymalizować działanie detekcji.
Płytka nie posiada ekranu na warstwie bottom, powoduje to także zmniejszoną czułość na dotyk od tej strony, należy to uwzględnić podczas montażu.
Dla sprawdzenia działania klawiatury wystarczy prosty szkic dla Arduino z użyciem biblioteki Adafruit Neopixel (listing 1).
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define AKEY_PIN A0 //KEY pin
#define PIXEL_PIN 6 //LED pin
#define PIXEL_COUNT 4 //LED count
Adafruit_NeoPixel strip(
PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
boolean oldState = LOW;
int mode = 0;
int brightness = 10;
int wait = 1;
int akeyvalue = 1023;
void setup() {
strip.begin(); // NeoPixel strip
strip.setBrightness(brightness);
strip.show(); // Initialize all pixels to ‘off’
//SerialUSB.begin(9600);
//SerialUSB.println("LTST_A683+QT1040");
}
void loop() {
akeyvalue = analogRead(AKEY_PIN);
//QT1
if (akeyvalue >= 550 && akeyvalue <= 650) {
strip.setPixelColor(0, 255, 0, 0);
strip.show();
delay(wait);
}
//QT2
if (akeyvalue >= 350 && akeyvalue <= 450) {
strip.setPixelColor(1, 0, 255, 0);
strip.show();
delay(wait);
}
//QT3
if (akeyvalue >= 150 && akeyvalue <= 250) {
strip.setPixelColor(2, 0, 0, 255);
strip.show();
delay(wait);
}
//QT4
if (akeyvalue >= 0 && akeyvalue <= 50) {
strip.setPixelColor(0, 0, 0, 0);
strip.setPixelColor(1, 0, 0, 0);
strip.setPixelColor(2, 0, 0, 0);
strip.setPixelColor(3, 255, 255, 255);
strip.show();
delay(wait);
strip.setPixelColor(3, 0, 0, 0);
strip.show();
delay(wait);
}
}
Program symuluje klawiaturę z trzema przyciskami ustawiającymi Q1, Q2, Q3 i kasującym Q4. Dotyk pierwszego pola potwierdzony jest LD1 świecącą na zielono, drugie pole sygnalizowane jest LD2 na czerwono, trzecie LD3 na niebiesko, kasowanie potwierdzone jest chwilowym świeceniem LD4 na biało.
Adam Tatuś
adam.tatus@ep.com.pl
- R1, R2, R3, R4, R12: 10 kΩ
- R5, R6: 1 MΩ
- R7: 10 Ω
- R8: 24 kΩ
- R9: 8,2 kΩ
- R10: 4,3 kΩ
- R11: 2,4 kΩ
- R13: 100 Ω
- C1…C4: 10 nF SMD0603
- C5…C9: 0,1 µF SMD0603
- CE1: 22 µF/10 V tantalowy SMDA
- LD1…LD4: dioda LED RGB ze sterownikiem LTST-A683CEGBW
- U1: AT42QT1040 (VQFN20)
- FB: dławik ferrytowy SMD0603 BLM18AG102
- SW: złącze JST 2 mm