CUPT 地震仪的实现

2018 年 CUPT 的第一题:

Invent Yourself
Construct a simple seismograph that amplifies a local disturbance by mechanical, optical or electrical methods. Determine the typical response curve of your device and investigate the parameters of the damping constant. What is the maximum amplification that you can achieve?
自主发明
建造一个可以通过力学、光学或电学方法放大局部扰动的简单地震仪。确定你装置的标准响应曲线并且研究阻尼常数的参量。你能达到的最大放大率是多少?

此题的关键便是将地震仪的反应谱通过可观测量进行表示。实现的思路有很多,力学、光学或电学方法都是可行的。综合考虑了实现难度和测量精度后,决定采用以下方案:通过力学方法放大震动,然后利用霍尔片和磁铁将力学量转换为电学量,借助 Arduino 单片机的模数转换,通过串口将信号输入到电脑,电脑用 Python 监听串口,将获得的数据保存并实时分析、绘图。

仪器的整体构造如图:

仪器的整体构造

磁铁与霍尔片的细节:

磁铁与霍尔片

Arduino 的连接:

Arduino的连接

仪器的工作状态:

调试代码
实时作图

测得的「地震」波(由敲击桌子和将小物件扔到桌子上产生):

「地震」波的波形

具体的代码包括 Arduino 读取模拟信号和串口输出部分(需要使用 Arduino IDE 编译上传至设备),以及 Python 监听串口、保存数据、绘图部分。
所有代码已开源:CUPT-Seismograph


本文更新于 2018 年 10 月 31 日:
其实电脑上还有一个更好的采样方式 —— 声卡。通过 Python 直接读取声卡的模拟输入,也可以达到效果,并且采样率和精度可以做得更高。pyaudio 库可以提供相关功能,有兴趣的话可以按这个思路实现。