HyperSharp.NET

拈万物化阴阳之数是为吾道。

0%

最近部署了个 AXE 主节点,这个币和之前部署的图像币不太一样,步骤更复杂,经过探索终于完成了部署,以下是经过记录。

部署服务器端

服务器环境

创建并切换到专用用户 axerunner

adduser axerunner
usermod -aG sudo axerunner
su axerunner
cd ~

更新系统和安装软件依赖:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ufw git fail2ban python virtualenv unzip pv
sudo ufw allow ssh/tcp
sudo ufw limit ssh/tcp
sudo ufw allow 9937/tcp
sudo ufw allow 9936/tcp
sudo ufw allow 9337/tcp
sudo ufw logging on
sudo ufw disable
sudo ufw enable

安装主节点服务器端

使用 git 获取安装脚本并安装:

cd ~
git clone https://github.com/axerunners/axerunner
~/axerunner/axerunner install
~/axerunner/axerunner install sentinel

修改 ~/.axecore/axe.conf 这个配置文件,将 masternode=1 前面的 # 删除

这边暂时可以放着,等待服务器端同步区块数据,我们继续下面操作。

设置主节点

打开 AXE 钱包,并确保同步完成。

点击此链接下载一个 Excel 指导文件:axe_dip3_setup_v2.0.xls

imgaxe_dip3_setup_v2.0.xls

然后请按上面的 Excel 步骤执行。

相关链接

最近帮朋友部署一种区块链技术的数字 ImageCoin (IMG图像币) 和 ImageCash (IMGC 图像现金)。两种货币同出一源,操作基本类似,下面我先介绍下ImageCoin的部署步骤。

服务器端操作

服务器环境

我使用的服务器是阿里云ECS Ubuntu系统,首先需要先修复Python配置:

#!/bin/bash

cat << EOF > /root/.pip/pip.conf
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
###
[global]
#index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
index-url=https://pypi.org/simple/

[install]
#trusted-host=mirrors.cloud.aliyuncs.com
trusted-host=pypi.org

EOF

cat << EOF > /root/.pydistutils.cfg
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
###
[easy_install]
#index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
index-url=https://pypi.org/simple/

EOF

然后安装一些依赖软件库:

apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:bitcoin/bitcoin && apt-get update && \
apt-get install -y wget curl binutils && \
apt-get install -y build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils && \
apt-get install -y libboost-all-dev && \
apt-get install -y libdb4.8-dev libdb4.8++-dev && \
apt-get install -y libminiupnpc-dev libzmq3-dev && \
apt-get install -y python-virtualenv

安装主节点服务器端

首先需要下载安装脚本,我们可以从官方库中获取,然后执行这个安装脚本:

wget https://raw.githubusercontent.com/mceme/ImageCoin/master/imginstall/img-install.sh
./img-install.sh

按脚本内的提示安装后,可以从屏幕上获取到MASTERNODE PRIVATEKEY这个值。

修改 /root/.imagecoincore/imagecoin.conf 配置文件,插入以下文本:

rpcport=6999

checkblocks=6
checklevel=2
addnode=23.101.61.34:6998
addnode=51.77.144.203:6998
addnode=5.189.162.110:6998
addnode=94.16.122.165:6998
addnode=79.135.200.25:6998
addnode=54.38.158.185:6998
addnode=37.187.127.238:6998

安装Sentinel

Sentinel是一个必备的节点监控程序,若不安装这个程序,节点状态就会变成 WATCHDOG_EXPIRED 。我们可以执行以下脚本可以安装Sentinel:

#!/bin/bash

wget https://github.com/dashpay/sentinel/archive/v1.3.0.tar.gz
tar -xzf v1.3.0.tar.gz
rm -f v1.3.0.tar.gz
mv "sentinel-v1.3.0" /root/.imagecoincore/sentinel
cd /root/.imagecoincore/sentinel
virtualenv ./venv && ./venv/bin/pip install -r requirements.txt
cat << EOF > /root/.imagecoincore/sentinel/sentinel.conf
dash_conf=/root/.imagecoincore/imagecoin.conf
network=mainnet
db_name=database/sentinel.db
db_driver=sqlite
EOF
cat << EOF > /etc/cron.d/sentinel
* * * * * root cd /root/.imagecoincore/sentinel && ./venv/bin/python bin/sentinel.py >/dev/null 2>&1

