RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

如何利用ADXL335實(shí)現(xiàn)手勢控制機(jī)器人的設(shè)計(jì)

科技觀察員 ? 來源:hackster.io ? 作者:hackster.io ? 2022-05-07 17:33 ? 次閱讀

該無線控制的機(jī)器人汽車使用手勢:手的傾斜/方向來向前、向后、向左或向右行駛。

說到機(jī)器人,手勢控制機(jī)器人是業(yè)余愛好者和學(xué)生在物理和實(shí)際項(xiàng)目中理解和實(shí)施微控制器知識的最常見的項(xiàng)目類型之一。其背后的概念很簡單:手掌的方向控制機(jī)器人汽車的運(yùn)動(dòng)。但如果你要問它是怎么做到的?那就得讓我們仔細(xì)分解一下。

為了更好地理解,我們將通過了解每個(gè)組件的角色和功能,然后將它們組合起來以實(shí)現(xiàn)所需的性能。

1. ADXL335(加速度計(jì))

加速度計(jì)的功能很簡單:感知手腕的方向。加速度計(jì)測量加速度,包括重力加速度“g”。因此,我們可以使用加速度計(jì)通過測量 ADXL335 任何特定軸上的“g”分量來感知手腕的方向,如下圖所示:

pYYBAGJ2PMCAT4zaAAQPc98DUbE171.png

由于手的傾斜,X 和/或 Y 軸的角度隨垂直方向發(fā)生變化,因此“g”加速度的分量也作用在它們上,這可以被測量并因此指示手的方向。

ADXL335 可以測量高達(dá) 3g 的加速度,并通過將其軸引腳連接到 Arduino模擬引腳來與 Arduino 接口。加速度計(jì)輸出與加速度成比例的電壓值。

在這個(gè)項(xiàng)目中,加速度計(jì)連接到 Arduino Nano 并附在手掌上。ADXL335 輸出電壓范圍為 0 到 Vcc(施加電壓通常為 3.3V),并由 Arduino 的模擬引腳讀取。因此對于用戶來說,我們得到一個(gè)范圍從 0 到 1024(10 位 ADC)的值。不同的方向?yàn)槊總€(gè)軸產(chǎn)生不同的模擬值,然后映射到不同的機(jī)器人運(yùn)動(dòng)。

加速度計(jì)的電路圖是:

pYYBAGJ2PLyAGexOAAJsTRCEnwM667.png

了解 ADXL335 工作的測試代碼如下:

pYYBAGJ2PLiAG9ByAADNNyHx_4k112.png

你可以運(yùn)行這個(gè)程序來查看你的手掌和手腕向前、向后、向左和向右傾斜的值,這些值最終將用于控制機(jī)器人。

2. RF-433 發(fā)射器和接收器

RF模塊的功能很簡單:將手腕Arduino Nano的命令數(shù)據(jù)傳輸?shù)娇刂艫rduino Uno的電機(jī)。RF 模塊使用 433hz 頻率的無線電波,因此命名為 RF-433。它們使用幅度調(diào)制來發(fā)送數(shù)據(jù),但不會(huì)涉及太多技術(shù)細(xì)節(jié)并保持簡單,它們將用于向機(jī)器人傳輸命令,即:向前、向后、向右或向左移動(dòng)。在沒有數(shù)據(jù)的情況下,靜止不動(dòng)。它們的工作范圍可達(dá) 10 米。

現(xiàn)在要了解如何在我們的項(xiàng)目中實(shí)現(xiàn)射頻模塊,讓我們依次處理發(fā)射器和接收器電路。

發(fā)射器電路

發(fā)射器電路由兩部分組成:發(fā)射器RF和編碼器HT12E。發(fā)射器由一個(gè)數(shù)據(jù)引腳、一個(gè)天線、一個(gè)接地和電源組成。向發(fā)送器提供數(shù)據(jù)是HT12E編碼器的工作。編碼器由 4 個(gè)可以發(fā)送數(shù)據(jù)的數(shù)據(jù)引腳組成。我們將使用這 4 個(gè)數(shù)據(jù)引腳來表示四種運(yùn)動(dòng),這些引腳上的高電平將分別表示四種運(yùn)動(dòng)之一,所有引腳上的低電平表示靜止。

