Приветствую всех! Хочу вам представить свою модель радиоуправляемого ключа подключаемого к приемнику для управления большой нагрузкой. Я видел варианты на tiny13 и atmega328, но у tiny13 мало памяти и нужно на всем экономить, а отдельно покупать 328 по стоимости выйдет точно также как Arduino Nano. Еще хотелось использовать простой и знакомый Arduino IDE и иметь возможность быстрой смены прошивки через USB соединение.
Свою версию я решил сделать доступной для повторения, с открытым кодом, чтобы каждый мог ее реализовать и исправить под свои нужды. В качестве микроконтроллера был выбран самый миниатюрный Arduino Nano стоимостью 2 доллара.
Видео демонстрации работы:
Свою версию я решил сделать доступной для повторения, с открытым кодом, чтобы каждый мог ее реализовать и исправить под свои нужды. В качестве микроконтроллера был выбран самый миниатюрный 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)
Основной сложностью было миниатюризировать плату с возможностью размещения максимального количества каналов. На Ардуино Нано 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)
освоить микроконтроллеры можно по множеству статей и видеоуроков. реально это занимает 1-2 недели. начать можно отсюда: http://wiki.amperka.ru/ -- там справа "Мини проекты", простейшие мигалки-звонилки.
продолжить можно с видеоуроков Джереми Блюма, они есть на ютубе с переводом.. иногда он правда гонит или усложняет. еще есть видеоуроки Крандаша
просто повторяете то что они делают. _!важно!_ только писать код, как это делает Джереми Блюм. если будете копировать - не запомните :)
плюс в самой оболочке Arduino IDE уже есть примеры. и на каждую библиотеку они добавляются, для работы с экранами, для работы с акселерометрами, другими датчиками. для начала разбирательства понадобится ардуино нано за 2 доллара - ссылка на него есть в статье. экран 1602 с I2С-модулем и макетка на 800 точек. для соединений можно еще 65шт проводков взять. эти ссылки с проверенного продавца, делал у него уже 8-9 заказов.
По статье - всё последовательно расписано и показано. Мне нравится. +
На самом деле уже 3д принтеры и чпу-станки видел на основе ардуино нано. Точно также целый модуль на плату впаивают.
Трехцветный светодиодный индикатор скорости для квадрокоптера.
Товар http://www.parkflyer.ru/product/1670037/
Теперь, глядя на Вашу, думаю, можно будет сделать.
А Ардуинки совсем обесценились, но можно найти еще дешевле.
Попробую ваш скетч. Вместо транзисторов можно использовать драйвер L293D. Через него можно управлять RGB лентой, либо тремя светодиодами.
Евгений Кочетков, можно посмотреть ваш скетч о котором вы писали (можно еще по прерыванию с таймера делать, надежней чем через отслеживание millis(), особенно, если программа большая). Сам то я только постигаю arduino, а примеры всегда наглядней для понимания.
Можно и второй использовать. Читать тут.
Я когда-то статью тут рисовал FPV. От начавшего начинающим. Часть 3.5. Блок мониторинга и управления FPV чемоданом на базе Arduino (альфа-версия).+47
11 апреля 2015 года в 02:50 | Евгений Кочетков Большие Вяземы, Московская Обл
Статья //www.parkflyer.ru/blogs/view_entry/11233/ Там использовал прерывание по таймеру для подсчета потребленного тока.
З.Ы. Была еще другая статья Простейший барометрический высотомер на базе Arduino.+116
26 января 2015 года в 02:05 | Евгений Кочетков Большие Вяземы, Московская Обл
Статья //www.parkflyer.ru/blogs/view_entry/10539/
Я там скетч допилил, тоже использовал прерывания по таймеру для отрисовки цифр.
Только резисторы не стягивающие, а подтягивающие =)
И принципиальную схему надо бы изобразить, для порядку =)
Опрос, кстати, можно еще по прерыванию с таймера делать, надежней чем через отслеживание millis(), особенно, если программа большая, но это уже так, тонкости.
Плюсую, хорошая работа!