项目名称

计算机控制小车走迷宫

项目目的 1、培养团结合作精神。

2、培养电子电路的设计和调试能力。

3、培养对微处理器的初步认识及使用。

4、学习了解图像处理的方法

项目内容

利用计算机处理采集到的图片判断小车及迷宫的相对位置,迷宫信息,通过指令控制小车动作,使之在最短时间内离开迷宫。

硬件材料

89S52单片机控制的小车、RS232有线收发模块、USB转RS232串口线、计算机、摄像头

完成情况

1、串口通信基本完成

2、通过摄像头捕捉迷宫内小车位置情况,传回计算机的控制软件,点选起始及终止位置并计算路径,给小车指令,能使小车按路线正确走出迷宫。

软件部分:

一、程序框架:

程序最开始初始化,依次初始化各变量,初始化摄像头,
程序主体以一个主循环实现,循环体内部依次执行如下操作:
1、获取图像,并进行透视变换
2、根据获取的图像,获取小车坐标,寻找最优路线,获取下一步的前进方向
3、根据第2步中的前进方向驱动小车前进
4、将1~3中的数据展现在屏幕上

二、具体算法:
1、定位:
程序初始化时由用户决定车头车尾的颜色,通过统计计算RGB值在一定范围内的像素点的坐标均值,并以此作为车头车尾的坐标
2、寻路:
首先通过二值化确定通路,由用户决定终点之后,通过BFS的算法计算出道路上每个点距离终点的距离,小车的前进方向就又小车附近一定范围的点中近距离终点最近的点的位置确定
3、寻路算法的优化:
将非道路的像素点设为可以行走的点,但计算距终点距离时加倍增加距离,这样来处理小车偶然走出跑道而无法自己走回的问题
4、关于行进:
为了避免小车过于频繁调整方向,算法只有当小车当前方向与最优值偏差超过30度才会驱动小车转向,而且将偏差调整至小于10度后会停止调整。
5、一些其他的细节:
a. 由于小车驱动轮是不能自由转动的,所以转向时通过一个轮子正转另一个轮子反转来实现。这样,就不会出现由于一个轮子不转动导致的小车转向困难。

b. 程序各个模块之间的通信通过全局变量实现,每个模块的主函数的第一个参数都将是指向一个包含全部全局变量的

结构体的指针。每个模块完成其自身的任务之后,将全局变量更新,通过这样的方式,每个模块融合在一起。

硬件部分整体介绍

(1) 由摄像头(建议使用USB接口)捕捉跑道的信息以及跑道内内小车的位置情况,通过串口线传送至电脑里编写的上位机软件,软件通过图像识别找出当前小车的位置信息及跑道的信息,经过计算,作出控制决策,生成控制信号,并经通讯模块发送至小车。

 
(2) 小车上的控制电路对控制信号作出相应反应,驱动电机,并在执行完后告知电脑

硬件部分详细介绍

(1)小车:

(b) 单片机芯片:

STC11L02单片机芯片,其中: 

  • · 兼容MCS-51指令系统 
    · 8k可反复擦写(>1000次)ISP FLASH ROM 
    · 1000次擦写周期 
    · 32个双向I/O口 
    · 4.5-5.5V工作电压 
    · 3个16位可编程定时/计数器 
    · 时钟频率0-33MHz 
    · 全双工UART串行中断口 
    · 128x8bit内部RAM 
    · 低功耗空闲和省电模式 
    · 中断唤醒省电模式 
    · 3级加密位 
    · 看门狗(WDT)电路 
    · 软件设置空闲和省电功能 
    · 灵活的ISP字节和分页编程 

(c) 通讯线:

我们用USB转RS232线实现电脑与微机之间的通信。线该线将相当于增加电脑一个COM口,对于电脑与小车进行串行通信来说该线是透明的。其USB端接电脑,TxD接无线发送模块的数据端,Vcc与发送模块Vcc相连,GND与发送模块GND连接。


(d) 电脑及摄像头:

电脑须有两个以上USB口,摄像头为普通USB摄像头。

(e)系统电路图

(f)其他

 表2 其他需要添加的元器件名称


Item

Designator

Description

Comment

1

C3,C5,C7

贴片胆电容,竖线为正端

10uF

2

C4,C6,C8

贴片电容,无极性

0.1uF

