智能小车单片机课程设计报告

合集下载

单片机小汽车课程设计

单片机小汽车课程设计

单片机小汽车课程设计一、课程目标知识目标:1. 让学生了解单片机的基本原理,掌握其编程方法;2. 使学生掌握单片机控制小汽车的基本电路连接和功能实现;3. 帮助学生理解传感器在小汽车控制中的应用。

技能目标:1. 培养学生运用单片机进行创新设计的能力;2. 提高学生动手实践能力,能够独立完成小汽车控制电路的搭建和程序编写;3. 培养学生团队协作解决问题的能力。

情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养其探究精神;2. 培养学生面对问题时的耐心、细心和毅力,增强克服困难的信心;3. 引导学生关注科技发展,认识单片机在现实生活中的应用,提高社会责任感。

课程性质:本课程为实践性较强的课程,结合单片机原理和电子制作技术,以项目式教学引导学生动手实践。

学生特点:学生具备一定的电子基础知识,对单片机有一定了解,喜欢动手实践,对创新设计具有较高兴趣。

教学要求:教师需结合学生特点,采用启发式教学,引导学生主动探索,注重培养学生的动手实践能力和团队协作精神。

在教学过程中,关注学生个体差异,给予个性化指导,确保每位学生都能达到课程目标。

通过课程学习,使学生能够将所学知识应用于实际项目中,提高其综合素养。

二、教学内容1. 单片机原理及编程基础:复习单片机的基本结构、工作原理,学习编程语言及编程技巧,对应教材第1章至第3章内容。

- 单片机的基本结构及功能;- 编程语言(C语言)基础;- 单片机程序编写及调试方法。

2. 小汽车控制电路设计:学习传感器、驱动电路及电源管理等部分的设计与实现,对应教材第4章内容。

- 常用传感器原理及应用;- 驱动电路设计;- 电源管理及保护电路设计。

3. 实践操作:动手搭建小汽车控制电路,编写程序实现小汽车的基本功能,如前进、后退、转向等,对应教材第5章内容。

- 电路搭建及调试;- 程序编写及优化;- 小汽车功能实现。

4. 项目拓展:引导学生进行创新设计,对小汽车功能进行拓展,如添加避障、循迹等功能,提高学生综合运用知识的能力。

基于单片机智能遥控小车的设计

基于单片机智能遥控小车的设计

基于单片机智能遥控小车的设计引言:一、硬件设计:智能遥控小车的硬件设计包括机械结构和电子模块两个方面。

1.机械结构设计:机械结构设计为小车提供了良好的稳定性和移动能力。

首先,选取适合的底盘结构,确保小车的稳固性和均衡性。

其次,选择合适的电机和轮子,以实现小车的前进、后退和转向功能。

最后,在机械结构中添加传感器支架和摄像头支架,方便后续的传感器和摄像头模块的安装。

2.电子模块设计:电子模块设计包括主控模块、通信模块和电源模块三个部分。

(1)主控模块:主控模块是整个智能遥控小车的核心,它负责接收遥控命令、控制电机的转动并实时处理传感器数据。

选择一款性能较强的单片机作为主控芯片,如STM32系列,以满足小车处理复杂任务的需求。

(2)通信模块:(3)电源模块:电源模块为智能遥控小车提供稳定的电源,要保证小车的正常工作需要满足一定的电流和电压要求。

选取合适的锂电池组或者干电池组作为电源,通过适当的电压调节和保护电路,保证电源的稳定性和安全性。

二、软件设计:智能遥控小车的软件设计包括底层驱动程序的编写和上层应用程序的开发。

1.底层驱动程序:底层驱动程序主要用于控制电机和监测传感器数据。

通过编写合适的电机驱动程序,实现小车的前进、后退和转向功能。

同时,编写传感器驱动程序获取传感器的数据,如超声波测距、红外线检测和摄像头采集等,为上层应用程序提供数据支持。

2.上层应用程序:三、功能拓展:智能遥控小车的功能可以通过添加各种传感器和模块进行拓展,如以下几个功能:1.环境检测功能:通过添加温湿度传感器、二氧化碳传感器等,实时监测环境数据,可以应用于室内空气质量、温湿度调节等应用。

2.避障功能:通过添加超声波传感器、红外线传感器等,在小车前方进行信号检测,实现小车的避障功能。

3.图像识别功能:通过添加摄像头模块,对图像进行处理和分析,实现小车的图像识别功能,如人脸识别、物体识别等。

结论:基于单片机的智能遥控小车设计通过合理的硬件结构和软件设计,实现了远程遥控和实时传输数据的功能。

遥控智能小车单片机课设

遥控智能小车单片机课设

课程设计任务书摘要为了达到设计的要求,我们使用了MSP430F149为车上主控制芯片,STC12C5A为遥控控制芯片。

无线传输使用了315M无线传输模块,该模块采用了PT2262/PT2272进行编解码,拥有6位数据端管脚;遥控采用了摇杆电位器,将电位器滑动端的电压与参考电压比较,得到摇杆的位置,通过单片机编码,传输给小车上的单片机,小车上的单片机通过解码来控制小车的行驶及各种动作;电机驱动使用了L298N,通过单片机输出的PWM波来控制小车行驶的速度、小车行驶的方向;小车系统使用12V可充电锂电池进行供电,遥控使用9V 的碳性电池进行供电,传输距离可达50m,抗干扰能力强,系统可靠稳定。

目录1、方案设计与论证 (5)1.1系统方案 (5)1.2方案论证 (5)2、原理分析与硬件电路图 (8)2.1电源转换部分 (8)2.2电机驱动部分 (8)2.3无线通信部分 (9)2.4遥控部分 (11)3、软件设计 (12)4、系统测试与误差分析 (13)5、参考文献 (14)6、附件 (14)1、方案设计与论证1.2方案论证1)MCU选择方案一控制部分的核心采用传统的数字逻辑芯片来实现。

系统共有启动、加速前进、后退、限速前进及后退等几个状态。

且各个状态保持或转移的条件依赖与外部传感器(光传感器、霍尔传感器、超声传感器……)送来的信号。

由于外部传感器器较多,需要较多的传感器接口电路。

系统的逻辑状态以及相互更是复杂,用纯粹的数字电路或者小规模的可编程逻辑电路实现该系统有一定的困难,且一般的可编程逻辑器件体积较其他的单片机都较大,且成本较高。

方案二该小车可看成一个自动控制系统,这样的系统用单片机来实现比较合适。

MSP430为超低功耗的单片机,对与整个系统的长时间运行十分有利;同时MSPS430的I\O丰富可以进行很多的扩展,同时它可以输出PWM波,对于电机的控制极其方便。

显然方案二具有较好的可选择性,实际系统采用的MSPS30为主控制器。

基于单片机的智能小车设计

基于单片机的智能小车设计

基于单片机的智能小车设计基于单片机的智能小车设计一、引言本文档旨在介绍一个基于单片机的智能小车设计。

智能小车是一种能够自主感知环境、做出决策并执行动作的。

本设计将通过单片机控制小车的移动与感知功能,使其能够自主避障、跟随线路、遥控操作等。

二、需求分析2.1 功能需求●小车应能够通过避障传感器、红外线传感器等感知器件检测周围环境,自主避开障碍物。

●小车应能够根据预设的线路进行自主导航,并能跟随或保持在线路上运行。

●小车应支持遥控操作,用户可以通过遥控器控制小车的运动。

●小车应能够通过摄像头等视觉传感器获取实时图像并进行图像处理。

2.2 硬件需求●单片机控制模块。

●电机驱动模块。

●避障传感器模块。

●红外线传感器模块。

●摄像头模块。

●遥控器模块。

2.3 软件需求●单片机控制程序。

●图像处理算法。

●遥控器控制程序。

