Potenciometr

V tomto článku si vyzkoušíme připojení a použití potenciometru. Protože Arduino umí převod analogových hodnot na digitální, lze k němu připojit různé potenciometry či další součástky, které mají na výstupu analogovou hodnotu napětí. V základním použití lze pomocí analogových vstupních pinů měřit napětí mezi hodnotami 0 až 5 V, případně lze spodní hranici posouvat přivedením referenčního napětí na pin AREF. Při měření napětí je vždy rozsah rozdělen na hodnoty 0 až 1023, to tedy znamená, že hodnota proměnné 1 odpovídá napětí 4,88 mV. Jako první příklad jsem si zapojil potenciometr podle uvedeného schématu. Většina potenciometrů má 3 výstupní piny, přičemž na krajních pinech je připojen odpor odpovídající hodnotě uvedené na potenciometru a jako prostřední pin je vyvedený jezdec. Při otočení osičky potenciometru tedy měníme odpor mezi jedním z krajních pinů a prostředním pinem. Já jsem tedy zapojil potenciometr tak, že na jeden z krajních pinů jsem připojil napájecí napětí 5 V a na druhý 0 V. Prostřední pin jsem připojil do analogového vstupu A0 a LED diodu jsem připojil společně s odporem k digitálnímu pinu 3.

Zde ještě uvádím obrázek nepájivého pole vytvořeného pomocí programu Fritzing.

Ukázkový kód pro uvedené zapojení je uveden níže. Jako nový příkaz je zde analogRead(pin), který do nastavené proměnné potProm uloží převedenou hodnotu napětí z připojeného potenciometru. Poté se zapne LED dioda a program je zastaven po dobu hodnoty napětí z potenciometru. Po uběhnutí zastavení se LED diody vypne a opět se program zastaví po dobu hodnoty napětí. Tento jednoduchý příklad nám tedy vytvoří blikač, u kterého si potenciometrem nastavujeme periodu blikání v rozsahu 0 až 1023 ms s pevnou střídou 50%.

// Potenciometr
// navody.dratek.cz

int potPin = A0;    // číslo pinu připojeného potenciometru
int ledPin = 3;     // číslo pinu připojené LED diody

int potProm = 0;    // proměnná pro analogovou hodnotu potenciometru

void setup() {
  // nastavení LED jako výstup
  pinMode(ledPin, OUTPUT);
  // nastavení potenciometru jako vstup
  pinMode(potPin, INPUT);
}

void loop() {
  // načtení analogové hodnoty senzoru a uložení do proměnné
  potProm = analogRead(potPin);
  // zapne LED diodu
  digitalWrite(ledPin, HIGH);
  // zastaví program po dobu odpovídající
  // analogové hodnotě potenciometru
  delay(potProm);
  // vypne LED diodu
  digitalWrite(ledPin, LOW);
  // zastaví program po dobu odpovídající
  // analogové hodnotě potenciometru
  delay(potProm);
}

Jako další příklad jsem si vybral řízení svitu LED diody pomocí PWM regulace. Tato regulace ve zkratce funguje tak, že se změnou střídy (poměru času zapnutí a vypnutí) řídí například svit LED diody či otáčky motorů a podobně. Pro správné řízení je nutné přemapovat  naměřenou hodnotu z potenciometru na výstupní analogovou hodnotu napětí. Hodnoty naměřené pomocí funkce analogRead jsou v rozsahu 0 až 1023, zatímco na výstup PWM pinů musíme nastavovat napětí v rozsahu 0 až 255. Tento přepočet obstará funkce map, která je přímo v příkladu uvedena - na prvním místě je zdrojová proměnná z potenciometru, na druhém a třetím rozsah zdrojové proměnné a na posledních 2 místech rozsah cílové proměnné. Dále bych chtěl ještě zmínit tu skutečnost, že výstupní napětí lze nastavovat pouze u pinů, které jsou označeny jako PWM, u Arduino Duemilanove jsou to  3, 5, 6, 9, 10 a 11. Program je obdobný předchozímu, přičemž jsem přidal také využití komunikace po sériové lince. Ve funkci setup se nachází příkaz pro samotné zapnutí a nastavení komunikace a dále se po řízení svitu LED diody odesílají naměřené hodnoty z potenciometru přes sériovou linku do připojeného počítače. Okno pro zobrazení zaslaných hodnot si můžete aktivovat po nahrání programu přes ikonku lupy v pravém horním rohu či v nabídce Nástroje-Sériový monitor. Je také ještě nutné nastavit v Sériovém monitoru stejnou rychlost, jakou máme nastavenou v programu - v tomto případě 9600 bps.

// Potenciometr PWM LED
// navody.dratek.cz

int potPin = A0;    // číslo pinu připojeného potenciometru
int ledPin = 3;     // číslo pinu připojené LED diody

int potProm = 0;    // proměnná pro analogovou hodnotu potenciometru
int ledProm = 0;    // proměnná pro analogovou hodnotu PWM

void setup() {
  // nastavení LED jako výstup
  pinMode(ledPin, OUTPUT);
  // nastavení potenciometru jako vstup
  pinMode(potPin, INPUT);
  // nastavení komunikace přes sériovou linku s rychlostí 9600 bps
  Serial.begin(9600);
}

void loop() {
  // načtení analogové hodnoty senzoru a uložení do proměnné
  potProm = analogRead(potPin);
  // přepočet hodnot z potenciometru na PWM LED diody
  ledProm = map(potProm, 0, 1023, 0, 255);
  // nastavení napětí na LED diodě odpovídající hodnotě PWM
  analogWrite(ledPin, ledProm);

  // vytisknutí naměřených údajů přes sériovou linku
  Serial.print("Senzor = " );
  Serial.print(potProm);
  Serial.print("\t vystup = ");
  Serial.println(ledProm);

  // pauza programu na 2 ms pro ustálení 
  // analogově-digitálního převodníku
  // po předchozím čtení hodnot
  delay(2);
}

Po správném zapojení by jste měli dostat obdobné výsledky v Sériovém monitoru jako na obrázku níže.

Potenciometry, LED diody a mnoho dalšího lze zakoupit na internetovém obchodu dratek.cz

Další podobné články