根据动态链接库和头文件生成 Python 库的方法

给工业控制器和各种仪器设备写业务代码的时候,我们经常将 python 用作一门胶水语言来连接前后端程序和嵌入式设备。许多经典的工业控制器都提供动态链接库 (.dll, .so) 文件和一些头文件 (.h) 来方便二次开发。在 python 中,调用这些库函数的经典办法是通过 ctypes 标准库加载这些库文件,并且手动指定其参数类型,从而将其转变为封装好的 python 函数。利用 ctypesgen 可以方便地将这一过程自动化,从而得到易用的 python 库。

Continue reading “根据动态链接库和头文件生成 Python 库的方法”

拆解学习某国产特斯拉计的结构

前几天买了一个国产的磁场传感器粗略测定一个钕铁硼磁体的磁场强度(天恒测控 Tunkia 的 TM5100 手持特斯拉计),这几天正好需要扫描一个区域的磁场分布,就准备把这玩意接到电脑上采集数据,但是接上电脑之后竟然不工作。打电话问了厂家的技术支持,对方表示 TM5100 上原本配备有 USB 通信协议,甚至在官网的宣传手册里也写了支持 USB 通信,但是由于厂家的领导认为如果给手持仪器加上 USB 功能会导致台式的机器不好卖,因此强行要求技术人员屏蔽了这一部分程序。虽然他这种行为十分缺德,但是也是法律允许的商业行为,我也没有办法,只好把他的仪器拆开学习一下,看看如何能读出数据来。

Continue reading “拆解学习某国产特斯拉计的结构”

解决STM32F4系列MCU在Windows 10上无法打开 Virtual COM Port 的问题

用 CubeMX 生成代码试图在 STM32F4 系列的单片机中加入 USB CDC 中间件时,会出现一个奇怪的 bug,即在 macOS, Linux 等系统下运行时,可以正常打开串口操作,而在 Windows 10 中虽然在设备管理器中可以看到插入之后已经显示为 USB Serial Device, 但并不能正常打开操作。

比如最近我用的 STM32F407VET6,使用 CubeMX 生成代码,其中 USB_Device 设置为 Communication Device Class,所有参数都用默认,然后在主循环中只用一个最基本的 CDC_Transmit_FS 函数,编译之后依然不行。稍微调试之后可以发现如果把 Linker 的 minimum heap size 调到一些特定的数值上, 则程序有时候会正常。但这个很麻烦,因为随便改动程序之后就又要重新调整,所以稍微认真地找了一下bug,发现应该是官方库的函数有一些 bug。

Continue reading “解决STM32F4系列MCU在Windows 10上无法打开 Virtual COM Port 的问题”

一个简单的计算机视觉数据扫描程序,可用于自动阅卷或者快速录入手写的表格数据

最近带北大化院的本科生上基础实验课,按照学校的要求,每周需要给学生从10个方面评分。在纸质评分表上,我用加号和减号的数量表示学生该项分数相对“平均水准”的偏差,通过正态分布拟合求解偏差值代表的分值,最后通过加权求和就可以给出学生的最终成绩。我带的学生一共是40个人,换句话说,这意味着我每周需要从纸质表格上转移400个数据到电脑上,这非常耗时并且容易出错(比如看岔行)。
为了解决这个麻烦的问题,我的第一反应是使用现在很成熟的答题卡读卡系统。不过花了5分钟完全了解了这个市场的情况之后我直接放弃了这个想法,因为他们这种传统行业实在是太封闭了,就算我愿意花几千买一套这种系统,用起来也受到很多限制,而且不知道要谈多久才能买到一套。
我的第二反应是搜索有没有现成的自动拍照阅卷系统,结果花了5分钟找到的几个应用或者服务看起来没有一个靠谱的。甚至有的还要收费,不可思议。考虑到这样的系统实在是简单的扣脚,我只好再浪费十几分钟的时间自己写一个,顺便放在这里,以方便后来者。

Continue reading “一个简单的计算机视觉数据扫描程序,可用于自动阅卷或者快速录入手写的表格数据”

给科研人员的家庭氩弧焊指南

我们在做高真空实验(比如质谱仪、冷原子)和一些惰性气体实验的时候,经常需要定制各种不锈钢高真空管件和各种箱体。贵得离谱不说,有时候我突然想实验一个新想法,真的很着急想在某个地方加一个法兰接口或者航空插头接口,如果临时去找焊工师傅的话又要预约再等几天,说不定2天过去好不容易调好的仪器又失锁或者温漂或者怎么了,心态就直接崩了。所以我决定自力更生,抄起焊枪自己搞。一方面是省钱又省时间,另一方面节省了和人家比划半天的功夫,有这功夫给人讲清楚我想要个什么结构我自己都焊出来了。

