315Mhz、433Mhz无线遥控信号的解码分析和模拟

简介:

摘要

前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择。于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等,同时看到了315M超再生模块,因为玩无线电的都知道315M是汽车遥控器,防盗闸门,路桥系统等最常用的信号频率,所以我就毫不犹豫的下单了。然后就有了今天的成果。Freebuf也有不少此类文章,关于315,433的解码我已掌握很多方法(其实使用SDR是个不错的选择),对滚码我也有一定研究和破解,本文步骤详细,思路明确,希望对大家有用。对arduino和315模块熟悉的可以直接进入第三步。

关键词:315M超再生模块、arduino。

引言:315MHz遥控器使用广泛,学习和深入了解其原理和实际操作,在获得无限乐趣的同时,可以学会防止自己的车被盗,并可以自己开发更安全的遥控锁设备,在做本项目的过程中我深刻体会到315M遥控系统的不安全性是个严重的问题,主要表现在315遥控系统解码简单,发射条件简单,易拷贝。下面是我在此次学习研究中得到的一些浅陋知识,在此详细描述。

以下是本次学习的原理框架:

框图说明:接收端接收信号,由arduino单片机解码,并将解码信息通过蓝牙发送到手机,在手机蓝牙串口监视器显示(解码过程);手机发送24位遥控码到单片机,单片机将24位遥控码通过发射端发出,用于遥控模拟接收端通过接收端PT2272芯片解码后在LED信号灯得到反馈,模拟接收端由单片机直接供电,发射端发出的信号也可直接有其他遥控接收端接收达到其他目的。

一、基础知识介绍:

1、Arduino介绍:

Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队最早于2005年冬季开发。其成员包括Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis和Nicholas Zambetti。

它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。

Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。(摘自百度百科)

二、硬件介绍:

1、Arduino开发板

Arduino是开源硬件中最受IT行业,技术宅,学生喜爱的单片机开发板,其编程语言使用C语言,并且不像C51单片机的编程语言那么复杂,所以对于单片机的初学者来说无疑是最好的选择,本课题为简化实验流程,缩短开发时间,所以选择了简单却强悍的arduino单片机开发板,arduino开发板有很多硬件平台,常见的 arduino有以下两种:

(1) arduino UNO (是本文使用的arduino板卡) (2)arduino NANO

2、315M模块如图所示,分为发送端(右)和接收端(左)。

3、用于模拟的遥控器和接收机

发射模块PT2262

接收模块PT2272

4、串口蓝牙模块

串口蓝牙模块直接使用蓝牙设备连接并通过接收ASCII码并以串口数据的形式传送至单片机,单片机将数据处理后做出固定反馈,型号为HC-06的蓝牙串口模块的默认名称为“ HC-06“,默认连接密码为“0000”,手机使用蓝牙调试助手等APP 可直接连接并可与手机直接通信,arduino单片机可直接与电脑进行串口通讯,但为了随时演示操作,使用手机直接通讯使操作更为方便,HC-06实物图如下:

三、解码和模拟

1、连接实物图:

实物图说明:左上角是蓝牙模块HC-06用于手机端连接控制,左边是315接收解码板以及配备遥控器,解码板由arduino 供电,连接了5个LED信号灯用于接收的演示,中间是315M超再生模块的发送端和接收端 ,右边是arduino UNO 开发板。

2、315M超再生模块的发送端和接收端连接原理图

3、模拟测试效果描述:

串口发送A,B,C,D控制发送单次24位遥控二进制码,实现LED编号A,B,C,D的闪烁;

串口发送a,b,c,d控制连续发送24位遥控二进制码,实现LED编号A,B,C,D的常亮。

串口发送除以上任意命令实现LED的关闭。

四、解码验证及源代码

1、解码验证

当按下遥控器A键

●手机串口监视器得到的遥控码为

010101010101010100001100

●专业解码器显示的遥控码如下图,实际为24位码(我开始认为最后一位为解码器设计问题所导致的多余位,没有最后一位也可以重放,但后来的学习中我发现好多解码方式都保留了最后一位,实际的信号波形中并没有最后一位的高电平出现,所以第25位应该是“0”,对于这个问题我还是有疑惑,希望大家帮忙解释)

●逻辑分析仪分析结果

根据以上三组数据对比,验证单片机解码没有任何问题。

2、arduino源代码如下:

