一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>手勢(shì)控制機(jī)器人開(kāi)源分享

手勢(shì)控制機(jī)器人開(kāi)源分享

2022-11-16 | zip | 0.11 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

該項(xiàng)目旨在構(gòu)建一個(gè)手勢(shì)控制機(jī)器人,可用于醫(yī)院、商店、酒店、家庭等,在這些地方需要非接觸式交付,以便在 Covid-19 情況下嚴(yán)格遵守社交距離。

項(xiàng)目概況

該項(xiàng)目基本上包含兩個(gè)電路,一個(gè)發(fā)射器電路和一個(gè)接收器電路。手勢(shì)通過(guò) MPU6050 加速度計(jì)傳感器轉(zhuǎn)換為電信號(hào)Arduino Nano 處理傳入的信號(hào)并將其發(fā)送到射頻發(fā)射器。在接收端,這些信號(hào)被射頻接收器接收并發(fā)送到Arduino Uno進(jìn)行解碼。Arduino Uno 在接收到信號(hào)后,通過(guò)電機(jī)驅(qū)動(dòng)器驅(qū)動(dòng)電機(jī)。

第一步:傳輸電路

發(fā)射電路由一個(gè) MPU6050 加速度傳感器、一個(gè) Arduino Nano、一個(gè) 433 MHz 射頻發(fā)射器和一個(gè) 9V 電池組成。電池用于為 Arduino 供電,而傳感器和發(fā)射器可以由 Arduino 供電。這是因?yàn)?,Arduino 可以接受 5V 至 12V 的電壓,而傳感器必須由 5V 電源供電。Arduino 的代碼已在本項(xiàng)目的后面部分提供。組件放置在面包板上,并根據(jù)下圖給出了連接。

pYYBAGNy7VyAV3ibAAIDC6MBEdI248.png
發(fā)射器電路
?

完成必要的連接后,它看起來(lái)應(yīng)該是這樣的。在這里,我使用了移動(dòng)電源而不是 9V 電池。

poYBAGNy7V-AHWPlAABSmtI6QHo024.png
?

第二步:接收電路

接收電路由一個(gè) Arduino Uno、一個(gè) 433MHz 射頻接收器、一個(gè) L298N H 橋電機(jī)驅(qū)動(dòng)器、兩個(gè)直流電機(jī)和四個(gè) 18650 鋰離子電池組成。電池為電機(jī)驅(qū)動(dòng)器供電,電機(jī)驅(qū)動(dòng)器為 Arduino 供電,射頻接收器由 Arduino 供電。Arduino 的代碼已在項(xiàng)目的后期部分提供。組件放置在機(jī)器人底盤(pán)上,并根據(jù)下圖給出連接。

pYYBAGNy7WOAJpRcAAI24pQRRPo371.png
接收電路
?

電機(jī)及其輪子和腳輪應(yīng)安裝在底盤(pán)底部。組件應(yīng)用膠帶固定在頂部。如果它是像我這樣的金屬底盤(pán),則用一層絕緣材料(如紙)將頂部絕緣。完成必要的連接后,機(jī)器人應(yīng)類(lèi)似于下圖。在這里,我為電機(jī)和 Arduino 使用了單獨(dú)的電源。

poYBAGNy7WWAculkAABRjg6RAKo207.png
機(jī)器人上的接收器電路
?

第三步:邏輯

MPU6050 傳感器具有加速度計(jì)和陀螺儀。對(duì)于這個(gè)項(xiàng)目,加速度計(jì)值是從傳感器獲得的。

  • 如果沿 x 軸的加速度值在 20 到 60 之間,則機(jī)器人應(yīng)該向前移動(dòng)。
  • 如果沿 x 軸的加速度值介于 -20 和 -60 之間,則機(jī)器人應(yīng)該向后移動(dòng)。
  • 如果沿 y 軸的加速度值在 20 到 60 之間,則機(jī)器人應(yīng)向左轉(zhuǎn)。
  • 如果沿 y 軸的加速度值介于 -20 和 -60 之間,則機(jī)器人應(yīng)向右轉(zhuǎn)
  • 如果以上條件均不滿(mǎn)足,則機(jī)器人應(yīng)停止。

第 4 步:對(duì)發(fā)射器進(jìn)行編程

首先,包括必要的庫(kù)。分別為 GY6050 和 RH_ASK 類(lèi)創(chuàng)建實(shí)例,即 acc 和 driver。0x68 代表傳感器的 I2C 地址。

#include <RH_ASK.h>
#include <Wire.h>
#include <GY6050.h>

GY6050 acc(0x68);
RH_ASK driver;
char* msg="100";

在 setup 函數(shù)中,首先初始化加速度傳感器。然后開(kāi)始串行通信,以 9600 的波特率顯示串行監(jiān)視器中的值。然后,檢查 RH_ASK 驅(qū)動(dòng)程序是否已正確初始化。

void setup()
{
    acc.initialisation();
    Serial.begin(9600);
    if (!driver.init())
    Serial.println("init failed");
}

在循環(huán)函數(shù)中,聲明一個(gè)名為 msg 的變量,用于將消息發(fā)送給接收者。將必要的參數(shù)傳遞給刷新函數(shù)以獲取兩個(gè)軸的加速度計(jì)值,并將它們存儲(chǔ)在兩個(gè)變量中。

void loop()
{
    const char *msg = "hello";
    int AcX=acc.refresh('A', 'X');
    int AcY=acc.refresh('A', 'Y');
    delay(25);
  • 如果 AcX 的值介于 20 和 60 之間,則在串行監(jiān)視器中打印 Front 并將值 Front 存儲(chǔ)在 msg 中。
  • 如果 AcX 的值介于 -20 和 -60 之間,則在串行監(jiān)視器中打印 Back 并將值 Back 存儲(chǔ)在 msg 中。
  • 如果 AcY 的值介于 20 和 60 之間,則在串行監(jiān)視器中打印 Left 并將值 Left 存儲(chǔ)在 msg 中。
  • 如果 AcY 的值介于 -20 和 -60 之間,則在串行監(jiān)視器中打印 Right 并將值 Right 存儲(chǔ)在 msg 中。
  • 如果上述條件都不滿(mǎn)足,則將值 Stop 存儲(chǔ)在 msg 中并在串行監(jiān)視器中打印 Stop。
if(AcX>=20 && AcX<=60)
    {
        Serial.println("Front");
        msg="Front";
    }
    else if(AcX<=-20 && AcX>=-60)
    {
        Serial.println("Back");
        msg="Back";
    }
    else if(AcY>=20&&AcY<60)
    {
        Serial.println("Left");
        msg="Left";
    }
    else if(AcY>=-60&&AcY<-20)
    {
        Serial.println("Right");
        msg="Right";
    }
    else
    {
        Serial.println("Stop");
        msg="Stop";
    }
    delay(100);

然后通過(guò) send 函數(shù)發(fā)送消息并等待任何先前的消息傳輸完成。

driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
delay(200);
}

第 5 步:對(duì)接收器進(jìn)行編程

首先,包含必要的庫(kù)并分別為 RH_ASK 和 String 類(lèi)創(chuàng)建實(shí)例。

#include 
RH_ASK driver;
String str;

在 setup 函數(shù)中,以 9600 的波特率啟動(dòng)串行通信,并檢查 RH_ASK 驅(qū)動(dòng)程序是否已正確初始化。

void setup()
{
    Serial.begin(9600);
    if (!driver.init())
    Serial.println("init failed");
}

在循環(huán)函數(shù)內(nèi)部,創(chuàng)建一個(gè)緩沖區(qū)來(lái)存儲(chǔ)從發(fā)送器接收到的值。然后將緩沖區(qū)中的值復(fù)制到字符串并在串行監(jiān)視器中打印。

void loop()
{
    uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];//max size of the buffer
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) //Receive the value and store it in a buffer
    {
        str=(char*)buf;   //Copy the message from the buffer to a string
        Serial.println(str); 
    }
    delay(200);

數(shù)字引腳 5 和 6 用于控制左電機(jī),引腳 7 和 8 用于控制右電機(jī)。

如果接收到的字符串是 Front,機(jī)器人應(yīng)該向前跑。這是通過(guò)將電機(jī)的第一個(gè)引腳設(shè)置為高電平并將下一個(gè)引腳設(shè)置為低電平來(lái)實(shí)現(xiàn)的。

如果接收到的字符串是 Back,機(jī)器人應(yīng)該向后跑。這是通過(guò)將電機(jī)的第一個(gè)引腳設(shè)置為低電平并將下一個(gè)引腳設(shè)置為高電平來(lái)實(shí)現(xiàn)的。

如果接收到的字符串是右,機(jī)器人應(yīng)該右轉(zhuǎn)。所以左電機(jī)應(yīng)該向前轉(zhuǎn)動(dòng),右電機(jī)應(yīng)該向后轉(zhuǎn)動(dòng)。

