Jak sterować silnikami DC i serwomechanizmami

Czas czytania: 5 min.

Arduino jest wykorzystywane do sterowania napędami praktycznie od zawsze. Przykład stanowią silniki DC, serwomechanizmy silniki krokowe. Dzisiaj zajmiemy się dwoma spośród tych napędów – silnikami DC i serwomechanizmami, które z uwagi na prostotę i funkcjonalność zdążyły rozpowszechnić się wśród hobbystów elektroniki. 

Sprawdzimy:

  • czym jest silnik DC,
  • jak kontrolować silnik DC za pomocą Arduino Motor Shield,
  • jak kontrolować silnik DC za pomocą Arduino Motor Driver,
  • czym jest serwomechanizm,
  • jak kontrolować serwomechanizm za pomocą Arduino.
Zaczynajmy.
 

Czym jest silnik DC

Zgodnie z obietnicą – przyjrzyjmy się najpierw, czym on tak właściwie jest. Motor DC (od ang. Direct Current, prąd stały) zamienia jedną postać energii na inną – konwertuje energię elektryczną na energię mechaniczną. Podczas przepływu prądu biegunowość dwóch pól magnetycznych wewnątrz motoru – będziemy stosować motor zamienne z określeniem silnik – wprawi go w ruch obrotowy w jednym kierunku na tak długo, jak będzie płynąć prąd. Silniki DC nie mają biegunowości (chyba, że oznaczono je [+]i [-]), co oznacza, że można zmienić kierunek ruchu motora za pomocą przewodów. Silnik DC składa się z:

  • stojana/statora,
  • twornika,
  • rotora, 
  • komutatora/przełącznika.

Silniki DC stosuje się powszechnie. Można je znaleźć m.in. w odkurzaczach, suszarkach, windach i elektrycznych szybach. Z uwagi na wysoki początkowy moment obrotowy dobrze radzą sobie z absorbowaniem nagłych zmian ładunku i wstrząsami. W porównaniu do innych napędów są stosunkowo proste i wydajne.

Kontrola silnika DC z Arduino Motor Shield

Arduino Motor Shield to moduł sterujący dla napędów, który pozwala na używanie Arduino w celu sterowania szybkoscią i kierunkiem pracy silnika. Opiera się na chipie Dual Full-Bridge Drive L298, dzięki któremu możemy kontrolować aż dwa silniki DC albo silnik krokowy. 

Więcej o L298 można znaleźć na blogu Seeedstudio.

Do kontroli silnika DC z Arduino Motor Shield potrzebne będą:

Instrukcja krok po kroku

Krok 1: Ustaw SEN_A i SEN_B i połącz pozostałe dwa piny kablem rozruchowym.

Krok 2: Połącz kablem rozruchowym MB_EN – nie będziemy używać zewnętrznego źródła zasilania.

Krok 3:

  • Połącz silnik DC z Chanel 0 (OUT1 i OUT2) i podłącz Motor Shield do Arduino.
  • Podłącz Arduino do PC przewodem USB.
  • Twoje połączenie powinno wyglądać tak:
setup Arduino

Krok 4: Pobierz bibliotekę dla Motor Shield i zainstaluj ją.
Poradnik instalacji biblioteki znajdziesz tutaj.

Krok 5: Wprowadź poniższy kod do Seeeduino:

//  Demo function:The application method to drive the DC motor.
//  Author:Loovee ([email protected])
//  2016-3-11

#include "MotorDriver.h"

MotorDriver motor;

void setup()
{
    // initialize
    motor.begin();
}

void loop()
{
    motor.speed(0, 100);            // set motor0 to speed 100
    delay(1000);
    motor.brake(0);                 // brake
    delay(1000);
    motor.speed(0, -100);           // set motor0 to speed -100
    delay(1000);
    motor.stop(0);                  // stop
    delay(1000);
}
// END FILE

Twój silnik powinien teraz: ruszyć na 1 sekundę, zatrzymać się na 1 sekundę, ruszyć na 1 sekundę, zatrzymać się na 1 sekundę i zapętlić

Jeżeli tak się nie stało, to upewnij się, czy:

  • Kod został wprowadzony prawidłowo,
  • Silnik został podłączony prawidłowo,
  • Wskaźnik LED świeci poprawnie. 

To już wszystko! 😀 Uruchomiłeś silnik DC z Arduino Motor Shield w pięciu prostych krokach.

