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

Arduino MKR1000 WiFi 拣选指灯系统(二):UDP 通信与序列号防错

项目演进

这是“拣选指灯”系列的第二个项目。第一版使用有线串口通信,受限于 USB 线缆长度。本版升级为 **MKR1000 内置 WiFi + UDP 协议**,实现无线通信,并引入 **四位序列号** 机制:每条拣选指令携带序号,工人确认拣选时回传该序号,Python 端校验序号连续性,若不匹配即报错停机,有效防止漏拣、错拣。

硬件清单

软件环境

通信流程

  1. Python 读取 CSV,逐行发送 序号+料仓号(如 0001Bin1)至 MKR1000 UDP 端口 2390
  2. MKR1000 解析,点亮对应 LED,等待按钮按下
  3. 按下后熄灭 LED,回传 序号(如 0001)至 Python
  4. Python 校验回传序号与发送序号一致,方发送下一条;不一致则报错退出
  5. 序列文件可随时编辑,重启两端即可从断点续传

关键代码片段

Arduino 端 (核心循环)

void loop() {
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    // 读取包内容,前 4 字节序号,后续为料仓号
    String seq = packetBuffer.substring(0,4);
    String bin = packetBuffer.substring(4);
    // 点亮对应 LED,阻塞等待按钮
    if (bin == "Bin1") { digitalWrite(Bin1, HIGH); while(!digitalRead(OKbutton)); digitalWrite(Bin1, LOW); }
    else if (bin == "Bin2") { digitalWrite(Bin2, HIGH); while(!digitalRead(OKbutton)); digitalWrite(Bin2, LOW); }
    // 回传序号确认
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(seq.c_str(), 4);
    Udp.endPacket();
  }
}

Python 端 (核心循环)

for row in csvReader:
    seq, bin = row[0], row[1]
    sock.sendto((seq+bin).encode(), (UDP_IP, UDP_PORT))
    data, _ = sock.recvfrom(1024)
    if data.decode() != seq:
        print(f"序列故障 at {data.decode()}")
        sys.exit()

接线要点

测试与故障注入

注释 myseq.toCharArray(ReplyBuffer, 5); 并启用固定回传 0001,可模拟序列错位,验证 Python 端检测逻辑。

后续改进方向 (Project 3)

项目资源

完整 Arduino 草图、Python 脚本、序列示例文件、Fritzing 原理图均可在项目页面获取。

制造工艺

  1. 煤气灯:演变、设计与现代制造
  2. 激光笔:设计、制造与安全概览
  3. 手电筒:从诞生到现代创新
  4. 万花筒:从布鲁斯特科学发明到现代设计艺术
  5. 半导体激光器:现代科技的精密光源
  6. 摄影工艺的艺术与科学:从达盖尔银版到现代胶片
  7. 交通信号灯:工程原理、历史沿革与未来创新
  8. 从火到灯丝:现代灯泡的演进与生产
  9. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  10. 智能无线开关控制器:Arduino + 433MHz 远程操控墙壁开关
  11. 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
  12. DIY 吉他高速拨片与踏板 - 3D 打印电机驱动拨片制作指南