ULN2003 to popularny układ sterownika tranzystorowego Darlingtona (często jako moduł) do sterowania silnikami krokowymi unipolarnymi, takimi jak 28BYJ-48. Umożliwia łatwe podłączenie do mikrokontrolerów (np. Arduino), oferując obciążalność do 500 mA/kanał i napięcie do 50 V, z wbudowanymi diodami zabezpieczającymi. Najczęściej współpracuje z silnikiem 28BYJ-48 (5 V, 5 przewodów: czerwony – VCC, niebieski, różowy, żółty, pomarańczowy) i wymaga 4 pinów sterujących IN1–IN4.
Potrzebne komponenty
Przygotuj następujące elementy:
- Moduł ULN2003 – wersja z gniazdem JST dla silnika i diodami LED sygnalizującymi fazy;
- Silnik krokowy 28BYJ-48 – unipolarny, zwykle 5 V;
- Mikrokontroler – np. Arduino Uno, Arduino Nano lub Wemos D1 Mini (ESP32);
- Przewody połączeniowe – żeńsko–męskie, ok. 6 szt.;
- Źródło zasilania – 5 V z Arduino lub zewnętrzne 5–12 V zgodnie z wersją silnika;
- Płytka stykowa – opcjonalnie, ułatwia porządek połączeń.
Schemat podłączenia (standardowy dla Arduino Uno)
Moduł ULN2003 ma zazwyczaj piny: + (VCC), – (GND), IN1–IN4 oraz gniazdo na silnik.
| Pin modułu ULN2003 | Pin Arduino Uno | Uwagi |
|---|---|---|
| + (VCC) | 5V | Zasilanie sterownika (5 V z Arduino lub z zasilacza zewnętrznego). |
| – (GND) | GND | Wspólna masa dla wszystkich elementów. |
| IN1 | Pin 8 | Sterowanie fazą 1. |
| IN2 | Pin 9 | Sterowanie fazą 2. |
| IN3 | Pin 10 | Sterowanie fazą 3. |
| IN4 | Pin 11 | Sterowanie fazą 4. |
| Gniazdo silnika | Wtyczka silnika | Wepnij białą wtyczkę (kolejność: BLU, PNK, YEL, ORG, RED – RED to wspólny +VCC). |
Dla Wemos D1 Mini R32 (ESP32) – IN1→IO16, IN2→IO17, IN3→IO25, IN4→IO26.
Krok po kroku – podłączenie
Wykonaj poniższe kroki:
- Podłącz wtyczkę silnika – włóż białą wtyczkę silnika 28BYJ-48 do gniazda na module ULN2003 (kolejność przewodów w gnieździe: niebieski, różowy, żółty, pomarańczowy, czerwony – wspólny VCC);
- Podłącz zasilanie sterownika – przewód z + (VCC) modułu do 5V Arduino, a – (GND) do GND Arduino; diody LED na module powinny się zaświecić po podaniu zasilania;
- Podłącz piny sterujące – IN1→8, IN2→9, IN3→10, IN4→11 na Arduino;
- Zasilanie zewnętrzne (zalecane) – jeśli moment jest zbyt mały przy 5 V z Arduino, użyj zasilacza zgodnego z wersją silnika (5 V lub 12 V): plus do + modułu (lub zworki 5/12 V), minus do GND (pamiętaj o wspólnej masie z Arduino);
- Sprawdź połączenia – upewnij się, że masa (GND) jest wspólna i nie ma odwróconej polaryzacji.
Kod Arduino do testów (4 linijki bazowego sterowania)
Użyj biblioteki Stepper.h (Arduino IDE: Sketch → Include Library → Stepper). Przykładowy szkic:
#include <Stepper.h>
const int stepsPerRevolution = 2048; // dla 28BYJ-48 (ok. 2048 kroków/obrót w half-step)
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // piny IN1–IN4
void setup() {
myStepper.setSpeed(15); // rpm (do ~20 dla 5 V)
}
void loop() {
myStepper.step(stepsPerRevolution / 4); // ~90° zgodnie
delay(500);
myStepper.step(-stepsPerRevolution / 2); // ~180° przeciwnie
delay(500);
}
Wgraj szkic – silnik powinien obracać się o 90° i 180°. W razie potrzeby dostosuj stepsPerRevolution (często 4096 dla pełnego obrotu zależnie od trybu krokowania i przekładni).
Ważne porady i wskazówki
Aby uniknąć typowych problemów i uzyskać stabilną pracę, zwróć uwagę na poniższe kwestie:
- Napięcie silnika – 5 V z Arduino jest dobre do testów, ale dla pełnej mocy zastosuj zewnętrzny zasilacz zgodny z wersją silnika (5 V lub 12 V);
- Tryb pracy – tylko unipolarny (ULN2003 nie jest mostkiem H i nie obsługuje silników bipolarnych);
- Ograniczenia prądowe – maks. 500 mA/kanał, łącznie dostępnych 7 kanałów (tu używasz 4); przy długiej pracy i wyższym obciążeniu rozważ chłodzenie;
- Diody LED na module – sygnalizują aktywne fazy (A, B, C, D), co ułatwia diagnostykę;
- Problemy – najczęstsze objawy i szybkie rozwiązania:
- silnik nie rusza – sprawdź wspólną masę GND, kolejność pinów oraz napięcie zasilania,
- drgania lub gubienie kroków – zmniejsz prędkość (
setSpeed) lub zmień sekwencję krokową, - przegrzewanie – obniż rpm, zrób przerwy w pracy lub dodaj chłodzenie.
- Bezpieczeństwo – nie podłączaj silnika bezpośrednio do pinów Arduino; zawsze odłącz zasilanie przed zmianami w okablowaniu;
- Rozszerzenia – do precyzyjnego sterowania użyj biblioteki AccelStepper; dla wielu silników zastosuj osobne linie INx lub kolejne moduły.





