Собственно САБЖ. Мастерим с ребенком “луноход” со всенаправленными колесами. 4 колеса на шаговых двигателях 28YBJ-48-5V. Двигатели стоят на драйверах (которые были в комплекте к двигателям) ULN2003. И теперь надо четыре вывода каждого контроллера собрать со всех четырех колес на Arduino UNO (4 x 4 = 16). Итого 16 портов. Каким расширителем увеличить количество портов чтобы подключить шаговые двигатели?
Для управления четырьмя шаговыми двигателями 28YBJ-48-5V через драйверы ULN2003 с помощью Arduino UNO вам потребуется расширитель GPIO, так как у UNO всего 14 цифровых пинов (а нужно 16).
Варианты расширителей портов:
1. Сдвиговые регистры (дешево и просто)
74HC595 (8-битный сдвиговый регистр) – можно каскадировать.
- Плюсы: дешево, просто в подключении.
- Минусы: требует 3 пина Arduino (+ дополнительные для каскада).
- Сколько нужно: 2 шт. (16 выходов).
2. I2C-расширители (удобно, минимум проводов)
PCF8574 (8-битный, I2C) – адресуемый, можно подключить до 8 штук.
- Плюсы: 2 провода (SDA, SCL), много адресов.
- Минусы: требует подтяжки резисторов.
- Сколько нужно: 2 шт. (16 выходов).
MCP23017 (16-битный, I2C) – лучше, чем PCF8574.
- Плюсы: 16 выводов на одной микросхеме, гибкость (вход/выход).
- Минусы: чуть сложнее в настройке.
- Сколько нужно: 1 шт. (хватит на все 16 сигналов).
3. Драйверы двигателей с управлением по SPI/I2C
TLC5940 (ШИМ + GPIO) – если нужно управление скоростью.
DRV8825 + I2C-мультиплексор – если переходите на более мощные драйверы.
Рекомендация:
Лучший вариант – MCP23017 (I2C), потому что:
✅ Одна микросхема вместо двух.
✅ Минимум проводов (SDA, SCL + питание).
✅ Гибкость (можно добавить еще MCP23017 при необходимости).
Схема подключения MCP23017:
1. I2C-подключение:
– SDA → A4 (UNO)
– SCL → A5 (UNO)
– VCC → 5V
– GND → GND
– Адресные пины (A0, A1, A2) – заземлить (адрес 0x20).
2. Подключение ULN2003:
– 16 выводов MCP23017 → IN1-IN4 каждого драйвера ULN2003.
Библиотеки для работы:
#include < Wire.h >
#include < Adafruit_MCP23017.h >
Пример кода:
Adafruit_MCP23017 mcp;
void setup() {
mcp.begin(); // I2C-адрес 0x20
for (int i = 0; i < 16; i++) {
mcp.pinMode(i, OUTPUT);
}
}
void loop() {
mcp.digitalWrite(0, HIGH); // Включить первый пин
}
Вывод:
MCP23017 – оптимальный выбор для вашего проекта. Если нужна дешевая альтернатива – 74HC595, но проводов будет больше.