電路圖如圖所示:

pYYBAGJ2PLSAeJi0AAJoBVpwHAg607.png

左側(cè)引腳(A0-A7)是地址引腳,定義了將交換數(shù)據(jù)的對(具有相同地址的發(fā)送器和接收器將僅共享數(shù)據(jù))。我們將 A0-A7 設(shè)置為 LOW(接地)。

數(shù)據(jù)輸入引腳連接到 Arduino 數(shù)字引腳(在本項(xiàng)目中為 6 到 9),它們將輸出命令數(shù)據(jù)為:

數(shù)字引腳命令(高電平時(shí))

9 前鋒

10 反向

11 左

12 右

我們將根據(jù) ADXL335 的輸入將數(shù)字引腳寫入高電平以執(zhí)行所需的運(yùn)動(dòng)。

接收電路

接收器電路與所示的發(fā)射器電路完全相似,但數(shù)據(jù)引腳不是作為 Arduino 的輸出,在這種情況下,它們將被讀取為輸入,以接收 Arduino Uno 的命令并根據(jù)需要運(yùn)行電機(jī):

pYYBAGJ2PK-ADbS8AAIj-Kuz-_8557.png

為簡化起見,您可以在引腳 17 處將 LED 與 1K 電阻串聯(lián),而不是如圖所示的復(fù)雜電路,以指示與發(fā)射器的正確連接。

3.電機(jī)護(hù)罩

由于 Adafruit 庫 AFMotor 的可用性,電機(jī)護(hù)罩是最容易處理的部分,鏈接:- https://github.com/adafruit/Adafruit-Motor-Shield-library

下載并復(fù)制 Arduino 庫文件夾中的庫,以便能夠?qū)⑵浒诔绦虿輬D中。

AFMotor 庫的示例如下所示:

