На диске было описание и схемы подключения не только для простых, но и для шаговых моторчиков. Сейчас я не смогу сделать его "образ", у меня сейчас нет подключенного CD-ROM, да и за диском лезть далеко. Сейчас я такого в Интернете не нашёл, зато есть куча другой, уже новой, информации, да и микросхемы уже есть посложнее и более продвинутые, так что он вам вряд ли нужен. Если кто-то хочет, напишите в личных сообщениях, придется подождать, но, может быть, как-нибудь руки дойдут. Тому, кто не верит, что я этот диск нашёл — правда-правда! Вот чек:
Нашлись микросхемы, которые управлялись, как раз, напряжением 5В, которое было на моём LPT.
Мне ещё хотелось сделать манипулятор, чтобы можно было подвигать им, что-то захватить или переместить. Подумав, что в манипуляторе тоже используются двигатели, а управление я всё равно подключу похожим образом, я подумал, что в качестве примера для исследования управления манипулятором моя машина хорошо подходит. Она тоже может перемещать предметы, в конце концов, можно будет приделать ей захват. Я решил пробовать подключить для управления с компьютера не что-то собранное заново, а уже имеющуюся у меня машину.
Чтобы подключить что-то к чему-то, сначала нужно сделать плату. Я делал платы из текстолита с медным покрытием, опять же, с Митинского радиорынка. Покрытие нужно покрыть лаком, который повторял бы проводники и контактные площадки, затем протравить лишнее медное покрытие. Для этого нужно пролить хлорное железо на ковёр, испачкать всё и хорошенько пропитать свою одежду цапонлаком. После этого можно покрыть облитый реагентом ковёр пылью от сверления дырок в текстолите под ножки дискретных деталек, испортить несколько листов дорогого, по моим меркам, текстолита. Получается плата, типа, как печатная, только рукотворная.
Микросхема работала следующим образом. Каждая из них управляла одним двигателем. Подавала питание разной полярности на два выхода, в зависимости от наличия напряжение на, кажется, двух её управляющих ножках: вперёд и назад. Я не помню ее точное название. Если нет сигналов, то двигатель не работает. Я купил в том же Чип и Дипе и подключил две таких.
Сначала я нарисовал схему на листке бумаги, затем подключил по ней микросхемы к выходам LPT-порта. Через программу на порт выводится число, где единица присутствует или отсутствует на нужных ножках подключенной к его выходам микросхемы. Когда порт подаёт единицу, то есть, напряжение на нужные ножки — двигатели крутятся. Выходы микросхем соединил с правым и левым двигателями на моём "манипуляторе". Если оба вперёд, то машина двигается вперёд. Если в разные стороны, то поворачивает. Я сделал разворот на месте, как у некоторых настоящих танков.
Следующим шагом должно было стать подключение клавиатуры, но это уже было делом техники. Помимо стандартных для "бродилок" и "стрелялок" WASD для движения я подключил и мышку. Я сделал так, что машина копировала движения оператора ПК. Двигаешь ей вперёд — машина едет вперёд, назад — едет задом. С помощью мышки получился уже, буквально, настоящий манипулятор. Двигаешь мышью в сторону — машина поворачивает. В управлении я задействовал и и кнопки. Нажимается левая кнопка — поворот налево, правая — направо, обе — движение вперёд.
Программа для этого захватывала курсор мышки и прятала его. Но я тут же задался вопросом: если невозможно будет двигать курсором, то как остановить программу? Поэтому я добавил кнопку, на которую автоматически наводился фокус. Чтобы остановить управление, нужно надавить на Пробел, эта кнопка нажмётся, и пользователю вернётся курсор.
Странно, но ни в школе, ни в институте на уроках по программированию нас не учили, что бывают разные версии ПО и как называть переменные, и, соответственно, в моих каталогах для разработки ПО программы хранились под названиями типа: LPT_final, LPT_final2, LPT_final_latest, LPT_final_latest2, ну и так далее. Переменные назывались просто X, Y, O и т. п, и программа на скриншоте называлась, как и многие, для которых я не напрягался, придумывая названия, "Project1.exe".
Я долго испытывал управление и проходимость машины в разных условиях и разными манёврами. Управлять настоящим предметом, используя клавиатуру и мышку, прямо как компьютерным персонажем, было круто! Можно представить, что машина исследует виртуальный мир, а ты ее оператор. В этом мире были и рендер, и разрешение, и физика столкновений получше, чем в компьютерных играх. Особенно реалистичными казались ожоги от соскользнувшего с жала паяльника мне на кожу припоя.
Однако оставалась ещё одна возможность, которую стоило попробовать применить. Что если управлять им по сети? Получится ли и насколько большой будет задержка? Будет ли "пинг" настолько большой, что машиной невозможно будет рулить?
Удалённое управление
Я стал думать, как можно передать числа, которыми управляются двигатели с LPT-порта, по сети. Первое, что пришло в голову — это локальная сеть, благо, у меня был для неё коаксиальный кабель и сетевая карта, тоже снятая с Пентиума, но второго компьютера у меня не было. Не только второго, но и вообще компьютеров не было ни у друзей, ни у соседей. Компьютерами пользовались только те знакомые, кто учился в институте. Даже их родители считали компьютер бесполезной тратой денег, дорогой игрушкой, которая только портит зрение и отвлекает от прополки картошки.
Я перебрал в голове кучу вариантов, но остановился на том же Visual Basic. Для этого в этом языке существовал другой модуль под названием winsock.ocx. В качестве протокола я сначала выбрал TCP, однако меня сразу же озадачила некоторая сложность при потере пакетов. Тогда я переключился на UDP, потому что в нём не нужно было считать отправленные пакеты. Сколько пришло, тем и будем довольствоваться.UDP просто отлично подошёл для моей цели.
Я слегка изменил программу для управления вездеходом, создав внутри неё аналог передачи позиции курсора на выход LPT, но не напрямую, а через сетевые сигналы. Поэтому теперь она разделилась на две части, клиентскую и серверную. Клиент подключался к "серверу" по IP-адресу, вводимому в текстовое поле.
Как я уже упомянул, второго компьютера у меня не было, и управлять, и смотреть на картину движения вездехода, всё равно приходилось с одного и того же ПК. Для этого нужно было запустить и клиентскую, и серверную часть, на моём компьютере, и связать их, введя в клиент IP сервера.
Эта программа на современных ОС уже тоже не запускается.
Для их запуска, возможно, сработает установка Windows 98 на виртуальную машину, однако сейчас я не могу этого сделать.
При программировании в Visual Basic было очень просто вставлять компоненты различных программ прямо в "формы". По-моему, я добавил в неё одним из компонентов NetMeeting, и запаковал всё в "установщик". По крайней мере, сейчас, в одной из ошибок запуска, программа ругается на именно этот неработающий компонент. Файл "Conf.exe" — это и есть программа NetMeeting. Она, в качестве рудимента, дошла до Windows Vista.
Дату изменения исполняемого файла повредил вирус, но внутри установочного CAB все даты правильные.
Получилась программа для удалённого манипулирования машиной. Правда, тестировать работу программы мог только я у себя на компьютере, и я подсоединял программу управления к серверной её части, запускавшуюся на том же компьютере, по IP 127.0.0.1.
Поскольку у меня есть веб-камера, почему бы не попробовать установить её на трактор? Я поставил, но провод от неё был настолько толстый, что управлять ей было не удобно. Чтобы испробовать телеуправление, я решил, что проще наводить камеру на машину, а сам вездеход ездил бы по столу под ней. Пользователь мог видеть перемещения машины на своём экране, через камеру, и управлять движением устройства с помощью мышки и клавиатуры.
Программа состояла из двух частей, программа-клиент и сервер. Управляющий запускал на своём компьютере клиентскую часть, а тот, у кого был компьютер с машиной — серверную. Управляющий смотрел Winipcfg IP-адрес сервера и вводил его в клиентскую часть программы, программа сама подставляла IP-адрес в NetMeeting, и они соединялись. Управление шло с видео: видео и аудио передавались через NetMeeting.
Боевой выезд
Для связи с Интернетом бодро свистел в телефонную сеть PCI-модем 3Com, который, по идее, должен был выдавать 56 килобит в секунду. Одним из крупнейших и самых известных Интернет-провайдеров, представленных на всех выставках и больше всего раздававших там предметов и буклетов с рекламой, был Demos со своим знаменитым доменом SU, что означало Soviet Union: http://demos.su . Однако мой модем с основными провайдерами: MTU Inform, Caravan, Demos и Sitek, не всегда соединялся по Dial-up на заявленной максимальной скорости, и чаще скорость была всего 33,6 килобита в секунду.
Проверить работы удалённого управление было катастрофически не с кем. Друг, с которым мы связывались по видеосвязи, был занят.
Я подумал, что, ведь, в сущности, можно было бы проверить и без обратной связи. Управление будет работать и в том случае, если если кто-то просто запустит клиент на своём компьютере и будет видеть мою камеру. Тогда, водя мышкой, он сможет поуправлять машиной. Этого было достаточно, ну а я ему потом перезвоню, и он расскажет словами, получилось или нет! Пришлось пожертвовать обратной связью в реальном времени, и я не мог получить впечатления об управлении прямо во время сеанса связи.
Пусть оператором машины буду не я, и пусть я не буду видеть и слышать водителя машины, пусть придётся только позже услышать его впечатления. Однако нужно было провести тестирование новой системы. Без этого я не мог понять перспективы и работоспособность такого подхода к удалённому управлению.
На помощь пришёл второй друг, которого звали просто Анатолич. У него был компьютер, и тоже был модем, не было ни микрофона, ни камеры. С компьютерами разговаривать было не принято.
— Привет, хочешь, я тебе покажу кое-что новое?
Я вкратце описал, как управлять моей системой с его компьютера. Программа просто устанавливалась: я постарался, чтобы от пользователя требовалось наименьшее количество самостоятельных действий, и включил все компоненты, включая программу для видеосвязи, в архив для установки. Установочный файл я передал Анатоличу на дискете, так как он жил недалеко, и для этого было достаточно спуститься к подъезду.
— Сначала мы созвонимся по модему, ты вот сюда набирай: Winipcfg, там смотри цифры, вставляй адрес вот сюда.
— Так, понял, записал. А что дальше?
— Кнопки работают так, у тебя откроется изображение. По видео контролируешь. Потом расскажи, что получилось!
Я стал ждать. И, в какой-то момент, металлический звонок дискового телефона зазвонил, однако соединение по медным телефонным линиями тут же перехватил модем 3Com, "подняв трубку" первым. Сначала я просто смотрел на машину, но ничего не происходило. "Что же я подключил не так?" — было, успела промелькнуть у меня мысль. Похоже, что Анатолич всего лишь искал мой IP и подключался через программу-клиент. И затем машина задвигалась.
Вездеход поехал вперёд, развернулся. Он ездил вперёд и назад, влево и вправо, повторяя движение мышки в руке Анатолича. Машина поворачивала на месте, исследуя стол и перекручивая свои провода. Анатолич быстро разобрался с управлением. Пару раз танк чуть не свалился со стола, и пришлось ловить его руками, прямо в кадре у оператора.
Невероятно, но сейчас передо мной, в 2002 году, телеуправляемый вездеход исследовал письменный стол. Он передавал видео с одной из первых веб-камер через видео- и аудиопотоки, сжатые для передачи по медным проводам одними из первых кодеков. Мой друг направлял машину своей мышкой с удалённого компьютера и наблюдал за её движением через одну из самых первых программ для передачи видео, подключавшую собеседников тогда ещё напрямую, через IP-адрес.
Похоже, Анатолич вошёл в раж первооткрывателя новой технологи. Мне показалось, что ему нравилось не только ездить, но и просто смотреть в камеру на машину с разных сторон. Мне часто приходилось распутывать провода, запутавшиеся после разворотов вокруг колёс стол вездехода.
Когда я перезвонил Анатоличу через настольный телефон и спросил его о работе технологии, он подробно рассказал, как и что он делал и что видел, и что всё работало, как я и сказал.
Результат тестирования и отзыв оператора
Друг рассказал, что задержка при управлении в долю секунды почти не мешала вождению, и что ему очень понравилось.
Долгое время я не хотел устанавливать на компьютер Windows XP, который вышел недавно. С одной стороны, интерфейс Windows 98 мне нравился больше, а, с другой, мне не хотелось терять быстродействие компьютера. Ведь XP, хоть и хвалился скоростью своей работы, на практике был заметно медленней, чем Windows 98.
Видимо, чтобы простимулировать популярность XP, производители нового ПО стали стремительно прекращать поддержку Windows 98, и выбора не оставалось: пришлось обновить и ОС. Когда я запустил свою программу под XP, я увидел, что в ней убрали возможность прямого управления портами.
Оказалось, что моя видеокамера Kensington внезапно также перестала работать с какими-либо Windows, старше Windows Millenium. Поэтому я не мог ее использовать, и долгое время оставался без веб-камеры. Лишних "Денег" на новую у меня не было.
Microsoft прекратила поддержку NetMeeting и MSN Messenger. Поскольку в Windows XP "vbio32.dll" уже не посылал сигналы на выходы LPT-порта, я с головой погрузился в другие проекты. Отложив идею в долгий ящик!
Для того, чтобы попробовать подключение к современному, на то время, PC и модемному Интернету, нужно было какое-то устройство, которое было бы, с одной стороны, просто собрать, а с другой, которое бы показало дальнейшие перспективы управления подобным образом. Из положительного заключения оператора созданного устройства по результатам тестирования, стало понятно, что, несмотря на некоторые неудобства, скорости 33,6 кбит/с и видео и аудио, сжатых первыми кодеками, хватало на управление по видеосвязи, и задержка не мешала движению и контролю над подключённой машины.
Неудобства заключались в том, что было слишком сложно созваниваться и искать IP-адрес, каждый раз предоставлявшийся провайдером заново, и в том, что во время связи нельзя было разговаривать по телефону.
Только представьте, что управлять удалённым устройством, при правильном подходе, можно было из любой точки мира и видеть результаты своих действий в прямом эфире, прямо на экране! Пусть и на пузатом экране семнадцатидюймового ЭЛТ-монитора.