如何使用树莓派制作可远程观看的摇摄和倾斜安全摄像机

您需要的东西
带有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引脚。
这里是电路:
仔细检查pi的引脚排列,它们在型号之间略有不同。您需要弄清楚伺服系统的接线方式。 servos需要三根线来控制它们,但是颜色略有不同:
红色为正,将其连接至pi + 5v
棕色或黑色为负,将其连接至pi上的gnd
橙色或白色是信号,将其连接至arduino引脚9和10
arduino设置
arduino的新功能?在这里开始。
一旦连接了伺服器,请在计算机上打开arduino ide并上传此测试代码。不要忘记从 tools》 board 和 tools》 port 菜单
#include // import the library
servo servopan, servotilt; // create servo objects
int servomin = 20, servomax = 160; // define limits of servos
void 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 // import the library
servo servopan, servotilt; // create servo object
string 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 update
sudo apt-get upgrade
安装动作:
sudo apt-get install motion
motion是一个用于处理网络摄像头流的程序。它可以处理所有繁重的工作,甚至可以执行记录和运动检测(尝试构建运动捕获安全系统)。打开motion配置文件:
sudo nano /etc/motion/motion.conf
此文件提供了许多配置motion的选项。设置如下:
守护程序打开-运行程序
framerate:100-关闭每秒要流多少帧或图像
stream_localhost-允许通过网络访问
宽度640-视频宽度,调整您的网络摄像头
高度320-视频高度,调整您的网络摄像头
stream_port 8081 —关闭将视频输出到的端口
output_picture —不保存任何图像
这是一个很大的文件,因此您可能要使用 ctrl + w 搜索行。完成后,按 ctrl + x ,然后确认保存并退出。
现在再编辑一个文件:
sudo nano /etc/default/motion
设置“ start_motion_daemon =是”。这是确保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地址。冒号后跟数字是之前设置的端口。一切顺利,您应该可以从网络摄像头中看到信息流!尝试四处移动,看看情况如何。您可能需要在配置文件中调整亮度和对比度设置。您可能需要对网络摄像头进行对焦-某些型号的镜头周围有一个小的对焦环。将其旋转直到图像最清晰。
回到树莓派,创建一个文件夹并导航到其中:
mkdir security-cam
cd security-cam/
现在安装twisted:
sudo apt-get install python-twisted
twisted是用python编写的web服务器,它将侦听命令,然后采取相应的措施。
安装后,创建python脚本来执行命令(移动伺服器。)
sudo nano servos.rpy
注意文件扩展名是“ .rpy”而不是“ py”。这是代码:
# import necessary files
import serial
from twisted.web.resource import resource
# setup arduino at correct speed
try:
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
这是网页代码:
left
right
up
down
更改“ pi_ip_address”(已使用两次) )到您pi的真实ip地址(如果您正在运行最新的raspian,则 raspberrypi.local 也应该可以使用)。重新启动网络服务器,然后从计算机导航至pi,无需指定端口。您应该可以左右左右平移,并观看视频流:
在那里。您自己的云台网络摄像机。如果要将网络摄像头暴露在互联网上,请记住要考虑的危险–然后研究端口转发,以便路由器知道将传入请求发送到哪里。您可以为真正的便携式设备添加外部电源和wi-fi适配器。


Uber支付和解金1.48亿了结数据泄露事件 还投入1000万推充电桩
借助5G,我们看到了XR的需求
DxOMark手机拍照前十排行榜:华为P20 Pro荣获宝座,三星、谷歌紧追其后
ROHM开发出内置步行检测及计步功能的加速度传感器“KX126” 有助于智能手机和可穿戴式设备等的小型化与低功
苹果概念手机——折叠机新概念设计巅峰!
如何使用树莓派制作可远程观看的摇摄和倾斜安全摄像机
荣耀9什么时候上市最新消息:工信部立功了!华为荣耀9真机曝光!对标小米6,绝对有现货!
华润与腾讯联手,三菱电机搭载AI,京东与重庆市携手建立四中心
触摸屏接口容易遇到的干扰问题
digilent蓝牙通信模块介绍
如何对脱硫管道进行防腐保护
(win)C、C++处理文件名称
当使用传统计算架构时功耗仍是一个巨大挑战
物联网行业智能解决方案推荐
PCB设计中会遇到的八种阻抗计算模型盘点
小米5X发布会在即:雷总亲自曝光小米5X真机,你家凡凡已经上线,拍照样张、配置、价格一览
小米手机销量暴涨38%登顶国产第一
利用单片机实现嵌入式摄像机二进制命令配置系统的设计
小米积极拥抱人工智能:人工智能成核心战略
人工智能三起三落,60年登上围棋之巅