Tutorial de desenvolvimento de aplicativos Portapack (13) Controlando o carro de controle remoto OOK

 Recentemente, vi que um estrangeiro encontrou um programa de rf-car no github e me senti muito interessante se quisesse movê-lo para o portapack.

Lembre-se de que havia um tutorial semelhante no hackrf.net antes, que corresponde ao gr-remotecar no github.

Encontrei meu próprio carro com controle remoto e pretendo analisar o sinal.

A parte superior do fluxograma é usada para receber e analisar o sinal do controle remoto, e a parte inferior é usada para transmissão, desative-o temporariamente.

Pressionei a frente esquerda, traseira esquerda, frente direita e traseira direita por sua vez, deformei, disparei vários botões e obtive vários diagramas de sinais.

Frente à esquerda: 1011110000100000101111000010000010

Traseira esquerda: 000001000010111100000100001011110000010

Frente direita: 101111000000000110111100000000011011110

Traseira direita: 000010001011110000001000101111000000100

Deformação: 111100000001001011110000000100101111000

Lançamento: 000111100110000000011110011000000001111

Então, eu resumi:

Esquerda dianteira: 1011110000100000
Esquerda traseira : 1011110000010000 Direita
dianteira: 1011110000000001 Direita traseira
: 1011110000001000
Deformação: 1011110000000100 Fotos
: 1111001100000000

A maioria deles começa com 101111, que é equivalente a um preâmbulo, seguido por muito 0 mais 1 em posições diferentes, semelhante a um quente.

Posso consultar o tutorial hackrf.net para gerar arquivos iq com código python e, em seguida, usar gnuradio para iniciá-los.

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()

O arquivo gerado no início não estava certo, primeiro observei com audácia, e ajustei as variáveis ​​MIN e MAX para fazer a forma de onda no tamanho certo. Então li o arquivo iq obtido com gnuradio e conectei o osciloscópio durante a transmissão, mas depois de compará-lo, descobri que a largura da forma de onda é diferente da forma de onda do controle remoto que recebi antes. Mudei a variável SAMP_RATE no código python para fazer a transmissão real A largura da forma de onda é a mesma do controle remoto. Por que é 10e6, ainda não sei, resolvi.

Então, este lançamento pode controlar a roda à esquerda do carro para virar para frente.

Então eu usei o ook do portapack para iniciar o aplicativo e editei o mesmo gráfico de fluxo. Em seguida, ajustei uma frequência de clk diferente e o mesmo efeito pode ser obtido ajustando-o para cerca de 10kHz.

Mas seja um lançamento de computador ou um lançamento de portapack ou o lançamento de controle remoto original, além do revólver para a frente, ele também impulsionará a torre para o lançamento. Lembro que quando as rodas esquerda e direita avançavam ao mesmo tempo, elas não interferiam na torre, e a sequência 1010 lançada também era diferente das demais.

Acho que é possível usar o controle remoto para pressionar para frente e para trás ao mesmo tempo, e novas formas de onda aparecerão. Então tentei e descobri que era o caso.

Avançar simultaneamente: 1111000010000100 Retroceder
simultaneamente: 1111000001100000

Demitido: 1111001100000000

Pode-se ver que o código inicial é diferente dos outros botões, é 11110000, e existem dois 1. no bit de dados, está próximo ao código para disparar o tiro.

Mais tarde, também descobri que o portapack é gerado de acordo com a forma de onda do sinal da roda direita para a frente. Pode ser útil se clk estiver ajustado para 11kHz, mas 10kHz não.

Usei gnuradio e outro hackrf para observar que tipo de sinal o portapack emite a primeira forma de onda (girando para frente)

Achei a forma de onda muito estranha, mas posso realmente controlar o carro para funcionar de acordo com minhas instruções.

dados:

Link: https://pan.baidu.com/s/1nlaQSLh8GNlIWKru700xfQ 
Código de extração: wnan 
 

Vídeo de demonstração:

https://www.bilibili.com/video/BV12T4y157GJ/

Acho que você gosta

Origin blog.csdn.net/shukebeta008/article/details/107954986
Recomendado
Clasificación