Potencjometr
Dziś wpis dla nieco mniej zaawansowanych adeptów elektroniki – potencjometr.
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.
Co to jest potencjometr?
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ą.
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)
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
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
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
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?
Tradycyjnie już na tym blogu wszystko co się da staramy się podłączyć do Arduino. Tak samo będzie i z niewinnym potencjometrem.
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. Jednak jeśli masz jakieś pytania lub czegoś nie rozumiesz – pytaj śmiało w komentarzach lub e-mailem.
Warto by jeszcze wspomnieć o charakterystykach potencjometrów, tzn. A i B (liniowa i logarytmiczna) ;)
Z reguły nie lubię odkrywać przed wami wszystkich kart. Uznaję, że ciekawość i dociekanie uczy szybciej niż dostanie wszystkie go na tacy. Jednak na twoje życzenie Kamil dodałem opis charakterystyk potencjometrów :-).
Gratuluję spostrzegawczości i znajomości tematu.
Dzięki kolego, tego szukałem.
Ja też dziękuję :) Pytaj jakby coś było niejasne
Witam.
Ciekawa sprawa…
Postanowiłem zastosować tą funkcję do kilku wyjść (dla 6-ciu)
Problem w tym że na pierwszym i na 2-uch innych wyjściach diody zapalają się dopiero przy pewnej wartości. Reszta reguluje jasność poprawnie… Nie wiem co jest przyczyną ?
Zastosowałem ten program tylko do jednego kanału który tak reaguje i nadal tak się dzieje…
Co może być przyczyną ?
Pozdrawiam
ARD@X
Piotr
Przepraszam, ale nie zauważyłem twojego komentarza.
Jeśli to nadal aktualne, to czy mógłbyś wkleić gdzieś kod i podać link do niego?
Czy schemat w przykładzie z głośniczkiem na pewno jest poprawny? Wydaje mi się, że jedna z nóżek głośniczka powinna być podłączona do wyjścia cyfrowego z PWM.
Teoretycznie najlepiej generować fale za pomocą wyjść OCn, bo nie obciążają procesora, tylko generator. Jednak w Arduino częstotliwość jest generowana za pomocą przerwania timera i dowolnego pinu.
Dokumentacja funkcji „tone” mówi tylko, że gdy jej używasz, nie możesz używać jednocześnie wyjść PWM 3 i 11 bo obsługuje je ten sam generator.
Oczywiście możesz używać piny 3 i 11 jako normalne wyprowadzenia cyfrowe.
http://arduino.cc/en/Reference/Tone
W artykule jest błąd. Charakterystka A jest lograrytmiczna, B liniowa, a C wykładnicza …
Tutaj piszą inaczej.
http://pl.wikipedia.org/wiki/Potencjometr
A na angielskiej piszą tak jak ty podałeś i dodają, że starsza wersja była taka jak ja podałem.
Zaufać wikipedystom to jak politykom ;-)
W przypadku arduino ilo omowy rezystor nalezy zastosowac?
10 Kilo Ohm
Mam pytanie co do rezystancji. Skąd wiadomo jaki rezystor dobrać tak aby n.p na wyjściu było 0V ? Czy jest na to jakiś wzór. Na logike to by było napięcie wejściowe czyli w tym przypadku 5vx2 =10KOhm
Spróbuję odpowiedzieć tak jak rozumiem pytanie.
Potencjometr „składa się z dwóch rezystorów”. Łączna wartość obu zawsze jest taka sama. Np jak potencjometr ma 10k to zawsze między skrajnymi pinami masz 10kΩ. Rezystancja między środkowym a pozostałymi dwoma się zmienia, w zależności od ustawienia pokrętła.
Czyli napięcie na „wyjściu” potencjometru zależy tylko od tego jakie jest napięcie „zasilania” i jak jest ustawione pokrętło. Napięcie wyjściowe zmienia się od 0V do napięcia „zasilania”.