欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Portapack应用开发,控制遥控小车OOK

程序员文章站 2022-07-03 09:03:22
最近看到老外在github上找了个rf-car的程序,想往portapack上搬我感觉挺有趣。想起来以前hackrf.net上有类似教程,对应github上叫做gr-remotecar。我找出了我自己的遥控车,打算分析一下信号。流图上半部分是用来收遥控器信号并分析的,下半部分是发射用的,暂时要disable。...

Portapack应用开发,控制遥控小车OOK

最近看到老外在github上找了个rf-car的程序,想往portapack上搬我感觉挺有趣。

想起来以前hackrf.net上有类似教程,对应github上叫做gr-remotecar。

我找出了我自己的遥控车,打算分析一下信号。

Portapack应用开发,控制遥控小车OOK

流图上半部分是用来收遥控器信号并分析的,下半部分是发射用的,暂时要disable。

我依次按下左前,左后,右前,右后,变形,发射几个按键,得到了几个信号图。

Portapack应用开发,控制遥控小车OOK

左前: 1011110000100000101111000010000010

Portapack应用开发,控制遥控小车OOK

左后:000001000010111100000100001011110000010

Portapack应用开发,控制遥控小车OOK

右前:101111000000000110111100000000011011110

Portapack应用开发,控制遥控小车OOK

右后:000010001011110000001000101111000000100

Portapack应用开发,控制遥控小车OOK

变形:111100000001001011110000000100101111000

Portapack应用开发,控制遥控小车OOK

发射:000111100110000000011110011000000001111

然后,我整理总结了一下:

左前:1011110000100000
左后:1011110000010000
右前:1011110000000001
右后:1011110000001000
变形:1011110000000100
开炮:1111001100000000

多数都是101111开头,相当于是一个preamble,然后后面是好多0加上不同位置有个1,类似one hot。

我可以参考hackrf.net教程用python代码生成iq文件,然后再用gnuradio发射出去。

import struct

SAMP_RATE=10e6
TIME_TOTAL = int(1 * SAMP_RATE) #s

TIME0 = int(0.5e-3 * SAMP_RATE)
TIME1 = int(1.50e-3 * SAMP_RATE)


MIN=struct.pack('B',0)
MAX=struct.pack('B',64)

'''
1011110000100000

1:
    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0
0:
    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1
'''

def WriteFrame(value,quantity,f):
    j = 0
    while j < quantity:
        f.write(value) #i
        f.write(value) #q
        j += 1

def main():
    f = open('w.iq','wb')

    i = 0

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME1,f)
    i += TIME1
    WriteFrame(MIN,TIME0,f)
    i += TIME0

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    WriteFrame(MAX,TIME0,f)
    i += TIME0
    WriteFrame(MIN,TIME1,f)
    i += TIME1

    f.close()        

if __name__ == "__main__":
    main() 

一开始生成出的文件不太对,我先用audacity观察,并调整了MIN和MAX变量,使得波形在合适的大小上。然后把获得的iq文件,用gnuradio读取,一边发射一边接了示波器,但是我对比后发现波形宽度和我之前收的遥控器波形不一样,我通过更改python代码里的SAMP_RATE变量使得实际发射时的波形宽度与遥控器的一样,至于为啥是10e6,我还不知道,我是凑出来的。

然后,这样发射就能控制小车左边的*往前转了。

接着我用portapack的ook发射app,编辑了同样的流图。然后我调整了不同的clk频率,调到10kHz左右也能达到同样的效果。

Portapack应用开发,控制遥控小车OOK

但是不管是电脑发射还是portapack发射或者原来的遥控器发射,除了左轮前进外,还会带动炮台发射。我记得以前左轮右轮同时前进时不会干扰炮台,而且发射的1010序列也跟其他不一样。

我觉得可能用遥控器同时按下前进和后退,还会有新的波形出现。然后我试了试,发现果然如此。

同时前进:1111000010000100
同时后退:1111000001100000

开炮:1111001100000000

可以看到,前导码跟其他按钮不同,是11110000,并且数据位里有2个1.与开炮的码比较接近。

后来我还发现portapack按照右轮前进的信号波形生成,如果clk调到11kHz也能有用,但是10kHz就不行。

Portapack应用开发,控制遥控小车OOK

我就用gnuradio和另一个hackrf观察了一下portapack发射第一种波形(左轮前进)的到底是怎样的信号

Portapack应用开发,控制遥控小车OOK

发现波形十分奇怪,但是居然可以控制小车按照我的指令运行。

资料:

链接:https://pan.baidu.com/s/1nlaQSLh8GNlIWKru700xfQ
提取码:wnan

本文地址:https://blog.csdn.net/shukebeta008/article/details/107954986

相关标签: Portapack