作者: 张梦南

  • [DIY]USB-HUB

    [DIY]USB-HUB

    基于SL2.1A芯片实现的一拖四usb2.0拓展坞。

    实测可以正常使用。

    原理图

    PCB原理图借鉴项目:https://oshwhub.com/chen7654/usb-hub

    参考项目重新手动绘制。

    PCB

    本人自认pcb布线经验不足,走线存在不合理请谅解。

    使用了立创EDA的自动布线功能并进行了手动修改。

    BOM

    IDNameDesignatorFootprintQuantityManufacturer Part
    1SL2.1AU1SOP-16_L10.0-W3.9-P1.27-LS6.0-BL1SL2.1A
    212MHzX1CRYSTAL-SMD_4P-L3.2-W2.5-BL1X322512MSB4SI
    31uFC1,C2C06032CGA0603X5R105K500JT
    410uFC3,C4,C5,C6,C7,C8C06036CGA0603X5R106K100JT
    5USB-231-ARYUSB1,USB2,USB3,USB4USB-A-TH_USB-231-ARY4USB-231-ARY
    6TYPE-C 16PIN 2MDUSB5USB-C-SMD_TYPE-C-6PIN-2MD-0731TYPE-C 16PIN 2MD(073)

    性能

    在电脑usb3.0测试u盘写入速度为

    同usb口利用数据线外界USB-HUB测试同u盘写入速度

    存在性能损耗,极限速度未知(理论上usb2.0的极限速度为60Mb/s)

    设备运行相对稳定,没有出现高温降速情况。

    感悟

    个人认为焊接最麻烦的原件为12pin的Type-C座子,很容易连锡导致设备无法连接。初次焊接为使用的电烙铁,焊接0603电容时是真的累,USb-A的座子和SL2.1A芯片的焊接很容易,但贴片晶振和Type-C我是真的没得说。我硬着头皮焊完所有电路后,激动人心的时刻来了,插数据线、连电脑!电脑响了外设连接的声音!点开设备管理器!无法识别设备!我****

    因此,我买了热风枪,嘿嘿。

    就对这个电路板热风枪是真的好用。除了Type-C座子可能因为锡浆略多而导致引脚连锡,其他都是简简单单。

    致谢

    感谢作者chen7654开源的USB-HUB。

    原作者项目地址:https://oshwhub.com/chen7654/usb-hub

  • [网络服务]Frp内网穿透

    [网络服务]Frp内网穿透

    工具介绍

    Frp是一款可以通过公网服务器将内网服务的端口通过TCP、UDP、HTTP、HTTPS 等协议映射到公网服务器端口的程序,且支持P2P传输协议(服务端与服务端之间直接进行数据交换)

    下载Frp

    在公网服务器端和内网服务端分别下载对应的压缩包。

    Frp程序下载地址:https://github.com/fatedier/frp

    例:Ubuntu20.04_amd64系统(公网服务器端)可以通过下列命令来下载及解压压缩包

    下载Frp文件压缩包
    wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
    
    解压Frp文件压缩包
    tar -zxvf frp_0.61.1_linux_amd64.tar.gz

    Windows11_X64系统(内网服务端)可以之间通过浏览器打开链接(https://github.com/fatedier/frp)点击Release,界面跳转后点击frp_0.61.1_windows_amd64.zip文件进行下载。

    注:公网服务器端与内网服务端的软件版本号需要一样,这里的版本号为0.61.1。

    配置公网服务器端

    程序文件配置

    使用cd命令来进入到解压好的Frp文件目录下。

    cd frp    //文件夹名称根据实际情况而定
    进入到Frp文件夹下

    服务端主要用到frps和frps.toml这两个文件。

    使用vim编辑器来配置frps.toml中的信息。

    vim frps.toml

    vim编辑器打开文件后需要点击键盘上的字母“i”来进入编辑模式,否则为观察模式无法对文件进行修改。

    [common]
    # server_addr为FRPS服务器IP地址
    server_addr = XXX.XXX.XXX.XXX
    # server_port为服务端监听端口
    server_port = 7000
    # 身份验证
    token = XXXXXXXX

    server_addr后面的XXX.XXX.XXX.XXX更换为公网服务器的公网ip地址;token(相当于与密码)后面的XXXXXXXX换为自己填写的密码。

    配置frps.toml文件

    完成上述操作后,通过点击键盘上的“Esc”键退出vim的编辑模式,在同时点击“Shift”+“;”,在下方输入框中输入“wq”按“Enter”键保存并退出。

    运行程序

    执行下列命令来启动Frps服务(该启动方式建议仅作为测试使用)

    ./frps -c ./frps.toml

    注:如果退出运行界面则会停止Frps服务,建议配置程序启动服务

    设置程序启动

    对于Linux(Ubuntu)端,我们可以使用systemd来配置程序的启动/停止/重启,另外systemd也可以配置程序开机自启动。

    我们需要在system文件夹配置frps.service文件来设置启动。

    cd /etc/systemd/system    //进入system文件夹 
    touch frps.service    //创建frps.service文件
    vim frps.servics    //编辑frps.service文件

    将下列配置粘贴到frps.service文件中。

    [Ubit]
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    ExecStart = /path/to/frps -c /path/to/frps.toml
    
    [Install]
    WantedBy = multi-user.target

    注:将ExecStart路径修改为frps和frps.toml的所在路径。

    完成上述操作后,通过点击键盘上的“Esc”键退出vim的编辑模式,在同时点击“Shift”+“;”,在下方输入框中输入“wq”按“Enter”键保存并退出。

    最后执行下面的命令启动程序。

    systemctl start frps    //启动frps.service服务

    systemd其他常用命令。

    systemctl stop frps    //停止fprs.servics服务
    systemctl restart frps    //重启fprs.servics服务
    systemctl enable frps    //设置fprs.servics服务开机自启动

    配置内网服务端

    程序文件配置

    打开frpc.toml文件,将下列配置信息粘贴到文件中。

    [common]
    # server_addr为FRPS服务器IP地址
    server_addr = XXX.XXX.XXX.XXX
    # server_port为服务端监听端口
    server_port = 7000
    # 身份验证
    token = XXXXXXXX

    server_addr和token信息与上面frps.toml的相同。

    这样公网服务端和内网服务端就连接成功,下面还需要配置需要映射的端口。

    [example]
    type = tcp    //传输协议
    local_ip = 127.0.0.1    //本地ip地址
    local_port = 80    //本地端口
    remote_port = 180    //映射端口
    配置frpc.toml文件

    运行程序

    在Frp文件夹上方路径位置输入cmd,以命令行形式打开。输入下列命令运行程序。

    ./frpc -c ./frpc.toml

    个人应用场景

    我个人拥有两台阿里云轻量服务器(一台位于杭州、一台位于东京)、另外有一台Ubuntu arm64系统的本地开发板(Orange pi4)和一台位于老家的飞牛NAS(使用Hp Z230SFF工作站+低功耗CPU)。

    注:Orange pi4作为主要的Nginx、Docker、Wordpress和Gitea的服务端

    两台阿里云服务器当作两个节点分别配置了frps服务端,Orange pi4和飞牛NAS作为frpc客户端。

    这样就可以让国内外所有可以连接互联网的地方均可访问我的Web、Blog和Gitea。同时我也可以在杭州来调用家(天津)中的NAS存储,甚至理论上可以通过Homeassistant来控制家中的所有设备。

    注:为什么说是理论上可行,因为目前家中仅有手机、电脑、电视和NAS可以连接网络,这些设备做Homeassistant实际作用不大。可能在未来我会用更多的技术手段来将我在杭州的家和天津的家在网络设备上做到完全打通(使用ipv6+Ddns或两台路由器组VPN网络)

    说到ipv6我就要吐槽一下了,为什么校园宽带不给ipv6,why!

  • [DIY]空心时钟

    [DIY]空心时钟

    项目简介

    本项目是一面时针悬在空中的时钟,此时钟基于Arduino nano作为主控,通过驱动板控制28BYJ-48 步进电机传动到指针上来控制时间(时针采用磁性吸引控制)

    空心时钟实物照片

    此项目的作者shiura没有使用和普通时钟一样从表盘中心点来驱动指针转定,而是通过反向思维,利用表盘边框中的两个圆环齿轮来进行传动,分针直接固定再齿轮上,时针与分针在表盘中心处连接并通过钕磁铁以磁性的方式与环形齿轮进行间接性连接。这使得表盘中心大面积区域可以处于镂空状态,给人一种高级感。

    项目制作

    模型打印

    利用3D打印机(创想三维Ender2Pro)对空心时钟的外壳、圆环齿轮、蜗轮、表针等材料进行打印(共需要14个模型材料)

    打印模型材料展示

    电路部分

    将Arduino nano与电机驱动板按照下图的引脚对应连接(由于对于空间的充分利用需要剪去电机驱动板的引脚通过导线与Arduino nano进行连接,且将Arduino nano斜向放置来节省空间)

    Arduino nano电机驱动板
    D2IN1
    D3IN2
    D4IN3
    D5IN4
    5V5V
    GNDGND

    28BYJ-48 步进电机的5pin端子插在电机驱动板上。完成电路部分的焊接工作。

    组装工作

    将已经焊接好的电路放置到打印的底座中并将蜗轮插在步进电机上、装上锥形齿轮驱动齿轮(注意安装垫片)

    底座组装实物图

    最后将两块钕磁铁放入时针的环形齿轮,将两个环形齿轮放入表盘外壳中,盖上后盖用螺丝固定,再将一块钕磁铁放在时针的末端,时针头部与分针用螺丝固定在一起。完成组装。

    程序写入

    使用Arduino IDE工具通过数据线连接Arduino nano开发板(注意Arduino IDE工具驱动和串口参数设置),将hollow4.ion文件上传到Arduino nano开发板中。

    程序烧录展示

    hollow4.ino本身为C语言程序进行编写而成。时钟由于实际设备材料等因素影响可能在运行过程中存在一定误差。可以通过调整下列代码参数值来解决(数值越大,时针转动越慢)

    // milliseconds per a minute
    #define MILLIS_PER_MIN 59850

    成果展示

    下面视频中使用了测试代码,以便于观察系统的工作状态(测试代码加快了指针的运转速度)

    空心时钟成品展示

    致谢

    感谢作者shiura设计的Hollow Clock 4(空心时钟4)项目。

    附原作者shiura的项目地址

    Hollow Clock 4:https://www.instructables.com/Hollow-Clock-4