三、系统设计3.1 硬件设计3.1.1 单片机控制模块●选择合适的单片机控制模块,如Arduino、Raspberry Pi等。

●连接电机驱动模块、避障传感器模块、红外线传感器模块、摄像头模块等。

3.1.2 电机驱动模块●选择适合的电机驱动模块,如直流电机驱动器、步进电机驱动器等。

●连接电机驱动器与电机,控制小车的运动。

3.1.3 避障传感器模块●选择合适的避障传感器模块,如超声波传感器、红外线传感器等。

●连接避障传感器与单片机,实现避障功能。

3.1.4 红外线传感器模块●选择合适的红外线传感器模块,用于检测线路。

●连接红外线传感器与单片机,实现跟随线路功能。

3.1.5 摄像头模块●选择合适的摄像头模块,如USB摄像头、树莓派摄像头等。

●连接摄像头与单片机,获取实时图像。

3.1.6 遥控器模块●选择合适的遥控器模块,如无线遥控器等。

●连接遥控器与单片机,实现遥控操作功能。

3.2 软件设计3.2.1 单片机控制程序●编写控制程序,根据传感器的信号进行相应的处理,并控制电机驱动模块控制小车的运动。

智能小车单片机课程设计报告

智能小车单片机课程设计报告

单片机课程设计题目: 智能小车设计专业: 计算机科学与技术班级: 14级2班姓名学号组长成员成员成员成员2016 年 12 月 23 日打开命令行终端的快捷方式:ctr+al+t:默认的路径在家目录ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$linux:当前登录用户名.ubuntu:主机名:和$之间:当前用户所处在的工作路径.windows下的工作路径如C:\Intel\Logslinux下的工作路径是:/.../..../~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径..:上一级路径ls -l:以横排的方式列出文件的详细信息total 269464(当前这个路径总计所占空间的大小,单位是K)drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop第一个位置:代表的是文件的类型.linux系统下的文件类型有以下几种.b:块设备文件c:字符设备文件d:directory,目录-:普通文件.l:连接文件.s:套接字文件.p:管道文件.rwxr-xr-x:权限r:读权限 -:没有相对应的权限w:写权限x:可执行权限修改权限:chmod u-或者+r/w/x 文件名chmod g-或者+r/w/x 文件名chmod o-或者+r/w/x 文件名第一组:用户权限第二组:用户组的权限第三组:其他用户的权限.chmod 三个数(权限) 文件名首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数rwxr-x-wx1111010117 5 3chmod 753 文件名rwx--xr-x第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者).第四个位置:用户组的名字(前边的用户所处在的用户组的名字).第五个位置:对应文件所占的空间大小(单位为b)第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间)最后一个位置:文件名操作文件:1.创建一个普通文件:touch 文件名2.删除一个文件:rm(remove) 文件名3.新建一个目录:mkdir(make directory) 目录名递归创建目录:mkdir -p 目录1/目录2/目录34.删除一个目录:rmdir 目录名.//仅删除一个空目录rm -rf 目录名//删除一个非空目录5.切换目录(change directory):cd 路径linux下的路径分两种相对路径:以.(当前路径)为起点.绝对路径:以/(根目录)为起点,用相对路径的方式进入Music:cd ./Music用绝对路径的方式进入Desktop:cd /home/linux/Desktop返回上一级:cd ..返回加家目录的三种方式(1).cd(2).cd ~(3).cd /home/linux进入到1目录里并创建一个2普通文件,再退回上一级,并且删除1目录6.拷贝文件.cp(copy) 路径1/源文件路径2:把路径1下的文件拷贝到路径2下cp 路径1/源文件路径2/目标文件:把路径1下的文件拷贝到路径2下并且重命名位目标文件.cp(copy) -r 路径1/目录名路径2:把路径1下的目录拷贝到路径2下7.剪切文件mv(move) 路径1/源文件路径2:把路径1下的文件剪切到路径2下mv 路径1/源文件路径2/目标文件:把路径1下的文件剪切到路径2下并且重命名位目标文件mv 源文件目标文件:重命名文件mv 路径1/目录名路径2:把路径1下的目录剪切到路径2下8.clear:清屏9.exit 退出终端vi编辑器.vi 文件名:如果文件不存在则创建并打开如果文件已存在,则直接打开VI编辑器的三种模式1.命令行模式:刚进入编辑器的时候,默认处在这种模式下2.编辑模式(插入模式):输入a/i/o即可进入,按下esc键退回命令行模式,再输入冒号,即可进入底行模式.3.底行模式下:w(保存),q(退出),wq(保存并退出),q!(强制退出不保存)按下退格键,删除冒号,即可进入命令行模式.终极保存法;w! sudo tee %d回车再回车即可命令行模式下的快捷操作:1.整行复制:光标移动想要复制的那一行,输入yy即可,再把光标移动到你想要粘贴位置的上一行,输入p即可2.多行复制:光标移动想要复制的那几行的第一行,输入数字yy即可,再把光标移动到想要粘贴的那几行的第一行,输入p即可,3.整行删除:光标移动想要删除的那一行,输入dd即可,4.多行删除:光标移动想要删除的那几行的第一行,输入数字dd即可,5.整行剪切:光标移动想要剪切的那一行,输入cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可,6.多行剪切:光标移动想要剪切的那几行的第一行,输入数字cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可.7.撤销上一步:u底行模式下的快捷操作1,对第a行到第b行进行复制:航标a,行标by,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可2,对第a行到第b行进行删除:航标a,行标bd,enter回车3.对第a行到第b行进行剪切:航标a,行标bd,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可编辑一个最简单的hello world程序,保存并退出gcc编译器.gcc 文件名:编译成功的话,会在当前目录生成一个a.out可执行程序执行程序: ./a.out当然也可以指定可执行程序的名字,命令如下:gcc 文件名 -o 可执行程序名编译步骤:1.预处理:gcc -i test.c -o test.i(宏定义的替换,头文件包含)2.汇编:gcc -s test.i -o test.s(c代码转换成汇编代码)3.编译:gcc -c test.s -o test.o(把汇编转换成二进制的目标程序)5.连接:gcc test.o -o test(连接库函数)linux系统的库文件:静态库:.a结尾动态库:.so结尾自己制作一个动态库.首先写一个简单的c功能函数编译成动态库:gcc -fPIC -shared 文件名 -o lib库文件名.so在linux系统下.程序运行时默认搜素库的路径是/lib把库拷贝到/lib下:cp lib库文件名.so /lib 错误提示":permission denied(权限不足)方法:sudo cp lib库文件名.so /lib 提示让你输入密码1:sudo暂时将普通用户的权限提高到root用户权限再编译一个c应用程序,在程序中来调用库里实现的函数gcc 应用程序名 -l库名(注意是去掉lib和.so的库名)文件IOlinux系统下一切设备皆文件操作文件:open():打开一个文件read()://从文件里边读出数据write()//向文件里写入数据close()//关闭文件man手册:man 2 函数名open:头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开返回值:打开成功:返回一个正数(文件描述符)打开失败:-12.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开如果文件不存在必须|O_CRAET,创建该文件参数3:权限数比如:0666返回值:打开成功:返回一个正数(文件描述符)打开失败:-1write:头文件: #include <unistd.h>typedef int ssize_tssize_t write(int fd, const void *buf, size_t count); 参数1:就是open函数的返回值,文件描述符参数2:你想要写入的数据参数3:你想要写入的数据的字节大小返回值:写入成功:返回的是写入的字节大小写入失败:-1strlen:实际长度sizeof:数组的大小arduinoviod setup(){端口的配置;}void loop(){任务的执行;}arduino之呼吸灯实验:int led=13;void setup(){pinMode(led,OUTPUT);}void loop(){digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);}渐变灯:暗->亮->暗PWM波:可调脉冲宽度波.3,5,6,9,10,11这几个端口可以输出pwm波analogWrite(pin, value)//输出pwm波pin:管脚号:3,5,6,9,10,11中的任意一个value:0~255中的任何一个数:0:占空比为0%255:占空比位100%远程视频监控步骤:1.将jpegsrc.v8b.tar.gz(图片库)和mjpg-streamer-code-182.tar.gz(视频查看软件)拷贝到ubuntu的家目录2.解压缩tar xvf jpegsrc.v8b.tar.gz3. cd jpeg-8b4. ./configure //创建Makefile文件5. make6. sudo make install //安装程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/libcd /usr/local/includesudo cp * /usr/includecd /usr/local/libsudo cp libjpeg* /lib7.切换到家目录:cd移植查看视频的软件:tar xvf mjpg-streamer-code-182.tar.gzcd mjpg-streamer-code-182cd mjpg-streamermake clean //清除已经编译过的程序make运行查看视频的软件:sudo ./start.sh打开火狐浏览器在地址栏输入127.0.0.1:8080若发现视频绿屏先强制结束程序运行:ctl+c.解决方法:修改start.sh将第30行的 -y 删除看看是否虚拟机识别到摄像头:ls /dev/video0地址栏输入:127.0.0.1:8080/?action=stream 查看视频信息 127.0.0.1:8080/?action=snapshot 截屏图片,点击save image as可以保存图片A8开发板:cpu:三星s5pc100内存:256Mflash:256Mwindows运行之前会有一个系统的引导代码叫BIOS与windows类似,linux启动之前也有这样的一段代码叫做bootloader bootloader有很多种,我们选用其中的一种叫做uboot.linux系统的启动步骤1.运行uboot(初始化硬件,引导系统内核的加载)2.内核的运行(zImage,linux的内核).3.识别文件系统(类似于C盘,D盘,E盘).是rootfs.tgz系统=内核+文件系统.挂载系统.要对uboot环境信息进行设置首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.4.输入命令print可以显示uboot的打印信息确保:ipaddr=192.168.1.100//代表开发板的ip地址serverip=192.168.1.200//代表ubuntu的IP地址bootargs=root=nfs nfsroot=192.168.1.200:/source/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200//打开虚拟机:1.进入到/tftpboot目录下.把zImage拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现zImage2.cd /source把rootfs这个压缩包拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现rootfs.tgz3.解压命令:sudo tar -xvf rootfs.tgz要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway192.168.1.200 255.255.255.0 192.168.1.1点击保存.关闭窗口.再打开图标选中wired connection1 再看ip是否改回来了.5.网线连接开发板和电脑在putty界面输入:ping 192.168.1.200如果host 192.168.1.200 is alive,这是挂载系统很好的征兆.not alive的话需要关闭电脑的无线网输入boot或者重启开发板不要再按下任何键了,如果出现##################很快就要挂载成功了如果出现TTTTTTTTTTTTTT在ubuntu输入命令:sudo service tftpd-hpa restart其中sudo的作用是暂时将用户的权限提升到超级用户(root)的权限.如果出现Please press Enter to activate this console.代表系统挂载成功.通过gcc编译生成的程序不能在开发板上运行.通过命令file a.out看到文件的格式为intel 30386,说明这是X86格式的程序,只能PC上运行而不能在arm板上运行,解决措施,使用交叉编译器来编译.交叉编译器的配置:将arm-cortex_a8-linux-gnueabi.tar.bz2拖到ubuntu的家目录解压命令tar -xvf arm-cor+tab键自动补齐,用ls查看是否生成arm-cortex_a8个目录.配置交叉编译器:sudo vi /etc/bash.bashrc文件在最后一行添加export PATH=$PATH:/home/linux/arm-cortex_a8/bin保存并退出文件保存完成后重启文件:source /etc/bash.bashrc重启成功后输入arm-cor+tab键会自动补齐成arm-cortex_a8-linux-gnueabi-代表交叉编译器配置成功.利用交叉编译器编译程序:arm-cortex_a8-linux-gnueabi-gcc 文件名,并将生成的可执行程序拷贝到/source/rootfs下然后再到putty上执行./a.out就可以在开发板上运行程序了.相关代码Che.c#include "cgic.h"#include <termios.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>void zigbee_serial_init(int fd){struct termios options;tcgetattr(fd, &options);options.c_cflag |= (CLOCAL | CREAD);options.c_cflag &= ~CSIZE;options.c_cflag &= ~CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= ~CSTOPB;options.c_iflag |= IGNPAR;options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);//options.c_cc[VTIME] = 2;options.c_cc[VMIN] = 12;options.c_oflag = 0;options.c_lflag = 0;cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);tcsetattr(fd,TCSANOW,&options);int cgiMain(){int fd;char a='1';cgiHeaderContentType("text/html\n\n");fprintf(cgiOut,"<html>\n");fprintf(cgiOut,"<head>\n");fprintf(cgiOut,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");fprintf(cgiOut,"<title>\n");fprintf(cgiOut,"SMART CAR\n");fprintf(cgiOut,"</title>\n");fprintf(cgiOut,"<meta http-equiv=\"refresh\" content=\"0;url=../index.html\">");fprintf(cgiOut,"</head>\n");fprintf(cgiOut,"<body>\n");fprintf(cgiOut,"<div align=\"center\">\n");fprintf(cgiOut,"<br /><br /><br /><br />\n");fprintf(cgiOut,"<form action=\"./cgi-bin/keyi.cgi\" method=\"post\" >\n");fprintf(cgiOut,"<input type=\"submit\" name=\"up\" value=\"前进\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"left\" value=\"左转\" />\n");fprintf(cgiOut,"&nbsp;&nbsp;&nbsp;&nbsp;\n");fprintf(cgiOut,"<input type=\"submit\" name=\"stop\" value=\"停止\" />");fprintf(cgiOut,"&nbsp;&nbsp;&nbsp;&nbsp;\n");fprintf(cgiOut,"<input type=\"submit\" name=\"right\" value=\"右转\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"down\" value=\"后退\" />\n");fprintf(cgiOut,"</form>\n");fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd)zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked("up")){a='2';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("down")) {a='1';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("right")) {a='4';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("left")) {a='3';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("stop")) {a='0';write(fd,&a,1);}fprintf(cgiOut,"</body>\n");fprintf(cgiOut,"</html>\n");close(fd);return 0;}Test.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, const char *argv[]) {int fd;char buff[20]={0};fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd){printf("open failed\n");return -1;}while(1){read(fd,buff,sizeof(buff));}return 0;}单片机代码void setup(){pinMode(2,OUTPUT);pinMode(4,OUTPUT);pinMode(6,OUTPUT);pinMode(8,OUTPUT);Serial.begin(115200);}void loop()char c;c=Serial.read();if(c=='1'){digitalWrite(2,LOW);digitalWrite(4,HIGH);digitalWrite(6,LOW );digitalWrite(8,HIGH); Serial.println("qianjin"); }if(c=='2'){digitalWrite(2,HIGH);digitalWrite(4,LOW);digitalWrite(6,HIGH);digitalWrite(8,LOW); Serial.println("daotui"); }if(c=='3'){digitalWrite(2,LOW);digitalWrite(4,HIGH);digitalWrite(6,LOW);digitalWrite(8,LOW); Serial.println("youzuan"); }if(c=='4'){digitalWrite(2,LOW);digitalWrite(4,LOW);digitalWrite(6,LOW);digitalWrite(8,HIGH); Serial.println("zuozuan"); }if(c=='0'){digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("0"); }}。

