DIY Pan and Tilt网络安全摄像机与Raspberry Pi

了解如何使用Raspberry Pi制作可远程观看的平移和倾斜安全摄像机。仅需最简单的部分即可在一个早晨完成该项目。最终结果如下:

您需要什么

  • 带有Micro SD卡的树莓派2或3
  • Arduino UNO或类似的
  • 2 x微型或小型业余伺服器
  • USB网络摄像头
  • 公对公连接线
  • 公对母连接线
  • 各种拉链领带
  • 构建监控摄像机

    使用提供的螺钉将伺服喇叭(塑料的“小形状")连接到每个伺服上。尽管越大越好,但特定的形状并不重要。请勿过度拧紧螺钉。

    现在,使用拉紧带将一个伺服器以直角连接到另一个伺服器。其中一个将是平移(从左到右),而另一个将是倾斜(向上和向下)。不管哪个人做什么,都可以在代码中对其进行调整。

    最后,将网络摄像头连接到其中一个伺服器上。尽管我的网络摄像头带有一个固定在底部的固定夹,但您可以使用拉链领带-我卸下了固定夹并用螺钉将其固定在喇叭上。为了稳定起见,您可能需要将整个钻机安装到箱子或盒子上。一个简单的纸板箱可以很好地解决问题。您可以切一个整洁的方孔并在表面上安装一个伺服平齐,但是只需系上一条拉链即可。

    关于网络摄像头的信息

    并非所有USB网络摄像头都是一样创建的。将网络摄像头连接到Pi的USB端口,然后运行以下命令:

    lsusb

    此命令显示有关连接到Pi的所有USB设备的信息。如果您的网络摄像头未在此处列出,则您可能要尝试使用有源USB集线器并重复该命令。如果仍然无法识别该网络摄像头,则可能必须购买兼容的网络摄像头。

    伺服设置

    虽然伺服器看起来很恐怖和复杂,但连接起来确实非常简单。伺服系统在脉宽调制(PWM)上运行,这是数字系统模仿模拟信号的一种方式。 PWM信号本质上是快速的ON-OFF信号。使用占空比来描述ON或HIGH的信号。占空比以百分比表示,并描述了信号开启的时间。占空比为25%的PWM信号将在25%的时间内打开,其余75​​%的时间关闭。信号在开始时并没有打开,然后一直关闭,而是在非常短的时间内定期发出脉冲。

    Servos会监听这些脉冲并采取相应的措施。使用100%的占空比将与“常规" 5v相同,而0%将与接地相同。如果您不完全了解PWM的工作原理,请不要担心,您仍然可以控制伺服器(Extreme Electronics是了解更多信息的好地方)。

    使用PWM的主要方法有两种:硬件或软件。硬件PWM通常提供比软件PWM更低的延迟(伺服器接收命令和移动之间的时间),但是Pi只有一个具有硬件PWM功能的引脚。外部电路可用于提供多个硬件PWM通道,但是简单的Arduino也可以处理该任务,因为它们具有多个硬件PWM引脚。

    这里是电路:

    Double-check the pinout for your Pi, they vary slightly between models. You need to figure out how your servos are wired. Servos require three wires to control them, however the colours vary slightly:

  • 红色为正,将其连接至Pi + 5v
  • 棕色或黑色为负,将其连接至Pi上的GND
  • 橙色或白色为信号,将其连接至Arduino引脚9和10
  • Arduino设置

    Arduino的新功能?在这里开始。

    连接伺服器后,在计算机上打开Arduino IDE并上传此测试代码。不要忘记从 Tools> Board Tools> Port 菜单

    #include <Servo.h> // Import the libraryServo servoPan, servoTilt; // Create servo objectsint servoMin = 20, servoMax = 160; // Define limits of servosvoid setup() {    // Setup servos on PWM capable pins    servoPan.attach(9);     servoTilt.attach(10);}void loop() {    for(int i = servoMin; i < servoMax; ++i) { 1        // Move servos from minimum to maximum         servoPan.write(i);         servoTilt.write(i);         delay(100); // Wait 100ms     }     for(int i = servoMax; i > servoMin; --i) {        // Move servos from maximum to minimum        servoPan.write(i);        servoTilt.write(i);        delay(100); // Wait 100ms    }}

    中选择正确的电路板和端口。伺服器缓慢地来回移动。请注意,如何将“ servoMin"和“ ServoMax"定义为20度和160度(而不是0度和180度)。部分原因是这些廉价的伺服器无法准确地移动整个180度,还因为网络摄像头的物理尺寸阻止了整个范围的使用。您可能需要针对设置进行调整。

    如果它们根本不起作用,请再次检查电路是否正确接线。面包板的质量有时也会有所不同,因此请考虑购买万用表进行验证。

    伺服器几乎对于Arduino而言功能太强大,因此它们将由Pi。 Pi上的5v电压限制为提供给整个Pi的750mA,Pi汲取了大约500mA的电流,剩下250mA用于伺服器。这些微型伺服器消耗大约80mA电流,这意味着Pi应该能够处理其中的两个。如果您希望使用更多的伺服器或更大,功率更高的型号,则可能需要使用外部电源。

    现在将以下代码上传到Arduino。这将侦听传入的串行数据(如通用 Serial 总线或USB中的串行)。 Pi将通过USB将这些数据发送到Arduino,并告知将伺服器移至何处。

    #include <Servo.h> // Import the libraryServo servoPan, servoTilt; // Create servo objectString data = ""; // Store incoming commands (buffer)void setup() {    // Setup servos on PWM capable pins    servoPan.attach(9);     servoTilt.attach(10);    Serial.begin(9600); // Start serial at 9600 bps (speed)}void loop() {    while (Serial.available() > 0)    {        // If there is data        char singleChar = Serial.read(); // Read each character        if (singleChar == 'P') {            // Move pan servo            servoPan.write(data.toInt());            data = ""; // Clear buffer        }        else if (singleChar == 'T') {            // Move tilt servo            servoTilt.write(data.toInt());            data = ""; // Clear buffer        }        else {            data += singleChar; // Append new data        }    }}

    您可以通过打开串行监视器(右上方>串行监视器来测试此代码>)并发送一些测试数据:

  • 90P
  • 0P
  • 20T
  • 100T
  • 注意格式命令的内容-一个值,然后是一个字母。该值是伺服系统的位置,字母(大写)表示摇摄或俯仰伺服系统。由于从Pi串行传输此数据,因此每个字符一次通过一个字符。 Arduino必须“存储"这些,直到发送完整个命令。最后一个字母不仅指定了伺服系统,还使Arduino知道此命令中没有更多数据。

    最后,将Arduino与计算机断开连接,将其插入Raspberry Pi通过通常的USB端口连接

    Pi设置

    现在是时候设置Pi了。首先,安装操作系统。将摄像头和Arduino连接到Pi USB。

    更新Pi:

    sudo apt-get updatesudo apt-get upgrade

    安装动作:

    sudo apt-get install motion

    Motion是用于处理摄像头流的程序。它可以处理所有繁重的工作,甚至可以执行记录和运动检测(尝试构建运动捕捉安全系统)。打开Motion配置文件:

    sudo nano /etc/motion/motion.conf

    This file provides lots of options to configure Motion. Setup as follows:

  • daemon-运行程序
  • framerate:100-关闭每秒要流多少帧或图像
  • stream_localhost-允许通过网络访问
  • 宽度640-视频宽度,调整您的网络摄像头
  • 高度320-视频高度,调整您的网络摄像头
  • stream_port 8081 —关闭视频输出端口
  • output_picture —不保存任何图像
  • 这是一个很大的文件,因此您可能要使用 CTRL + W 搜索行。完成后,按 CTRL + X ,然后确认保存并退出。

    现在再编辑一个文件:

    sudo nano /etc/default/motion

    设置“ start_motion_daemon = yes"。这是确保Motion运行所必需的。

    现在找出您的IP地址:

    ifconfig

    此命令将显示Pi的网络连接详细信息。查看第二行 inet addr 。您可能想要设置一个静态IP地址(什么是静态IP?),但现在记下该数字。

    现在开始运动:

    sudo service motion start

    您可以停止或通过将“开始"更改为“停止"或“重新启动"来重新启动Motion。

    切换到计算机并从Web浏览器导航到Pi:

    http://xxx.xxx.x.xx:8081

    其中xxx。 xxx.x.xx是Pi IP地址。冒号后跟数字是之前设置的端口。一切顺利,您应该可以从网络摄像头中看到信息流!尝试四处移动,看看情况如何。您可能需要在配置文件中调整亮度和对比度设置。您可能需要对网络摄像头进行对焦-某些型号的镜头周围有一个小的对焦环。

    返回到Pi,创建一个文件夹并导航到其中:

    mkdir security-camcd security-cam/

    现在安装Twisted:

    sudo apt-get install python-twisted

    Twisted是用Python编写的网络服务器,它将侦听命令,然后采取相应的措施。

    安装后,创建一个Python脚本来执行命令(移动舵机)。

    sudo nano servos.rpy

    注意如何文件扩展名是“ .rpy"而不是“ py"。这是代码:

    # Import necessary filesimport serialfrom twisted.web.resource import Resource# Setup Arduino at correct speedtry:        arduino = serial.Serial('/dev/ttyUSB0', 9600)except:        arduino = serial.Serial('/dev/ttyUSB1', 9600)class MoveServo(Resource):        isLeaf = True        def render_GET(self,request):                try:                		# Send value over serial to the Arduino                        arduino.write(request.args['value'][0])                        return 'Success'                except:                        return 'Failure'resource = MoveServo()

    现在启动Web服务器:

    sudo twistd -n web -p 80 --path /home/pi/security-cam/

    让我们对其进行分解-“ -p 80"指定端口(80)。这是网页的默认端口。 “ –path / home / pi / security-cam /"告诉Twisted在指定目录中启动服务器。如果您对“ security-cam"文件夹中的脚本进行了任何更改,则需要重新启动服务器( CTRL + X 以关闭,然后再次运行命令)。

    现在创建网页:

    sudo nano index.html

    这是网页代码:

    将“ PI_IP_ADDRESS"(两次使用)更改为Pi的真实IP地址( raspberrypi.local 如果您正在运行最新的Raspian,也应该可以使用。重新启动网络服务器,然后从计算机导航至Pi,无需指定端口。您应该可以左右左右平移,并观看视频流:

    有。您自己的云台网络摄像机。如果您想将网络摄像头暴露在互联网上,请记住考虑一下真正便携式设备的危险性和Wi-Fi适配器。

    您使用网络摄像头和Pi做过一些很棒的事情吗?我想在评论中告诉我!

    标签: 家庭安全 Raspberry Pi 网络摄像头