最好的电子音响科技diy制作网站

haoDIY创好电子音响电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > 综合DIY >

基于安卓的视频遥控小车(2)

时间:2022-05-26 14:01来源:mbb.eet-china.com 作者:RoachWZ 点击:
我从网上搜了好多解决方案,智能手机是开发完成的产品,留出的接口不多,也只有USB口和耳机口: 一,用手机的USB口,但我发现酷派8076D不支持OTG,然后又从网上搜说是厂家只是删除了配置文件,我试了试,还是不行,
基于安卓的视频遥控小车基于安卓的视频遥控小车基于安卓的视频遥控小车 基于安卓的视频遥控小车
我从网上搜了好多解决方案,智能手机是开发完成的产品,留出的接口不多,也只有USB口和耳机口:
一,用手机的USB口,但我发现酷派8076D不支持OTG,然后又从网上搜说是厂家只是删除了配置文件,我试了试,还是不行,它硬件上应该也没有升压电路(手机电池一般3.7V,USB是5V供电)。这部分参考使用android IOIO和安卓手机制作视频遥控小车(控制灯的开关、实时视频传输、方向控制)
二,用耳机口,这个网上也有例子一文读懂Android/iOS手机如何通过音频接口与外设通信,他这种方案是双工通信,但这个吧,涉及到信号处理,和数学打交道,鄙人数学渣渣。再者得买个这种外设,no money啊。然后我之前研究过遥控精灵(ZaZaRemote),不支持红外遥控的手机,在耳机孔插个红外发射头(smart zaza)就行了。这种方案是单工通信,小车配套上红外一体化接收头就可以遥控小车移动。不过不同手机的耳机口驱动力不一样,有的驱动不了红外发光二极管(压降1.4V左右),我的酷派就驱动不了,我直接把二极管接在手机喇叭上。
基于安卓的视频遥控小车
最后,选择了音频口发射红外信号这种方案。其实造车之前,就开始在研究红外了,那会儿考四六级和期末英语考试都是用的红外耳机,就想着期末英语怎么作弊(^_−)☆,因为听力就是课本上的。教室有个红外发射器,后来查了些资料发现就是音频范围,把喇叭拆了接上红外发光二极管,就能用红外耳机听到声音。不过没用在作弊上,因为功率太小了(酷派手机喇叭改的),盖不过教室的。
音频转红外这块,我还没做好,我只是录了红外遥控信号的音频文件,然后播放。但我发现准确率大概只有八成,感觉这东西涉及到傅里叶变换,音频是正弦波,红外信号是方波,直接用音频驱动是有误差的吧,我也不是很懂,数学不好。网上我搜到这篇是用安卓实现的安卓手把手教你学习并实现 安卓耳机口音频转红外发射,但我是用底层C语言实现的,用的C4droid写的在手机上运行,参考的这篇 OpenSL ES范例,无java代码,纯C
再后来,OPPO A51不用了,就把它用在小车上。OPPO A51支持红外遥控,所以不用那么麻烦。参考这篇Android编程红外编程——红外码详析
单片机红外解码程序参考Android遥控器开发,这个后边有单片机红外解码程序。
基于安卓的视频遥控小车
因为Android4.4及以上才有ConsumerIrManager类用来操控红外设备,所以以下程序是基于Android 5.1系统的OPPO A51手机开发和测试的。
首先从系统服务中获取到ConsumerIrManager服务。
IR=(ConsumerIrManager)getSystemService(CONSUMER_IR_SERVICE);基于安卓的视频遥控小车
然后将要发送的红外码存入数组中
//0x73    int[] pattern2 = { 9000, 4500,             560, 560,     560, 560,     560, 560,     560, 560,     560,560,     560, 560,     560, 560,     560, 560,             560, 1690,     560, 1690,     560, 1690,    560, 1690,     560, 1690,     560, 1690,     560, 1690,     560, 1690, /*0001 1000*/560, 560,    560, 560,     560, 560,     560, 1690,     560, 1690,     560, 560,     560, 560,     560, 560,             560, 1690,     560, 1690,     560, 1690,     560, 560,     560, 560,     560, 1690,     560, 1690,     560, 1690,             560, 42020, 9000, 2250, 560, 98190 };基于安卓的视频遥控小车
一种交替的载波序列模式,通过毫秒测量
引导码,地址码,地址码,数据码,数据反码
第三行数据码反置,比如0x12=0001 0010反置为 0100 1000
可能和接收有关系,只有反置了之后才能接收正常
最后通过如下方法最终发送红外信号。
mCIR.transmit(hz, pattern2);//后 基于安卓的视频遥控小车
transmit(int carrierFrequency, int[] pattern)  :此方法控制手机产生 carrierFrequency为频率的,以pattern为红外开关的时间数组,发送红外信号。(例如:transmit(38000,{100,200,300,400})    将会产生一个频率为38KHz的红外信号,信号的电平高低为 100us高电平,200us低电平,300us高电平,400us低电平。注意pattern的数据个数要为偶数个,不然报错。)。
手机端红外发射功能的程序流程图如下图所示。
基于安卓的视频遥控小车
还可以参考以下链接
我也DIY一个Android遥控器-全部开源
手机当万能遥控器-自制“遥控精灵”外设
http://compeition-excute.oss-cn-beijing.aliyuncs.com/webFile/2019512/600c821e61d811e9bb8a00163e040299/9qkYa1X9_1557635749829.mp4
基于安卓的视频遥控小车的安卓程序能够使用手机后置摄像头实时地将手机拍到的图像传送到电脑端,同时接收电脑端发出的指令。根据电脑的指令手机再发送相应的红外遥控信号给小车,手机安卓程序主要是实现自定义相机、实时视频传输和红外信号传输等功能。
开发环境用的是ADT Bundle,集成了Eclipse、ADT插件和SDK Tools,安装好JDK即可开始开发,方便使用者进行相关的应用开发。
基于安卓的视频遥控小车基于安卓的视频遥控小车 基于安卓的视频遥控小车 基于安卓的视频遥控小车
一、摄像头
手机端的摄像头采集到的原始数据数据是YUV格式。建立YuvImage对象image用来存储YUV格式的原始数据。原始数据太大,需要再通过调用image.compressToJpeg()将YUV格式图像数据转为jpg格式。然后启动发送线程,通过socket将每一帧的图像发送到电脑端接收,电脑窗体再一帧一帧播放,形成视频效果。
由于时间不足,所以没有再花时间去学习相关的视频流处理原理和技术。在此使用的是动画播放原理。在基于安卓的视频遥控小车——电脑端开发也说到了,实时视频是通过电脑窗体一帧一帧播放图片,形成视频动画效果。摄像头采集到的是最低分辨率,这样每一帧图像的数据量就小了,延迟也就下去了。
手机端实时视频功能的程序流程图如下图所示。
基于安卓的视频遥控小车
下面来对主要步骤进行详细介绍。
对于摄像头的操作实际上是安卓自定义相机开发。直接控制相机,比调用系统相机要难一些。首先要访问相机资源,打开摄像头的语句如下。
Camera.open(id);
Id表示摄像头的编号,后置摄像头为0,前置摄像头为1。在调用open()时不传入参数指定打开哪个摄像头,默认是0。
摄像头采集到的原始数据是YUV格式的数据,结构如下,其参数作用如下表所示。
YuvImage image = new YuvImage(byte[] yuv,
int format,
int width,
int height,
int[] strides);

参数
类型
作用
yuv
byte
YUV数据。在多个图像平面的情况下,所有平面必须连接成单个字节数组。
format
int
YUV数据格式,如ImageFormat。
width
int
YuvImage的宽度。
height
int
YuvImage的高度。
strides
int
(可选)每个图像平面的行字节。如果yuv包含填充,则必须提供每个图像的步幅。如果strides为null,则该方法假定没有填充,并按格式和宽度本身派生行字节。
(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
广告位API接口通信错误,查看德得广告获取帮助
推荐内容
广告位API接口通信错误,查看德得广告获取帮助