单片机智能小车课程设计

单片机智能小车课程设计

单片机智能小车课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其在智能小车控制中的应用。

2. 学习并掌握智能小车的基本电路连接和编程方法,能够实现小车的基本运动控制。

3. 了解传感器的工作原理,学会使用传感器对智能小车进行环境感知和路径规划。

技能目标:1. 培养学生动手操作能力,能够独立完成智能小车的组装和调试。

2. 培养学生编程思维,能够运用所学知识解决实际问题,实现智能小车的功能拓展。

3. 提高学生团队协作能力,学会在项目中进行沟通与分工合作。

情感态度价值观目标:1. 培养学生对单片机及智能硬件的兴趣,激发创新意识,提高学习积极性。

2. 培养学生勇于尝试、克服困难的精神,增强自信心。

3. 培养学生关注社会热点问题,了解智能技术在现实生活中的应用,提高社会责任感。

本课程针对初中年级学生,结合单片机及智能小车相关知识,注重实践操作和创新能力培养。

在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。

课程目标分解为具体学习成果,便于后续教学设计和评估,以提高课程的实用性和针对性。

二、教学内容1. 单片机原理:介绍单片机的组成、工作原理,重点讲解内部寄存器、I/O 口、定时器等基本功能。

相关教材章节:第三章单片机原理及其应用。

