【发布时间】:2017-05-23 18:54:30
【问题描述】:
我对 arduino 主题相当陌生,并尝试让一些东西一起工作。
首先我尝试设置一个可以通过 PWM 控制的直流电机,它在单独使用时可以完美运行。我可以根据发送到 PWM 引脚的值启动/停止电机并改变速度。
其次,我尝试使用 RF-5V 无线接收器与远程开关电源插座的遥控器配合使用。对于这个,我按照how to build a 433mhz sniffer 上的说明进行操作。 这一切本身也有效。根据我按下的遥控器上的键,我可以接收不同的代码。
现在有趣的部分开始了:我想将两个项目整合为一个,这样我就可以使用遥控器来启动/停止电机。 所以我想出了以下电路:
(感谢你们中的一些人指出电路与草图不匹配。我在绘图时出错,但即使将电缆连接到正确的引脚,它也可以按描述工作)
以及以下代码(部分来自上述说明):
#include <RCSwitch.h>
// init 433MHz lib
RCSwitch mySwitch = RCSwitch();
unsigned long lOldValue=0; // to check for consecutive reads on 433MHz
int motorPin = 5; // PWM-Pin to use for motor
void setup()
{
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
// set-up rf receiver
mySwitch.enableReceive(0); // 433MHz Receiver on interrupt 0 => that is pin #2
}
void loop()
{
if (mySwitch.available())
{
int value = mySwitch.getReceivedValue();
// only react, if at least two times same value received
if (value == lOldValue)
{
if (value == 0)
{
Serial.print("Unknown encoding");
}
else
{
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
// One of the keys on the remote
if (value == 274393) {
Serial.println("got start code, starting motor");
analogWrite(motorPin, 100); // start the motor
}
// another key on the remote
if (value == 270384) {
Serial.println("got stop code, stopping motor");
analogWrite(motorPin, 0); // stop the motor
}
}
}
lOldValue = value;
mySwitch.resetAvailable();
}
}
当我运行代码并单击遥控器时,我会根据我按下的键显示不同的值。所以无线接收器按预期工作。
当我收到启动电机的正确值时,电机真的开始转动,所以这也有效。
有趣的部分从这里开始: 一旦我使用模拟写入功能将数据发送到电机所连接的 PWM 端口,无线接收器就会停止工作(或者至少在按下遥控器上的键时我没有得到更多值)。
我在网上找到了一些类似的帖子/问题描述,说尝试以下:
- 为 PWM 使用另一个引脚(由于可能的中断冲突)。我也试过了,同样的行为
- 使用外部电源代替 USB 电缆,这有助于解决此问题。不在这里。也不行
所以问题是: 有人知道如何将这两个东西结合在一起,以便可以使用无线接收器获取命令并用它打开/关闭电机吗?
【问题讨论】:
-
如果您断开电机,离开相同的程序,并可能在电阻上放置一个 LED,这能解决问题吗?如果解决了,问题要么是功率不足,要么是噪音。您可以通过从外部为电路供电来解决第一个问题(尝试使用台式电源,然后您可以尝试使用单个电池,但只需在开始设计之前确认这一点)。如果是噪音,在电机电源旁边放一个电容(越大越好,至少几百微法)。
-
@frarugi87 有趣的是,当我没有将电机连接到电路时,问题仍然存在。即使在没有附加硬件的情况下调用模拟写入也会导致相同的行为。
-
等等,你写了
int motorPin = 5;,但是在原理图中你把电机连接到针脚 3,在针脚 5 上你有 433 收发器......你正确地纠正了吗? -
@frarugi87 哦,愚蠢的我......我真的把电路图形弄错了......对此感到抱歉......这发生在我改变了几次 PWM 引脚并感到困惑之后...... :( 但是像代码一样使用电缆,它仍然无法正常工作。
-
不接电机和不接二极管的情况下是否有效?