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