12V 电磁锁怎么接 Arduino?断电上锁、独立供电、继电器与 MOSFET

Cartoon of a silver 12V solenoid lock fixed inside a wooden cabinet with its bevelled bolt locked into a strike plate while a black wall adapter lies unplugged beside the socket

像我们这款 12V 柜门电磁锁(solenoid lock)是断电上锁(fail-secure)型:不通电时,弹簧把锁舌顶出来,门就是锁着的;要给线圈通上几秒 12V,锁舌才会被吸回去。它需要独立的 12V 电源,用继电器模块或 MOSFET 来开关,绝不能直接接 Arduino 引脚,线圈两端还要并一颗续流二极管。

这种锁在店里也叫电控锁(electric latch lock)、柜门锁或电磁锁扣(solenoid latch),马来文叫 kunci solenoid。谁能开门,可以交给 AS608 指纹模块、RFID 卡或键盘密码来决定,但真正会动的是这把锁,所以本文只讲锁这一半:断电时它是什么状态、怎么供电和开关,以及怎样安装才能每次都顺利开锁。

12V 电磁锁的「断电上锁」到底是什么意思?

12V 电磁锁里面,其实是一根弹簧和一个电磁铁在争夺同一根钢锁舌。什么都不接时,壳内的弹簧把锁舌推出去,这就是上锁状态,我们产品照片里那把没接电的锁就是这个样子。电流流过铜线圈会产生磁场,而没有固定住的钢件总会被吸向磁场最强的地方,于是铁芯被拉进线圈中心,压缩弹簧,把锁舌收回去。一断电,磁场消失,弹簧又占了上风。

所以停电时柜子是锁上的,而不是打开的,这和很多人的直觉正好相反。「Solenoid」指的只是那个线圈;锁的行为取决于弹簧往哪个方向推。断电开锁(fail-safe)型电磁锁只是弹簧反过来装,必须靠通电才能把锁舌顶在外面。这两个名字说的是断电时保护的是什么:fail-secure 保护柜里的东西,fail-safe 保护人,因为门打得开。锁舌上 45 度的斜面让你不通电也能关门:锁扣的边缘顺着斜面滑上去,把锁舌压回弹簧里,到位后弹簧再把锁舌弹进锁扣。

电磁锁双格剖面卡通图:左边不通电,弹簧放松、锁舌伸出,上方是一把合上的挂锁;右边通电,铜线圈周围环绕着蓝色磁力线,弹簧被压扁、锁舌收回,上方是一把打开的挂锁
不通电时,弹簧把锁舌推出去(上锁);通电时,线圈的磁场把钢铁芯吸进来,压住弹簧(开锁)。

做一个 12V 电磁锁项目需要哪些零件?

Parts list

ItemPriceQty
IRF520 MOSFET Driver Module PWM Output Power Control for Arduino Raspberry Pi DC Motor ControlIRF520 MOSFET Driver Module PWM Output Power Control for Arduino Raspberry Pi DC Motor ControlIR520AMRM4.95
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 30CM40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 30CMDPWMF30RM4.60
XL830L Digital Multimeter with backlight Portable Multimeter Electronics ProjectXL830L Digital Multimeter with backlight Portable Multimeter Electronics ProjectMULTIMERM25.95

想要没有咔哒声的方案,就用 MOSFET 代替继电器(它的排针是公头,所以要用公对母杜邦线);万用表用来检查适配器的极性,并测量锁的线圈电阻。走 MOSFET 方案还需要一颗 1N4007 一类的整流二极管并在锁的两端,需另外准备。

12V 电磁锁出厂已接好一对红黑引线,末端是一个白色的 2pin 小插头。螺丝接线端子要接裸线,所以把插头剪掉,每根线剥出约 5 mm。5V 一路继电器模块两边都是螺丝接线端子,控制端也一样,所以和 Uno 之间用公对公杜邦线:一头插进 Uno 的排母,另一头的针脚夹进接线端子。

12V 2A 适配器的输出是 5.5×2.1 mm 圆头插头,母头 DC 插座转接线把它转成红黑两根线。如果它显示缺货,任何带引线或螺丝端子的 5.5×2.1 mm 母头 DC 插座都能代替,或者用一台调到 12V 的实验室电源。

有两样东西不在零件清单里。一是 1N4007 一类的整流二极管(1N4001 到 1N4007 都可以),并在锁的线圈两端:用 MOSFET 时必须装,用继电器时也值得装,续流二极管那一节会解释原因。二是让锁舌落进去的锁扣,因为锁是单独出货的;安装那一节会讲到。

为什么电磁锁不能用 Arduino 的 5V 引脚或充电宝供电?