2. 智能小车电路连接:讲解智能小车的基本电路组成,包括电机驱动、电源管理、传感器接口等。

相关教材章节:第四章智能小车电路设计与实践。

3. 编程基础:学习单片机编程语言(如C语言),掌握基本编程语法和逻辑控制,实现小车运动控制。

相关教材章节:第五章单片机编程基础。

4. 传感器应用:介绍常用传感器(如红外、超声波、光电等)的工作原理,学会使用传感器进行环境感知和路径规划。

相关教材章节:第六章传感器及其应用。

5. 智能小车组装与调试:指导学生进行智能小车的组装,学会使用调试工具,如示波器、逻辑分析仪等。

相关教材章节:第七章智能小车组装与调试。

6. 创新实践:鼓励学生进行功能拓展,如增加避障、循迹、远程控制等功能。

基于单片机的智能玩具小车的设计

基于单片机的智能玩具小车的设计

基于单片机的智能玩具小车的设计基于单片机的智能玩具小车的设计1. 引言随着科技的进步和人们对智能化产品的需求增加,智能玩具小车成为了孩子们喜爱的玩具之一。

本文介绍了一种基于单片机的智能玩具小车的设计方案,旨在提供给孩子们一种有趣且具有教育意义的玩具。

2. 系统组成该智能玩具小车由四个主要组成部分构成:单片机控制模块、传感器模块、执行模块和通信模块。

2.1 单片机控制模块单片机控制模块采用高性能的单片机芯片,如STC89C52,作为主控制器。

该芯片具有丰富的IO接口和强大的计算能力,能够准确控制玩具小车的各个功能。

2.2 传感器模块传感器模块采用多种传感器,如红外感应传感器、超声波传感器和灰度传感器等。

红外感应传感器用于检测前方障碍物,超声波传感器用于测量距离,灰度传感器用于检测地面颜色等。

2.3 执行模块执行模块包括直流电机和舵机等。

直流电机用于驱动车轮,控制小车前进、后退和转向;舵机用于控制小车的转向角度。

2.4 通信模块通信模块采用无线通信模块,如蓝牙模块或WIFI模块,用于与智能手机或电脑等设备进行通信。

通过手机上的APP或电脑上的软件,用户可以实现对智能玩具小车的远程控制和交互。

3. 系统功能设计3.1 遥控功能智能玩具小车可以通过手机APP或电脑软件进行远程遥控。

用户可以通过手指在屏幕上滑动或按钮操作来控制小车的方向和速度。

3.2 避障功能利用红外感应传感器和超声波传感器,智能玩具小车可以实现自动避障功能。

当传感器探测到前方有障碍物时,小车会自动停下或转向避开。

3.3 跟随功能通过将传感器模块安装在小车底部,可以实现小车对地面颜色的感知。

小车可以自动跟随一条黑线或白线行驶,增加趣味性和游戏性。

3.4 音乐播放功能智能玩具小车可以配备一个音乐模块,能够播放各种儿童歌曲和故事,使玩车过程更加有趣和生动。

4. 系统实现在搭建智能玩具小车的硬件平台后,需要进行相应的软件开发。

通过编写相应的程序,定义不同的传感器输入信号和执行器控制信号,实现小车的各项功能。

基于单片机的智能小车的设计

基于单片机的智能小车的设计

基于单片机的智能小车的设计智能小车在当今社会中得到越来越广泛的应用,它不仅可以为人们的生活带来方便,还能在工业生产和科研领域发挥关键作用。

而基于单片机的智能小车设计是其中的一个重要方面,它通过利用单片机的高度集成和强大功能,实现智能小车的自主控制和感知任务。

本文将深入探讨基于单片机的智能小车设计的关键技术和发展趋势,为读者提供一些有益的参考和启发。

智能小车的设计中,传感器是至关重要的一环。

而对于基于单片机的智能小车来说,选择合适的传感器和设计有效的传感器数据采集方案显得尤为重要。

在传感器选择方面,常用的传感器有红外传感器、超声波传感器、光电传感器等,它们可以实现对障碍物的检测和环境信息的感知。

在传感器数据采集方案设计上,需要考虑到传感器数据的采集频率、传感器数据的处理方式以及传感器数据与单片机的接口方式等。

通过合理设计传感器的选择和数据采集方案,可以有效提高智能小车的感知能力和控制精度。

除了传感器外,基于单片机的智能小车设计还需要考虑到智能控制算法的设计。

智能控制算法是实现智能小车自主行驶和避障的核心,它可以通过对传感器数据的处理和分析,实现对小车行驶方向和速度的实时控制。

常用的智能控制算法包括PID算法、模糊控制算法和神经网络控制算法等,它们分别适用于不同的应用场景和控制需求。

在智能控制算法的选择和设计中,需要考虑到算法的实时性、稳定性和可调节性,以实现对智能小车的精确控制和智能决策。

在设计基于单片机的智能小车时,硬件设计也是一个不可忽视的方面。

合理的硬件设计可以有效提高智能小车的性能和稳定性,为控制算法的实现提供良好的硬件支持。

常用的硬件设计包括电机驱动电路设计、电源管理电路设计和通信接口电路设计等。

其中,电机驱动电路设计是最为关键的一环,它可以实现对小车电机的精确控制和驱动,保证小车的行驶稳定性和速度调节精度。

电源管理电路设计则是保证小车电路的稳定供电和功耗管理,避免因电路供电不稳定导致小车控制系统工作异常。

单片机的智能小车设计

单片机的智能小车设计

单片机的智能小车设计
单片机的智能小车设计是将单片机应用于智能小车的研发。

它的主要目的是让智能小车可以智能地运动,例如自动导航,路径规划和跟随功能等。

为了使智能小车具有智能行走的能力,需要将单片机应用于智能小车设计。

单片机作为一种嵌入式多功能控制器,具有体积小、速度快、功耗低和可靠性高等特点,它可以正确地执行指定程序,从而控制智能小车的运动。

使用单片机来控制智能小车,我们必须安装有电机驱动控制子系统、传感器子系统以及单片机的CPU子系统。

这三个子系
统之间非常重要,并能够协同工作。

电机驱动子系统包括驱动电机,用来控制智能小车的前进后退运动;传感器子系统主要用于检测外界环境信息,以便对智能小车的运动做出反应;CPU子系统能根据由传感器子系统检
测到的外界环境信息,结合人工写好的控制程序,实时给出正确的控制信号,以实现智能小车的自动行走。

此外,智能小车还可以安装有相关的软件,例如避障软件,路径规划软件,声控软件等。

这些软件能够根据实际情况为智能小车提供正确的智能指导,以便使智能小车更加智能地行走。

通过以上这些子系统的配合,单片机智能小车就可以实现自动识别路径、避障、跟随等功能,从而达到智能行走的目的。