复制代码
/*本作品使用的例程中包含RCSwitch库文件用于信号的解码和编码发送*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
  Serial.begin(9600);
//串口打印命令帮助信息
 Serial.print("HELP:A-flash the lamp A\n     B-flash the lamp B\n     C-flash the lamp C\n     D-flash the lamp D\n");
  Serial.print("     a-open the lamp A\n     b-open  the lamp B\n     c-open the lamp C\n     d-open  the lamp D\n\n");
    mySwitch.enableReceive(1);
  mySwitch.enableTransmit(10);}2
void loop()
{
    if(mySwitch.available())
    {
    output(mySwitch.getReceivedValue(),mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(),mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
   mySwitch.resetAvailable();
    }
  /* Same switch as above,but using binary code */
  if(Serial.available()>0)//如果串口有数据进入的话
  { delay(10);           //延时50 可以一次性发送多个命令
   char M=Serial.read();//每次读一个字符,是ASCII码的
   if(M=='A')
    {
  Serial.print("Thecommand is A\n");
 mySwitch.send("010101010101010100001100");//遥控器-A
  Serial.print("      OK!!! The LED A has been DONE\n");
    }
       if(M=='a')
    {
     Serial.print("The command is a\n");
     Serial.print("      OK!!! TheLED A has hlod ON\n");
     while(Serial.available()<=0)
      {
      mySwitch.send("010101010101010100001100");//遥控器-A 按下不放
      }
    }
  if(M=='B')
    {
  Serial.print("Thecommand is B\n");
 mySwitch.send("010101010101010111000000");//遥控器-B
  Serial.print("      OK!!! The LED B has been DONE\n");
    }
     if(M=='b')
    {
     Serial.print("The command is b\n");
      Serial.print("      OK!!! The LED B has hlod ON\n");
     while(Serial.available()<=0)
      {
      mySwitch.send("010101010101010111000000");//遥控器-B 按下不放
      }
    }
  if(M=='C')
    {
  Serial.print("Thecommand is C\n");
 mySwitch.send("010101010101010100000011");//遥控器-C
  Serial.print("      OK!!! The LED C has been DONE\n");
    }
         if(M=='c')
    {
     Serial.print("The command is c\n");
     Serial.print("      OK!!! TheLED C has hlod ON\n");
     while(Serial.available()<=0)
      {
      mySwitch.send("010101010101010100000011");//遥控器-C按下不放
      }
    }
  if(M=='D')
    {
  Serial.print("Thecommand is D\n");
 mySwitch.send("010101010101010100110000");//遥控器-D
  Serial.print("      OK!!! The LED D has been DONE\n");
    }
         if(M=='d')
    {
     Serial.print("The command is d\n");
     Serial.print("      OK!!! TheLED D has hlod ON\n");
     while(Serial.available()<=0)
      {
      mySwitch.send("010101010101010100110000");//遥控器-D按下不放
      }
    }
  }
}
复制代码

在整个过程中为了研究方便用到汽车遥控码解码器,以方便对本次实验解码的正确性进行校验。

参考文献:

[1] Steven F.Barrett. arduino高级开发权威指南.2,机械工业出版社:潘鑫磊,2014年

[2] 网络资料


本文转自 K1two2 博客园博客,原文链接:http://www.cnblogs.com/k1two2/p/5551714.html   ,如需转载请自行联系原作者

相关文章
|
数据采集 C语言
单片机开发之ADC0808/9信号采集
本文主要介绍了单片机开发之ADC0808/9信号采集
504 0
单片机开发之ADC0808/9信号采集
|
7天前
|
数据采集 算法 索引
基于DSP的数字信号频率分析
基于DSP的数字信号频率分析
19 3
|
8月前
MCU ADC如何测量超过VCC的电压?
MCU ADC如何测量超过VCC的电压?
|
7月前
|
传感器 芯片
MCU实现对外部脉冲信号的计数功能
MCU实现对外部脉冲信号的计数功能
26 1
|
8月前
|
安全 芯片
单片机检测220V交流电通断电路
单片机检测220V交流电通断电路
|
11月前
|
传感器
STM32 AHT10温湿度传感器数据
STM32 AHT10温湿度传感器数据 机智云传输温湿度
160 0
|
传感器 芯片
可编程 USB 转串口适配器开发板与振弦传感器测量模块
当通过 IIC 接口修改 VM5xx 单个寄存器后,被修改的寄存器立即保存(断电不丢失),但连续寄存器的写入仅当时修改生效,模块重启后会自动恢复。为了能够使寄存器永久保存,可以单独向功能寄存器 03 写入指令码 0x000C 来强制保存所有寄存器。
可编程 USB 转串口适配器开发板与振弦传感器测量模块
|
12月前
|
传感器 芯片
基于51单片机的智能热水器STC89C52水位检测传感器DS18B20温度探头传感器
基于51单片机的智能热水器 由STC89C52单片机+水位检测传感器+DS18B20温度探头传感器+按键模块+继电器模块+报警及指示模块+LCD1602显示模块+电源构成。 具体功能: 1、LCD1602显示屏第一行显示温度及定时时间,第二行显示温度上限和下限值; 2、按键可以设置温度的上下限值及定时时间;定时时间到开始加热 3、用两个水位检测传感器检测水位:当水位下限传感器检测到有水时,继电器开始控制加水;当水位上限传感器检测到有水时,停止加水; 4、当温度低于设置的下限温度值时,继电器开始控制加热;当温度高于设置的上限温度值时,停止加热。
108 0
|
12月前
|
算法 机器人 芯片
利用单片机PWM信号占空比进行舵机控制
基于单片机的舵机控制方法具有简单、精度高、成本低、体积小的特点,并可根据不同的舵机数量加以灵活应用。
182 0
|
芯片
【STC15单片机】 超声波模块的使用
【STC15单片机】 超声波模块的使用
277 0