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

 

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

 Чтобы заставить компьютер управлять машиной нужно как-нибудь подключить пульт управления радиомодели к нему . Проще всего через LPT но это не по продвинутому. Возьмем COM. Понимаю, вам хотелось USB, но это обойдется в копеечку.  Итак, COM - порт последовательный, поэтому с передачей сигналов на четыре ветви по двум проводам придется похитрить. Распиновка COM-порта приведена на Рис.1.


Распиновка RS232

Рис.1. Управление при помощи компьютера. Схема распайки  COM-порта. 

 

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

 

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

Рис.2. Управление при помощи компьютера. Схема . 

 

Работа происходит следующим образом: компьютер посылает по одному проводу счетчику сигнал на прибавление единицы. На выходе счетчика (выводы 3.4.5.6) получаем комбинацию высокого/низкого уровня напряжения, которые идут на транзисторы, которые припаяны своими эмиттером и коллектором к пластинкам, либо контактам замыкаемым рычажками пульта. Стоит появиться на базе транзистора высокому уровню напряжения, он немедленно откроется "соединив" в пульте "что надо". Я не знаю насколько моя схема оригинальна. Не думаю, что пульты сильно отличаются. Скорее все они вообще делаются на одном заводе :). В данном случае рычажок замыкает минус батарейки пульта на определенную ножку микросхемы пульта. То есть надо использовать n-p-n транзисторы.

Если же надо замыкать плюс , то надо использовать p-n-p транзистор например(кт361). Диод перед микросхемой любой выпрямительный малогабаритный. Не забудьте про DCD провод, который припаивается к выводу №6 микросхемы. Это обратная связь. Без нее компьютер не сможет обеспечить правильную работу счетчика, а следовательно и машинки. Ниже приведены исходные процедуры по управлению за тачкой.  Здесь используется компонент которого у вас наверняка нет. Называется он ComDrv32. Это для последовательного порта. Можете просто вникнуть в суть работы драйвера. А для управления моделью можете скачать программу (это конечно альфа версия но со своей основной обязанностью справляется на ура во всех ОС). Стоит только правильно подключить транзисторы в пульте с микросхемой (не спутайте ножки) . Программа 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