Zaloguje się
or
Tel +48 698 615 740

Testy 16-kanałowego sterownika serw ADEAS przy użyciu arduino

08 marca, 2024

W tym artykule zostanie przetestowana płytka ADEAS, sterująca wieloma serwami, zostanie przedstawione połączenie oraz wszystko co potrzebne do sterowania. Jest to bardzo przydatne rozwiązanie, ponieważ przy pomocy komunikacji z I2C, można sterować aż 16 serwami.

Spis treści

  • Krótki opis
  • Specyfikacja
  • Wykorzystane komponenty
  • Podłączenie
  • Wgranie potrzebnej biblioteki
  • Wykorzystanie przykładu
  • Przedstawienie działania
  • Pliki do pobrania

Krótki opis

16-kanałowy sterownik serw to zaawansowane urządzenie, które zapewnia możliwość precyzyjnego sterowania wieloma serwomechanizmami jednocześnie. Jest to niezwykle przydatne w różnych dziedzinach, od robotyki po modelarstwo, zapewniając zaawansowane możliwości kontroli i automatyzacji ruchów.

Specyfikacja

  • Napięcie części logicznej: od 3,3 V do 5 V.
  • Napięcie zasilania: 3-5 V
  • Maksymalne napięcie silników: 6 do 28V
  • Liczba kanałów: 16
  • Rozdzielczość każdego kanału: 12 bit
  • Interfejs: I2C
  • Częstotliwość pracy kanałów: 40÷1000 Hz
  • Rozmiar modułu: 67 mm x 43 mm x 10 mm
  • Wszystkie wyprowadzenia są opisane na płytce.
  • Wbudowany rezonator taktujący, dzięki któremu do układu nie trzeba stale wysyłać sygnału z mikrokontrolera.
  • Możliwość wyboru adresu magistrali I2C (0x60-0x80) za pośrednictwem zworek, co daje możliwość podpięcia 62 urządzeń.
  • Układ wyposażony w zworkę pozwalająca na zasilanie całego układu 5V
  • Układ wyposażony w aktywacje wyjścia może być sterowane z procesora lub aktywowane zworką
  • Układ wyposażony w zlutowane złączą śrubowe odpowiedzialne za komunikacje i zasilanie

Wykorzystane komponenty

  • PCA9685 – sterownik serw 16-kanałowy, 12-bitowy PWM I2C – ADEAS
  • MEGA 2560 R3 ATMega2560 16MHz – CH340 + Kabel USB
  • Przewody połączeniowe
  • 2 x zworka

Podłączenie

Na początku zwieramy dwiema zworkami wystające pary pinów na płytce, 5V_VIN odpowiada za zasilanie z sekcji power płytki jak i serw. W przypadku kiedy chcemy osobno zasilić serva i układ płytki, możemy pominąć zwieranie i wtedy zasilanie podłączamy do sekcji power jak i I2C. Druga zworka służy do uruchomienia sygnału wyjściowego, można też to zrobić z poziomu arduino jeżeli taka opcja nas interesuje.

Użyję zasilacza do zasilenia układu jak i serv, do sekcji power podpinam plus do 5V i minus do GND. W sekcji I2C, podłączam SCL i SDA do odpowiadających im pinów w arduino. Podłączam dodatkowo GND do arduino, również z sekcji I2C. Tak podłączony układ jest gotowy do dalszej pracy.

Serwa wpinamy tam gdzie jest oznaczenie na płytce BROWN, RED, ORANGE, wskazuje to na kolor przewodów od serwa, jeżeli wasze serwo ma inny kolor przewodu, proszę postępować zgodnie z tym schematem BROWN – GND, RED – VCC, ORANGE – Sygnał.

Wgranie potrzebnej biblioteki

Użyję biblioteki od Adafruit, a dokładniej PWM Servo Driver Library, która doskonale sprawdza się w obsłudze naszego układu, bibliotekę można pobrać na dole artykułu lub na stronie biblioteki, gdzie można znaleźć również informacje o niej, wystarczy kliknąć tutaj. Kiedy pobierzemy, to implementujemy ją do arduino.

Wykorzystanie przykładu

Włączamy przykład servo, plik -> przykłady -> Adafruit PWM servo driver library -> servo . Zalecam też zmienić w przykładzie stałą SERVO_FRQ z 50 na 60. Możemy wgrać przykład do arduino i zaraz po wgraniu nasze serwa powinny zacząć się ruszać.

Na podstawie przykładu napisałem program, który przedstawi jedno z zastosowań biblioteki. Ruszamy serwami za pomocą + i – lub wystarczy przytrzymać enter, wtedy mamy szybkie odejmowanie co za tym idzie szybszy ruch. Oczywiście zachęcam do edycji kodu i dodania większej ilości serw oraz zapoznania się z innymi funkcjami biblioteki.

#define SERVOMIN  150 // This is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  600 // This is the 'maximum' pulse length count (out of 4096)
#define USMIN  600 // This is the rounded 'minimum' microsecond length based on the minimum pulse of 150
#define USMAX  2400 // This is the rounded 'maximum' microsecond length based on the maximum pulse of 600
#define SERVO_FREQ 60 // Analog servos run at ~50 Hz updates

// our servo # counter
uint8_t servonum = 0;

void setup() {
  Serial.begin(9600);

  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);
  //powrót serw na miejsce max
  pwm.setPWM(1, 0, SERVOMAX);
  delay(100);
  pwm.setPWM(0, 0, SERVOMAX);
  delay(10);
}

String command = "";
int position = SERVOMAX;
int positionCount = 25;

void loop() {
  if(Serial.available() > 0) {
    command = Serial.readStringUntil('\n');
    if(command == "+") {
      if(position <= SERVOMAX) {
        position+=positionCount;
        pwm.setPWM(1, 0, position);
        // delay(100);
        pwm.setPWM(0, 0, position);
      } else {
        position = SERVOMAX;
      }
    } else {
      if(position >= SERVOMIN) {
      position-=positionCount;
      pwm.setPWM(1, 0, position);
      // delay(100);
      pwm.setPWM(0, 0, position);
      } else {
        position = SERVOMIN;
      }
    }
  }
}

Przedstawienie działania

Pliki do pobrania

Sticky
Możliwość komentowania Testy 16-kanałowego sterownika serw ADEAS przy użyciu arduino została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.