czwartek, 24 września 2015

[11] Arduino - Obsługa serwomechanizmu

W tym poście chciałbym opisać sposób sterowania serwomechanizmem za pomocą Arduino Uno.

Wstęp


Serwomechanizm jest to zamknięty układ sterowania ze sprzężeniem zwrotnym. Sygnałem wyjściowym jest położenie, przyśpieszenie, prędkość lub najczęściej przesunięcie.
Gdy na linię danych podawany jest sygnał stały serwomechanizm się nie porusza, natomiast gdy sygnał się zmienia następuje ustawienie go w odpowiedniej pozycji.


Rys. 1.1. Przykładowy serwomechanizm [1]

Podłączenie


W celu poprawnego podłączenia należy zastosować stabilizator napięcia o dość dużej wydajności prądowej (1-1.5V powinno spokojnie wystarczyć). Taki stabilizator potrzebuje kondensatorów filtrujących na wejściu oraz na wyjściu zasilania. Dokładne wartości można odczytać z noty katalogowej.

Zasilanie serwomechanizmu najlepiej zapewnić z zewnętrznego źródła np. bateria 9V lub jakiś zasilacz gniazdkowy. Arduino do celu się nie nadaje, spowodowane jest to małą maksymalną wartością prądu dla pojedynczego wyprowadzenia (tj. 40 mA).

Stabilizator napięcia oraz Arduino muszą być połączone wspólną masą. Inaczej całość nie będzie działać.

Serwomechanizm:
  • Zasilanie - przewód czerwony - do wyjścia stabilizatora 
  • Masa - przewód czarny - 
  • Sterowanie -
Potencjometr podłączamy do masy i zasilania Arduino, pin środkowy do pinu analogowego A0.

Program


W pierwszym programie opisze sposób kontrolowania serwomechanizmu przy pomocy potencjometru.
Aby całość poprawnie obsługiwała serwomechanizm należy dołączyć bibliotekę Servo.h. W kolejnych linijkach znajduje się deklaracja poszczególnych pinów dla serwomechanizmu oraz dla potencjometru. Deklaracja Servo Serwo1 tworzy obiekt biblioteki Serwo1. Wobec tego za każdym razem gdy chcemy się odnieść bezpośrednio do mechanizmu należy użyć tej deklaracji.
W setup() dodałem inicjalizację Serwa. Pętla loop() zawiera całe wykonanie programu od odczytania wartości potencjometru, przez mapowanie wartości odczytanej z potencjometru na  wartość kąta przesunięcia, czyli 180 st. W przedostatniej linijce wpisywana jest wartość zmiany położenia.


//Wymagana biblioteka
#include <Servo.h>
 
//Pin serwomechnizmu
const int SERWO = 6;
//Pin potencjometru
const int POTEN = 0;
 
Servo Serwo1;
//Zmienna przechowująca wartość z potencjometru
int zmienna = 0;
 
void setup() {
  Serwo1.attach(SERWO);
}
 
void loop() {
  //Odczytanie wartości
  zmienna = analogRead(POTEN);
  //mapowanie odczytanej wartosci
  zmienna = map(zmienna, 0, 1023, 0, 179);
  //ustawienie serwomechanizmu
  Serwo1.write(zmienna);
  delay(20);
}

Bibliografia

[1]       www.bootland.com.pl