拥有一台 3D 打印机是怎样的体验?

买一台自己的 3D 打印机大概是 去年寒假时候 的想法,后来朋友推荐了荷兰 Ultimaker 公司的开源方案,成本不高,其配件也能在淘宝买到,于是狠狠心付款下单,花了三天时间组装调试,完成一台十字结构双 Z 轴的 FDM 打印机。 所以拥有一台 3D 打印机是怎样的体验? 缺个手机壳缺个手机架,自己打印;看到不错的手办,自己打印;DIY 的产品缺个外壳,自己打印;正式加工前想检查下装配、干涉,也可以先用塑料打印一个。凡是你想得到的,都能花几个小时造出来。原本担心自己会再一次三分钟热度,让机器吃灰,没想到大半年下来机器利用率相当高,光耗材就已经买了七八卷了。3D 打印机可以说一定程度上改变了自己的工作方式,真的很妙!🙉 问题回答完了,下面分享一些使用经验。 基本参数 外观尺寸:358*428*498 打印行程:223*223*300 耗材:以 PLA 为例,大约是 70 元/千克 功率:约 200W(室温 10℃,热床 75℃),大约一毛钱每小时 噪音:正常运行房间里大约能测到 60dB,如果放进柜子做好减震隔音,宿舍 24 小时打印也是没问题的 代打:网上价格一般在 0.4 元/克左右,这样一算其中利润大概有数了 建模 建模用的是 SolidWorks,当选择 3D 打印作为成型方式时,建模过程中也需要相应调整一些细节,比如 3D 打印零件和螺丝怎么组 CP 才科学??;还有合理拆分零件,考虑强度需求,也要减小悬空部分,提高打印效率;针对打印机的行程、精度,量力而行,提前做好预期。 如果不想自己建模,也可以上 Thingverse 看看,很多有意思的模型分享(最近访问好像很不稳定)。 切片 切片这一步骤的输入是建模得到的 STL 等格式的模型,输出是 G-code 这种最为广泛使用的数控编程语言,给 3D 打印机执行。切片软件使用的是 Ultimaker Cura,因为公司的开源精神,这个软件生态挺不错,一直都在频繁迭代更新,经常会出一些试验性功能。 FDM 打印机的原理为层层堆积形成实体,每一层的运动路径是在计算机中生成的。为了生成这些路径,首先必须知道每一层的形状,即用水平面去切割模型,得到轮廓。外壳一般来说需要一个厚度,即所谓的壁厚。而对于每一层来说,将轮廓线重复打印几圈,即可构建一个比较厚的圈线。为了使模型具有一定的强度,需要在内部打印一些填充结构,具体操作就是在每一层的多边形内部加上一定模式的填充,如三角形、蜂窝等。最后,很多层堆积起来构建了一个实体,把每一层的路径组合起来,就得到了整个模型的路径,即所谓的 G-Code 文件。可见,模型打印有一些最基本的参数,包括层厚、壳厚、填充模式、填充密度等等。为了兼顾打印的效果、稳定、效率,这些参数可能要根据打印机的具体情况,多次调整尝试才能定下来。 同时 Cura 也有一些特殊处理,对于模型来说顶部和底部一般要求比较结实,因此 Cura 默认对顶部和底部的几层打印实心(100%填充)。 而打印模型就像盖房子一样,在空气中打印,对于悬空的地方是不能直接打印出来的。盖房子需要脚手架,3D 打印也需要支撑结构。Cura 在生成路径文件时,也会自动生成支撑结构,帮助成功打印模型。...

January 30, 2021

从接网线到科学上网——通信网知识总结

时间证明,学了《通信网》这门课带来的帮助远不止接路由器。写一篇博客整理一下各种零碎的知识点。 bit,比特,二进制位;Byte,字节,处理的基本单位;1Byte=8bit。网速用 b,硬盘用 B。 分层模型 OSI Model 互联网协议入门(一)——阮一峰的网络日志 http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html 互联网协议入门(二)——阮一峰的网络日志 http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html 小白也能看懂的网络基础 03 | OSI 模型是如何工作的(HTTP 请求范例) https://sspai.com/post/64659 Physical 物理层 发送和接受原始比特流(0 和 1),定义了网络设备机械特性(光缆/电缆、引脚数量)、电气特性(电压大小)、传输方式(全双工)、信道复用。 Data Link 数据链路层 单纯的 0 和 1 没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?这就是链接层的功能,它确定了 0 和 1 的分组方式——帧,即标头(Head)+数据(Data)。 标头中包含的地址是 MAC 地址,实现在同一个子网下面的广播(物理寻址) 差错控制(检测比特错误,奇偶校验、CRC 校验)(纠错由传输层解决) 流量控制(针对发送方,停等、Go-Back-N、选择重传) Network 网络层 规划 IP 地址(ipv4 和 ipv6 变化只会影响网络层),区分不同的计算机是否属于同一个子网。解决不同子网传输,就是逻辑寻址,确定最佳的数据传输路径(路由)。 ARP 协议、DHCP 协议 Transport 传输层 负责端到端通讯,“端口”(port),给每一个使用网卡的程序分配编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。 TCP/UDP 协议、流量控制(大文件分块)、差错控制(端到端) Session 会话层 会话层接收到表示层传来的数据信息后,负责在数据传输中设置和维护两台计算机之间的通信连接,以保证这段连接不会因中断而造成不必要的麻烦。 Presentation 表示层 将来自应用层的数据转换成所有计算机都通用的标准格式,并对数据进行压缩、加密。 Application 应用层 应用层即用户和计算机交流的场所,直接为用户的应用进程(例如电子邮件、文件传输和终端仿真)提供服务,如 HTTP、SMTP、FTP、DNS 等。 网络设备 入网指南 01 | 一文读懂你身边的「网络」 https://sspai....

