总的来说嘛,SMC就是一个可以跨越距离的你PC后面的串口。
我的作品,先上图 再来
DIY制作:SMC远程控制小车
DIY制作:SMC远程控制小车
DIY制作:SMC远程控制小车
说起来挺简单的,简单一点的说:PC控制SMC盒子,盒子里面用Debian系统,系统控制SMC串行端口,端口控制51单片机,单片机控制车体,OK!!!
详细一点,往下来看:
1,先往SMC盒子安装Debian系统,详细请参考:lintel 的在SMC无线硬盘盒(MGB100)上运行Debian 地址:http://www.anywlan.com/bbs/thread-18052-1-1.html
2,焊接盒子的串行接口线,请参考: lintel的SMC无线硬盘盒(MGB100) 研究之四 JTAG 地址:http://www.anywlan.com/bbs/thread-18012-1-1.html
只需要焊接1 3 6号脚就可以,我焊接的一般就不上图了(如果经常用串行接口的话,可以去掉一个USB中间两根线,改接这两根RX ,TX ,嘿嘿,反正两个USB呢,也用不着那么多,个人观点哦,根据自己实际情况定。)
3,焊接受控制电路板。以下以51单片机为例(有串口了,其他还不好说吗!),我的如下:
特别注意的,如果有51单片机编程器的话就不用焊RS232了,这个盒子串口是TTL电平,51也是,绝配!记得RX--TX TX--RX哦。
当然没有编程器,那就多费点劲,想偷懒,就找个老式的COM口数据线,嘿嘿,那个一般都是RS232,具体接法百度吧!
4,51单片机再接个L298N,接法如下,详情百度,多如牛毛。
硬件一切就绪,接下来,软件
1,先说一下SMC盒子串口的控制,用minicom控制,具体如下
debian安装OK后
apt-get install minicom
一路Y,安装完成。
minicom -s
配置串口,出现配置菜单:选serial port setup
进入串口配置
输入A配置串口驱动为/dev/ttyS0
输入E配置速率为9600 8N1
输入F将 Hardware Flow Control 设 为 NO
回车 退出
由于我们使用minicom作为超级终端控制路由器等设备, 而不是控制modem, 所以需要修改Modem and dialing, 将Init
string, Reset string, Hang-up string设置为空。 设置完成后选择Save setup as
dfl将当前设置保存为默认设置。
在配置菜单 选Save setup as df1保存(一定要记得这一步)
选Exit退出
下次在输入minicon 即可直接进入,按CTRL+A 再按shift+E 调出回显,OK完成。
2,要远程控制,动态域名即可。
3,单片机程序
//Code by myasus 仅希望抛砖引玉
//QQ:31495962
#include< P>
#include < P>
sfr DC=0x90; //P1是电机接口,P1.0--A P1.1--BP 1.2--ENAB P1.3--ENCD P1.4--C P1.5--D A--GO B--BACK C--LEFT D--RIGHT
//-------------------------取数据----------------------//
char getData(void)
{
char c;
while (!RI);
c=SBUF;
RI=0;
return (c);
}
//------------------------串口定义-----------------------//
void Init_Timer1_COM(void)
{
SCON=0x52;
TMOD=0x20;//定时器1定时方式2
TL1=0xfd;//baudRate:9600
TH1=0xfd;
TR1=1;//timer1 reset
}
//-----------------------主程序--------------------------//
main()
{
char c;
Init_Timer1_COM();
while(1)
{
c=getData();
switch (c)
{
case ‘w’:
printf("GO n”); DC=0x05;
break;
case ‘s’:
printf("BACK n”); DC=0x06;
break;
case ‘a’:
printf("LEFT n”); DC=0x1d;
break;
case ‘d’:
printf("RIGHT n”); DC=0x2d;
break;
case ‘z’:
printf("LEFT BACK n”); DC=0x1e;
break;
case ‘c’:
printf("RIGHT BACK n”); DC=0x2e;
break;
default:
printf("You are wrong! n”); DC=0x00;
break;
}
}
}