ASK无线是电子系统常用的一种无线遥控/数据传输方式,常用的频段是315MHz和433MHz。这里我用的模块是工作在433MHz的 H3V4F 无线接收模块,体积小,功耗低(工作电流0.28mA),距离远(实测60m有效),价格便宜。在淘宝搜索H3V4F即可买到。建议采购时买配套的天线,虽然不用天线模块仍能使用,但有效距离减少很多。
发送信号采用的是卷帘门遥控器,只有四个键,淘宝上也买得到,注意因为无线模块是433MHz,因此也必须使用433MHz的遥控器。如果想使用无线发射模块,推荐同厂家的433MHz无线发射模块(H34A/H34B)。
无线遥控的优点:
相比于红外遥控,无线电波长短,穿透力强,传播时能能更好得绕过障碍物。因此用无线遥控时不用像红外遥控一样必须对准。
而相比无线网/蓝牙等遥控手段,无线遥控是不存在协议的,对处理能力差的单片机而言不存在维护协议的负担。而且无线网(仅TCP协议)/蓝牙是需要在通信前建立连接的,这对于简单的遥控而言也是不必要的步骤。因此,无线是遥控的最佳解决方案。
对H3V4F无线模块的测试:
1、解码方案:
按H3V4F的厂家提供的DataSheet,无线解码的方案有两种:硬件解码和软件解码
硬件解码使用PT2262芯片实现;软件解码直接使用单片机采集模块的DAT引脚的电平和时序,按厂家设计的时序解析无线信号编码。
本例采用软件解码方案,代码实现了对H3V4F模块时序的解析。
因为商家提供的时序表述不清,我用示波器观察了H3V4F模块在遥控器按动时的波形,写出了Arduino 的解码代码。
2、材料:
Arduino UNO(也可以是其他Arduino)、H3V4F无线接收模块、433MHz卷帘门遥控器、弹簧天线(可选)
3、接线:(模块有两个重复的DAT和两个重复的GND引脚,多余的不接就行。ANT引脚可接弹簧天线,也可不接)
H3V4F | Arduino UNO |
GND | GND |
DAT | 2 |
DAT | 不接 |
VCC | 3.3V |
GND | 不接 |
ANT |
4、代码(Arduino):
/* * H3V4F无线接收模块测试 * 型号: Arduino UNO * 效果: 按动遥控器时,将按键的编码通过串口发送到电脑 */ // H3V4F DAT引脚对应的Arduino 引脚 #define DAT_PIN 2 // 超时时间设为0xffffffff ms,一个很长的时间 #define FOREVER 0xffffffff // 获取下一个无线解码字节 // 参数:pin是H3V4F模块DAT对应的Arduino引脚,timeout是超时时间 // 返回值:若超时时间内接收到了无线信号,则将解码出的字节返回(0~255) ,超时返回-1 int16_t H3V4F_decode(uint8_t pin, uint32_t timeout){ uint32_t t; int16_t stat = -1; do{ for(uint16_t s=0;s!=0xaaaa;s<<=1){ t = pulseIn(pin,HIGH,timeout); if(t==0){ return -1; } if(t>1024){ s = 0; }else if(t>512){ s++; } } stat = 0; for(uint8_t i=0;i<8;i++){ stat<<=1; t = pulseIn(pin,HIGH,3000); if(t==0){ stat = -1; }else if(t>512){ stat++; } } }while(stat==-1); return stat; } void setup() { Serial.begin(9600); pinMode(DAT_PIN, INPUT); //预先设置DAT引脚是INPUT状态 } void loop() { uint8_t code; code = H3V4F_decode(DAT_PIN, FOREVER); //等待下一个解码字节,按下遥控器时函数返回 Serial.println(code); //串口打印遥控器的按键编码 }
5、测试结果
上传程序后,对模块按动遥控器,可以看见按键解码打印在串口上。
我手头的卷帘门遥控器的四个按键编码分别是:3、12、48、192