in english
по-русски
eFind.ru
Поиск электронных компонентов на складах
Новости микроэлектроники
Рекламное место свободно

Управление радиомоделью при помощи компьютера

Наверное, сколько бы ни было человеку лет, ему все равно будет интересно поиграть игрушкой на радиоуправлении. К примеру возьмер машинку на радиоуправлении. Нету? Купи! Понмаю, дорого в магазине. Но на рынке, где я купил этого монстра себе зимой 2004 года, это обошлось в 270 рублей(без батареек). Батарейки использовать не рекомендую - лучше аккумуляторы. Себе я поставил никель-кадмиевые на 800млАЧ. У меня тачка поддерживает рулевое управление - влево/вправо и вперед/назад. То есть никаких неудобств и ограничений. На ковре не буксует. Преодолевает без проблем пороги и плинтусы до 2.5 см. Скорость - чуть быстрее шага. Прочность отличнейшая. Странно, но сборка китайская. За 270 рублей, я считаю ее просто находкой.

Так вот, просто ей управлять нет никакого драйва. Мой лозунг - "коннектим все к компу". И радиомашинка, кстати не исключение. И не надо думать что это будет сложно. Чтобы заставить комп управлять машиной нужно как-нибудь подключить пульт управления радиомодели к нему через что-нить. Проще всего через LPT, но это не по-продвинутому. Возьмем COM. Понимаю, вам хотелось USB, но это обойдется в копеечку, тк микруха переходник стоит 150 рублей. А если вы ее еще и спалите в процессе сборки, то суецида не избежать. Итак, COM - порт последовательный, поэтому с передачей сигналов на четыре ветви по двум проводам придется похитрить. Микруха к561ие10 стоит 8 рублей.

Распиновка COM-порта:
Распиновка RS232

Дело в том что мы же можем нажимать на рычаги пульта в различых комбинациях (тк Вперед&Лево ...) С компа же подается только питание +12вольт, один управляющий сигнал(в нашем случае), провод "земля" и провод обратной связи. Я решил эту проблему так. Поставил двоичный счетчик К561ИЕ10. Взгляните на схему.

Схема радиоуправления

Работа происходит следующим образом: компьютер посылает по одному проводу счетчику сигнал на прибавление единицы. На выходе счетчика (выводы 3.4.5.6) получаем комбинацию высокого/низкого уровня напряжения, которые идут на транзисторы, которые припаяны своим эмитером и колектором к пластинкам, либо контактам замыкаемым рычежками пульта. Стоит появиться на базе транзистора высокому уровню напряжения, он немедленно откроется "соединив" в пульте "что надо". Я не знаю насколько моя схема(в смысле пульт) частна. Не думаю, что пульты сильно отличаются. Скорее все они вообще делаются на одном заводе :). В данном случае рычажок замыекает минус батарейки пульта на определенную ножку микросхемы пульта. То есть надо использовать n-p-n транзисторы(обратная проводимость). Если же надо замыкать плюс на микруху(что маловероятно), то надо испорльзовать(p-n-p) транзистор например(кт361). Диод перед микросхемой любой выпрямительный малогабаритный. Не забудьте про DCD провод, который припаивается к выводу №6 микрухи. Это обратная связь. Без нее комп не сможет обеспечить правильную работу счетчика, а следовательно и машинки. Ниже приведены исходные процедуры по управлению за тачкой. Но это не голимый делфи - здесь используестся компонент которого у вас наверняка нет. Называется он ComDrv32. Это для последовательного порта. Можете просто вникнуть в суть таботы драйвера. А для управления моделью можете скачать прогу SashRRC[200 kb WinRAR3] (это конечно альфа версия но со своей основной обязанностью справляется на ура во всех ОС). Стоит только правильно подключить танзисторы в пульте с микросхемой(не спутайте ножки) а то когда нажмете вперед машина поедет назад. Программаа rrc написана мною только под эту схему:

procedure ResetCar; //полностью останавливает машину
var CycleCount:Integer;
begin

if(rrcwindow.Com.Connected=false)then exit;

if(lsCD in rrcwindow.Com.GetLineStatus=True)then
begin
CycleCount:=0;
while(lsCD in rrcwindow.Com.GetLineStatus=True)do
begin
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик

CycleCount:=CycleCount+1;
if(CycleCount>MaxCycleCount)then begin exit;end;
end
end
else
begin

CycleCount:=0;
while(lsCD in rrcwindow.Com.GetLineStatus=False)do
begin
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик

CycleCount:=CycleCount+1;
if(CycleCount>MaxCycleCount)then begin exit;end;
end;

CycleCount:=0;
while(lsCD in rrcwindow.Com.GetLineStatus=True)do
begin
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик

CycleCount:=CycleCount+1;
if(CycleCount>MaxCycleCount)then begin exit;end;
end;
end;
end;

procedure SendCommandToCar(chUp:boolean;chDown:boolean;chLeft:boolean;chRight:boolean); // задаем нужную команду тачке
var Checksuma:Integer;
x:Integer;
begin
Checksuma:=0;
ResetCAR;

if(rrcwindow.Com.Connected=false)then exit;
{добавь сист защиты от непр действий}

if (chUp = True) then Checksuma:=Checksuma+2;
if (chDown = True) then Checksuma:=Checksuma+1;
if (chLeft = True) then Checksuma:=Checksuma+8;
if (chRight = True) then Checksuma:=Checksuma+4;

for x:=1 to Checksuma do //накрутим до нужного значения
begin
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(False); //
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик
rrcwindow.Com.ToggleRTS(True); //Такт на счетчик
end;
end;

Скачать программу.

Будут вопросы - пиши на sash_g87 {собака} mail.ru



1999-2008. Сайт ПАЯЛЬНИК (cxem.net). При использовании материалов с данного сайта, обязательна ссылка на сайт ПАЯЛЬНИК и первоисточник! Rambler's Top100