我不是妈妈的工程师

前言

我已经失去了制作“小盒子”所花费的时间,突然间我意识到我非常尊重工程师-那些能够并且能够设计和创造新事物的人。 我的脑袋立刻充满了我在童年时(不仅是现在)拆卸的设备的记忆。 这些情况很有趣,当松开最后一个螺栓时,例如鼻烟盒中的恶魔,几个小的弹簧和零件飞出,这是完全不可能收拾回来的。

一旦我决定制作一个小型设备(“外星人:隔离”游戏中的“ Security Access Tuner”),即一个控制器,一个屏幕,几个控件,并将它们全部包装在一个小箱子中,计划将其打印在3d打印机上。 然后我什至无法想到所有这些小东西要花多长时间...

一直以来,我都被创造新事物的想法所吸引,这些事物在日常琐事中很少能奏效。 我不知道是什么确切地促使了该特定设备的创建,但是有一天我想到:“为什么不通过游戏Alien:Isolation制作安全访问调谐器”。

该游戏具有用于“破坏电子锁”的设备。 该设备将迷你游戏的机制引入游戏中。 然后根据自己的喜好选择一个模因,但介于“我们在游戏中添加了游戏,以便您可以玩游戏,玩游戏”和“我们需要更深入!”之间。 我不会向您介绍游戏细节,因为 每个人都可以通过在您喜欢的搜索引擎中输入名称来详细了解哪种“野兽”。 我们只是同意,有一些手持设备带有我决定实现的游戏。

在游戏中,设备看起来像这样(我试图准确地再现设备的外观,但这不是主要任务,因此最终结果与原始结果略有不同):

访问调谐器

游戏截图,设备在角色手中。

因此,您需要用游戏和这些相同的“迷你游戏”制作一个小型设备-两个。 在第一个(上图中的一个)中,您需要按照在指定的时间在屏幕上显示的顺序选择字符。 如果您习惯了游戏,它并不难,但是起初它会让您思考。 第二场比赛是做出反应,您只需要及时按下按钮即可(我不会专注于此,因为这没什么特别的)。 除游戏外,还有几个状态屏幕,游戏之间的转换以及仅“请稍候...”。

碰巧的是,我懒得闲逛着德州仪器(TI)的一块板子-Tiva C(与Arduino类似)和一块屏幕。 有一天,灵感在空闲时间的情况下袭击了一个人,这对夫妇(板子和屏幕)有一个应用程序...

发展历程


我立即自己决定,这个想法中的“蛋糕上的樱桃”将不是软件部分,而是工程部分。 我想制造和组装该设备,以使所有组件都紧凑,功能齐全,合乎逻辑且方便(扰流器:事实证明并非如此简单)。

编程是我赖以谋生的东西,我理解程序部分无法提供严重的“挑战”。 因此,为了使这个想法付诸实践,我从最接近我的地方开始-从软件部分开始。

通过按钮和旋转编码器对事件进行处理是非常普遍的事,我认为没有理由对此做任何介绍。 尽管软件实现中一个有趣的部分是在屏幕上显示图形。 更确切地说,甚至不是结论本身,而是我想在屏幕上显示的内容所必需的一组操作。 基本上,“问题”部分是:

  1. 设备的内存有限,无法将许多图片(照片)添加到设备的内存中。
  2. 屏幕使用565格式的颜色(每种颜色两个字节),即 对于所有图形,您需要将其转换为最终格式,但是由于内存限制,您将无法以该格式将所有必要的图像存储在设备的内存中。
  3. 如果需要重新绘制整个屏幕,屏幕将以〜1帧/秒的惊人频率刷新。

前两个问题相对简单地解决了,因为需要在屏幕上显示的图形非常原始(就像在游戏中一样,我决定离源材料不远)。 这就是为什么我立即决定使用双色图像(精灵)的原因,这意味着8个像素适合一个字节,并且在输出时可以简单地更改颜色。

