智能小车单片机课程设计报告剖析
智能小车控制实验报告

一、实验目的本次实验旨在通过设计和搭建一个智能小车系统,学习并掌握智能小车的基本控制原理、硬件选型、编程方法以及调试技巧。
通过实验,加深对单片机、传感器、电机驱动等模块的理解,并提升实践操作能力。
二、实验原理智能小车控制系统主要由以下几个部分组成:1. 单片机控制单元:作为系统的核心,负责接收传感器信息、处理数据、控制电机运动等。
2. 传感器模块:用于感知周围环境,如红外传感器、超声波传感器、光电传感器等。
3. 电机驱动模块:将单片机的控制信号转换为电机驱动信号,控制电机运动。
4. 电源模块:为系统提供稳定的电源。
实验中,我们选用STM32微控制器作为控制单元,使用红外传感器作为障碍物检测传感器,电机驱动模块采用L298N芯片,电机选用直流电机。
三、实验器材1. STM32F103C8T6最小系统板2. 红外传感器3. L298N电机驱动模块4. 直流电机5. 电源模块6. 连接线、电阻、电容等7. 编程器、调试器四、实验步骤1. 硬件搭建:- 将红外传感器连接到STM32的GPIO引脚上。
- 将L298N电机驱动模块连接到STM32的PWM引脚上。
- 将直流电机连接到L298N的电机输出端。
- 连接电源模块,为系统供电。
2. 编程:- 使用Keil MDK软件编写STM32控制程序。
- 编写红外传感器读取程序,检测障碍物。
- 编写电机驱动程序,控制电机运动。
- 编写主程序,实现小车避障、巡线等功能。
3. 调试:- 使用调试器下载程序到STM32。
- 观察程序运行情况,检查传感器数据、电机运动等。
- 调整参数,优化程序性能。
五、实验结果与分析1. 避障功能:实验中,红外传感器能够准确检测到障碍物,系统根据检测到的障碍物距离和方向,控制小车进行避障。
2. 巡线功能:实验中,小车能够沿着设定的轨迹进行巡线,红外传感器检测到黑线时,小车保持匀速前进;检测到白线时,小车进行减速或停止。
3. 控制性能:实验中,小车在避障和巡线过程中,表现出良好的控制性能,能够稳定地行驶。
遥控智能小车课程设计报告书

摘要介绍了语音遥控的电动小车的机械结构与控制部分.在机械结构上,对普通的玩具小车做了改进,使小车的转向更加灵活,并且在设计围可以实现任意角度转弯和任意速度移动;而在控制系统部分,则采用语音控制方式,使小车可以"听懂"人的命令,娱乐性和互动性更强.该小车各部分采用模块化设计,各个模块之间独立性强。
控制部分采用可编程微处理哭器,可以在不增加系统硬件的情况下方便地对系统进行二次开发。
本文对一辆小车进行了实验,实验结果表明,语音识别系统在低噪声环境中识别率很高,在噪声水平较高的场合,识别率有所下降。
小车反应灵敏。
关键词:语音识别单片机智能小车电机驱动目录绪论31总体方案41.1方案论证41.2总体方案图41.3系统工作原理42硬件设计52.1 语音识别模块52.2 电机驱动模块102.3 红外检测模块112.4 键盘电路122.5 主控芯片8051模块132.5.1单片机的电源设计132.5.2单片机复位电路143.软件设计143.1主程序143.2监控程序153.3 延时程序19结论20参考文献21绪论在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。
无论是在工农业生产、交通运输、医疗卫生、办公,还是在日常生活中,都大量的使用着各种电动机。
而微处理器取代模式电路作为电动机控制的技术也日渐成熟。
单片机介于工业控制计算机和可编程控制器之间,他有较强的控制能力、低价的成本。
人们在选择电动机控制器时,常常是在先满足功能需要的同时,优先选择成本低的控制器。
语音遥控的电动小车的机械结构与控制部分有了新的改进。
在机械结构上,对普通的玩具小车做了改进,使小车的转向更加灵活,并且在设计围可以实现任意角度墨迹和任意速度移动;而在控制系统部分,则采用语音控制方式,使小车可以“听懂”人的命令,娱乐性和互动性更强。
1总体方案1.1方案论证本系统采用芯片TSG110进行语音识别过程,通过语音的识别完成对小车的控制,通过对红外的检测完成对小车的避障,该设计可以达到系统要求的各项指标,设计方案是可行的。
智能小车实验报告心得(3篇)