可以说,单片机智能小车设计已经大大提高了智能小车的功能性、
实用性以及可靠性,它不仅提高了智能小车的功能,而且简化了智能小车的控制方式,同时也降低了设计成本。

(完整版)智能小车课程设计报告书

(完整版)智能小车课程设计报告书

课程设计报告书课题名称智能小车蓝牙操控和循迹的实现 姓 名 学 号 学 院 专 业 指导教师2019年2月15日※※※※※※※※※※※ ※※ ※※ ※※※※※※※※※2015级学生课程设计材料1设计目的通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。

进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。

2功能要求智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动运作,不需要人为的管理,可应用于科学勘探等等用途;并且能实现显示时间、速度、里程,具有自动寻迹、寻光、避障等功能,可程控行驶速度、准确定位停车,远程传输图像、按键控制加速,减速,刹停,左转和右转、实时显示运行状态等功能。

3 总体设计方案在现有玩具电动车的基础上,加了四个按键,实现对电动车的运行轨迹的启动,并将按键的状态传送至单片机进行处理,然后由单片机根据所检测的各种按键状态实现对电动车的智能控制。

这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。

本设计采用AT89C51单片机。

以AT89C51为控制核心,利用按键的动作,控制电动小汽车的状态。

加装光电、红外线、超声波传感器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动小车的智能控制,如图1所示。

简易智能电动车采用AT89C51单片机进行智能控制。

开始由手动启动小车,并复位初始化,当到达规定的起始黑线,由小车底部的红外光电传感器检测到第一条黑线后,通过单片机控制小车开始记数、显示、调速[2]。

在白纸所做轨迹道路中,小车通过超声波传感器正前方检测和光电传感器左右侧检测,由单片机控制实现系统的自动避障功能。

在电动车进驶过程中,采用双极式H型PWM脉宽调制技术,以控制小车调速;并采用动态共阴显示行驶时间和里程。

基于MCS-51单片机系统——智能小车报告

基于MCS-51单片机系统——智能小车报告

智能小车报告制作人:许晓建、林文舜制作时间:2010年11月13日星期六摘要(关键词:智能小车 AT89S52 单片机红外线发射/接收管 TIP41/42c)智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。

智能电动车就是其中的一个体现。

本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和控制核心;采用红外线发射/接收管来检测路上黑线,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着S形黑线行驶;采用tip41/42c三极管作为电机的控制机构;采用lm340t5作为稳压机构。

本设计结构涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科,具有高度的智能化、人性化,是机电一体化技术的产物。

制作智能小车为机电一体化专业学科的学生学习和掌握机电一体化技术有很大的帮助,对机电一体化专业学科的学生进一步巩固已学知识加深已学知识起到促进作用,引导和激励学生实事求是、刻苦钻研、勇于创新、多出成果、提高素质,发现和培养一批在学术科技上有作为、有潜力的优秀人才。

目录▪车模结构介绍▪研究项目介绍▪赛道及比赛规则▪电源及稳压机构介绍▪关于电机驱动▪关于舵机驱动▪关于赛道检测方式▪最佳路线问题▪单片机模块及最小系统介绍▪智能车系统程序▪致谢▪参考文献▪附录车模结构介绍车模调校的主要参数:后倾角、外倾角、前束、减震弹簧预紧力研究项目介绍•汽车动态分析•车速控制系统•方向控制系统•赛道检测系统•电子控制系统•策略规划系统•行为决策系统•数据传输系统赛道及比赛规则赛道材料: KT板、高密度、白色、0.5厘米厚。

中心黑线:为黑色即时贴经过裁减而成。

用指定车模沿黑线跑两圈取单圈最快者为胜。

电源及稳压机构介绍电池:电压:1.2×6=7.2 v、容量:2000mAh放电曲线(在3A的大电流放电条件下得到的结果)正确充电:推荐使用比赛选配的充电器。

单片机智能小车课程设计

单片机智能小车课程设计

单片机智能小车课程设计
一、课程的目的
本课程的目的是让学生学习如何使用单片机来构建智能小车,了解单片机的工作原理,掌握编程语言,完成智能小车的设计与制作,并将它应用到实际的解决方案当中。

二、课程的内容
本课程分为三个部分。

# 1. 单片机基础
本部分为学生提供单片机的相关理论知识,其中包括单片机工作原理、构建电路板等基础内容。

学生需要学习器件的原理、作用、施加电压的方式等。

# 2. 编程
本部分教学内容主要包括单片机的编程,需要学生掌握C语言和汇编语言的编程技巧,了解单片机的外部接口及它们的工作原理,学会使用汇编语言及相关软件操作系统等。

# 3. 实践
本部分主要让学生结合前两部分的内容,进行实践,将编程、接口等知识点应用到实际的智能小车中,实现从计划到实施的全部流程。

三、讲师及教材
本课程的讲授和教学由外聘的专业老师主讲,教材来源于国内外的单片机设计书籍及软件资料。

四、实验室设备
1. 智能小车实验室:配备了智能小车的电子元器件、电路板、外壳及测试仪器等,可以让学生进行智能小车设计与装配实验;
2. 编程实验室:配备了单片机软件开发工具、编程器及外部接口,用于学生的编程实验;
3. 课堂实验:课堂上展示完成的智能小车模型,并在学生观察的情况下,用编程语言完成小车的控制。

(完整word版)基于51单片机智能小车设计

(完整word版)基于51单片机智能小车设计

北华航天工业学院课程设计报告(论文)设计课题:基于51单片机智能循迹小车设计专业班级:B12242学生姓名:李云鑫指导教师:王晓设计时间: 2014年6月15日北华航天工业学院电子工程系基于51单片机智能循迹小车课程设计任务书指导教师:王晓教研室主任:王晓2014年06 月15 日注:本表下发学生一份,指导教师一份,栏目不够时请另附页。

课程设计任务书装订于设计计算说明书(或论文)封面之后,目录页之前.内容摘要本设计主要有单片机模块、地面寻线模块、发光二极管模块,电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。

本次设计采用ATMEL公司的AT89C2051单片机作为控制芯片,传感器模块采用红外接收管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模由LM393芯片和两个直流电机构成,组成了智能车的动力系统,电源采用5V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能.索引关键词:智能小车AT89C2051 单片机LM393 红外接收管目录一概述 (1)二方案设计与论证 (8)三单元电路设计及各模块具体电路 (3)3.1。

电路中51单片机芯片介绍 (13)3。

2 最小系统部分电路 (19)3。

3控制模块电路电路 (20)3。

4电机驱动及二极管模块电路 (20)3。

5寻线检测模块部分电路 (21)3.6软件设计 (22)四总原理图及元器件清单4。

1总原理图 (23)4.2元器件清单 (23)五安装与调试5.1.电子元器件的装配 (24)5。

2。

机械装配 (25)5.3.总装 (25)六性能测试与分析6.1测试方法及注意事项 (26)6.2源程序 (26)七结论 (27)八心得体会 (28)九参考文献 (29)一、概述目前,在企业生产技术不断提高、对自动化技术要求不断加深的环境下,智能车辆以及在智能车辆基础上开发出来的产品已成为自动化物流运输、柔性生产组织等系统的关键设备.世界上许多国家都在积极进行智能车辆的研究和开发设计。

单片机智能小车设计报告 (2)

单片机智能小车设计报告 (2)

目录一、系统总体结构 (2)二、各个模块的硬件分析 (2)(1)磁感应传感器 (2)(2)谐振电路设计 (3)(3)电机及舵机驱动电路的设计 (4)3.1电机驱动电路的选择 (4)3.2电机控制 (4)3.3舵机控制理论 (4)3.4供电电压总结及各个稳压模块 (5)三、系统总电路图及PCB图 (6)四、软件设计总流程图 (7)五、示波器波形 (8)六、各个模块的程序设计 (8)6.1舵机PWM初始化 (8)6.2 AD初始化 (9)6.3 直流电机的初始化 (9)6.4 舵机转向控制 (9)6.5 速度控制模块 (10)6.6 主函数 (10)七、总结 (10)一、系统总体结构图1-1系统总体结构图二、各个模块的硬件分析系统共包括五大模块:主控模块、传感器模块、电源模块、电机驱动模块、速度检测模块各模块的作用如下所述。

