如何使用 Arduino 测量地球质量
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 4 | ||||
![]() |
| × | 2 | |||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
![]() |
|
关于这个项目
介绍
一天晴朗的日子,我在秤上称自己的体重。突然一个想法出现在我的脑海中,“地球的质量有多大?”把它分开“我们怎么能测量它?”没有这样的秤可以放置地球。必须有一些间接的方法来测量地球的质量。在这里,我介绍了一种测量地球质量的间接方法的实现。
第 1 步:间接方法
19 世纪初,科学家们使用牛顿第二定律和牛顿万有引力定律来测量地球的质量。这些方程分别是 F =ma 和 F=(GmM)/(r^2)(m=物体的质量,a=加速度,G=引力常数,M=地球的质量,r=地球的半径) .如果我们用 g,即重力加速度代替“a”加速度项,并将这两个方程结合起来,我们得到。
毫克 =GmM/r^2
这个方程可以求解M,即地球的质量。
M =(gr^2)/G.

我们将假设我们知道 G 和 r 的值。我们将通过一个涉及 arduino 和一些传感器的小型实验找到 g,即重力加速度。最后我们将把所有的东西放在一起来找出 M 的值。
查看附加的图像以获取正确的数学表达式。
让我们开始实验吧。
第 2 步:实验概述
(请耐心等待一些数学知识,arduino 很快就会开始使用)
为了确定重力加速度,我们需要知道一些叫做“自由落体”的东西,它是一种身体/物体仅在重力作用下向下朝向地球移动的运动。现在,描述这种自由落体的科学术语很少。它们是初始速度、最终速度、行驶距离、飞行时间和加速度。
- 初始速度 - 自由落体开始或实验开始时自由落体的速度。
- 最终速度 - 实验结束自由落体结束时自由落体的速度。
- 长途旅行 - 自由落体过程中自由落体的距离。
- 飞行时间 - 在自由落体下完成距离所用的时间。
- 加速 - 身体在自由落体中观察到的速度变化率。它等于重力加速度。
现在,有一个牛顿方程是这样的 -
行驶距离=(初速度*飞行时间)+(加速度*(飞行时间)^2)/2
上述方程中有 4 个变量,包括我们感兴趣的一个变量,即“加速度”,在这 4 个变量中,如果我们知道 3 个,我们可以计算出剩余的第 4 个未知变量。
我们可以修复其中的 2 个
- 行进距离 =1 米(我们将从 1 米高处放下物体)
- 初始速度 =0 m/s(我们将从静止开始我们的实验)
我们还剩下 2 个未知变量,这就是 arduino 的用武之地,它帮助我们找到飞行时间。 为了准确确定飞行时间,我们需要两个时间戳:1. 飞行开始和 2. 飞行结束。
我们将在第 4 步中制作自定义电路来确定这两个时间戳,我将描述用于查找飞行开始和第 5 步飞行结束的时间戳的电路。
在 arduino 和少量传感器的帮助下,我们将计算飞行时间,在上述方程中只留下一个未知数,即重力加速度(bingoooo !!!)。
让我们把我们的固定变量值放在上面提到的方程中,进一步简化方程。
1 =(g * (飞行时间)^2)/2
所以,
g =2 /(飞行时间)^2
实验的详细信息将在第 7 步中进行。
如有任何疑问,请参阅附图。

第 3 步:我们需要的东西
这是我们在实验中测量重力加速度所需的清单。
- 任何 Arduino 板,最好是 uno/duomilanove(没有具体原因,只是我在这个实验中使用了这个板)
- 用于将 Arduino 连接到 PC 的 USB 电缆
- 560 欧姆电阻(4 个)、100 欧姆电阻(2 个)
- 压电传感器(4 个)
- 一对 IR Tx(IR LED)和 Rx(光电二极管)
- 一个电位器
- 一个运算放大器(如 UA741C)
- 一块面包板
- 三根 1.2 米长的电线
- 用于组装红外电路的小型 5cmx5cm 通用 PCB
- 胶带
- 纸板
如有任何疑问,请查看所附图片。