第1篇一、引言随着科技的不断发展,人工智能技术逐渐渗透到我们生活的方方面面。
作为人工智能的一个典型应用,智能小车实验为我们提供了一个将理论知识与实践操作相结合的平台。
在本次智能小车实验中,我深刻体会到了理论知识的重要性,同时也感受到了动手实践带来的乐趣和成就感。
以下是我对本次实验的心得体会。
二、实验目的本次实验旨在通过设计、搭建和调试智能小车,让学生掌握以下知识:1. 传感器原理及在智能小车中的应用;2. 单片机编程及接口技术;3. 电机驱动及控制;4. PID控制算法在智能小车中的应用。
三、实验过程1. 设计阶段在设计阶段,我们首先对智能小车的功能进行了详细规划,包括自动避障、巡线、遥控等功能。
然后,根据功能需求,选择了合适的传感器、单片机、电机驱动器等硬件设备。
2. 搭建阶段在搭建阶段,我们按照设计图纸,将各个模块连接起来。
在连接过程中,我们遇到了一些问题,如电路板布局不合理、连接线过多等。
通过查阅资料、请教老师,我们逐步解决了这些问题。
3. 编程阶段编程阶段是本次实验的核心环节。
我们采用C语言对单片机进行编程,实现了小车的基本功能。
在编程过程中,我们遇到了许多挑战,如传感器数据处理、电机控制算法等。
通过查阅资料、反复调试,我们最终完成了编程任务。
4. 调试阶段调试阶段是检验实验成果的关键环节。
在调试过程中,我们对小车的各项功能进行了测试,包括避障、巡线、遥控等。
在测试过程中,我们发现了一些问题,如避障效果不稳定、巡线精度不高、遥控距离有限等。
针对这些问题,我们再次查阅资料、调整程序,逐步优化了小车的性能。
四、心得体会1. 理论与实践相结合本次实验让我深刻体会到了理论与实践相结合的重要性。
在实验过程中,我们不仅学习了理论知识,还通过实际操作,将所学知识应用于实践,提高了自己的动手能力。
2. 团队合作在实验过程中,我们充分发挥了团队合作精神。
在遇到问题时,我们互相帮助、共同探讨解决方案,最终完成了实验任务。
单片机智能小车课程设计

单片机智能小车课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其在智能小车控制中的应用。
2. 学习并掌握智能小车的基本电路连接和编程方法,能够实现小车的基本运动控制。
3. 了解传感器的工作原理,学会使用传感器对智能小车进行环境感知和路径规划。
技能目标:1. 培养学生动手操作能力,能够独立完成智能小车的组装和调试。
2. 培养学生编程思维,能够运用所学知识解决实际问题,实现智能小车的功能拓展。
3. 提高学生团队协作能力,学会在项目中进行沟通与分工合作。
情感态度价值观目标:1. 培养学生对单片机及智能硬件的兴趣,激发创新意识,提高学习积极性。
2. 培养学生勇于尝试、克服困难的精神,增强自信心。
3. 培养学生关注社会热点问题,了解智能技术在现实生活中的应用,提高社会责任感。
本课程针对初中年级学生,结合单片机及智能小车相关知识,注重实践操作和创新能力培养。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
课程目标分解为具体学习成果,便于后续教学设计和评估,以提高课程的实用性和针对性。
二、教学内容1. 单片机原理:介绍单片机的组成、工作原理,重点讲解内部寄存器、I/O 口、定时器等基本功能。
相关教材章节:第三章单片机原理及其应用。
2. 智能小车电路连接:讲解智能小车的基本电路组成,包括电机驱动、电源管理、传感器接口等。
相关教材章节:第四章智能小车电路设计与实践。
3. 编程基础:学习单片机编程语言(如C语言),掌握基本编程语法和逻辑控制,实现小车运动控制。
相关教材章节:第五章单片机编程基础。
4. 传感器应用:介绍常用传感器(如红外、超声波、光电等)的工作原理,学会使用传感器进行环境感知和路径规划。
相关教材章节:第六章传感器及其应用。
5. 智能小车组装与调试:指导学生进行智能小车的组装,学会使用调试工具,如示波器、逻辑分析仪等。
相关教材章节:第七章智能小车组装与调试。
6. 创新实践:鼓励学生进行功能拓展,如增加避障、循迹、远程控制等功能。
智能小车课程设计总结心得

