資料介紹
描述
介紹
該項(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ù)下圖給出了連接。

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

第二步:接收電路
接收電路由一個(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ù)下圖給出連接。

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

第三步:邏輯
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ā)布。
- 手勢(shì)控制機(jī)器人開(kāi)源項(xiàng)目
- WiFi控制機(jī)器人開(kāi)源項(xiàng)目
- 手勢(shì)控制機(jī)器人開(kāi)源硬件
- 簡(jiǎn)單的藍(lán)牙控制機(jī)器人開(kāi)源
- 藍(lán)牙控制機(jī)器人開(kāi)源
- 藍(lán)牙控制機(jī)器人車(chē)開(kāi)源分享
- 使用TensorFlow對(duì)自平衡機(jī)器人進(jìn)行手勢(shì)控制
- 藍(lán)牙控制機(jī)器人開(kāi)源分享
- WiFi控制機(jī)器人開(kāi)源分享
- 語(yǔ)音控制機(jī)器人開(kāi)源分享
- 如何制作手勢(shì)控制機(jī)器人-MadeWithArduino(發(fā)射器)
- 基于DSP和PC的農(nóng)業(yè)機(jī)器人控制系統(tǒng) 18次下載
- 機(jī)器人PID控制概述 27次下載
- 機(jī)器人設(shè)計(jì)教程之機(jī)器人控制和決策子系統(tǒng) 25次下載
- 手勢(shì)對(duì)工業(yè)機(jī)器人進(jìn)行控制 0次下載
- 如何使用PLC控制機(jī)器人 1882次閱讀
- 字節(jié)發(fā)布機(jī)器人領(lǐng)域首個(gè)開(kāi)源視覺(jué)-語(yǔ)言操作大模型,激發(fā)開(kāi)源VLMs更大潛能 561次閱讀
- 機(jī)器人技術(shù)中常用的路徑規(guī)劃算法的開(kāi)源庫(kù) 1188次閱讀
- 如何利用ADXL335實(shí)現(xiàn)手勢(shì)控制機(jī)器人的設(shè)計(jì) 3107次閱讀
- 基于PIC單片機(jī)和PSC控制器實(shí)現(xiàn)機(jī)器人控制系統(tǒng)的設(shè)計(jì) 4085次閱讀
- 機(jī)器人控制系統(tǒng)分類(lèi)_機(jī)器人控制系統(tǒng)有哪些 2.6w次閱讀
- 工業(yè)機(jī)器人技術(shù)應(yīng)用 5343次閱讀
- 機(jī)器人控制器有哪些類(lèi)型_機(jī)器人控制器發(fā)展 1.2w次閱讀
- 關(guān)于工業(yè)機(jī)器人智能控制的四種控制方式 6479次閱讀
- 協(xié)作機(jī)器人的起源_為什么需要協(xié)作機(jī)器人 8322次閱讀
- 移動(dòng)機(jī)器人控制系統(tǒng)設(shè)計(jì)與仿真 3640次閱讀
- 機(jī)器人控制系統(tǒng)的基本單元與機(jī)器人控制系統(tǒng)的特點(diǎn)分析 1.1w次閱讀
- 機(jī)器人的運(yùn)動(dòng)控制的介紹和如何將機(jī)器人的運(yùn)動(dòng)控制分成4種任務(wù) 1w次閱讀
- AI和VR在機(jī)器人控制的實(shí)在應(yīng)用匯總 5620次閱讀
- 基于PLC的機(jī)器人伺服運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)詳解 1.6w次閱讀
下載排行
本周
- 1DD3118電路圖紙資料
- 0.08 MB | 1次下載 | 免費(fèi)
- 2AD庫(kù)封裝庫(kù)安裝教程
- 0.49 MB | 1次下載 | 免費(fèi)
- 3PC6206 300mA低功耗低壓差線(xiàn)性穩(wěn)壓器中文資料
- 1.12 MB | 1次下載 | 免費(fèi)
- 4網(wǎng)絡(luò)安全從業(yè)者入門(mén)指南
- 2.91 MB | 1次下載 | 免費(fèi)
- 5DS-CS3A P00-CN-V3
- 618.05 KB | 1次下載 | 免費(fèi)
- 6海川SM5701規(guī)格書(shū)
- 1.48 MB | 次下載 | 免費(fèi)
- 7H20PR5電磁爐IGBT功率管規(guī)格書(shū)
- 1.68 MB | 次下載 | 1 積分
- 8IP防護(hù)等級(jí)說(shuō)明
- 0.08 MB | 次下載 | 免費(fèi)
本月
- 1貼片三極管上的印字與真實(shí)名稱(chēng)的對(duì)照表詳細(xì)說(shuō)明
- 0.50 MB | 103次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 3錦銳科技CA51F2 SDK開(kāi)發(fā)包
- 24.06 MB | 43次下載 | 1 積分
- 4錦銳CA51F005 SDK開(kāi)發(fā)包
- 19.47 MB | 19次下載 | 1 積分
- 5PCB的EMC設(shè)計(jì)指南
- 2.47 MB | 16次下載 | 1 積分
- 6HC05藍(lán)牙原理圖加PCB
- 15.76 MB | 13次下載 | 1 積分
- 7802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費(fèi)
- 8蘋(píng)果iphone 11電路原理圖
- 4.98 MB | 6次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191390次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評(píng)論