0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于Arduino的實時人臉檢測和跟蹤機器人

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2023-01-25 15:54 ? 次閱讀

曾經(jīng)想過通過簡單地使用 Arduino 而不是任何其他編程(如 OpenCV、視覺基礎 C# 等)來構(gòu)建面部跟蹤機械臂或機器人嗎?然后繼續(xù)閱讀,在這個項目中,我們將通過融合Arduino和Android的強大功能來實現(xiàn)人臉檢測。在這個項目中,移動相機將在伺服系統(tǒng)的幫助下隨著你的臉一起移動。在這里使用Android手機的優(yōu)勢在于,您無需投資攝像頭模塊,整個圖像檢測工作可以在手機本身中完成,您不需要將Arduino連接到計算機即可正常工作。在這里,我們使用藍牙模塊與Arduino進行無線通信。

本項目中使用的Android應用程序是使用處理Android創(chuàng)建的,您可以通過下載APK文件直接安裝該應用程序(進一步閱讀鏈接),或者戴上編程帽,使用教程中進一步給出的處理代碼制作自己的更具吸引力的Android應用程序。

在本教程結(jié)束時,您將擁有一個迷你傾斜和跨度機械臂,可以跟蹤您的臉部并隨之移動。您可以使用它(進一步發(fā)展)來錄制您的視頻博客視頻,甚至可以使用手機的后置攝像頭自拍,因為它將您的臉正好定位在手機屏幕的中心。所以!!聽起來很有趣?檢查本教程末尾的演示視頻以查看其工作情況。讓我們看看如何構(gòu)建一個...

我已經(jīng)盡力使這個項目盡可能簡單,任何對硬件或編碼有最少知識的人都可以使用此指南使這個項目立即工作。但是,一旦你做到了,我建議你落后于代碼,這樣你就可以真正知道是什么讓這個東西工作以及如何工作。

面部跟蹤機器人與Arduino和Android藍牙

所需材料:

  1. Arduino Nano
  2. 伺服電機 SG90 – 2Nos
  3. 安卓手機與體面的相機
  4. HC-05/HC-06 藍牙模塊
  5. 編程計算機
  6. 3D打印機(可選)
  7. 9V電池

3D 打印所需部件(可選):

為了平移和傾斜我們的手機,我們需要一些機械結(jié)構(gòu),如移動支架和一些伺服支架。你可以用紙板做一個,因為我有一臺3D打印機,我決定3D打印這些零件。

3D打印是一個了不起的工具,在構(gòu)建原型項目或試驗新的機械設計時可以做出很多貢獻。如果您還沒有發(fā)現(xiàn)3D打印機的好處或它是如何工作的,你可以閱讀3D打印初學者指南。

如果您擁有或可以使用3D打印機,則可以使用可以從此處下載的STL文件直接打印和組裝它們。但是,像手機支架這樣的一些部件可能需要根據(jù)手機的尺寸進行一些修改。我為我的MOTO G手機設計了它。我使用我的一臺非?;镜拇蛴C來打印所有零件。打印機是來自3ding的FABX v1,價格實惠,打印量為10立方厘米。便宜的價格伴隨著低打印分辨率和沒有SD卡或打印恢復功能的權衡。我正在使用名為Cura的軟件來打印STL文件。下面給出了我用于打印材料的設置,您可以使用相同的設置或根據(jù)您的打印機更改它們。

用于打印Arduino面部跟蹤機器人零件的3D打印機設置

打印所有必需的材料后,您可以使用螺釘和一些熱膠將它們固定到位。組裝完成后,它應該如下所示。

Arduino面部跟蹤機器人的3D打印零件Arduino面部跟蹤機器人的3D打印零件

Arduino面部跟蹤機器人的3D打印零件Arduino面部跟蹤機器人的3D打印部件

原理圖和硬件:

智能手機面部跟蹤項目的電路如下圖所示:

具有Arduino和Android電路圖的面部跟蹤機器人

該電路由兩個伺服電機組成,其中一個用于向左/向右移動手機,另一個用于向上/向下傾斜手機。伺服器必須移動的方向?qū)⒂葾rduino Nano指示,Arduino Nano本身從藍牙(HC-05)模塊獲取信息。整個電路由9V電池供電。

該電路可以很容易地連接到您的面包板上,或者您也可以像我在這里所做的那樣將它們焊接在小型 Perf 板上。

