Skip to main content

Servo skeniranje

Što ovaj primjer prikazuje​

Pogon hobističkog serva po kutu umjesto po sirovim impulsima, te njegovo skeniranje naprijed-natrag unutar konfiguriranog raspona. Ovo je primarna oglašena namjena ploče.

Primjerni kod​

Select Board
Servo_Sweep.ino
#include "PCA9685-SOLDERED.h"

PCA9685 pwm;

void setup()
{
pwm.begin(); // sets 50Hz PWM frequency by default, suitable for hobby servos

// Adjust to match your servo's datasheet if it doesn't reach full range
pwm.setServoPulseRange(500, 2500); // microseconds
pwm.setServoAngleRange(0, 180); // degrees
}

void loop()
{
for (int angle = 0; angle <= 180; angle += 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}

for (int angle = 180; angle >= 0; angle -= 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}
}

Očekivani rezultat:

Nema serijskog izlaza. Hobi servo spojen na kanal 0 pomiče se od 0 do 180 stupnjeva i natrag, pri čemu svaki smjer traje nešto manje od 3 sekunde, a zatim se postupak ponavlja.

Koristene funkcije​

PCA9685(uint8_t _address = PCA9685_DEFAULT_ADDRESS)returns None

Nativni konstruktor. I2C adresa ploče je fiksirana pomoću kratkospojnika JP1–JP6, stoga navedite adresu koja odgovara postavkama vaše ploče ili je ostavite na zadanoj vrijednosti.

ReturnsKonstruktor; nema povratnu vrijednost.

Parametri

TipNazivOpis
uint8_t_addressI2C adresa ploče. Zadano je PCA9685_DEFAULT_ADDRESS (0x40).
begin()returns void

Inicijalizira PCA9685 preko I2C-a i postavlja zadanu PWM frekvenciju od 50 Hz, kakvu očekuju hobi servoi. Pozovite ga jednom u setup().

ReturnsNišta.

Parametri

Ova funkcija ne prima parametre.

setServoPulseRange(uint16_t minPulseUs, uint16_t maxPulseUs)returns void

Konfigurira širinu pulsa u mikrosekundama koju setServoAngle() mapira na minimalni i maksimalni kut. Uskladite to s tehničkim podacima vašeg serva ako pri zadanim postavkama biblioteke ne dosegne svoj puni mehanički raspon.

ReturnsNišta.

Parametri

TipNazivOpis
uint16_tminPulseUsŠirina impulsa u mikrosekundama mapirana na minimalni kut. Zadano u biblioteci: 500 us.
uint16_tmaxPulseUsŠirina impulsa u mikrosekundama mapirana na maksimalni kut. Zadano u biblioteci: 2500 µs.
setServoAngleRange(float minAngle, float maxAngle)returns void

Konfigurira raspon kutova, u stupnjevima, koji prihvaća setServoAngle().

ReturnsNišta.

Parametri

TipNazivOpis
floatminAngleKut u stupnjevima mapiran na minPulseUs. Zadano u biblioteci: 0.
floatmaxAngleKut u stupnjevima mapiran na maxPulseUs. Zadano u biblioteci: 180.
setServoAngle(uint8_t channel, float angle)returns void

Pokreće hobi servo na zadanoj frekvenciji kanala do kuta, ograničenog na konfigurirani raspon kutova. Unutar sebe pretvara kut u širinu impulsa i poziva setPWM(), uz pretpostavku da je frekvencija od 50 Hz zadana pozivom begin() po zadanom.

ReturnsNišta.

Parametri

TipNazivOpis
uint8_tchannelBroj kanala, od 0 do 15.
floatangleKut u stupnjevima, ograničen na raspon postavljen pomoću setServoAngleRange().

Sklapanje​

setServoPulseRange() i setServoAngleRange() su pozivi za jednokratno postavljanje: pokrenite ih jednom, prije prvog poziva setServoAngle(). Nakon toga, setServoAngle() obavlja matematiku pretvaranja kuta u širinu impulsa i poziva setPWM() umjesto vas, tako da nikada ne morate ručno izračunavati broj tikova za servo.

U dokumentaciji za setServoAngle() navodi se da se podrazumijeva setPWMFreq(50), vrijednost koju postavlja zadani poziv begin(). Ako je nešto drugo na istoj ploči u međuvremenu pozvalo setPWMFreq() na drugu vrijednost, na primjer za LED na drugom kanalu, držite servo kanale na 50 Hz umjesto da se oslanjate na setServoAngle() na drugoj frekvenciji.