【雕爷学编程】Arduino动手做(132)---KY-027魔术光环模块

发布时间 2023-06-28 10:09:23作者: 行者花雕

7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十二:KY-027 魔术光杯 for UNO 魔术光环模块

 

 

知识点:水银开关

是利用水银具有良好的导电性和流动性这一特点对电气回路进行开、关控制。它是由玻璃管、水银、固定电极、引线等组成 。管内抽出空气后再充以各种气体加以密封,适用于有尘埃、油、水蒸汽等和有腐蚀性气体的场所,也可以在有爆炸性气体的场所中充当防爆开关使用。鉴于管内水银的表面张力和比重很大,且富于流动性,因此,只要玻璃管稍有倾斜,水银的位置马上改变,并以面接触的方式与电极相接触,因而可用来分合交直流大电流。另外这种开关的特点是,接触电阻一般在0.02欧以下, 在额定电流下寿命可达几百万次,体积小,灵敏度高,无机械噪音,价格低廉等,所以一向是作为自动控制用开关。

 

我手头有五只这开关

 

 

 

水银(Mercury)

汞是化学元素,元素周期表第80位,俗称水银。元素符号Hg,在化学元素周期表中位于第6周期、第IIB族,是常温常压下唯一以液态存在的金属(从严格的意义上说,镓(符号Ga,31号元素)和铯(符号Cs,55号元素)在室温下(29.76℃和28.44℃)也呈液态)。汞是银白色闪亮的重质液体,化学性质稳定,不溶于酸也不溶于碱。汞常温下即可蒸发,汞蒸气和汞的化合物多有剧毒(慢性)。水银具有良好的导电性和流动性。汞使用的历史很悠久,用途很广泛。 在中世纪炼金术中与硫磺、盐共称炼金术神圣三元素。

 

水银开关内部结构图

 

水银开关原理
水银开关的构造很简单。外面是一个密封的圆柱形绝缘壳体,长约30 毫米, 直径约10 毫米。里面装有约五分之一的水银。在壳体的一端固定着从里面引出的两根导线。这就是一个水银开关。因为重力的关系,水银水珠会向容器中较低的地方流去,如果同时接触到两个电极的话,开关便会将电路闭合,开启开关,从而触发后续电路工作。

 

使用注意事项
水银对人体及环境均有毒害,故使用水银开关时,请务必小心谨慎,以免破出;在不再使用时,也应该妥善处理。防止水银开关从高处跌落,避免其与硬物接触,或被挤压,导致玻璃泡破裂。

 

 

水银开关的特点
  水银开关是恨据封装在玻璃外壳或金属外壳内的水银移动来实现开关通断的,因而水银开关与机械开关相比,有许多特点。
  ①可以在恶劣环境条件下使用。由于水银开关是密封的,内部的水银和外界是隔绝的,因此它可以使用在有油、蒸汽、灰尘及腐蚀性气体的环境中。
  ②通断所需的外力小。水银是惟一能在常温下保持液态的金属,它的表面张力和比重都较大,只要稍加外力使水银开关产生倾斜,水银便可移动,使开关实现通断。
  ③水银的导电性较好,水银开关电极间的接触电阻一般小于100mΩ。
  ④水银开关允许通过的电流取决于电极的材料,钨丝电极最大允许电流为10A,而一般合金丝最大允许电流一般为1A。
  ⑤由于水银开关的通断由水银重力确定,所以它可以长期可靠地工作。
  ⑥电极的接点是液态接触,无任何噪声。
  ⑦由于水银可以流动,只要加速度达到设定值以上,水银开关就可以通或断,因而可以作为振动的敏感元件使用。
  ⑧体积小,形式多样,且为全密封式器件。
  ⑨结构简单,价格低廉。

 

 

 

水银开关和振动开关的区别