設置您的安卓應用程序:

正如我之前所說,這個項目背后的主要大腦是這個Android應用程序。這個安卓應用程序是使用處理安卓開發(fā)的。您可以直接在手機上安裝此應用程序,然后按照以下步驟啟動它。

  1. 從這里下載APK文件
  2. 打開上面顯示的電路的電源。
  3. 在手機設置中搜索名為“HC-05”的藍牙模塊
  4. 如果您將其命名為“HC-05”以外的其他名稱,請將其更改回HC-05,因為只有這樣應用程序才能工作。
  5. 使用密碼“1234”或“0000”與您的藍牙模塊配對。
  6. 現(xiàn)在,以縱向模式啟動應用程序。您應該會看到相機屏幕,并在屏幕頂部看到“連接到:HC-05”。
  7. 嘗試將相機移到臉部上方,其頂部應會出現(xiàn)一個綠色框,其位置也將顯示在屏幕的左上角,如下所示。

使用帶有藍牙的Arduino和Android手機跟蹤圖片

您可以通過引入許多不需要編寫自己的Android應用程序即可獲得的進步,從而將這個Arduino面部跟蹤項目提升到一個新的水平。創(chuàng)建一個Android應用程序可能聽起來很困難,但相信我,在Processing的幫助下,您可以立即學習它。

對 Arduino 進行編程:

安卓應用程序?qū)z測人臉及其在屏幕上的位置;然后,它將根據(jù)面部的位置決定應該移動的方向,以便面部到達屏幕中心。然后通過藍牙模塊將此方向發(fā)送到Arduino。

該項目的Arduino程序相當簡單,我們只需要根據(jù)從藍牙模塊接收的值控制兩個伺服電機的方向。完整的代碼可以在本教程的末尾找到,我還在下面解釋了幾個重要的行。

下面的代碼行建立串行連接,引腳 D12 作為 RX,D11 作為 TX。因此,引腳 D12 必須連接到 BT 模塊的 TX,引腳 D11 必須連接到 BT 模塊的 RX。

SoftwareSerial cam_BT(12, 11);  // RX, TX

然后我們以 9600 的波特率初始化藍牙模塊.確保您的模塊也以相同的波特率工作。否則相應地更改它。

cam_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate
cam_BT.println("Ready to take commands");

下面一行讀取通過藍牙模塊傳入的內(nèi)容.此外,數(shù)據(jù)保存在變量“藍牙數(shù)據(jù)”中。

if (cam_BT.available()) //Read whats coming in through Bluetooth
   {
BluetoothData=cam_BT.read();
Serial.print("Incoming from BT:");
Serial.println(BluetoothData);
}

根據(jù)從藍牙接收的數(shù)據(jù),控制電機方向。要向左轉(zhuǎn)動電機,電機會從其先前的位置遞減 2 的值。如果您需要手臂移動得更快,您可以將此值增加到 4 或 6。但是,它可能會產(chǎn)生一些顛簸,使相機不穩(wěn)定。

if (BluetoothData==49) //Turn Left
{pos1+=2; servo1.write(pos1);}

if (BluetoothData==50) //Turn Right
{pos1-=2; servo1.write(pos1);}

if (BluetoothData==51) //Turn Up
{pos2-=2; servo2.write(pos2);}

if (BluetoothData==52) //Turn Down
{pos2+=2; servo2.write(pos2);}

加工:

一旦我們準備好了我們的硬件,代碼和Android應用程序,就該采取一些行動了。只需為您的 Arduino 供電并打開安卓應用程序。應用程序?qū)⒆詣舆B接到 HC-05 (必須命名為 HC-05) 藍牙模塊,并等待檢測到人臉.只需將手機放在我們的手機支架中并坐在它前面即可。您應該注意到伺服電機移動手機,以便將臉部放置在屏幕中央。現(xiàn)在在相機的范圍內(nèi)四處走動,您的手機將跟隨您的動作。您也可以通過放置和移動任何圖片來嘗試。

面部跟蹤機器人與Arduino和處理Android

/*Arduino Code for Face Tracking Arduino

 * Coded by Circuitdigest.com

 * On 25-05-2017

 */


 /*CONNECTION DETIALS

  * Arduino D11 -> RX of BT Module

  * Arduino D12 -> Tx of BT

  * Servo1 -> pin 3 of arduino Nano to pan

  * Servo2 -> pin 5 of arduino Nano to tilt

  */


