一、实验背景
向心力公式:F = m · r · ω²
即:向心力 = 质量 × 半径 × 角速度²
高中物理新课标要求学生通过实验探究向心力,但现有实验器材(手摇向心力演示仪)操作不便、精度低。本App利用手机内置传感器,实现低成本、高精度的向心力探究实验。
1.1 与 phyphox 的区别
phyphox(德国亚琛工业大学开发)可以测量向心加速度 a = r · ω²,但存在以下局限:
| 对比项 | phyphox 离心加速度实验 | 本App(向心力实验) |
|---|---|---|
| 测量物理量 | 向心加速度 a | 向心力 F = m·r·ω² |
| 可变质量探究 | ❌ 手机质量固定 | ✅ 用户输入任意质量 |
| F-ω 关系图 | ❌ | ✅ |
| F-r 关系图 | ❌ | ✅ |
| F-m 关系图 | ❌ | ✅ |
| 理论曲线对比 | ❌ | ✅ |
| 教学引导 | ❌ | ✅ |
核心差异:本App弥补了 phyphox 无法探究向心力(F = m·r·ω²)的市场空白。
二、核心物理公式
| 公式 | 含义 |
|---|---|
| F = m · r · ω² | 向心力 |
| a = r · ω² = v²/r | 向心加速度 |
| v = r · ω | 线速度 |
| T = 2π/ω = 2πr/v | 周期 |
需要探究的三个关系
| 关系 | 固定量 | 变量 | 预期结论 |
|---|---|---|---|
| F vs ω | m, r 固定 | ω 变化 | F ∝ ω²(二次函数) |
| F vs r | m, ω 固定 | r 变化 | F ∝ r(正比) |
| F vs m | r, ω 固定 | m 变化 | F ∝ m(正比) |
三、实现原理
利用手机传感器测量 a 和 ω,用户手动输入 m 和 r,App 计算 F = m · a:
- 加速度计(AccelerometerSensor)— 实时测量向心加速度 a
- 陀螺仪(GyroscopeSensor)— 实时测量角速度 ω
- 用户输入质量 m(可模拟不同质量物体)
- 用户输入半径 r(可设置不同旋转半径)
- 自动计算 F = m · r · ω²
- 实时绘制 F-ω、F-r、F-m 关系曲线
- 叠加理论曲线对比验证
四、所需组件
| 组件 | 用途 | App Inventor 支持 |
|---|---|---|
| AccelerometerSensor | 测量加速度 a | ✅ 内置组件 |
| GyroscopeSensor | 测量角速度 ω | ✅ 内置组件 |
| Chart | 绘制关系曲线 | ✅ Chart组件 |
| TextBox | 输入质量 m、半径 r | ✅ 基础组件 |
| Clock | 定时采集数据 | ✅ 基础组件 |
| File | 数据导出(CSV) | ✅ 内置组件 |
五、积木块实现
5.1 传感器数据采集
when 时钟1.Timer() {
global 当前加速度X = 加速度传感器1.XAccel
global 当前角速度Z = 陀螺仪传感器1.ZAngularVelocity
// 计算向心加速度(取XY平面合加速度)
var ax = 加速度传感器1.XAccel
var ay = 加速度传感器1.YAccel
global 向心加速度 = Math.sqrt(ax * ax + ay * ay)
// 计算向心力 F = m * a
var m = 文本输入框_质量.Text + 0
var r = 文本输入框_半径.Text + 0
global 向心力 = m * 向心加速度
标签_加速度.Text = join("加速度: ", 向心加速度, " m/s²")
标签_角速度.Text = join("角速度: ", 当前角速度Z, " rad/s")
标签_向心力.Text = join("向心力: ", 向心力, " N")
}
5.2 数据处理(滑动平均)
function 滑动平均(新值, 数据列表, 窗口大小) {
addItemsToList(数据列表, 新值)
if lengthOfList(数据列表) > 窗口大小 {
removeItemFromList(数据列表, 1) // 移除最旧数据
}
// 计算平均值
var 总和 = 0
var i = 1
while i <= lengthOfList(数据列表) {
总和 = 总和 + selectListItem(数据列表, i)
i = i + 1
}
return 总和 / lengthOfList(数据列表)
}
5.3 图表数据添加
when 按钮_记录数据.Click() {
// 添加到F-ω图表
图表_F_omega.AddEntry(
"实测值",
当前角速度Z,
向心力
)
// 添加理论值
var m = 文本输入框_质量.Text + 0
var r = 文本输入框_半径.Text + 0
var 理论F = m * r * 当前角速度Z * 当前角速度Z
图表_F_omega.AddEntry(
"理论值",
当前角速度Z,
理论F
)
}
5.4 数据导出(CSV)
when 按钮_导出.Click() {
var csv内容 = "角速度,向心加速度,向心力,质量,半径\n"
var i = 1
while i <= lengthOfList(实验数据) {
var 数据项 = selectListItem(实验数据, i)
csv内容 = join(csv内容,
dictLookup(数据项, "omega", ""), ",",
dictLookup(数据项, "a", ""), ",",
dictLookup(数据项, "F", ""), ",",
dictLookup(数据项, "m", ""), ",",
dictLookup(数据项, "r", ""), "\n")
i = i + 1
}
文件1.SaveFile(csv内容, "/Download/centripetal_data.csv")
}
六、实验操作步骤
6.1 准备工作
- 在手机上安装向心力实验App
- 准备一个旋转装置(如沙拉甩干机、小型旋转台、手摇转盘)
- 准备手机固定支架
- 准备不同质量的物体(如砝码,用于验证 F ∝ m)
6.2 探究 F 与 ω 的关系
- 输入质量 m(如 0.2 kg)和半径 r(如 0.15 m)
- 将手机固定在旋转装置上
- 点击”开始采集”
- 以不同角速度旋转手机
- 观察实时 F-ω 曲线
- 点击”停止采集”
- 对比理论曲线 F = m·r·ω²
- 预期结论:F-ω² 图为过原点直线,斜率 = m·r
6.3 探究 F 与 r 的关系
- 固定质量 m,保持角速度 ω 基本不变
- 改变旋转半径 r(调整手机在旋转台上的位置)
- 记录不同 r 下的 F 值
- 绘制 F-r 图
- 预期结论:F-r 图为过原点直线,斜率 = m·ω²
6.4 探究 F 与 m 的关系
- 固定半径 r,保持角速度 ω 基本不变
- 在App中输入不同质量 m 值
- 记录不同 m 下的 F 值
- 绘制 F-m 图
- 预期结论:F-m 图为过原点直线,斜率 = r·ω²
七、注意事项
- 传感器量程:不同手机加速度计量程不同(30~80 m/s²),高速旋转时注意不要超量程
- 数据滤波:建议使用 0.5 秒滑动平均减少震动干扰
- 手机固定:务必牢固固定手机,防止飞出
- 安全提示:建议使用远程控制功能,实验时远离旋转装置
- 精度限制:手机传感器精度有限,适用于教学演示,不替代专业实验设备
参考资料
| *文档版本:2026.05 | 作者:App Inventor 2 中文网 www.fun123.cn* |
参考资料与版权声明
原文来源
- MIT App Inventor 官方文档 - MIT App Inventor
- MIT App Inventor Community - MIT App Inventor Community
- MIT App Inventor GitHub - MIT CML
版权声明
本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
- MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
- MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。
扫码添加客服咨询