3

D1

3.3v电源指示灯,与R6配套使用,按照箭头方向为从正到负

发光二极管

4

J1,J2

接左右电机控制线

XH-2.54底座 4pin

5

J3

5v电源接入

XH-2.54底座 3pin

6

J4

编程器接入,有线通信接口

XH-2.54底座 5pin

7

JP1,JP2

通信选择

3pin单排针

8

R5

电阻

1K

9

R6

电阻

220

10

S1

开关

自锁开关7*7

11

U1

AMS1117-3.3电源

电源芯片

 

负责:程序框架、图像识别

心得:
选择了科创2B,就选择了2B之路。。。
写代码烦,debug烦,科创2B真心是各种麻烦,组里每个人都遇到各种麻烦的事情- -~ 代码要写,单片机也得写,连报告都要做个网页出来T_T。。。所有做科创2B的孩纸上辈子都是折翼的天使。。。T_T
不过收获还是很多的,嗯~第一次写这么多行代码,第一次接触图像处理,第一次真正自己控制单片机,一切都是未曾接触过的。课程越烦,学到的也越多~嗯~
嘛,这课对团队合作的锻炼也是各种有,最开始的接口的设计绝对是必须的,这样才能让多个人的代码都能够整合到一起,嗯~ 第一次真正的在一个团队写代码~
嗯~话说,大三的时候还得选科创3吧?= =~ 冷汗直流啊- -~

 

 

负责:小车控制,单片机代码

科创2b在我们小组的共同努力下圆满地完成了,而且第一个完成了实验验收。(虽说有点误打误撞的感觉,笑~)回顾我们的整个科创过程,付出了很多汗水,也得到了很大的收获。
在科创的最开始,可以说对整个课程要干什么完全一头雾水,什么opencv,单片机,串口通信,完全都不知道是什么。入门的这个过程对于我来说感觉是最难的,连查资料都找不到方向。不过在助教和组员的帮助下,我对于整个课程有了初步的了解,在入门之后,就是查各种各样资料,学习各种需要的东西,这一段过程虽然很艰苦,但是感觉到自己是实实在在学到了东西。我主要是负责的是单片机和串口通信这一部分,是整个课程的基础,所以基本上是最早就完成了,然后剩下的就是和组员一起不停地调试小车,在有需要地时候在进行修改。调试的过程是最令人揪心的,看着小车本来走的好好的,满心期待这次能够成功,结果突然又跑出跑道了,只有进一步调试修改,像这种事情重复了不知多少遍。所以最后验收的过程,虽然只有短短十几秒,但是我知道这短短的十几秒里面包含了我们多少的努力与汗水。
这次科创收获得不仅仅是知识与技能,也让我懂得了团队合作的力量以及在团队合作时明确分工的重要性。
在此,我要感谢这次科创一起奋斗的组员刘穆青和支叶盛,是大家的努力让这次的科创最终能获得成功。

 

 

负责:小车调试,报告撰写,小车装饰

当初在选择做科创IIA还是科创IIB的时候,曾经犹豫过。后来想想,选点有挑战性的吧,对自己狠一点,于是就选了科创IIB。当接到科创三的任务的时候,我是一头雾水,但是通过到网上搜寻资料,向同学和学长请教,图书馆借书自学和小组成员的讨论,渐渐找到了前进的方向。 

分配任务后,我的主要负责小车调试和网页制作。这其实科创本身不难,难的是我们要花很多时间学习很多以前从来没学过的东西然后还要加以应用。其网页制作花的时间则比较多。一来许多图片需要经过PS处理,二来还要考虑网页整体的布局结构。总之这一次让我学会了很多关于PS和DW的用法。通过这次科创,我学会了很多课堂上学不到的东西,也明白了对我们大学生来说最重要的能力是自学,学习上课所学不到的知识。光自学还不够,我们并不是孤立的个人,还需要依靠团队的力量,大家在一起才能把不可能化为可能。如果没有如果没有大家的合作,我想我们也不会这么顺利通过检测。 总之,这次科创让我收获良多。最后,我想衷心感谢我们的指导老师和助教老师们以及我们这个可爱的小组,谢谢他们所有人的努力和所做的一切。

 

实验报告下载 实验报告

OPENCV框架下载 OPENCV框架

单片机代码下载 单片机代码