1、滚珠开关所有材料均可达到环保要求,而水银开关`因本身材质问题无法达到。

2、滚珠开关因导通方式是通金属珠同触发导针通电产生信号的,因滚珠同触发导针的接触面积较小且滚珠是活动的,因此导通有时会有闪断现象,而水银开关是汞同触发端接触,因汞是液态,接触面大稳定,一般来说导通效果更稳定。

3、滚珠开关是金属壳体,结构强度较好。

4、水银是液态,接触面积接触大且稳定,一般来说导通效果更稳定。其电阻在0.02欧以下, 在额定电流下寿命可达几百万次,可用来分合交直流大电流,体积小,灵敏度高,无机械噪音,价格低廉,所以一向是作为自动控制用开关。适用于有尘埃、油、水蒸汽等和有腐蚀性气体的特殊场所,也可以在有爆炸性气体的场所中充当防爆开关使用。玻璃管封装的水银开关的优点是可以从外部观察到它的工作状态,缺点就是容易破碎。

 

特别警告:

水银有毒,一旦玻璃泡破裂,请迅速将流出的水银移至室外,切勿与皮肤接触。因为水银开关里面的水银量很少,甚至比普通水银体温计里面的还少,因此在正确使用的情况下,不必担心安全问题。

 

Arduino实验接线示意图

G:接gnd

+:接vcc

S:输出引脚,输出水银开关的状态,猜测意义为SWITCH(开关)

L:输入引脚,控制LED灯,猜测意义为LED

 

Arduino实验开源代码

 

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十二:KY-027 魔术光杯 for UNO 魔术光环模块

实验接线:

G:接gnd

+:接vcc

S:水银开关接2

L:LED灯接13

*/



void setup()

{

    pinMode(2,INPUT);

    pinMode(13,OUTPUT);

}

void loop() {

  if (digitalRead(2)) {

    digitalWrite(13,HIGH);

    delay(1000);

  }

  else {

    digitalWrite(13,LOW);  

  }

}

  

Arduino实验场景图

 

Arduino实验开源代码之二

 

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十二:KY-027 魔术光杯 for UNO 魔术光环模块

实验接线:

G:接gnd

+:接vcc

S:水银开关

L:LED灯

*/



int SensorLED = 13;      //定义LED为数字引脚13

int SensorINPUT = 2;    //连接水银开关到中断0,也就是数字引脚2

volatile int state = LOW;

void setup()

{

  pinMode(SensorLED, OUTPUT);            //LED为输出模式

  pinMode(SensorINPUT, INPUT_PULLUP);  //水银开关为输入模式

  //下降沿触发,触发中断0,调用blink函数

  attachInterrupt(0, blink, FALLING);

}

void loop() {

  if (state == HIGH) {              // 如果state为HIGH

  state = LOW;

  digitalWrite(SensorLED, HIGH);  // 亮灯

  delay(100);      //延时100ms

  }

  else {

  digitalWrite(SensorLED, LOW);  // 否则,关灯

  }

}

void blink() {          //中断函数blink()

  state = !state;        //一旦中断触发,state状态反转

}

  

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十二:KY-027 魔术光杯 for UNO 魔术光环模块

实验接线(二只模块)

G:接gnd

+:接vcc

S1:水银开关接4

L1:  LED灯接6

S2:水银开关接7

L2:  LED灯接5

*/



int LedPinA = 5;

int LedPinB = 6;

int ButtonPinA = 7;

int ButtonPinB = 4;

int buttonStateA = 0;

int buttonStateB = 0;

int brightness  = 0;

void setup()

{

  pinMode(LedPinA, OUTPUT);

  pinMode(LedPinB, OUTPUT);

  pinMode(ButtonPinA, INPUT);

  pinMode(ButtonPinB, INPUT);

}

void loop()

{

  buttonStateA = digitalRead(ButtonPinA);

  if (buttonStateA == HIGH && brightness != 255)

  {

  brightness ++;

  }

  buttonStateB = digitalRead(ButtonPinB);

  if (buttonStateB == HIGH && brightness != 0)

  {

  brightness --;

  }

  analogWrite(LedPinA, brightness);  //  A慢漸暗

  analogWrite(LedPinB, 255 - brightness);  // B慢漸亮

  delay(25);

}

  

 

说明:因为疫情,另一只模块今天才到