12.07.2010, 19:54
Автор: Шульга Александр, https://robo.com.ua/projects2.php
В качестве основы был использован набор Valleman
"Turning frog" (артикул KSR2). Я собрал
этого "робота", включил его, но, как оказалось,
ничего путного он делать не умеет. Пришлось лишить
его родной платы управления и использовать только
"моторную часть".
Для начала я приобрел программатор. Название или
какие-то характеристики его не знаю, но AVR Studio
его прекрасно видит. На плате стоят микросхемы HIN232IP
и AT90S2313, а также пассивные элементы.
Для своей платы я использовал макетку, МК AT90S2313-10PI,
L293 и диоды (они такие мощные и оранжевые), а также
разъемы, светодиоды, кварц на 4 МГц, и так далее.
МК практически сразу начал программироваться, вот
только с самими программами была проблема. Я хоть
и программист со стажем, но в данный момент специализируюсь
на РНР, с С++ давно не имел дело, а с ассемблером
и подавно. Пришлось купить книжку "Atmel Classic"
и разбираться с регистрами и ассемблером.
Как ни странно, но первая программа получилась у
меня довольно -таки быстро и робот начал выполнять
команды. Это было захватывающе! Но у робота не было
сенсоров и он ехал только до того момента, пока я
его не останавливал. Да, как и у всех, у меня сразу
же возникла проблема с питанием микросхем и двигателя.
При подключении двигателей микроконтроллер перезагружался
и не хотел ничего делать. Пришлось включить дополнительный
блок батарей для двигателей и для МК. Двигатели- 3
батарейки по 1.5В, МК- 4 батарейки по 1.5В.
Позднее я купил аккумуляторы и зарядное устройство
и использовал их для питания двигателей. МК запитал
4-мя почти севшими батарейками. Конечно же, первым
делом нужно было бы обвязать микросхемы и двигатели
конденсаторами, но их в тот момент не было под рукой.
Раздельное питание, на мой взгляд, намного эффективнее.
Например, я уже купил и в следующих проектах буду
использовать аккумуляторы от фонарика (который заряжается
в розетке 220В). Их там 3 штуки и они дают напряжение
примерно 3.6 В. Стоимость всего фонарика 2-3 доллара,
т.е. я получил зарядное устройство и аккумуляторы
всего за такую сумму.
Дальше. Начальное напряжение питания МК- 2.7В. Соответственно,
можно использовать батарейки типа 2032, 2025 (таблетки,
стоимость примерно 1 - 15. доллара). Потолок питающего
напряжения- 6В, хотя по даташитам на самом деле максимум-
6.5В. Т.е для того, чтобы робот дольше работал, я
могу взять и 2 "таблетки".
Дальше. МК не обязательно работать постоянно. В те
места программы, где используется пустая задержка,
можно вставить "засыпание" МК на некоторое
время. В результате, он будет работать как бы в импульсном
режиме, т.е. просыпаться только тогда, когда нужно
дать команду, обработать прерывание или считать данные
с сенсоров. Это будет существенная экономия, и если
довести экономию питания до совершенства, робот сможет
работать от батарейки для наручных часов.
Контактные датчики вначале были из медного провода
толстого сечения и микрики с рычажком. Потом я где-то
увидел, что используют трубочки от сока (соломинки)
и попробовал. Есть преимущества: они легкие, достаточно
прочные, действительно похожи на "усы".
Конечно, они не идеальны, как и другие сенсоры. 100%-й
сенсор пока не придумали.
Когда платформа заработала, настал час триумфа для
программиста. Конечно, писать на ассемблере не так
просто, но я смотрел программы на Си - не знаю зачем
так извращаться? Ведь по сути получается то же самое-
работа с регистрами. Записал, прочитал. Си используется
для организации циклов, передачи управления, подпрограммы
и функции. Но ведь то же самое есть и у ассемблера.
Точнее, макроассемблера, что не одно и то же. Я могу
переопределить имена регистров, и сделать те же переменные,
также я могу использовать ячейки памяти МК и присвоить
им имена. Компилятор все сделает за меня. Ну, есть
конечно сложные участки программы. Но ведь никто не
отменял подпрограммы, можно ведь написать небольшую
библиотеку и использовать её в дальнейшем. Кстати,
если поискать, в сети, то можно найти уже готовые.
К чему я веду? Памяти у МК не так много. Конечно,
заполнить всю мне пока не удавалось. Но написать небольшую,
красивую программу- чем не интерес? Вы спросите: "как
совместить виртуозное владение дрелью и напильником
со знанием тонкостей регистров?". А вот в этом
то и есть интерес.
На данном этапе я только - только подошел к мысли
о создании собственных библиотек. Пока есть одна,
достаточно распространенная функция- задержка. Практически
во всех программах она есть. По мере совершенствования
знания ассемблера набор функций будет пополняться.
Сайт www.robo.com.ua тоже ведь построен с использованием собственных
библиотек функций.
В окончательном варианте робот умел не только отъезжать
от препятствий на своем пути, но и выполнять некие
псевдослучайные движения. Например, робот двигается
по прямой. По истечении некоего времени он изменяет
направление движения- поворачивает влево, вправо,
или разворачивается. То же самое и с препятствиями.
Специальная переменная - ячейка памяти используется
для хранения числа, которое используется для определения
направления поворота. Таким образом, робот, конечно,
не умеет объезжать препятствия, но он просто двигается
не по прямой, а случайным образом меняет направление
движения. Это достаточно интересно.
2004 год. Киев.
Мастерская робототехника:
|