(1)主控模块:作为整个智能汽车的“大脑”,其采集光电传感器、光电编码器等传感器的信号,根据控制算法做出控制决策,驱动直流电机和伺服电机完成对智能汽车的控制。

(2)传感器模块:是智能汽车的“眼睛” ,可以通过一定的前瞻性,提前感知前方的赛道信息,为智能汽车的“大脑” 做出决策提供必要的依据和充足的反应时间。

(3)电源模块:为整个系统提供合适而又稳定的电源。

(4)电机驱动模块:驱动直流电机和伺服电机完成智能汽车加减速控制和转向控制。

(5)速度检测模块:检测反馈智能汽车车轮的转速,用于速度的闭环控制。

首先是采集小车下方电路上产生的感应磁场。

信号的采集流程如下:图2-1 信号采集流程(1)磁感应传感器根据麦克斯韦电磁场理论,交变电流会在周围产生交变的电磁场。

智能汽车竞赛使用路径导航的交流电流频率为20kHz,产生的电磁波属于甚低频(VLF)电磁波。

甚低频频率范围处于工频和低频电磁破中间,为3kHz~30kHz,波长为100km~10km。

如果在通电直导线两边的周围数值放置两个轴线相互垂直并位于导线相垂直平面内的线圈,则可以感应磁场响亮的两个垂直分量,进而获得磁场的强度和方向。

智能小车课程设计报告(全文)

智能小车课程设计报告(全文)

引言概述
智能小车课程设计报告是对于一种智能小车的设计和开发过程的详细记录和总结。

本报告旨在介绍智能小车的设计背景、目标与需求,并详细阐述了设计过程中的各个环节以及所面临的挑战和解决方案。

通过本报告的阅读,读者可以了解到关于智能小车设计的关键技术以及相关的研究成果和应用。

正文内容
一、智能小车设计的背景与目标
1.1设计背景
1.2设计目标与需求
二、智能小车设计的硬件与软件平台
2.1硬件平台的选择与配置
2.2软件平台的选择与配置
三、智能小车的传感与感知系统
3.1传感与感知系统的设计需求
3.2传感与感知系统的设计方案
3.3传感与感知系统的实现与测试
四、智能小车的控制与决策系统
4.1控制与决策系统的设计需求
4.2控制与决策系统的设计方案
4.3控制与决策系统的实现与测试
五、智能小车的应用与展望
5.1智能小车的应用场景与效果分析
5.2智能小车设计的拓展与改进点
总结
本报告详细介绍了智能小车课程设计的全过程,包括了设计背景与目标、硬件与软件平台的选择与配置、传感与感知系统的设计与实现、控制与决策系统的设计与实现以及智能小车的应用与展望。

通过本次设计的实践,我们深入了解了智能小车设计的关键技术和相关研究成果,并获得了实际应用中所需要的技能和经验。

随着智能小车技术的不断发展,我们相信智能小车将在诸多领域中发挥重要作用,如自动驾驶、物流运输等。

因此,在未来的研究中,我们将继续探索智能小车设计的新思路和新方法,以实现更高的性能和更广泛的应用。

单片机控制小车实训报告

单片机控制小车实训报告

一、实训背景与目的随着科技的发展,单片机技术已经广泛应用于各个领域。

为了提高学生的实践能力和创新能力,本实训旨在通过单片机控制小车的设计与实现,让学生深入了解单片机的应用,掌握单片机编程及控制硬件的方法,培养实际动手能力。

二、实训内容本次实训主要内容包括:1. 硬件电路设计:设计单片机控制小车所需的电路,包括单片机、电机驱动模块、传感器、电源等。

2. 软件编程:编写单片机程序,实现小车的基本运动功能,如前进、后退、左转、右转、停止等。

3. 功能扩展:根据需要,实现小车的高级功能,如循迹、避障、远程控制等。

三、实训过程1. 硬件电路设计(1)单片机选择:本次实训选用STC89C52单片机作为控制核心,该单片机具有高性能、低功耗、易于编程等特点。

(2)电机驱动模块:选用L298N电机驱动模块,该模块具有驱动能力强、稳定性好等特点。

(3)传感器:选用红外线传感器作为循迹传感器,用于检测地面上的轨迹线。

(4)电源:选用5V电源为单片机及电机驱动模块供电。

2. 软件编程(1)初始化:初始化单片机、电机驱动模块、传感器等硬件设备。

(2)基本运动控制:编写程序实现小车的前进、后退、左转、右转、停止等基本运动。

(3)循迹控制:编写程序实现小车在预设路线上自动循迹的功能。

(4)避障控制:编写程序实现小车在遇到障碍物时自动停止或绕行。

3. 功能扩展(1)远程控制:通过蓝牙模块实现手机APP对小车进行远程控制。

(2)数据显示:在手机APP上显示小车运行状态、速度等信息。

四、实训结果与分析1. 硬件电路设计根据实训要求,设计完成单片机控制小车所需的电路,包括单片机、电机驱动模块、传感器、电源等。

2. 软件编程(1)基本运动控制:成功实现小车的前进、后退、左转、右转、停止等基本运动。

(2)循迹控制:成功实现小车在预设路线上自动循迹的功能。

(3)避障控制:成功实现小车在遇到障碍物时自动停止或绕行。

3. 功能扩展(1)远程控制:成功实现手机APP对小车进行远程控制。

智能小车设计报告

智能小车设计报告

智能小车——寻迹、避障、测距摘要:本文介绍了一种基于51单片机的小车寻迹、避障、测距系统。

该系统采用5个高灵敏度的单端反射式红外光电对管和红外传感器以及霍尔传感器来实现小车的寻迹、避障和测距的功能。

并利用单片机产生PWM波,通过控制电机驱动芯片L298N去控制小车速度。

测试结果表明,该系统能够平稳跟踪给定的路径,并绕过障碍物,在液晶上可以显示出小车走过的路程。

关键词:智能小车、寻迹、避障、测距、脉冲宽度调制Abstract:this paper introduces a method based on 51 MCU car tracing, obstacle avoidance, distance measuring system. This system uses five high-sensitivity one-port reflex of tube and infrared electricity infrared sensor and hall sensors to realize the car tracing, obstacle-avoiding and result of the function. And by using single-chip microcomputer control PWM waves generated by motor drive chip L298N to control vehicle speed. Test results show that the system can smooth tracking given path and around obstructions, in liquid crystal can show the distance of the car.Keywords:intelligent car, tracing, obstacle avoidance, ranging, pulse width modulation一.总体方案:整个电路系统分为检测、控制、驱动、显示四个模块。

单片机控制智能小车设计制作1

单片机控制智能小车设计制作1

单片机控制智能小车设计制作任务书在加工制造业,工业机器人被广泛应用于生产流水线作业,实现各种零部件加工、装配过程。

本题以一个简单的机器人作业过程综合考察参赛选手对制造工艺流程管理及自动配给、装配技术的理解,并着重考察运动控制方面的能力。

1、任务设计一小车,使小车能将车上的乒乓球精准的放到导轨的孔洞里。

轨道的结构:中间有六个孔洞(右侧第一个洞口为出发校准口,比赛开始前参赛队员需将小车上的放置孔与之对齐),洞之间的中心距为20cm,洞的直径最大为6cm;小车模型横跨在导轨上,并且小车上部是一个放小球的漏斗,如下图。

