车辆遥测平台及相关电子技术全解析
1. 电源故障处理
在车辆遥测平台系统中,
PowerFail.pde
里的
setup()
函数将
powerFail()
中断服务程序连接到中断 0 的下降沿,中断 0 位于数字引脚 2,此引脚连接到电源输入的分压器。当电源供应的电压下降时,该中断服务程序会被调用。它会关闭日志记录 LED,以此向主循环发出信号,表明下次循环时需要关闭 USB 记忆棒上的日志文件,同时关闭 LCD 背光以节省电量。
void powerFail()
{
digitalWrite(LOG_LED, LOW);
analogWrite(BrightnessPin, brightness[0]);
}
不过,该功能最终可能需要扩展以关闭 GPS 模块,从而进一步节省电量并延长电源电容的使用时间,但这并非易事。因为中断服务程序可能在任何时候被调用,比如在读取 GPS 数据时被调用,当中断服务程序关闭 GPS 并退出后,主循环可能会因等待一个永远无法完成的读取操作而阻塞。所以,使用中断服务程序可能会产生意外的副作用,必须考虑其在主程序循环不同点执行的结果。
2. OBDuinoMega 草图菜单按钮使用
系统的三个按钮根据当前处于实时数据显示模式还是菜单模式,发挥不同的作用:
-
实时模式
:
- 左按钮:切换到下一个虚拟屏幕。
- 中按钮:进入菜单模式。
- 右按钮:循环切换 LCD 亮度设置。
- 左 + 中按钮:油箱重置,加油后使用。
- 中 + 右按钮:行程和短途旅行重置。
- 左 + 右按钮:显示当前屏幕的 PID 信息。
-
菜单模式
:
- 左按钮:减小数值。
- 中按钮:选择。
- 右按钮:增大数值。
菜单中可设置的选项如下:
| 选项 | 说明 |
| ---- | ---- |
| LCD 对比度(0 - 100,步长为 10) | 原型中使用可变电阻控制,菜单也支持通过 PWM 输出控制 |
| 使用公制单位(NO/YES) | NO 显示英里和加仑,YES 显示公里和升 |
| 使用逗号格式(NO/YES) | NO 使用句点作为小数点,YES 使用逗号 |
| 每小时燃油速度(0 - 255) | 低于此速度显示 L/100KM 或 MPG,高于则显示 L/h 或 GPH |
| 油箱大小(xx.y) | 油箱容量,单位为升或加仑 |
| 燃油价格(xx.y) | 每升或每加仑燃油的价格 |
| 燃油调整(0 - 255%) | 燃油消耗校准因子,多次加油后可手动调整 |
| 速度调整(0 - 255%) | 车速表校准因子,用于校准不准确的车速传感器 |
| 发动机排量(0.0L - 10.0L) | 仅在使用 MAP 传感器时使用,多数车辆无需设置 |
| 短途旅行中途停留时间(0 - 2550 分钟,步长为 10 分钟) | 停车超过此时间,短途旅行自动重置 |
| 行程中途停留时间(1 - 255 小时) | 用于较长行程,多个中途停留可视为一次行程 |
| 配置 PIDs(NO/YES) | 选择 YES 可设置三个虚拟屏幕上要显示的 PIDs |
除了常规的 OBD - II PIDs,系统还提供了一些额外的非标准 PIDs,如下表所示:
| PID | 标签 | 描述 |
| ---- | ---- | ---- |
| 0xE9 | OutWaste | 本次短途旅行怠速浪费的燃油 |
| 0xEA | TrpWaste | 本次行程怠速浪费的燃油 |
| 0xEB | TnkWaste | 本油箱怠速浪费的燃油 |
| 0xEC | Out Cost | 本次短途旅行的燃油成本 |
| 0xED | Trp Cost | 本次行程的燃油成本 |
| 0xEE | Tnk Cost | 本油箱的燃油成本 |
| 0xEF | Out Time | 汽车运行时间 |
| 0xF0 | No Disp | 无显示,空白角落 |
| 0xF1 | InstCons | 即时燃油消耗率 |
| 0xF2 | Tnk Cons | 本油箱的平均燃油消耗 |
| 0xF3 | Tnk Fuel | 本油箱已使用的燃油 |
| 0xF4 | Tnk Dist | 本油箱行驶的距离 |
| 0xF5 | Dist2MT | 本油箱剩余可行驶的距离 |
| 0xF6 | Trp Cons | 本次行程的平均燃油消耗 |
| 0xF7 | Trp Fuel | 本次行程已使用的燃油 |
| 0xF8 | Trp Dist | 本次行程的距离 |
| 0xF9 | Batt Vlt | 汽车电池电压 |
| 0xFA | Out Cons | 本次短途旅行的平均燃油消耗 |
| 0xFB | Out Fuel | 本次短途旅行已使用的燃油 |
| 0xFC | Out Dist | 本次短途旅行的距离 |
| 0xFD | Can Stat | CAN 状态,包括 TX/RX 错误 |
| 0xFE | PID_SEC | 每秒检索的 PIDs 数量 |
| 0xFF | Eco Vis | 经济视觉显示(调试模式下的空闲内存) |
3. 日志记录操作
在正常运行时,绿色的“可安全移除”LED 会亮起,这意味着 VDIP1 没有尝试访问记忆棒,此时可以插入或移除记忆棒。启动日志记录的步骤如下:
1. 插入记忆棒,等待几秒钟,让 VDIP1 有时间识别它。
2. 如果将计算机连接到系统的 USB 端口,并在 Arduino IDE 中运行串口监视器,当 VDIP1 检测记忆棒时,会看到反馈信息。若操作似乎不起作用,可连接计算机运行,查看是否有错误信息。
3. 短暂按下“日志记录开/关”按钮,绿色的“可安全移除”LED 熄灭,红色的“文件打开”LED 亮起,黄色的“日志活动”LED 大约每秒闪烁一次,表示正在向 CSV 文件写入一行数据。
4. 再次按下按钮将停止日志记录。当绿色的“可安全移除”LED 再次亮起时,可取出记忆棒,插入计算机处理日志文件。
系统生成的日志文件是一个常规的 CSV 文件,其存储的字段如下表所示:
| 列 | 字段 | 描述 |
| ---- | ---- | ---- |
| 1 | GPS_LAT | GPS 纬度 |
| 2 | GPS_LON | GPS 经度 |
| 3 | GPS_ALT | GPS 海拔(米) |
| 4 | GPS_SPEED | GPS 速度(公里/小时) |
| 5 | LOAD_VALUE | 发动机负载(%) |
| 6 | COOLANT_TEMP | ECU 冷却液温度(摄氏度) |
| 7 | ENGINE_RPM | 发动机转速 |
| 8 | VEHICLE_SPEED | 车辆速度(所选单位) |
| 9 | TIMING_ADV | 点火提前角(度) |
| 10 | INT_AIR_TEMP | 进气温度 |
| 11 | MAF_AIR_FLOW | 空气质量流量 |
| 12 | THROTTLE_POS | 节气门位置(%) |
| 13 | FUEL_RAIL_P | 燃油轨压力(千帕) |
| 14 | FUEL_LEVEL | 燃油液位(%) |
| 15 | BARO_PRESSURE | 大气压力 |
| 16 | AMBIENT_TEMP | 环境温度 |
| 17 | FUEL_CONS | 燃油消耗率 |
| 18 | BATT_VOLTAGE | 电池电压 |
4. 生成 Google Earth 轨迹
项目源代码中包含一个名为
OBDtoKML
的目录,其中有一个简单的 PHP 脚本
obd - to - kml.php
。该脚本可以读取日志文件,提取纬度、经度和车辆速度信息,然后生成一个可以在 Google Earth 中打开的 KML 文件。需要注意的是,此脚本并非用于在 Web 服务器上运行,而是像 shell 脚本一样直接执行。使用前需要安装 CLI 版本的 PHP,并设置脚本的执行权限。
例如,在 Linux 或 Mac OS 机器上,若日志文件位于桌面,可在终端中执行以下命令:
./OBDtoKML/obd - to - kml.php ~/Desktop/OBDUINO.CSV
执行后,会在相同位置生成一个扩展名为
.kml
的文件,可在 Google Earth 中打开。对于 Linux 用户,还提供了一个
obd - to - kml.desktop
文件,可将日志文件拖放到该图标上,一键完成转换。若 Google Earth 与
.kml
扩展名关联且设置正确,生成记录行程的轨迹只需以下步骤:
1. 将记忆棒插入计算机,它会自动打开。
2. 将日志文件拖到
obd - to - kml
图标上。
3. 双击生成的
.kml
文件,启动 Google Earth 并打开轨迹。
如果生成的
.kml
文件无法正常工作,很可能是原始数据中包含无效行,如 GPS 坐标显示为“0.000”。可在文本编辑器中打开生成的
.kml
文件,滚动查看,删除明显错误的行,保存文件后重新在 Google Earth 中加载。
5. 生成参数图表
要绘制参数图表,可按以下步骤操作:
1. 用电子表格程序打开日志文件,删除不关心的列。
2. 大多数电子表格软件都包含图表工具,可选择数据范围并生成各种图表。
3. 若计算机上未安装电子表格程序,也可使用免费的在线服务,如 Google Docs,将日志文件导入在线电子表格,然后生成图表。
6. 系统扩展与变化
需要注意的是,对汽车进行改装可能对自己以及其他驾驶员、乘客和行人造成危险,并且某些改装建议在世界某些地区可能不合法。请运用常识并遵守相关当地法规。
-
移动互联网连接
:现在常见使用 3G 网络提供高速移动互联网接入的移动宽带调制解调器,部分提供商还提供使用 3G 调制解调器提供有线以太网连接的移动宽带路由器。通过为车辆遥测平台添加以太网屏蔽罩,可使汽车连接到互联网,实现全球访问。但要注意选择不使用私有、不可路由 IP 地址的提供商,否则无法连接到汽车。
-
车辆控制
:在该项目中,Arduino 用于收集和报告汽车数据,也可扩展其功能来控制汽车。Mega 有很多空闲的 I/O 线,通过添加一些继电器并修改汽车的线束,可让 Arduino 实现锁车、解锁、启动和停止汽车的功能。有作者将其与 3G 宽带的持续移动互联网连接相结合,通过网页浏览器在全球任何地方启动、停止和跟踪汽车,并实时查询发动机管理数据。
-
语音合成器输出
:自 20 世纪 80 年代初《霹雳游侠》中的 Kitt 出现后,很多青少年都希望汽车能说话。利用语音合成器屏蔽罩的设计,扩展车辆遥测平台以包含语音合成器相对简单。合成器的输出可接入车辆音响系统,实现语音提示功能。
-
3D 加速度计
:通过整合 OBD - II 接口的速度数据可计算线性加速度,对 GPS 返回的位置数据进行同样处理,也可生成其他轴的加速度,但精度较低。使用 I2C 连接,可添加 Wii Nunchuck 控制器,读取 X、Y 和 Z 轴的加速度计值,并与其他数据一起存储。
-
数字罗盘
:GPS 模块可根据连续的位置定位近似计算航向,但添加一个带有 I2C 接口的简单磁罗盘模块,可让系统显示更准确的航向值。
-
“霹雳游侠”式警报状态
:若在构建时启用了
carAlarmScreen
选项,当发动机不运行时,会调用
displayAlarmScreen()
函数。该函数仅在 LCD 上显示一个扫描星号,但由于 Mega 有很多空闲的 I/O 引脚,若需要更引人注意的效果,可连接一排 LED,让该函数驱动一个“霹雳游侠”式的扫描仪。
-
电池状态检查
:ELM327 即使在汽车不运行时也能提供电池电压读数,因为它永久连接到未开关的电池线路。定期在汽车不运行时读取电池电压,车辆遥测系统可在必要时关闭汽车中的其他设备,甚至关闭自身。
7. 电子资源相关
在电子项目中,有时需要超出 Arduino 板本身提供的稳压电源。一种简单的方法是使用三端稳压器,最常见的是 78xx 系列,其中 xx 表示输出电压,如 05 表示 5V,06 表示 6V,08 表示 8V,12 表示 12V,15 表示 15V。
以下是一个基于 7805 的简单 5V 电源电路:
graph LR
A[电源输入] --> B[7805 稳压器]
B --> C[0.1μF 电容]
B --> D[输出 5V]
B --> E[二极管]
E --> A
78xx 系列稳压器的优点是基本内置且预设了所需电压,能承受比输出电压高 10V 或 20V 的输入电压,但也有一些需要注意的特性:
-
功率耗散
:在这种所谓的“线性稳压器”电路中,稳压器设备本身相当于一个电阻,其阻值会根据需要变化以维持所需的输出电压。例如,若稳压器输入为 12V,输出为 5V,稳压器电路就像一个吸收 7V 电压差的电阻,多余的功率会转化为热量。电流越大,产生的热量就越多。稳压器必须安全地散发热量,否则会关闭甚至损坏。对于最常见的 7805 TO - 220 封装,无散热片时耗散功率可达约 0.5W,超过此功率则需将金属片连接到散热片或金属底盘上。需注意金属片连接到地,通常需要将稳压器与散热片或底盘进行电气绝缘,市场上有导热垫圈可供选择。
-
压降电压
:另一个需要考虑的特性是压降电压,即输入和输出电压之间的差值,低于此值稳压器不能保证正常工作。7805 器件的压降电压为 2V,因此理想情况下输入电压应始终高于 7V,若使用 6V 电池组则较难满足。低压降(LDO)稳压器可将此值降至 0.5V 或更低,可考虑的型号有 LH117、LM2940 和 LM3940 系列。由于这些型号容易获得,有理由将其作为标准选择,而非 78xx 系列。
-
效率
:线性稳压器效率较低,因为设计上会将所有多余功率转化为热量。在许多应用中,其设计简单的优点可能超过效率问题,但对于电池供电的应用以及对能源效率要求越来越高的情况,这种折衷可能不可接受。在这种情况下,建议研究开关模式稳压器,虽然设计更复杂,但具有更高的灵活性和效率。
8. LED 驱动探讨
LED 作为二极管的一种,能够发光。和普通二极管一样,LED 具有正向电压降(Vf)以及最大和峰值正向电流额定值(分别为 Imax 和 Ipeak),这些值因 LED 而异。在之前的项目中,LED 常被用于简单的状态指示,应用较为直接。下面详细介绍 LED 驱动的相关内容:
-
基本特性
:不同类型和颜色的 LED,其正向电压降和电流额定值差异较大。例如,常见的红色 LED 正向电压降约为 1.8 - 2.2V,而蓝色或白色 LED 的正向电压降可能在 3 - 3.6V 之间。了解这些参数对于正确驱动 LED 至关重要。
-
驱动方式
:
-
电阻限流驱动
:这是最常见的驱动方式,通过串联一个合适的电阻来限制通过 LED 的电流。根据欧姆定律,可计算出所需电阻的阻值。例如,若电源电压为 5V,LED 正向电压降为 2V,期望电流为 20mA,则所需电阻阻值为 $(5V - 2V) / 20mA = 150Ω$。
-
恒流源驱动
:对于对电流稳定性要求较高的应用,可使用恒流源驱动 LED。恒流源能确保无论电源电压或 LED 正向电压降如何变化,通过 LED 的电流始终保持恒定,从而保证 LED 的亮度稳定。
-
PWM 调光驱动
:若需要调节 LED 的亮度,可使用脉冲宽度调制(PWM)技术。通过改变 PWM 信号的占空比,可控制 LED 导通时间的比例,从而实现亮度调节。例如,占空比为 50% 时,LED 的平均亮度约为全亮时的一半。
在实际应用中,应根据具体需求选择合适的驱动方式和参数。例如,在一些对亮度要求不高且成本敏感的应用中,电阻限流驱动可能是最佳选择;而在对亮度稳定性和调光精度要求较高的场合,则可能需要采用恒流源和 PWM 调光相结合的驱动方式。
车辆遥测平台及相关电子技术全解析
9. 电源故障处理的深入分析
电源故障处理在车辆遥测平台中起着关键作用。
PowerFail.pde
里的
setup()
函数将
powerFail()
中断服务程序与中断 0 的下降沿相连,当电源电压下降时,该程序会被触发。以下是对其工作流程的详细分析:
graph TD
A[电源电压下降] --> B[触发 powerFail() 中断服务程序]
B --> C[关闭日志记录 LED]
B --> D[关闭 LCD 背光]
C --> E[主循环收到关闭日志文件信号]
D --> F[节省电量]
在
powerFail()
函数中,代码如下:
void powerFail()
{
digitalWrite(LOG_LED, LOW);
analogWrite(BrightnessPin, brightness[0]);
}
这段代码实现了关闭日志记录 LED 和调整 LCD 背光亮度的功能。然而,如前文所述,扩展该功能以关闭 GPS 模块时需要谨慎。因为中断服务程序可能在任何时候被调用,若在读取 GPS 数据时调用,可能会导致主循环阻塞。例如,当中断服务程序关闭 GPS 并退出后,主循环可能会一直等待一个永远无法完成的读取操作。
10. 菜单按钮功能总结
OBDuinoMega 草图的菜单按钮功能丰富,根据系统处于实时模式还是菜单模式,按钮发挥不同作用。以下是对其功能的总结表格:
| 模式 | 左按钮 | 中按钮 | 右按钮 | 左 + 中按钮 | 中 + 右按钮 | 左 + 右按钮 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 实时模式 | 切换到下一个虚拟屏幕 | 进入菜单模式 | 循环切换 LCD 亮度设置 | 油箱重置 | 行程和短途旅行重置 | 显示当前屏幕的 PID 信息 |
| 菜单模式 | 减小数值 | 选择 | 增大数值 | - | - | - |
菜单中可设置的选项众多,涵盖了从显示设置到车辆参数校准等多个方面。这些选项为用户提供了个性化的使用体验,能够根据不同需求进行灵活调整。
11. 日志记录与数据处理流程
日志记录是车辆遥测平台的重要功能之一,其操作流程如下:
1.
准备工作
:插入记忆棒,等待 VDIP1 识别,可通过连接计算机在 Arduino IDE 中查看反馈信息。
2.
启动记录
:按下“日志记录开/关”按钮,绿色“可安全移除”LED 熄灭,红色“文件打开”LED 亮起,黄色“日志活动”LED 每秒闪烁一次。
3.
停止记录
:再次按下按钮停止记录,绿色“可安全移除”LED 亮起后,可取出记忆棒处理日志文件。
系统生成的日志文件是 CSV 格式,包含了丰富的车辆数据,如 GPS 信息、发动机状态等。这些数据可用于后续的分析和处理,如生成 Google Earth 轨迹和参数图表。
12. Google Earth 轨迹生成优化
生成 Google Earth 轨迹的过程中,可能会遇到一些问题,如生成的
.kml
文件无法正常工作。为了解决这些问题,可采取以下优化步骤:
1.
检查原始数据
:若
.kml
文件无法正常显示,很可能是原始数据中包含无效行,如 GPS 坐标显示为“0.000”。
2.
手动修正
:在文本编辑器中打开生成的
.kml
文件,滚动查看,删除明显错误的行。
3.
重新加载
:保存文件后,重新在 Google Earth 中加载,即可正常显示轨迹。
通过这些优化步骤,可提高生成轨迹的准确性和可靠性。
13. 参数图表生成的更多技巧
生成参数图表时,除了使用电子表格软件和在线服务外,还可根据具体需求进行更细致的操作。例如,在选择数据范围时,可根据不同的分析目的选择不同的时间段和参数。同时,对于一些复杂的图表类型,如三维图表,可通过调整数据格式和图表设置来实现。以下是一些常见的图表类型及其适用场景:
| 图表类型 | 适用场景 |
| ---- | ---- |
| 折线图 | 展示数据随时间的变化趋势,如发动机转速随时间的变化 |
| 柱状图 | 比较不同参数之间的大小关系,如不同行程的燃油消耗对比 |
| 饼图 | 显示各部分数据占总体的比例,如不同类型故障的占比 |
14. 系统扩展的实际应用案例
系统扩展为车辆遥测平台带来了更多的功能和可能性。以下是一些实际应用案例:
-
移动互联网连接
:某车主为了实时监控车辆状态,为车辆遥测平台添加了以太网屏蔽罩,并使用支持 3G 网络的移动宽带路由器。通过这种方式,他可以在全球任何地方通过手机或电脑访问车辆数据,及时了解车辆的位置、发动机状态等信息。
-
车辆控制
:一位汽车爱好者利用 Arduino 的扩展功能,添加了继电器和修改了汽车线束,实现了通过手机 APP 远程控制汽车的锁车、解锁、启动和停止功能。他还将其与 3G 宽带的持续移动互联网连接相结合,实时查询发动机管理数据,为汽车的使用和维护带来了极大的便利。
-
语音合成器输出
:在一辆豪华轿车中,车主安装了语音合成器,将其输出接入车辆音响系统。当车辆出现故障或需要提醒时,系统会通过语音提示车主,提高了驾驶的安全性和便利性。
15. 电子资源的选择与应用
在选择电子资源时,需要综合考虑多个因素,如功率耗散、压降电压和效率等。对于线性稳压器和低压降(LDO)稳压器的选择,可根据具体应用场景进行判断:
-
线性稳压器
:适用于对成本和设计简单性要求较高,且对效率要求不是特别苛刻的应用。例如,在一些小型电子设备中,78xx 系列稳压器可以满足基本的电源需求。
-
低压降(LDO)稳压器
:对于对压降电压要求较低,如使用低电压电池供电的应用,LH117、LM2940 和 LM3940 系列等 LDO 稳压器是更好的选择。
同时,对于开关模式稳压器,虽然设计更复杂,但具有更高的灵活性和效率,适用于对能源效率要求较高的应用,如电动汽车的电子控制系统。
16. LED 驱动的实际应用与挑战
在实际应用中,LED 驱动面临着一些挑战,如不同环境下的亮度一致性和散热问题。为了解决这些问题,可采取以下措施:
-
亮度一致性
:采用恒流源驱动和 PWM 调光相结合的方式,确保在不同环境温度和电源电压变化的情况下,LED 的亮度保持稳定。
-
散热问题
:对于高功率 LED,可采用散热片、风扇等散热设备,降低 LED 的工作温度,延长其使用寿命。
此外,在选择 LED 驱动方式时,还需要考虑成本、可靠性和维护难度等因素。例如,在一些大型照明系统中,采用集中式恒流源驱动可以降低成本和维护难度,但对于一些小型设备,分散式电阻限流驱动可能更为合适。
超级会员免费看
32

被折叠的 条评论
为什么被折叠?



