实验室小玩意:电脑控制灯泡开关

lostaaa 发布于 2025-11-07 624 次阅读


我们实验室的光路里有个成像模块,里面有个白光光源,我们一般在看样品的时候将它打开,测光谱的时候将它关闭(否则光谱仪会测到白光信号)。我们一直希望用电脑来控制这个白光光源的通断,以便让人不再实验室的时候也能打开白光看成像。

一些商业白光光源会提供这个功能,但价格一般会贵一些。实际上我们希望将老式的白光灯泡改造为支持电脑开关的形式,这可以做到吗?

可以的兄弟,可以的。

你只需要以下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个月以后,就坏掉了,我们也不清楚是怎么坏的,可能是使用寿命到了吧。这提醒我们,任何设备都是有使用寿命的,不能不考虑!

此作者没有提供个人介绍。
最后更新于 2026-03-08