在我决定学习氩弧焊技术的时候,我以为这是一件很困难的事,所以在事先花了大概1天的功夫学习了一下相关的理论,甚至去拉来了一后备箱金属废品准备用来练习,但是在我上手之后,仅仅10分钟我就已经很熟练了。。。练习20分钟之后,我自己焊接了一个 10 吨级的小型液压压药装置,虽然有些边角处理得不是很好,但强度完全达到了要求。这之后又焊接了各种气密装置,效果都很好,甚至因为自己制作的用料更加扎实,各种泄漏率和散热情况还要更好一些。。。

实际上,我认为整个氩弧焊操作是比较容易掌握的,之所以各种技校和培训中心需要教学很长时间,是因为还需要讲解各种理论知识、参数选择和变通情况等等,而这些正是我们搞研究的人已经非常熟悉的。另外,因为我们不涉及高压力标准的压力容器焊接、焊缝后期热处理等比较硬核的内容,所以学起来很快也很正常。写这个指南的目的,就是给大家参考一下我的经验,在前期节省更多的时间。

花个一两天熟悉氩弧焊之后,平时也可以做很多有意思的东西,比如说和朋友一起搞院子烧烤的烤架、制作高真空微型扩散泵之类。我还顺便在家里焊接了一个惰性气氛手套箱,非常奢侈地配置了超大工作区和双过渡舱、四路气液接口和舱内循环再生装置,这样的手套箱市场上至少12万元起步,自己切割焊接组装实际上只需要几千元的材料费,虽然焊接这么大的工件比较费体力,但非常好玩,作为休闲 project 可以玩上好几天。

Continue reading “给科研人员的家庭氩弧焊指南”

各种多多益善的便宜耗材清单

最近总是得到很多无门槛的小额优惠券,大部分在10块钱以内,买别的东西用不掉那么多,最后发现买耗材是永远不嫌多的。。整理了一个自己常用的最便宜的耗材清单,一般都有一两块钱到几块钱的包邮选项,用了券之后都是几分钱白嫖,虽然这点钱省了也没啥意义,但是每天可以快乐一下,就很舒服,而且顺手补充耗材总是多多益善的,永远不嫌多的

Continue reading “各种多多益善的便宜耗材清单”

Windows安装开源版pymol的简单办法

最近装了一台windows电脑,需要在上面用pymol。以前在mac或者linux下可以很容易地自己编译免费的版本,但是在windows下似乎比较麻烦。买license是不可能买license的,这辈子不可能买license。。

好在这位老哥 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymol 提供了很多编译好的版本,下载需要的 whl 文件后,在 Anaconda Prompt 里面 pip install 一下就可以了。之后可以通过 pymol 命令直接启动 pymol,也可以在 Anaconda3/Scripts/ 里面找到 pymol.exe,方便创建快捷方式。

Noita 攻略及技巧

Noita是最近玩到的一个非常有特色的roguelike游戏,目前还在 early access 测试中,由于这个游戏截至今天(2019年10月1日)难度还非常高,所以特别写一篇文章来说明这个游戏里的一些技巧。

[Update @ Feb 20, 2021] Noita目前已经进入正式版,相对于这篇文章完成时的早期测试版本,已经发生了很多变化,法术和Perk的数量几乎增加了一倍,一些机制也和之前不同了,最重要的是由于加入了很多强力法术以及Perk,游戏的难度下降了很多,已经可以比较轻松地通关了,因此这篇文章放在这里仅仅留作参考,文中描述的关卡和场景与目前版本的内容会有一些差异。

Continue reading “Noita 攻略及技巧”

线阵 CCD 的使用方法(以 TCD1304 为例)

本文首先简单介绍 CCD 原理,然后介绍如何驱动典型结构的线阵 CCD,最后介绍一个经典线阵 CCD 型号 TCD1304 配合 STM32 微控制器构建 USB CCD 模块的最简单例子。本文的目的是,使化学或者物理背景的中学或本科学生快速了解什么是 CCD,以及在几分钟的时间内大致学会如何在他们的研究项目中使用低速线阵 CCD。

(我不想学习,我只想马上整一个插电脑上就能用的便宜传感器 直接看文末 PS2)

Continue reading “线阵 CCD 的使用方法(以 TCD1304 为例)”