Kontrola silnika DC z Arduino Motor Driver

Grove – I2C Motor Driver V1.3. (najnowsza wersja) pozwala na bezpośrednie sterowanie silnikiem DC lub silnikiem krokowym. Jego filarem jest sterownik L298N, który radzi sobie z napięciem 2 A na kanał. Jest kontrolowany przez Atmel ATmega8L – mikrokontroler, który odpowiada za komunikację z platformą poprzez magistralę i2c.

Więcej o L298N można znaleźć na blogu Seeedstudio.

Obydwa silniki mogą pracować przy ustawieniu różnej prędkości i kierunku pracy oraz zasilać dwa napędy DC lub jeden cztero-przewodowy, dwufazowy silnik krokowy. 

Będziemy potrzebować: 

Instrukcja krok po kroku

Krok 1: Ustaw adres za pomocą dip switcha (nowa funkcja w V1.3.). Zwróć uwagę na to, aby adres w programie zgadzał się z adresem w sterowniku silnika I2C. Domyślny adres w programie to 0x0f.

Krok 2: Podłącz sterownik silnika do portu I2C Grove-Base Shield i podłącz Grove-Base Shield do Seeeduino. Jeżeli nie posiadasz Grove Base Shield, możesz połączyć sterownik z Seeeduino bezpośrednio:

5V – czerwony
GND – czarny
SDA – biały
SCL – żółty

Krok 3: Połącz Seeeduino z PC przewodem USB. Twoje połączenie powinno wyglądać tak:

setup Arduino

Krok 4: Pobierz bibliotekę Grove I2C Motor Driver V.1.3. z Github i zainstaluj ją.

Poradnik instalacji biblioteki znajdziesz tutaj

Krok 5: Wprowadź poniższy kod do Arduino IDE:

// default I2C address is 0x0f
#define I2C_ADDRESS 0x0f

void setup()
{
    Motor.begin(I2C_ADDRESS);
}

W ten sposób udało Ci się połączyć ze sobą silnik DC, sterownik i Arduino. Oto dwie funkcje, które możesz zastosować do sterowania swoimi silnikami DC:

// Set the speed of a motor, speed is equal to duty cycle here
void speed(unsigned char motor_id, int _speed);

// Stop one motor
void stop(unsigned char motor_id);

Z funkcją speed() możesz sterować pojedynczym silnikiem z dowolnie wybraną prędkością.

  • Motor_id okresla, który silnik jest używany – MOTOR1 lub MOTOR2,
  • _speed określa ustawioną prędkość pracy. Możesz wstawić tutaj wartości -100~100.

Przy _speed>0 silnik pracuje zgodnie z ruchem wskazówek zegara. 
Przy _speed<0 pracuje przeciwnie do ruchu wskazówek zegara

Im wyższa wartość absolutna parametru _speed, tym szybciej pracuje silnik DC. 

Z funkcją stop() – tak, zgadłeś – możesz zatrzymać pracujący silnik DC. 

Czym jest serwomechanizm (Servo Motor)

Serwomechanizm to rotacyjny aktuator (mówiąc prosciej: uruchamiacz), który pozwala na precyzyjną kontrolę pozycji kątowej. Czyni go to użytecznym w systemach typu closed-loop, gdzie wymagana jest precyzyjna kontrola pozycji. Serwomechanizmy jako część tych systemów stanowią samodzielne urządzenia elektryczne, które obracają elementami maszyny z wysoką wydajnoscią i niezrównaną precyzją. Składają się na nie:

Serwomechanizmy są montowane przy pomocy śrub do obudowy, a samo połączenie np. z kołem odbywa się poprzez nałożenie na wał. Silnik jest kontrolowany analogowym lub cyfrowym sygnałem elektrycznym, co określa wielkości ruchu, które to z kolei reprezentują końcową, zadaną pozycję. Z uwagi na wysoką wydajność i moc stosuje się je m.in. w robotach, samolotach, przemyśle i sektorze usług – wszędzie tam, gdzie wymagana jest precyzyjna kontrola pozycji.

Kontrola serwomechanizmu z Arduino

Poniższy poradnik będzie nieco krótszy – setup współpracy pomiędzy serwomechanizmem a Arduino zamknęliśmy w trzech prostych krokach. Będziemy potrzebować:

  • wspomnianej już Seeeduino V4.2 (płytki kompatybilnej z Arduino UNO) 
  • Grove-Servo
  • wspomnianej Base Shield v2 – dla łatwiejszego połączenia

