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: