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

IoT4Car车载遥测系统:Arduino MKR1000 + OBD-II 采集车辆数据上云分析

项目背景与愿景

现代汽车OBD-II接口蕴含丰富车辆运行数据:转速、车速、油耗、冷却液温度、故障码等。本项目基于Arduino MKR WiFi 1000,通过SparkFun OBD-II UART板读取车辆实时数据,经LCD本地显示并上传至云端,实现个人驾驶行为分析、车队管理监控、车辆健康预测性维护等高价值应用场景。

核心硬件架构

电路连接详解

[车辆OBD-II 16针接口] ←DB9线→ [OBD-II UART板] ←电平转换→ [MKR1000 Serial1: Pin13(Rx), Pin14(Tx)]
                                                              ↑
                                                      [LCD1602: RS-12, EN-11, D4-5, D5-4, D6-3, D7-2]
                                                              ↑
                                                      [共地: OBD板GND = MKR GND = LCD GND]

关键连接点

OBD-II协议与PID命令详解

ELM327/STN1110 AT命令初始化序列


Serial1.println("ATZ");      // 复位
delay(1000);
Serial1.println("ATE0");     // 关闭回显
Serial1.println("ATL0");     // 关闭换行
Serial1.println("ATH0");     // 关闭包头
Serial1.println("ATSP0");    // 自动协议检测
Serial1.println("ATCAF0");   // 关闭CAN自动格式化
Serial1.println("ATR0");     // 关闭自动重发

核心PID请求命令 (Mode 01 - 实时数据)

模块型号关键作用
主控板Arduino MKR WiFi 1000SAMD21 Cortex-M0+, 3.3V逻辑, 内置WiFi, 低功耗
OBD-II协议转换板SparkFun OBD-II UART (STN1110芯片)将车辆CAN/ISO9141/KWP2000等协议转为UART串口
电平转换板SparkFun 双向逻辑电平转换器5V(OBD板) ↔ 3.3V(MKR1000) 安全隔离
OBD-II转DB9线缆SparkFun OBD-II to DB9 Cable连接车辆OBD-II诊断座(16针)
LCD1602显示屏1实时显示转速/车速/油位/水温 (可选)

响应格式:>1 0C 09 8C (前5字符为回显确认,第6字节起为数据字节)

核心固件代码结构 (IoT4Car_code.ino)

关键变量与初始化


#include 
#include 
#include 

// WiFi配置
char ssid[] = "YOUR_WIFI_SSID";       // 或手机热点
char pass[] = "YOUR_WIFI_PASSWORD";
char server[] = "www.dweet.io";
WiFiClient client;
unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 10000; // 10秒上传一次

// LCD引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// 数据缓冲
char rxData[20]; uint8_t rxIndex = 0;

// 车辆数据变量
int vSpeed = 0, vRPM = 0, vFuel = 0, vTemp = 0;

void setup() {
  lcd.begin(16, 2);
  Serial1.begin(9600);  // 关键:Serial1 对应 Pin13/14
  // WiFi连接循环...
  // OBD初始化AT命令序列...
}

数据采集循环


void loop() {
  // WiFi重连保活
  if (WiFi.status() != WL_CONNECTED) reconnectWiFi();
  
  // 轮询采集四个PID
  getSpeed();   // 010D
  getRPM();     // 010C
  getFuel();    // 012F
  getCoolTemp();// 0105
  
  // 定时上传云端
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
    lastConnectionTime = millis();
  }
}

响应解析通用函数


void getResponse() {
  while (Serial1.available() > 0) {
    if (Serial1.peek() == '\r') {  // 以回车符结束
      inChar = Serial1.read();
      rxData[rxIndex] = '\0';
      rxIndex = 0;
    } else {
      inChar = Serial1.read();
      rxData[rxIndex++] = inChar;
    }
  }
}

各PID解析示例 (getRPM)


void getRPM() {
  Serial1.println("010C");
  delay(200);
  getResponse();
  // 响应示例: ">1 0C 09 8C" → 数据从rxData[6]开始
  // 0x098C = 2444 → 2444 / 4 = 611 RPM
  vRPM = ((strtol(&rxData[6], 0, 16) * 256) + strtol(&rxData[9], 0, 16)) / 4;
  // LCD显示...
}

云端上传 (dweet.io → freeboard.io)


void httpRequest() {
  client.stop();
  if (client.connect(server, 80)) {
    String data = "POST /dweet/for/mkr1000?RPM=" + String(vRPM);
    data += "&Speed=" + String(vSpeed);
    data += "&Fuel=" + String(vFuel);
    data += "&Temp=" + String(vTemp);
    client.println(data);
    client.println("Host: www.dweet.io");
    client.println("Connection: close");
    client.println();
  } else {
    lcd.print("Conn failed");
  }
}

云端可视化搭建

  1. dweet.io:无需注册,设备名mkr1000即为数据流标识
  2. freeboard.io:创建Dashboard → 添加DATASOURCE (Type: dweet.io, Thing: mkr1000) → 添加GAUGE仪表盘绑定RPM/Speed/Fuel/Temp变量
  3. 实时仪表盘可嵌入网页、手机访问,支持历史回放

实车测试验证结果

参数PID (Hex)命令响应解析公式单位
发动机转速0x0C010C(A×256 + B) / 4RPM
车辆速度0x0D010DAkm/h
燃油液位0x2F012FA × 100 / 255%
冷却液温度0x050105A - 40°C
参数显示值对应物理量验证状态
Speed PID0x000 km/h (静止)✅
RPM PID0x098C611 RPM (怠速)✅
Fuel PID0x1D11% (低油位)✅
Temp PID0x7981°C (正常工作温度)✅

工程化量产考量

拓展应用场景

开源资源

安全警示

⚠️ 严禁驾驶时操作调试代码/观察屏幕! 请在安全停车状态下配置,或由副驾驶协助。OBD-II接口直接连接车辆总线,错误指令可能干扰车辆控制系统,造成安全隐患。开发测试建议使用车辆模拟器或废弃ECU台架验证。

制造工艺

  1. 车辆牌照牌全攻略:历史、设计与未来
  2. 防抱死制动系统(ABS):湿滑路面行车安全卫士
  3. Arduino 强化学习避障小车:Q-Learning 让机器人自主学会“右转”
  4. DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
  5. DIY 云朵发光服装 — LED 灯带 + Arduino Nano + SparkFun 元件
  6. Pixie:基于 Arduino Pro Mini 的 NeoPixel 智能腕表 - 极简 DIY LED 时钟
  7. 智能 Arduino 水杯:实时监测饮水量与智能提醒
  8. 车辆底盘布局:发动机位置与驱动配置详解
  9. 汽车线束全解析:可靠汽车电气性能的关键概念
  10. 动力总成解析:它如何驱动您的车辆
  11. 发电机详解:如何为汽车供电及故障征兆
  12. 机箱接地详解:目的、功能与重要性

维度现状量产目标
连接稳定性手机热点WiFiMKR GSM 1400 (LTE Cat M1/NB-IoT) 全网络覆盖
供电方案USB/车载点烟器OBD-II 16针直取电 (Pin16电池常电, Pin4/5车身地)
外形尺寸面包板+飞线定制PCB集成 (MKR1000座子 + STN1110 + 电平转换 + DC-DC + 保护电路)
协议覆盖STN1110全协议支持增加J1939重卡/商用车协议支持
数据安全明文HTTPTLS 1.2 + 设备认证 + 数据加密
车规认证无EMC (CISPR 25), 温度冲击, 振动, ESD (ISO 10605)