Do sprzedaży wprowadziliśmy moduły kolorowych przycisków tact-switch z drabinką rezystorową. Ich niewątpliwą zaletą jest to, że mają tylko jeden pin wyjściowy. Dzięki drabince rezystorowej, na wyjściu otrzymujemy różną wartość napięcia dla każdego przycisku. Sygnał odczytujemy za pomocą przetwornika ADC wbudowanego w mikrokontroler np Atmega.
Układ wymaga zasilania napięciem stałym 3.3V lub 5V. Użyjemy Arduino aby zaprezentować działanie modułu w praktyce. Należy zwrócić uwagę że poziom napięć na wyjściu modułu jest uzależniona od wartości napięcia zasilania. W naszym przypadku układ zasilaliśmy napięciem 5V.
Moduł pozwala na obsługę 5 przycisków tact-switch za pomocą tylko jednego pinu mikrokontrolera. Zasilamy go napięciem 3.3V lub 5V. Przyjrzyjmy się schematowi i przeanalizujmy jak to jest zrobione:
Na pin VCC podajemy napięcie zasilania. Gdy żaden przycisk nie jest wciśnięty, na wyjściu obecne jest napięcie równe napięciu zasilania. Gdy wciśniemy przycisk, łączy on pin VCC, przez rezystor do masy. Rezystor ogranicza prąd płynący w układzie oraz wytwarza spadek napięcia. To właśnie różnica napięcia zasilania oraz spadku napięcia na rezystorze jest naszym sygnałem wyjściowym który będziemy mierzyć na pinie OUT. Warto zauważyć, że dla każdego przycisku rezystancja jest inna (rezystory połączone są szeregowo), więc dla każdego z nich napięcie wyjściowe będzie inne. Wyniki pomiarów przedstawiliśmy poniżej:
Jak widać, naciśnięcie każdego z przycisków skutkuje różnym napięciem na wyjściu modułu. Użyjemy Arduino oraz modułu diód LED aby zaprezentować przykładowe użycie. W naszym przypadku zasililiśmy diody z modułu zasilania MB102, lecz nie ma przeszkód by tak małą ilość diód zasilić bezpośrednio z linii zasilania Arduino.
Poniżej załączyliśmy kod źródłowy którym zaprogramowaliśmy Arduino:
int sensorPin = A0; // pin wejściowy sygnału z modułu int sensorValue = 0; // zmienna do przechowywania odczytanej z przetwornika wartości void setup() { // ustawiamy piny odpowiedzialne za diody jako wyjściowe pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); Serial.begin(9600); // ustawiamy prędkość transmisji szeregowej } void zapal(int dioda){ digitalWrite(dioda, HIGH); } void zgaswszystkie(){ for (int i=9; i&lt;14; i++) digitalWrite(i, LOW); } void loop() { // odczytujemy wartość napięcia: sensorValue = analogRead(sensorPin); //wyświetlamy wartość odczytaną z przetwornika ADC: Serial.print("Odczytana wartosc: "); Serial.println(sensorValue); //wyświetlamy wartość odczytaną z przetwornika ADC przeliczoną na wolty: Serial.print(sensorValue*0.0048828125); Serial.println(" V"); delay(100); if (sensorValue == 0) zapal(13); else if (sensorValue > 565 && sensorValue < 575) zapal(10); else if (sensorValue > 755 && sensorValue < 765) zapal(11); else if (sensorValue > 840 && sensorValue < 860) zapal(12); else if (sensorValue > 900 && sensorValue < 910) zapal(9); else zgaswszystkie(); }
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.