Portapack应用开发教程(十三)控制遥控小车OOK
最近看到老外在github上找了个rf-car的程序,想往portapack上搬我感觉挺有趣。
想起来以前hackrf.net上有类似教程,对应github上叫做gr-remotecar。
我找出了我自己的遥控车,打算分析一下信号。
流图上半部分是用来收遥控器信号并分析的,下半部分是发射用的,暂时要disable。
我依次按下左前,左后,右前,右后,变形,发射几个按键,得到了几个信号图。
左前: 1011110000100000101111000010000010
左后:000001000010111100000100001011110000010
右前:101111000000000110111100000000011011110
右后:000010001011110000001000101111000000100
变形:111100000001001011110000000100101111000
发射:000111100110000000011110011000000001111
然后,我整理总结了一下:
左前:1011110000100000
左后:1011110000010000
右前:1011110000000001
右后:1011110000001000
变形:1011110000000100
开炮:1111001100000000
多数都是101111开头,相当于是一个preamble,然后后面是好多0加上不同位置有个1,类似one hot。
我可以参考hackrf.net教程用python代码生成iq文件,然后再用gnuradio发射出去。
import structSAMP_RATE=10e6
TIME_TOTAL = int(1 * SAMP_RATE) #sTIME0 = int(0.5e-3 * SAMP_RATE)
TIME1 = int(1.50e-3 * SAMP_RATE)MIN=struct.pack('B',0)
MAX=struct.pack('B',64)'''
10111100001000001:WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0
0:WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1
'''def WriteFrame(value,quantity,f):j = 0while j < quantity:f.write(value) #if.write(value) #qj += 1def main():f = open('w.iq','wb')i = 0WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME1,f)i += TIME1WriteFrame(MIN,TIME0,f)i += TIME0WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1WriteFrame(MAX,TIME0,f)i += TIME0WriteFrame(MIN,TIME1,f)i += TIME1f.close() if __name__ == "__main__":main()
一开始生成出的文件不太对,我先用audacity观察,并调整了MIN和MAX变量,使得波形在合适的大小上。然后把获得的iq文件,用gnuradio读取,一边发射一边接了示波器,但是我对比后发现波形宽度和我之前收的遥控器波形不一样,我通过更改python代码里的SAMP_RATE变量使得实际发射时的波形宽度与遥控器的一样,至于为啥是10e6,我还不知道,我是凑出来的。
然后,这样发射就能控制小车左边的轮子往前转了。
接着我用portapack的ook发射app,编辑了同样的流图。然后我调整了不同的clk频率,调到10kHz左右也能达到同样的效果。
但是不管是电脑发射还是portapack发射或者原来的遥控器发射,除了左轮前进外,还会带动炮台发射。我记得以前左轮右轮同时前进时不会干扰炮台,而且发射的1010序列也跟其他不一样。
我觉得可能用遥控器同时按下前进和后退,还会有新的波形出现。然后我试了试,发现果然如此。
同时前进:1111000010000100
同时后退:1111000001100000
开炮:1111001100000000
可以看到,前导码跟其他按钮不同,是11110000,并且数据位里有2个1.与开炮的码比较接近。
后来我还发现portapack按照右轮前进的信号波形生成,如果clk调到11kHz也能有用,但是10kHz就不行。
我就用gnuradio和另一个hackrf观察了一下portapack发射第一种波形(左轮前进)的到底是怎样的信号
发现波形十分奇怪,但是居然可以控制小车按照我的指令运行。
资料:
链接:https://pan.baidu.com/s/1nlaQSLh8GNlIWKru700xfQ
提取码:wnan
演示视频:
https://www.bilibili.com/video/BV12T4y157GJ/
Portapack应用开发教程(十三)控制遥控小车OOK相关推荐
- Portapack应用开发教程(七)nrf24l01解调
前段时间我在做低功耗蓝牙的时候看到了这个网页 https://wiki.bitcraze.io/misc:hacks:hackrf 但是我当时没有成功解调nrf24l01,反而成功搞定蓝牙了. 后来我 ...
- Portapack应用开发教程(十二) SSTV接收机 A
接下来我要讲一个高难度应用,SSTV接收机. 很多ham都喜欢玩sstv,一般方式都是用一个对讲机来接收地面波或者卫星发出的信号,然后用手机录制对讲机发出来的声音,再把这个录音放到电脑旁边播放来解调( ...
- Portapack应用开发教程(十) 猎狐功能和RSSI数值显示
视频参见:https://www.bilibili.com/video/BV1Y541147Sv 可以看到当我在analog audio的app里,在nfm模式下,我可以点击RSSI按钮,这时候发出的 ...
- Portapack应用开发教程 自定义开机图片
本来想把这个当做开机logo 发现不行,要先转一下图片(整个逆时针旋转2个90度,然后左右翻转),然后尺寸也不对186x248才会比较好(否则会超过范围),另外要调整对比度和亮度,否则可能完全变成黑色 ...
- Portapack应用开发教程(十二) SSTV接收机 B
上一篇帖子代码贴了太多太长了,所以重新开一篇帖子. 我终于把解调和解码程序合并到一起去了. #include <stdio.h> #include <stdint.h> #in ...
- Portapack应用开发教程(十五) APRS接收
APRS功能可以用对讲机来传输数字信息,以便在没有运营商网络的环境下共享位置,实现类似微信的位置共享功能,也可以用它来发短消息. 有人买直接带aprs的对讲机,比较贵.也有人用普通对讲机和手机通过音频 ...
- Portapack应用开发教程(十一) 加入内置麦克风
现在我的portapack已经带内置电池+开关和内置喇叭了,为了使它用起来更像一个对讲机,我打算装一个内置麦克风上去. 其实很久以前星天无线出的老款portapack是带有内置麦克风的,后来新款都把这 ...
- Portapack应用开发教程(十八)NavTex接收 B
解调做完后,我开始研究解码. 我找到了这个资源不错.可以用来解码音频文件里的navtex文字信息. GitHub - pd0wm/navtex: Simple Navtex decoder 它用的ip ...
- Portapack应用开发教程(十七)nrf24l01发射
以前用portapack实现过nrf24l01的接收,接下去想试试发射功能. 我在ymfc-mini-drone week6_future_experiment_哔哩哔哩_bilibili里面讲过gr ...
- Portapack应用开发教程(六)低功耗蓝牙解调
前段时间我本来想解调apc220,这样我可以用portapack接收数传数据,但是这个模块资料太少. 后来我想到其实四轴里也经常用nrf24l01或者低功耗蓝牙来做数传,这两种模块也都是fsk.而且更 ...
最新文章
- tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。...
- c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
- webpack 打包ts项目_使用webpack打包ts
- step1 . day1:工具准备
- kibana安装与Kibana server is not ready yet
- 记录平时编程或者阅读英文文档的时候不认识的英文单词
- BZOJ 2460: [BeiJing2011]元素 线性基
- 赛锐信息-AMS系列产品简介
- 【IT】IT专业术语
- Linux配置手册(五)Linux 配置域名服务器(DNS)
- jsp usebean_JSP动作标签– jsp useBean,包含,转发
- python安装requests库提示更新_解决已经安装requests,却依然提示No module named requests问题...
- Java发送邮件换行问题
- 0x00007FFC4480532C(opencv_world310.dll)处(位于opencv-024.exe中)引发的异常:OxC0000005:读取位置0xFFFFFFFFFF时发生访问冲突
- 一个40岁老程序员的2022年中总结 - 四十不惑,不忘初心
- 计算机桌面左侧在显示器里面,电脑屏幕显示偏左怎么解决
- 正则验证汽车车牌号,包括新能源
- C语言中的绝对值函数
- Java 删除文件/文件夹
- windows连接蓝牙失败
热门文章
- cousera视频无法加载
- 什么叫做股票实时行情接口api?
- schedule-调度器
- IntelliJ Idea 常用快捷键
- linux命令cd 什么意思,Linux命令 cd ./.是什么意思
- 支持iCloud的html文本编辑,人人都可用 iCloud网页版iWork完全开放
- 云栖大会day2总结 上午
- 区块链专家洪蜀宁:实现全民普惠的专业化产品设计 | 11月24日【区块链技术与实践】论坛...
- linux常用的引导管理器,Linux引导管理器GRUB、GRUB 2和LILO简介
- linkinfo.dll 病毒,烦!