智能小车课程设计总结心得一、课程目标知识目标:1. 让学生掌握智能小车的基本原理,包括电机控制、传感器使用等;2. 引导学生了解编程语言,如Python或C++,并能够运用到智能小车的控制中;3. 帮助学生理解智能小车在不同环境下的行为策略和决策过程。
技能目标:1. 培养学生动手操作能力,能够独立完成智能小车的组装和调试;2. 提高学生编程能力,使其能够编写简单的控制程序,实现智能小车的基本功能;3. 培养学生团队协作能力,通过项目实践,学会与他人共同解决问题。
情感态度价值观目标:1. 激发学生对科技创新的兴趣,培养其探索精神和创新意识;2. 引导学生关注智能小车在现实生活中的应用,认识到科技与生活的紧密联系;3. 培养学生积极向上的学习态度,增强自信心,勇于面对挑战。
本课程针对五年级学生设计,结合学生好奇心强、动手能力强、合作意识逐渐增强等特点,注重实践性和趣味性。
在教学过程中,要求教师以学生为主体,关注个体差异,鼓励学生积极参与,充分调动学生的主观能动性。
通过本课程的学习,旨在培养学生具备一定的科技创新能力,为我国培养更多具备创新精神和实践能力的优秀人才。
二、教学内容本课程教学内容分为五个部分:1. 智能小车原理介绍:讲解智能小车的基本结构、功能及工作原理,包括电机控制、传感器、电池等组成部分。
2. 编程语言基础:介绍Python或C++编程语言的基本语法、数据类型、控制结构等,为编写智能小车控制程序奠定基础。
3. 智能小车组装与调试:指导学生进行智能小车的组装,学习使用螺丝刀、扳手等工具,并熟悉各类传感器和电机的安装。
4. 控制程序编写:根据项目需求,引导学生编写智能小车的控制程序,实现前进、后退、转向等功能。
5. 项目实践与展示:组织学生进行小组合作,完成智能小车在不同场景下的任务挑战,如避障、追踪等,并进行成果展示。
教学内容与课本关联性如下:1. 教科书第五章:《走进机器人》,涉及智能机器人的基本原理和编程。
实现智能小车的设计报告