电磁锁就是一圈铜线,所以它的电流由欧姆定律决定:I = V ÷ R。我们这把锁是标准柜门锁的尺寸,线圈约 15–20 Ω,所以在 12V 下电流约为 12 ÷ 20 = 0.6 A 到 12 ÷ 15 = 0.8 A;同款设计的锁标称 12V 时 650 mA。你自己十秒钟就能确认:把万用表拨到电阻档,量锁两根线之间的读数,再用 12 除以它。

电源 能提供多少 锁需要多少
Uno 输出引脚 5V 下约 20 mA 12V 下 0.6–0.8 A:是它的 30–40 倍
Uno 5V 引脚(USB 供电) 和板子一起分 USB 口的 500 mA × 5V = 2.5 W 7–10 W
充电宝直接接 5V 12V;在 5V 下只有约 17% 的吸力
12V 2A 适配器 12V 下最高 2 A 覆盖最坏情况,还有 2.5 倍余量

功率等于电压乘电流:12V × 0.6–0.8 A 约为 7–10 W。用笔记本电脑供电时,Uno 的 5V 引脚上,板子和这个引脚上的所有东西共用一个标准 USB 2.0 口的 500 mA,也就是 2.5 W,所以就算在那里接一个完美的 5V 升 12V 升压模块,也带不动这把锁。充电宝的瓦数够(2.1 A 的口约 10 W),但只有 5V,而 12V 线圈接 5V 会以另一种方式失败:电流降到正常值的 5/12,而电磁铁的吸力大致与电流的平方成正比,所以 (5/12)² ≈ 0.17,只剩约六分之一。这点力气拉不动顶着弹簧的锁舌。充电宝只有通过 12V USB-PD 诱骗模块或升压模块才能用,而且很多充电宝会在两次开锁之间自动断电,因为待机负载太小,不足以让它保持唤醒。

电磁锁怎么通过继电器接到 Arduino?

5V 继电器模块让 Uno 去拨动一个它在电气上从不接触的开关:Uno 驱动模块的控制端子,继电器的触点再接通通往锁的 12V 回路。

从 到 说明
Uno 5V 继电器 DC+ 给继电器自身的线圈和光耦供电
Uno GND 继电器 DC-
Uno D7 继电器 IN 触发跳线帽设在 H:HIGH = 开锁
插座红线(+12V) 继电器 COM 先用万用表确认极性
继电器 NO 锁红线 平时断开,所以锁不通电
锁黑线 插座黑线(−) 锁两端并二极管:色环朝红线
Uno USB-B 笔记本电脑或 5V USB 充电器 绝不接 12V 适配器

接锁之前,先用万用表确认插座的红线读数约为 +12V。锁本身不在乎电流往哪个方向流,因为无论磁场朝哪个方向,钢铁芯都会被吸引,但并在它两端的二极管就在乎了。

锁的黑线和插座的黑线直接相连,中间没有经过任何继电器端子,所以要把它们接进一个小螺丝接线座或按压式快速接线器,不要只是把裸线拧在一起,拧接的线在柜子里久了可能会松脱。然后二极管跨接在锁的两端:带色环的那只脚和锁的红线一起夹进继电器的 NO 端子,没色环的那只脚接到黑线的那个接头上。

继电器的触点是一个由继电器自身线圈带动的金属开关,和控制端之间没有任何电气连接。走继电器路线时,12V 回路和 Uno 之间没有一根共用的线。把触发跳线帽设在 H,让 HIGH 表示开锁,与程序一致;Uno 复位期间,它的引脚处于悬空状态,不会向光耦送电流,所以继电器保持断开,锁保持上锁。

改用 IRF520 MOSFET 怎么开关电磁锁?

IRF520 MOSFET 模块开关电磁锁时完全没有声音,不会咔哒响。它的栅极被拉到 HIGH 时,会把锁的负极线接到地。

模块端子 接到 说明
SIG Uno D7 HIGH = 开锁
VCC Uno 5V 这块板上没有接通(LED 由 SIG 点亮),可接可不接
GND(排针) Uno GND 必须共地
VIN / GND 插座红线 / 黑线 12V 电源
V+ / V- 锁红线 / 黑线 两端并 1N4007 一类二极管,色环朝 V+

用 MOSFET 时,共地是必须的。MOSFET 是否导通,取决于栅极和源极之间的电压,而在这块模块上,源极就是 12V 电源的负极。Uno 的 5V HIGH 是相对 Uno 的 GND 高出 5V;除非这个 GND 接到了模块的 GND,否则栅源电压是不确定的,开关就会时好时坏。

IRF520 是标准栅极器件,要到 10V 才能完全导通。在 Uno 的 5V 栅压下它只是部分导通,但对这个负载来说没问题:就算导通电阻有半欧姆,在最坏的 0.8 A 下也只浪费 0.8² × 0.5 ≈ 0.3 W,而且只持续两秒。换成 3.3V 的板子,它几乎不导通;我们的 IRF520 教程解释了这个栅极陷阱。

