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

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

3天內不再提示

如何利用ADXL335實現(xiàn)手勢控制機器人的設計

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

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

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

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

1. ADXL335(加速度計)

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

pYYBAGJ2PMCAT4zaAAQPc98DUbE171.png

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

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

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

加速度計的電路圖是:

pYYBAGJ2PLyAGexOAAJsTRCEnwM667.png

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

pYYBAGJ2PLiAG9ByAADNNyHx_4k112.png

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

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

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

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

發(fā)射器電路

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

電路圖如圖所示:

pYYBAGJ2PLSAeJi0AAJoBVpwHAg607.png

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

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

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

9 前鋒

10 反向

11 左

12 右

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

接收電路

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

pYYBAGJ2PK-ADbS8AAIj-Kuz-_8557.png

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

3.電機護罩

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

下載并復制 Arduino 庫文件夾中的庫,以便能夠將其包含在程序草圖中。

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.結合所有部分

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

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

pYYBAGJ2PKiAZv_1AAGiLR1eVf4419.png

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

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

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

加速度計:

pYYBAGJ2PJWAKZkCAAbxzIXTWbo830.png

完整的全部模塊:

poYBAGJ2PJCAUgYmAAYv8Uop1Qk663.png

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

    關注

    210

    文章

    27989

    瀏覽量

    205535
  • 無線控制
    +關注

    關注

    0

    文章

    95

    瀏覽量

    19953
  • ADXL335
    +關注

    關注

    1

    文章

    15

    瀏覽量

    10494
收藏 人收藏

    評論

    相關推薦

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

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

    求基于STM32的ADXL335的程序?

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

    加速度傳感器ADXL203和ADXL335

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

    請問怎么將adxl335與PSoC接口

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

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

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

    ADXL335三軸加速度計簡介

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

    基于Arduino設計的手勢控制機器人

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

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機器人

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機器人,簡單程序即可實現(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小型低功耗三軸加速度計

    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>小型低功耗三軸加速度計

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

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

    用于Arduino的ADXL335加速度計

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

    采用ADXL335加速度計的交互式Pong PC游戲

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

    ADXL335三軸加速度計開源分享

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

    使用ADXL335三軸加速度計制作快速簡便的設備

    電子發(fā)燒友網站提供《使用ADXL335三軸加速度計制作快速簡便的設備.zip》資料免費下載
    發(fā)表于 06-09 09:50 ?1次下載
    使用<b class='flag-5'>ADXL335</b>三軸加速度計制作快速簡便的設備