EOF

客户端操作

准备内容

  • 10000 个 ImageCoin
  • 主节点名称(Alias),例如:img_mn1
  • 主节点地址(Address),例如:127.0.0.1:6998
  • 主节点密钥(Privkey),例如:eH1gXBGLALQZE93HY4sK1Yc137tGBD64xiqaYBVUCYjEMeQL8Xg

操作步骤

  • 打开ImageCoin钱包

  • 进入

    接受

    标签页,创建一个新的收款地址:

    1. 标签框填写主节点名称
    2. 总额框填写10000
    3. 点击请求付款按钮
  • 进入发送标签页,根据上面创建的收款地址发送10000个ImageCoin,等待确认数量超过15个以后继续下面操作。

  • 点击菜单工具->Debug控制台, 输入命令 masternode outputs,回车运行后会出现类似于下面这样的内容:

{
  "00b51e42ff291e10b7ae39d8a9ace069ef3db301dfa8a32155abcd45704264e3": "1"
}

我们把每一行按冒号分开,前面引号内的大段数据叫做交易哈希(TxHash),后面引号内的数字叫做输出索引(Output index)

  • 点击菜单工具->Open Masternode Configuration File,在打开的文本文件中添加一行文本,格式如下
节点名称 节点地址 节点密钥 交易哈希 输出索引

按上面的格式,每个数据中间用一个空格隔开,例如:

img_mn1 127.0.0.1:6998 eH1gXBGLALQZE93HY4sK1Yc137tGBD64xiqaYBVUCYjEMeQL8Xg 00b51e42ff291e10b7ae39d8a9ace069ef3db301dfa8a32155abcd45704264e3 1

