“(RB-13K079)AS-4WD超聲波手勢操控機(jī)器人”的版本間的差異
(以“右 ==產(chǎn)品概述== 超聲波作為智能車避障的一種重要手段,以其避障實(shí)現(xiàn)便,計(jì)算簡單,易于...”為內(nèi)容創(chuàng)建頁面) |
(→?演示視頻) |
||
(未顯示1個(gè)用戶的5個(gè)中間版本) | |||
第113行: | 第113行: | ||
* 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。 | * 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。 | ||
===測試程序=== | ===測試程序=== | ||
+ | ====方向盤端程序==== | ||
+ | <pre style="color:blue"> | ||
+ | int Button=6; //定義Button為數(shù)字口6 | ||
+ | int z; //定義變量z | ||
+ | int b; | ||
+ | int duration_1; //定義變量duration_1用來存儲(chǔ)脈沖 | ||
+ | int distance_1; //定義變量distance_1用來存儲(chǔ)距離值 | ||
+ | int srfPin_1 = 2; //定義srfPin_1為數(shù)字口2 | ||
+ | int val1; | ||
+ | int duration_2; //定義變量duration_2用來存儲(chǔ)脈沖 | ||
+ | int distance_2; //定義變量distance_2用來存儲(chǔ)距離值 | ||
+ | int srfPin_2 = 3; //定義srfPin_2為數(shù)字口3 | ||
+ | int val2; | ||
+ | int duration_3; //定義變量duration_3用來存儲(chǔ)脈沖 | ||
+ | int distance_3; //定義變量distance_3用來存儲(chǔ)距離值 | ||
+ | int srfPin_3 = 4; //定義srfPin_3為數(shù)字口4 | ||
+ | int val3; | ||
+ | int duration_4; //定義變量duration_4用來存儲(chǔ)脈沖 | ||
+ | int distance_4; //定義變量distance_4用來存儲(chǔ)距離值 | ||
+ | int srfPin_4 = 5; //定義srfPin_4為數(shù)字口5 | ||
+ | int val4; | ||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(115200); //設(shè)定波特率為115200 | ||
+ | pinMode(srfPin_1,OUTPUT); //定義srfPin1為輸出模式 | ||
+ | pinMode(srfPin_2,OUTPUT); //定義srfPin1為輸出模式 | ||
+ | pinMode(srfPin_3,OUTPUT); //定義srfPin1為輸出模式 | ||
+ | pinMode(srfPin_4,OUTPUT); //定義srfPin1為輸出模式 | ||
+ | pinMode(Button,INPUT); //定義Button為輸入模式 | ||
+ | } | ||
+ | void loop() | ||
+ | { | ||
+ | if(LOW == digitalRead(Button)) | ||
+ | b=1; | ||
+ | else | ||
+ | b=0; | ||
+ | |||
+ | while(b) | ||
+ | { | ||
+ | val1=Ultrasonic_1(z); //前超聲波返回距離值賦值給val1 | ||
+ | val2=Ultrasonic_2(z); //后超聲波返回距離值賦值給val2 | ||
+ | val3=Ultrasonic_3(z); //左超聲波返回距離值賦值給val3 | ||
+ | val4=Ultrasonic_4(z); //右超聲波返回距離值賦值給val4 | ||
+ | if((val1>15)&&(val2>15)&&(val3>15)&&(val4>15)) | ||
+ | Serial.print('T'); | ||
+ | if((val1<15)&&(val3<15)) | ||
+ | Serial.print('x'); | ||
+ | else if((val1<15)&&(val1<val3)&&(val3<val4)) | ||
+ | Serial.print('q'); | ||
+ | if((val3<15)&&(val4>15)&&(val3<val1)&&(val3<val2)) | ||
+ | Serial.print('l'); | ||
+ | if((val1<15)&&(val4<15)) | ||
+ | Serial.print('y'); | ||
+ | else if((val1<15)&&(val1<val4)&&(val4<val3)) | ||
+ | Serial.print('q'); | ||
+ | if((val4<15)&&(val3>15)&&(val4<val1)&&(val4<val2)) | ||
+ | Serial.print('r'); | ||
+ | if((val2<15)&&(val3<15)) | ||
+ | Serial.print('m'); | ||
+ | else if((val2<15)&&(val2<val3)&&(val3<val4)) | ||
+ | Serial.print('h'); | ||
+ | if((val2<15)&&(val4<15)) | ||
+ | Serial.print('n'); | ||
+ | else if((val2<15)&&(val2<val4)&&(val4<val3)) | ||
+ | Serial.print('h'); | ||
+ | if((val3<15)&&(val4<15)) | ||
+ | Serial.print('T'); | ||
+ | if((val1<15)&&(val2<15)) | ||
+ | Serial.print('T'); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int Ultrasonic_1(int distance_1) | ||
+ | { | ||
+ | digitalWrite(srfPin_1, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 | ||
+ | delayMicroseconds(2); //確保在發(fā)送高電平 | ||
+ | digitalWrite(srfPin_1, HIGH); //發(fā)送10微秒的高電平開始檢測 | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(srfPin_1, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 | ||
+ | pinMode(srfPin_1, INPUT); | ||
+ | duration_1 = pulseIn(srfPin_1, HIGH); //從URF02讀取脈沖 | ||
+ | distance_1 = duration_1/58; //除以58得到距離值 | ||
+ | return distance_1; | ||
+ | } | ||
+ | |||
+ | int Ultrasonic_2(int distance_2) | ||
+ | { | ||
+ | digitalWrite(srfPin_2, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(srfPin_2, HIGH); // 發(fā)送10微秒的高電平開始檢測 | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(srfPin_2, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 | ||
+ | pinMode(srfPin_2, INPUT); | ||
+ | duration_2 = pulseIn(srfPin_2, HIGH); //從URF02讀取脈沖 | ||
+ | distance_2 = duration_2/58; //除以58得到距離值 | ||
+ | return distance_2; | ||
+ | } | ||
+ | int Ultrasonic_3(int distance_3) | ||
+ | { | ||
+ | digitalWrite(srfPin_3, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(srfPin_3, HIGH); //發(fā)送10微秒的高電平開始檢測 | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(srfPin_3, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 | ||
+ | pinMode(srfPin_3, INPUT); | ||
+ | duration_3 = pulseIn(srfPin_3, HIGH); //從URF02讀取脈沖 | ||
+ | distance_3 = duration_3/58; //除以58得到距離值 | ||
+ | return distance_3; | ||
+ | } | ||
+ | int Ultrasonic_4(int distance_4) | ||
+ | { | ||
+ | digitalWrite(srfPin_4, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(srfPin_4, HIGH); //發(fā)送10微秒的高電平開始檢測 | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(srfPin_4, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 | ||
+ | pinMode(srfPin_4, INPUT); | ||
+ | duration_4 = pulseIn(srfPin_4, HIGH); //從URF02讀取脈沖 | ||
+ | distance_4 = duration_4/58; //除以58得到距離值 | ||
+ | return distance_4; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ====平臺(tái)端程序==== | ||
+ | <pre style="color:blue"> | ||
+ | void setup() | ||
+ | { | ||
+ | Serial.print('a'); | ||
+ | Serial.begin(115200); //設(shè)定波特率為115200 | ||
+ | pinMode(8,OUTPUT); //定義I3接口 | ||
+ | pinMode(9,OUTPUT); //定義I4接口 | ||
+ | pinMode(10,OUTPUT); //定義EB(PWM調(diào)速)接口 | ||
+ | pinMode(5,OUTPUT); //定義EA(PWM調(diào)速)接口 | ||
+ | pinMode(6,OUTPUT); //定義I2接口 | ||
+ | pinMode(7,OUTPUT); //定義I1接口 | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | switch(Serial.read()) | ||
+ | { | ||
+ | case 'h': Back(); break; | ||
+ | case 'q': Goahead(); break; | ||
+ | case 'l': Turn_left(); break; | ||
+ | case 'r': Turn_right(); break; | ||
+ | case 'T': Stop(); break; | ||
+ | case 'x': Goahead1(); break; | ||
+ | case 'y': Goahead2(); break; | ||
+ | case 'm': Back1(); break; | ||
+ | case 'n': Back2(); break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void Back()// | ||
+ | { | ||
+ | analogWrite(5,90); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,HIGH); | ||
+ | analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,HIGH); | ||
+ | } | ||
+ | void Back1()// | ||
+ | { | ||
+ | analogWrite(5,80); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,HIGH); | ||
+ | analogWrite(10,50); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,HIGH); | ||
+ | } | ||
+ | |||
+ | void Back2()// | ||
+ | { | ||
+ | analogWrite(5,50); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,HIGH); | ||
+ | analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,HIGH); | ||
+ | } | ||
+ | |||
+ | void Goahead()//前進(jìn) | ||
+ | { | ||
+ | analogWrite(5,90); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,LOW); | ||
+ | analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,LOW); | ||
+ | } | ||
+ | |||
+ | void Stop()//停止 | ||
+ | { | ||
+ | digitalWrite(6,HIGH); //使直流電機(jī)(左)制動(dòng) | ||
+ | digitalWrite(7,HIGH); | ||
+ | digitalWrite(8,HIGH); //使直流電機(jī)(右)制動(dòng) | ||
+ | digitalWrite(9,HIGH); | ||
+ | } | ||
+ | |||
+ | void Turn_right() //右轉(zhuǎn) | ||
+ | { | ||
+ | analogWrite(5,155); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,HIGH); | ||
+ | analogWrite(10,140); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,LOW); | ||
+ | } | ||
+ | |||
+ | void Turn_left()//左轉(zhuǎn) | ||
+ | { | ||
+ | analogWrite(5,140); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,HIGH); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,LOW); | ||
+ | analogWrite(10,155); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,HIGH); | ||
+ | } | ||
+ | void Goahead1()//前進(jìn) | ||
+ | { | ||
+ | analogWrite(5,130); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,LOW); | ||
+ | analogWrite(10,60); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,LOW); | ||
+ | } | ||
+ | void Goahead2()//前進(jìn) | ||
+ | { | ||
+ | analogWrite(5,60); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(7,LOW); | ||
+ | analogWrite(10,130); //輸入模擬值進(jìn)行設(shè)定速度 | ||
+ | digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) | ||
+ | digitalWrite(9,LOW); | ||
+ | } | ||
+ | </pre> | ||
+ | ==演示視頻== | ||
+ | [[File:4wd shou shi cao kong 01.png|400px|左|link=http://v.youku.com/v_show/id_XMzUyMTc4MDAw.html?from=y1.7-2]] | ||
+ | [[File:4wd ding ju 01.png|400px|居中|link=http://v.youku.com/v_show/id_XMzQyNzkwNzQw.html?from=y1.7-2]] | ||
+ | <br/> | ||
+ | |||
+ | ==產(chǎn)品相關(guān)推薦== | ||
+ | [[文件:erweima.png|230px|無框|右]] | ||
+ | ===產(chǎn)品購買地址=== | ||
+ | [https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-3667083713.35.qLHgXg&id=37406674173 AS-4WD超聲波手勢操控機(jī)器人]<br/> | ||
+ | ===周邊產(chǎn)品推薦=== | ||
+ | [http://lifestyle201.com/goods-407.html Arduino 4WD鋁合金移動(dòng)平臺(tái)車燈套件]<br/> | ||
+ | [http://lifestyle201.com/goods-185.html Arduino 光電碼盤 光電測速傳感器]<br/> | ||
+ | ===相關(guān)問題解答=== | ||
+ | [http://www.makerspace.cn/forum.php?mod=viewthread&tid=4875&highlight=4WD AS-4WD 碰撞機(jī)器人如何安裝]<br/> | ||
+ | [http://www.makerspace.cn/forum.php?mod=viewthread&tid=5473&fromuid=10780 4wd 紅外線巡線壁障車調(diào)試助手沒有反應(yīng)]<br/> | ||
+ | ===相關(guān)學(xué)習(xí)資料=== | ||
+ | [http://www.makerspace.cn/forum.php?mod=viewthread&tid=3953&fromuid=10780 視頻:機(jī)器人調(diào)試助手無線操控AS-4WD輪式機(jī)器人]<br/> | ||
+ | [http://v.youku.com/v_show/id_XMjgwMjk0NDE2.html 視頻:Arduino-4WD移動(dòng)機(jī)器人尋線功能演示]<br/> | ||
+ | [http://v.youku.com/v_show/id_XMjgwMjkyNDM2.html 視頻:Arduino-4WD移動(dòng)機(jī)器人碰撞功能演示]<br/> | ||
+ | [http://v.youku.com/v_show/id_XMjgwMjk4MjU2.html 視頻:Arduino-4WD移動(dòng)機(jī)器人追光功能演示]<br/> | ||
+ | [http://v.youku.com/v_show/id_XMjgwNTg5NTI4.html 視頻:Arduino-4WD移動(dòng)機(jī)器人尋線與避障功能演示]<br/> | ||
+ | [http://v.youku.com/v_show/id_XMzQyNzk2MzM2.html 視頻:Arduino-4WD移動(dòng)機(jī)器人偵測避障功能演示]<br/> | ||
+ | [http://v.youku.com/v_show/id_XNjQ2MDY0MDg=.html?from=y1.7-2 視頻:直流減速電機(jī)驅(qū)動(dòng)實(shí)例]<br/> | ||
+ | [http://www.makerspace.cn/portal.php 奧松機(jī)器人技術(shù)論壇]<br/> |
2015年10月22日 (四) 13:55的最后版本
目錄 |
產(chǎn)品概述
超聲波作為智能車避障的一種重要手段,以其避障實(shí)現(xiàn)便,計(jì)算簡單,易于做時(shí)控制,測量精度也能達(dá)到實(shí)用的要求,在未來汽車智能化進(jìn)程中必將得到廣泛。AS-4WD 超聲波手勢操控機(jī)器人采用4個(gè)RB-URF02 超聲波傳感器,對(duì)小車的方向進(jìn)行控制,并使用藍(lán)牙模塊進(jìn)行無線通信,實(shí)現(xiàn)無線控制4WD平臺(tái),本產(chǎn)品使用Carduino UNO控制器,此平臺(tái)設(shè)計(jì)可以配合各個(gè)版本Arduino,例如:Arduino Due、Arduino Mega2560等,同樣適合于樹莓派控制器,為開發(fā)帶來便利。產(chǎn)品為全鋁合金車體,結(jié)實(shí)耐用,四個(gè)馬達(dá)7.2V電壓獨(dú)立驅(qū)動(dòng),動(dòng)力強(qiáng)勁,結(jié)構(gòu)合理,便于擴(kuò)展;獨(dú)立散件包裝,讓您完全體驗(yàn)DIY的樂趣。
產(chǎn)品清單
技術(shù)參數(shù)
平臺(tái)參數(shù)
- 車輪直徑:65mm
- 車輪寬度:26mm
- 平臺(tái)長度:206mm
- 平臺(tái)寬度:200mm
- 平臺(tái)高度:65mm
- 平臺(tái)重量:620g
- 底盤距地面距離:13mm
平臺(tái)尺寸圖
直流減速電機(jī)(1:48)
- 驅(qū)動(dòng)電機(jī)齒輪箱減速比:1:48
- 無負(fù)載轉(zhuǎn)速(3V):168RPM
- 無負(fù)載轉(zhuǎn)速(6V):300RPM
- 無負(fù)載時(shí)電流(3V):90mA
- 無負(fù)載時(shí)電流(6V):100mA
- 扭矩大小 (3V): 0.04N.m
- 扭矩大小 (6V): 0.08N.m
- 尺寸大?。?0.50 mm×27.00 mm×23.00 mm(長×寬×高)
- 重量大小: 約30g
電控部分資料
Carduino UNO控制器
雙H橋電機(jī)驅(qū)動(dòng)板
雙H橋電機(jī)驅(qū)動(dòng)板相關(guān)資料及使用方法
傳感器擴(kuò)展板
V5.0傳感器擴(kuò)展板相關(guān)資料及使用方法
大按鈕模塊
藍(lán)牙模塊
超聲波傳感器
安裝步驟
步驟1:充電接口撥動(dòng)開關(guān)連接線制作
平臺(tái)安裝步驟
步驟1:平臺(tái)側(cè)板電機(jī)安裝
兩側(cè)電機(jī)安裝相同,注意安裝前將電機(jī)接線用電烙鐵焊接好,套上熱縮管加熱塑封。
使用零件:平臺(tái)側(cè)板*2個(gè)、直流減速電機(jī)*4個(gè)、M3*25螺絲*8個(gè)、M3六角螺母*8個(gè)
步驟2:平臺(tái)底板安裝
使用零件:步驟1中安裝好電機(jī)的側(cè)板*2套、平臺(tái)底板*1個(gè)、M3*6螺絲*4個(gè)
步驟3:雙H橋電機(jī)驅(qū)動(dòng)板安裝
驅(qū)動(dòng)板安裝方向隨意,注意同側(cè)電機(jī)接線方向順序,保證同側(cè)電機(jī)轉(zhuǎn)向是相同的。
使用零件:步驟2中的組合體、雙H橋直流電機(jī)驅(qū)動(dòng)板*1個(gè)、M3*10尼龍柱*4個(gè)、M3六角螺母*4個(gè)、M3*6螺絲*4個(gè)
步驟4:電池盒安裝
電池盒可用雙面膠固定,后輪電機(jī)接線需插入杜邦線帽,接入步進(jìn)電機(jī)接口
使用零件:電池盒*1個(gè)或鋰電池*1塊
步驟5:4WD端板安裝
使用零件:4WD端板*2個(gè)、步驟4中的組合體、M3*6螺絲*4個(gè)、M3六角螺母*4個(gè)
步驟6:充電接口、撥動(dòng)開關(guān)安裝
使用零件:步驟1中制作好的充電開關(guān)接口連接線、4WD上板
步驟7:Carduino UNO控制器安裝
使用零件:步驟6中的組合體、Carduino UNO控制器*1個(gè)、M3*10尼龍柱*3個(gè)、M3*6螺絲*3個(gè)、M3六角螺母*3個(gè)
步驟8:4WD上板安裝
使用零件:4WD平臺(tái)上板*1個(gè)、步驟5中的組合體*1套、M3*6螺絲*4個(gè)
步驟9:4WD輪子安裝
使用零件:步驟8中的組合體*1套、4WD輪子*4個(gè)
步驟10:V5.0傳感器擴(kuò)展板插入
使用零件:V5.0傳感器擴(kuò)展板*1個(gè)、步驟9中安裝好的平臺(tái)*1套
步驟11:藍(lán)牙模塊插入
注意:藍(lán)牙模塊插入前要對(duì)控制器進(jìn)行程序上傳,若插上藍(lán)牙模塊進(jìn)行程序上傳操作,會(huì)造成程序上傳不成功問題。
使用零件:步驟10中的組合體*1套、藍(lán)牙模塊*1個(gè)
整機(jī)測試
接線說明
- 數(shù)字口2→接超聲波
- 數(shù)字口10→接RB-421舵機(jī)
- 數(shù)字口5→接雙H橋驅(qū)動(dòng)板的EB
- 數(shù)字口6→接雙H橋驅(qū)動(dòng)板的I4
- 數(shù)字口7→接雙H橋驅(qū)動(dòng)板的I3
- 數(shù)字口8→接雙H橋驅(qū)動(dòng)板的I1
- 數(shù)字口9→接雙H橋驅(qū)動(dòng)板的I2
- 數(shù)字口11→接雙H橋驅(qū)動(dòng)板的EA
方向盤端制作
使用零件
- Carduino UNO 控制器*1個(gè)
- Arduino傳感器擴(kuò)展板 V5.0*1個(gè)
- 超聲波傳感器*4
- 大按鈕模塊*1
- 藍(lán)牙模塊*1
- 3P杜邦線*5
制作步驟
1.盤體制作:首先我們截取一塊邊長為20cm左右的正方形雪弗板(材料可自行選?。?。
2.大按鈕模塊固定:用螺絲將大按鈕模塊固定在雪弗板的中間位置用來啟動(dòng)方向盤。
3.超聲波傳感器固定:分別用螺絲將4個(gè)超聲波傳感器固定在雪弗板的4個(gè)直角上,用來識(shí)別手勢,超聲波與大按鈕模塊擺放如下圖所示,也可根據(jù)實(shí)際情況去擺放,一定要標(biāo)明方向。
方向盤接線
超聲波傳感器采用單線模式
- UP超聲波傳感器接數(shù)字口2,用于識(shí)別前進(jìn)的手勢。
- Down超聲波傳感器接數(shù)字口3,用于識(shí)別后退的手勢。
- Left超聲波傳感器接數(shù)字口4,用于識(shí)別左轉(zhuǎn)手勢。
- Right超聲波傳感器接數(shù)字口5,用于識(shí)別右轉(zhuǎn)手勢。
- 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。
測試程序
方向盤端程序
int Button=6; //定義Button為數(shù)字口6 int z; //定義變量z int b; int duration_1; //定義變量duration_1用來存儲(chǔ)脈沖 int distance_1; //定義變量distance_1用來存儲(chǔ)距離值 int srfPin_1 = 2; //定義srfPin_1為數(shù)字口2 int val1; int duration_2; //定義變量duration_2用來存儲(chǔ)脈沖 int distance_2; //定義變量distance_2用來存儲(chǔ)距離值 int srfPin_2 = 3; //定義srfPin_2為數(shù)字口3 int val2; int duration_3; //定義變量duration_3用來存儲(chǔ)脈沖 int distance_3; //定義變量distance_3用來存儲(chǔ)距離值 int srfPin_3 = 4; //定義srfPin_3為數(shù)字口4 int val3; int duration_4; //定義變量duration_4用來存儲(chǔ)脈沖 int distance_4; //定義變量distance_4用來存儲(chǔ)距離值 int srfPin_4 = 5; //定義srfPin_4為數(shù)字口5 int val4; void setup() { Serial.begin(115200); //設(shè)定波特率為115200 pinMode(srfPin_1,OUTPUT); //定義srfPin1為輸出模式 pinMode(srfPin_2,OUTPUT); //定義srfPin1為輸出模式 pinMode(srfPin_3,OUTPUT); //定義srfPin1為輸出模式 pinMode(srfPin_4,OUTPUT); //定義srfPin1為輸出模式 pinMode(Button,INPUT); //定義Button為輸入模式 } void loop() { if(LOW == digitalRead(Button)) b=1; else b=0; while(b) { val1=Ultrasonic_1(z); //前超聲波返回距離值賦值給val1 val2=Ultrasonic_2(z); //后超聲波返回距離值賦值給val2 val3=Ultrasonic_3(z); //左超聲波返回距離值賦值給val3 val4=Ultrasonic_4(z); //右超聲波返回距離值賦值給val4 if((val1>15)&&(val2>15)&&(val3>15)&&(val4>15)) Serial.print('T'); if((val1<15)&&(val3<15)) Serial.print('x'); else if((val1<15)&&(val1<val3)&&(val3<val4)) Serial.print('q'); if((val3<15)&&(val4>15)&&(val3<val1)&&(val3<val2)) Serial.print('l'); if((val1<15)&&(val4<15)) Serial.print('y'); else if((val1<15)&&(val1<val4)&&(val4<val3)) Serial.print('q'); if((val4<15)&&(val3>15)&&(val4<val1)&&(val4<val2)) Serial.print('r'); if((val2<15)&&(val3<15)) Serial.print('m'); else if((val2<15)&&(val2<val3)&&(val3<val4)) Serial.print('h'); if((val2<15)&&(val4<15)) Serial.print('n'); else if((val2<15)&&(val2<val4)&&(val4<val3)) Serial.print('h'); if((val3<15)&&(val4<15)) Serial.print('T'); if((val1<15)&&(val2<15)) Serial.print('T'); } } int Ultrasonic_1(int distance_1) { digitalWrite(srfPin_1, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 delayMicroseconds(2); //確保在發(fā)送高電平 digitalWrite(srfPin_1, HIGH); //發(fā)送10微秒的高電平開始檢測 delayMicroseconds(10); digitalWrite(srfPin_1, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 pinMode(srfPin_1, INPUT); duration_1 = pulseIn(srfPin_1, HIGH); //從URF02讀取脈沖 distance_1 = duration_1/58; //除以58得到距離值 return distance_1; } int Ultrasonic_2(int distance_2) { digitalWrite(srfPin_2, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 delayMicroseconds(2); digitalWrite(srfPin_2, HIGH); // 發(fā)送10微秒的高電平開始檢測 delayMicroseconds(10); digitalWrite(srfPin_2, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 pinMode(srfPin_2, INPUT); duration_2 = pulseIn(srfPin_2, HIGH); //從URF02讀取脈沖 distance_2 = duration_2/58; //除以58得到距離值 return distance_2; } int Ultrasonic_3(int distance_3) { digitalWrite(srfPin_3, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 delayMicroseconds(2); digitalWrite(srfPin_3, HIGH); //發(fā)送10微秒的高電平開始檢測 delayMicroseconds(10); digitalWrite(srfPin_3, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 pinMode(srfPin_3, INPUT); duration_3 = pulseIn(srfPin_3, HIGH); //從URF02讀取脈沖 distance_3 = duration_3/58; //除以58得到距離值 return distance_3; } int Ultrasonic_4(int distance_4) { digitalWrite(srfPin_4, LOW); //高電平觸發(fā)前發(fā)送2微秒的低電平 delayMicroseconds(2); digitalWrite(srfPin_4, HIGH); //發(fā)送10微秒的高電平開始檢測 delayMicroseconds(10); digitalWrite(srfPin_4, LOW); //等待脈沖返回前發(fā)送一個(gè)低電平 pinMode(srfPin_4, INPUT); duration_4 = pulseIn(srfPin_4, HIGH); //從URF02讀取脈沖 distance_4 = duration_4/58; //除以58得到距離值 return distance_4; }
平臺(tái)端程序
void setup() { Serial.print('a'); Serial.begin(115200); //設(shè)定波特率為115200 pinMode(8,OUTPUT); //定義I3接口 pinMode(9,OUTPUT); //定義I4接口 pinMode(10,OUTPUT); //定義EB(PWM調(diào)速)接口 pinMode(5,OUTPUT); //定義EA(PWM調(diào)速)接口 pinMode(6,OUTPUT); //定義I2接口 pinMode(7,OUTPUT); //定義I1接口 } void loop() { switch(Serial.read()) { case 'h': Back(); break; case 'q': Goahead(); break; case 'l': Turn_left(); break; case 'r': Turn_right(); break; case 'T': Stop(); break; case 'x': Goahead1(); break; case 'y': Goahead2(); break; case 'm': Back1(); break; case 'n': Back2(); break; } } void Back()// { analogWrite(5,90); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) digitalWrite(7,HIGH); analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) digitalWrite(9,HIGH); } void Back1()// { analogWrite(5,80); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) digitalWrite(7,HIGH); analogWrite(10,50); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) digitalWrite(9,HIGH); } void Back2()// { analogWrite(5,50); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) digitalWrite(7,HIGH); analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) digitalWrite(9,HIGH); } void Goahead()//前進(jìn) { analogWrite(5,90); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) digitalWrite(7,LOW); analogWrite(10,105); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) digitalWrite(9,LOW); } void Stop()//停止 { digitalWrite(6,HIGH); //使直流電機(jī)(左)制動(dòng) digitalWrite(7,HIGH); digitalWrite(8,HIGH); //使直流電機(jī)(右)制動(dòng) digitalWrite(9,HIGH); } void Turn_right() //右轉(zhuǎn) { analogWrite(5,155); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,LOW); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) digitalWrite(7,HIGH); analogWrite(10,140); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) digitalWrite(9,LOW); } void Turn_left()//左轉(zhuǎn) { analogWrite(5,140); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,HIGH); //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn) digitalWrite(7,LOW); analogWrite(10,155); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,LOW); //使直流電機(jī)(右)順時(shí)針轉(zhuǎn) digitalWrite(9,HIGH); } void Goahead1()//前進(jìn) { analogWrite(5,130); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) digitalWrite(7,LOW); analogWrite(10,60); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) digitalWrite(9,LOW); } void Goahead2()//前進(jìn) { analogWrite(5,60); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(6,HIGH); //使直流電機(jī)(左)順時(shí)針轉(zhuǎn) digitalWrite(7,LOW); analogWrite(10,130); //輸入模擬值進(jìn)行設(shè)定速度 digitalWrite(8,HIGH); //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn) digitalWrite(9,LOW); }
演示視頻
產(chǎn)品相關(guān)推薦
產(chǎn)品購買地址
周邊產(chǎn)品推薦
Arduino 4WD鋁合金移動(dòng)平臺(tái)車燈套件
Arduino 光電碼盤 光電測速傳感器
相關(guān)問題解答
AS-4WD 碰撞機(jī)器人如何安裝
4wd 紅外線巡線壁障車調(diào)試助手沒有反應(yīng)
相關(guān)學(xué)習(xí)資料
視頻:機(jī)器人調(diào)試助手無線操控AS-4WD輪式機(jī)器人
視頻:Arduino-4WD移動(dòng)機(jī)器人尋線功能演示
視頻:Arduino-4WD移動(dòng)機(jī)器人碰撞功能演示
視頻:Arduino-4WD移動(dòng)機(jī)器人追光功能演示
視頻:Arduino-4WD移動(dòng)機(jī)器人尋線與避障功能演示
視頻:Arduino-4WD移動(dòng)機(jī)器人偵測避障功能演示
視頻:直流減速電機(jī)驅(qū)動(dòng)實(shí)例
奧松機(jī)器人技術(shù)論壇