DIY机器人系列:工程师自制蓝光呼吸WIFI机器人
方法二是利用winscp连接上路由,上传ser2net.ipk,然后运行putty,登陆路由执行
opkg update opkg install 软件包地址同昨日安装ov519驱动。
安装完毕ser2net后,需要进行一定的设置,在命令行界面下输入
cd /进入路由根目录,再输入
cd etc进入ect 目录后执行
vi ser2net.conf (当安装成功后才会出现此设置文件)找到
2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS
#2002:raw:600:/dev/ttyS1:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS
注意,这里"#"代表的是屏蔽,我们修改的是非屏蔽语句,可以看到,上位机发送的端口是2001,这就是我们需要发送的端口号,波特率是9600,其它的略。
设置完毕后记得保存退出,然后这里要执行一次ser2net,以开启服务。
一切设置妥当后,我们再次借用liuviking的程序进行串口通讯的测试,运行liuviking的程序,然后再运行"串口调试助手",在程序中点击发送串口数据,可以看到在"串口调试助手",有正确的数据输出,至此,Shy的串口连接部分设置完毕。
3 Linux平台:openwrt系统中添加自启动
添加自启动项的目的是为了在SHY启动的时候能够自动启动更多的服务,配合UCI命令。
在/etc/init.d里添加需要启动的shell脚本,假设名字为my-plugin。接下来模仿该目录下其他启动脚本的格式,添加你的代码。
[cpp] view plaincopyprint? 1. #!/bin/sh /etc/rc.common 2. # /init.d/my-plugin 3. START=50 #启动顺序 4. 5. start() { 6. #启动项执行的代码 7. } 8. 9. stop() { 10. killall my-plugin 11. }之后还需要在rc.d目录下做一个链接,启动时系统会按顺序启动rc.d目录下的脚本链接,对应执行init.d目录下的启动脚本。
链接命令如下:ln -s ../init.d/my-plugin /etc/rc.d/S50my-plugin
4 单片机模块
4.1 构建STC11F02E最小系统
我们选用STC11F02E单片机作为SHY的控制芯片电路部分,关于STC11F02E的参数如下:
STC11F02E单片机为增强型的8051内核,具有2KB的片内Flash程序存储器、2KB的EEPROM存储器和256KB的片内SRAM数据存储器。
这款单片机的UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)模块的最大特点就是通过配置特殊功能寄存器AUXR1中的第7位UART_P1的状态可以使UART模块的两个引脚(RXD、TXD)接到P3端口的P3.0、P3.1引脚,或者接到P1端口的P1.6、P1.7引脚,从而可以充当两个串口使用。
因为制作SHY需要的引脚并不是很多,所以我们只需要20引脚的单片机即可。这片STC11F02E
符合20引脚,小巧,作为增强型STC芯片,功耗小。
有两个串口通讯接口,可一个用于下载,一个用于openwrt路由通讯。
从DATASHEET中得到STC11F02E 的芯片管脚图
在这里,我们需要用到:
P1.7 作为串口的TX(transmit) 传送 接口
P1.6 作为串口的RX(Recive) 接收 接口
P1.5 - P1.0 用于控制L298N($2.1300)驱动电路
P3.7 用于PWM控制LED灯
P3.6/RST 用于复位电路
XTAL2
XTAL1 用于11.0592MHZ晶振
RXD
TXD 用于在线下载线路
复位电路图
RST保持两个机器周期以上的高电平时自动复位
晶振,复位电路,VCC,GND,连接好后
至此,STC11F02E最小系统完成。
4.2 中断方式接收串口数据
接收串口数据的目的是为了与openwrt路由完成通讯,STC11F02E要准确无误的辨识出openwrt路由发过来的指令,编制测试程序如下:
#include #include #define uchar unsigned char #define uint unsigned int unsigned char Receive(void) { unsigned char dat; while(RI==0); //只要接收中断标志位RI没有被置"1" 当接收完毕时,中断标志RI被置1 //等待,直至接收完毕(RI=1) RI=0; //为了接收下一帧数据,需将RI清0 dat=SBUF; //将接收缓冲器中的数据存于dat return dat; } void main (void) { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2 TMOD|= 0x20; //定时器1工作方式2 TH1 = 0xFD; //baud /* 波特率9600、数据位8、停止位1。效验位无 (11.0592M) TL1 = 0xFD; TR1 = 1; REN=1; while(1) { if(Receive() == 'W') P1=~P1; } }以上程序有一个缺点是,并没有使用串口中断,其实在在这个程序上,用不用中断处理程序对于单片机都是一样的,因为使用的是一样的开销。但是,我们在前
- 创意制作:LED汽车表情仪DIY制作(07-02)
- 多图详细教你怎样做一部Arduino小车(06-24)
- 超酷摩托车:您能相信这是学生制作的吗?(06-27)
- 国外天才学生DIY 19岁学生造可骑乘液压机器人(07-06)
- 超酷炫装备:国外牛人DIY超宽任天堂双摇杆N64游戏手柄(07-07)
- 工程师电子制作故事:1000米4路无线遥控窗帘(图文)(06-24)