为什么电磁锁上的续流二极管不能省?

电磁锁的线圈在通电时把能量储存在磁场里,而电感会抗拒电流的任何变化。它两端的电压是 V = L ×(电流的变化率)。继电器触点或 MOSFET 在几微秒内断开时,电流被迫几乎瞬间降到零,于是线圈会产生不管多高的电压也要让电流继续流,轻易就是几百伏。这个尖峰会在正在断开的继电器触点之间拉弧,每次烧掉一点金属;或者超过 IRF520 的 100V 漏极额定值,让晶体管击穿,把尖峰的能量变成热量吸收在自己体内。反复冲击可能把它弄坏,而坏掉的 MOSFET 通常是短路失效:锁会一直通电、一直开着,而且过热。

线圈两端并一颗二极管,就给这股电流一条回路。断开瞬间,电流继续在线圈和二极管之间循环,几毫秒内就在线圈自身的电阻里衰减掉,所以开关承受的电压不会比 12V 加上二极管约 1V 的压降高多少。1N4007 额定 1 A、1000V,而回路电流永远不会超过原本流过线圈的电流,这里最多 0.8 A。

安装时,色环(阴极)朝锁的红色正极线。装反的话,开关一闭合它就导通,等于把 12V 电源直接短路。继电器模块上那颗二极管保护的是驱动继电器自身线圈的三极管;锁的线圈是触点另一侧的另一个电感。IRF520 模块上根本没有二极管,只有 MOSFET、一颗 LED 和两个电阻,所以在那里它是必须的;用继电器时,它保护的是触点,详见我们的继电器安全教程。

双格卡通图:左边是没有二极管的铜线圈,开关断开时迸出一道明亮的火花;右边是同一个线圈,两端并着一颗带色环的黑色二极管,青色箭头平缓地经二极管循环,没有火花
开关断开时,线圈里的电流总得有个去处。没有二极管,它就化成火花跳过缝隙;有了二极管,它就经二极管循环,几毫秒内消失。

电磁锁的程序长什么样?

下面这个电磁锁程序收到指令后,通过 D7 给线圈通电两秒,然后强制休息一段时间才允许下一次通电,所以就算重复发送指令,线圈也不会一直通电。

// 12V 电磁锁:从串口监视器发指令,短暂开锁
// 两种开关都适用:继电器模块(跳线帽设在 H)或 IRF520 模块的 SIG
// D7 HIGH = 线圈通电 = 锁舌收回(开锁)

const int LOCK_PIN = 7;
const unsigned long UNLOCK_MS   = 2000;   // 锁舌保持收回的时间
const unsigned long COOLDOWN_MS = 10000;  // 下一次通电前的休息时间:线圈通电时会发热

bool unlocked = false;
unsigned long unlockedAt = 0;
unsigned long lockedAt = 0;
bool firstPulse = true;

void setup() {
  digitalWrite(LOCK_PIN, LOW);   // 先设定电平,再把引脚设为输出
  pinMode(LOCK_PIN, OUTPUT);     // 一开始就是 LOW:线圈断电,锁舌伸出,柜子上锁
  Serial.begin(9600);
  Serial.println(F("Type u and press Enter to unlock"));
}

void unlockPulse() {
  if (unlocked) return;
  if (!firstPulse && millis() - lockedAt < COOLDOWN_MS) {
    Serial.println(F("Coil cooling down, try again shortly"));
    return;
  }
  digitalWrite(LOCK_PIN, HIGH);  // 给线圈通电:锁舌收回
  unlocked = true;
  firstPulse = false;
  unlockedAt = millis();
  Serial.println(F("Unlocked"));
}

void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == 'u' || c == 'U') unlockPulse();
  }

  // UNLOCK_MS 之后断电:弹簧把锁舌推回去
  if (unlocked && millis() - unlockedAt >= UNLOCK_MS) {
    digitalWrite(LOCK_PIN, LOW);
    unlocked = false;
    lockedAt = millis();
    Serial.println(F("Locked"));
  }
}

以 9600 波特率打开串口监视器,发送 u。通电时间之所以短,是因为通电的线圈会把全部 7–10 W 变成热量,闷在一个小小的钢壳里;铜线变热后电阻上升,吸力下降,绝缘层也会老化。通两秒、停十秒,平均发热不到持续通电的五分之一。由于计时用的是 millis(),loop 不会被卡住:把串口检查换成 AS608 指纹门锁的指纹匹配、RFID RC522 门禁的刷卡,或 4×4 键盘密码锁的密码就行。

这把锁只负责放开门,不会把门推开。装一个拉手,趁锁舌收回时拉开,或者把 UNLOCK_MS 加长一两秒。用弹簧把门顶开听起来很方便,但它会把锁舌从侧面压在锁扣上,下一节会说明,这正是卡住的原因。

