是否曾经想过仅通过使用Arduino而不是像OpenCV,Visual Basics C#等任何其他程序来构建面部跟踪机器人手臂或机器人?然后继续阅读,在这个项目中,我们将通过混合Arduino和Android的功能来实现人脸检测。在此项目中,移动摄像头将在舵机的帮助下与您的面部一起移动。在这里使用Android移动电话的优势在于,您无需投资摄像头模块,整个图像检测工作可以在电话本身中完成,不需要将Arduino连接到计算机即可工作。在这里,我们使用了带Arduino的蓝牙模块来与Mobile无线通讯。
本项目中使用的Android应用程序是使用Processing Android创建的,您可以通过下载APK文件直接安装该应用程序(进一步阅读以获取链接),也可以设置程序帽,并使用给定的Processing Code制作自己更具吸引力的Android应用程序进一步在教程中。通过检查我们以前的处理项目,了解有关处理的更多信息。
在本教程结束时,您将拥有一个迷你倾斜和跨度机械臂,可以跟踪您的脸并随之移动。您可以使用此功能(进一步改进)来录制视频博客视频,甚至可以使用手机的后置摄像头自拍照,因为它可以将您的脸部恰好定位在手机屏幕的中央。所以!!听起来不错?在本教程的最后查看演示视频,以查看其工作原理。让我们看看如何建立一个…
我已尽力使该项目尽可能简单,任何对硬件或编码方面了解最少的人都可以使用此准则立即使该项目工作。但是,一旦您做到了,我建议您落后于代码,这样您就可以真正知道是什么使它起作用以及如何起作用。
所需材料:
- Arduino纳米
- SG90伺服电机– 2个
- 配备体面摄像头的Android手机
- HC-05 / HC-06蓝牙模块
- 编程计算机
- 3D打印机(可选)
- 9V电池
3D打印所需零件(可选):
为了平移和倾斜我们的手机,我们需要一些机械结构,例如手机支架和一些伺服支架。您可以用硬纸板制作一个,因为我有一台3D打印机,所以我决定对这些零件进行3D打印。
3D打印是一个了不起的工具,在构建原型项目或尝试新的机械设计时可以做出很多贡献。如果您尚未发现3D打印机的优点或工作原理,则可以阅读3D打印入门指南。
如果您拥有或有权使用3D打印机,则可以使用可从此处下载的STL文件直接进行打印和组装。但是,像手机支架这样的零件很少,可能需要根据手机的尺寸进行一些修改。我已经为我的MOTO G手机设计了它。我使用了我的一个非常基本的打印机来打印所有零件。该打印机是3ding的FABX v1,价格合理,打印量为10立方厘米。便宜的价格需要低打印分辨率,没有SD卡或打印恢复功能的折衷方案。我正在使用名为Cura的软件来打印STL文件。下面提供了我用于打印材料的设置,您可以使用相同的设置,也可以根据打印机进行更改。
一旦打印了所有必需的材料,就可以使用螺钉和一些热胶将它们固定在适当的位置。组装完成后,其外观应如下所示。
原理图和硬件:
下图显示了智能手机上人脸跟踪的电路:
该电路由两台伺服电机组成,其中一台用于左右移动手机,另一台用于向上/向下倾斜手机。伺服器必须移动的方向将由Arduino Nano指示,后者本身从蓝牙(HC-05)模块获取信息。整个电路由9V电池供电。
这个电路可以很容易地连接到面包板上,也可以像我在这里一样将它们焊接在一块小的Perf板上。
设置您的Android应用程序:
就像我之前说的,这个项目的主要大脑是这个Android应用程序。这个Android应用程式是使用Processing Android开发的。您可以直接在手机上安装此应用程序,然后按照以下步骤启动它。
- 从此处下载APK文件。
- 接通上面所示电路的电源。
- 在手机设置中搜索名为“ HC-05”的蓝牙模块
- 如果您将其命名为“ HC-05”以外的其他名称,则将其更改回HC-05,因为只有这样,该应用程序才能运行。
- 与您的蓝牙模块配对,密码为“ 1234”或“ 0000”。
- 现在,以纵向模式启动该应用程序。您应该会看到相机屏幕以及屏幕顶部的“ Connected to:HC-05”。
- 尝试将相机移到面部上方,绿色框应出现在其顶部,并且其位置也将显示在屏幕的左上角,如下所示。
您可以通过引入许多无需编写自己的Android应用程序的改进功能,将Arduino Face Tracking Project提升到一个新的水平。创建一个Android应用程序听起来可能很困难,但是请借助Processing的帮助相信我,您可以立即学习它。可以在此处下载用于构建此应用程序的完整处理代码。您可以自由发挥自己的创造力。查看以下项目以了解有关处理的更多信息:
- 使用Arduino和处理的虚拟现实
- 使用Arduino的Ping Pong游戏
- 使用处理的智能手机控制的FM广播。
- 使用处理和超声波传感器的Arduino雷达系统
编程Arduino:
Android应用程序将检测人脸及其在屏幕上的位置;然后,它将根据脸部的位置来决定应朝哪个方向移动,以使脸部到达屏幕的中心。然后,该方向通过蓝牙模块发送到Arduino。
这个项目的Arduino程序非常简单,我们只需要根据从蓝牙模块接收到的值来控制两个伺服电机的方向即可。将完整的代码可以在本教程的结尾部分,我也解释如下几个重要线路。
下面的代码行建立了一个串行连接,其中D12引脚为RX,D11引脚为TX。因此,引脚D12必须连接到BT模块的TX,引脚D11必须连接到BT模块的RX。
SoftwareSerial cam_BT(12,11); // RX,TX
然后,我们以9600的波特率初始化了蓝牙模块。确保您的模块也以相同的波特率工作。否则相应地更改它。
cam_BT.begin(9600); //以9600波特率cam_BT.println(“准备接受命令”)开始蓝牙通信。
下面的行显示了通过蓝牙模块传入的信息。数据也保存在变量“ BluetoothData”中。
if(cam_BT.available())//读取通过蓝牙传入的内容{BluetoothData = cam_BT.read(); Serial.print(“来自BT的传入:”); Serial.println(BluetoothData); }
根据从蓝牙接收的数据,控制电机方向。要使电动机左转,电动机会从其先前位置减2。如果需要手臂更快地移动,可以将此值增加2到4或6。但是,这可能会造成一些抖动,使相机不稳定。
if(BluetoothData == 49)//向左转{pos1 + = 2; Serve1.write(pos1);} if(BluetoothData == 50)//向右转{pos1- = 2; Serve1.write(pos1);} if(BluetoothData == 51)//调高{pos2- = 2; Serve2.write(pos2);} if(BluetoothData == 52)//关闭{pos2 + = 2; Servo2.write(pos2);}
加工:
一旦我们准备好硬件,代码和Android应用程序,就可以采取行动了。只需为您的Arduino供电并打开android应用程序即可。该应用程序将自动连接到HC-05(必须命名为HC-05)蓝牙模块,并等待检测到人脸。只需将手机放在我们的手机支架中并坐在它的前面即可。您应该注意到伺服电机正在移动手机,以便将您的脸放在屏幕中央。现在,在相机范围内移动,您的手机将跟随您的移动。您也可以通过放置和移动任何图片来尝试。
以下视频显示了该项目的完整工作。你可以建立很多