LEGO-EV3-图像扫描仪
使用乐高 Mindstorms EV3 教育套装和额外的轮子构建图像扫描仪。包括 Mindstorms EV3 软件的源代码和构建说明。扫描 8.5 英寸宽的纸张,但可以适应类似的页面尺寸。
输入
- 砖块按钮 – 控制配置菜单
- 超声波 – 检测纸张何时插入
- 触摸传感器 – 通过碰撞重置颜色传感器位置
- 光传感器 – 扫描像素以创建图像
输出
- 44 x 32 像素 8 位灰度图像
- 代表灰度 8 位位图数据值的 CSV 文件
- 屏幕上的抖动图像
部分
此构建需要来自一套乐高 MINDSTORMS EV3 套装的零件和一个额外的大轮,该轮子可以从另一套相同套装或汽车套装中获得。
构建和传感器详细信息
- 该机器人采用两种力齿轮配置,一种通过单轨在水平轴上移动光传感器,第二种为包含要扫描的图像的纸张提供卷轴机构。
- 绕线机构和单轨均使用大型电机。
- 配重用于使单轨车轮与单轨表面施加的法向力对齐。
- 卷轴附近有一个红外传感器,可以检测纸张何时插入。
- 两个触摸传感器放置在扫描仪的每个角上。它们用于检测单轨列车何时到达拐角。当前仅使用右侧的传感器。
软件注释
该程序由四个阶段组成:UI、扫描、打印图像、保存图像。 UI 的构建采用了 MVC 范式以适应顺序块编程。它允许 n 个配置屏幕,每个屏幕配置一个值。程序中稍后使用的变量对应于每个设置。
配置屏幕
- uiPrintScreen : bool – 如果为 true,则将在 EV3 的屏幕上打印抖动的 1 位图像,以类似于 RAM 中的灰度图像。
- uiSaveState : bool – 如果为 true,将从 RAM 中的数据生成 CSV 文件。该文件类似于位图文件,可以使用 A-VEKT Image CSV Converter 等外部程序转换为位图。
- XStartPos :数字 – 指示 X 轴上的起始位置(以英寸为单位)。
- YStartPos :数字 – 指示 Y 轴上的起始位置(以英寸为单位)。
- width : numeric – 表示图像的宽度(以英寸为单位)。
- height : numeric – 表示图像的高度(以英寸为单位)。
扫描阶段
- 扫描前,系统会提示用户插入待扫描的纸张,并将光传感器的位置重置为初始位置。
- 扫描包括在单轨上移动图像传感器以及在卷轴上移动纸张,以创建独立扫描点的矩阵。
- 扫描时,一行从右向左扫描,下一行从左向右扫描。这减少了扫描时间。
- 扫描完成后,剩余的纸张将从扫描仪背面卷起。
打印阶段
- 此阶段是可选的并且默认启用。它包括在屏幕上打印图像。
- 扫描的图像包含灰度数据,但 EV3 的屏幕为 1 位黑白。为了补偿,每个扫描像素都使用有序(拜耳)抖动转换为 4 x 4 像素图案,然后打印在屏幕上。
保存阶段
- 此阶段是可选的。
- 由于 EV3 的文件块仅限于保存可打印字符,因此无法以编程方式生成位图图像。相反,使用 CSV 文件。
- 可以使用具有 8 位 Alpha 通道设置的“A-VEKT Image CSV Converter”将 CSV 转换为位图。
- 创建 CSV 时,反向扫描的行将在第二个数组中重新排序。
改进
- 使用第二组可以提高扫描仪精度,该组可用于创建双轨 x 轴而不是单轨。
- 由于电缆施加的力,单轨有时不稳定,这会导致在捕获某些像素时发生焦点变化。
- 该软件可以改进。我按照我停止工作时的样子发布它。
- 在乐高发布适用于 Linux 操作系统的 LEGO MINDSTORMS EV3 版本或者我找到另一个令人信服的理由购买我自己的 Mindstorms EV3 套件之前,我没有计划继续开发该项目。
许可和版权
- 源文件在 GNU 通用公共许可证 2.0 下共享
- 说明图片和附加内容根据 Creative Commons License Attribution 4.0 International 共享
- 版权由波多黎各大学阿雷西博分校和我本人共享。
免责声明
- 我开发这个是为了好玩,作为波多黎各大学阿雷西博分校机器人入门课程的一部分。
- 该扫描仪大致基于“非官方乐高 MINDSTORMS NXT 2.0 发明家指南”中的打印机。
- LEGO、MINDSTORMS、MINDSTORMS EV3、MINDSTORMS NXT 是乐高集团的商标和/或版权。使用它们并不意味着与它们有任何隶属关系或得到它们的认可。