电磁锁要怎么安装,锁舌才不会卡住?

电磁锁的吸力不大,摩擦力就可能胜过它。要收回锁舌,线圈必须克服弹簧力,再加上锁舌受到的摩擦力,而摩擦力等于摩擦系数乘以从侧面压住锁舌的那股力。门自然垂挂时,这个侧向力几乎为零。可是门板变形、橡胶密封条往外顶,或者有人靠在门上,都会把锁舌死死压在锁扣上,线圈一直通电也拉不动它,只会越来越热。

所以要把锁装在柜子里面,让它的线永远不会被反复弯折,锁舌朝向门,斜面朝着关门的方向,好让锁扣顺着斜面滑上去。锁是单独出货的,锁扣得自己装:最常见的做法是去五金店买一个小钢制 L 形角码,用螺丝固定在门上(在 3D 打印外壳上开一个槽也行),它的边缘必须光滑,斜面才能顺利滑过。锁舌在锁扣里四周要留一两毫米的间隙。锁座上的两个腰形孔让你可以沿锁舌方向前后调整:关上门,确认锁舌完全落进锁扣,再拧紧螺丝。薄门板一拉就弯,会压住锁舌;要么把门加固,要么把锁装在靠近门角、几乎不会变形的位置。

对比卡通图:木柜内装着一把银色电磁锁;左边锁舌落在锁扣槽里,四周留有间隙,上方是绿色圆圈;右边被推弯的门把锁扣拖压在锁舌上,上方是打了叉的红色圆圈
门板平直、锁舌四周留有间隙,线圈就能把锁舌吸回来;门板弯了或受力,锁舌就会被压死在锁扣上,摩擦力胜过线圈。

断电上锁还是断电开锁:你的项目该用哪一种?

断电上锁的 12V 电磁锁适合柜子、抽屉、包裹箱或 FYP 展示盒,这些场合停电时就该让里面的东西继续锁好。凡是人要走过、或可能需要从里面出来的地方,它就是错误的选择。那种场合需要断电开锁的硬件,停电时会自动打开。磁力锁只有在电磁铁通电时才吸得住,断电开锁型电锁扣(electric strike)也要靠电流才能保持锁扣关闭,所以一停电两者都会松开。

如果一个断电上锁的柜子在停电时仍然必须能打开,就要事先规划:给 12V 电源加一个备用电池,或者装一个只有你够得到的机械应急开锁装置。这是一把给项目用、只起威慑作用的锁,不是安防产品。它的弱点在接线:任何能从外面碰到线圈的接线都能让它通电,所以电源、继电器或 MOSFET 以及每一根线都要放在上锁的那一侧。

我们常见的错误

用 Uno 给锁供电。接在 5V 电源轨上,12V 线圈只得到 5/12 的电流、约六分之一的吸力,锁舌几乎不动;直接接在引脚上,引脚会超载好多倍。给锁配一个独立的 12V 电源。

让锁一直开着。线圈一直通电会被烤坏。用短脉冲开锁,让弹簧去上锁。

把锁接在 NC 而不是 NO。继电器断开时 NC 是闭合的,所以只要 Uno 空闲或没插电,线圈就一直通电:柜子一直开着,线圈也被烤坏。锁要接在 NO。

二极管装反。第一次通电就会把电源短路。色环朝正极。

只在桌上测试。在桌上咔哒响得好好的锁,装好后可能会卡住。要装进柜子、关上门再测试。

常见问题

电磁锁不通电时是锁着还是开着?

锁着。弹簧把锁舌顶在外面,直到 12V 把它吸回去,所以停电时柜子是关着的。

可以改用 5V 电磁锁配 Arduino 吗?

可以,但并不更简单。做同样功的 5V 锁需要差不多的功率,所以在 5V 下电流更大,通常是 0.8–1.5 A:远远超过引脚的 20 mA,也超过 Uno 整个 USB 供电的预算。它同样需要继电器或 MOSFET,以及独立电源。这把 12V 锁接 5V,只有约六分之一的吸力。

12V 电磁锁可以通电多久?

几秒,而不是几分钟。通电的线圈会把全部功率变成热量,所以要用短脉冲开锁,中间留出休息时间。

Arduino 可以和锁共用同一个 12V 适配器吗?

不能经由这块 Uno 的 DC 插座接,它的规格最高只到 9V:稳压器会把超过 5V 的每一伏都变成热量烧掉。Uno 用 USB 供电,或者用降压模块把 12V 降到 5V。

如果停电时门必须能打开怎么办?

用断电开锁的锁,例如磁力锁或断电开锁型电锁扣。任何人要经过的门,都绝不能靠通电才能打开。

最后更新:2026年10月。有问题?WhatsApp 联系我们。

Leave a Reply

Your email address will not be published. Required fields are marked *