鐵甲鋼拳3——臂帶式體感交互控制器【轉譯】手工電子DIY教程
在用手柄玩了一段時間格鬥機器人之後,製作過程參見前兩期的文章,這次本人在控制器方面又進行了一次升級。不再使用類似遊戲機的手柄,而是自制了一個臂帶式體感交互控制器。【原址:鐵甲鋼拳3-臂帶式體感交互控制器/】
主要材料:
Arduino UNO 或DFduino UNO | Xbee傳感器擴展板 V5 |
電池盒 | 電池 5(與電池盒匹配) |
numchuck連接器及連接線 | MMA7361加速度傳感器 |
護膝 | Wii 副手柄numchuck |
DFduino wireless無線模塊 |
所需工具:
如圖 |
製作步驟:
第1步:
大家一定覺得這個名字太抽象了,具體的說就是用加速度傳感器來獲取手臂的姿態,然後通過無線的方式來控制機器人或者其他的東東。
我用到的器材如下
第2步:
1Arduino UNO 或DFduino UNO1
2Xbee傳感器擴展板 V51
3電池盒1
4電池5(與電池盒匹配)
5numchuck連接器及連接線1
6MMA7361加速度傳感器1
7護膝1
8Wii 副手柄numchuck1
9DFduino wireless無線模塊1
第3步:
先來說說硬件的連接,首先將護膝帶在左手手腕上,爲什麼選擇一個護膝而不是直接用一個護腕呢,這是因爲護膝內和手臂的空間比較大,製作起來比較方便。而如果是用護腕則是完全勒在手腕上的。
將護膝帶到虎口位置即可,並將虎口的位置縫合起來,使其更像一個手套。同時把Arduino控制板和加速度傳感器縫在護膝上,如圖2所示,加速度傳感器的連接線從護膝內穿過。
第4步:
第2步,將Xbee傳感器擴展板V5插在Arduino控制板上,同時將加速度傳感器的連接線連接到A0、A1和A2上,分別對應X、Y、Z三個軸向,並且把Numchuck連接器用連接線連到傳感器擴展板上,連接是要注意引腳的定義,連接器的d端對應A4,c端對應A5。
第5步:
第3步,將電池盒連接在傳感器擴展板的電源輸入端,並把其固定在護膝內,手臂內側。
第6步:
第4步,將之前遙控器內的DFduino wireless無線模塊拆下並安裝在傳感器擴展板上。
第7步:
最後將Wii的副手柄numchuck接上,並將其握在右手內。這樣,我們的臂帶式體感交互控制器硬件部分就算完成了。
第8步:
接下來說說軟件部分。這個遙控器的控制思路是這樣的,當我水平伸出手臂時,機器人作出擺臂的動作,如圖7所示;當我向前揮動手臂時,機器人做出打拳的動作
第9步:
水平伸出手臂
第10步:
而機器人的移動依靠numchuck手柄上的搖桿,同時配合手柄上的Z鍵和C鍵完成機器人的移動。控制動作和機器人的動作對應關係如下表。
序號動作說明觸發指令控制動作
1機器人前進一步1搖桿向前
2機器人後退一步2搖桿向後
3機器人左轉15搖桿向左
4機器人右轉14搖桿向右
5機器人向左滑動一步8按下Z鍵同時搖桿向左
6機器人向右滑動一步7按下Z鍵同時搖桿向右
7機器人下蹲12按下Z鍵同時搖桿向後
8機器人起身13按下Z鍵同時搖桿向前
9左拳6左手向前伸
10右拳5右手向前伸
11左臂擺動4左手水平擡起
12右臂擺動3右手水平擡起
13向前倒下後起身9按下C鍵同時搖桿向前
14向後倒下後起身16按下C鍵同時搖桿向後
Wii的副手柄numchuck的使用《無線電》雜誌的2010年第12期和2012年第6期都有介紹過,這裏就簡單的說明一下。Arduino使用這個副手柄需要單獨下載一個WiiChuck庫文件,有了這個庫文件,在代碼中直接調用ccelAxisX()、ccelAxisY()之類的函數就可以直接獲得搖桿的值、手柄內加速的的值以及按鈕的值。這裏我還要對C鍵和Z鍵作一個說明,我手上的這個numchuck手柄,當Z鍵和C鍵都沒有按下時,兩者返回的都是1;當按下C鍵時,C鍵返回值爲0,Z鍵返回值爲1;但當按下Z鍵時,兩者返回的值都是0;當C鍵和Z鍵都按下時,Z鍵的返回值爲0,C鍵的返回值爲1。
這裏着重的說一下MMA7361加速度傳感器的使用,如圖9所示。加速度傳感器是一種能夠測量加速力的電子傳感器。通過測量由於重力引起的加速度,可以計算出設備相對於水平面的傾斜角度,分析出設備移動的方式。
第11步:
MMA7361加速度傳感器基於Freescale(飛思卡爾)公司生產的微型電容式三軸加速度傳感器MMA7361芯片。該芯片採用信號調理、單極低通濾波器和溫度補償技術,提供±1.5g/6g兩個量程,用戶可在這2個靈敏度中選擇,該器件還帶有低通濾波並已做0g補償。
傳感器有3個模擬量的三芯接口,分別表示X、Y、Z三個軸的加速度值,同時預留排針焊接孔。前面已經說過,我們分別將X、Y、Z三個軸向的加速度值輸出引腳連接到A0、A1和A2。
我們使用的是1.5g的量程,上圖中給出了靜態加速度傳感器幾種狀態下的各個軸向加速度的值,由於量程是從-1.5g到+1.5g,所以當加速度爲0g時,引腳輸出的電壓大致爲1.65V,再因爲有重力的關係,所以方向向下的軸向上加速度值是1g(根據方向的不同可能是+1g或-1g)。我們可以通過如下的代碼將傳感器輸出的模擬量值轉換爲電壓值(以X軸爲例)。
vol_x=analogRead(A0)*5.0/1024;
然後根據1.5g量程下的靈敏度——800mV/g,通過電壓值換算出軸向上當前的加速度值,代碼如下。
g_x =(vol_x-1.76)/0.8
但在實際的應用中,由於傳感器的差異,當在0g是輸出的電壓值可能不是1.65V,所以在使用加速度傳感器之前需要對其進行校準,以當前0g時輸出的電壓值作準。
但在這裏不用這麼麻煩,只需要通過判斷返回的模擬量值是否在一個區間內就能夠推斷出傳感器當前大致的姿態,進而發送命令控制機器人。
詳細代碼如下。
1.#include <math.h>
2.#include <stdlib.h>
3.#include "Wire.h"
4.#include "WiiChuck.h"
5.
huck wii = WiiChuck();
7.
sensorAccelX,sensorAccelY,sensorAccelZ;
sensorAccelWiiX,sensorAccelWiiY,sensorAccelWiiZ;
sensorJoyX,sensorJoyY;
buttonC,buttonZ;
void setup()
{
(); //初始化Wii手柄
n(57600);
}
void loop()
{
//獲取加速度傳感器的模擬量值
sensorAccelX = analogRead(A0);
sensorAccelY = analogRead(A1);
sensorAccelZ = analogRead(A2);
//獲取Wii手柄的各個參數
if (true == ())
{
sensorAccelWiiX = ccelAxisX();
sensorAccelWiiY = ccelAxisY();
sensorAccelWiiZ = ccelAxisZ();
sensorJoyX = oyAxisX();
sensorJoyY = oyAxisY();
buttonZ = uttonZ();
buttonC = uttonC();
}
//通過各個參數值推斷當前兩手的姿態,進而控制機器人
//在未按下Z和C鍵時通過搖桿控制機器人移動
if((buttonZ == 1) && (buttonC == 1))
{
if(sensorJoyY > 200)
{
e(1);//向機器人發送1,機器人將做出前進的動作
}
else if((sensorJoyY < 76) && (sensorJoyY > 40))
{
e(2); //向機器人發送2,機器人將做出後退的動作
}
if((sensorJoyX < 76) && (sensorJoyX > 40))
{
e(15); //向機器人發送15,機器人將做出左轉的動作
}
else if(sensorJoyX > 200)
{
e(14); //向機器人發送14,機器人將做出右轉的動作
}
}
//按下Z鍵時控制機器人的左右平移和蹲下起身
if(buttonZ == 0)
{
if(sensorJoyY > 200)
{
e(13); //向機器人發送13,機器人將做出起身的動作
}
else if((sensorJoyY < 76) && (sensorJoyY > 40))
{
e(12); //向機器人發送12,機器人將做出蹲下的動作
}
if((sensorJoyX < 76) && (sensorJoyX > 40))
{
e(8); //向機器人發送8,機器人將做出左移的動作
}
else if(sensorJoyX > 200)
{
e(7); //向機器人發送7,機器人將做出右移的動作
}
}
//按下C鍵時控制機器人在跌倒的情況下爬起來
if((buttonZ == 1) && (buttonC == 0))
{
if(sensorJoyY > 200)
{
e(9); //向機器人發送9,機器人將從前爬起
}
else if((sensorJoyY < 76) && (sensorJoyY > 40))
{
e(16); //向機器人發送16,機器人將從後爬起
}
}
//通過加速度傳感器控制機器人左臂的動作
if(sensorAccelX > 500)
{
e(4); //向機器人發送4,機器人將做出左擺的動作
}
if(sensorAccelZ > 450)
{
e(6); //向機器人發送6,機器人將做出左拳的動作
}
//通過Wii手柄控制機器人右臂的動作
if(sensorAccelWiiY < 154)
{
117. e(3); //向機器人發送3,機器人將做出右擺的動作
118. }
119. if(sensorAccelWiiX < 115)
120. {
121. e(5); //向機器人發送5,機器人將做出右拳的動作
122. }
123.
y(200);
125.}
小貼士:
原址:鐵甲鋼拳3-臂帶式體感交互控制器/
相關文章
-
《鐵甲鋼拳》概念藝術賞析小製作
篇一:鄉鎮年度農業科教工作總結20xx年xx縣農業科教工作嚴格按照省市縣農業工作的總體部署,以提高農業科技創新轉化能力,提高農產品科技含量,提高勞動者的科學文化素質爲重心。積極發揮工作積極性、主動性和創造性,努力開 -
能當鞋穿的襪子,比鋼鐵還要硬【轉譯】手工電子DIY教程
終於迎來了一年一度的國慶節,在這舉國歡慶的節日裏,到處都充滿了熱烈、喜慶的節日氣氛。以下是本站小編爲大家整理的祝福國慶的經典祝福語,希望你們喜歡。祝福國慶的經典祝福語摘抄1. 生活要多加經營,而非多加計較;感情要 -
【格子控】拼布10cm彈片口金——兔小姐——致閨蜜手工布藝教程
在教學方面一.瞭解幼兒基本情況和特點。1. 跟幼兒多接觸溝通建立良好的關係。2. 實習班級授課方式,教學計劃備。好自己的教案跟主班老師多交流經驗。二.配合主班老師工作。1. 認真配合主班老師把幼兒照顧好,不懂的事情 -
闖入現實的鋼鐵俠——MK1降臨地球之全程體驗手工電子DIY教程
通過近一年多的中繼教的相關課程的學習,我知道,學校要發展,必須有一支政治素質過硬,教學能力突出的優秀教師。作爲一名普通的教師,我向這個目標看齊,認真參加了中繼教的一切培訓和活動,完成了學校規定的中繼教任務的幾年科目 -
足式運動機構——長臂猴——吊繩攀爬結構平臺手工電子DIY教程
製作機器人,常見的基礎平臺有輪式小車底盤、履帶小車底盤,還有足式行走機構等等。在網上看到一個足式運動機構的視頻,跟大家分享。 主要材料:電路板組裝板所需工具:老虎鉗尺子膠槍小刀鉛筆製作步驟:小貼士:吊繩攀爬的結構 -
【Arduino】廢舊積木和電機利用——DIY吊車【轉譯】手工電子DIY教程
一起來學一學吧主要材料:壞掉的電動電位器L298N的電機驅動板繼電器所需工具:剪刀製作步驟:第1步:這是我從壞掉的電動電位器,拆出來的,在一些功放中是可以看見它的身影,而且它的力量很大,用來做吊車是極好的第2步:第3步:下面的電 -
【琢美智造】30分鐘製造驚喜——鐵皮罐變身小清新花盆手工舊物改造教程
如果你有30分鐘空閒你會幹點什麼的?有人選擇跑步流汗鍛鍊身體,有人說不如托腮閉眼任情緒漫遊天外。當然,我們還可以利用軟陶、樹葉、鐵皮罐製作出一個清新唯美的個人專屬裝飾鐵罐!主要材料:鐵罐 軟陶木塊樹葉白油漆電磨機 -
Silk:交互式生成藝術,體驗一把大神的快感
啊哈...U吧處女貼...其實要爲大家推薦的這個也不完全算是遊戲咯(╯_╰)Silk是一個可以進行唯美藝術創作的網站(絲綢畫?),用它自己的話說就是交互式生成藝術。Users只需動動鼠標就可以生成唯美的圖形,體驗一把大神的快感。 -
【泰式冬陰功湯的詳細熬製方法】——轉手工美食烘焙教程
愛吃泰國菜的朋友不要錯過啦~😘主要材料:番茄 一個檸檬草 一根檸檬葉 10-12片南姜 2釐米左右泰國辣椒 一個香菜 若干[切碎]時令蘑菇 若干青檸檬 一個冬陰功醬雞湯魚露水所需工具:鍋製作步驟:第1步:第2步: -
哈佛大學基於開源硬件和3D打印開發的軟體機器人套件【轉譯】手工電子DIY教程
【篇一】20xx年,xx社區紀檢工作將在蕪湖路街道黨工委、紀工委的領導下,緊緊圍繞貫徹區二屆十次會議精神和蕪湖路街道“規範、提速、創新”精神,全面加強廉政文化建設,以完善懲治和預防腐敗體系爲重點,把反腐倡廉工作擺上更