Всем привет!
Никогда раньше не занимался робототехникой, хотя с большим удовольствием наблюдал за чужими разработками в этой области. По вашему форуму тоже никогда не лазил, но, конечно же, натыкался на него несколько раз, когда искал какие-то примеры по AVR'кам. Но вот я заметил, что здесь проводятся OFFLINE-соревнования, плюс находятся люди, принимающие в них участие, к тому же (в большинстве случаев) не с конструкторами Лего, а с самыми настоящими самоделками . Эти факты не оставили меня равнодушным и я решил собрать свой лайн-трейсер чтобы тоже поучаствовать... и собрал! Ко дню окончания соревнований я, правда, не успел, но о роботе всё же расскажу.
Прошу приветствовать - Orbb.
<Остальные фотки ТУТ>
Конструкция
Шасси собрано из пластика толщиной 1 мм. Если его равномерно прогреть, то он легко гнётся и потом сохраняет преданную ему форму. К тому же листы без труда режутся ножницами и склеиваются между собой. Конструкция разборная - все детали скреплены друг с другом винтами. Роль опорного/подруливающего колеса выполняет модифицированное прижимное колёсико из механической (шариковой) мышки. Как позже выяснилось, со своими функциями оно хорошо справляется, да и пылищи собирает совсем не много. Для того, чтобы робот не опрокидывался при сильном ускорении, сзади размещёна пружинящая опора в виде буквы S. На испытаниях стало ясно, что можно и без неё, но при резком старте с места нос задирается почти на сантиметр.
Электроника (датчик линий и робо-контроллер) размещена на двух самодельных двусторонних печатных платах.
Датчик линий
Сколько фотодатчиков поставить? Пришёл к выводу, что их число должно быть нечётным, чтобы в нейтральном положении на линию попадал лишь один (центральный). Ширина робота составляет 8.5 см, так что я решил поставить 7 датчиков с шагом в 1 см.
Готовых компактных фотодатчиков я не нашёл, так что использовал связку инфракрасный светодиод (KP-2012F3C) + фототранзистор (KP-3216P3C). Не был уверен, что длина волны у них совпадает, но в итоге всё заработало. Хотелось, чтобы датчик был умным, т.е. выдавал готовый сигнал чёрное/белое. Для этого отлично подошли четырёхканальные аналоговые компараторы LM339ADT. Очень помогли замечательные статьи: <эта> и <вот эта>. Расстояние между центрами светодиода и фототранзистора - 3.5 мм. Как показывает практика, такой датчик уверенно работает на высоте от 1 до 15 мм. над поверхностью.
Сначала пороговое значение напряжения для всех каналов компараторов подавалось одинаковое. По ходу тестирования выяснилось, что надо бы для каждого канала регулировать его отдельно.
Робо-контроллер
Основан на ATMega16A. Вся электроника (кроме драйвера двигателей) питается от 3.3в за счёт понижающего DC/DC преобразователя ADP3335ARM-3.3-RL7, способного выдать до 500мА. Драйвер двигателей - L293DD. Для теплоотвода используется ~40% обратной стороны печатной платы (которая занята землёй). Такая конструкция показала себя весьма хорошо - под нагрузкой микруха нагревается незначитально. Двигатели и драйвер запитываются напрямую от 4х батареек AA.
Прежде чем тестировать прошивки на контроллере не забывайте отключать JTAG во фьюзах, а не то можете потерять некоторое количество времени, выясняя почему некоторые пины работают не так как надо .
Двигатели и колёса
IE-BO2-48M (с пластиковым редуктором 1:48) + совместимые с ними колёса (диаметром 65мм) + шины. Всё это продукция фирмы INNOVATIVE EXPERIMENT. Как выяснилось, они совершенно не годятся для следования по линии, т.к. обладают огромной инерционностью (Но эти движки довольно мощные, так что, наверное, подойдут для сумо). После остановки моторов робот продолжает двигаться ещё сантиметров 4-5. А если поставить колёса меньшего диаметра, то скорость будет вообще никакая. Бороться с этим можно, если на короткий промежуток времени инвертировать напряжение на моторе. В обратную сторону он от этого вращаться не станет, но зато моментально остановится.
Результат
В итоге на трассе 1-34 удалось выжать 8 секунд (судя по раскадровке). Алгоритм самый обычный: скорость одного из двигателей снижается пропорционально отклонению от линии. На прямых робот едет с максимальной скоростью, так что если доработать алгоритм, то результат вряд ли улучшится значительно.
Ну вот, вроде бы, и все интересные моменты о которых я хотел рассказать. Если есть вопросы - спрашивайте. Если есть советы - пишите, пригодятся для следующих разработок.