Krok 1: Podłącz Servo do Seeeduino

  • Servo ma trzy przewody: power, ground signal.
  • Power jest zwykle czerwony – połącz go pinem 5V na płytce Arduino/Seeeduino.
  • Ground jest zwykle czarny lub brązowy – połącz go tym pinem (ground) na płytce Arduino.
  • Signal jest zwykle żółty, pomarańczowy lub biały – połącz go do D5 na płytce Arduino.

Możesz zmieniać porty cyfrowe wedle uznania – tylko nie zapomnij wówczas o zmianie numeru portu w kodzie.

Krok 2: Podłącz moduł do PC 

  • Połącz moduł z portem D5 na Base Shield
  • Podłącz Grove-Base Shield do Arduino
  • Połącz Arduino z PC przewodem USB.

Krok 3: Oprogramowanie
Spróbujemy wykonać obrót  w dwie strony o 180 stopni przy użyciu biblioteki Arduino Servo Library. Otwórz kod ze ścieżki: File > Examples > Servo > Sweep.

biblioteka Arduino
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Sukces! Wszystko gotowe. Po dodaniu kodu Servo powinien zatańczyć jak należy. 

Zastosowanie Arduino do wprawiania silników w ruch zawsze było popularne i jest tak nadal. Zajęliśmy się tylko dwoma rodzajami silników – DC i servo. Na tym jednak zastosowania Arduino się nie kończą. W razie pytań zapraszamy Was do sekcji komentarzy. Powodzenia!

Silnik DC i serwomechanizmy – FAQ

W trakcie wyboru silnika DC (na prąd stały) należy przede wszystkim sprawdzić napięcie zasilania. Kolejnym kluczowym parametrem jest sam rozmiar silnika. Dodatkowo należy zwrócić szczególną uwagę na moment obrotowy wyrażany w niutonometrach (Nm) i prędkość obrotową, która jest wyrażana w liczbie obrotów na każdą minutę pracy silnika. Kolejnymi istotnymi kwestiami są przełożenie, średnica wału i typ wału (np. obustronny). W trakcie wyboru silnika DC warto również sprawdzić wartości dotyczące średniego prądu biegu jałowego, obroty biegu jałowego, a także maksymalny prąd w przypadku zatrzymanego wału.

Aby sprawdzić moc silnika DC (prądu stałego) warto zapoznać się z dokumentacją techniczna producenta. Moc silnika DC można obliczyć poprzez iloczyn napięcia i natężenia prądu. Podstawowy wzór to P=U*I, gdzie P to moc wyrażana w watach, U to napięcie wyrażane w woltach, a I to natężenie wyrażane w amperach.

Jak oceniasz ten wpis blogowy?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena: 5 / 5. Liczba głosów: 1

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.

Podziel się:

Picture of Oskar Pacelt

Oskar Pacelt

Fan dobrej literatury i muzyki. Wierzy, że udany tekst jest jak list wysłany w przyszłość. W życiu najbardziej interesuje go prawda, pozostałych zainteresowań zliczyć nie sposób. Kocha pływać.

Zobacz więcej:

Sandra Marcinkowska

Jak dobrać odpowiednie filamenty do drukarki Bambu Lab?

Bambu Lab przygotował przydatny przewodnik po filamentach. Strona zawiera wiele przydatnych informacji takich jak właściwości, ustawienia temperatury czy wymagania dotyczące suszenia. Dowiedz się, na co warto zwrócić uwagę przy wyborze materiału do projektu.

Agata Kosmala

Arduino Uno Q: Kiedy sprzęt zaczyna myśleć sam

Zwykłe rozmawianie z chatbotami to już przeszłość. Prawdziwa rewolucja dzieje się wtedy, gdy sztuczna inteligencja dostaje do dyspozycji czujniki, piny GPIO i… zaczyna samodzielnie sterować sprzętem! Dzięki nowemu Arduino Uno Q z „podwójnym mózgiem”, możesz tworzyć autonomicznych agentów AI działających całkowicie offline. Zobacz, jak frameworki takie jak OpenClaw zmieniają płytkę deweloperską w inteligentnego partnera, który sam pisze kod, kompiluje go i reaguje na otoczenie w czasie rzeczywistym.

Masz pytanie techniczne?
Zapytaj na zaprzyjaźnionym forum o elektronice.