Приветствую всех! Хочу вам представить свою модель радиоуправляемого ключа подключаемого к приемнику для управления большой нагрузкой. Я видел варианты на tiny13 и atmega328, но у tiny13 мало памяти и нужно на всем экономить, а отдельно покупать 328 по стоимости выйдет точно также как Arduino Nano. Еще хотелось использовать простой и знакомый Arduino IDE и иметь возможность быстрой смены прошивки через USB соединение.

Свою версию я решил сделать доступной для повторения, с открытым кодом, чтобы каждый мог ее реализовать и исправить под свои нужды. В качестве микроконтроллера был выбран самый миниатюрный Arduino Nano стоимостью 2 доллара.

Видео демонстрации работы:
Началось все с макетки, подключив сервотестер и огромные полевые транзисторы начал эксперементировать с прошивкой. Учился считывать управляющий сигнал и сделал первое включение-выключение светодиодов.


Основной сложностью было миниатюризировать плату с возможностью размещения максимального количества каналов. На Ардуино Нано 22 ноги которые можно использовать как выводы - этого более чем достаточно для управления всей дополнительной нагрузкой. Но мощностит ног в 40ма конечно не хватает, поэтому требуется управлять нагрузкой через полевые транзисторы. Мой выбор пал на корпус SOT-23, транзисторы в этом корпусе позволяют управлять 2-5А нагрузкой и очень маленькие. После нескольких вариантов расположения компонент мне удалось разместить 5 каналов на плате под Ардуино Нано без перемычек:


Плату травим по ЛУТ технологии. Я использовал пленку Oracle 841 для переноса тонера и травил в аммоний персульфате. Пленка позволяет почти идеально переносить тонер и не отскабливать потом бумагу. А аммоний персульфат прозрачен и видно процесс травления платы:


Готовая плата получилась очень компактная, в верхней ее части торчат пины под два канала от приемника, для получения управляющего сигнала и выбора программы:


С нижней части под микроконтроллером смонтированы все компоненты. Транзисторы в корпусе SOT-23 и резисторы в корпусе 1206 (думаю без именения платы можно и 0805 ставить). Изначально я решил не делать коннекторы для подключения нагрузки, планировал подпаиватся к площадкам, ведь у меня был USB-коннектор на микроконтроллере и можно было легко изменить каналы.


Но потом все-таки решил сделать коннекторы, взял от удлиннителей сервомашинок и питание под JST разьем:


В итоге получил миниатюрный ключ на два входных канала и пять исходящих. Можно управлять пятью каналами с нагрузкой 1-6S до 5А. В моем случае это 3-4S -- светодиодная лента на 12вольт (на 4S поярче горит) и автомобильные светодиодные лампы на 12вольт (в них уже есть стабилизатор по току, поэтому 4S не страшен).

Список компонент:
1 шт -- Arduino nano (микроконтроллер) -- 2 доллара
5 шт -- 1206 резисторы 1к (защищаем выходы микроконтроллера)
5 шт -- 1206 резисторы 10к (стягивающие резисторы для закрытия транзисторов)
2 шт -- 1206 резисторы 47к (стягивающие резисторы для закрытия каналов приемника)
5 шт -- SOT-23 полевые транзисторы. Использовать можно любые LOGIC транзисторы. У меня стоят разные (наколупал с плат): IRLML2502TRPBF, IRLML0060TRPBF или SI2302 (100шт на али стоят 1.5 доллара). У этого же продавца можно взять резисторы и светодиодики.. 100шт резисторов 0.5 доллара.

На коптере стоит 12 вольтовая подсветка:
12вольт лампы -- по 1.5 доллара
Светодиодная лента 5050 -- 7 долларов за 5 метров

Код программы достаточно простой, я постарался его комментировать. Каждые 0.5 секунды считываем значение управляющего сигнала. И основываясь на нем выбираем программу:
if (millis() - toRead>500) {
ch1 = pulseIn(pulse1_pin1, HIGH, 25000);
ch2 = pulseIn(pulse1_pin2, HIGH, 25000);

if (ch1 < 1000) { if (prog!=1){led_off(); prog=1; next_step=1;} //выключить
} else if (ch1 < 1300) { if (prog!=2){led_off(); prog=2; steps=0;}
} else if (ch1 < 1500) { if (prog!=3){led_off(); prog=3; steps=0;}
} else if (ch1 < 1700) { if (prog!=4){led_off(); prog=4; steps=0;}
} else if (ch1 < 1900) { if (prog!=5){led_off(); prog=5; steps=0;}
} else { if (prog!=6){led_off(); prog=6; next_step=1;} // включить
}
Serial.print(ch1); Serial.print(" "); Serial.print(ch2); Serial.print(" "); Serial.println(prog);
toRead = millis();
}

Значение сигналов вы можете выставлять самостоятельно под ваш переключатель. Я использую крутилку, поэтому количество программ ограничено только памятью микроконтроллера в 32кб. Канал ch2 я не использую, он считывается, и не составляет труда его добавить в анализ. После считывания разово выставляется значение параметра программы prog и начальный шаг steps=0. И далее на его основе работает программа.

Стоит учитывать, что программы мигания не используют delay. Наверно это самая большая сложность в понимании. Проги основаны на значении таймера millis, который запускается при загрузке микроконтроллера. И мы используем дельту значений этого таймера. Так "delay(500)" -- это "millis() - toRead>500", где toRead - ранее запомненное значение millis.

Если вы все-таки будете использовать delay - то появится пауза между считыванием управляющего сигнала с приемника. Т.е. программа мигания будет переключатся после того как этот delay закончится.

Ниже файл с исходником прошивки и плата, в данном исходнике платы разорвана дорожка питания. Вы самостоятельно должны решить как будете питать микроконтроллер. Возможны два варианта: От подаваемого питания для нагрузки, оно должно быть от 6 до 18вольт (смотрите спецификацию на Arduino Nano и пин VIN), либо от приемника - 5 вольт. Я рекомендую подавать питание от приемника 5в вместе с управляющим сигналом. Тогда вам нужно будет проводом соединить центральные жилы входного сигнала с приемника с пином 5v ардуино.

Плата тоже простая. Справа вверху питание нагрузки. Снизу два входа с приемника (ближний к краю - минус). По центру платы площадки "out-" собственно это и есть каналы. Стягивающие резисторы 47к справа внизу, не стал делать под них площадки, они вполне удачно напаиваются на дорожки.

"IN+" подаваемое питание нагрузки -- 1-6S (можно не использовать и подавать сразу на саму нагрузку) -- РАЗОРВАН!!! для возможности подключения питания микроконтроллера 5вольт от приемника проводом (рекомендую). Или запаять, чтобы питать от 6-18 вольт.
"IN-" общий для нагрузки

"OUT+" точка подключения питания нагрузки (можно не использовать)
пять "OUT-" точки подключения общих каждого канала.

Схема:


Прошивка и плата:
(01-rc-switch.rar)