保存并关闭文件

  • 确保解锁你的钱包(在菜单设置->解锁钱包
  • 进入Masternodes标签页,如果看不到这个标签页,需要在菜单设置->选项,打开窗口中启用钱包->Show Masternodes Tab选项。
  • 点击Update status按钮,如果在My Masternodes标签页中没有发现新加的节点,请重启钱包。
  • 点击菜单工具->Debug控制台, 输入命令 masternode start-alias "img_mn1" ,这边的img_mn1需要替换为你自己的主节点名称。
  • 进入Masternodes标签页,点击Update status按钮,查看节点的Status是否是**ENABLED

接上次一篇文章 部署ImageCoin主节点 ,这次我来介绍 ImageCash的部署步骤 ,两种货币同出一源,操作基本类似 。

服务器端操作

服务器环境

我使用的服务器是阿里云ECS Ubuntu系统,首先需要先修复Python配置:

#!/bin/bash

cat << EOF > /root/.pip/pip.conf
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
###
[global]
#index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
index-url=https://pypi.org/simple/

[install]
#trusted-host=mirrors.cloud.aliyuncs.com
trusted-host=pypi.org

EOF

cat << EOF > /root/.pydistutils.cfg
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
###
[easy_install]
#index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
index-url=https://pypi.org/simple/

EOF

然后安装一些依赖软件库:

apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:bitcoin/bitcoin && apt-get update && \
apt-get install -y wget curl binutils && \
apt-get install -y build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils && \
apt-get install -y libboost-all-dev && \
apt-get install -y libdb4.8-dev libdb4.8++-dev && \
apt-get install -y libminiupnpc-dev libzmq3-dev && \
apt-get install -y python-virtualenv

安装主节点服务器端

首先需要下载安装脚本,我们可以从官方库中获取,然后执行这个安装脚本:

wget https://raw.githubusercontent.com/mceme/ImageCash/master/IMGCInstall/IMGCscript.sh
./IMGCscript.sh

按脚本内的提示安装后,可以从屏幕上获取到MASTERNODE PRIVATEKEY这个值。

修改 /root/.imgcashcore/imgcash.conf 配置文件,插入以下文本:

rpcport=6898

addnode=23.101.61.34:6888
addnode=104.238.171.10:6888
addnode=45.76.47.138:6888
addnode=51.75.47.131:6888

安装Sentinel

Sentinel是一个必备的节点监控程序,若不安装这个程序,节点状态就会变成 WATCHDOG_EXPIRED 。我们可以执行以下脚本可以安装Sentinel:

#!/bin/bash

wget https://github.com/dashpay/sentinel/archive/v1.3.0.tar.gz
tar -xzf v1.3.0.tar.gz
rm -f v1.3.0.tar.gz
mv "sentinel-v1.3.0" /root/.imgcashcore/sentinel
cd /root/.imgcashcore/sentinel
virtualenv ./venv && ./venv/bin/pip install -r requirements.txt
cat << EOF > /root/.imgcashcore/sentinel/sentinel.conf
dash_conf=/root/.imgcashcore/imgcash.conf
network=mainnet
db_name=database/sentinel.db
db_driver=sqlite
EOF
cat << EOF > /etc/cron.d/sentinel
* * * * * root cd /root/.imgcashcore/sentinel && ./venv/bin/python bin/sentinel.py >/dev/null 2>&1

EOF

客户端操作

准备内容

  • 10000 个 ImageCash
  • 主节点名称(Alias),例如:img_mn1
  • 主节点地址(Address),例如:127.0.0.1:6888
  • 主节点密钥(Privkey),例如:eH1gXBGLALQZE93HY4sK1Yc137tGBD64xiqaYBVUCYjEMeQL8Xg

操作步骤

  • 打开ImageCash钱包

  • 进入

    接受

    标签页,创建一个新的收款地址:

    1. 标签框填写主节点名称
    2. 总额框填写10000
    3. 点击请求付款按钮
  • 进入发送标签页,根据上面创建的收款地址发送10000个Image Cash ,等待确认数量超过15个以后继续下面操作。

  • 点击菜单工具->Debug控制台, 输入命令 masternode outputs,回车运行后会出现类似于下面这样的内容:

{
  "00b51e42ff291e10b7ae39d8a9ace069ef3db301dfa8a32155abcd45704264e3": "1"
}

我们把每一行按冒号分开,前面引号内的大段数据叫做交易哈希(TxHash),后面引号内的数字叫做输出索引(Output index)

  • 点击菜单工具->Open Masternode Configuration File,在打开的文本文件中添加一行文本,格式如下
节点名称 节点地址 节点密钥 交易哈希 输出索引

按上面的格式,每个数据中间用一个空格隔开,例如:

img_mn1 127.0.0.1:6888 eH1gXBGLALQZE93HY4sK1Yc137tGBD64xiqaYBVUCYjEMeQL8Xg 00b51e42ff291e10b7ae39d8a9ace069ef3db301dfa8a32155abcd45704264e3 1

保存并关闭文件

  • 确保解锁你的钱包(在菜单设置->解锁钱包
  • 进入Masternodes标签页,如果看不到这个标签页,需要在菜单设置->选项,打开窗口中启用钱包->Show Masternodes Tab选项。
  • 点击Update status按钮,如果在My Masternodes标签页中没有发现新加的节点,请重启钱包。
  • 点击菜单工具->Debug控制台, 输入命令 masternode start-alias "img_mn1" ,这边的img_mn1需要替换为你自己的主节点名称。
  • 进入Masternodes标签页,点击Update status按钮,查看节点的Status是否是ENABLED

OpenSCAD是一款功能强大的免费开源建模工具,只需几行代码即可制作精确的3D模型。通过正确的设置,你甚至可以制作适应性强的“参数化”模型。

不像大多数自由软件创建3D 模型 (如著名的 Application Blender),OpenSCAD 专注于 CAD 方面,而不是艺术方面的3D 造型。因此这可能是您正计划创建3D 模型的机器零件,而不是制作电脑动画电影的工具。

OpenSCAD 不是一个交互式建模器。相反它更像一个 3D 编译器,读取描述对象并呈现的脚本文件 这个脚本文件中的3D 模型(参见下面的示例)。这软件是对建模过程进行完全的控制,使您能够轻松地完成改变建模过程中的任何步骤或设计。

OpenSCAD提供了两种主要的建模技术:首先是建设性的实体几何(又名CSG),其次是2D轮廓的制作。作为这些2D轮廓的数据交换格式,使用Autocad DXF文件。除了用于制作的2D路径之外,还可以从DXF文件中读取设计参数。除DXF文件外,OpenSCAD还可以读取和创建STL和OFF文件格式的3D模型。

下载并安装OpenSCAD

最新的稳定版OpenSCAD可以从openscad.org/downloads.html下载。页面顶部的正常下载提供了该软件的最新“稳定”版本,而“开发快照”提供了具有一些额外功能的OpenSCAD的实验版本,但可能比稳定版本具有更多错误。选择适合你操作系统的版本,打开.exe或.dmg,然后按照说明安装OpenSCAD。

img

当你第一次打开OpenSCAD时,应该会遇到启动画面。在此窗口中,你可以创建新文件,打开现有文件或打开示例。所有示例文件都写得非常好,并展示了如何使用OpenSCAD的关键概念。

img

在示例框中,转到Basics> CSG.scad,然后单击“打开示例”以打开简单的CSG示例文件。

OpenSCAD接口:文本编辑器

img

让我们首先查看OpenSCAD窗口的基本部分。OpenSCAD的界面非常简单,仅包含文本编辑器,查看区域和控制台。使用编辑器输入代码,结果模型显示在查看区域中。编辑器中的大多数按钮都是不言自明的(New,Open,Save等)。有趣的是预览,渲染和导出为STL按钮。

点击预览将在查看区域中生成快速模型。这个快速模型显示了模型外观的一般概念,但它不是最终计算的3D模型。按Render告诉OpenSCAD计算最终的3D模型,它会显示精确的读数,但生成时需要比预览更长的时间。渲染模型后,Export as STL将打开一个窗口,将模型另存为STL。

OpenSCAD接口:可视区域

img

“查看区域”显示3D模型。“预览”和“渲染”按钮与编辑器中的相同。两个中间的按钮组控制着查看器中的“摄像机”:左侧的按钮可以缩放或重置视图,而右侧的按钮可以将摄像机捕捉到标准视图。

最后一组按钮包括Perspective / Orthogonal按钮,Show Axes和Show Scale Marker按钮以及Show Edges按钮。在Orthogonal和Perspective之间切换会更改模型是以等距还是透视显示。(正交视图通常更适合制作机械模型,而透视更适合装饰模型)。

OpenSCAD接口:控制台

img

控制台显示在查看区域下方,并显示有关计算模型的技术信息。它还显示保存或导出模型的记录,并显示echo语句的读数。那些不关心引擎技术计算的人不必担心控制台。

对象,动作,操作符和变量

OpenSCAD构建的每个模型都是由对象组合构建的。物体是原始形状,如立方体,圆柱体和球体,并形成每个模型的主干。对象由Actions创建并由Operators修改,Variables和Comments进一步增强了代码。

动作用于创建对象或定义变量。例如,Cube,CylinderSphere是创建其对应的原始对象的动作。

操作员修改对象。有许多不同的运算符,它们用于更改对象的许多不同属性,例如其大小或位置。

变量包含数字,字符串(即文本),向量和列表等值。存储在变量中的信息可以由Actions,Operators或其他变量使用。(变量将在本节的OpenSCAD教程中稍后讨论)

注释用于为阅读代码的任何人提供额外信息。它们通常用于提供有关代码的一般信息(如原作者和发布日期),并解释特定行背后的逻辑和推理。注释不会影响对象,并且在OpenSCAD解释和呈现代码时会被忽略。

(还有矢量,列表,模块和函数,但我们将在不同的OpenSCAD教程中处理这些高级概念!)

可以在OpenSCAD用户手册中找到OpenSCAD可用的所有对象,操作和操作符,以及有关如何使用它们的信息。我们将坚持使用本教程中最简单的一个,但请记住,一旦你熟悉了基础知识,就可以使用一个巨大的工具箱。

有了这个,让我们来看看CSG.scad,看看一些动作和操作符的实例!

CSG.scad示例:将对象与Union结合使用

img

操作员以绿色突出显示,操作以橙色突出显示。(绿色文本是注释。)

在做任何事情之前,我们应该以不同的名称保存文件。我们将在本教程中使用代码,因此我们希望保留原始版本的安全副本。转到文件>另存为…并将其另存为“CSG_tutorial.scad”。完成后,点击“渲染”按钮以查看CSG.scad生成的对象。此示例使用Operators和Actions的不同组合生成三个单独的对象。

我们仔细看看代码。在阅读OpenSCAD代码时,更容易将事物视为代码的“块”,而不是逐行读取。CSG.scad中有三个块,其边界由代码左侧的黑线标记。每个块包含两个动作(立方体和球体)以及一个或两个操作符(平移,联合,交集,差异)。

让我们看看第一个代码块(从第3行开始到第8行结束)。此块定义了“查看区域”左侧的形状,即立方体内的球体。这段代码包含两个Operators和两个Actions:

Translate是一个根据给定的[X,Y,Z]参数移动对象的运算符。在这种情况下,它向下移动一个物体-24毫米的X轴。

Union是一个运算符,它将大括号内的所有对象组合到一个Object中。

Cube是一个创建立方体对象的Action。在这种情况下,每个立方体的边设置为15 mm,“center = true”语句告诉Action从中心绘制立方体。

Sphere是一个创建球体对象的Action。由于该数字尚未定义为半径或直径,因此OpenSCAD假定它是半径。

该块演示了在OpenSCAD中工作的两个关键概念。第一个是操作符仅应用于其边界内的对象。第一个块中的Union运算符仅组合其边界内的Cube和Sphere,并且不包含此文件中的其他对象。同样,第一个块中的Translate Operator仅适用于Unioned Object。如果没有,则此文件中的所有对象将在X轴上以-24为中心!(另请注意,运算符的边界由一对花括号定义,并且其边界内的所有内容都缩进一级。)

下一个重要概念是OpenSCAD始终按顺序执行操作,从最接近Object的Operator开始并向外工作。因此,在此块中,首先在Cube和Sphere上执行Union操作,然后通过Translate移动Unioned对象。即使在处理大型复杂的Operators和Actions组合时,也要从最里面的Objects / Actions开始,然后向后工作,直到到达最上面的Operator。

(眼尖的读者可能会注意到,在这个块中交换操作符不会对生成的对象产生任何影响,因为即使首先移动Cube和Sphere,Union也会起作用。但是,有很多次你在需要按特定顺序应用操作,因此习惯于按顺序考虑应用操作符!)

CSG.scad示例:关于语法的注释

img

现在是提及语法的一些重要观点的好时机。我们刚刚看到操作符的边界由花括号定义。但是,在整个代码中也可以找到其他语法,如分号和缩进。其中一些对于文件运行至关重要,而另一些则不重要。

关键语法对于代码运行是绝对必要的。如果它丢失或写入不正确,当你尝试预览或渲染模型时,OpenSCAD将抛出错误消息。

以下是OpenSCAD中的关键语法:

每个Action语句的结尾必须以分号结尾。这包括创建对象的操作以及定义变量的操作。

如上所述,花括号(又名大括号,花括号)表示Operator语句的边界。在处理复杂的OpenSCAD项目时,很容易丢失所有大括号。但是,当你单击大括号时,OpenSCAD会突出显示其匹配的伙伴,这会使事情变得复杂时更容易。

在非关键的语法是没有必要的模型进行编译。但是,它使代码更容易阅读和编辑。非关键语法的示例包括以下内容:

当你在新的操作员中时,缩进通常会增加,而当操作员完成时,缩进会减少。(在此示例中,因为Union运算符位于Translate运算符内,所以Union缩进了一个级别。因为Cube和Sphere在Union中,它们缩进了两个级别。)OpenSCAD实际上不需要缩进,但是让代码看起来干净整洁。

为了运行OpenSCAD,并不是严格需要换行符(即按Enter键)和空格。从理论上讲,你可以把整个第一个块写成一行,代码仍然可以工作:translate{union{cube(15,center = true); sphere(10);}}但是,把它们拿出来使代码难以阅读。

注释用一对斜杠(“//”)表示。OpenSCAD会忽略一对斜杠后面的所有内容,直到下一行的开头。

(附注:对于熟悉计算机编程的人,你可能会注意到这种语法与C ++基本相同.OpenSCAD主要用C ++编写,因此,从其母语继承了大部分语法。所以对任何人来说都是如此。熟悉Arduino编程,这应该是轻而易举的!)

CSG.scad示例:交叉点运算符

img

对于中间对象,再次使用立方体和球体,但使用交叉点运算符而不是联合进行组合。当给定多个对象时,Intersection会生成一个Object,该Object仅由每个重叠的Object的部分组成。换句话说,如果一个对象的任何部分不与其他对象的任何部分相交,则将其从最终的交叉形状中移除。

在第二个块中的Sphere Action之后,将以下行添加到代码中,然后点击Render按钮以显示你的更改:

translate([7.5,0,0]){cube(15,center = true); }这会增加一个额外的立方体,它通过额外的Translate语句向右移动一半长度。请注意,交叉点运算符仅考虑属于所有三个对象的段,并且不与其他两个对象重叠的部分不包含在最终的交叉对象中。

另请注意第二个Translate如何仅在第二个Cube语句中运行。操作符按顺序工作,因此仅在移动第二个多维数据集后才执行“交点操作”。

CSG.scad示例:差异运算符

img

最右边的形状使用差分算子。差异从另一个对象中减去一个对象,使其对创建孔和其他空间很有用。

差异如何工作(对联盟或交集)的一个重大变化是创建的对象取决于动作/对象在运算符中出现的顺序。尝试在第三个块中切换Cube和Sphere的顺序。请注意,在原始版本的代码中,如何从Cube中减去Sphere,但切换它们会强制相反。

参数化OpenSCAD

现在我们已经了解了CSG.scad示例,让我们来谈谈参数化设计。

在参数化设计中,用户可以更改模型的某些元素,并且设计的其余部分可以适应这些变化。例如,这允许一个人定义不同的螺杆直径,而不必手动筛选代码并替换每个值。

让我们尝试使我们的CSG_tutorial.scad中的三个对象更大。首先用“球体(15)”替换“球体(10)”的所有实例,从球体开始。我们还需要使立方体更大,所以将“cube(15,center = true)”替换为“cube(20,center = true)”。如果使用这些更改呈现代码,则可以看到一些问题:

球体半径与立方体尺寸的比例已经被抛弃,这意味着最终的物体看起来不再像原件那样。

对于我们修改过的中间(交点)对象,对象不再向下拆分,因为我们没有移动第二个立方体。

交点和差异对象彼此重叠,因为它们没有使用翻译运算符分开很远。

对于本OpenSCAD教程的最后一部分,我们将把简单的示例设计转换为参数设计。

制作参数模型:定义变量

img

我们可以尝试手动修复这些问题,但是每次我们想要更改对象的大小时我们都需要修复它们。相反,让我们做一个适当的参数化设计。

制作参数文件的关键步骤是定义变量而不是使用普通数字。变量是使用一种Action语句创建的,一旦定义了变量,我们就可以在任何可以使用数字的地方使用变量。

在文件顶部的某处添加以下Action语句(可以在第一行的注释之前或之后,但不能在第一个代码块之后):sphere_radius = 10;这将创建一个名为“sphere_radius”的变量,并使其等于10。

接下来,浏览代码并用sphere_radius 替换每个Sphere Action中的每个数字(如上图所示)。尝试渲染文件,然后更改sphere_radius并再次渲染文件。你应该看到每个球体的半径随着sphere_radius的变化而变化。

制作参数模型:定义更多变量

img

通过定义变量cube_length并将其设置为15(现在),使多维数据集大小的参数化方式与球半径相同。如上所述,用cube_length替换每个Cube语句中的所有数字。

现在我们可以为模型中的所有对象设置球体半径和立方体长度。但是我们怎样才能保持立方体和球体彼此成比例而不自己计算呢?是时候制作一些相关的变量了!

制作参数模型:依赖变量

img

关于变量的一个方便的事情是它们可以使用其他变量来定义。在其定义中使用其他变量的变量称为从属变量(与独立变量相对,不依赖于任何变量)。

如果我们独立设置sphere_radius和cube_length,我们可能会失去立方体大小与球体大小的原始比例。但是,我们可以通过将cube_length的定义更改为以下内容来将cube_length更改为从属变量:cube_length = sphere_radius * 1.5;

当我们讨论这个主题时,你也可以通过用translate替换translate([7.5,0,0]),将我们在步骤4c中添加的Translate运算符从一个公司X坐标更改为一个参数。现在,中间的物体每次都会干净利落地中间!

请注意,始终需要在 它使用的变量定义之后定义从属变量。OpenSCAD逐行读取代码,因此如果你尝试定义cube_length而不定义sphere_radius,OpenSCAD将不知道该怎么做。

制作参数模型:附加的相关变量

img

最后要修复的是每当球体大小改变时对象之间的间距差。要解决此问题,请创建一个变量来控制每个对象之间的间距:object_separation = sphere_radius * 2 + 4;

在定义cube_length之后插入此Action,然后替换在第7行和第20行的[24,0,0]中和,分别。现在,尝试使用不同的sphere_radius值渲染代码:即使对象变大,它们也应该始终彼此分开4 mm!

下一步是什么?

img

现在你已经掌握了这个OpenSCAD教程的基础知识,现在是时候开始制作自己的一些设计了!阅读文档并使用OpenSCAD提供的不同操作符和操作。你甚至可以开始研究诸如矢量和循环等棘手的概念,这使得设计复杂模型变得更加容易。

命令速查表

1. 语法

var = value; //变量赋值
module name(…) { … } //模块定义,openscad中利用类C语言的模块的概念,通过重复利用的方式,减轻工作量
name(); //调用指定名字的模块,进行绘制
function name(…) = … //函数定义
name(); //函数调用
include <….scad> //包含头文件,通常用于包含一些通用的配置文件
use <….scad> //复用文件,可以将指定文件中的模块包含进来,方便在当前边的设计中,调用那些模块

2. 2D图形绘制

circle(radius) //以radius为半径画圆
square(size,center) //以size为边长绘制正方形
square([width,height],center) //以width,height长宽绘制长方形
polygon([points]) //按点坐标作多边形
polygon([points],[paths]) //依照点坐标和路径,作多边形

3. 3D图形绘制

sphere(radius) //以radius为半径绘制球
cube(size) //以size为边长作正方体
cube([width,height,depth]) //以width,height,depth作为长宽高作长方体
cylinder(h,r,center) //以h作高,r作半径,绘制圆柱
cylinder(h,r1,r2,center) //以h作高,r1,r2分别为上下圆半径作,圆锥体。
polyhedron(points, triangles, convexity) //多面体

4. 变形

translate([x,y,z]) //依照[x,y,z]响量进行平移
rotate([x,y,z]) //围绕 XYZ轴,分别作x,y,z度的旋转。
scale([x,y,z]) //沿XYZ轴,以x,y,z为比例缩放
resize([x,y,z],auto) //
mirror([x,y,z]) //镜像
multmatrix(m)
color(“colorname”)
color([r, g, b, a])
hull()
minkowski() //敏可夫斯基运算,对两个多面体进行运算。得到由一个多面体遍历另一个多面体的结果。常用来作圆角。
逻辑操作
union() //多个多面体的总和,(或运算)
difference() //由第一个多面体,减去除第一个以外的多面体
intersection() //得出多个多面体相交的部分,(与运算)
操作字符,标记出指定多边形,以方便调整

5. 数学函数

abs
sign
acos
asin
atan
atan2
sin
cos
floor
round
ceil
ln
len
log
lookup
min
max
pow
sqrt
exp
rands
其他
echo(…)
str(…)
for (i = [start:end]) { … } //for循环
for (i = [start:step:end]) { … }
for (i = […,…,…]) { … }
intersection_for(i = [start:end]) { … }
intersection_for(i = [start:step:end]) { … }
intersection_for(i = […,…,…]) { … }
if (…) { … }
assign (…) { … }
search(…)
import(“….stl”) //导入stl模型
linear_extrude(height,center,convexity,twist,slices) //挤出
rotate_extrude(convexity)
surface(file = “….dat”,center,convexity)
projection(cut) //投影
render(convexity)
特殊变量
$fa 最小角度
$fs 最小长度
$fn 最小分段
$t 动画分步

参考链接

闲鱼入手Switch一个,红绿帽玩的不亦乐乎。掌机模式还可以,不过夏天主机模式发热就很客观了,网上有人出现了机身热到变弯到情况。应该是主机模式渲染性能提高,功耗上升,但是底座上并没有风扇散热,完全依靠空气自然对流散热。热量积聚在底座中,Switch机身是塑料的,就很容易变形。

万能的淘宝搜了下,目前有几种解决方案

  1. 用Switch专用的底座风扇扩展,增强主动散热能力。
  2. 用USB-Type C延长线连接主机和底座,这样主机就不用闷在底座中蒸桑拿了。大家可以尽情脑洞大开解决散热问题,比如用风扇,用水袋。
  3. 用Mini底座套件改装原装的底座。原装的底座拆开来其实内部的电路板只有一小块,其他都是塑料。淘宝可以买到第三方开发的底座改装套件,装上原装底座中拆出来的电路板。这样改造的Mini底座便携性和散热性都好很多。
  4. 最简单的方法是直接买第三方的扩展坞,不用自己拆电路板,不过这种方式也是最费钱的。

目前手头上有个闲置的笔记本外置散热器,被我拆了作为临时的散热手段,夏天玩主机模式太烫了,先救救急。

img

不过我网上看到一篇文章,自己DIY的散热器挺不错的。不过风扇不会自动启动关闭,我想做一个进阶版的。Let’s go!

首先我在万能的淘宝找到一款DC 5V 0.19A的笔记本散热风扇,具体尺寸如下:

imgSEPA HY45Q DC5V 笔记本散热风扇

拿出游标卡尺给Switch底座量下各个部位的尺寸,然后打开SketchUp开始画导风罩模型,比起其他建模软件,这个挺容易上手的。

img

画完模型了,我们可以找3D打印服务商来制造这个导风罩,打开未来工场网站下单。

img

下单后等图纸审核通过后就开始排队生产啦,根据不同的材质工艺大概两到三天就发货了。我这次挺快的第三天就收到了。包装非常好,填充了很多泡沫保证运输中不会损坏脆弱的零件。

img

零件成品效果如上,白色尼龙材质,触摸有磨砂感,仔细看能看出有纹路。手感弹性应该比较结实,不过也不敢用力按,怕大力出悲剧。

对接好风扇和底座,尺寸刚刚好。用万能胶把风扇出风口和导风罩对接的缝隙封住,保证不漏风。

img

以上步骤都和网友的那篇文章类似,接下来我想要实现的功能是当Switch插入底座时,风扇才开始运转,底座不工作时风扇不工作。

我想到最简单的方式是根据底座前面那个绿色LED来控制风扇,当Switch连接底座时,LED亮风扇转;Switch断开时,LED灭风扇停。

这时候我们就需要万能的淘宝,找一款光耦隔离继电器,比如这款1路5V低电平继电器模块。我们按以下电路图连接,拆开底座外壳,橙色线路连接前面板上绿色LED的正极,然后按电路图标识连接风扇和USB接口。

连接好电路开始测试,这时候发现有点问题,LED那边电路有抖动。我在橙色LED线路和黑色GND之间加一个电容就可以解决这个问题了。

img

装好底座,拧好螺丝,下面就是安装完成后的效果了。最后开始实际测试下,夏天30度左右的气温下,连玩两个小时,拿起主机后没有以前那么烫,略温感。这次DIY完美完成~~谢谢观看!

img