433M RF无线模块详解
现在智能家居越来越火了,自己在家拍个无线模块就能动手实现智能家居了。下面在网上找到了个关于433Mhz无线模块的详解和lib - RCSwitch程序。
433射频模块介绍:
当发射电压为3V时,空旷地传输距离约20~50米,发射功率较小,当电压5V时约100~200米,当电压9V时约300~500米,当发射电压为12V时,为最佳工作电压,具有较好的发射效果,发射电流约60毫安,空旷地传输距离700~800米,发射功率约500毫瓦。外接天线:10cm(发射模块天线:10cm,接收模块天线:30cm)多芯或单芯普通导线。
图片是科视连研发的433Mhz无线接收发射模块。
EN ASK VCC GND
在实际测试中接根天线,传输距离可达到5米以上非常稳定。433Mhz无线发射模块的穿墙效果比2.4G模块更好。
模块的接线方法很简单:
发射模块:
接收模块:
程序使用RCSwitch附带示例修改,传感器值使用随机数替代。
传输思路是将24bit的值分开,前12位为传感器ID,后12位为传感器值,12bit,可以到4096,应该够用了。
其他的控制编码器的例子还没有试,下次测试好了再来。
发射端程序:
#include接收端代码:RCSwitch mySwitch = RCSwitch(); // 延时 ms const unsigned long interval = 10000; uint32_t temp; unsigned long last_sent; // 传感器数量和ID int seID_NUM = 5; int8_t seID[] = {1,2,3,4,5}; int i = 0; void setup() { Serial.begin(57600); //输出脚为 Arduino Pin #10 mySwitch.enableTransmit(10); // 随机数种子 randomSeed(analogRead(0)); } void loop() { unsigned long now = millis(); if ( now - last_sent >= interval ) { last_sent = now; // 产生随机数用于模拟 temp = random(0,50); Serial.print("SID: "); Serial.print(seID[i]); Serial.print(" | "); Serial.print("TMP: "); Serial.println(temp); // seID[i]为传感器ID,b为传感器ID左移值,a为传感器id和值的组合值 unsigned a,b; // 传感器ID值左移12位 b = seID[i] << 12; a = b | temp; Serial.println(a,BIN); Serial.println(a); // 发送 mySwitch.send(a, 24); i++; if (i == seID_NUM) i = 0; } }
#include在lib中有个代码需要修改,不然会接收到4个重复的值。RCSwitch mySwitch = RCSwitch(); int i; void setup() { Serial.begin(57600); // 中断0使用2脚,终端1使用3脚 mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { int value = mySwitch.getReceivedValue(); i++; if (value == 0) { Serial.print("Unknown encoding"); } else { Serial.print("Received "); Serial.print(i); Serial.print(" / "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); // 处理接收值 unsigned sid,tmpval; // 传感器ID右移12位 sid = value >> 12; // 数值 tmpval = value & 4095; Serial.println(value,BIN); Serial.println(tmpval,BIN); Serial.print("SID: "); Serial.print(sid); Serial.print(" | "); Serial.print("TMP: "); Serial.println(tmpval); } mySwitch.resetAvailable(); } }
void RCSwitch::handleInterrupt() { if (repeatCount == 6) { // 需要将 2改为 6repeatCount == 2 if (receiveProtocol1(changeCount) == false){ if (receiveProtocol2(changeCount) == false){ if (receiveProtocol3(changeCount) == false){ //failed } } } repeatCount = 0; } }
RCSwitch程序下载
- 上一篇:433Mhz 的遥控距离和315Mhz相差很大吗 2015/6/29
- 下一篇:433Mhz无线接收模块KSL101规格书 2015/6/5