Робот на контроллере PIC от SWG. Часть 2

Предварительная версия схемы
Предварительная версия схемы
Тем временем, SWG продолжает совершенствовать своего робота. Структурно его конструкции похожа на моего робота — тоже раздельные специализированные контроллеры. Недавно он прислал мне схему контроллера датчиков/ИК буфферов. Короче глаза и прочие сенсоры. А также наброски кода для управления всем этим добром. Респект!

Хы, надо сказать я несколько отстаю в разработке :) Он уже за датчики взялся, а у меня пока только ходовая отлаживается… ничо ничо, вот щас с заказами разберусь и закажу себе УЗ сонары :)))) А там еще посмотрим кто первый в космос полетит :)

SWG:
Оперативную связь с ходовым контроллером планирую с использованием в обоих контроллерах линий портов B0, B1, с задействованием внешнего прерывания по B0. Кроме того, у контроллера буферов будет также выход на межмодульную шину I2C, для связи с центральным процессором, а иногда и с ходовым контроллером, (для несрочных операций, типа уточнения местоположения препятствия, диагностики исправности датчиков и т.д.) На всякий случай вывожу на разьем также неиспользуемые линии портов, в т.ч. и USART (на всякий случай, в первую очередь для отладки). В качестве датчиков столкновений пока нарисовал микрики, но ставить скорее всего буду все же оптопары, что лучше будет отрабатывать толчки с разных направлений, но потребует дополнительных резисторов для CD подсветки, и желательно управление ей. Свободные линии портов для этого еще есть. На всякий случай (для отладки, а также наглядности работы буфера, и облегчения настройки локаторов, на A4 хочу поставить сигнальный светодиод. (при подачи тока на него он светится разными цветами, переключая их по очереди).

Бонусом в архиве идет доработанная программа ходового контроллера:

  • Исходник на Pascal
  • Cкомпилированные им ассемблерный листинг и HEX — код, а также
  • Дизассемблерный из HEX-кода листинг. Получен программой из комплекта IC-Prog, которой я прошиваю PIC16F876).

Описание ходовой части. Обратите внимание на комменты к посту, в них автором расписана большая часть подробностей и идей по дальнейшему развитию.

