自发电遥控器遥控台灯

感谢 DFRobot 提供的自发电无线开关试用(TEL0146)。这个开关和其他模块最大的差别在于:它本身无需外部供电即可工作。基本原理是:在按下开关的时候,按键会推动磁铁在线圈中发电,虽然能量很小但是足以让CMT2156B这个OOK编码发射芯片进行工作(这个模块使用了CMT2156B芯片,它 是一款针对微能量收集并进行发射的单芯片,内嵌可配置编码的高性能OOK 射频发射器,支持240 至960 MHz 的能量收集无线发射的应用。该芯片集成的编码器兼容市面上最常用的527、1527、2262 和2240 等编码格式,还支持用户各种自定义编码)。这样就能够设计出完全不需要外部供电和电池的无线设备。

DFRobot快递包裹包装中还有一个接收模块(TEL0142)和一把PCB 格尺:

使用这个自发电无线开关的第一个作品是遥控台灯。除了无线开关,还用到了下面这个数字无线开关接收端(TEL0142)。

这个接收模块带有三个引脚,分别是 VCC/GND、SIGNAL。正常配对之后SIGNAL 会跟随自发电无线开关按键发生变化。收到数据后,SIGNAL Pin 会从低变高,之后会再次变低。这个模式称为“点动模式”。此外还有三个不同的模式,具体可以在 WIKI 上看到【参考1】。接收模块使用 IO2对ESP32输入。

模式说明
锁存D0收到一次信号后就一直保持高电平,直到D1~D3收到信号
自锁D0每收到一次信号,对应的输出状态就反转一次,D1~D3同理
点动D0收到信号输出高电平,没有收到信号低电平,D1~D3同理
互锁D0收到信号,D0就保持高电平,其余全部低电平,D1~D3同理

实验试用 ESP32 FireBeetle 作为主控端。此外,还使用了一个淘宝上购买的433Mhz模块作为发送端,这个发送模块在另外一篇文章有所介绍【参考2】,模块使用 IO17作为发送数据Pin。

代码非常简单,当发现 IO2为低,并且距离上一次拉低超过2秒,就发送控制433Mhz无线开关的命令,从而达到自发电无线开关遥控的目的。

#include <RCSwitch.h>
RCSwitch mySend = RCSwitch();

void setup() {
  pinMode(2,INPUT_PULLUP);
  Serial.begin(115200);
  mySend.enableTransmit(17);
  
  // Optional set protocol (default is 1, will work for most outlets)
   mySend.setProtocol(1);  
}

long int Elsp=0;
boolean  OnFlag=false;

void loop() {
  if ((millis()-Elsp>2000)&&(digitalRead(2)==HIGH)) {
      Serial.print("Fire");
      if (OnFlag) {
          // 开
          mySend.send(16529064, 24);
          Serial.println("Send on command");
        }
      else {
          // 关
          mySend.send(16529060, 24);
          Serial.println("Send off command");
        }  
      OnFlag=!OnFlag;
      Elsp=millis();
    }
}

参考:

  1. https://wiki.dfrobot.com.cn/_SKU_TEL0140orTEL0142_Gravity_%E6%95%B0%E5%AD%97%E9%87%8F%E6%97%A0%E7%BA%BF%E5%BC%80%E5%85%B3
  2. https://mc.dfrobot.com.cn/thread-313862-1-1.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注