第 4 步:原理图 1:IR 电路
该电路将用于为用于测量“g”的物体标记自由落体的开始时间。以下是关于所附fritzing示意图的要点。
- 红外 LED 用于正向偏压,在此应用中充当普通 LED,即照亮红外接收器光电二极管。
- 光电二极管用于反向偏置。
- 阴极和电阻结点的输出连接到运算放大器的输入端之一。
- 运算放大器的另一个输入端连接到决定阈值电压的电位器。
- 运算放大器的输出进入 Arduino 板。
如有疑问请参考视频(时间=5m 16s)。
第 5 步:原理图 2:压电电路
该电路将用于为用于测量“g”的物体标记自由落体的结束时间。以下是关于所附fritzing示意图的要点。
- 4 个压电传感器如示意图所示连接。
- 4 个 560 欧姆电阻与压电传感器并联,以减少自由落体物体撞击其表面时压电传感器产生的电压尖峰。
- 压电传感器的负极连接到电路地。
- 压电传感器的正极连接到模拟输入引脚。
如有疑问,请参阅附件视频(时间 =9m 2 sec)。
第 6 步:把东西放在一起
按照这些说明将东西放在一起。
- 用硬纸板做成屋顶状的结构,贴在墙上1.1米左右。
- 将 IR 模块朝下连接到纸板屋顶。
- 使用其中一根 1.2m 长的电线将运算放大器的输出连接到 Arduino 的 4 号引脚。
- 使用其余 1.2m 长的电线将 arduino 的 Vcc 和 GND 连接到 IR 模块。
- 确保电线牢固地固定在墙上,红外线模块固定在纸板屋顶上,压电模块固定在红外线模块下方的地面上。
如有疑问,请查看附图,为便于理解组件已正确标记。

第七步:实验细节
一切就绪(除了 Arduino 代码,在第 8 步中讨论过),让我们来完成这个实验的过程。
- 在用于自由落体的物体顶部粘贴一个小的细投影,如编号为 1 的图像所示。
- 在我们离开物体继续自由落体之前,将其保持在 1 米标记处,这样顶部的投影会阻挡从 IR 到光电二极管的光。如编号为 2 的图像所示。
- 在不施加任何力的情况下离开物体,让它在压电着陆区上自由落下。
- 当它下落时,IR TX 和 RX 的路径上没有障碍物,根据自由落体的开始时间向我们提供关于刚离开物体的信号。
- 当物体接触着陆区时,压电传感器会产生受控电压尖峰,根据自由落体的结束时间通知物体的到达。
- 如果我们从开始时间中减去结束时间,我们就会得到飞行时间,我们将使用它来计算重力加速度,如我们在第 2 步中所讨论的那样。


第 8 步:Arduino 代码
我附上了这个实验的 Arduino 代码。代码真的很简单。如有任何疑问,请参阅我详细解释代码的视频(视频时间 =13 分 35 秒)。
第 9 步:让我们做实验
做本实验前应注意以下事项。
- 应在 arduino 代码中正确设置压电传感器的阈值。
- 将压电面板放在 IR 模块正下方。
- 确保在不施加任何外力的情况下将物体从 1 米高处掉落。
在这里,我在所附视频中的时间戳 17 分钟处进行此实验。我们将使用结果计算地球质量,即从该实验中获得的飞行时间。
第 10 步:地球的结果和质量
在重复这个实验 3 次后,我在飞行时间方面得到了以下结果。
- 443 毫秒
- 443 毫秒
- 464 毫秒
让我们取平均值。
平均飞行时间 =450 ms
如果我们将这个值代入方程以获得重力加速度,我们得到的加速度约为 9.8755 m/s2。如附图所示。
最后代入这个“g”的值来获得地球的质量,我们得到大约 6.0066 x 1024 Kg,如您在附图中所见。
根据谷歌,地球的实际质量为 5.972 x 1024 公斤。我想我们接近了。
感谢您的时间,如有任何疑问,请参考视频或在评论中提出,我将很乐意为您提供帮助。

代码
- Arduino 代码
Arduino 代码Arduino
简单的arduino代码const int sensorPin1 =A0;const int sensorPin2 =A1;const int sensorPin3 =A2;const int sensorPin4 =A3;const int photoPin =4;const int ledPin =13;const int threshold =110;char stringToPrint [100];int startTime,endTime;int val1,val2,val3,val4;void setup() {Serial.begin(115200); // 把你的设置代码放在这里,运行一次: pinMode(ledPin,OUTPUT); pinMode(sensorPin1,INPUT); pinMode(sensorPin2,INPUT); pinMode(sensorPin3,INPUT); pinMode(sensorPin4,INPUT); pinMode(photoPin,INPUT);}void loop() { // 把你的主要代码放在这里,重复运行: int start =digitalRead(photoPin);开始时间 =毫秒(); if(start ==HIGH) digitalWrite(ledPin,HIGH);而(开始==低){digitalWrite(ledPin,低); val1 =模拟读取(sensorPin1); val2 =模拟读取(sensorPin2); val3 =模拟读取(sensorPin3); val4 =模拟读取(sensorPin4); //sprintf(stringToPrint,"%d,%d,%d,%d",val1,val2,val3,val4); //Serial.println(stringToPrint); if((val1>=threshold) || (val2>=threshold) || (val3>=threshold) || (val4>=threshold)) { endTime =millis(); sprintf(stringToPrint,"%d ms",endTime - startTime); Serial.println(stringToPrint);数字写入(ledPin,高);延迟(1000);数字写入(ledPin,低);开始=高; } }}
示意图
IR电路的fritzing原理图



制造工艺