#include  //header to drive servo motors

#include // import the serial library

SoftwareSerial cam_BT(12, 11);  // RX, TX

int ledpin=13; // led on D13 will show blink on / off

int BluetoothData; // the data given from Computer


//lets declare the servo objects

Servo servo1;  

Servo servo2;


long gmotor,gnum1,gnum2;

int pos;

int flag=0; 

int pos1 = 40;

int pos2 = 90;


void setup() {

   servo1.attach(3);

   servo2.attach(5);;


   //**Initial position of all four servo motors**//

   servo1.write(pos1);

   servo2.write(pos2);

   //**initialised**//

   

cam_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate

cam_BT.println("Ready to take commands");


Serial.begin(57600); 

Serial.println("Face tracking programming by CircuitDigest.com");

}


//***Function for each Servo actions**//

void call(int motor, int num1, int num2) // The values like Motor number , from angle and to angle are received 

{

Serial.println("Passing values...");

flag =0;

switch (motor) 

  {  

    case 1:            // For motor one

    { 

    Serial.println("Executing motor one");

    if(num1// Clock wise rotation

    { 

        for ( pos =num1; pos<=num2; pos+=1)

            {

            servo1.write(pos);

            delay( 20);

            }

    }

    

    if(num1>num2) // Anti-Clock wise rotation

    {

        for ( pos =num1; pos>=num2; pos-=1)

        {

        servo1.write(pos);

        delay( 20);

        }

    }

     break;

    }     


       ////////JUST  DUPLICATE FOR OTHER SERVOS////


       

    case 2:    // For motor 2

    {

    Serial.println("Executing motor two");

    if(num1for ( pos =num1; pos<=num2; pos+=1)

        {

        servo2.write(pos);

        delay( 20);

        }

    }

    if(num1>num2)

    {

        for ( pos =num1; pos>=num2; pos-=1)

        {

        servo2.write(pos);

        delay( 20);

        }

    }

    break;

    }     

  }

}


void loop() {

 if(Serial.available()>0) //Read whats coming in through Serial

  {

  gmotor= Serial.parseInt(); 

  Serial.print(" selected Number-> ");  

  Serial.print(gmotor);

  Serial.print(" , ");    

  gnum1= Serial.parseInt();   

  Serial.print(gnum1);  

  Serial.print(" degree , ");

  gnum2= Serial.parseInt();   

  Serial.print(gnum2);  

  Serial.println(" degree ");

  flag=1;

  }

   

 if (cam_BT.available()) //Read whats coming in through Bluetooth

 {

  BluetoothData=cam_BT.read();

  Serial.print("Incoming from BT:");

  Serial.println(BluetoothData);

 }


 if (flag ==1)

 call(gmotor,gnum1,gnum2); //call the respective motor for action


 if (BluetoothData==49) //Turn Left

 {pos1+=2; servo1.write(pos1);}


 if (BluetoothData==50) //Turn Right

 {pos1-=2; servo1.write(pos1);}


 if (BluetoothData==51) //Turn Up

 {pos2-=2; servo2.write(pos2);}


 if (BluetoothData==52) //Turn Down

 {pos2+=2; servo2.write(pos2);}


 flag=0;

 BluetoothData=0;

}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    210

    文章

    28103

    瀏覽量

    205843
  • 人臉檢測
    +關注

    關注

    0

    文章

    80

    瀏覽量

    16436
  • Arduino
    +關注

    關注

    187

    文章

    6457

    瀏覽量

    186501
收藏 人收藏

    評論

    相關推薦

    【mBot申請】基于Nao機器人的視覺跟蹤處理

    申請理由:采用此小型機器人進行一個目標模擬項目描述:1、目標機器人的擬定2、Nao機器人目標取樣,并訓練3、進行實時跟蹤
    發(fā)表于 10-29 14:14

    自律型機器人制作入門.基于Arduino

    [size=0.83em]自律型機器人制作入門.基于Arduino.jpg(101.91 KB, 下載次數(shù): 0)下載附件[color=rgb(153, 153, 153) !important
    發(fā)表于 06-23 11:18

    舊手機 Arduino的巔峰之作—視頻監(jiān)控機器人 ,異地遠程遙控

    手機計算能力,基于OpenCV軟件庫,實現(xiàn)手勢分析和人臉追蹤。原材料和組件方形卡通寵物外觀的紙巾盒 1個萬能手機夾 1個網(wǎng)靈機器人3D打印件 1套Arduino控制板 + 藍牙小板1塊L298N電機
    發(fā)表于 09-27 14:01

    Arduino機器人制作指南

    Arduino機器人制作指南
    發(fā)表于 06-14 17:40

    焊縫跟蹤:自動化機器人實時焊縫跟蹤尋位

    焊縫跟蹤:自動化機器人實時焊縫跟蹤尋位自動化機器人焊接過程中會出現(xiàn)工件夾偏、鈑金件熱變形、機器人
    發(fā)表于 04-19 10:48

    焊縫跟蹤機器人焊縫跟蹤系統(tǒng)的優(yōu)勢分析

    `焊縫跟蹤機器人焊縫跟蹤系統(tǒng)的優(yōu)勢分析目前我們的焊縫跟蹤系統(tǒng)已于國內(nèi)外40多種主流機器人品牌成功完成通訊,如下:國產(chǎn)品牌:卡諾普,配天,金
    發(fā)表于 04-29 12:02

    焊縫跟蹤:焊接機器人配焊縫跟蹤傳感器是科技發(fā)展的必然趨勢

    。焊縫跟蹤系統(tǒng)優(yōu)勢抗弧光和飛濺,實時跟蹤,焊縫寬度自動適應非接觸,支持多種焊接類型提高生產(chǎn)效率和焊接質(zhì)量,提高生產(chǎn)率確保焊縫成型美觀牢固;可使焊槍處于理想位置;可實現(xiàn)一致的和可復現(xiàn)的焊接效果;對于復雜的焊件,可減少編程工作。具有
    發(fā)表于 08-01 13:47

    在黑暗里機器人怎么識別人臉?

    在當今的機器人領域,基于視覺的人臉面部識別和檢測發(fā)展得非常之快,并且已經(jīng)運用于很多領域。
    發(fā)表于 09-17 09:11

    家庭智能小管家機器人資料分享!

    戶提供家里情況,比如室內(nèi)溫度、煤氣檢測實時上傳到互聯(lián)網(wǎng)。使用云服務器,大數(shù)據(jù)等。用戶可以通過網(wǎng)頁,或者微信對機器人進行一個部署。并且會報警處理一些事情,例如降溫功能,人臉
    發(fā)表于 10-09 20:32

    使用旅游機器人需要注意哪些問題?

    、講解互動功能  新型的旅游機器人,可以在公共場與游客互動交流,與人進行實時語音對話,通過語音識別、屏交互等方式,為人提供智能化、人性化的咨詢、指導、產(chǎn)品宣傳、迎賓接待等服務?! ?、看路徑導航
    發(fā)表于 06-12 17:04

    微信控制的家庭智能機器人(附語音聊天、人臉檢測、自主巡航等)

    機器人作為家庭里的小管家,當室內(nèi)沒人的時候,機器人在室內(nèi)自主巡航進行環(huán)境檢測、安全報警等并隨時向用戶提供家里情況,比如室內(nèi)溫度、煤氣檢測實時
    發(fā)表于 09-30 14:33

    淺談差速機器人的純軌跡跟蹤仿真

    差速機器人的純軌跡跟蹤仿真(Matlab)剛?cè)腴T,有的地方不對,煩請大家指正。目錄差速機器人的純軌跡跟蹤仿真(Matlab)1 差速機器人
    發(fā)表于 09-01 08:11

    構(gòu)建ARLOK arduino機器人的教程

    描述ARLOK arduino機器人PCB+展示代碼https://github.com/Settorezero/Arlok
    發(fā)表于 08-08 07:14

    Arduino教學機器人的使用教程

    本文檔的主要內(nèi)容詳細介紹的是Arduino教學機器人的使用教程
    發(fā)表于 09-27 06:53

    實時車輛檢測跟蹤系統(tǒng)設計

    實時車輛檢測跟蹤是室外移動機器人尤其是智能汽車研究領域的一個重要課題。本文介紹了多功能室外移動機器人THMR-V 的
    發(fā)表于 03-03 14:50 ?20次下載