九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

Arduino智能避障小車避障程序

上傳人:痛*** 文檔編號:84785760 上傳時間:2022-05-04 格式:DOC 頁數(shù):27 大?。?65.50KB
收藏 版權(quán)申訴 舉報 下載
Arduino智能避障小車避障程序_第1頁
第1頁 / 共27頁
Arduino智能避障小車避障程序_第2頁
第2頁 / 共27頁
Arduino智能避障小車避障程序_第3頁
第3頁 / 共27頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Arduino智能避障小車避障程序》由會員分享,可在線閱讀,更多相關(guān)《Arduino智能避障小車避障程序(27頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、Arduino智能避障小車避障程序首先建立一個名為modulecar. ino的主程序。/ modulecar. ino,玩轉(zhuǎn)智能 小車主程序include /導入舵機庫include /導入 NwePing 庫/對照系統(tǒng)配線方案依次指定各I/OconstintENA=3;/左電機 PWMconstintINI=4;左電機正constintIN2=5;左電機負constintENB=6;/右電機 PWMconstintIN3=7;/右電機正constintIN4=8;/右電機負const int trigger = 9 ; /定義超聲波傳感器發(fā)射腳為D9 const int echo =10

2、; /定義傳感器接收腳為DIO const int max_read = 300; /設(shè)定傳感器最 大探測距離。int no_good二35; /*設(shè)定35cm警戒距離。int read_ahead; /實際距離讀數(shù)。Servo sensorStation; /設(shè)定傳感器平臺。NewPing sensor (trigger, echo, max_read) ; /設(shè)定傳感器引腳和最大讀數(shù)系統(tǒng)初始化void setup ()Serial, begin(9600) ; /啟用串行監(jiān)視器可以給調(diào)試帶來極大便利sensorStation. attach(ll); 把 Dll 分配給舵機pinMode(

3、ENA,OUTPUT) ; /依次設(shè)定各I/O屬性pinMode(INI,OUTPUT);pinMode (IN2,OUTPUT);pinMode(ENB,OUTPUT);pinMode (IN3,OUTPUT);pinMode (IN4,OUTPUT);pinMode(trigger, OUTPUT);pinMode(echo, INPUT);sensorStation. write (90) ; /舵機復位至 90?delay (6000); 上電等待6s后進入主循環(huán)/主程序void loop()read_ahead = readDistance() ; /調(diào)用 readDistanceO

4、 函數(shù)讀出前方距離Serial, printin(,?AHEAD:z,);Serial. println(read_ahead) ; /串行監(jiān)視器顯示機器人前方距離if (read_ahead JB, 118);digitalWrite(IN3, HIGH):digitalWrite(IN4, LOW);原地左轉(zhuǎn)void turnLeft ()Serial, printin (LEFT) ; /串行監(jiān)視器顯示機器人狀態(tài)為LEFT (向左轉(zhuǎn))左電機正轉(zhuǎn)analogWrite(ENA, 106);digitalWrite(INI, HIGH);digitalWrite(IN2, LOW);右電機正

5、轉(zhuǎn)analogWrite(ENB, 59); /*微調(diào)這個數(shù)值,使轉(zhuǎn)彎時內(nèi)側(cè)車輪起主導作用。相 當于讓小車向后打一把輪再拐彎。右轉(zhuǎn)同理digitalWrite(IN3, HIGH);digitalWr辻e(IN4, LOW):delay (205) : /*延遲,數(shù)值以毫秒為單位,調(diào)節(jié)此值可使機器人動作連貫原地右轉(zhuǎn)void turnRight()Serial, print In (RIGHT); 串行監(jiān)視器顯示機器人狀態(tài)為RIGHT (向右轉(zhuǎn))左電機反轉(zhuǎn)analogWrite(ENA, 53);digitalWrite(INI, LOW);digitalWrite(IN2, HIGH);右電機

6、反轉(zhuǎn)analogWrite (EJB, 118);digitalWr辻e(IN3, LOW):digitalWrite(IN4, HIGH);delay (205) : /*調(diào)節(jié)此值可使機器人動作連貫原地掉頭(暫時用不到)void turnAround()Serial. printlnCTURN 180); 串行監(jiān)視器顯示機器人狀態(tài)為TURN 180(原 地順時針旋轉(zhuǎn)180?)左電機反轉(zhuǎn)analogWrite(ENA, 106);digitalWr辻e(INl, LOW):digitalWrite(IN2, HIGH);右電機反轉(zhuǎn)analogWrite(ENB, 118);digitalWri

7、te(IN3, LOW):digitalWrite(IN4, HIGH);delay (500); /*/ ping, ino,測距模塊int readDistance()delay(30); /聲波發(fā)送間隔30ms,大約每秒探測33次。受系統(tǒng)所限,此值不 可小于29msint cm = sensor, ping () / US_ROUNDTRIP_CM; /把 Ping:值(口 s)轉(zhuǎn)換為 cmreturn (cm) ; /readDistance ()返回的數(shù)值是 cm最后是驅(qū)動云臺掃描并分析左右兩側(cè)距離的watch, ino模塊。/watch, ino,查看模塊void waTch()測

8、量右前方距離。/*注意舵機旋轉(zhuǎn)方向,SG5010為逆時針旋轉(zhuǎn)sensorStation. write (20) ; /*舵機右轉(zhuǎn)至20?。調(diào)節(jié)此值會影響傳感器掃描 區(qū)域,夾角越小,機器人轉(zhuǎn)彎越謹慎delay (1200) ; /延遲1. 2s待舵機穩(wěn)定int read_right = readDistance () : /調(diào)用 readDistance ()函數(shù)讀出右前方 距離Serial, print(RIGHT:”);Serial, printIn(read_right);/sensorStation. write (90) ; /*舵機復位至90度。廉價舵機大角度旋轉(zhuǎn)會 產(chǎn)生抖動,要加上

9、這兩行以求讀數(shù)準確。/delay (500); /延遲 0.5s/測量左前方距離sensorStation. write (160) ; /舵機左轉(zhuǎn)至 160?delay (1200); /延遲1.2s待舵機穩(wěn)定。int read_left = readDistance() ; /調(diào)用函數(shù)讀出距離左前方距離。Serial, print(LEFT:”);Serial, printin(read_left);sensorStation. write (90) ; /這一行確保只要小車處于行駛狀態(tài),傳感器就 面向正前方delay (500) ; /延遲 0.5s。/分析得出最佳行進路線。辻(read

10、_right read_left) /如果右前方距離比較大turnRight () : /就向右轉(zhuǎn),else turnLeft () : /否則就向左轉(zhuǎn)此處也可以加入另一層邏輯:如果左右兩側(cè)讀數(shù)相等就調(diào)用turnAround()原 地掉頭。但實際上觸發(fā)的兒率不大。2C 液晶測試程序,Ar du i no 版本 1. 5. 6r2, LiquidCrystal_I2C 庫版本 2. 0 / Iinclude 2#include /zLiquidCrystal_I2C. h 導入 IC 液晶庫2LiquidCrystal_I2C led (0x27, 16, 2); 設(shè)定 IC 地址及液晶屏參數(shù)

11、void setup ()led. init () ; /始化液晶屏led. backlight ();led. print (Hello, world!); /開始打印信息led. setCursor (3, 1) ; /設(shè)定顯示位置,第3列,第1行l(wèi)ed. print (ZANG. HAIBO) ; void loop ()前進void goForward()Serial, print In (FORWARD) ; /吊行監(jiān)視器顯示機器人狀態(tài)為FORWARD (前進) /左電機逆時針旋轉(zhuǎn)int vail = analogRead(AO) : /手動調(diào)整左電機轉(zhuǎn)速。電位器兩端分別接至+5V

12、和 GND,中心抽頭接至A0int leftSpeed = map (vall,0, 1023, 0, 255); /把讀數(shù)映射為 PWManalogWrite(ENA, leftSpeed): 寫入速度。下面的右電機同理 digitalWrite(INI, LOW);digitalWrite(IN2, HIGH):/右電機順時針旋轉(zhuǎn)int val2 = analogRead(Al);int rightSpeed = map (val2, 0, 1023, 0, 255);analogWrite(ENB, rightSpeed);digitalWr辻e(IN3, HIGH):digitalWr

13、ite(IN4, LOW); / ping, ino,紅外測距模塊/ trigger腳沿用D9, echo腳換成A3int readDistance()digitalWrite (trigger, HIGH) ; /點殼紅外發(fā)射管 delayMicroseconds (200) ; /給接收管留出200 P s響應時間IRvalue=analogRead(echo) ; /讀取自然光和紅外線下反射值的總和 digitalWrite (trigger, LOW) ; /關(guān)閉紅外發(fā)射管以讀取自然光下的反射值 delayMicroseconds (200) ; /留出 200 P s 響應時間IRv

14、alue=IRvalue-analogRead(echo): 刨除自然光得出實際值(紅外發(fā)射管產(chǎn)生的部分)return map(IRvalue, 120, 930, 30, 0) ; /用 map()函數(shù)把讀數(shù)轉(zhuǎn)換為距離IRGRgitaloD.CtiOJ8Dija4Z.加皿叩呵珂定:鈕*次fTE削它割I(lǐng) FCin4i |ircoutputPn-5; ”宜災逹產(chǎn)友ft!弓友口 TN3按S匚vnld 3fttu 卩()SQna.tgtnt3Suo)priMuje(iFpjPi! i.lhPUT)pnMneioirpurFin, OUTFUT),IvDd V30PI)V1 rd口姑* w:.ugtL

15、W乙b施罰!牡題找百麗說平磺決I眇QMEU他: Ldgit3Wfte::10廬俄1從的沈5=符;511紅11)uyilMv心何mi*丄偽*發(fā)辭由生怎二檢口廚h坤irr 6Mam& r-削|綸腳g-3|g high) if 劉鸚沖制何Ig:arc- hwc去訊;:耳膨呦iFRWWbS;(卩氐 也和r alpnrriniacurccj;的T出距奧 3代碼l:HC-SR04超聲波傳感器典型代碼digitalWr辻e(TrigPin, LOW):delayMicroseconds(2);digitalWrite (TrigPin, HIGH); 發(fā)送 10 P s 的高電平觸發(fā)信號delayMicro

16、seconds(10);digitalWrite(TrigPin, LOW);distance = pulseln(EchoPin, HIGH) *340/60/2; / 檢測脈沖寬度即為超聲波往返時間代碼2:簡易超聲波測距代碼const int TrigPin = 2;const int EchoPin = 3; /設(shè)定 SR04 連接的 Arduino 引腳float distance;void setup () /初始化串口通信及連接SR04的引腳Serial, begin (9600);pinMode(TrigPin, OUTPUT);/要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)

17、pinMode(EchoPin, INPUT);Seria 1. println(Ultrasonic sensor:);void loop() /產(chǎn)生一個10 P s的高脈沖去觸發(fā)TrigPindigitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW):/檢測脈沖寬度,并計算出距離distance = pulseln(EchoPin, HIGH) /58.00;Seria1. print(distance

18、);Serial, print (cm);Seria 1. println ();delay(1000);代碼3:具有溫度補償?shù)某暡y距代碼nclude itinclude /設(shè)定 SR04 連接的 Arduino 引腳const int TrigPin = 2;const int EchoPin = 3;float distance;float temperature_value: #define ONE_WIRE_BUS 4OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire);void setup() 初始化

19、串口通信及連接SRO4的引腳Serial, begin (9600);pinMode(TrigPin, OUTPUT):要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)pinMode(EchoPin, INPUT):sensors begin ();void loop() /產(chǎn)生一個10 p s的高脈沖去觸發(fā)TrigPinsensors requestTemperatures();temperature_value = sensorsgetTempCBylndex(O);Seria 1. print (temperature = ”);Seria1. print(temperaturevalu

20、e);Serial, print (,ZC ”);digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW):檢測脈沖寬度,并計算出距離distance = pulseln(EchoPin, HIGH) *(3314+0. 6*temperature_value)/2;Seria1. print(distance = ”);Seria1. print(distance);Serial, print (cm)

21、;Seria 1. printlnO ;delay(1000);代碼4:基于GP2D12的紅外測距系統(tǒng)代碼int i;float val;void setup () Serial, begin (9600);void loop() i=analogRead(A0);val二2547. 8/(float) i*0. 49-10.41)-0. 42;Seria 1. println(val, 2);ui”無.2E8S 口 i/藍牙遙控小車/Arduino源程序/定稿日期:2016-3-16程序功能簡介:/程序采用軟件PWM方式,控制兩支直流電機的運行行為,實現(xiàn)直行、后退、 左轉(zhuǎn)和右轉(zhuǎn)動作。/操作者

22、使用Android手機的藍牙功能發(fā)出指令,操控小車動作。/操作者還通過藍牙對小車的動作參數(shù)進行調(diào)試。/使用自定義串口收發(fā)數(shù)/使用軟件PW,輸出引腳可任意制定/使用Atmega48芯片/Arduio 版本 1. 0. 5#include #include include #include z/usart hunsigned int counter; /PWM 計數(shù)器 unsigned char wCnt = 0; /接收字計數(shù) unsigned int pwm_LH; /左電機高電平計數(shù) unsigned int pwm_RH; /右電機高電平計數(shù) unsigned char IDirect;

23、左電機運轉(zhuǎn)方向 unsigned char rDirect;/右電機運轉(zhuǎn)方向unsigned int LP = 0;unsignedintRP = 0;unsignedintLD 二 0;unsignedintRD = 0;unsignedintPWM6; 存放肖前PWM參數(shù)的整數(shù)型數(shù)組,全局變量unsignedchar inputString8; /存輸入數(shù)據(jù)字符串變量boolean stringComplete = false; /數(shù)據(jù)串結(jié)束標志/定時器2初始化函void timer2_init()cli();TCCR2B 二 0x00; /TCNT2 二 0xF6; /TCCR2A 二

24、0x00;TCCR2B = 0x02; /TIMSK2 = 0x01; /定時器2中斷允許sei ();定時器2中斷服務(wù)函數(shù)/PWM波形產(chǎn)生器ISR(TIMER2_0VF_vect)TCNT2 二 0xF6; /counter+;if(counter = 0x3ff)if (rDirect = 1)bitSet(PORTD,5);elsebitSet(PORTD,4);if (IDirect = 1)bitSet(PORTD,7);elsebitSet(PORTD,6);counter = 0;if(counter = pwm_RH)bitClear(PORTD, 4);bitClear(PO

25、RTD, 5);if(counter = pwm_LH)bitClear(PORTD, 6);bitClear(PORTD, 7);/電機運行函數(shù)void Move(unsigned int LS, unsigned charLD, unsigned int RS, unsignedchar RD)asm(,zBCLR 7) ; /關(guān)中斷 pwm_LH 二 LS;pwm_RH = RS;IDirect = LD;rDirect = RD;asm(BSET 7); /開中斷獲取EEPROM數(shù)據(jù)函數(shù)/功能:從EEPROM里順序讀出六個PWM參數(shù),存入PWM數(shù)組void GetDataOunsign

26、edcharbytes2; /暫時存放PWM參數(shù)的字節(jié)數(shù)組,全局變量unsignedchar1;unsignedcharj;unsignedchark;for(i = 0;i 6; i+) /for循環(huán),讀六個參數(shù)for (j二0;j 2;j+) 內(nèi)循環(huán),每次讀兩個字節(jié)k二i * 2 + 1 - j; /地址計算bytes j = EEPROM. read (k) : /EEPROM 讀操作= word (bytes0, bytesEl) ; /將讀出的兩個字節(jié)合成一個PWM整數(shù)數(shù)據(jù)/數(shù)據(jù)發(fā)送函數(shù)功能:將一個整數(shù)拆分成四個ASCII代碼,通過藍牙串口發(fā)出的函數(shù)。例如:整數(shù)784,將拆分成,7,

27、8,4四個字符void Number(int val)inttmp; /中間變量unsigned char i ; /循環(huán)計數(shù)變量 unsigned char buf 4 ; /存字符數(shù)組tmp= val / 1000;buf 0 = tmp + 0x30; /獲得千位val= val % 1000;tmp二 val / 100;buf1 = tmp + 0x30; /獲得百位val= val % 100;tmp二 val / 10;buf 2 = tmp + 0x30; /獲得十位val= val % 10;buf3 = val + 0x30; /獲得個位for(i = 0;i 4;i+)辻

28、(buf = 0x30) /從高位整理,如果是0,則轉(zhuǎn)換成空格。buf = 0x20;elsebreak;Usart_Transmit (buf 10) ; /通過藍牙串口連續(xù)發(fā)出四個字符。Usart_Transmi t(buf1);Usart_Transmit(buf2);Usart_Transmit(buf3);void setup () timer2_init ();Usart_Init(9600);sei();PORTD = 0x00;DDRD = OxFO;GetData () ; /初始化PWM參數(shù)void loop () unsigned char buf 6; /存連續(xù)字符的數(shù)

29、組 unsigned char index = 0: / 存索引值變量unsigned char i;unsigned char k;unsigned int para; 存 PWM 數(shù)據(jù)變量 delay (500);if (stringComplete = true) /分解手機傳過來的參數(shù) /格式是:#n%ddddk= 0; /其中:n為索引(地址);dddd為數(shù)據(jù)index = 0;for (i = 0;i = wCnt ;i+)if (inputString = %)index = inputStringil - 0x30; /獲得索引k = 0;elsebufk = inputStr

30、ing - 0x30: 獲得數(shù)據(jù)k+;para = 0;for (i = 0;i k-1;i+)para = para * 10 + buf;PWMindex = para; /將得到的整數(shù)參數(shù)立即存入對應的PWM數(shù)組單元,修 改當前運行參數(shù)buf 1 = lowByte(para) : /將整數(shù)轉(zhuǎn)換成兩個字節(jié)。bufEOZ = highByte(para);index = index * 2; 計算 EEPROM 地址EEPR0M. write (index, bufl); 寫入 EEPROM 低位在前index+;EEPROM, write (index, buf 0) ; /高位在后 s

31、tringComplete = false;wCnt = 0;ISR(USART_RX_vect)unsigned char commandO;inti;command = UDRO; /接收數(shù)據(jù)inputStringwCnt = command; wCnt+;if(command = 13) stringComplete = true;wCnt;else if (command = 10)stringComplete = false;wCnt = 0;switch (command) case :GetDataO ; /從EEPROM中讀出數(shù)據(jù)for (i = 0;i 6;i+)Number

32、 (PWM) ; /Android通過藍牙回傳,手機上會有顯示wCnt = 0;break;case #: 得到手機發(fā)回的修改參數(shù)數(shù)據(jù)break;case wf : /接收到wf ,前進LP = PWM0;RP = PWM1;LD = 1;RD = 1;wCnt 二 0;break;case x : /接收到x,后退LP = PWM0;RP = PWM1;LD = 0;RD = 0;wCnt = 0;break;case a : /接收到a,左轉(zhuǎn)LP = PWM2;RP 二 PWM3;LD = 0;RD = 1;wCnt = 0;break;case d : /接收到d,,右轉(zhuǎn)LP = PWM4;RP = PWM5;LD = 1;RD = 0;wCnt = 0;break;case s : /接收到s,停止電機LP = 0;RP = 0;LD = 1;RD = 1;wCnt = 0;break;default:LP = 0;RP = 0;LD = 1;RD = 1;Move (LP, LD, RP, RD) ;

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!