课 程 设 计 报 告 基 于 Arduino 的 自 动 泊 车 系 统 徐 耀, 陈 玎, 雷 雨 [ 内 容 摘 要 ]: 随 着 经 济 的 发 展, 人 们 的 生 活 水 平 普 遍 提 高, 私 家 车 的 保 有 量 持 续 上 升, 道 路 上 的 驾 驶 员 也 越 来 越 多 对 于 很 多 驾 驶 员 来 说, 停 车 入 库 是 一 个 较 大 的 挑 战, 尤 其 是 在 拥 挤 的 城 市 道 路 作 者 所 在 团 队 在 充 分 讨 论 之 后, 研 发 了 一 套 基 于 Arduino 的 自 动 泊 车 系 统, 能 使 小 车 自 动 扫 描 车 位 并 停 入 [ 关 键 词 ]: 小 车 自 动 泊 车 [ 正 文 ]: 一 背 景 随 着 经 济 的 发 展, 人 们 的 生 活 水 平 普 遍 提 高, 私 家 车 的 保 有 量 持 续 上 升, 道 路 上 的 驾 驶 员 也 越 来 越 多 对 于 很 多 驾 驶 员 来 说, 停 车 入 库 是 一 个 较 大 的 挑 战, 尤 其 是 在 拥 挤 的 城 市 道 路 作 者 所 在 团 队 在 充 分 讨 论 之 后, 考 虑 了 现 有 的 知 识 基 础, 决 定 使 用 Ardunio 作 为 研 发 的 平 台 Arduino 是 一 款 便 捷 灵 活 方 便 上 手 的 开 源 电 子 原 型 平 台, 包 含 硬 件 和 软 件 Arduino 能 通 过 各 种 各 样 的 传 感 器 来 感 知 环 境, 通 过 控 制 灯 光 马 达 和 其 他 的 装 置 来 反 馈 影 响 环 境 板 子 上 的 微 控 制 器 可 以 通 过 Arduino 的 编 程 语 言 来 编 写 程 序, 编 译 成 二 进 制 文 件, 烧 录 进 微 控 制 器 对 Arduino 的 编 程 是 利 用 Arduino 编 程 语 言 和 Arduino 开 发 环 境 来 实 现 的 二 系 统 设 计 目 的 用 途 及 功 能 如 前 言 所 述, 我 们 设 计 这 个 自 动 泊 车 系 统 就 是 为 了 方 便 驾 驶 员 在 路 边 侧 方 停 车, 这 套 系 统 可 用 于 普 通 家 用 车 在 道 路 旁 进 行 自 动 停 车
三 设 计 思 想 以 及 电 路 原 理 图 1. 小 车 以 Arduino MEGA 作 为 数 据 处 理 中 心, 将 安 装 在 小 车 上 的 超 声 波 模 块 的 信 号 汇 总 到 Arduino, 经 其 处 理 后 输 出 控 制 信 号 到 电 机 驱 动 版, 驱 动 步 进 电 机 从 而 控 制 小 车 的 移 动 2. HC-SR04 超 声 波 模 块 安 装 在 小 车 的 右 侧 后 侧 当 小 车 沿 着 预 设 的 道 路 行 驶 时, 超 声 波 模 块 不 断 扫 描, 测 出 小 车 和 路 边 的 距 离 x, 小 车 尾 部 到 障 碍 物 的 距 离 d 3. 当 x 的 值 满 足 一 定 范 围 时, 小 车 便 判 断 识 别 到 了 车 位 4. 小 车 自 动 行 驶 至 车 位 的 左 前 方, 反 向 前 进 倒 入 车 库 5. 当 小 车 尾 部 和 车 位 底 部 的 距 离 d 小 于 一 定 值 时, 小 车 便 判 断 停 入 了 车 位, 停 止 运 动
四 硬 件 单 元 1 Arduino MEGA2560 处 理 器 ATmega2560 工 作 电 压 5V 输 入 电 压 ( 推 荐 ) 7-12V 输 入 电 压 ( 范 围 ) 6-20V 数 字 IO 脚 54 ( 其 中 16 路 作 为 PWM 输 出 ) 模 拟 输 入 脚 16 IO 脚 直 流 电 流 40 ma 3.3V 脚 直 流 电 流 50 ma Flash Memory 256 KB SRAM 8 KB EEPROM 4 KB 工 作 时 钟 16 MHz Arduino Mega2560 可 以 通 过 3 种 方 式 供 电, 而 且 能 自 动 选 择 供 电 方 式 外 部 直 流 电 源 通 过 电 源 插 座 供 电 电 池 连 接 电 源 连 接 器 的 GND 和 VIN 引 脚 USB 接 口 直 接 供 电
电 源 引 脚 说 明 : VIN --- 当 外 部 直 流 电 源 接 入 电 源 插 座 时, 可 以 通 过 VIN 向 外 部 供 电 ; 也 可 以 通 过 此 引 脚 向 Mega2560 直 接 供 电 ;VIN 有 电 时 将 忽 略 从 USB 或 者 其 他 引 脚 接 入 的 电 源 5V --- 通 过 稳 压 器 或 USB 的 5V 电 压, 为 UNO 上 的 5V 芯 片 供 电 3.3V --- 通 过 稳 压 器 产 生 的 3.3V 电 压, 最 大 驱 动 电 流 50mA GND --- 地 脚 存 储 器 : ATmega2560 包 括 了 片 上 256KB Flash, 其 中 8KB 用 于 Bootloader 同 时 还 有 8KBSRAM 和 4KB EEPROM 输 入 输 出 : 14 路 数 字 输 入 输 出 口 : 工 作 电 压 为 5V, 每 一 路 能 输 出 和 接 入 最 大 电 流 为 40mA 每 一 路 配 置 了 20-50K 欧 姆 内 部 上 拉 电 阻 ( 默 认 不 连 接 ) 除 此 之 外, 有 些 引 脚 有 特 定 的 功 能 4 路 串 口 信 号 : 串 口 0---0(RX)and 1(TX); 串 口 1---19(RX)and 18(TX); 串 口 2--- 17(RX)and 16(TX); 串 口 3---15(RX)and 14(TX) 其 中 串 口 0 与 内 ATmega8U2 USB-to-TTL 芯 片 相 连, 提 供 TTL 电 压 水 平 的 串 口 接 收 信 号 6 路 外 部 中 断 :2( 中 断 0),3( 中 断 1),18( 中 断 5),19( 中 断 4),20( 中 断 3),and 21( 中 断 2) 触 发 中 断 引 脚, 可 设 成 上 升 沿 下 降 沿 或 同 时 触 发 14 路 脉 冲 宽 度 调 制 PWM(0--13): 提 供 14 路 8 位 PWM 输 出 SPI(53(SS),51(MOSI),50(MISO),52(SCK)):SPI 通 信 接 口 LED(13 号 ):Arduino 专 门 用 于 测 试 LED 的 保 留 接 口, 输 出 为 高 时 点 亮 LED, 反 之 输 出 为 低 时 LED 熄 灭 16 路 模 拟 输 入 : 每 一 路 具 有 10 位 的 分 辨 率 ( 即 输 入 有 1024 个 不 同 值 ), 默 认 输 入 信 号 范 围 为 0 到 5V, 可 以 通 过 AREF 调 整 输 入 上 限 除 此 之 外, 有 些 引 脚 有 特 定 功 能 TWI 接 口 (20(SDA) 和 21(SCL)): 支 持 通 信 接 口 ( 兼 容 I2C 总 线 ) AREF: 模 拟 输 入 信 号 的 参 考 电 压 Reset: 信 号 为 低 时 复 位 单 片 机 芯 片 通 信 接 口 : 1. 串 口 :ATmega2560 内 置 的 4 路 UART 可 以 与 外 部 实 现 串 口 通 信 ;ATmega16U2 可 以 访 问 串 口 0 实 现 USB 上 的 虚 拟 串 口 2.TWI( 兼 容 I2C) 接 口 3.SPI 接 口
下 载 程 序 : Arduino Mega2560 上 的 ATmega2560 已 经 预 置 了 bootloader 程 序, 因 此 可 以 通 过 Arduino 软 件 直 接 下 载 程 序 到 Mega2560 中 可 以 直 接 通 过 Mega2560 上 ICSP header 直 接 下 载 程 序 到 ATmega2560 ATmega16U2 的 Firmware( 固 件 ) 也 可 以 通 过 DFU 工 具 升 级 物 理 特 征 : Arduino Mega2560 的 最 大 尺 寸 为 4 x 2.1 inches 注 意 要 点 : Arduino Mega2560 上 USB 口 附 近 有 一 个 可 重 置 的 保 险 丝, 对 电 路 起 到 保 护 作 用 当 电 流 超 过 500mA 是 会 断 开 USB 连 接 Arduino Mega2560 提 供 了 自 动 复 位 设 计, 可 以 通 过 主 机 复 位 这 样 通 过 Arduino 软 件 下 在 程 序 到 Mega2560 中 软 件 可 以 自 动 复 位, 不 需 要 在 复 位 按 钮 在 印 制 板 上 丝 印 "RESETEN" 处 可 以 使 能 和 禁 止 该 功 能 Arduino Mega2560 的 设 计 与 Arduino USB 接 口 标 准 版 的 设 计 完 全 兼 容, 因 此 用 于 Arduino UNO 和 之 前 系 列 的 扩 展 板 也 可 以 用 在 Arduino Mega2560 上 2 HC-SR04 超 声 波 测 距 模 块 主 要 技 术 参 数 : 1 使 用 电 压 :DC5V; 2 静 态 电 流 : 小 于 2mA; 3 电 平 输 出 : 高 5V;
4 电 平 输 出 : 底 0V; 5 感 应 角 度 : 不 大 于 15 度 ; 6 探 测 距 离 :2cm-450cm, 高 精 度 可 达 0.2cm 7 接 线 方 式,VCC trig( 控 制 端 ) echo( 接 收 端 ) GND 工 作 原 理 : 1 采 用 IO 触 发 测 距, 给 至 少 10us 的 高 电 平 信 号 ; 2 模 块 自 动 发 送 8 个 40khz 的 方 波, 自 动 检 测 是 否 有 信 号 返 回 ; 3 有 信 号 返 回, 通 过 IO 输 出 一 高 电 平, 高 电 平 持 续 的 时 间 就 是 超 声 波 从 发 射 到 返 回 的 时 间 测 试 距 离 =( 高 电 平 时 间 * 声 速 (340M/S))/2 应 用 领 域 : 飞 行 器 测 距 机 器 人 避 障 公 共 安 防 停 车 场 检 测 等 3 L298N 电 机 驱 动 模 块 1. 驱 动 芯 片 :L298N 双 H 桥 直 流 电 机 驱 动 芯 片 2. 驱 动 部 分 端 子 供 电 范 围 Vs:+5V~+35V ; 如 需 要 板 内 取 电, 则 供 电 范 围 Vs:+7V~ +35V 3. 驱 动 部 分 峰 值 电 流 Io:2A 4. 逻 辑 部 分 端 子 供 电 范 围 Vss:+5V~+7V( 可 板 内 取 电 +5V)
5. 逻 辑 部 分 工 作 电 流 范 围 :0~36mA 6. 控 制 信 号 输 入 电 压 范 围 : 低 电 平 :-0.3V Vin 1.5V 高 电 平 :2.3V Vin Vss 7. 使 能 信 号 输 入 电 压 范 围 : 低 电 平 :-0.3 Vin 1.5V( 控 制 信 号 无 效 ) 高 电 平 :2.3V Vin Vss( 控 制 信 号 有 效 ) 8. 最 大 功 耗 :20W( 温 度 T=75 时 ) 9. 存 储 温 度 :-25 ~+130 10. 驱 动 板 尺 寸 :48mm*43mm*33mm( 带 固 定 铜 柱 和 散 热 片 高 度 ) 11. 驱 动 板 重 量 :33g 12. 其 他 扩 展 : 控 制 方 向 指 示 灯 逻 辑 部 分 板 内 取 电 接 口 步 进 电 机 的 驱 动 : 板 上 的 ENA 与 ENB 为 高 电 平 时 有 效, 这 里 的 电 平 指 的 是 TTL 电 平 ENA 为 A1 和 A2 的 使 能 端,ENB 为 B1 和 IB2 的 使 能 端 BJ 接 步 进 电 机 公 共 端 步 进 电 机 控 制 逻 辑 如 下 所 示, 其 中 A B C D 为 步 进 电 机 的 四 个 线 圈, 为 1 表 示 有 电 流 通 过, 为 0 表 示 没 有 电 流 流 过 线 圈 连 线 图 如 下 图 所 示 ( 以 四 相 步 进 电 机 为 例 )
4 42 式 两 相 步 进 电 机 :
步 距 精 度 5% 温 升 80 Max 环 境 温 度 -20 ~+50 绝 缘 电 阻 100M Ω Min 500VDC 耐 压 500V AC 1minute 径 向 跳 动 最 大 0.06mm(450g 负 载 ) 轴 向 跳 动 最 大 0.08mm(450g 负 载 ) 技 术 数 据 : 型 号 步 距 角 电 机 长 度 (mm) 保 持 转 矩 (Nm) 额 定 电 流 (A) 相 电 阻 (Ω) 相 电 感 (mh) 转 子 惯 量 (g.cm2) 电 机 重 量 (kg) 2HB42-33 33 0.16 0.95 4.2 2.5 38 0.2 2HB42-38 38 0.26 1.2 3.3 3.2 54 0.28 1.8 2HB42-47 47 0.317 1.2 3.3 2.8 68 0.35
外 形 尺 寸 : 矩 频 特 性 曲 线 图 接 线 图 模 块 接 线 L298N 电 机 驱 动 模 块 第 2 脚 接 电 机 的 A ( 电 机 1 脚 ) L298N 电 机 驱 动 模 块 第 3 脚 接 电 机 的 A-( 电 机 4 脚 ) L298N 电 机 驱 动 模 块 第 13 脚 接 电 机 的 B ( 电 机 3 脚 ) L298N 电 机 驱 动 模 块 第 14 脚 接 电 机 的 B-( 电 机 6 脚 )
五 软 件 设 计 思 想 : 电 路 图
超 声 波 模 块 是 眼,arduino 及 程 序 做 脑, 步 进 电 机 做 脚, 在 超 声 波 模 块 看 到 不 同 的 环 境 的 情 况 下, 大 脑 (arduino) 通 过 神 经 (L298N 电 机 驱 动 模 块 ) 对 脚 ( 步 进 电 机 ) 下 达 指 令, 最 后 达 到 停 入 车 位 的 效 果 软 件 设 计 流 程 及 功 能 小 车 将 配 备 三 个 超 声 波 探 测 器 超 声 波 模 块 1 s1 超 声 波 模 块 2 s2 超 声 波 模 块 3 s3 头 尾 程 序 运 行 流 程 : 情 形 一 ( 沿 墙 壁 直 行 ): 小 于 5cm 小 于 5cm S3 大 于 探 测 范 围, 执 行 小 车 子 程 序 1( 确 保 小 车 与 墙 壁 平 行, 且 距 离 位 于 4 到 6cm): 情 形 二 ( 继 续 直 行 ): 大 于 5cm 大 于 4cm, 小 于 6cm S3 大 于 探 测 范 围, 小 车 保 持 直 行 情 形 三 ( 继 续 执 行 ): 大 于 5cm 大 于 5cm S3 大 于 探 测 范 围, 小 车 保 持 直 行
情 形 四 ( 启 动 倒 车 子 程 序 ): 大 于 4cm, 小 于 6cm 大 于 5cm S3 大 于 探 测 范 围, 执 行 小 车 子 程 序 2( 倒 车 子 程 序 ) 情 形 五 : 大 于 4cm, 小 于 6cm 大 于 4cm, 小 于 6cm S3 大 于 4cm, 小 于 6cm 运 行 结 束 子 程 序 列 表 : Arduino-Led 子 程 序 1( 小 车 直 行 ):led 较 快 闪 烁 Arduino-Led 子 程 序 2 ( 小 车 调 整 方 向 及 小 车 子 程 序 1):led 较 慢 闪 烁 小 车 子 程 序 1( 确 保 小 车 与 墙 壁 平 行, 且 距 离 位 于 4 到 6cm) 小 车 子 程 序 2( 倒 车 子 程 序 ) 小 车 源 代 码 : #include <Stepper.h> #define trigpin 7 #define echopin 6 #define trigpin 9 #define echopin 8 #define trigpins3 11 #define echopins3 10 #define led 13 #define STEPS 200 #define d 12 #define e 8 #define f 3 Stepper stepperl(steps,30,31,32,33); Stepper stepperr(steps,40,41,42,43); int L=0,R=0; ////////////////////////////////////////////////////// ////////////////////*Functions*/////////////////////// ////////////////////////////////////////////////////// long distance_() //test the distance {
long duration,distance; digitalwrite(trigpin, LOW); delaymicroseconds(2); digitalwrite(trigpin, HIGH); delaymicroseconds(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); distance = (duration/2) / 29.1; Serial.println(" "); Serial.print(distance); Serial.println(" cm"); return distance; } ////////////////////////////////////////////////////// long distance_() //test the distance { long duration,distance; digitalwrite(trigpin, LOW); delaymicroseconds(2); digitalwrite(trigpin, HIGH); delaymicroseconds(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); distance = (duration/2) / 29.1; Serial.println(" "); Serial.print(distance); Serial.println(" cm"); return distance; } ////////////////////////////////////////////////////// long distance_s3() //test the distance { long duration,distance; digitalwrite(trigpins3, LOW); delaymicroseconds(2); digitalwrite(trigpins3, HIGH); delaymicroseconds(10); digitalwrite(trigpins3, LOW);
duration = pulsein(echopins3, HIGH); distance = (duration/2) / 29.1; Serial.println("S3 "); Serial.print(distance); Serial.println(" cm"); return distance; } ////////////////////////////////////////////////////// int (int l,int r) { int i=0; while (i++<5) { stepperl.step(l); stepperr.step(r); } } ////////////////////////////////////////////////////// int distance_betweende() { if (distance_()<e) L=1,R=2,Serial.println("left"); else if (distance_()<d) L=2,R=2,Serial.println(""); else L=2,R=1,Serial.println("right"); (L,R); } ////////////////////////////////////////////////////// void testsensors(){ distance_(); delay(1000); distance_(); delay(1000); distance_(); delay(2000); distance_();
delay(1000); distance_(); delay(1000); distance_(); delay(2000); distance_s3(); delay(1000); distance_s3(); delay(1000); distance_s3(); delay(2000); } ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// void setup() { Serial.begin (9600); pinmode(trigpin, OUTPUT); pinmode(echopin, INPUT); pinmode(trigpin, OUTPUT); pinmode(echopin, INPUT); pinmode(trigpins3, OUTPUT); pinmode(echopins3, INPUT); pinmode(13, OUTPUT); stepperr.setspeed(60); stepperl.setspeed(60); } void loop() { int i; for(i=0;i++<50;) (1,1),Serial.println(""); for(i=0;i++<50;) (1,3);Serial.println("left_"); for(i=0;i++<50;) (-1,-1);Serial.println("back"); for(i=0;i++<50;)
} (1,-3);Serial.println("right_spin"); 调 试 数 据 :
5 cm 8 cm 9 cm 11 cm
( 总 共 50 个 ) left_ back right_