版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARDUINO基礎(chǔ)教程 智能車篇杭州電子科技大學(xué) 劉琦一、智能車相關(guān)的傳感器1、超聲波2、紅外尋線傳感器組件3、測速傳感器1、超聲波該超聲波測距模塊能提供 2cm-450cm 非接觸式感測距離,測距的精度可達 3mm,能很好的滿足我們正常的要求。該模塊包括超聲波發(fā)送器、接收器和相應(yīng)的控制電路。模塊工作原理簡介1、我們先拉低 TRIG,然后至少給 10us 的高電平信號去觸發(fā);2、觸發(fā)后,模塊會自動發(fā)射 8 個 40KHZ 的方波,并自動檢測是否有信號返回;3、如果有信號返回,通過 ECHO 輸出一個高電平,高電平持續(xù)的時間便是超聲波從發(fā)射到接收的時間。那么測試距離=高電平持續(xù)時間*340m/s
2、*0.5;int inputPin=4; /接超聲波 ECHO 到數(shù)字D4腳int outputPin=5; / 接超聲波 TRIG 到數(shù)字 D5腳void setup() Serial.begin(9600); pinMode(inputPin, INPUT); pinMode(outputPin, OUTPUT);void loop() digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); / 發(fā)出持續(xù)時間為 10 s到 trigger腳驅(qū)動超聲波檢測 delayMicrosec
3、onds(10); digitalWrite(outputPin, LOW); int distance = pulseIn(inputPin, HIGH); / 接收脈沖的時間 distance= distance/58; / 將脈沖時間轉(zhuǎn)化為距離值 Serial.println(distance); /輸出距離值(單位:厘米) delay(50);2、紅外尋線傳感器組件由三個尋線傳感器組成。背面L、C、R分別為左中右的信號輸出。int L=7; /左邊傳感器接第7腳int C=8; /中間傳感器接第8腳int R=9; /右邊傳感器接第9腳void setup()pinMode(L,INP
4、UT); /均設(shè)置為輸入 pinMode(C,INPUT); pinMode(R,INPUT); Serial.begin(9600); /串口波特率為9600void loop() if(digitalRead(L)=HIGH) Serial.print(“Left is White |”); /若測到高電平則輸出白色 else Serial.print(“Left is Black |”); /否則輸出黑色 if(digitalRead(C)=HIGH) Serial.print(Center is White |); else Serial.print(Center is Black |
5、); if(digitalRead(R)=HIGH) Serial.println(Right is White); else Serial.println(Right is Black); delay(200); /延時200MS方便觀察效果3、測速傳感器由兩路光折斷傳感器組成,碼盤鏤空的地方接收到高電平,碼盤遮斷的地方接收到低電平。該測速傳感器可以用來控制電機的恒速運行編程原理使用中斷引腳讀取計數(shù)。外部中斷引腳分別是數(shù)字引腳2和3. 傳感器上的OUT1和OUT2分別接上述引腳。將中斷函數(shù)設(shè)置為下降沿FALLING觸發(fā),(如果設(shè)置為CHANGE變化觸發(fā)的話,脈沖計數(shù)值除以2,才得到真實的脈沖
6、值)int OUT1=2; /int OUT2=3; /long c1=0,c2=0;void setup()attachInterrupt(0,COUNT1,FALLING); attachInterrupt(0,COUNT2,FALLING); Serial.begin(9600);void loop() Serial.print(LeftMotor is ); Serial.println(c1,DEC); Serial.print(RightMotor is ); Serial.println(c2,DEC); delay(200);void COUNT1() c1+;void COU
7、NT2() c2+;二、智能車相關(guān)的動力組件1、電池2、電源轉(zhuǎn)換芯片78053、舵機4、電機5、L298電機驅(qū)動芯片1、電池磷酸鐵鋰電池。每個電池滿電電壓為3.2V.3個電池可以組成9.6V,另一個電池用占位桶填充即可。2、電源穩(wěn)壓芯片7805電池電壓為9.6V,需要對電源進行轉(zhuǎn)換方可使用。Arduino板上自帶了5V和3.3V轉(zhuǎn)換芯片,以供給單片機和外設(shè)使用。由于舵機的功耗比較大,我們一般建議焊多一個7805專門給舵機供電,以保障不會干擾單片機的正常工作。電源模塊電路圖3、舵機舵機,故名思議,像船尾的舵那樣,只能轉(zhuǎn)動固定的角度,一般的舵機最大轉(zhuǎn)角約為180度。也有一些舵機能達到300度的。信
8、號線舵機原理將PPM信號,經(jīng)信號線傳輸。PPM信號的頻率是50HZ。寬度從0.5MS到2.5MS。舵機庫函數(shù)介紹調(diào)用Servo庫,創(chuàng)建一個舵機的對象來控制舵機該庫有幾個函數(shù)1、attach(pin); attach(pin,min,max);2、write(value);3、writeMicroseconds(us);4、detach(pin);5、read(pin);6、readMicroseconds(pin); SERVO函數(shù)attach(pin);該函數(shù)用于為舵機指定一個引腳。例句:Servo myservo1,myservo2;myservo1.attch(1);myservo2.a
9、ttch(2);attach(pin,min,max);該函數(shù)在指定引腳的同時,還可以指定最小角度的脈寬值,單位us,默認最小值為544,對應(yīng)最小角度為0度;默認最大值為2400,對應(yīng)最大角度為180度。例如:myservo1.attch(1,1000,2000);該語句限制在較小的轉(zhuǎn)動范圍。write(value)該函數(shù)可以直接填寫需要的角度。例如:myservo1.write(90);該函數(shù)精度較低,只能達到1度。writeMicroseconds(us);該函數(shù)精度較高,直接填寫脈沖值,單位是us.例如:myservo1.writeMicroseconds(1500);舵機指向90度。該
10、函數(shù)的角度精度為0.097度detch(pin);該函數(shù)用于釋放舵機引腳,可以作為其他用途。read(pin);該函數(shù)用于返回當前舵機的角度,范圍0180度readMicrosends(pin);該函數(shù)用于返回當前舵機的脈沖值,單位us,范圍在最大脈沖寬度和最小脈沖寬度之間。例程原理舵機信號線接數(shù)字腳3。例程1:用write()函數(shù),控制從0到180度來回的掃描,每次延時20ms,7.2秒完成來回掃動一次。例程2:用writeMicroseconds()函數(shù),控制從544脈沖掃描到2400脈沖,每次延時20ms,2分鐘內(nèi)完成掃動一次.舵機例程1#include /調(diào)用舵機函數(shù)庫Servo my
11、servo;int i;void setup() myservo.attach(5); /定義數(shù)字第5腳為舵機控制引腳void loop() for(i=0;i=0;i-) myservo.write(i); /寫入舵機角度 delay(20); 舵機例程2#include /調(diào)用舵機函數(shù)庫Servo myservo;int i;void setup() myservo.attach(5); /定義數(shù)字第5腳為舵機控制引腳void loop() for(i=544;i=544;i-) myservo.write(i); /寫入舵機脈沖值 delay(20); 4、電機電機帶減速裝置。工作電壓3
12、V12V,建議工作電壓6V9V減速比1:485、L298電機驅(qū)動芯片電機驅(qū)動控制部分電路圖 編程原理做雙路電機實現(xiàn)10秒加速,然后反轉(zhuǎn)減速10秒,并交替出現(xiàn)的程序。將數(shù)字7、8腳接L298模塊的的IN1和IN2腳,12、13腳接L298模塊的IN3和IN4腳。9和10腳分別接ENA和ENB腳。ENA控制MOTORA的轉(zhuǎn)速,ENB控制MOTORB的轉(zhuǎn)速。7、8腳控制MOTORA的正反轉(zhuǎn),12、13腳控制MOTORB的正反轉(zhuǎn)。#define IN1 3#define IN2 4#define IN3 6#define IN4 7#define PWMA 10 #define PWMB 11void
13、 setup()pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT);void loop() int i; for(i=0;i=255;i+) digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); analogWrite(PWMA,i); /寫入左電機速度值 digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(PWMB,i); /寫入左電機速度值 delay(40); analo
14、gWrite(PWMA,0); /停轉(zhuǎn) analogWrite(PWMB,0); /停轉(zhuǎn)delay(2000); /停轉(zhuǎn)2秒 for(i=0;i=255;i+) digitalWrite(IN1,LOW); /改變電機轉(zhuǎn)的方向 digitalWrite(IN2,HIGH); /改變電機轉(zhuǎn)的方向 analogWrite(PWMA,i); /寫入左電機速度值 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(PWMB,i); /寫入左電機速度值 delay(40); 三、綜合編程實例1、超聲波避障小車2、紅外尋線小車1、超聲波避障
15、小車編程原理由舵機帶動超聲波傳感器轉(zhuǎn)動,分別檢測前方,左邊和右邊3個方向的是否有障礙物。若前方障礙物大于25厘米則前進,若前方有障礙物,則轉(zhuǎn)動,檢測左右的障礙物,哪邊的空間大,則往哪邊轉(zhuǎn)動。示范例程#include /包含舵機的庫函數(shù)int IN4=8; / 定義數(shù)字第8腳 接右邊的MOTOR方向控制位IN4int IN3=9; /定義數(shù)字第9腳 接右邊的MOTOR方向控制位IN3int IN2=10; / 定義數(shù)字第8腳 接左邊的MOTOR方向控制位IN2 int IN1=11; / 定義數(shù)字第8腳 接左邊的MOTOR方向控制位IN1int MotorA=5; / PWMA引腳定義為數(shù)字5腳
16、int MotorB=6; / PWMB引腳定義為數(shù)字6腳int Lspeed=100; /此處可以改速度,盡量讓車子走成直線int Rspeed=100; /此處可以改速度,盡量讓車子走成直線int inputPin = 13; / 定義超音波信號ECHO接收腳int outputPin =12; / 定義超音波信號發(fā)射TRIG腳float Fdistance = 0; / 前方的障礙物距離float Rdistance = 0; / 右邊障礙物的距離float Ldistance = 0; / 左邊障礙物的距離int directionn = 0; / 前=8 後=2 左=4 右=6 Se
17、rvo myservo; / 創(chuàng)建Servo的對象int delay_time = 250; / 舵機轉(zhuǎn)向后穩(wěn)定的時間int Fgo = 8; / 定義前進的數(shù)值int Rgo = 6; / 定義右轉(zhuǎn)的數(shù)值int Lgo = 4; / 定義左轉(zhuǎn)的數(shù)值int Bgo = 2; / 定義倒車的數(shù)值void setup() Serial.begin(9600); / 定義串口輸出的波特率 pinMode(IN4,OUTPUT); / 定義為輸出,下面相同 pinMode(IN3,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN1,OUTPUT); pinMode(Mo
18、torA,OUTPUT); pinMode(MotorB,OUTPUT); pinMode(inputPin, INPUT); / 定義超音波輸入引腳 pinMode(outputPin, OUTPUT); / 定義超音波輸出引腳 myservo.attach(4); / 定義舵機輸出為第4腳(PPM信號) 前進的代碼void advance(int a) / 前進 digitalWrite(IN2,LOW); digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed+30); digitalWrite(IN4,LOW); digitalWrite(I
19、N3,HIGH); analogWrite(MotorA,Lspeed+30); delay(a * 100); /前進的時間可以通過和參數(shù)相乘得出 右轉(zhuǎn) (單輪模式)void right(int b) /右轉(zhuǎn)(單輪模式) digitalWrite(IN2,HIGH); /右輪向后面轉(zhuǎn) digitalWrite(IN1,LOW); analogWrite(MotorB,Rspeed); digitalWrite(IN4,HIGH); /左輪不動 digitalWrite(IN3,HIGH); analogWrite(MotorA,Lspeed); delay(b * 100); /前進的時間可
20、以通過和參數(shù)相乘得出 左轉(zhuǎn)(單輪模式)void left(int c) /左轉(zhuǎn)單輪模式 digitalWrite(IN2,HIGH); /右邊的電機停轉(zhuǎn) digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed); digitalWrite(IN4,HIGH); /左邊的電機后退 digitalWrite(IN3,LOW); analogWrite(MotorA,Lspeed); delay(c * 100); 右轉(zhuǎn)(雙輪模式)void turnR(int d) /右轉(zhuǎn)(雙輪模式) digitalWrite(IN2,HIGH); /右輪后退 digit
21、alWrite(IN1,LOW); analogWrite(MotorB,Rspeed); digitalWrite(IN4,LOW); digitalWrite(IN3,HIGH); /左輪前進 analogWrite(MotorA,Lspeed); delay(d * 100); 左轉(zhuǎn)(雙輪模式)void turnL(int e) /左轉(zhuǎn)(雙輪模式 digitalWrite(IN2,LOW); digitalWrite(IN1,HIGH); /使右電機前進 analogWrite(MotorB,Rspeed); digitalWrite(IN4,HIGH); /使左輪后退 digitalW
22、rite(IN3,LOW); analogWrite(MotorA,Lspeed); delay(e * 100); 停止void stopp(int f) /停止 digitalWrite(IN2,HIGH); digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed); digitalWrite(IN4,HIGH); digitalWrite(IN3,HIGH); analogWrite(MotorA,Lspeed); delay(f * 100); 后退void back(int g) /后退 digitalWrite(IN2,HIGH); /右
23、電機后退 digitalWrite(IN1,LOW); analogWrite(MotorB,Rspeed+30); digitalWrite(IN4,HIGH); /左電機后退 digitalWrite(IN3,LOW); analogWrite(MotorA,Lspeed+30); delay(g * 100); void detection() /測量3個角度(5.90.177) delay_time = 250; / 舵機轉(zhuǎn)向后的穩(wěn)定時間 ask_pin_F(); / 讀取前方的距離 if(Fdistance 10) / 假如前方距離小于10cm stopp(1); / 停止0.1秒
24、back(2); / 后退 0.2秒 if(Fdistance Rdistance) /假如左邊的距離大于右邊的距離 directionn = Lgo; /向左邊轉(zhuǎn) if(Ldistance = Rdistance) /假如右邊距離大于等于左邊的距離 directionn = Rgo; /向右邊走 if (Ldistance 10 & Rdistance 10) /假如左邊距離和右邊距離都小于10CM directionn = Bgo; /向后退 else /假如前方大于25CM directionn = Fgo; /向前走 超聲波向前方探測void ask_pin_F() / 量出前
25、方距離 myservo.write(90); /舵機指向中間 delay(delay_time); /舵機穩(wěn)定時間 Fdistance = Sonar(); / 讀取距離值 Serial.print(“F distance:”); /用串口輸出距離值 Serial.println(Fdistance); /顯示距離 超聲波向左探測void ask_pin_L() / 量出左邊的距離 myservo.write(177); /舵機轉(zhuǎn)向177度,左邊 delay(delay_time); Ldistance = Sonar(); / 讀出距離值 Serial.print(“L distance:”
26、); /輸出距離 Serial.println(Ldistance); 超聲波向右探測void ask_pin_R() / 量出右邊距離 myservo.write(5); /舵機轉(zhuǎn)向右邊,5度 delay(delay_time); Rdistance =Sonar(); / 讀差相差時間 Serial.print(“R distance:”); /輸出距離 Serial.println(Rdistance); 超聲波探測函數(shù)float Sonar() float m; digitalWrite(outputPin, LOW); / 讓超聲波TRIG引腳維持低電平2s delayMicrose
27、conds(2); digitalWrite(outputPin, HIGH); / 讓超聲波TRIG引腳維持10s的高電平 delayMicroseconds(10); digitalWrite(outputPin, LOW); / 保持超聲波第電平 m=pulseIn(inputPin, HIGH); / 讀取時間差 m=m/58; / 將時間轉(zhuǎn)為距離值(單位:厘米) return m; /返回距離值void loop() myservo.write(90); /每次主函數(shù)循環(huán),先讓舵機回中。 detection(); /測量3個角度的距離值,判斷往哪個方向走 if(directionn
28、= Bgo) /假如方向為2,倒車 back(8); / 倒車 turnL(1); /微向左轉(zhuǎn),防止卡死 Serial.print(“ Reverse ”); /顯示后退 if(directionn = Rgo) /假如方向為 6(右轉(zhuǎn)) back(2); turnR(4); / 右轉(zhuǎn),調(diào)整該時間可以獲得不同的轉(zhuǎn)彎效果 Serial.print(“ Right ”); /顯示左轉(zhuǎn) if(directionn = Lgo) /假如方向為4,左轉(zhuǎn) back(2); turnL(4); / 左轉(zhuǎn),調(diào)整該時間可以得到不同的轉(zhuǎn)彎效果 Serial.print(“ Left ”); /顯示右轉(zhuǎn) if(di
29、rectionn = Fgo) /假如方向為9,前進 advance(1); / 正常前進 Serial.print(“ Advance ”); /顯示方向前進 Serial.print( ); 2、紅外尋線小車尋找并沿著地面黑線自動前進的小車編程原理利用三組避障傳感器,讀取地面顏色,如果是白色則輸出高電平,黑色輸出低電平。將三組傳感器的值合并,用于判斷黑線在左邊,右邊還是在中間。在中間直行,檢測在左邊則向左轉(zhuǎn),右邊則向右轉(zhuǎn),以保持黑線在中間。狀態(tài)真值表注意:檢測到黑線是低電平,白色是高電平111全白,沖出跑道110黑線在最右邊100黑線在右邊和中間101黑線在中間011黑線在最左邊001黑線
30、在左邊和中間000全黑,整個傳感器在黑線上010異常,這種情況不可能發(fā)生例程int IN4=8; / 定義數(shù)字第8腳 接右邊的MOTOR方向控制位IN4int IN3=9; /定義數(shù)字第9腳 接右邊的MOTOR方向控制位IN3int IN2=10; / 定義數(shù)字第8腳 接左邊的MOTOR方向控制位IN2 int IN1=11; / 定義數(shù)字第8腳 接左邊的MOTOR方向控制位IN1int MotorA=5; / PWMA引腳定義為數(shù)字5腳int MotorB=6; / PWMB引腳定義為數(shù)字6腳int Lspeed=100; /此處可以改速度,盡量讓車子走成直線int Rspeed=100;
31、/此處可以改速度,盡量讓車子走成直線int IR1=14; /左尋線傳感接 A0 當數(shù)字端口 D14使用int IR2=15; /中間尋線傳感接 A1 當數(shù)字端口 D15使用int IR3=16; /右邊尋線傳感接 A2 當數(shù)字端口 D16使用int temp=0; /臨時變量,用于存儲上一次的狀態(tài)設(shè)置部分void setup() Serial.begin(9600); / 定義串口輸出的波特率 pinMode(IN4,OUTPUT); / 定義為輸出,下面相同 pinMode(IN3,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN1,OUTPUT); pin
32、Mode(MotorA,OUTPUT); pinMode(MotorB,OUTPUT); pinMode(IR1, INPUT); / 定義為尋線傳感輸出,下面相同 pinMode(IR2, INPUT); pinMode(IR3, INPUT); 前進模塊void advance(int a) / 前進 digitalWrite(IN2,LOW); digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed); digitalWrite(IN4,LOW); digitalWrite(IN3,HIGH); analogWrite(MotorA,Lspee
33、d); delay(a * 20); /前進的時間可以通過和參數(shù)相乘得出 右轉(zhuǎn)模塊void right(int b) /右轉(zhuǎn)(單輪模式) digitalWrite(IN2,HIGH); /右輪不動 digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed); digitalWrite(IN4,LOW); /左輪前進,和超聲波車不同 digitalWrite(IN3,HIGH); analogWrite(MotorA,Lspeed); delay(b * 20); /前進的時間可以通過和參數(shù)相乘得出 左轉(zhuǎn)模塊void left(int c) /左轉(zhuǎn)單輪模式 digitalWrite(IN2,LOW); /右邊輪子前進 digitalWrite(IN1,HIGH); analogWrite(MotorB,Rspeed); digitalWrite(IN4,HIGH); /左邊的電機停轉(zhuǎn) digitalWrite(IN3,HIG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)村集體土地流轉(zhuǎn)居間服務(wù)協(xié)議4篇
- 2025年度大米產(chǎn)業(yè)鏈信息化建設(shè)合作協(xié)議8篇
- 二零二五版城市軌道交通運營維護合同4篇
- 二零二五年度跨境電商平臺授權(quán)經(jīng)營合同4篇
- 2025年度大理石石材產(chǎn)業(yè)技術(shù)創(chuàng)新合作合同4篇
- 2025年度影視作品版權(quán)轉(zhuǎn)讓合同范本:二零二五版電影版權(quán)交易協(xié)議4篇
- 二零二五年度超聲刀美容儀器維修保養(yǎng)與銷售合同2篇
- 2025年度建筑工程施工人員培訓(xùn)與就業(yè)服務(wù)合同4篇
- 2025年鈦金項鏈項目投資可行性研究分析報告
- 2025年度城際公交客運服務(wù)合同書-區(qū)域間公共交通合作協(xié)議3篇
- 河北省大學(xué)生調(diào)研河北社會調(diào)查活動項目申請書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領(lǐng)導(dǎo)力
- 企業(yè)人員組織結(jié)構(gòu)圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術(shù)簡介 - 文字版(1)(2)課件
- 實習(xí)證明模板免費下載【8篇】
- 復(fù)旦大學(xué)用經(jīng)濟學(xué)智慧解讀中國課件03用大歷史觀看中國社會轉(zhuǎn)型
- 案件受理登記表模版
- 2022年浙江省嘉興市中考數(shù)學(xué)試題(Word版)
- 最新焊接工藝評定表格
評論
0/150
提交評論