#include
AF_DCMotor motor(4);
//Attach motor wires to point Motor 4 on shield
void setup()
{
Serial.begin(9600);
// set up Serial library at 9600 bps
Serial.println("Motor test!");
// turn on motor
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop()
{
uint8_t i;
Serial.print("tick");
motor.run(FORWARD);
for (i=0; i<255; i++)?
{
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
Serial.print("tock");
motor.run(BACKWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tech");
motor.run(RELEASE);
delay(1000);

4.結(jié)合所有部分

最后也是最后一部分包括將上述所有部分組合在一起,形成一個(gè)完整的機(jī)器人,遵循手的命令!

由于電機(jī)屏蔽使用幾乎所有的數(shù)字引腳,我們將使用 Arduino Uno 的模擬引腳來讀取接收器數(shù)據(jù)。最終的電路圖如下所示:

pYYBAGJ2PKiAZv_1AAGiLR1eVf4419.png

電機(jī)屏蔽處理與電機(jī)的連接。將 9V 電池連接到屏蔽的電源輸入端。

注意:我個(gè)人更喜歡將 2 甚至 3.9V 電池并聯(lián)到屏蔽電源輸入端,以提供足夠的電力來運(yùn)行所有四個(gè)電機(jī)。我已將四個(gè)電機(jī)連接成一組 2(同一側(cè)電機(jī)并聯(lián)連接在一起,因此只需要電機(jī)點(diǎn) 3 和 4 即可運(yùn)行)。

pYYBAGJ2PKSABYZ-AAN5EXyf5_M083.png

最終代碼
Arduino Nano:

int x_axis = 0;
int y_axis = 0;
int forward = 9;
int backward = 10;
int right = 11;
int left = 12;
void setup()
{
pinMode(A0, INPUT); //X-Axis
pinMode(A3, OUTPUT); //Y-Axis
pinMode(forward, OUTPUT); //HIGH to move Forward
pinMode(backward, OUTPUT); //HIGH to move Backward
pinMode(right, OUTPUT); //HIGH to move Right
pinMode(left, OUTPUT); //HIGH to move Left
Serial.begin(9600);
}
void loop()
{
x_axis = analogRead(A0);
y_axis = analogRead(A3);
Serial.print(" X = ");
Serial.println(x_axis);
Serial.print(" Y = ");
Serial.println(y_axis);
if (y_axis >= 390)
{
Serial.println("Forward");
digitalWrite(forward, HIGH);
}
else
{
if (y_axis <= 310)
{
Serial.println("BACK");
digitalWrite(backward, HIGH);
}
else
{
if (x_axis >= 380)
{
Serial.println("RIGHT");
digitalWrite(right, HIGH);
}
else
{
if (x_axis <= 320)
{
Serial.println("LEFT");
digitalWrite(left, HIGH);
}
Serial.println(" ");
}
}
}
delay(200);
if (x_axis > 320 && x_axis < 380 && y_axis > 310 && y_axis < 390)
{
digitalWrite(forward, LOW);
digitalWrite(backward, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
}
}

#include
AF_DCMotor motor_right(3);
AF_DCMotor motor_left(4);
int forward=0;
int backward=0;
int right=0;
int left=0;
void setup()
{
pinMode(A2,INPUT);
pinMode(A3,INPUT);
pinMode(A4,INPUT);
pinMode(A5,INPUT);
Serial.begin(9600);
motor_right.setSpeed(255);
motor_left.setSpeed(255);
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
void loop()
{
forward=digitalRead(A0);
backward=digitalRead(A1);
right=digitalRead(A2);
left=digitalRead(A3);
if(forward==HIGH)
{
motor_right.run(FORWARD);
motor_left.run(FORWARD);
Serial.println("Forward");
}
if(backward==HIGH)
{
motor_right.run(BACKWARD);
motor_left.run(BACKWARD);
Serial.println("Reverse");
}
if(right==HIGH)
{
motor_right.run(FORWARD);
motor_left.run(RELEASE);
Serial.println("RIGHT");
}
if(left==HIGH)
{
motor_right.run(RELEASE);
motor_left.run(FORWARD);
Serial.println("LEFT");
}
if(left==LOW&&right==LOW&&forward==LOW&&backward==LOW)
{
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
delay(100);
}

發(fā)射器電路:

pYYBAGJ2PJqANy-AAASARTr7zHc438.png

加速度計(jì):

pYYBAGJ2PJWAKZkCAAbxzIXTWbo830.png

完整的全部模塊:

poYBAGJ2PJCAUgYmAAYv8Uop1Qk663.png

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

    關(guān)注

    211

    文章

    28379

    瀏覽量

    206912
  • 無線控制
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    19971
  • ADXL335
    +關(guān)注

    關(guān)注

    1

    文章

    15

    瀏覽量

    10510
收藏 人收藏

    評論

    相關(guān)推薦

    請問下ADXL335溫度飄零是線性的嗎?

    請問下ADXL335溫度飄零是線性的么? 采集的時(shí)候發(fā)現(xiàn)X軸輸出 在 20°的時(shí)候有轉(zhuǎn)折點(diǎn)
    發(fā)表于 01-01 06:13

    求基于STM32的ADXL335的程序?

    求基于STM32的ADXL335的程序?
    發(fā)表于 12-28 21:28

    加速度傳感器ADXL203和ADXL335

    ADXL203和ADXL335除了雙軸和三軸的區(qū)別還有其他什么區(qū)別呢?我最近要做一個(gè)傾斜測量的項(xiàng)目,手頭有ADXL335,但是老師讓用ADXL203,他們有什么大的區(qū)別嗎?
    發(fā)表于 04-22 17:25

    請問怎么將adxl335與PSoC接口

    大家好,我是PSoC的新手。我想把一個(gè)ADXL335加速度計(jì)與PSoC3(CY8CKIT-030)接口。有人能建議我怎么做嗎? 以上來自于百度翻譯 以下為原文Hello guys, I am a
    發(fā)表于 01-24 07:51

    【Longan Nano申請】手勢控制云端互聯(lián)全息投影機(jī)器人

    項(xiàng)目名稱:手勢控制云端互聯(lián)全息投影機(jī)器人試用計(jì)劃:近年來,各大行業(yè)巨頭在語音識別人工智能的競爭此起彼伏,如蘋果公司的語音助手siri,在網(wǎng)絡(luò)上一度掀起過熱潮,現(xiàn)在還有天貓精靈等從智能手機(jī)中獨(dú)立出來
    發(fā)表于 10-22 10:24

    ADXL335三軸加速度計(jì)簡介

    STM32F030C8T6單片機(jī)與GY-61 ADXL335模塊測角度ADXL335 是一款小尺寸、薄型、低功耗、完整的三軸加速度計(jì),提供經(jīng)過信號調(diào)理的電壓輸出,能以最小±3 g 的滿量程范圍測量
    發(fā)表于 12-02 06:47

    基于Arduino設(shè)計(jì)的手勢控制機(jī)器人

    描述如何在家制作 DIY Arduino 手勢控制機(jī)器人接收器(坦克)所需的零件:1) 機(jī)器人坦克底盤 2) Arduino Nano V3 3) L298N 電機(jī)驅(qū)動(dòng)器 4) NRF
    發(fā)表于 06-20 09:21

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機(jī)器人

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機(jī)器人,簡單程序即可實(shí)現(xiàn)。小小的傳感器可以識別各種
    發(fā)表于 09-27 06:17

    ADXL335,pdf,Accelerometer

    The ADXL335 is a small, thin, low power, complete 3-axis accel-erometer with signal conditioned
    發(fā)表于 03-01 09:10 ?80次下載

    ADXL335小型低功耗三軸加速度計(jì)

    The ADXL335 is a small, thin, low power, complete 3-axis accelerometer with signal conditioned
    發(fā)表于 09-28 09:53 ?20次下載
    <b class='flag-5'>ADXL335</b>小型低功耗三軸加速度計(jì)

    ADXL335 小尺寸、低功耗、三軸±3G 加速度計(jì)

    電子發(fā)燒友網(wǎng)為你提供(adi)ADXL335相關(guān)數(shù)據(jù)表資料,例如:ADXL335的引腳圖、接線圖、封裝手冊、中文資料、英文資料,ADXL335真值表,ADXL335管腳等資料,希望可以
    發(fā)表于 02-15 18:37
    <b class='flag-5'>ADXL335</b> 小尺寸、低功耗、三軸±3G 加速度計(jì)

    用于Arduino的ADXL335加速度計(jì)

    電子發(fā)燒友網(wǎng)站提供《用于Arduino的ADXL335加速度計(jì).zip》資料免費(fèi)下載
    發(fā)表于 07-04 11:25 ?0次下載
    用于Arduino的<b class='flag-5'>ADXL335</b>加速度計(jì)

    采用ADXL335加速度計(jì)的交互式Pong PC游戲

    電子發(fā)燒友網(wǎng)站提供《采用ADXL335加速度計(jì)的交互式Pong PC游戲.zip》資料免費(fèi)下載
    發(fā)表于 12-07 09:17 ?0次下載
    采用<b class='flag-5'>ADXL335</b>加速度計(jì)的交互式Pong PC游戲

    ADXL335三軸加速度計(jì)開源分享

    電子發(fā)燒友網(wǎng)站提供《ADXL335三軸加速度計(jì)開源分享.zip》資料免費(fèi)下載
    發(fā)表于 12-12 11:45 ?7次下載
    <b class='flag-5'>ADXL335</b>三軸加速度計(jì)開源分享

    使用ADXL335三軸加速度計(jì)制作快速簡便的設(shè)備

    電子發(fā)燒友網(wǎng)站提供《使用ADXL335三軸加速度計(jì)制作快速簡便的設(shè)備.zip》資料免費(fèi)下載
    發(fā)表于 06-09 09:50 ?1次下載
    使用<b class='flag-5'>ADXL335</b>三軸加速度計(jì)制作快速簡便的設(shè)備
    RM新时代网站-首页