如果接收到的字符串是 Left,機(jī)器人應(yīng)該向左轉(zhuǎn)。所以左電機(jī)應(yīng)該向后轉(zhuǎn)動(dòng),右電機(jī)應(yīng)該向前轉(zhuǎn)動(dòng)。

要停止機(jī)器人,請(qǐng)將所有電機(jī)引腳設(shè)置為低電平。

if(str=="Front")
    {
        digitalWrite(5,HIGH); //5,6 Left motor
        digitalWrite(6,LOW);
        digitalWrite(7,HIGH); //7,8 Right motor
        digitalWrite(8,LOW);
    }
    else if(str=="Back")
    {
        digitalWrite(5,LOW);
        digitalWrite(6,HIGH);
        digitalWrite(7,LOW);
        digitalWrite(8,HIGH);
    }   
    else if(str=="Left")
    {
        digitalWrite(5,LOW);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(8,LOW);
    }
    else if(str=="Right")
    {
        digitalWrite(5,HIGH);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,HIGH);
    }
    else
    {
        digitalWrite(5,LOW);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,LOW);
    }
}

第 6 步:故障排除

有時(shí)電機(jī)不會(huì)按所需方向運(yùn)行。首先找出哪個(gè)電機(jī)以這種方式運(yùn)行。然后該電機(jī)的電線(xiàn)必須互換并重新連接。這有望解決這個(gè)問(wèn)題。

如果接收到的緩沖區(qū)包含一些不需要的值以及消息,則使用子字符串函數(shù)從中提取消息。

機(jī)器人的工作

在構(gòu)建機(jī)器人并將代碼上傳到兩個(gè) Arduino 之后,機(jī)器人就可以正常工作了。此處附有機(jī)器人的工作視頻。

由于封鎖,我被迫使用可用的組件來(lái)完成這個(gè)項(xiàng)目。另外,由于同樣的原因,我用我的手機(jī)相機(jī)拍攝了這個(gè)視頻,因?yàn)橘|(zhì)量很差。帶來(lái)不便敬請(qǐng)諒解。如果您在構(gòu)建此項(xiàng)目時(shí)遇到任何問(wèn)題,請(qǐng)?jiān)谠u(píng)論中發(fā)布。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1DD3118電路圖紙資料
  2. 0.08 MB   |  1次下載  |  免費(fèi)
  3. 2AD庫(kù)封裝庫(kù)安裝教程
  4. 0.49 MB   |  1次下載  |  免費(fèi)
  5. 3PC6206 300mA低功耗低壓差線(xiàn)性穩(wěn)壓器中文資料
  6. 1.12 MB   |  1次下載  |  免費(fèi)
  7. 4網(wǎng)絡(luò)安全從業(yè)者入門(mén)指南
  8. 2.91 MB   |  1次下載  |  免費(fèi)
  9. 5DS-CS3A P00-CN-V3
  10. 618.05 KB  |  1次下載  |  免費(fèi)
  11. 6海川SM5701規(guī)格書(shū)
  12. 1.48 MB  |  次下載  |  免費(fèi)
  13. 7H20PR5電磁爐IGBT功率管規(guī)格書(shū)
  14. 1.68 MB   |  次下載  |  1 積分
  15. 8IP防護(hù)等級(jí)說(shuō)明
  16. 0.08 MB   |  次下載  |  免費(fèi)

本月

  1. 1貼片三極管上的印字與真實(shí)名稱(chēng)的對(duì)照表詳細(xì)說(shuō)明
  2. 0.50 MB   |  103次下載  |  1 積分
  3. 2涂鴉各WiFi模塊原理圖加PCB封裝
  4. 11.75 MB   |  89次下載  |  1 積分
  5. 3錦銳科技CA51F2 SDK開(kāi)發(fā)包
  6. 24.06 MB   |  43次下載  |  1 積分
  7. 4錦銳CA51F005 SDK開(kāi)發(fā)包
  8. 19.47 MB   |  19次下載  |  1 積分
  9. 5PCB的EMC設(shè)計(jì)指南
  10. 2.47 MB   |  16次下載  |  1 積分
  11. 6HC05藍(lán)牙原理圖加PCB
  12. 15.76 MB   |  13次下載  |  1 積分
  13. 7802.11_Wireless_Networks
  14. 4.17 MB   |  12次下載  |  免費(fèi)
  15. 8蘋(píng)果iphone 11電路原理圖
  16. 4.98 MB   |  6次下載  |  2 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191390次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分