Очередная жёнина хотелка... ;)
Привод для шторы и тюли (хорошо, что только в зале).

Поиски готового привели к приводам от 9круб и выше, но это один для одного (штора или тюль)...

Появилась такая конструкция...
В качестве собственно приводов используются ШД от старых матричных принтеров - EM-142 (EPM- 4260).
При питании 12в (номинальное 24в) они вполне справляются с поставленной задачей при D огибающей шкива 20мм. При питании от 24в возможно управление более тяжелыми шторами.
Шторы и тюль двигаются по пластиковому карнизу.
http://forumfiles.ru/uploads/0000/25/b8/1743/t925368.jpg
В качестве органов управления выбраны несколько "точек":
- настенный пульт, использован сенсорный модуль 4х1 Использование готовых модулей
- управление от дисплея Nextion по линии 1-Wire через DS2408
- управление от ИК https://chipster.ru/catalog/arduino-and … /4005.html

При использовании настенного пульта движение идет до конечных позиций без остановки.
При управлении от Nextion возможна остановка в любой позиции (есть "кнопка" СТОП).
При управлении от ИК-пульта возможна остановка в любой позиции повторным нажатием на нажатую ранее кнопку.
Одновременная работа приводов не предусмотрена.

Конечные позиции отслеживаются датчиком Холла TLE4945L.
При прекращении вращения любого из приводов перестают поступать сигналы от него.
Механически это организовано в виде двух дисков, на которых расположены магниты.
Между дисками расположен датчик.
Движение магнитов формирует сигнал на выходе датчика.
Даже если один из магнитов остановится возле датчика, это не мешает работа датчика от другого привода (магнита).

Программа

$Regfile="m48pdef.dat"
$Crystal=8000000
$hwstack=16
$swstack=16
$framesize=32

Wait 1
'===================================================================
Config Timer1 = Timer, Prescale = 8
Config Int0 = Rising
Config Int1 = Rising
On Timer1 pulse                                                                      ' Прерывание таймера
On INT0 ds2408                                                                        ' Прерывание от DS2408
On INT1 hall                                                                              ' Прерывание от датчика
On PCINT2 irpult                                                                       ' Прерывание от ИК пульта
PCMSK2.PCINT20 = 1
PCMSK2.PCINT21 = 1
PCMSK2.PCINT22 = 1
PCMSK2.PCINT23 = 1

'===================================================================
Config PORTC = Output                                                       ' Управление приводами
PORTC = 0

Config PORTB = Input                                                            ' Команды управления
PORTB = 255
Config PORTD = Input

'===================================================================
Dim flag As Byte                                                                      ' 0 - прием от DS2408
                                                                                                  ' 1 - прием от ИК
                                                                                                  ' 2 - 1-е нажатие на ИК
                                                                                                  ' 3 - 2-е нажатие на ИК
Dim kom As Byte
Dim s As Byte                                                                          ' Счетчик таймера
Dim pause As Byte                                                                  ' Задержка для ШД
pause = 10

'===================================================================
Enable Timer1
Enable INT0
Enable PCINT2
Enable Interrupts

'===================================================================
'===================================================================
Do

If flag = 0 Then kom = PINB                                                  ' Проверка кнопок
If kom.0 = 0 Then Gosub rotleft1                                          ' Управление привод 1 ВЛЕВО
If kom.1 = 0 Then Gosub rotright1                                        ' Управление привод 1 ВПРАВО
If kom.2 = 0 Then Gosub rotleft2                                          ' Управление привод 2 ВЛЕВО
If kom.3 = 0 Then Gosub rotright2                                        ' Управление привод 2 ВПРАВО
If kom.4 = 0 Then Gosub privodstop                                    ' Остановка
If flag.3 = 1 Then Gosub privodstop                                     ' Остановка

Loop
End
'===================================================================
'===================================================================
'                                         Выбор режима привода
'===================================================================
rotleft1:                                                                                 ' Привод 1 ВЛЕВО
Enable INT1
Start Timer1

Do
PORTC = &B0001_1110
Waitms pause
PORTC = &B0001_1101
Waitms pause
PORTC = &B0001_1011
Waitms pause
PORTC = &B0001_0111
Waitms pause
If s > 8 Then Exit Do
Loop

Goto privodstop
'===================================================================
rotright1:                                                                               ' Привод 1 ВПРАВО
Enable INT1
Start Timer1

Do
PORTC = &B0001_0111
Waitms pause
PORTC = &B0001_1011
Waitms pause
PORTC = &B0001_1101
Waitms pause
PORTC = &B0001_1110
Waitms pause
If s > 8 Then Exit Do
Loop

Goto privodstop
'===================================================================
rotleft2:                                                                                 ' Привод 2 ВЛЕВО
Enable INT1
Start Timer1

Do
PORTC = &B0010_1110
Waitms pause
PORTC = &B0010_1101
Waitms pause
PORTC = &B0010_1011
Waitms pause
PORTC = &B0010_0111
Waitms pause
If s > 8 Then Exit Do
Loop

Goto privodstop
'===================================================================
rotright2:                                                                               ' Привод 2 ВПРАВО
Enable INT1
Start Timer1

Do
PORTC = &B0010_0111
Waitms pause
PORTC = &B0010_1011
Waitms pause
PORTC = &B0010_1101
Waitms pause
PORTC = &B0010_1110
Waitms pause
If s > 8 Then Exit Do
Loop

Goto privodstop
'===================================================================
'                                         Работа привода
'===================================================================
privodstop:
Stop Timer1
Disable INT1
kom = 255
flag = 0
s = 0
PORTC.0 = 0
PORTC.1 = 0
PORTC.2 = 0
PORTC.3 = 0
PORTC.4 = 0
PORTC.5 = 0
Return
'===================================================================
'                                         Обработка прерываний
'===================================================================
pulse:                                                                                   ' Прерывание таймера
TIFR1.5 = 1
Incr s
Return
'===================================================================
hall:                                                                                      ' Прерывание от датчика
s = 0
Return
'===================================================================
ds2408:                                                                                ' Прерывание от DS2408
flag.0 = 1
kom = PINB
If kom.4 = 0 Then s = 9                                                      ' Команда Остановка
Return
'===================================================================
irpult:                                                                                    ' Прерывание от ИК пульта
flag.1 = 1

If flag.1 = 1 And flag.2 = 0 Then
      kom.0 = PIND.4
      kom.1 = PIND.5
      kom.2 = PIND.6
      kom.3 = PIND.7
      flag.2 = 1
      Goto irpult1
End If

If flag.1 = 1 And flag.2 = 1 Then
      s = 9
      flag.3 = 1
End If

irpult1:
flag.1 = 0
Return
'===================================================================

Скорость можно регулировать переменной pause (см. программу), но имеющейся вполне хватает для движения на обычном 3-створчатом окне за 15...20сек между конечными положениями.

Схема
http://forumfiles.ru/uploads/0000/25/b8/1743/t477132.jpg

Подозреваю, что будут вопросы по схемотехнике... ;)
Готов пояснить.