You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求适用于树莓派3B+的LSM6DSOX加速度计运动检测拍照Python代码

LSM6DSOX加速度计运动检测触发树莓派拍照代码

原代码存在的问题

  • 导入语句格式错误,未正确初始化I2C总线,模块导入方式也不符合规范
  • 代码缩进完全违反Python语法,类和函数的结构混乱不堪
  • Watcher类的使用逻辑错误,未实例化对象就直接调用类方法
  • 仅通过单轴加速度值变化判断运动,极易产生误触发
  • main函数重复定义,缺少持续检测加速度的循环逻辑

修复后的完整代码

import time
import board
from adafruit_lsm6ds.lsm6dsox import LSM6DSOX
from picamera import PiCamera
import math

# 初始化I2C总线与传感器
i2c = board.I2C()
sensor = LSM6DSOX(i2c)

# 初始化相机并设置分辨率
camera = PiCamera()
camera.resolution = (1920, 1080)

# 运动检测参数(可根据实际场景调整)
MOTION_THRESHOLD = 1.5  # 加速度变化超过该值判定为运动
COOLDOWN_TIME = 2  # 拍照冷却时间,避免短时间重复触发

last_accel_magnitude = 0
last_capture_time = 0

def calculate_accel_magnitude(x, y, z):
    """计算合加速度的模值"""
    return math.sqrt(x**2 + y**2 + z**2)

def capture_photo():
    """触发相机拍照并按时间命名保存"""
    current_time = time.strftime("%Y%m%d-%H%M%S")
    photo_path = f"/home/pi/Pictures/motion_{current_time}.jpg"
    camera.capture(photo_path)
    print(f"已保存照片:{photo_path}")

def main():
    global last_accel_magnitude, last_capture_time
    print("运动检测已启动...")
    while True:
        # 获取当前三轴加速度数据
        accel_x, accel_y, accel_z = sensor.acceleration
        # 计算当前合加速度
        current_magnitude = calculate_accel_magnitude(accel_x, accel_y, accel_z)
        # 计算加速度变化量
        magnitude_diff = abs(current_magnitude - last_accel_magnitude)
        
        # 判断是否触发拍照
        current_time = time.time()
        if magnitude_diff > MOTION_THRESHOLD and (current_time - last_capture_time) > COOLDOWN_TIME:
            capture_photo()
            last_capture_time = current_time
        
        # 更新上次加速度记录
        last_accel_magnitude = current_magnitude
        # 控制检测频率
        time.sleep(0.1)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n检测已停止")
        camera.close()

关键逻辑说明

  • 合加速度检测:通过计算三轴加速度的模值判断运动,比单轴检测更稳定,减少误触发
  • 冷却机制:设置冷却时间避免短时间内重复拍照,节省存储空间
  • 动态命名:按当前时间命名照片,避免覆盖旧文件
  • 优雅退出:捕获Ctrl+C信号,确保程序停止时正确关闭相机

内容的提问来源于stack exchange,提问作者Lemickey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:19:22