基于这些精灵,除少数几个例外外,所有图形(包括文本)均已实现:

  • 制造商的虚构公司(Seegson)的徽标,该徽标使用16种颜色的调色板(即1字节2个像素)。 当我打开设备并在开发的最后阶段就已经添加了它,我想要更多的美感,因为 还有一些记忆。
  • 实现了绘制图形基元的功能(例如,矩形,但是在我尝试重复的界面中有很多)。

屏幕刷新率的问题不是很容易以编程方式解决。 特别是对于需要经常更新屏幕上数据的地方。

幸运的是,问题不在于屏幕本身,而在于缓慢的数据总线(SPI总线),因此您只需要保持裤子状态,而不必走得太宽-仅画出真正需要的东西,即 “越少越好。”

接口渲染分为三部分,以解决刷新率问题:

  • 绘制初始图(此处保持不变的所有内容-背景和静态界面元素)。 这个阶段几乎要花一秒钟,但仅在更换屏幕时才会发生,而这一点并不是很明显。
  • 不依赖于用户动作(倒数计时器状态,干扰等)的动画。 通常,这些都是很小的变化-不超过屏幕的15%,即使在这种情况下,它也允许您每秒至少更新6次屏幕(实际上,刷新率要高得多,并且延迟是难以察觉的)。 唯一的例外是屏幕受到干扰-我将在后面进行讨论。
  • 取决于用户动作(滑块或所选字符周围的框架的位置)的动画。 这些事件很少发生,因为 出于所有愿望,用户将无法以比状态重绘屏幕更快的速度单击按钮。

简而言之,为了避免重绘整个屏幕,仅重绘了所需的内容。 因此,例如,如果用户选择了屏幕上的下一个字符,则需要擦除前一个“选择”(框架)(用背景色绘制)并在新位置绘制框架。

这种优化的另一个示例(您需要绘制很多图像,但实际上这还不够),该屏幕带有噪声(白噪声),这是用户需要找到“正确频率”才能进入迷你游戏的地方。 干扰占据了屏幕的大部分,并且重新绘制所有黑白点将太长(而且很愚蠢)。 因此,绘制白噪声的工作方式如下:

屏幕分为两部分(左侧和右侧)。 绘图从顶部开始。

  1. 随机选择屏幕的一部分(左侧或右侧)。
  2. 在此部分中,绘制了一条随机的黑白点。 该屏幕具有与其一起使用的两个基本操作(初始化操作除外)-写入屏幕缓冲区的操作以及在该屏幕缓冲区本身内移动指针的操作。 此外,由于我无法理解的原因,移动指针的操作比写入操作的速度明显慢。 因此,对于此屏幕,顺序写入屏幕缓冲区可让您在大约0.75秒内填充整个屏幕,并且当分别绘制每个像素时,将花费几乎两倍的时间(1.4秒)。 由于此功能,绘制了黑白点的条带,而不仅仅是随机像素。
  3. 转到屏幕上的下一个垂直条,然后重复第1段中所述的步骤。

绘制所有垂直线后,绘图将从上方重新开始。 由于将一些黑白点叠加在其他点上,因此完全看不到屏幕实际上是这样“画有条纹”的(前20个随机渲染):

噪音图

实际上,干涉不会画在整个屏幕上,而只会画在那些可接受干涉的部分上(即,屏幕上有几个可能发生干涉的区域,并且仅在这些区域内绘制),但这不会改变方法。

该界面需要另一个相当有趣的元素-所选射频的指示器。 为了使想象更容易,我们可以假设我们手中有一个无线电接收机的类似物。 有一个可以绕一圈旋转的调谐轮,以找到(选择)所需的频率。 屏幕上将绘制此频率的指示器,该指示器可以绕屏幕上的整个圆圈旋转并返回到其原始位置。 界面中的指示器是一个三角形(实际上,这并不完全正确,但是为了简化显示,我们同意它是一个三角形),它绕着位于屏幕中心的一个顶点旋转:

指标-三角形

屏幕的边框在图片上标记为灰色。

