亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

激光模块莫尔斯电码通信——双 Arduino 收发实验

组件与材料

组件数量
Arduino UNO2
面包板2
激光发射模块1
光敏电阻 (LDR)1
10kΩ 电阻1
杜邦线若干

项目简介

利用激光发射端将字符编码为莫尔斯电码(点/划)调制光信号,接收端通过光敏电阻检测光强变化,用极简的“计数点划时长”算法还原字符,并在串口监视器显示。适合理解光通信与编码基础。

发射端(Transmitter)

接线

编码算法

  1. 预设字符串 stringToMorseCode
  2. 点长 200ms,划长 = 3×点长,元素间隔 = 点长,字符间隔 = 3×点长,词间隔 = 7×点长
  3. switch-case 映射 a-z 为点划序列,调用 MorseDot()/MorseDash() 控制激光亮灭

接收端(Receiver)

接线

解码算法(核心创新)

  1. 阈值 1000:光照 >1000 判为“1”(激光亮),否则“0”
  2. 进入检测循环(14 次采样,每次 200ms),统计“1”计数 a 与“0”计数 f
  3. 每个字符对应唯一的 (a, f) 对,如 a: (4,10)、b: (6,8)、e: (1,13) 等
  4. 匹配成功即通过串口打印字符

局限:仅演示部分字符,可扩展映射表覆盖全字母数字。

核心代码

发射端

int led13 = 13, dotLen = 200, dashLen = 600, elemPause = 200, Spaces = 600, wordPause = 1400;
char stringToMorseCode[] = "arduino morse code";

void MorseDot() { digitalWrite(led13, HIGH); delay(dotLen); }
void MorseDash() { digitalWrite(led13, HIGH); delay(dashLen); }
void LightsOff(int t) { digitalWrite(led13, LOW); delay(t); }

void GetChar(char c) {
  switch(c) {
    case 'a': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
    case 'b': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
    // ... 其余字母映射省略 ...
    default: LightsOff(Spaces);
  }
}

void loop() {
  for (int i=0; i

接收端

int sensorPin = A0, sensorValue = 0, a = 0, f = 0;
void setup() { Serial.begin(9600); }
void loop() {
  sensorValue = analogRead(sensorPin);
  if (sensorValue > 1000) {
    for (int i=0; i<=13; i++) {
      sensorValue = analogRead(sensorPin);
      if (sensorValue > 1000) a++; else f++;
      delay(200);
    }
    if (a==4 && f==10) Serial.print("a");
    else if (a==6 && f==8) Serial.print("b");
    else if (a==8 && f==6) Serial.print("c");
    else if (a==1 && f==13) Serial.print("e");
    else if (a==2 && f==12) Serial.print("i");
    else if (a==10 && f==4) Serial.print("j");
    else if (a==7 && f==7) Serial.print("g");
    else if (a==9 && f==5) Serial.print("o");
    else if (a==3 && f==11) Serial.print("s");
    a = f = 0;
  }
  delay(200);
}

原理图与外观

文中提供发射/接收电路原理图、面包板实物接线图、遮光罩制作照片。

制造工艺

  1. 激光打标综合指南:类型、优势与应用
  2. 激光笔:设计、制造与安全概览
  3. 半导体激光器:现代科技的精密光源
  4. 条码扫描器:技术原理、设计演进与未来趋势
  5. 激光制导导弹:研发、制造与战略影响
  6. Zigbee 传感器与 Gravio 边缘平台打造交互式激光投影
  7. 树莓派 4 与 HiFive1 建立 UART 通信实验指南
  8. 树莓派手势控制机器人:告别按键,挥手即达
  9. 仅用 Arduino 构建 DTMF 解码器 – 无需额外 IC
  10. Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
  11. 基于 Arduino 的智能温室监测与自动灌溉系统
  12. 低代码解决方案为工业制造带来的4大关键优势