项目中成长是迅速且高效的。
目录:
0、引言 何为嵌入式?
1、单片机相关
1.1 基于单片机的智能小车、智能机器人制作
1.2 基于Arduino的3D打印机制作
2、嵌入式Linux相关
2.1 智能扫地机器人
2.2 智能可穿戴类设备:智能安全头盔
2.3 智能可穿戴类设备:面向空巢老人/病人的智能手环
2.4 物联网智能控制系统:家居、农业、医疗
2.5 基于Linux的嵌入式网络视频监控系统
2.6 移动图像监控系统
2.7 基于TCP/IP的安全文件传输系统(TLS/SSL)
2.8 嵌入式MP3播放器
2.9 基于Qt的新能源汽车电池管理系统
2.10 嵌入式车载导航定位系统 Qt GPS Baidu Map
2.11 无人机
2.12 嵌入式VR、AR
2.13嵌入式结合AI、Machine Learning
3、嵌入式Android相关
3.1 物联网智能控制系统:家居、农业、医疗
3.2 嵌入式家庭保健系统
3.3 智能电视TV、AR/VR眼镜
3.4 自己定制的平板电脑、手机等
4、裸机开发
4.1 裸机实现串口通信
4.2 裸机实现DMA方式SD卡读写
4.3 裸机是实现NANDFlash、EEPROM的操作(擦除、读写)
0、引言
何为嵌入式?
IEEE官方定义:Devices Used to Control,Monitor Assist the Operation of Equipment,Machinery or Plants。
翻译过来就是:用于“控制、监视或者辅助操作机器和设备的装置”。
其实按我理解,嵌入式系统就是“高大上 土豪”版的单片机,因为嵌入式不只带操作系统(OS),并且都是上架构(如ARM)的。其实咱们所用PC机也是一个嵌入式系统,只不过处理器、Bootloader、操作系统OS都是通用化的Intel系列、BIOS、Windows等;而面向具体应用,就需要根据需求,实现硬件资源和软件操作系统的“私人订制”,无非就是先根据需求硬件选型,然后根据硬件资源去裁剪操作系统,把软件不需要的都去掉,只留有用的,这样保证我们用的系统在达到需求目标的同时,还保证了实时性和稳定性(没有无关因素干扰)并且小型化具有专用性。
再啰嗦几句,假设大家对单片机已经很熟了,举个栗子:对单片机引脚控制LED,用C编程通过IDE编译个Hex文件,烧写就可以运行实现;那么对嵌入式来说呢,因为处理器引脚太多(如Cortex-A9架构的Exynos4412芯片 有400多引脚),那么自己一个个配(裸机编程)实在麻烦,而且编的程序都与硬件密切相关,没有通用性且很难移植;因此就使用上了操作系统;那么操作系统干了什么呢?其实就是和单片机操作引脚一样,只不过OS将这些操作封装成各种驱动(如GPIO驱动),那么你只要在应用程序上调用这个驱动内的函数,借助OS内核实现机制,就能向单片机一样操作这些引脚,所有嵌入式设计,底层都是这么实现的。
So, 怎么判断该用嵌入式还是单片机呢:其实就是看需求,单片机处理能力、可扩展性及其有限,涉及到图像监控处理、网络协议就捉襟见肘了;因此这个逻辑很简单:单片机不能实现的,上嵌入式;并且现在是个嵌入式功能都有成型的solution,特别是Linux的开源,资料成堆成堆的。这也是近年嵌入式(包括物联网、智能硬件)火这么快的原因之一吧。
以上都是愚见,切入正题:本人不才整理了几个嵌入式比较好的练手项目和小课题,有的是我之前做的项目,有的是网络搜罗,反正都是我个人认为比较综合而且interesting的,这些网上一大堆相关资料,我这里只是提个题目和其中关键点,具体内容不赘述,感兴趣直接百度google,希望给大家一个参照,大家有idea都可以相互交流,有机会共同学习,感谢。
1、单片机相关
这里主要是推荐嵌入式相关,所以单片机就只简单提几句
1.1 基于单片机的智能小车、智能机器人制作
对于大学经常参加一些智能车比赛的童鞋,相信已经做吐了。。。小车目前可以算是相关资料最多的练手项目之一,各种脑洞大开的智能车车,你值得拥有~
1.2 基于Arduino的3D打印机制作
需求:使用单片机,通过限位开关和温度等传感器控制步进电机移动、加热头,将打印材料加热挤出后凝固成型。
硬件:Arduino mega2560开发板,3D打印机套件,打印材料,安装工具等
软件:Marlini开源程序,上位机软件Print3D,切片软件(推荐Cura),三维制图软件(推荐犀牛)等。
参考链接:Kossel - RepRap
Prusa i3 3D printer - Prusa Printers(推荐一开始做Kossel和i3型的)
注:这个项目实现很费事,可谓处处是坑,不只是单片机软硬件知识,还要学三维制图、机械原理等等,期间会遇到一系列问题,但是最终调试完,第一次打出自己想要的东西时,感觉真是此生难忘
3D打印现在是所谓工业4.0的主打,特别是牛炸天的细胞打印(对你没有看错)、器官打印、粉末金属打印等。不过我们做的也就打印些塑料小玩具,现在的SLA光敏树脂打印倒挺不错,能比FDM的快几十倍,只是成本太贵(貌似10w )。又扯远了。。。咳咳,下面开始划重点:
2、嵌入式Linux相关
嵌入式Linux就是在嵌入式硬件平台上使用Linux操作系统。其实嵌入式开发过程就是硬件 软件设计过程,本节推荐的都是在一个目标硬件平台上设计基于linux系统的应用,主要工作一般都是:Bootloader设计与移植、Linux内核裁剪移植、Linux驱动程序开发移植、文件系统制作移植和最后的应用程序开发移植。说了这么多移植它是什么东东?我理解为:拿着别人写好的东西,稍微自己改改放到自己的平台上,其中的“改”和“放”的过程就是移植的过程。这也是嵌入式工程师必须具备的能力,一定要借鉴甚至使用别人做好的,自己闷头写代码只能闭门造车(大神除外)。
推荐硬件平台:树莓派(首推),友善之臂、飞凌等开发板(这些开发板自带很多练手项目课题,网上也很多资料,本文就不再提那些case),架构最好选主流的ARM,像流行的s3c6410(ARM11)、s5pv210(A8)、exynos4412(A9)等。或者自己画板子(使用现有开源出来的修改下,不过成本高,难度大),有兴趣不妨一试,刚开始学习还是老实用开发板吧。
推荐软件平台:Linux2.6以上内核(2.6以下很多系统机制会不同)嵌入式系统,Github、开源中国和ChinaUnix上一堆开源的Linux驱动和小应用,宿主(PC)机最好使用Fedora、Ubuntu系统(如果使用虚拟机VMware版本最好在9.0以上),Bootloader推荐使用U-Boot;文件系统根据使用的Flash支持,用Busybox制作;人机界面用Qt。
2.1 智能扫地机器人
深藏不露的“扫地僧”,类似壁障设轨智能小车,只不过有更多人性化功能,网上资料 自由发挥吧
2.2 智能可穿戴类设备:智能安全头盔
背景:在工厂或危化品存储等场所,经常发生危害气体泄漏,而由于环境、风力等因素,人们无法直接在固定位置检测,而且有的气体是无色无味,如何解决?其实最终目的还是保证工人的人身安全,这时候就体现出来智能可穿戴设备的价值。
需求:设计智能安全头盔,当检测到有害气体后震动报警,并将该危险地点通过GPS上传到上位机显示,生成一个有害气体地图(借助Baidu API)以红色标出危险地段。
2.3 智能可穿戴类设备:面向空巢老人/病人的智能手环
需求:背景不用说,设计一个智能手环(或其他设备),检测人身体的各项生命特征,并且实时GPS传输老人位置,还具有跌倒报警、遇水报警等突发状况向子女手机、服务器端推送报警信息。自由发挥,有些身体特征检测实现确实困难,但总有方法解决,市面已有这类产品。
2.4 物联网智能控制系统:家居、农业、医疗
这就是近年炒的最火的智能家居、智慧农业等物联网项目,其实都是属于嵌入式智能控制系统,无非就是底层传感器网络(如Zigbee)采集环境参数数据,传给嵌入式网 关,网 关再传给上位机服务器,再加上远程控制、视频监控等。像这样的题目很多很多,例如智能温室大棚控制系统、智能家居系统、智慧医院系统、智能仓储管理系统等等,其实都能归结为一套系统,只不过根据应用领域有些不同细节。
友情提示:可以先做底层采集温度,传给网 关显示并转发到服务器,这一路通了后面程序就好开发了。或者灵活变通,用嵌入式网 关采集传感器(需移植传感器驱动到Linux内核),就不需要使用Zigbee等WSN了(如下图)这也可以算是一个题目,都很open的,怎么做你来定,只要脑中有idea,生活处处皆课题(简直是自虐)。
2.5 基于Linux的嵌入式网络视频监控系统
面向安防等应用中,具多个摄像头同时视频传输,为减少带宽、提高视频分辨率和帧率,就需要使用编码标准对视频编码后再传输,so做一个软编码器,我做过基于H.265的编码(有兴趣百度Lib265),这里可以使用H.264(资料较多)其实原理很简单,涉及到摄像头驱动和编码库。还有上位机解码软件。
Linux网络服务器可以使用开源的mjpg-streamer。(可以参照国嵌高级项目班视频)
2.6 移动图像监控系统
类似2.4, 例如国嵌高级项目班中就有介绍,多了一个入侵检测。使用摄像头抓取图像,通过Motion库动态监控比对,一旦出现和前一个图像较大变化(如家中进来一个人),则立即拍照将照片传到上位机,并报警等联动。
后面还包括安全文件传输系统,嵌入式MP3两个都是国嵌教程里的项目,后面都有链接,我也是以前学习时候在网上找的,如有侵权等问题请告知
另外:视频图像做好了,就可以做很多应用,如现在比较牛的机器视觉,无损检测、缺陷检测等等。
2.7 基于TCP/IP的安全文件传输系统(TLS/SSL)
其实就是把Socket包通过OpenSSL的工具加密一下(TLS/SSL),再发送,然后接受端再解密。里面用到了线程池,在企业项目会经常用到。
2.8 嵌入式MP3播放器
2.9 基于Qt的新能源汽车电池管理系统
如题,使用Qt作为GUI显示,实现对电池容量显示和管理操作。较简单,不过可扩展性强,大到汽车管理,再大一点还可以上升到车联网。
2.10 嵌入式车载导航定位系统
Qt GPS Baidu MapGPS采集经纬度数据通过GPRS、WiFi无线传输到服务器上,并借助Baidu、Google提供的API进行精确定位。(还是那句话,借鉴网上现有的,自己开发难度Huge)
2.11 无人机
好吧,不得不又谈四轴了,现在无人机导航送快递、监控交通可谓前景广大,有兴趣创客可以做一个,网上各类资料,实现不难,但主要是烧钱….烧钱….钱…
Ps:买就要买好的模块,特别是图传和电调!,要么一摔就….别问我怎么知道的!
2.12 嵌入式VR、AR
VR/AR实际没接触过,不过很高大上的样子,最近好多大牛公司在搞虚拟现实。感觉还是嵌入式图像处理 全景映象的应用吧,有兴趣可以看看Google的产品。
2.13嵌入式结合AI、Machine Learning
此类课题必火!本质其实就是将机器学习、人工智能等算法,应用在嵌入式领域。AI领域将是嵌入式工程师的又一择业选择!未来必将处处AI,且处处嵌入式AI(如现在市面各类AI电器)。
因为AI涉及到N多机器学习类算法,学习过程也能极大提高嵌入式er的算法能力(算法一般是广大嵌入式er的一块短板),网上也有各种大神编译好的算法模型可以借鉴并直接使用,不过在学习阶段建议自己从无到有搭建算法模型、找数据集训练、交叉验证最终移植发布,有可能自己搭的模型效果不咋地,但这个过程我觉着还是能学到不少AI的思想。。。
本人这方面还是纯种小白,目前正在努力学习,找到好的嵌入式AI资料再第一时间奉上。(前期可以看看吴恩达的视频)
附机器学习算法地图:
3、嵌入式Android相关
嵌入式Android开发,就相当于自己定制各种功能的手机一样,因为Android系统发布就是面向移动端设备的,Android系统移植后也保留大量移动设备应用。因为Android系统基于Linux内核,所以底层还是Linux的东西,但应用层就完全不一样了,要在之前的基础上开始学Java、JNI、Android编程,相关嵌入式资料也没有Linux多,所以想开发还是有一些门槛的。
要说明的是:上述嵌入式Linux的项目,用嵌入式Android一样开发,只不过平台不一样,用的Linux内核不太一样而已,这时候如果真心想学,可以在上面项目做完后的基础上,将你的项目移植到Android平台。这里要注意使用的Linux内核版本,缺少什么就补什么,如驱动、库文件等等,然后重新编译移植内核。
推荐硬件平台:树莓派、友善之臂、飞凌等开发板,这里一般的处理器就不行了,ARM11以下可能连安卓2.0系统都带不动,So推荐使用Cortex-A9四核处理器或以上,否则系统卡顿…顿….
推荐软件平台:嵌入式Android2.3以上系统,宿主(PC)机最好不要用虚拟机,我用真实Ubuntu,i5 8G内存的主机编译Android5.0.2系统都编译了8个多小时,推荐使用开发板厂家提供的已经编译好的版本,不要重新一点点编译;Bootloader和上章一样,Linux内核3.0以上;人机界面直接用Android自带的(嵌入式Android优势)。
3.1 物联网智能控制系统:家居、农业、医疗
同上文一样,只不过网 关那一层换成Android平台,个人感觉这个还是很有搞头的,毕竟Android用户群这么大,大家跟熟悉,操作使用更方便。
这里说到了 ,类似上章的题目,都可以把Linux平台转到Android平台,所以这里关于上面提到的题目就不再赘述。
3.2 嵌入式家庭保健系统
借助Android良好的人际交互,开发集成智能心率计、血压计等检查项目的嵌入式系统。
3.3 智能电视TV、AR/VR眼镜
就是家里用的互联网电视机顶盒,例如小米、乐视盒子,结合AR技术
需要支持HDMI音视频输出、VGA输出、AV音视频输出、支持网口与WIFi、支持USB设备(鼠标键盘)、支持红外设备(遥控器)等。
3.4 自己定制的平板电脑、手机等
从底层或者上层应用定制自己的移动设备,比如说更改开机界面为你的果照。。
4、裸机开发
“裸奔”挺难的,因为不使用操作系统,不光要整天和芯片datasheet打交道,还要深入处理器架构以及各类存储机制。其实严格意义来讲,我们之前搞单片机也是属于裸机开发。
如果是大神中的大神,上述的一些题目完全也可以用裸机开发出来,我没有奔过,不敢妄自评测,所以只提供几个小题目。
4.1 裸机实现串口通信
4.2 裸机实现DMA方式SD卡读写
4.3 裸机是实现NANDFlash、EEPROM的操作(擦除、读写)
版权声明:本文为CSDN「HowieXue」的原创文章,遵循CC 4.0 BY-SA版权协议