实际上,不应完全绘制界面中的同一三角形。 屏幕上只能画出距离屏幕中心(屏幕边缘)较远的那部分片段。 通过一个示例,我用橙色显示了它:

指示符

为了清楚起见,中间保留了灰色的半透明矩形,但未包含在图形中。

任务本身并不困难,仅通过重新绘制整个屏幕来“直接解决”该任务也是不可接受的。 因此,仅绘制了指示器的各个片段(两个斜切的边框和一个连接它们的矩形),并且在绘制之前,指示器的先前状态被“擦除”(图片中的红色):

指标图


即 对于此指示器本身,添加了绘制矩形的功能,该功能沿对角线划分并填充有两种颜色(相对于对角线的一侧为一种颜色,而另一侧为另一种颜色)。 指示器由两个这样的元素(在图中标记为数字1)和将它们连接起来的矩形(标记为2)组成:

图片

该元素的宽度(或高度)由相对于屏幕中心的偏移量确定。 因此,当指示器位于屏幕的正中央时,仅绘制一个矩形(2),并且当指示器移近屏幕边缘时,元素(1)的宽度会增加。 当指示器位于屏幕边缘时,在绘制时会添加另一个矩形:

图片

也许这就是软件部分所有“趣味性”都结束了的地方,我可以继续讲究让我如此尊重工程师的原因...

不是工程师


尽管我曾经在大学文凭中写过我是“计算机科学工程师”,但实际上我意识到我是“任何计算机科学”,但不是工程师。 我知道“工程师”一词的定义比较宽泛,如今,通常,通常,不是经理的人就是工程师。

我说的是“工程师”,是指可以并且可以规划,设计,建造和发展的人。 而且据我了解,我还不是一名工程师。 我是这方面的业余爱好者-我喜欢发明和实施某些东西,但我不能说我总是成功。 我认为自己很简单的工程任务(我们正在讨论设备及其主要组件的情况)花费了我什至无法想象的时间。 我不知道确切的时间,但我决定相信人们并没有想出可以描述如此巨大数量的数字。

小时候,父亲经常对我说“七次割一次”的谚语。 然后我不完全理解他为什么这么频繁地这么说,但是正是在创建这种设备的过程中,我才意识到,在决定赞成一种选择之前,进行七次测量非常重要。 如果我听爸爸的话,我不必做那么多尝试和错误。

因此,在设备的左侧,应该有一个滚轮,可以向上旋转(或向前旋转)以选择屏幕上的下一个字符,或向下旋转(向后)以选择前一个字符。 我决定不做完整的滚轮,因为 对于旋转编码器或类似的编码器,在外壳中将需要更多的空间,对于“前进” /“后​​退”过渡,按钮似乎更加合乎逻辑。

我决定设计一个可以上下移动的半圆形式的杠杆。 为了避免“多余的身体运动”,必须用相同的杠杆按向上或向下按钮并在某个轴上:

杠杆想法

这个主意对我来说简直是疯狂,但随之而来的是很多问题(涉及设备设计的人们很可能会获得现成的答案),而我却没有答案。 问题如下:

  • 什么以及如何附加按钮? 在上图中,它们只是“悬空”,而在最终设备中则不可能。
  • 我是否需要考虑一种将杠杆返回中心的机制? 您是否需要弹簧或按钮是否有足够的弹性?
  • 如何将杠杆插入外壳,以使外壳上的孔尽可能不可见? 杠杆是一部分还是数个?
  • 轴如何连接? 轴是外壳的一部分还是单独的一部分?
  • 在3d打印机上打印后,如何确保“在纸上工作”将正常工作?

而且我敢肯定,有很多现成的解决方案,中国人很可能可以在漂亮的盒子里订购“​​女人的模块化按钮杠杆模块,闻到女人的味道”之类的东西。 我也知道用于创建此类解决方案的现成工具(编辑器),但是出于对体育运动的兴趣,我决定“重新发明轮子”,亲自发明一切并仅使用“手头”的基本工具。