January 23, 2021

“另一个也是女孩的概率”——图解条件概率

比较如下几个问题,求出结果,并谈谈你的见解。 a) 问题 1:李叔叔有两个孩子,两个孩子都是女孩的概率是多少? b) 问题 2:李叔叔有两个孩子,其中一个是女孩,两个孩子都是女孩的概率是多少? c) 问题 3:李叔叔有两个孩子,至少有一个孩子是在星期日出生的女孩,两个孩子都是女孩的概率是多少? 摸鱼的时候看到一个经典概率论题目的变形,标准答案分别为$\frac{1}{4}、 \frac{1}{3}、 \frac{13}{27}$,标准解法不多说了。 很明显,同样一个问题,给出的题干信息不同,求得的概率值不相同。但是仔细观察答案可以发现,限定条件越多,最后的概率越接近$\frac{1}{2}$。想了一会儿,发现可以用图解的办法来解释,很妙。 如上图所示:M 表示男孩,F 表示女孩;绿色部分为符合条件的样本空间,作为分母,而蓝色圈出的 (F,F) 象限表示满足“两个都是女孩”条件,两者交集作为分子。 图(1)描述的是“问题 2”给出的情况,因为男孩女孩出生概率均为$\frac{1}{2}$,很明显最后的概率为$\frac{1}{3}$。 图(2)描述的是“问题 3”给出的情况,限定条件“在星期日出生”在 F 区域分别画出了$\frac{1}{7}$区域,最后的概率可以用小学数学$\frac{7+7-1}{14+14-1} = \frac{13}{27}$。 图(3)则试图表示了“限定条件无限多”的情况(此时的题干可以是“其中一位就是三年二班的小红”),两个绿色区域的宽度无限小,所以“两个都是女孩”的概率就可以用线段长度来表示了——$\frac{1}{2}$。 再多想一点,为什么这道题能用图解?其实是因为这题中刚好两个随机变量,可以分别作为 X/Y 轴;如果是三个小孩,那就需要在三维坐标中求体积了。🐵

January 11, 2021

Note for “The Python Tutorial” §5

https://docs.python.org/3/tutorial/index.html 摘抄 + 翻译 §5 主要涉及数据结构。 5. Data Structures 这一节回顾一些学过的,同时补充一点新知识。 5.1. More on Lists List 数据类型还有更多方法。 list.append(x) 在末尾添加一个元素,相当于a[len(a):]=[x] 注意这里写成a[len(a)]=[x]或a[len(a):]=x都是不对的,小心。 list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表,相当于a[len(a):] = iterable list.insert(i, x) 在给定的位置插入一个元素。第一个参数是要插入的元素的索引,所以a.insert(0, x)插入列表头部,a.insert(len(a), x)等同于a.append(x)。 list.remove(x) 移除列表中第一个值为 x 的元素。如果没有这样的元素,则抛出 (raise) ValueError 异常。 list.pop([i]) 删除列表中给定位置的元素并返回它。如果没有给定位置参数,pop()将会删除并返回列表中的最后一个元素。 (方法签名中i两边的方括号表示这个参数是可选的,而不是要你输入方括号。在 Python 参考库中会经常看到这种表示方法)。 list.clear() 删除列表中所有的元素,相当于del a[:]。 list.index(x[, start[, end]]) 返回列表中第一个值为 x 的元素的从零开始的索引,如果找不到将会抛出 ValueError 异常。 可选参数 start 和 end 用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。 list.count(x) 返回元素 x 在列表中出现的次数。 list.sort(*, key=None, reverse=False) 对列表中的元素进行排序。 两个可选参数(只能是关键字参数,这里用*表示这一规定,可以参考 ## 4.7.3):key 指定一个带有一个参数的函数,用于从 iterable 中的每个元素中提取比较键(例如,key=str....

December 25, 2020

SpotMicro 一个开源机器狗项目

写在最前 最早看到这个项目已经是大半年前了,一直蠢蠢欲动,直到八月份看了这篇推送——用树莓派 DIY 波士顿机器狗,帮你省下 50 万:教程开源,人人皆可上手,才真正下定决心——做一个自己的机器狗。 这次选择的硬件方案是 来自 Nahuel Taibo 的 modifications v2.1;参考的软件方案是来自 来自 mike4192 的 spotMicro。 需要的材料清单: 树莓派/stm32 控制器 一台 3D 打印机/直接购买 3D 打印服务 PDI-HV5523MG 舵机 × 12(当时一次性下单 12 个,被店家追着问了不少,现在商品图上好像已经加上“机器人专用”了) 法兰球轴承 F625ZZ × 8 M3 螺丝(各种长度) 2S/3S 电池 5V 降压电路(LM2596/MP2482) PCA9685 舵机驱动板 LCD 显示器(可选) 防滑贴/减震垫(可选) 迷你路由器(可选) 本文包括树莓派上手、电路设计、3D 打印、SpotMicro 功能复现,希望对你有帮助。 3D 打印与组装 机器狗的机械结构部分参考了 来自 Nahuel Taibo 的 modifications v2.1,作者主要是修改了几个连接,加了身体的强度。在 Gitlab 逛逛会发现这个社区里有很多爱好者在分享自己的经验,“Open Source, Open Mind”。 下载到所有零件的 STL 文件后,只要自己切片一下就可以开始打了。原版是黄黑配色,这次做的是黑白的,可以提前在 KeyShot 里渲染一下,看看效果图选颜色。整个打印工作从 Nov....

December 16, 2020