使用Arduino的手勢控制機器人
機器人被用于許多領(lǐng)域,如建筑、軍事、制造、裝配等。機器人可以是自主的或半自主的。自主機器人不需要任何人為干預(yù),可以根據(jù)情況自行采取行動。半自動機器人根據(jù)人類的指令工作。這些半自動機器人可以通過遙控器、手機、手勢等進行控制。我們以前構(gòu)建了一些基于物聯(lián)網(wǎng)的機器人,可以從web服務(wù)器控制。
在今天的文章中,我們將使用Arduino, MPU6050加速度計,nRF24L01收發(fā)器對和L293D電機驅(qū)動模塊構(gòu)建一個手勢控制機器人。我們將把這個機器人設(shè)計成兩部分。一個是發(fā)送者,另一個是接收者。發(fā)送部分由Arduino Uno, MPU6050加速度計和陀螺儀以及nRF24L01組成,而接收部分由Arduino Uno, nRF24L01,兩個直流電機和L293D電機驅(qū)動器組成。發(fā)射器將作為遙控器來控制機器人,機器人將根據(jù)手勢移動。
組件的要求
?Arduino Uno (2)
?NRF24L01 (2)
?MPU6050
?直流電機(2)
?L293D電機驅(qū)動模塊
?電池
加速度計和陀螺儀
MPU6050傳感器模塊是一個完整的6軸(3軸加速度計和3軸陀螺儀)微機電系統(tǒng)。MPU6050傳感器模塊還具有片上溫度傳感器。它具有I2C總線和輔助I2C總線接口,可與微控制器和其他傳感器設(shè)備(如3軸磁強計,壓力傳感器等)進行通信。
MPU6050傳感器模塊用于測量加速度、速度、方向、位移和其他與運動有關(guān)的參數(shù)。這個傳感器模塊也有一個內(nèi)置的數(shù)字運動處理器,可以執(zhí)行復(fù)雜的計算。
NRF24L01收發(fā)模塊
nRF24L01是一款單芯片無線電收發(fā)器,適用于全球2.4 - 2.5 GHz ISM頻段。收發(fā)器由一個完全集成的頻率合成器、一個功率放大器、一個晶體振蕩器、一個解調(diào)器、調(diào)制器和增強型ShockBurs協(xié)議引擎組成。輸出功率、頻率通道和協(xié)議設(shè)置可以通過SPI接口輕松編程。
收發(fā)模塊的工作電壓范圍為1.9V ~ 3.6V。它有內(nèi)置的關(guān)機和待機模式,使其省電和容易實現(xiàn)。
基于Arduino的手勢控制機器人工作原理
為了了解這個Arduino手勢控制小車的工作原理,我們將這個項目分為兩部分。第一部分是發(fā)射器部分(遠程),其中MPU6050加速度計傳感器通過Arduino和nRF發(fā)射器不斷向接收器(機器人)發(fā)送信號。
第二部分是Receiver部分(Robot car), nRF接收器接收傳輸?shù)臄?shù)據(jù)并將其發(fā)送給Arduino,由Arduino進一步處理并據(jù)此移動機器人。
MPU6050加速度計傳感器讀取X Y Z坐標(biāo)并將坐標(biāo)發(fā)送給Arduino。對于這個項目,我們只需要X和Y坐標(biāo)。然后Arduino檢查坐標(biāo)值并將數(shù)據(jù)發(fā)送到nRF發(fā)射器。發(fā)送的數(shù)據(jù)由nRF接收器接收。接收器將數(shù)據(jù)發(fā)送到接收端的Arduino。Arduino將數(shù)據(jù)傳遞給電機驅(qū)動IC,電機驅(qū)動將電機轉(zhuǎn)向所需的方向。
線路圖
這個使用Arduino硬件的手勢控制機器人分為兩個部分
1. 發(fā)射機
2. 接收機
Arduino手勢控制汽車的發(fā)送電路
本課題的發(fā)送部分由MPU6050加速度計和陀螺儀、nRF24L01Transceiver和Arduino Uno組成。Arduino不斷地從MPU6050獲取數(shù)據(jù),并將這些數(shù)據(jù)發(fā)送到nRF發(fā)射器。射頻發(fā)射器將數(shù)據(jù)傳輸?shù)江h(huán)境中。
發(fā)射機部分的電路圖如下所示。
Arduino手勢控制汽車接收器電路
該手勢控制機器人的接收部分由Arduino Uno、nRF24L01收發(fā)器、2臺直流電機和電機驅(qū)動模塊組成。NRF24L01接收器接收來自發(fā)射器的數(shù)據(jù)并將其發(fā)送給Arduino。然后根據(jù)接收到的信號,Arduino移動直流電機。接收器部分的電路圖如下所示。
程序解釋
這個使用Arduino的手勢控制機器人的完整代碼在文檔的末尾給出。這里我們逐行解釋這個程序。
發(fā)射機端程序
在本程序中,Arduino從MPU6050讀取數(shù)據(jù)并將其發(fā)送到nRF 24L01發(fā)射器。
通過添加所需的庫文件開始程序。您可以從給定的鏈接下載庫文件。
SPI.h
nRF24L01.h
Wire.h
MPU6050.h
然后定義MPU6050陀螺儀和加速度計數(shù)據(jù)的變量。這里只使用加速度計數(shù)據(jù)。
為通信和nRF發(fā)射機CN和CSN引腳定義無線電管道地址。
在void setup()函數(shù)中,啟動串行監(jiān)視器。同時初始化有線和無線電通信。收音機。setDataRate用于設(shè)置數(shù)據(jù)傳輸速率。
讀取MPU6050傳感器數(shù)據(jù)。這里我們只使用X和Y方向加速度計數(shù)據(jù)。
最后,利用無線電傳輸傳感器數(shù)據(jù)。寫函數(shù)。
接收端程序
像往常一樣,通過包含所需的庫文件來啟動程序。
為通信和nRF發(fā)射機CN和CSN引腳定義無線電管道地址。
定義左、右直流電機引腳。
現(xiàn)在檢查一下收音機是否可用。如果是,則讀取數(shù)據(jù)。
現(xiàn)在比較接收到的數(shù)據(jù),并根據(jù)情況驅(qū)動電機。
用Arduino測試手勢控制機器人
一旦硬件準(zhǔn)備好,將發(fā)送端和接收端Arduinos連接到筆記本電腦并上傳代碼。然后移動MPU6050加速度計來控制機器人小車。
本文編譯自iotdesignpro