电子说
您需要的东西
带有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适配器。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !