Arduino jest wykorzystywane do sterowania napędami praktycznie od zawsze. Przykład stanowią silniki DC, serwomechanizmy i 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.
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:
// 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ć:
- Seeeduino V4.2
- nakładki Grove Base Shield V2 – opcjonalna, dla ułatwienia połączenia
- Grove – I2C Motor Driver V1.3
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:
// 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:
- obwody sterowania,
- małe silniki prądu stałego,
- potencjonometry.
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 i 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.
/* 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.
Jedna odpowiedź
Super wszystko wytłumaczone i do tego treściwie. Mam jednak problem z tym, że pewne części a konkretnie groove l298 jest obecnie niedostępny, a potrzebny ten moduł jest i to w jak najszybszym czasie. Czy są jakieś dobre zamienniki za niego i czy do komunikacji i programowania zamiast płytki Seduino można użyć zwykłego Arduino Uno? Dzięki z góry za pomoc, Pozdrawiam