(导轨自己制作)每个洞口接相对应的指示灯,保证在led灯亮的时候乒乓球掉入洞内,其它视为无效。

(按照功能板上LED输出的标志,把六个指示灯接好,每个洞口放置一个LED等,如上图所示)比赛过程:洞孔上方红色指示灯依次亮起熄灭,同一时间只有一盏灯亮,并且从右第一个至左,且灯保持开的状态是2S,2S之后灯熄灭,等待5S之后下一盏灯亮起,且保持2S。

小车初始位置在移动平台最右端。

(1)小车在洞孔上方,开始信号后,孔洞上的灯点亮;小车在2秒内将乒乓球放入孔洞;(2)小车运行到下一位置并将球放入第二个洞里;不能连续向同一孔洞放入2个球;(3)小车能从右侧第2个孔洞运行到最左侧,并能将其余4个球全部放到相应孔洞;3、发挥部分比赛过程:洞孔上方红色指示灯依次亮起熄灭,同一时间只有一盏灯亮,并且从左第一个至右,且灯保持开的状态是1S,1S之后灯熄灭,等待2S之后下一盏灯亮起,且保持1S。

小车初始位置放置在移动平台最右端。

(1)小车从右侧启动3秒后,最左侧的指示灯亮;小车能在4秒内从最右侧运行到最左侧,并将球准确放到最左侧的孔洞里;(2)小车运行到左侧第二个洞上方并将球放入;不能连续向同一孔洞放入2个球;(3) 然后小车能依次从左侧运行到右侧,将其余4个球放到相应孔洞;(4)其他;4、说明1.比赛开始前所有参赛队伍需将小车放置于竞赛台面最右侧,并且保证乒乓球放置孔与右边第一个孔对齐,作为初始起点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目: 智能小车设计打开命令行终端的快捷方式:ctr+al+t:默认的路径在家目录ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$linux:当前登录用户名.ubuntu:主机名:和$之间:当前用户所处在的工作路径.windows下的工作路径如C:\Intel\Logslinux下的工作路径是:/.../..../~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径..:上一级路径ls -l:以横排的方式列出文件的详细信息total 269464(当前这个路径总计所占空间的大小,单位是K) drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop 第一个位置:代表的是文件的类型.linux系统下的文件类型有以下几种.b:块设备文件c:字符设备文件d:directory,目录-:普通文件.l:连接文件.s:套接字文件.p:管道文件.rwxr-xr-x:权限r:读权限-:没有相对应的权限w:写权限x:可执行权限修改权限:chmod u-或者+r/w/x 文件名chmod g-或者+r/w/x 文件名chmod o-或者+r/w/x 文件名第一组:用户权限第二组:用户组的权限第三组:其他用户的权限.chmod 三个数(权限) 文件名首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数rwxr-x-wx1111010117 5 3chmod 753 文件名rwx--xr-x第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者).第四个位置:用户组的名字(前边的用户所处在的用户组的名字).第五个位置:对应文件所占的空间大小(单位为b)第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间)最后一个位置:文件名操作文件:1.创建一个普通文件:touch 文件名2.删除一个文件:rm(remove) 文件名3.新建一个目录:mkdir(make directory) 目录名递归创建目录:mkdir -p 目录1/目录2/目录34.删除一个目录:rmdir 目录名.//仅删除一个空目录rm -rf 目录名//删除一个非空目录5.切换目录(change directory):cd 路径linux下的路径分两种相对路径:以.(当前路径)为起点.绝对路径:以/(根目录)为起点,用相对路径的方式进入Music:cd ./Music用绝对路径的方式进入Desktop:cd /home/linux/Desktop返回上一级:cd ..返回加家目录的三种方式(1).cd(2).cd ~(3).cd /home/linux进入到1目录里并创建一个2普通文件,再退回上一级,并且删除1目录6.拷贝文件.cp(copy) 路径1/源文件路径2:把路径1下的文件拷贝到路径2下cp 路径1/源文件路径2/目标文件:把路径1下的文件拷贝到路径2下并且重命名位目标文件.cp(copy) -r 路径1/目录名路径2:把路径1下的目录拷贝到路径2下7.剪切文件mv(move) 路径1/源文件路径2:把路径1下的文件剪切到路径2下mv 路径1/源文件路径2/目标文件:把路径1下的文件剪切到路径2下并且重命名位目标文件mv 源文件目标文件:重命名文件mv 路径1/目录名路径2:把路径1下的目录剪切到路径2下8.clear:清屏9.exit 退出终端vi编辑器.vi 文件名:如果文件不存在则创建并打开如果文件已存在,则直接打开VI编辑器的三种模式1.命令行模式:刚进入编辑器的时候,默认处在这种模式下2.编辑模式(插入模式):输入a/i/o即可进入,按下esc键退回命令行模式,再输入冒号,即可进入底行模式.3.底行模式下:w(保存),q(退出),wq(保存并退出),q!(强制退出不保存)按下退格键,删除冒号,即可进入命令行模式.终极保存法;w! sudo tee %d回车再回车即可命令行模式下的快捷操作:1.整行复制:光标移动想要复制的那一行,输入yy即可,再把光标移动到你想要粘贴位置的上一行,输入p即可2.多行复制:光标移动想要复制的那几行的第一行,输入数字yy即可,再把光标移动到想要粘贴的那几行的第一行,输入p即可,3.整行删除:光标移动想要删除的那一行,输入dd即可,4.多行删除:光标移动想要删除的那几行的第一行,输入数字dd即可,5.整行剪切:光标移动想要剪切的那一行,输入cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可,6.多行剪切:光标移动想要剪切的那几行的第一行,输入数字cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可.7.撤销上一步:u底行模式下的快捷操作1,对第a行到第b行进行复制:航标a,行标by,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可2,对第a行到第b行进行删除:航标a,行标bd,enter回车3.对第a行到第b行进行剪切:航标a,行标bd,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可编辑一个最简单的hello world程序,保存并退出gcc编译器.gcc 文件名:编译成功的话,会在当前目录生成一个a.out可执行程序执行程序: ./a.out当然也可以指定可执行程序的名字,命令如下:gcc 文件名-o 可执行程序名编译步骤:1.预处理:gcc -i test.c -o test.i(宏定义的替换,头文件包含)2.汇编:gcc -s test.i -o test.s(c代码转换成汇编代码)3.编译:gcc -c test.s -o test.o(把汇编转换成二进制的目标程序)5.连接:gcc test.o -o test(连接库函数)linux系统的库文件:静态库:.a结尾动态库:.so结尾自己制作一个动态库.首先写一个简单的c功能函数编译成动态库:gcc -fPIC -shared 文件名-o lib库文件名.so在linux系统下.程序运行时默认搜素库的路径是/lib把库拷贝到/lib下:cp lib库文件名.so /lib 错误提示":permission denied(权限不足)方法:sudo cp lib库文件名.so /lib 提示让你输入密码1:sudo暂时将普通用户的权限提高到root用户权限再编译一个c应用程序,在程序中来调用库里实现的函数gcc 应用程序名-l库名(注意是去掉lib和.so的库名)文件IOlinux系统下一切设备皆文件操作文件:open():打开一个文件read()://从文件里边读出数据write()//向文件里写入数据close()//关闭文件man手册:man 2 函数名open:头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开返回值:打开成功:返回一个正数(文件描述符)打开失败:-12.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开如果文件不存在必须|O_CRAET,创建该文件参数3:权限数比如:0666返回值:打开成功:返回一个正数(文件描述符)打开失败:-1write:头文件: #include <unistd.h>typedef int ssize_tssize_t write(int fd, const void *buf, size_t count); 参数1:就是open函数的返回值,文件描述符参数2:你想要写入的数据参数3:你想要写入的数据的字节大小返回值:写入成功:返回的是写入的字节大小写入失败:-1strlen:实际长度sizeof:数组的大小arduinoviod setup(){端口的配置;}void loop(){任务的执行;}arduino之呼吸灯实验:int led=13;void setup(){pinMode(led,OUTPUT);}void loop(){digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);}渐变灯:暗->亮->暗PWM波:可调脉冲宽度波.3,5,6,9,10,11这几个端口可以输出pwm波analogWrite(pin, value)//输出pwm波pin:管脚号:3,5,6,9,10,11中的任意一个value:0~255中的任何一个数:0:占空比为0%255:占空比位100%远程视频监控步骤:1.将jpegsrc.v8b.tar.gz(图片库)和mjpg-streamer-code-182.tar.gz(视频查看软件)拷贝到ubuntu的家目录2.解压缩tar xvf jpegsrc.v8b.tar.gz3. cd jpeg-8b4. ./configure //创建Makefile文件5. make6. sudo make install //安装程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/libcd /usr/local/includesudo cp * /usr/includecd /usr/local/libsudo cp libjpeg* /lib7.切换到家目录:cd移植查看视频的软件:tar xvf mjpg-streamer-code-182.tar.gzcd mjpg-streamer-code-182cd mjpg-streamermake clean //清除已经编译过的程序make运行查看视频的软件:sudo ./start.sh打开火狐浏览器在地址栏输入127.0.0.1:8080若发现视频绿屏先强制结束程序运行:ctl+c.解决方法:修改start.sh将第30行的-y 删除看看是否虚拟机识别到摄像头:ls /dev/video0地址栏输入:127.0.0.1:8080/?action=stream 查看视频信息127.0.0.1:8080/?action=snapshot 截屏图片,点击save image as可以保存图片A8开发板:cpu:三星s5pc100内存:256Mflash:256Mwindows运行之前会有一个系统的引导代码叫BIOS与windows类似,linux启动之前也有这样的一段代码叫做bootloader bootloader有很多种,我们选用其中的一种叫做uboot.linux系统的启动步骤1.运行uboot(初始化硬件,引导系统内核的加载)2.内核的运行(zImage,linux的内核).3.识别文件系统(类似于C盘,D盘,E盘).是rootfs.tgz系统=内核+文件系统.挂载系统.要对uboot环境信息进行设置首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.4.输入命令print可以显示uboot的打印信息确保:ipaddr=192.168.1.100//代表开发板的ip地址serverip=192.168.1.200//代表ubuntu的IP地址bootargs=root=nfs nfsroot=192.168.1.200:/source/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200//打开虚拟机:1.进入到/tftpboot目录下.把zImage拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现zImage2.cd /source把rootfs这个压缩包拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现rootfs.tgz3.解压命令:sudo tar -xvf rootfs.tgz要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway192.168.1.200 255.255.255.0 192.168.1.1点击保存.关闭窗口.再打开图标选中wired connection1 再看ip是否改回来了.5.网线连接开发板和电脑在putty界面输入:ping 192.168.1.200如果host 192.168.1.200 is alive,这是挂载系统很好的征兆.not alive的话需要关闭电脑的无线网输入boot或者重启开发板不要再按下任何键了,如果出现##################很快就要挂载成功了如果出现TTTTTTTTTTTTTT在ubuntu输入命令:sudo service tftpd-hpa restart其中sudo的作用是暂时将用户的权限提升到超级用户(root)的权限.如果出现Please press Enter to activate this console.代表系统挂载成功.通过gcc编译生成的程序不能在开发板上运行.通过命令file a.out看到文件的格式为intel 30386,说明这是X86格式的程序,只能PC上运行而不能在arm板上运行,解决措施,使用交叉编译器来编译.交叉编译器的配置:将arm-cortex_a8-linux-gnueabi.tar.bz2拖到ubuntu的家目录解压命令tar -xvf arm-cor+tab键自动补齐,用ls查看是否生成arm-cortex_a8个目录.配置交叉编译器:sudo vi /etc/bash.bashrc文件在最后一行添加export PATH=$PATH:/home/linux/arm-cortex_a8/bin保存并退出文件保存完成后重启文件:source /etc/bash.bashrc重启成功后输入arm-cor+tab键会自动补齐成arm-cortex_a8-linux-gnueabi-代表交叉编译器配置成功.利用交叉编译器编译程序:arm-cortex_a8-linux-gnueabi-gcc 文件名,并将生成的可执行程序拷贝到/source/rootfs下然后再到putty上执行./a.out就可以在开发板上运行程序了.相关代码Che.c#include "cgic.h"#include <termios.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>void zigbee_serial_init(int fd){struct termios options;tcgetattr(fd, &options);options.c_cflag |= (CLOCAL | CREAD);options.c_cflag &= ~CSIZE;options.c_cflag &= ~CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= ~CSTOPB;options.c_iflag |= IGNPAR;options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);//options.c_cc[VTIME] = 2;options.c_cc[VMIN] = 12;options.c_oflag = 0;options.c_lflag = 0;cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);tcsetattr(fd,TCSANOW,&options);}int cgiMain(){int fd;char a='1';cgiHeaderContentType("text/html\n\n");fprintf(cgiOut,"<html>\n");fprintf(cgiOut,"<head>\n");fprintf(cgiOut,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");fprintf(cgiOut,"<title>\n");fprintf(cgiOut,"SMART CAR\n");fprintf(cgiOut,"</title>\n");fprintf(cgiOut,"<meta http-equiv=\"refresh\" content=\"0;url=../index.html\">");fprintf(cgiOut,"</head>\n");fprintf(cgiOut,"<body>\n");fprintf(cgiOut,"<div align=\"center\">\n");fprintf(cgiOut,"<br /><br /><br /><br />\n");fprintf(cgiOut,"<form action=\"./cgi-bin/keyi.cgi\" method=\"post\" >\n");fprintf(cgiOut,"<input type=\"submit\" name=\"up\" value=\"前进\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"left\" value=\"左转\" />\n");fprintf(cgiOut,"&nbsp;&nbsp;&nbsp;&nbsp;\n");fprintf(cgiOut,"<input type=\"submit\" name=\"stop\" value=\"停止\" />");fprintf(cgiOut,"&nbsp;&nbsp;&nbsp;&nbsp;\n");fprintf(cgiOut,"<input type=\"submit\" name=\"right\" value=\"右转\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"down\" value=\"后退\" />\n");fprintf(cgiOut,"</form>\n");fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd)fprintf(cgiOut,"open usart failed\n");zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked("up")){a='2';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("down")) {a='1';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("right")) {a='4';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("left")) {a='3';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("stop")) {a='0';write(fd,&a,1);}fprintf(cgiOut,"</body>\n");fprintf(cgiOut,"</html>\n");close(fd);return 0;}Test.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, const char *argv[]) {int fd;char buff[20]={0};fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd){printf("open failed\n");return -1;}while(1){read(fd,buff,sizeof(buff));}return 0;}单片机代码void setup(){pinMode(2,OUTPUT);pinMode(4,OUTPUT);pinMode(6,OUTPUT);pinMode(8,OUTPUT);Serial.begin(115200);void loop(){char c;c=Serial.read();if(c=='1'){digitalWrite(2,LOW); digitalWrite(4,HIGH); digitalWrite(6,LOW ); digitalWrite(8,HIGH); Serial.println("qianjin"); }if(c=='2'){digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(6,HIGH); digitalWrite(8,LOW); Serial.println("daotui"); }if(c=='3'){digitalWrite(2,LOW); digitalWrite(4,HIGH); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("youzuan"); }if(c=='4'){digitalWrite(2,LOW); digitalWrite(4,LOW);digitalWrite(6,LOW); digitalWrite(8,HIGH); Serial.println("zuozuan"); }if(c=='0'){digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("0");}}。

相关文档
最新文档