我提出了此杠杆的不同版本的原型,并在实践中对其进行了测试。 我检查了不同大小的轴,关节和墙壁的强度,检查了由多个零件创建杠杆的可能性(以简化杠杆在壳体中的放置)。 我考虑了这一切如何落入体内。

每次收集另一个原型时,我都会回忆起围绕我们生活的所有这些开关/按钮和操纵杆。 我感觉自己是“叠层板上的小猫”-周围的所有东西,每个茶壶中的一切都是如此优雅和舒适,我的所有原型都显得笨拙且“构思错误”。 我的每个原型都是“几乎”组装的(如果有的话),即 如果尺寸稍大一点,那么所有东西似乎都可以完美地组装在一起,但是我不得不在建筑物可用空间的框架内提出解决方案。 这是我一开始提到的时刻:
我的脑袋立刻充满了我在童年时(不仅是现在)拆卸的设备的记忆。 这些情况很有趣,当松开最后一个螺栓时,例如鼻烟盒中的恶魔,几个弹跳良好的弹簧和零件飞出,这是绝对不可能收拾回去的。

在有些时候,在我看来,这项任务根本无法解决。 即 我知道这是可能的,在我看来,我无法提出任何明智的选择。 在这样的时刻,我试图重新焕发活力,嘲笑局势,分散自己的注意力,然后回到工作中。 最后,我对我的问题给出了以下答案(这些答案并不声称是某种全球真理,但它们为我工作):

  • 如果有单独的按钮放置位置,则下面的按钮将保留一个附加部分。
  • 由于按钮的弹性,操纵杆将回到中心位置(因为操纵杆的行程很小,并且相对于中心的位移不太明显)。 此外,控制杆的重量非常小,因此您不必担心会在控制杆的重量下按下按钮。
  • 杠杆将是一部分(即,它不会由多个部分组装而成),并且会从上方插入。 孔的大小应使杠杆的“支腿”之一自由通过,然后杠杆将移动以“推入第二支腿”。
    插入杆
  • 轴将成为保留按钮的多余部分的一部分。
  • 原型使人们有可能验证它也将在生活中正常工作。 实际上,当它们到达时,我检查了我的假设。

杠杆块的组装方式如下(橙色-杠杆,半透明的墙壁和灰色部分-大箱子的一部分,绿色-用于固定按钮和杠杆轴线的其他部分):

杠杆组装

操纵杆的孔实际上是这样的,并且在最终设备上没有引人注目:

杆孔

我想这与世界上最优雅的工程解决方案相去甚远,但是在这个解决方案中,一切都以毫米为单位“量出”。 如果零件的宽度略小并且强度不足,则会出现反冲(我严重怀疑以较小的比例进行加工会很方便)。如果您留出更多的空间用于“操纵”,或者使零件的壁变厚,而屏幕则无法放置在正确的位置。

我理解阅读所有这些内容之后,似乎这个杠杆对设备来说并不是很重要的一部分,但是实际上,我花在整个项目上的时间几乎是我花在该杠杆上的一半。

样机


当我告诉某人类似的故事时,人们并不会认真对待我。对我有关“精简工程”的陈述的主要回应是:“好吧,您在讲故事吗?“毕竟,一切正常,而且看起来并不比工厂生产差!”

因此,我已经说过,我仅使用现有的工具。对于3D建模,我使用了在线编辑器,我不会大声喊叫(因此该帖子不会被视为广告帖子)。该编辑器本身不太适合对复杂对象建模,但它完全适合我,因为我认识他,可以马上开始工作。如果我需要描述其功能,那么我会说它就是3D建模领域的MS Paint-仅基本操作,仅核心。在此编辑器中,无法直接使用顶点或法线-仅使用整个对象。

这是我用于打印的模型在此编辑器中的外观:


但是魔鬼在细节上,因此,让我们看一下一个拥有“非工程骨”的人留在一个简单的设备外壳上的所有那些“伤痕”:


