Serwa wykorzystujemy do przeróżnych rzeczy w naszych projektach, od prostego wychylania czy obracania do bardziej złożonych narzędzi jak ramiona, uchwyty. Niedawno opisywaliśmy sterowanie serwami w Raspberry Pi, z wykorzystaniem biblioteki PIGPIO. Pokażemy jak steruje się serwami w BeagleBone Black za pomocą biblioteki BoneScript.

Schemat podłączenia

Poniżej przedstawiamy schemat podłączenia serwa do BeagleBone Black. Należy zauważyć, że serwo jest zasilane osobno z baterii/zasilacza i zalecamy podłączać je w taki sposób, aby wyeliminować możliwość uszkodzenia płytki. Do przykładu użyliśmy Serwo Redox L360. PWM z serwa zostało podłączone do pinu P8_13, zasilanie 5V i GND podłączone z zasilacza lub baterii, zaś GND z pinu P8_2 podłączone do GND z zasilacza. Na schemacie widoczny jest również rezystor 1kΩ, który jest opcjonalny.

BeagleBone Black - sterowanie serwem za pomocą biblioteki BoneScript - schemat

Sterowanie za pomocą BoneScript

Domyślną biblioteką do sterowania pinami w BeagleBone Black jest BoneScript, która została napisana w JavaScript. Na płytce zainstalowany jest serwer node.js, dzięki czemu możemy sterować pinami bezpośrednio w przeglądarce lub tworząc własną stronę.

BeagleBone Black - serwer node.js w przeglądarce

Panel webowy dostępny jest po adresem IP podłączonego BeagleBone Black. Można tam zobaczyć przykłady sterowania pinami za pomocą wielu funkcji.

Aby zobaczyć działanie poniższego kodu, które obraca serwem, wejdź na stronę IP_twojego_BBB/Support/BoneScript/pinMode/ i w okienku EXAMPLE wklej poniższy kod, po czym naciśnij przycisk run.

var b = require('bonescript');
var SERVO = 'P8_13';
var duty_min = 0.03;
var position = 0;
var increment = 0.1;

b.pinMode(SERVO, b.OUTPUT);
updateDuty();

function updateDuty() {
    // compute and adjust duty_cycle based on
    // desired position in range 0..1
    var duty_cycle = (position*0.115) + duty_min;
    b.analogWrite(SERVO, duty_cycle, 60, scheduleNextUpdate);
    console.log("Duty Cycle: " + 
        parseFloat(duty_cycle*100).toFixed(1) + " %");   
}

function scheduleNextUpdate() {
    // adjust position by increment and 
    // reverse if it exceeds range of 0..1
    position = position + increment;
    if(position < 0) {
        position = 0;
        increment = -increment;
    } else if(position > 1) {
        position = 1;
        increment = -increment;
    }
    
    // call updateDuty after 200ms
    setTimeout(updateDuty, 200);
}

Serwo zacznie się obracać w obydwie strony. Jest to przykład wykorzystania biblioteki BoneScript do sterowania serwem za pomocą funkcji analogWrite().

Sterowanie z poziomu terminala

Można również sterować serwem za pomocą komendy w terminalu; przykładowo dla PWM z częstotliwością 50Hz:

node -e "require('bonescript').analogWrite('P9_14', 0.010, 50, console.log);"

Gdzie druga wartość powinna być od 0.000 do 0.180 dla częstotliwości 50Hz (100Hz od 0.0. do 0.240, 200Hz 0.0. do 420 itd.). Sterowanie odbywa się za pomocą serwera node.js, identycznie jak ma to miejsce poprzez panel www.

Zarówno w panelu jak i poleceniu w konsoli do sterowania serwem użyta została funkcja analogWrite(pin,value,freq,callback).

Artykuł ten jest częścią serii o BeagleBone Black. Za dostarczenie płytki oraz pozostałych urządzeń dziękujemy BOTLAND.com.pl