Wstęp
Potencjometr to urządzenie, które większość z nas kojarzy z gałką wystająca z radia i służącą do regulacji głośności. Dziś w dobie układów cyfrowych nie stosuje się go zbyt często. Jednak urządzenie to ma swój urok i tam gdzie potrzebna jest płynna „analogowa” regulacja, tam sprawdza się znakomicie. Jeśli na przykład grywasz na konsoli, to tam najpopularniejszym obecnie kontrolerem jest gamepad. W gamepadzie są analogowe gałki, które też często składają się z 2 potencjometrów. Jeden dla osi poziomej, a drugi dla pionowej. Dzięki nim granie staje się bardziej precyzyjne niż na zwykłym cyfrowym krzyżyku.
Potencjometr to regulowany rezystor. Rezystor to urządzenie utrudniające przepływ prądu przez niego. Wykorzystuje się go tam, gdzie trzeba zmniejszyć napięcie lub prąd. Regulowany rezystor czyli potencjometr służy do tego samego, z tą różnicą, że nie określamy z góry jaki ma mieć opór, tylko pozostawiamy to w rękach kręcącego nim użytkownika. To jest bardzo wygodne, bo każdy preferuje różną głośność, jasność i inne cechy urządzenia, które można regulować.
Dziś można nawet powiedzieć, że potencjometr nie reguluje cech użytkowych urządzenia (tym zajęły się już cyfrowe układy i wyświetlacze/przyciski), ale służy do zmieniania jego parametrów jak położenie w grze, wychylenie lotek w zdalnie sterowanym samolocie, obracanie kamerą przemysłową.
Jak działa potencjometr?
Tradycyjny potencjometr składa się z osi, na której umieszcza się gałkę do regulacji parametru oraz 3 wyprowadzeń.
W środku potencjometru jest ścieżka z materiału oporowego (słabo przewodzącego prąd), której końce podłączone są do 2 skrajnych pinów potencjometru. Oporność ścieżki jest taka sama jak napisana na obudowie potencjometru. Zatem dwa skrajne wyprowadzenia są zwykłym rezystorem i mają zawsze taką samą oporność.
Po ścieżce oporowej przesuwa się elektroda przyczepiona do osi potencjometru i podłączona do środkowego pinu. To ona sprawia, że potencjometr coś reguluje. Im ta elektroda znajduje się dalej na ścieżce od jednego ze skrajnych pinów tym oporność między nią, a tym pinem staje się większą, a im bliżej tym mniejsza.
W ten sposób potencjometr reguluje swoją oporność między środkowym pinem, a którymś ze skrajnych od 0 Ω do maksymalnej wartości opisanej na obudowie.
Myśląc w nieco bardziej zaawansowany sposób można stwierdzić, że potencjometr to 2 rezystory połączone razem. Jeden między lewym i środkowym pinem, a drugi między prawym i środkowym pinem. Jeśli pokręcimy gałką w którąś stronę, to jeden z rezystorów będzie miał coraz większą oporność, a drugi coraz mniejszą.
Jak obliczyć jego opór?
Układ ten przypomina dość znany obwód zwany dzielnikiem napięcia. W dzielniku skrajne wyprowadzenia rezystorów podłączone są między zasilanie Vcc i masę GND. Natomiast środkowe wyprowadzenie i to z GND tworzy nowe niższe napięcie.
Napięcie wyjściowe można uzyskać ze wzoru:
Uwy = Uwe * R2 / (R1 + R2)</i>
Jeśli masz rezystor o maksymalnej oporności 10 kΩ i przekręcisz gałkę na środek to dostaniesz jakby 2 rezystory o wartości 5 kΩ. Zasilając układ napięciem 5 V otrzymasz napięcie wyjściowe:
Uwy = Uwe * R2 / (R1 + R2) = 5 * 5000 / (5000 + 5000) = 5 * 5 / 10 = 5 * 1 / 2 = 2,5 V</i>
Napięciem wyjściowym okazała się połowa napięcia wejściowego.
Co się zatem stanie jeśli przekręcisz gałkę tak, żeby ślizgacz dotknął skrajnej pozycji podłączonej do Vcc?
Uwy = Uwe * R2 / (R1 + R2) = 5 * 10000 / (0 + 10000) = 5 * 10000 / 10000 = 5 * 1 = 5 V</i>
Rezystor R1 zmniejszył swoją wartość do 0 Ω, a R2 zwiększył ją do 10 kΩ. Uzyskasz wtedy maksymalne napięcie wyjściowe.
Co będzie gdy przekręcisz gałkę maksymalnie w drugą stronę?
Uwy = Uwe * R2 / (R1 + R2) = 5 * 0 / (10000 + 0) = 5 * 0 = 0 V</i>
Rezystor R1 zwiększy swoją wartość do maksymalnej oporności 10 kΩ, a w R2 wartość spadnie do 0. Czyli napięcie zaniknie :-).
W ten sposób powstał prosty regulator napięcia, którego wyjście zawiera się w zakresie od 0 do 5 V.
Jak podłączyć potencjometr do Arduino?
Najpopularniejsze Arduino mają grupę 6 pinów wejściowych o nazwie Analog IN. Standardowo przyjmują one napięcia od 0 do 5 V. Sprawia to, że łatwo możesz podłączyć do nich potencjometr pracujący jako dzielnik napięcia.
Skrajne piny potencjometru podłączasz do 5 V i GND, a środkowy do wybranego pinu wejścia analogowego ANALOG IN w Arduino.
Przekręcając gałkę potencjometru, będziesz mógł regulować napięcie jakie wpływa do jednego z pinów Analog In.
Program odczytuje wartość napięcia z pinu za pomocą funkcji „analogRead(pin)„, której argumentem jest numer analogowego pinu z którego czytasz napięcie. Funkcja zwraca wartości od 0 do 1023. 0 oznacza, że na wejściu jest 0 V czyli poziom GND, a 1023 oznacza, że jest tam napięcie 5 V.
Poniżej opiszę kilka przykładów programów z wykorzystaniem potencjometru i wejścia analogowego Arduino.
Wysyłanie wartości potencjometru do komputera
// Numer analogowego pinu do którego podłączony jest potencjometr
#define POTENCJOMETR_PIN 0
void setup()
{
// Ustawienie komunikacji z komputerem na 57600 bodów
Serial.begin(57600);
// Oczekiwanie na uaktywnienie portu w Arduino Leonardo
while (!Serial);
}
void loop()
{
// Odczyt wartości z potencjometru
int value = analogRead(POTENCJOMETR_PIN);
// Wysłanie wartości do komputera
Serial.println(value, DEC);
// Oczekiwanie 20 ms czyli wysyłanie 50x na sekundę
delay(20);
}
Program odczytuje wartość położenia gałki potencjometru za pomocą funkcji „analogRead” i zapisuje tą wartość do zmiennej „value”. Zmienna jest przekazywana do metody „Serial.println", która przekazuje jej wartość do komputera w postaci tekstowej. Wartość tą można podglądać w „Serial Monitor” wbudowanym w Arduino.
Ustawianie za pomocą potencjometru kąta osi serwomechanizmu
#include <Servo.h>
// pin do którego podłączony jest serwomechanizm
#define SERVO_PIN 2
// pin do którego podłączony jest potencjometr
#define PR_PIN 0
// Deklaracja globalnego obiektu serwomechanizmu
Servo servo;
void setup()
{
// Wybieranie pinu serwomechanizmu
servo.attach(SERVO_PIN);
}
void loop()
{
// Odczyt wartości potencjometru
int value = analogRead(PR_PIN);
// zamienianie wartosci wejscia analogowego od 0 do 1023
// na wartosc kąta serwomechanizmu od 0 do 180
byte angle = map(value, 0, 1023, 0, 180);
// Ustawienie kąta serwomechanizmu
servo.write(angle);
// Odświeżanie 50x na sekundę
delay(20);
}
Program odczytuje położenie gałki potencjometru za pomocą funkcji „analogRead” i przekazuje wartość odczytu do zmiennej „value”. Ponieważ wartość odczytana z potencjometru ma zakres od 0 do 1023, a kąt serwomechanizmu ma zakres od 0 do 180, trzeba ją jakoś przeskalować liniowo. Tym zajmuje się funkcja „map” do której argumentów trafia zmienna „value”. Kolejne argumenty to zakresy wartości z których i na jakie chcesz przekształcić dane. Funkcja zwraca przekształconą wartość, która jest zapisywana do metody „servo.write” ustalającej kąt osi serwa.
Ustawianie potencjometrem wysokości dźwięku
// Numer analogowego pinu do którego podłączony jest potencjometr
#define POTENCJOMETR_PIN 0
//Numer cyfrowego pinu do którego podłączony jest piezo głośniczek
#define PIEZO_PIN 2
void setup()
{
}
void loop()
{
// Odczyt wartości z potencjometru
int value = analogRead(POTENCJOMETR_PIN);
// Ustawianie dzwięku na wyjściu cyfrowym
tone(PIEZO_PIN, value);
}
Program odczytuje położenie gałki potencjometru za pomocą funkcji „analogRead” i przekazuje wartość odczytu do zmiennej „value”. Potem zmienna trafia do argumentu funkcji „tone„, która zajmuje się generowanie częstotliwości na wybranym pinie. Jeśli interesuje ciebie wybrany zakres częstotliwości, możesz dodać tu funkcję „map”.
Ustawianie potencjometrem jasności diody LED
// Numer analogowego pinu do którego podłączony jest potencjometr
#define POTENCJOMETR_PIN 0
//Numer cyfrowego pinu -PWM do którego podłączona jest dioda LED
#define LED_PIN 3
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
// Odczyt wartości z potencjometru
int value = analogRead(POTENCJOMETR_PIN);
// Przeskalowanie wartości pitencjometru na jasność PWM
byte bright = map(value, 0, 1023, 0, 255);
// Ustawianie jasności diody LED za pomocą wyjścia PWM
analogWrite(LED_PIN, bright);
}
Program odczytuje położenie gałki potencjometru za pomocą funkcji „analogRead” i przekazuje wartość odczytu do zmiennej „value”. Następnie zmienna jest skalowana przez funkcję „map” z zakresu 0, 1023 do zakresu akceptowanego przez wyjście PWM czyli 0, 255 i zapisywana do zmiennej o nazwie „bright”. Zmienna ta trafia jako argument funkcji „analogWrite” sterującej wyjściem PWM i przekazuje tam wartość jasności diody LED.
Charakterystyka potencjometru
Potencjometry mają różną charakterystykę. Znaczy to, że w różny sposób przyrasta im rezystancja względem obrotu osi potencjometru. Istnieją 3 typy charakterystyki oznaczone literami „A”, „B” i „C”.
Typ „A” to charakterystyka liniowa. Oznacza to, że wraz z obrotem równo przyrasta rezystancja.
Typ „B” to charakterystyka logarytmiczna. Potencjometr taki zwiększa swoją rezystancję najpierw szybko, tak że w połowie obrotu osi ma jej już 90%, a potem przyrost rezystancji spada i przez następną połowę wzrasta o 10% resztę.
Typ „C” to charakterystyka wykładnicza. Jest ona odwrotnością typu „B”. Rezystancja rośnie najpierw powoli, tak że w połowie obrotu osiąga 10% rezystancji. Potem rośnie szybko i w drugiej połowie wzrasta o 90% resztę.
Mam nadzieję, że zaspokoiłem twoją wiedzę na temat możliwości podłączenia potencjometru do Arduino.