手机版

DIY制作会呼吸的WIFI机器人

发布时间:2024-11-21   来源:未知    
字号:

DIY制作会呼吸的WIFI机器人

2012-08-22 14:35

错误!DIYer:

制作时间:

制作难度: sfwer 2天 ★★★

★☆

GEEK指数: ★★★

★☆

首先需要解释一下什么是“Shy ”:

“Shy ”是一个采用LINUX开源系统-Openwrt制作的WIFI机器人,它支持PC端,android端,web端的无线控制和无线视频传输,apple端的视频传输,甚至还可以当作你的电脑高清免驱动摄像头使用。

技术上来说,它大致分为三个部分,首先是加载Openwrt系统的Liunx平台,它连接摄像头,并通过WIFI接收控制命令。然后此平台通过串口连接单片机,再由单片机控制各种感应,驱动电路。你可以在手机上指挥它到处跑,然后拍下

想要的照片。

值得注意的是,openwrt系统是开源的,我们可以在PC机上编译自己的openwrt系统和自己的软件,另外单片机的扩展应用成千上万,因此这架机器人具有相当高的可玩性与非常广泛的应用。

错误!shy的原型来自于《star wars》中的R2D2。

错误!机器人的主题是“呼吸”,缓慢变化的蓝光使它们成为你卧室中最酷的装置。

错误!

错误!

错误!

双向电梯

首先要选择能够加载Openwrt平台的硬件设备,其实能加载LINUX系统的设备非常常见,比如我们家庭用的路由器。

这里要注意的是路由器的选择,首先,路由器要能够加载openwrt系统,其次,要具有USB口以及TTL接口。

错误!一般来讲,我们选择的型号是DB120或者RG100A-AA,我选择的型号是RG100A-AA。

错误!得到路由器后,首先要做的事是给路由器换个系统,即通俗所说的“刷机”,关于网络上RG100A-AA刷机的教程很多,这里不再赘述,不过需要补充的是,对于拥有单片机的爱好者,大可不必专门购买USB-TTL线,我们手中的单片机的开发板就可以为路由器与个人PC进行连接,下面给出

开发板与路由器TTL线的连线图,,路由器从左到右依次是:VCC ,GND ,TX ,RX,这里注意一定不要接VCC线。

错误!我的系统是Openwrt backfire 10.03.1 RC6

错误!测试单片机的开发板是否连接正确,可以通过PUTYY的串口连接方式进行连接,注意这里的波特率是:115200

COM口的选择要查看个人PC中的设备管理器,以连接的为准。

错误!刷完系统后,设置个人PC的网络IP:192.168.1.X,以及子网掩码255.255.255.0。这里的X是除1之外的任意,当然不能大于255

错误!然后连接个人PC与路由的LAN3口,用PUTYY进行SHH连接,输入用户名ROOT ,以及密码ADMIN ,设置以及连接正确后进入。

设置IP的目的是为了上传摄像头的驱动文件,我采用的摄像头是OV519芯片的SONY摄像头,因此驱动文件为:

kmod-video-gspca-ov519_2.6.32.27-1_brcm63xx.ipk

错误!运行winscp,将IPK包上传到根目录下,注意,这里要选择SCP方式。

错误!成功连接后。

winscp非常方便,拖拽文件即可,跟FTP方式完全一样。

错误!我的摄像头。

上传完毕后,运行PUTTY,进行安装,安装口令:opkg install xxx.ipk

安装完毕后可以用dmesg命令进行查看是否安装完成,或者直接在浏览器中输入192.168.1.1以图形化的方式进行查看。

安装完驱动后,安装MJPG-STREAMER,这是一个用于查看视频IPK程序,可以直接在浏览器中查看摄像头捕捉到的图像,注意安装完毕后要开启服务,或者也可以设置为自自动,这里不再赘述。

错误!这里我采用了网络上研究智能机器人的前人Liuviking的程序来捕捉MJPG-STREAMER的图像,运行此程序要先安装,DOTNET3.5,运行后成功便如图所示:

至此,摄像头的安装结束。

首先解释一下什么是ser2net.ipk软件包。

这是一个可以通过个人PC向路由的指定端口发送数据,然后路由原封不动的将数据发送到路由的TTL接口的程序。

当安装完这个程序后,我们就可以通过编制的程序向路由的TTL口发送串行数据,意义在于:单片机就可以接受路由发送的串行数据进行各种控制。

下面简略的讲解如何在openwrt下进行软件包ser2net.ipk的安装

有两种方法:

方法一是在路由已经联结上互联网的情况下,可以由网络进行安装。非常的方便,但我并未采用。

错误!方法二是利用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的串口连接部分设置完毕。

添加自启动项的目的是为了在SHY启动的时候能够自动启动更多的服务,配合UCI命令。

在/etc/init.d里添加需要启动的shell脚本,假设名字为my-plugin。接下来模仿该目录下其他启动脚本的格式,添加你的代码。

[cpp] view plaincopyprint?

1. #!/bin/sh /etc/http://mon

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

参考地址:

附:

/etc/rc.d/init.d和/etc/init.d 联系区别

地址:

我们选用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驱动电路

P3.7 用于PWM控制LED灯

P3.6/RST 用于复位电路

XTAL2

XTAL1 用于11.0592MHZ晶振

RXD

TXD 用于在线下载线路

错误!复位电路图

RST保持两个机器周期以上的高电平时自动复位

错误!晶振,复位电路,VCC,GND,连接好后

至此,STC11F02E最小系统完成。

接收串口数据的目的是为了与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; } }

以上程序有一个缺点是,并没有使用串口中断,其实在在这个程序上,用不用中断处理程序对于单片机都是一样的,因为使用的是一样的开销。但是,我们在前面提到过,完成Shy的一个目的是学习,所以我们要使用串口中断完成这个程序的编制 完成串口中断的编写,如下:

#include #include #define uchar unsigned char #define uint unsigned int void

DIY制作会呼吸的WIFI机器人.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)