42 thoughts on “Робот на контроллере PIC от SWG. Часть 2”

    1. По запарке отправил самый первый набросок, там несколько линий не туда завернуты. Сейчас отправил нормальный вариант. Практически уже по нему буду делать разводку, только поделю на 2 части, передний и задний бампер. Контроллер будет на заднем, на переднем только датчики. (У меня движки с ведущими колесами спереди, в задней части свободно поворачивающийся ролик). Аккумулятор возле движков, платы будут в задней половине корпуса, места там дофига. — 100×145мм.
      Я обычно привык стабилизировать задаваемые токи, в данном случае — эмиттерными резисторами. Транзисторы будут с большим усилением, поэтому базовый делитель практически не нагружен, а напряжение с порта практически равно питающему и довольно стабильно. Практически получаются генераторы тока, снижающие влияние напряжения батареи (светодиоды подсветки включены прямо на 12v с аккумулятора).
      В программе предусмотрен контроль датчиков при выключенной подсветке, на случай посторонней засветки, а TSOPы в таком режиме в дальнейшем смогут принимать и команды с ПДУ в стандарте RC 5, и передавать их ходовому, а со временем — и центральному процу.

      1. Опять не доглядел. Когда перерисовывал схему начисто, нарисовал только по одному светодиоду подсветки TSOPов, (D7, D8) а должно быть по 2 последовательно, как на подсветке пола (D1-D4). Одновременно будут включаться левый передний с левым задним, а правый передний — с правым задним, и считываться сразу после пачки импульсов оба TSOPа — передний и задний.
        На подсветке пола все 4 включаются одновременно, и фоторезисторы тоже читаются все одновременно.

  1. купил давеча книжку майка предко «создайте робота своими руками на пик».
    буду изучать. половина (как пролистал) — это фуфло в стиле «закон ома на пальцах», но есть и вроде как помощи-пособия хорошие.

  2. Начал разводить платы бамперов. Схемка — то простенькая, по сравнению с теми, что иногда приходилось разводить, да проблема в том, что часть однотипных элементов датчиков, которые прекрасно кучкуются вокруг контроллера, приходится растаскивать по разным углам, да еще делить схему на две платы… К тому же в последние годы так привык к «лазерному утюгу», что ленюсь использовать верхнюю сторону платы, хотя раньше она меня здорово выручала, когда рисовал руками.
    Даже мелькнула шкурная мыслишка развести все компактно, вместо светодиодов и фоторезисторов впаять разьемчики (сейчас их навалом), и утащить датчики куда надо на проводках. Но тут же самому стыдно стало. Не люблю халтуру. Уж делать, так по нормальному. Наверно, все-таки использую верхнюю сторону, тем более, что фоторезисторы и светодиоды датчиков пола будут снизу платы, и их сам бог велит развести по верхней стороне. Придется травить каждую сторону отдельно (проще совмещать), зато сэкономлю больше времени на разводке.

  3. Кое-как развел передний бампер. Уже более — менее, хотя кое — что еще не нравится. Кое — какие детали надо бы еще передвинуть, чтобы еще упростить разводку. Хотя на одной стороне все равно не получится. Итак между выходом TSOP и разьемом пришлось поставить перемычку (на схеме обозначена как R4), чтобы сильно не вертеться. Питание +5v в одном месте нехорошо проходит, и площади земли маловато, пока все линиями в 1мм. Да и нормальной земляной шины как таковой нет, все клочками. Правда, ничего критического на этой плате нет, а главное — излучатели и приемники встали так, как и планировалось. И крепежные отверстия более — менее разместились, не очень мешают. Для ИК локаторов поставил даже не по 2, а по 3 светодиода с каждой стороны, для более равномерной засветки нужного сектора. Все равно надо гасить излишек напряжения при заданном токе. Проконтролировать световые пятна можно будет телекамерой, она ИК хорошо видит. На датчики столкновений поставил все-таки оптопары на отражение, RPR220, с фокусным расстоянием 6-8мм и контролируемым пятном диаметром миллиметров 5. Будут глядеть на пластинки, закрепленные на стенках внутри корпуса, на которых будет нанесено светлое пятно определенной конфигурации на черном фоне, и при смещении бампера в продольном или поперечном направлении соответственно реагировать, сообщая, каким углом трахнулись.
    Бамперы будут иметь возможность смещения вдоль и поперек миллиметра на 2-3 от исходного положения, а снизу к ним будет приклеена чуть выступающая пластина черного поролона средней жесткости, толщиной мм 10, для смягчения толчков, и чтобы не оставлять следов на мебели.
    Теперь надо развести еще задний бампер, (с контроллером), по ходу может еще немного поправлю разводку переднего. Травить и паять оба бампера буду вместе, потом закреплю в корпусе и буду отлаживать уже как работу самих бамперов, так и взаимодействие с ходовым контроллером.
    После этого уже можно будет тележке и побегать по дому, не опасаясь куда-нибудь свалиться, пока буду городить дальше. Следующий шаг — одометры. Пока прикидываю варианты. Не хотелось бы грузить ходовой контроллер примитивной работой по отслеживанию датчиков колеc, времени будет тратить много, информации — мизер. Для начала проверю варианты с мышами, не понравится — придется ставить что-нибудь небольшое, вроде PIC12F629. Хотя я и на бамперы тоже сначала думал что-нибудь небольшое, пока не увидел, во что это выливается.
    Опять же, взаимодействие одометра с ходовым контроллером. Должно быть оперативным, чтобы отслеживать путь поточнее, в то же время не быть слишком назойливым, чтобы не отвлекать ходовой контроллер на каждый миллиметр.
    Возможно, оптимальным будет такой вариант: ходовой контроллер кидает одометру необходимое значение пути для каждого колеса, а тот уж сам считает метки на колесах и только по окончании сообщает ходовому контроллеру, что заданный путь пройден. Ну, и всякие непредвиденные ситуации, — пробуксовка колес, упирание в пороги, потеря контакта колеса с полом… В общем, надо делать и думать, думать и делать…
    Отправил почтой очередные картинки — разводку платы и схему переднего бампера.
    Сегодня с работы решил посмотреть параметры оптопар на всякий случай, набрал в Яндексе «оптопары на отражение», так он кроме всего прочего выдал и ссылки на мои же комменты на этом сайте. Так что наша активность здесь не проходит даром, раз поисковики уже сканируют этот сайт. Все мы под колпаком у Мюллера… (Шутка).

    1. Посмотрел, ага. Когда будет разведена вторая половина оформлю это в виде очередной записи. А почему бы не организовать на одометрическом контроллере ПИД регулирование оборотов? М? как думашь? Оставить небольшой запас по регулированию вверх вниз и сделать жесткую механическую характеристику. =) Тогда никая помеха или разное трение в редукторе не даст ошибку курса.

      Хе, поисковики сканируют. В день на этот сайт только из поисковиков приходит свыше 200 человек. А общий траффик достигает порядка 1000 человек в сутки. Так что набираем обороты, товарищи!

      Кстати, Есть идея дать тебе все же статус соавтора. А то пишешь дельные вещи, а в комментах записывать, так наотвечают и каша получается. В таком случае записываешь сразу же все идеи одним большим куском. Прицепляешь фотки и шлешь мне. Я все заливаю на сервер, верстаю под дизайн и оптравляю тебе готовый ХТМЛ код, который ты уже из под своего аккаунта постишь. Можешь, конечно, и сам верстать, но зачем тебе этот геморрой, твой вклад и так велик.

  4. Более — менее привел разводку бамперов к виду, близкому к окончательному. Если ничего больше не надумаю, пущу под утюг. Размер обоих по 210х40мм.
    Сегодня что-то голова глюканула, что лазерник может не поместить на бумаге шириной 210мм без полей (на струйнике — то могу печатать в обрез листа, без полей, а лазерник без полей не умеет). Обрезал разводку на 5мм за счет свободных краев, а уже потом сообразил, что при «альбомной» установке бумаги размер — то будет до 297мм. Вот что значит заработался, уже башка не варит.
    На заднем бампере, что с контроллером, пришлось все-таки ввести еще «3 слой» — добавить 4 перемычки, иначе слишком запутывалось. Вроде много места, а из за привязки датчиков к конкретному месту простая схемка превратилась в запутанную разводку. Иначе все развелось бы на одной стороне. Можно было конечно уменьшить ширину дорожек, попетлять между ног, но не люблю я такие вещи, да и устойчивость к помехам могла ухудшиться. Сейчас, правда, тоже есть несколько нехороших участков (длинная линия сброса, блокировочные конденсаторы далеко от процессора). Но PIC в отличие от ATMEL не очень боятся помех по сбросу, а по питанию можно прилепить SMD конденсатор снизу платы непосредственно между выводами земли и питания. Много точек пайки сверху платы, под деталями. Но я в такие дырки вставляю по 2-3 тонкие проволочки, концы их длиной миллиметра по 2 загибаю и припаиваю к дорожкам сверху и снизу, а потом вставляю деталь и паяю снизу, как обычно. Такая вот «Металлизация». Довольно надежно.
    Пока изготовлю платы бамперов, закреплю их на подвесках, настрою датчики, прикрою платы бамперов чем — то от пыли, да и декоративности ради… раз уж коробка постепенно начинает обрастать «мясом», пора и о «коже» подумать, придать какой — никакой внешний вид. Просто коробка с колесами и ворохом плат и проводов в ней не очень вдохновляет. Хотя бы прикрыть ее крышкой, а на крышке поставить поворотную платформу с камерой, подсветкой, измерителем освещенности, лазерной указкой, дальномером, материлкой, и мало ли еще с чем…
    Одометры — следующий этап. Пока прикидываю варианты, между делом буду понемногу пробовать. ПИД регулирование оборотов — не думал пока, скорости у меня невелики, выбега практически нет, привод довольно жесткий. Поставить датчики на двигатели не получится (задний конец вала недоступен, передний — в редукторе). Частота поступления импульсов с датчиков на колесах — довольно низкая. Вряд ли полученный эффект окупит затраты. Проще контролировать небольшие отрезки пути по времени, при разнице — менять немного коэффициенты ШИМ для выравнивания перекосов. Иначе движение будет немного вихляющимся. Возможно, неплохой эффект для удержания заданного курса дало бы применение гироскопа. На модели вертолетов ставят небольшие, типа микросхем, для удержания на курсе и компенсации разворотов. Правда, у нас в продаже их нет, но можно придумать что-нибудь попроще. Один из вариантов — отслеживание перемещения в системе кординат XY с помощью оптической мыши, только с более длиннофокусным обьективом. (Не тащить же ее по полу, клиренс у меня 22мм). Оно не будет заисить даже от пробуксовывания колес.

    1. если совсем проблемы с местом под одометры — можно одомерить по току от моторов (щётки то переключаются). у TI где то были аппноты на эту тему.
      хотя, по мне — это схематически сложнее, чем ставить одометры (AS5035 — самая вкусная вещь для этих целей).

      PID совсем не обязателен, для моторов достаточно тупого «слишком-быстро — уменьшаем ШИМ» ну и с вариациями. и это лучше подстраивать под конкретный мотор с платформой, да и даже PID нужно корректировать каждый раз под другой мотор.

      1. AS5035 — у нас вряд ли найдется, да и доступа к валу движка у иеня нет (задняя крышка без отверстия). Есть пара движков с вылетом вала с двух сторон (стояли ЦБ регуляторы), но тогда придется расширять корпус (сейчас между донышками движков 2-3мм, а нужно будет 20-25). Да и параметры у них другие (обороты, напряжения), хотя той же серии ДПМ 25. Пока на рассмотрении 3 варианта: использовать микросхемы от COM или PS2 шариковых мышей (c оптическими получится более громоздко), или аналогичный простенький контроллер на PIC12F629 или аналогичном. Оптопары заманчиво поставить на отражение, чтобы не заморачиваться с зубчатыми колесами, но получится разрешение порядка 5-10 или 2-5мм пути в зависимости от размера оптопар. У RPR220 фокус 6-8мм при пятне 5мм, другие, мелкие планарные примерно 2х3 мм — оптимальное расстояние 1-2 мм. Сегменты можно распечатать на кольце, наклееном на внутренней стороне алюминиевого диска колеса, я ее сделал плоской, и есть бумага с липким слоем, для Эпсона. Получится довольно компактно и надежно защищено ободом колеса.
        Валы редукторов у меня 6мм, поставить на них диски с прорезями можно, только морока эти прорези выпиливать, и сам диск может цепляться за что-нибудь. Вариант — поставить на корпус валы с дисками и датчиками от мыши, связав их с осью колеса (редуктора) резиновым пассиком на шкивах. Токарный cтаночек у меня есть, выточить нужные шкивы и втулочки — не проблема. В общем, пока думаю. Время пока есть, пока закончу с бамперами.

  5. Появилась еще мыслишка, как повысить точность колесных датчиков.
    Вместо того, чтобы пилить — сверлить или использовать мышиные диски, я могу их сделать прозрачными. Есть у меня пленка для струйника Эпсон, напечатать можно с любой точностью любое количество штрихов, оптопары использовать щелевые на просвет.
    Закрепить на валу при наличии станка — не проблема. Пленка гибкая, помнется — легко заменить, сама ничего не повредит, если и зацепит. Можно сделать диск, а можно напечатать полоску со штрихами и свернуть пленку в цилиндр (Проще будет нарисовать картинку для печати). В общем, идея стоит того, чтобы над ней подумать.

    1. ну как вчера родились.
      посмотрите GP1A30 .
      принтеры давно разбирали ? струйные (если верно помню — HP). в некоторых стоит полоска со штрихами, а в некоторых (вот это интереснее!) — круг с около 1800 штрихами. и к нему там же — подходящщий сенсор.

      заодно :
      «Brushed DC Motor Fundamentals» ( http://ww1.microchip.com/downloads/en/AppNotes/00905a.pdf )
      «Low-Cost DC Motor Speed Control with CMOS ICs» ( http://ww1.microchip.com/downloads/en/AppNotes/00807a.pdf )

  6. Так проблема — то не в отсутствии информации, а, скорее, в ее избытке. У меня у самого в струйных Эпсонах дома прозрачные диски со штрихами стоят. Просто вариантов тьма, и не всегда они всплывают в памяти в нужном порядке. А еще при отборе существует ряд критериев с разными приоритетами, и в конкретном случае самый, казалось бы, идеальный вариант может не подойти из за банальных причин (типа отсутствия под руками конкретной микросхемы или невозможности изготовить «на коленке» то, что элементарно штампуется на любом заводе).
    В данном случае приходится учитывать, как, что и где будет торчать, не будет ли за что — нибудь цепляться, или наматывать на себя, к примеру, кошачий хвост, или мои длинные волосы, валяющиеся по полу. Поэтому больше подходят оптопары на отражение и полоски на диске самого колеса. При колесах D = 80мм без труда получу точность 5-10мм. Но если захочется больше, тут уже потянется одно за другим. И то, что хорошо работает в принтере или видике, не всегда хорошо для тележки, бегающей по реальному полу, а не по столу. Информации же по приводам и всякой автоматике — телемеханике у меня в избытке. (Еще в середине 60х годов занимался радиоуправляемыми моделями самолетов, даже грамоты где-то валяются). Родился — то я почти 60 лет назад.
    Электроникой занимаюсь с 1959г, программированием — с 1980, в 1984г собрал первый свой персональный компьютер. В 1986г сделал ему матричный принтер на шаговиках и игольчатой головке. Кстати, там перемещение каретки контролировалось диском с прорезями и оптопарами (по нему переключались фазы двигателя, что давало максимальное быстродействие). Драйвер его занимал чуть больше килобайта, (матрицы точек знаков использовал те же, что для дисплея!), при этом считал знаки в строке, при превышении длины строки автоматически давал перенос по ближайшему перед концом пробелу, считал строки на странице, давая в начале и конце страницы 2 пустых строки и линию обреза. (Печатал на рулоне). В самом принтере была только 580ВВ55, блок питания, ключи двигателей и головок, усилители оптопар. Все управлялось драйвером с компьютера (читал датчики, крутил движки, бил иглами) по простенькой шине (разьем 16 контактов, использовались не все). Эта шинка предназначалась сначала для клавиатуры, тоже самодельной. Принтер потом просто подключал параллельно, через тройник. Скорость печати получалась примерно 30 — 40 знаков в сек, что по тем временам было неплохо. (Телеграфный аппарат даже на 200бод давал около 25).
    С одометрами все гораздо проще, но это не значит, что надо хвататься за первый попавшийся вариант. Вот и прикидываю, а пока вечером наверно уже буду травить платы баммперов…

  7. Начал набрасывать программку одометра, получается, что подпрограмма слежения за датчиками намного короче и проще подпрограммы межконтроллерного обмена и увязки его в системе в целом.
    Тем более, что у ходового контроллера есть десяток свободных линий портов, пару из которых планирую для связи с контроллером бамперов, 4 — для связи с 4х командным радиоприемником, и еще 4 остаются свободными, как раз на 4 оптопары. (это еще с учетом RS232 и I2C).
    В принципе, для радиоканала не обязательно 4 линии, можно обойтись и двумя, так что еще можно и, например, управлять подсветкой оптопар одометров или еще чем — нибудь.
    Так что одометр как таковой вырождается в платку задания тока подсветки и регулировки чувствительности оптопар. Ну и чтобы собрать в кучу провода от оптопар и контроллера. Отдельный контроллер ему нафиг не нужен. Сколько ни думал, так и не придумал, чем его еще загрузить. Считать пройденный путь — так на это есть ходовой контроллер, он его будет вычислять и отслеживать, зачем ему еще передавать кому — то эти значения и потом все равно контролировать исполнение…

      1. Можно по — разному. Например, у PICов входы B4-B7 могут генерить прерывания по изменению состояния любого из них. Другой вариант — проверять их в многозадачном прерывании таймера T0, которые у меня через 1 мсек. За это время пройденный путь составит не более 0,2мм (пока у меня макс. скорость 20см/сек = 200 мм/сек). Проверка датчиков, определение направления и приращение пройденного пути даже на Паскале вряд ли займут больше сотни команд, при 16Мгц это < 25 мкс. Сделаю более — менее законченный, реальный кусок — подсчитаю точно. Каждое колесо имеет 4 возможных состояния, каждое из которых может иметь одно из двух предыдущих: (это для правого, для левого вроде просто поменять местами датчики).
        1 2 -1 +1
        ——————
        0 0 01 10
        0 1 11 00
        1 1 10 01
        1 0 00 11

        Итого всего 8 вариантов, но поскольку достаточно проверять один вариант, а другой — по умолчанию, получается всего 8 проверок. Примерно так:

        // D_kol_L = сост. датчиков левого колеса.
        // D_kol_L_old = предыдущее состояние.
        // D_kol_P = сост. датчиков правого колеса.
        // D_kol_L_old = предыдущее состояние.

        if D_kol_L D_kol_L_old then
        begin
        Fl_napr_L = 0; // Вперед!
        Case D_kol_L of
        0 : {00} if D_kol_L_old = 1 (01) then Fl_napr_L = 1; // Назад!
        1 : (01) if D_kol_L_old = 3 {11} then Fl_napr_L = 1; // Назад!
        2 : {10} if D_kol_L_old = 0 {00} then Fl_napr_L = 1; // Назад!
        3 : {11} if D_kol_L_old = 2 {10} then Fl_napr_L = 1; // Назад!
        end;
        D_kol_L_old := D_kol_L;
        // Считаем путь!
        if Fl_napr_L = 0 then Put_L := Put_L + 1 else Put_L := Put_L — 1;
        end;

        if D_kol_P D_kol_P_old then
        begin
        Fl_napr_P = 0; // Вперед!
        Case D_kol_P of
        0 : {00} if D_kol_P_old = 1 (01) then Fl_napr_P = 1; // Назад!
        1 : (01) if D_kol_P_old = 3 {11} then Fl_napr_P = 1; // Назад!
        2 : {10} if D_kol_P_old = 0 {00} then Fl_napr_P = 1; // Назад!
        3 : {11} if D_kol_P_old = 2 {10} then Fl_napr_P = 1; // Назад!
        end;
        D_kol_P_old := D_kol_P;
        // Считаем путь!
        if Fl_napr_P = 0 then Put_P := Put_P + 1 else Put_P := Put_P — 1;
        end;
        Если бы не запоминать направление, а только определять путь, то можно было бы сразу делать типа:
        if D_kol_P D_kol_P_old then
        begin
        Case D_kol_P of
        0 : {00} if D_kol_P_old = 1 (01) then Put_P := Put_P — 1; // Назад!
        1 : (01) if D_kol_P_old = 3 {11} then Put_P := Put_P — 1; // Назад!
        2 : {10} if D_kol_P_old = 0 {00} then Put_P := Put_P — 1; // Назад!
        3 : {11} if D_kol_P_old = 2 {10} then Put_P := Put_P — 1; // Назад!
        else Put_P := Put_P + 1; // Вперед!
        end;
        D_kol_P_old := D_kol_P;
        end;

        Прикидывал варианты с «дрожанием» колеса на границе срабатывания одного из датчиков. Нет проблем. Просто будут чередоваться +1 -1 к пути колеса. Погрешность не возникает.
        Расстояние между датчиками роли не играет, лишь бы было меньше ширины сектора или кратное ширине сектора +_0,5 ширины.

  8. Как вариант вместо колесных датчиков использовать акселерометр, два раза интегрируя можно получить растояние, единственно могут быть заморочки если робот будет ездить по неровной поверхности, там нужны и гироскопы для отслеживания состояния платформы.

    1. Так ведь скорости — то мизерные, соответственно и ускорения… Да и не стоит особо заморачиваться на мелочах, самое интересное еще впереди. Для более точной привязки к абсолютной системе координат уж лучше сразу GPS, а для относительной — оптическую мышь, глядящую на пол с нескольких сантиметров через какую-нибудь линзу или обьектив вместо своей короткофокусной. Она прямо будет давать приращения по X и Y независимо от проскальзывания колес и обьезда препятствий.
      Есть вариант с маячками. Например, три ИК излучателя с разными излучаемыми кодами, находящиеся в пределах видимости робота, дадут неплохой отсчет. Возможен вариант с радиокомпасом. В качестве реперов в этом случае можно использовать местные теле и радиостанции, или ближайшие сотовые ретрансляторы. Вариантов много. Но не все сразу, иначе никогда ничего не сделаешь. Надо поэтапно. Например, сейчас для меня главное — бамперы, потом — одометры, потом — отработка всего этого в комплексе, и, пожалуй, пора уже налаживать канал с компом, не все же кнопки на портах жмать. На компе постепенно думаю написать специальную оболочку, типа упрощенный вид изнутри кабины. Дизайнер из меня никакой, но уж как — нибудь попытаюсь изобразить попроще. Вместо переднего окна — картинка с телекамеры, под ней и по бокам — типа пульта с индикаторами информации, поступающей с робота, и кнопки или рычаги для посылки команд ему. Также думаю приспособить руль с педалями для управления или хотя бы для начала джойстик. Джойстиком можно также ворочать камеру в 2х плоскостях. С камерами сейчас проблем нет (в смысле доступности). С видео в программах я пока еще не работал, больше с базами данных, но если получится не очень сложно, заманчиво, например, поставить несколько камер, например, одна — по ходу, для вида из переднего окна, пару вбок — типа левое и правое окно, и одну на турели, чтобы можно было вертеть куда угодно.
      Еще году в 2000, собрав очередной свой компьютер, тогда еще на P III 667/133МГц, ОЗУ 512МБ, видюха GEFORCE 2MX, я интереса ради одновременно включал встроенный в комп TV-тюнер, WEB -камеру на USB, и фильм в MPEG4 с CD-ROM. Никаких тормозов при одновременной работе не наблюдалось. В августе прошлого года я собрал себе уже на E6850, 3000/1333МГц, память пока 2х1GB 800мгц, чипсет P35. Загрузка обоих ядер — меньше 1%… видеовход пока один, но если надо будет, можно добавить. В общем, есть где развернуться… Только времени маловато, и жизнь коротка. Бросить работу, что ли… С 1969г пашу без перекура, надоело уже.

    2. Скорости у меня мизерные, поэтому ускорение, как вторая производная от пути во времени, будет стремиться к нулю, и обработка столь малых величин простыми средствами даст слишком большую погрешность. Да и акселерометров этих у меня нет, а я привык делать из того, что есть под руками, приобретая интересные вещи заранее. В то же время, при диаметре колеса ~80мм длина окружности около 251 мм (можно слегка шлифануть на станке, доведя до 250 (или 240мм)) для точности +_1см достаточно 25 (или 24) срабатывания датчика на оборот, что сравнительно легко реализуемо. Используя мелкие оптопары, легко еще раз в 5 поднять разрешение, даже при работе на отражение. Пожалуй, на этом пока и остановлюсь, как легко реализуемом и не очень торчащем снаружи (достаточно через дырку в борту пропустить к диску колеса достаточно прочный стержень или трубку с оптопарами на конце). Конец его с датчиками будет защищен ободом и резиной колеса. Прочно и технологично.

  9. Добавил в программу ходового контроллера работу с датчиками колес.
    Полностью кусок программы, реализующий функции одометра, (от чтения порта с датчиками по коррекцию пройденного левым и правым колесом пути) занял 153 байта ПЗУ и максимум 184 цикла (45мкСек при 16МГц) процессорного времени. При отсутствии изменений сост. датчиков колес — 15циклов (4мкСек). Пока вставил в главный цикл, но при таком размере можно повесить и на многозадачное прерывание таймера T0 (1 мs). Вся программа теперь занимает 1197 байт (14%) ROM (ПЗУ), и 59 байт (16%)RAM (ОЗУ). Одометр в листинге Паскаля — всего 31 строка, (вместе с «begin» и «end;». Без них — 23!). Весь листинг — 230 строк, из них больше половины — пустые или комментарии. Отличный компилятор! Возможно, готовую программу попробую переделать под МикроСи, посмотрю, насколько меньше получится. (На драйвере LCD дисплея получалось разница почти в два раза.)
    Попутно пришлось раскидать временные отладочные кнопки с B4-B7 на свободные линии порта С.
    А вообще, настало уже время писать обработчик команд, для начала, для отладки, c RS232. (I2C пока, при отсутствии центрального процессора, бесполезен). Не все же кнопочки тыркать. Затем прицепить на RS232 IR или Радио приемник и передатчик, написать для начала простенький эиулятор отладочного пульта на DELPHI, и двигаться дальше. Параллельно изготовить бамперы и датчики одометра. Отладку бамперов наверно буду вести уже с компа, через RS232.

  10. Добавил в программу ходового контроллера обработчик команд, для отладки, c приемника RS232. Для начала заложил 11 2х байтовых команд. 1й байт — код операции, 2й — значение, затем $0D — конец команды:

    0 ($30) — Стоп. (Оба). 2й байт может будет задавать дополнительные условия.
    1 ($31) — Оба вперед. 2й байт — путь.(пока — время работы).
    2 ($32) — Оба назад. 2й байт — путь.(пока — время работы).
    3 ($33) — Левый вперед, Правый назад. 2й байт — путь.(пока — время работы).
    4 ($34) — Правый вперед, Левый назад. 2й байт — путь.(пока — время работы).
    5 ($35) — Левый вперед, Правый стоп. 2й байт — путь.(пока — время работы).
    6 ($36) — Правый вперед, Левый стоп. 2й байт — путь.(пока — время работы).
    7 ($37) — Левый назад, Правый стоп. 2й байт — путь.(пока — время работы).
    8 ($38) — Правый назад, Левый стоп. 2й байт — путь.(пока — время работы).
    9 ($39) — Скорость, 2й байт — скорость (ШИМ) для обоих.
    V ($55) — Измерить и выдать в RS232 напр. аккумулятора. 2й байт может зад.доп.усл.
    Z ($5A) — Пищим. 2й байт — время в 1/100 сек. (макс. 2,55сек).

    Сделал также блокировку работы двигателей при напряжении аккумулятора ниже 10,6V, с выдачей величины напряжения в RS232 и прерывистого звукового сигнала.
    Делаю в Дельфи простенькую заготовку отладочного пульта, с которого (вместо Гипертерминала, как пока), буду посылать команды и видеть ответную инфу, а также напряжение батареи в числовом виде и в виде линейной шкалы, меняющей также цвет в зависимости от напряжения. Под Win 98 или DOS было бы вообще элементарно, а под XP придется повозиться с потоками (или работать с портом, как с файлом, что мне западло).
    Размер программы ходового контроллера достиг 1417 байт (17%)ROM, 78 байт (21%) RAM. Скоро выброшу обработку оставшихся 3х отладочных кнопок, освободится еще 143 байта. Будет без них 1274 байта (15%) ROM, но добавлю обмен с контроллером бамперов и обработку его результатов. В общем, пока в 2 кб кода, разрешенного без регистрации программы, укладываюсь, а со временем и ключик найду, или сам ломану, если время будет и не лень. Пока нашел в двух местах, но с заморочками (хотят денег…).

  11. Вытравил нижнюю сторону плат бамперов. Осталось просверлить, совместить верхнюю сторону, пригладить, замазать низ, травануть верх, отмыть, вырезать по контуру, залудить, распаять, отладить. А пока — поспать…

      1. Нитролаком или раствором канифоли — надежнее, смывается легко, а под липучку может раствор местами пробраться и подтравить. Да и проще — всял кусок ваты, смочил лаком, быстро протер 2-3 раза в разных направлениях, пара минут, и все сухо, можно травить. Удалить — опять кусок ваты с ацетончиком, протер раз, другой, потом свежим тампончиком еще раз, начисто, и нет проблем, Все равно я несколько раз в процессе изготовления плату ацетоном протираю.

        1. Ты перестраховываешься. Сколько лепил скотч (даже малярный) ни разу подтравов под ним не было. А так то можно и ацетончиком с нитролаком, только зачем этой гадостью дышать?

  12. А еще можно к роботу прикрутить GPS модуль, там всё довольно просто, можно устраивать позиционирование на местности и бегать по маршруту, заодно и точное время получать и сделать «самобегающие часы» :=)
    А также в сочетании с датчиками рисовать карты местности и препятствий…

  13. Далеко отпускать робота на улице нежелательно (сопрут), а в доме или в огороде от GPS толку мало, хотя на будущее я этот вариант и не исключаю. Но это уже периферия для центрального контроллера, а пока надо с ходовым закончить. Будет тележка бегать нормально, не натыкаясь на мебель, не рискуя свалиться в открытый люк, обходя препятствия, нормально подерживая связь и отрабатывая команды, — буду наращивать возможности, повышать интеллект и самостоятельность.
    Платы бамперов уже вытравил, вырезал, просверлил. Из за лени обрабатывал сразу обе на одном листе, хотя обычно я всегда сначала делаю заготовку в размер, потом наношу рисунок. Впервые отступил от своей технологии, результат — на одной из плат местами расхождение сторон почти полмиллиметра. В общем — то это не критично для шага 2,5, просто при сверлении дырки на другой стороне не всегда попадают по центру площадок. Переделывать не стал, — когда распаяю, будет незаметно. Лудить и паять буду завтра, сегодня — банный день…

  14. Обнаружились небольшие проблемки. Во первых, для TSOP в библиотеке не было готового компонента, и когда я, вместо того, чтобы просто посадить их на SIP4 или TO220, завел их в библиотеку, забыл перевернуть ноги. Всю жизнь считаю ноги со стороны выводов, соответственно и платы разводил при виде снизу, а буржуйские трассировщики смотрят на плату со стороны деталей. При разводке плат я это учитываю, а вот при добавлении нового компонента в библиотеку — иногда забываю. В результате оба TSOP оказались спиной к нужному направлению. Обнаружил это еще до лужения, когда прикидывал, какие дырки надо рассверлить большим диаметром (сначала сверлю все 0,6). Варианты: одеть на выводы кембрик, оставив выводы подлиньше и перекрутить его на 180 градусов (некрасиво); Впаять снизу платы (нежелательно); Изготовить платы заново (Лень…); Загнуть ноги ему за спину и запаять вверх ногами(скорее всего…). Вдобавок еще оказалось, что подстроечных резисторов нужного номинала и именно в том корпусе, под который разводил, немножко меньше в наличии, чем думал, и придется или еще прикупить, или ставить другие, что не совсем хорошо. В общем, немного застопорилось… Зато придумал, как, не шибко напрягаясь, сделать простые и надежные корпуса на датчики пола. Если слегка рассверлить местами 2х контактные клеммники (ставятся на плату для зажимания проводов под винт), фоторезистор и светодиод оказываются прекрасно защищены и от засветок, и от цепляния за пороги или другие предметы. Прочно и смотрится вполне нормально. Примерно прикинул на проводках, с белыми светодиодами D 3мм даже при токе 5-10 ма вроде реагирует на довольно темные поверхности с 3-4см неплохо, но почти не замечает с 10 и более см. Точнее настрою уже на плате. Пятно подсветки получается при этом около 1,5 — 2см, что тоже ist gut… Параллельно надо сделать еще систему подвески с небольшим (2-3мм) ходом в продольном и поперечном направлении. Проще всего было бы приклеить платы бамперов ко дну на кусочки поролона, но не будешь же каждый раз отрывать и снова клеить. Придется на рычагах с шарнирами крепить изнутри к боковым стенкам корпуса, как и планировал. Лучше пока ничего в голову не приходит. Бамперы должны двигаться достаточно легко, но не повреждаться, если поднять за них тележку. Вес все — таки довольно приличный (в основном за счет свинцового аккумулятора, и движков с редукторами).

    1. А почему бы не приклеить их к поролону,а сам поролон должен иметь жесткое основание с винтом. Тогда ты эти поролонки на винт и посадишь. С одной стороны не нужно городить шарниры, с другой получаешь довольно технологичный девайс — легко разборный и ничего не сломается.

      1. У меня по краям платы есть по паре отверстий для крепления, на той части, что входит в корпус. Хотел прикрутить к ним угольники для рычагов. Если ко дну коробки изнутри приклеить бруски поролона, на них сверху приклеить площадки с 2 шпильками, на которые крепить плату бампера, может получиться неплохо, и снимать можно легко. Просто, надежно, технологично, красиво. Можно снизу винты пропустить через отверстия в поролоне и днище, сделав на конце, снаружи корпуса, большие шляпки. Тогда винты не будут мешать бамперу в нормальном режиме, но ограничат перемещение в вертикальнной плоскости, например, при попытке поднять тележку за бамперы. При продольных и поперечных перемещениях плата просто упрется в корпус. С рычагами много мороки по ограничению хода как раз в таких ситуациях, а вариант с поролоном мне с самого начала больше нравился, и жесткость легко регулировать (шириной куска). И дырок и винтов в корпусе меньше. Только проблема со сьемом отпугивала, но ведь действительно, можно приклеить только крепеж. Сейчас есть много хорошего импортного поролона в упаковке компьютерных комплектующих, особенно мне нравится серого или черного цвета и большой толщины, например, в групповой упаковке винчестеров в OEM поставках, или связного оборудования. Он не очень мягкий, но и не жесткий, в отличие от нашего, который мягкий, и быстро превращается в липкую красно — коричневую гадость.
        Часто попадается в упаковке еще какая — то пузыристая пластмасса, обычно склеенная из пластин по 8-10мм, голубая, черная, но она жестковата, и после сильного сжатия неполностью восстанавливает форму. Ей хорошо заполнять пустые места, например, вокруг аккумулятора. Можно закрепить пластину снизу бампера, для смягчения столкновений. Или тоже сделать из черного поролона.
        Кстати, клей «Момент», который после высыхания даже ацетон не берет, прекрасно смывается бензином… (Может, кто еще не знал).

  15. Отладил обработчик команд с RS232. Кроме обычных описок при наброске программы начерно, ничего особенного. Все пашет. Попутно выбросил за ненадобностью обработчики отладочных кнопок, временные задержки главного цикла. Почистил программу. Диалог через RS232 уже вполне достаточно развит, дальше отладка будет вестись через него. Особенно когда доделаю эмулятор отладочного пульта в компьютере. Размер программы сейчас : 1269 байт (15%)ROM и 75 байт (20%) RAM. При желании еще можно подсократить, но пока мне для отладки так удобнее, да и выигрыш невелик, а программа станет менее прозрачна.

  16. Доделал программку виртуального отладочного порта для компьютера. Пришлось повозиться с чтением из COM порта. С записью гораздо проще. Какой дурак только придумал запретить прямой доступ к портам в системах на ядре NT… В WIN 98 все было бы гораздо проще, а в XP приходится морочить голову с потоками, и принятые байты читать не по одному, а сразу по несколько штук из буфера. Теперь уже все работает, кнопочки шлют команды, по приему вижу инфу от контроллера, вижу на пульте напряжение аккумулятора робота (в числовом виде и на линейке — индикаторе), движком на пульте регулирую скорость. Осталось дописать контроль состояния датчиков бамперов, пока на пульте заложил только индикаторы для них. Сами бамперы пока еще не распаял, только залудил платы. Завтра, если будет время, постараюсь распаять хотя бы один. Уточнив токи и номиналы резисторов, второй можно будет запустить быстрее. Отвлекают дела домашние (живу один, весь дом на мне). Завести в хозяйстве бабу — так ведь тогда совсем времени не будет… Лучше уж робота, он управляется гораздо проще, и не борзеет.

    1. Как сделаешь бамперы зашли мне фотки/финальный релиз схемы и прошивку, если будет. Я на третий пост выведу — выведем твой проект на всеобщее внимание.

      А я сижу УЗ бамперы жду. Судя по графику они имеют перестраиваемую направленность (вот сам не вдупляю как это так, поэкспериментирую расскажу). Сам решил схитрить — сонар один, а излучателей заказал много — буду их через мультиплексоры прогонять. Излучатели по 6баксов. Сам сонар в сборе — 30 баксов.

      А по поводу бабы… ну это какую найдешь :) Я на свою не жалуюсь совершенно :) На ней и хозяйство и вся подноготная сайтов обеих (программер она у меня).

  17. Набросал програмку передачи данных между контроллером бамперов и ходовым, пока для ходового, и черновую заготовку програмки обхода препятствий. (Для контроллеров бамперов обмен будет проще, он только выставляет запрос на передачу, а руководит обменом ходовой). По предварительным прикидкам и замерам разброс показаний датчиков пола в зависимости от покрытия пола и тока подсветки будет довольно велик (единицы — десятки килоом). Одним порогом срабатывания не обойдешься. Придется использовать запасной вариант, заложенный заранее. Фоторезисторы пола я повесил на порты A0-A3, которые могут использоваться как входы АЦП. Буду мерять сигнал от каждого сначала без подсветки, затем с подсветкой, и по величине относительного приращения делать вывод о наличии пола. Фоторезисторы достаточно инерционные при работе на нагрузку десятки килоом, но торопиться особо некуда, скорости мизерные. Даже если за время опроса робот и пройдет миллиметр — другой, так от пятна подсветки пола до точки контакта пола с колесом — несколько сантиметров.
    Вчера вечером начал напихивать плату заднего бампера деталями, — вырубили свет. Но чукча хитрый, у меня есть хороший гелевый автомобильный аккумулятор 12в 77А/ч, постоянно заряженный. Прицепил к нему пару галогенок по 20вт, продолжаю пихать детали. Соседи понабежали, давай пытать, почему у меня свет есть, а у них нет. Отбрехался, сказал, что я электричество не ворую, поэтому у меня никогда не отключают. Вроде поверили. (Кроме меня, в каждом дворе сварка да котлы с ТЭНами на халяву). Ночью свет дали, начал паять. Может, сегодня вечером хотя бы задний закончу. Много мороки с верхней стороной, раньше я микросхемы запаивал прямо в плату, паял и сверху, и снизу. Теперь — на панельки, к выводам сверху не подлезешь, да и у некоторых деталей тоже, все мелкое. Приходится делать проволочками «металлизацию». Тем не менее потихоньку продвигаюсь, если не с железом, так с софтом, пока закончу с бамперами, программа для них тоже уже будет готова. А там — как обычно: Включил, глянул, — все работает, никакой романтики… На платах бамперов хоть подстроечники можно будет покрутить, для датчиков столкновения — со шторками немного побаловаться. А там — снова дальше, уже на более интелектуальный уровень, когда низовые функции и рефлексы будут отлажены.

  18. Сейчас пришел в голову еще один вариант. Если бы фоторезисторы не были уже повешены на вх. АЦП, можно было бы повесить на их порты конденсаторы, которые перед измерением разряжать, замыкая портом, а потом мерять время заряда через фоторезистор до переключения порта в 1. Диапазон даже будет шире, чем с АЦП, особенно при малых яркостях. Можно оставить, как запасной вариант. Но думаю, что и c АЦП будет нормально, если оптимально отрегулировать чувствительность. Подстроечники поставил по 50ком, сопротивление фоторезисторов при прямом «взгляде» на настенное бра с 1,5х метров ~6-8ком, при «заглядывании» в люк при включенном внизу свете ~22ком, при включенной подсветке с расстояния 3-5см — от 2 до 60ком, в зависимости от покрытия пола и тока подсветки (3-10ма). При выключенной подсветке и открытом ФР под столом, без прямого освещения — от 160ком до мегомов. Вот такой разброс… Также показания зависят от того, «голый» ФР или смотрит через дырочку 3-4мм. (сам он ~5-6мм, с чувствительной дорожкой в виде змейки, 4 петли). Вариант в корпусе с дыркой, который я буду использовать, снижает влияние посторонней засветки, почти не ухудшая видимость своей. На ИК ФР не реагирует, также как TSOP — на белые светодиоды, поэтому можно подсвечивать одновременно, для сокращения времени одного цикла.
    На 1 мм робот сдвинется примерно за 5мс, так что нет смысла опрашивать чаще.

  19. Вчера, хоть и вырубали свет несколько раз за вечер из за перегрузки (ннапряжение временами падало до 150в), все же спаял плату переднего бампера (задний тоже уже готов). Осталось спаять шлейфики с разьемами для соединения теперь уже 3х (с ходовым контроллером) плат между собой, и можно начинать отладку, а параллельно — делать подвеску бамперов и дописывать программу. Будет время — подготовлю фотки и чистовые схемы, программы, прошивки, разводку, таблицы распределения портов и разьемов.
    В программе отладочного пульта доделаю индикацию состояния всех датчиков. Удобная штука получилась, через COM порт и вижу все, и управляю, и никаких лишних соплей и кнопок, только шнурок в 3 проводка к компу, и те при первой возможности заменю на радиоканал (или, на первое время, для отладки, на ИК канал). Количество команд и телеметрии огранчено только обьемами памяти контроллера, а ее только в ходовом еще 80% свободно.
    Как закончу с бамперами, нефига ему будет на столе валяться, не кот. Пусть по полу мотается, ищет на свой бампер приключения, а я начну уже поворотную платформу с камерой, подсветкой, и кучей всякой фигни городить, а параллельно и о центральном процессоре подумывать. На платформу тоже хочу свой контроллер поставить, чтобы меньше проводов крутить. Все же будет как минимум 2 шаговика (поворот платформы и наклон камеры, возможно, еще для фокусировки камеры). А также измерение освещенности, регулировка яркости подсветки для камеры, возможно, дальномер, и еще чего-нибудь. А со своим контроллером достаточно подать только питание и пару — тройку проводков канала связи. Заманчиво обойтись вообще без проводов, (прикольно будет смотреться, когда башка будет делать несколько оборотов в одну сторону), использовав для подачи питания на платформу вращающийся транс. Одна половина горшка с обмоткой — на основании, другая — на платформе. Думаю, при аккуратном изготовлении, с горшками 20-30мм и зазоре порядка 0,5 мм, потери будут невелики, особенно, если настроить обмотки в резонанс. Канал связи можно сделать на ИК или тоже с трансформаторной связью, а можно модулировать питание, вырезая отдельные импульсы. На частоте в десятки килогерц на питание это не повлияет, а детектироваться будет четко. Или использовать для связи способ, применяющийся в радиометках и карточках (У нас на работе лет 8 пропуска такие).

  20. Вчера вечером с устатку решил сачкануть, ничего не паял, тем более что со светом задолбали, несколько раз вырубался. На субботу попал праздник (День Республики), так за него в понедельник не работаем. Погода портится, дождь собирается, по ночам температура падает до 8, а то и 6 градусов. Даже днем уже часто меньше 20. Некоторые деревья начали желтеть. Лето кончается. В воскресенье обещают первый снег. Вот и буду дома сидеть, может, даже печки затоплю, да с бамперами повожусь. Заодним надо будет привести в порядок документацию, расписать начисто порты, разьемы, команды, флажки, а то уже много накопилось всего, и по сравнению со старыми набросками, с которых начинал, многое изменилось. Потом соберу все в архивчик и кину почтой.

  21. Сегодня уже включал бамперы, пока без контроллера, проверил все цепи и выставил для начала токи всех светодиодов по 10 мА. Теперь надо доделать программу. Контроллер бамперов будет сканировать датчики и при обнаружении препятствий или отсутствия пола будет дергать порт B0 ходового контроллера, тот будет отвечать по B1 и стробировать пересылку контроллером бамперов 16 бит с состояниями датчиков. Также в любое время ходовой контроллер сможет запросить по B1, постоянно отслеживаемой контроллером бамперов, его состояние, даже если все нормально.
    При изменении ходовой контроллер будет отправлять новое состояние датчиков по RS232 на пульт, а в дальнейшем — центральному процессору робота по I2C. Если препятствие обнаружено во время движения, то ходовым контроллером будет выполняться обьезд с сохранением (по возможности) после обьезда заданного ранее направления. На пульте будет отображаться состояние всех 12 датчиков бампера:
    4 датчика пола, 4 датчика столкновений, 4 направления ИК локатора, а также 4 битами — обобщенная обстановка по 4 углам.

  22. За выходные не получилось позаниматься бамперами, отвлекли… В основном подчистил документацию (распределение портов, слова и биты состояния программы, назначение контактов разьемов, номиналы реально установленных на платы компонентов). Сфотографировал платы бамперов уже с деталями, а также примерную компоновку корпуса (убрав пока временнный крепеж и соединительные провода).
    Почти готовы, (пока начерно), подпрограммы обмена по 2 проводам между контроллерами бампера и ходовым. Не стал городить что-либо стандартное ради передачи 2х байт, сделал простенький последовательный обмен со стробированием со стороны ходового, запрос же на передачу может выставлять как контроллер бампера (при изменении обстановки), так и ходовой (в любое время). Скорость обмена некритична, чтобы не влияли прерывания от таймера и USART (а со временем — и I2C), но контролирую максимальное время обмена, чтобы не допустить зависаний бампера. По превышении обмен считается несостоявшимся. Каждая из 2х линий на одном конце постоянно работает на вход, на другом — на выход, чтобы не заморачиваться со встречной работой. По B0 бампер выставляет запрос на передачу и гонит данные, по B1 — ходовой выдает или подтверждает запрос и выдает стробы для смены бит бамперу.
    Ходовой контроллер будет выдавать состояние датчиков бампера на отладочный пульт (по RS232), при изменении их состояния или запросе с пульта. Для пульта надо еще тоже дописать дешифрацию датчиков (раскидать 2 байта на биты средствами Дельфи, что в общем — то несложно, при реализации на нормальном компе, даже при отсутствии чисто битовых операций в языке). Например, делим байт целочисленно на 128, получаем бит 7 и остаток, остаток делим на 64, получаем бит 6 и остаток, остаток делим на 32, получая бит 5, и т.д. Элементарщина. 7 строк листинга + обвязка. И в соответствии с битами менять цвет индикаторов на пульте. Можно добавить кнопочку и команду для запроса состояния датчиков, можно просто при установке соединения пульта с роботом делать запрос состояния автоматом, заодним и запрашивать также напряжение батареи для индикации на пульте, а потом робот будет слать их только при изменениях или по ручному запросу. В общем, обычная рутина, но время все же на написане и отладку требует.
    Как доделаю и отлажу программки, пришлю всю обновленную инфу одним архивчиком. Следующий этап — одометры, и привязка работы двигателей не ко времени, а к пути. Просто счетчики задаваемого пути будут декрементироваться не таймером, как сейчас, а одометрами. Заготовка одометров в программе уже написана, надо сделать лишь сами датчики (На платах их будут только токозадающие цепи и нагрузка для 2х оптопар на каждый борт), да подключить их к портам B4-B7 ходового контроллера.
    В общем, процесс хоть и медленно, но движется. Попутно прикидываю варианты на будущее развитие.

Добавить комментарий