该图显示了我刚才在上面谈到的同一杠杆的位置。

墙的边缘不在凹处相遇(用于创建斜面和中心孔的基元的宽度不同或根本不对齐),因此编辑器显示了线条(标记为绿色)。在我看来(我现在不确定),红色标记的区域就是在那里的杆孔,那时我仍然认为杆将由几个部分组成。

当然,这并没有影响最终设备,因为这些是小于0.1毫米的偏移/不一致性,并且3D打印的准确性并不高到令人瞩目。

这是在此情况下在屏幕下方制作“凹槽”的另一个地方:


任何了解我总体上想展示这张图片的人都可以取得成就。凹槽位于外壳内部,因此可以打开模型的透明度,并且可以看到多余的线条。

屏幕应进入该凹槽并停留在那里。需要此元素,以便屏幕不会在这种情况下挂起。理想情况下,应该有一个经过精确测量的平行六面体形式的孔(凹槽),但是很明显出了点问题,凹槽的形状也发生了多次变化。通常,在绘制凹槽之前,有必要听爸爸讲七次,而不必重做几次。而且我知道可以将所有这些按顺序排列,但是通过编辑器本身是很痛苦的。

最后是外壳盖...该外壳通过四个M3螺栓连接到外壳。为此,我提供了一个放置坚果的地方:


该图显示了主体的底视图,一个矩形孔-一个放置螺母的地方。

添加这些非常小的孔后,我从“因为在模型中打孔最方便”的想法出发。博学多才的人们会立即注意到,有必要考虑将螺母插入哪一侧会更方便...结果,我以最不自然的方式花费了很多时间(这不是我的喜好,而是愚蠢的孔排列),用镊子将螺母“插入”孔中。

然后一位艺术家在我里面醒来


第X天到来了,所有准备工作都结束了,该是时候打印细节了,将所有内容放在一起并进行绘画。第一步是打印外壳并撕下支撑物(支撑物)。正如您从照片中看到的(我希望可以看到),打印质量还不够高,无法仅对表壳进行喷涂,因此下一步就是将文件“修改为所需的形状”,以至于我很喜欢:当表壳在打磨时,我注意到了“问题区域”。十字架。当模型采用其正常形式时,可以分两个阶段进行绘画。绘画的第一步是打底漆。您可以跳过此步骤,但是使用底漆,您最终可以对齐几何形状(去除小刮痕)和颜色。

图片




图片




图片
凹槽中有未上漆的区域,但稍后将对其进行上漆。

一个有趣的时刻是颜色的选择。看来我属于可以区分7种半颜色的人,因此颜色可能与游戏中的颜色有很大不同。是的,在浏览互联网上的屏幕截图时,我通常对自己感知颜色的能力不信任。似乎在每个屏幕截图中我都看到了新的颜色(灰色/蓝色阴影)。我试图找到类似的东西,而我只是想寻找一种颜色,如果我要生产类似的东西,我会在上面涂上类似的设备。然后出现了屏幕保护玻璃-边缘锐化的有机玻璃。除了外壳本身,还需要打印一些小的装饰细节,以补充设备的最终形式:

图片




图片
屏幕与其他零件一起躺在时会刮擦几次,因此将其“包装”在聚乙烯中直到更好的时间为止。

我要做的就是将一些细节粘在一起并上漆,这就是我的目的:最终,所有部件都粘在了车身上,并重新喷涂了车身,以使该设备看起来已经使用了很多年。在观看下面的图片之前,我建议所有新事物和新事物的粉丝都深呼吸,甚至坐下。我必须马上说,下面的符号完全是随机的,没有任何意义。阴谋理论的爱好者,我会要求放松。好吧,有两张“工作中”的照片:好吧,所有的工作都是这样的:

图片




图片

图片

图片

图片





图片

图片

图片

图片



图片


后记


, , , — , - , - (, “ ”). « », .

, . - , . , , - .

, .

Source: https://habr.com/ru/post/zh-CN451222/


All Articles