我们实验室的光路里有个成像模块,里面有个白光光源,我们一般在看样品的时候将它打开,测光谱的时候将它关闭(否则光谱仪会测到白光信号)。我们一直希望用电脑来控制这个白光光源的通断,以便让人不再实验室的时候也能打开白光看成像。
一些商业白光光源会提供这个功能,但价格一般会贵一些。实际上我们希望将老式的白光灯泡改造为支持电脑开关的形式,这可以做到吗?
可以的兄弟,可以的。
你只需要以下4个东西:
| 名称 | 数量 | 价格 |
| arduino uno r3单片机(盗版) | 1 | ~25 |
| 继电器模块 | 1 | ~5 |
| 杜邦线(公转母) | 3 | ~10(按照你会买一打来估计) |
| 数据线 | 1 | 买单片机一般会送 |
于是花费大约40块就可以实现这个功能。你估计一下对于你自己来说,是这样比较便宜,还是直接买一个新的比较便宜?如果你决定按照我给出的解决方案,那么请往下读:
继电器模块
继电器的原理我们初中都学过:

也就是用一个低压控制电路来控制另一个电路中的一个开关。没错,继电器就是一个电控开关。

继电器模块就是这么个东西。左边接设备,右边接控制电路。具体来说,将一条线从中间剪断,接到左边三个端口中的两个上面,然后将右边三个端口连到单片机上,就能通过单片机发出信号来控制这条线的通断。具体接线规则如下:

其中单片机的GPIO可以接到任意一个数字输出端口,例如2。这种接线方式下,当继电器关闭,负载不工作;反之,如果将负载接在NC上,则当继电器关闭,负载常开。
单片机程序
下载arduino客户端,将如下代码编译到单片机上:
#define RELAY_PIN 2
String inputString = "";
bool stringComplete = false;
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.begin(9600);
}
void loop() {
if (stringComplete) {
// 去掉首尾空格
inputString.trim();
if (inputString == "@ON#") {
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Relay ON");
}
else if (inputString == "@OFF#") {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Relay OFF");
}
else {
Serial.println("Unknown command");
}
// 清空缓存
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '#') {
stringComplete = true;
}
}
}
第一行定义了输出信号端口,我假设你将信号输出端连在2号端口上。如果你连在其它端口上,请更改这个数字。
试试向单片机发送@ON#,这时继电器会打开(你可以用万用表检查一下);发送@OFF#,继电器会关断。
仪器处理
白光灯泡总是有两条线的,你用万用表检查一下哪根是零线,剪断它,并把两个断面分别多剪掉一些包层,露出金属芯层。将两个断口分别插入继电器的两个端口,用螺丝拧紧固定。
控制软件
使用任何能够发送串口指令的方式编写控制软件。记得写一个漂亮的前面板。如果你的电脑支持LabVIEW,我这里已经写好了一个示例,这是我们实验室正在用的:
后记
这套流程,工科学生应该很熟悉了,我写这篇文章的目的是给还不知道的人开拓一下眼界。毕竟,原则上,任何电子设备都可以用这套流程实现自动化控制,你可以编辑自己的工作或生活环境,不再受制于商用设备的有限的功能!
最后再说一个不幸的事情:在添加了这个功能以后,我们实验室的灯泡就常年通电开启了。但是用了大概2-3个月以后,就坏掉了,我们也不清楚是怎么坏的,可能是使用寿命到了吧。这提醒我们,任何设备都是有使用寿命的,不能不考虑!
Comments NOTHING