实现智能小车的设计报告
一、项目背景
智能小车是一款结合了机械、机电、计算机等多种技术的智能机器人,能够获取环境信息、自主探索并完成各种任务。
智能小车在工业自动化、智能家居、物流配送等领域有着广泛地应用,在科研和商业领域都有着重要的地位和作用。
二、项目目的
本项目旨在通过设计制作智能小车,探索机器人控制、机械设计及电路控制等多方面知识,并应用到实际中,提高学生工程设计能力和动手能力。
三、设计方案
本智能小车采用树莓派单片机控制,配合多种传感器实现环境感知、路径规划和控制等功能。
车身采用3D打印技术制作,机身外型为椭圆形,具有一定的稳定性和降低空气阻力的特点。
底盘采用两轮驱动设计,其中一轮为万向轮,以提高小车的灵活性和控制性能。
四、技术方案
1.单片机控制
树莓派作为本项目的主控制器,采用GPIO输出信号控制各种功能模块,包括机械模块、传感器模块和电路模块等。
2.传感器模块
小车的传感器模块包括超声波传感器、巡线传感器、红外避障传感器等,这些传感器用于获取小车周围环境信息,提高小车的自主探索和避障能力。
3.路径规划
小车的路径规划采用A*算法,根据当前位置、目标位置以及环境地形等因素制定最优路径,并实时更新路径信息。
4.电路控制
小车的电路控制采用PWM技术,控制小车速度和方向,配合电池电量检测和保护电路等技术,保证小车的安全和稳定性。
五、结论
通过本项目的实践设计,掌握了机器人控制、机械设计和电路控制等技术,加深了对工程设计的理解,提高了动手操作能力。
同时,本项目的可拓展性和适用范围广泛,具有较高的应用价值和发展前景。
智能小车报告分析

智能小车(红外版)项目报告目录一、引言------------------------------1二、总体方案------------------------------1三、电路与程序设计------------------------------4四、小车调试方案和调试结果------------------------------8五、遇到的问题和解决方案-------------------------------9 六、工程管理方案-------------------------------10七、总结和体会-------------------------------10一、引言智能,即可以按照预先设定的模式在一个环境中运行,不需要人为的管理。
智能小车就是其中一个体现。
本文的智能小车设有自动避障和自动循迹的功能。
其中避障的实现需要注意当小车与障碍物之间距离小于某一数值时,车通过电动机转向;寻迹的实现则需要通过车底部的光电传感器检测行驶方向是否偏离黑线,再通过电动机调整运行方向。
小车系统以STC89C52单片机为系统控制处理器;采用红外传感获取轨道及障碍物的信息,来对小车的方向和速度进行控制。
此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。
二、总体方案本小组设计的智能小车的控制机制是:以STC89C52单片机为控制核心的智能循迹避障小车。
采用红外探测法实现信号检测,通过红外发射管和接受管来感知给定黑色轨迹和障碍物,将感知的信号返回给单片机,然后单片机对不同信号进行区分,结合软件编程控制小车前进、后退、左转、右转,从而实现循迹避障功能,即在有轨迹的地方小车能沿轨迹行驶,当遇到障碍时小车能够自动避开。
1.实现功能(1)寻迹功能该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”一黑线。
基于51单片机的智能小车设计报告

本人保证自写文档,文档不足之处请谅解目录一、设计的目的------------------1二、设计的模块------------------1三、程序的流程------------------6四、元器件清单------------------8五、成品的制作------------------8六、注意事项--------------------9七、设计的总结------------------9设计的目的智能遥控车地目的主要突出在智能与遥控上,遥控意思明显就是通过某种控制手段使得小车能够实现由控制者控制前进后退等操作;智能可以体现为功能上的智能化。
本作的目的是实现控制小车移动时对前方所存在的威胁进行报警提醒。
设计的模块此次设计的硬件电路模块大致为五大类,分别是51单片机最小系统模块、电源模块、电机工作驱动模块、超声波报警系统模块、无线控制发射接收模块。
下图为硬件电路框图:1、单片机最小系统此模块式是本设计的控制核心模块,单片机最小系统由三部分组成:STC89C52芯片部分、复位部分(由按键开关、极性电容、10K电阻组成)、晶振部分(由12M石英晶振、两个30PF的瓷片电容组成)。
主要起程序的输入与控制、程序的复位、时间频率控制的作用。
2、无线控制模块本设计的无线控制模块是由编码芯片PT2262和解码芯片PT2272组成的电路模块组成,工作方式是编码芯片PT2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272 接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。
3、电机驱动模块本设计是采用了L298N电机驱动模块来驱动减速电机工作;L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计题目: 智能小车设计专业: 计算机科学与技术班级: 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," \n");fprintf(cgiOut,"<input type=\"submit\" name=\"stop\" value=\"停止\" />");fprintf(cgiOut," \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");}}。