首页 > 解决方案 > 如何将网络摄像头与来自 arduino 和 SR04 距离传感器的串行数据同步

问题描述

我已经用 arduino+SR04 传感器连接了我的笔记本电脑。我想做的是,一旦距离传感器检测到有人在笔记本电脑附近(距离读数小于 50 厘米),我想使用 python-opencv 打开网络摄像头(稍后保存此视频剪辑)问题我面临的是arduino + SR04和python之间存在不同步的通信。即使在人离开后,传感器读数也会在 phython 控制台上持续弹出约 3-4 秒(这可能是由于传感器数据的写入速度不如相机显示快)。这么长的延迟,我的视频会占用很多空间。

我尝试将 SR04 传感器的延迟增加到 500 毫秒,但这会使网络摄像头变得非常不稳定和缓慢。我不希望视频断断续续。请帮忙

我的 arduino +SR04 代码

const int echo_pin = 9;
const int trig_pin = 10;
void setup() {
  Serial.begin(9600);
  pinMode(echo_pin, INPUT);
  pinMode(trig_pin, OUTPUT);

}

void loop() {
  double period, distance;
  digitalWrite(trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig_pin, LOW);
  period = pulseIn(echo_pin, HIGH);
  distance = (period / 2) / 29.1;
  //delay(500);
  Serial.println(distance);

}

我的 Python 代码

import serial
import time
import cv2
cap = cv2.VideoCapture(0)
arduino = serial.Serial('COM10', 9600)

def Measure():
    distance = arduino.readline()
    #time.sleep(.5)
    print ("distance "+str(distance)+" cm")
    return float(distance)

while True:
    output = Measure()
    if output < 50:
    
        # Capture frame-by-frame
        ret, frame = cap.read()

        # Our operations on the frame come here
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # Display the resulting frame
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cap.release()
cv2.destroyAllWindows()

标签: pythonopencvarduinosensors

解决方案


推荐阅读