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

Arduino智能避障小車避障程序匯編

上傳人:簡****9 文檔編號:24885964 上傳時間:2021-07-15 格式:DOCX 頁數(shù):13 大?。?7.08KB
收藏 版權(quán)申訴 舉報 下載
Arduino智能避障小車避障程序匯編_第1頁
第1頁 / 共13頁
Arduino智能避障小車避障程序匯編_第2頁
第2頁 / 共13頁
Arduino智能避障小車避障程序匯編_第3頁
第3頁 / 共13頁

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

10 積分

下載資源

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

資源描述:

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

1、首先建立一個名為modulecai.ino的主程序。/ modulecar.iiio,玩轉(zhuǎn)智能小車主程序*include /導(dǎo)入舵機(jī)庫#iiiclude 導(dǎo)入 NwePmg 庫/對照系統(tǒng)配線方案依次指定各I/Oconst mt ENA = 3 ; /左電機(jī) PWMconst int INI = 4 ; 左電機(jī)正const mt IN2 = 5 ; 左電機(jī)負(fù)const mt ENB = 6 ; 右電機(jī) PWMconst mt IN3 = 7 ”右電機(jī)正const mt IN4 = 8 ”右電機(jī)負(fù)const mt trigger = 9 ; 定義超聲波傳感器發(fā)射腳為D9const int echo

2、 = 10 ; /定義傳感器接收腳為D10const int maxead = 300; 設(shè)定傳感器最大探測距離。int no_good = 35; /* 設(shè)定 35cm 警戒距離。int read_aliead; 實際距離讀數(shù)。Seivo sensoiStation; 設(shè)定傳感器平臺。NewPmg sensor(tngger, echo, maxead); 設(shè)定傳感器弓|腳和最大讀數(shù) 系統(tǒng)初始化void setupQ(Senal.begin(9600); 啟用串行監(jiān)視器可以給調(diào)試帶來極大便利sensorStation.attach(l 1); /IE Dll 分配給舵機(jī)pmMode(ENA,

3、 OUTPUT); 依次設(shè)定各 I O 屬性puiMode(INl, OUTPUT);puiMode(IN2, OUTPUT);pmMode(ENB, OUTPUT);puiMode(IN3, OUTPUT);puiMode(IN4, OUTPUT);puiMode(Uigger, OUTPUT);puiMode(echo, INPUT);sensorStation.wnte(90); 舵機(jī)更位至 90 1delay(6000); 上電等待6s后進(jìn)入主循環(huán)主程序void loopQ(read_aliead = readDistanceO; 調(diào)用 readDistance。函數(shù)讀出前方距離Ser

4、ial.printlii(H AHEAD:);Senal.pnntln(read_ahead); 串行監(jiān)視器顯示機(jī)器人前方距離if (read_aliead readeft) 如果右前方距離比較大(nmiRight(); 就向右轉(zhuǎn),else tinnLeftO; 否則就向左轉(zhuǎn)此處也可以加入另一層邏輯:如果左右兩側(cè)讀數(shù)相等就調(diào)用mniAroundO原地掉頭。但 實際上觸發(fā)的幾率不大。/ FC 液晶測試程序,Aiduiiio 版本 L5.6-r2, LiquidCiystal_I2C 庫版本 2.0#mclude #mclude LiquidCrystal_I2C.h 導(dǎo)入 I2C 液晶庫Liqu

5、idCrystal_DC lcd(0x27,16,2); 設(shè)定 I2C 地址及液晶屏參數(shù) void setupQIcd.uutQ; /始化液晶屏Icd.backlightQ;lcd.piint(HeUo, world!1); 開始打印信息lcd.setCursor(3,l);設(shè)定顯示位置,第3列,第1行 lcd.pnnt(nZANG.HAIBOH);void loop()()前進(jìn)void goForwaid。Serial.pnndn(FORWARD) 串行監(jiān)視器顯示機(jī)器人狀態(tài)為FORWARD (前進(jìn)) 左電機(jī)逆時針旋轉(zhuǎn)mt vail = analogRead(AO); 手動調(diào)整左電機(jī)轉(zhuǎn)速。電位

6、器兩端分別接至+5V和GND, 中心抽頭接至A0mt leftSpeed = map(vallQ1023,0,255); /把讀數(shù)映射為 PWM analogWrite(ENA,left Spued); 寫入速度。卜.面的右電機(jī)同理 digitalWnte(INl, LOW);digitalWnte(IN2, HIGH);/右電機(jī)順時針旋轉(zhuǎn)mt val2 = analogRead(Al);mt rightSpeed = map(val2.0,1023.0,255);analogWnte(ENB4ightSpeed);digitalWnte(IN3, HIGH);digitalWnte(IN4,

7、 LOW);/ping.mo,紅外測距模塊山gge腳沿用D9, echo腳換成A3int readDistanceQdigitalWHte(tngger,HIGH); 點亮紅外發(fā)射管dulayMiciosecondsQOO); 給接收管留出200 u s響應(yīng)時間IRvalue=analogRead(echo); 讀取自然光和紅外線下反射值的總和 digitalWrite(trigger,LOW); 關(guān)閉紅外發(fā)射管以讀取自然光下的反射值 dulayMiciosecondsQOO);留出 200 us 響應(yīng)時間IRvalue=IRvalue-aiialogRead(echo); /刨除自然光得出實

8、際值(紅外發(fā)射管產(chǎn)生的部 分)return niap(IRvalue, 120.930,30.0); /ffl map()函數(shù)把讀數(shù)轉(zhuǎn)換為距離)超聲波模塊SR04與Arduino連接:TRIG接Digital 5口,觸發(fā)測距;ECHO接Digital 4口,接收距離信號。程序代碼:intinputPin=4;定義超聲波信號接收接口 ECHO接4口 int outputPin=5; /定義超聲波信號發(fā)出接口 TRIG接5口 void setup() (Serial.begin(9600);pinMode(inputPin. INPUT);pinMode(outputPin. OUTPUT);)

9、void loop()(u fdigitalWrite(outputPin, LOW);/便發(fā)出發(fā)命超聲波信號接口低電平2ps , I*.delayMicroseconds(2);digitalWrite(outputPin. HIGH); 使發(fā)出發(fā)出超聲波信號接口高電平1叩s,這里是至少 delayMicroseconds(10);digitalWrite(outputPin, LOW); /保持發(fā)出超聲波信號接口低電平 int distance = pulseln(inputPin. HIGH); 讀出脈沖時間 distance= distance/58; /將脈沖時間轉(zhuǎn)化為距離(單位:厘

10、米) Serial .println(dlstance); /隔出距離值 delay(50);代碼1: HC-SR04超聲波傳感器典型代碼digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWnte(TngPin. HIGH);發(fā)送10 ms的高電平觸發(fā)信號delayMicroseconds( 10);digitalWrite(TrigPin, LOW);distance - pukeIn(EchoPin, HIGH廣340/60/2; 檢測脈沖寬度即為超聲波往返時間代碼2:簡易超聲波測距代碼const int TrigPin - 2;

11、const int EchoPni - 3; 設(shè)定 SR04 連接的 Arduino 引腳 float distance;void setupQ 初始化串口通信及連接SR04的引腳Serial.begin(9600);pmMode(TngPin, OUTPUT);/要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài) pinMode(EchoPm. INPUT);Senal.prmtln(uUltrasomc sensor:*);void loop() 產(chǎn)生一個10 us的高脈沖去觸發(fā)TngPmdigitalWrite(TrigPin, LOW);delayMicroseconds(2);digi

12、talWrite(TrigPin, HIGH);delayMicroseconds( 10);digitalWrite(TrigPin, LOW);/檢測脈沖寬度,并計算出距離distance - pulseIn(EchoPin. HIGH) /58.00;Serial.prmt(distance);Serial.prmt(Mcm,r);Senal.printlnO; delay(1000);代碼3:具有溫度補(bǔ)償?shù)某暡y距代碼ffinclude ffinclude 設(shè)定SR04連接的Aidumo引腳const int TrigPin - 2;const int EchoPin - 3;flo

13、at distance;float temperanue_value:ffdefine ONE_WIRE_BUS 4OneWire oneWire(ONE_WIRE_BUS);DallasTempeiature sensors(&oneWue);void setupQ 初始化串口通信及連接SR04的引腳Serial.begin(9600);pmMode(TngPin, OUTPUT);要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài) pinMode(EchoPm. INPUT);sensors.beginQ;void loop() 產(chǎn)生一個10 us的高脈沖去觸發(fā)TngPm sensors.i

14、equestTeinpeiatures();teinperature_value - sensois.getTeixipCByliidex(O);Seiial.prmt(Mtemperauue -);Sei ial.priiit(temperatui e_value);Serial.print(HC ”);digitalVrite(TiigPin, LOW);delayMicioseconds(2);digitalVrite(TiigPin, HIGH);delayMici oseconds( 10);digitalVrite(TiigPin, LOW);檢測脈沖寬度,并計算出距離distan

15、ce - pulseIn(EchoPm. HIGH) *(331.4+0.6*temperatuie_value)/2;Serial.print(Mdistance - );Seiial.priiit(distance);Seiial.pnnt(”cm);Seiial.prmtlnQ;delay(lOOO);代碼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;Serial.print

16、ln(val/2);藍(lán)牙遙控小車/Arduino源程序定稿口期:2016-3-16程序功能簡介:程序采用軟件PWM方式,控制兩支直流電機(jī)的運行行為,實現(xiàn)直行、后退、左轉(zhuǎn)和右轉(zhuǎn) 動作。操作者使用Android 機(jī)的藍(lán)牙功能發(fā)出指令,操控小車動作。操作者還通過藍(lán)牙對小車的動作參數(shù)進(jìn)行調(diào)試。使用自定義串口收發(fā)數(shù)據(jù)使用軟件PWM,輸出引腳可任意制定使用Atmega48芯片/Arduio 版本 1.0.5#include #include include #include usart.hunsigned int counter; /PWM 計數(shù)器unsigned char wCnt = 0; 接收字計數(shù)

17、unsigned int pwm_LH;左電機(jī)高電平計數(shù)unsigned int pwm_RH;右電機(jī)高電平計數(shù)unsigned char IDirect; 左電機(jī)運轉(zhuǎn)方向unsigned char rDirect; 右電機(jī)運轉(zhuǎn)方向unsigned int LP = 0;unsigned int RP = 0;unsigned int LD = 0;unsigned int RD = 0;unsigned int PWM6;存放當(dāng)前PWM參數(shù)的整數(shù)型數(shù)組,全局變量unsigned char inputString8;/存輸入數(shù)據(jù)字符串變量boolean stringComplete = fal

18、se; / 數(shù)據(jù)串結(jié)束標(biāo)志定時器2初始化函數(shù)void timer2Jnit()(cli();TCCR2B = 0x00; /TCNT2 = 0xF6; /TCCR2A = 0x00;TCCR2B = 0x02; /TIMSK2 = 0x01; 定時器2中斷允許sei();)定時器2中斷服務(wù)函數(shù)/PWM波形產(chǎn)生器ISR(TIMER2_OVF_vect)TCNT2 = 0xF6; / counter+;if(counter = Ox3ff)if (rDirect = 1)bitSet(P0RTDz5);elsebitSet(P0RTD,4);if (IDirect = 1)bitSet(P0RTD

19、,7);elsebitSet(P0RTD,6);counter = 0;if(counter = pwm_RH)bitClearfPORTD);bitClearfPORTD);if(counter = pwm_LH)bitClearfPORTD);bitClearfPORTDJ);)電機(jī)運行函數(shù)void Move(unsigned int LS,unsigned charLD,unsigned int RS,unsigned char RD) (asm(BCLR7); 關(guān)中斷pwm_LH = LS;pwm_RH = RS;IDirect = LD;rDirect = RD;asm(”BSET7

20、”); 開中斷)獲取EEPROM數(shù)據(jù)函數(shù)功能:從EEPROM里順序讀出六個PWM參數(shù),存入PWM數(shù)組void GetData()(unsigned char bytes2; 暫時存放PWM參數(shù)的字節(jié)數(shù)組,全局變量 unsigned char i;unsigned char j;unsigned char k;for(i = 0;i 6;i+)/for 循環(huán),讀六個參數(shù)for (j = 0;j 2;j+) 內(nèi)循環(huán),每次讀兩個字節(jié) k = i*2 + l-j;地址計算bytes。 = EEPROM.read(k); /EEPROM 讀操作PWM = word(bytes0, bytesl);將讀出

21、的兩個字節(jié)合成一個PWM整數(shù)數(shù)據(jù))數(shù)據(jù)發(fā)送函數(shù)功能:將一個整數(shù)拆分成四個ASCH代碼,通過藍(lán)牙串口發(fā)出的函數(shù)。例如:整數(shù)784,將拆分成;二7,8:星四個字符void Numberfint val)(inttmp;中間變量unsigned char i;/循環(huán)計數(shù)變量unsigned char buf4;存字符數(shù)組tmp= val/1000;bufO = tmp + 0x30; 獲得千位val= val % 1000;tmp= val/100;bufl = tmp + 0x30; 獲得百位val= val % 100;tmp= val/10;buf2 = tmp + 0x30; 獲得十位val

22、= val % 10;buf3 = val + 0x30;獲得個位for(i = 0;i 4;i+)if (buf = 0x30)從高位整理,如果是3則轉(zhuǎn)換成空格。buf =0x20;else break;Usart_Transmit(bufO);通過藍(lán)牙串11連續(xù)發(fā)出四個字符。Usart_ Transmit(buf 1);Usart_ Transmit(buf2);Usart_Transmit(buf3);void setupf) timer2_init();UsartJnit(9600);sei();PORTD = 0x00;DDRD = OxFO;GetDataf);初始化PWM參數(shù))

23、void loop() unsigned char buf6;存連續(xù)字符的數(shù)組unsigned char index = 0;存索引值變量unsigned char i; unsigned char k;unsigned int para;存 PWM 數(shù)據(jù)變量delay(500);iffstringComplete = true) 分解手機(jī)傳過來的參數(shù)(格式是:#n%ddddk= 0;其中:n為索引(地址);dddd為數(shù)據(jù)index = 0;for (i = 0;i = wCnt ;i+)if (inputString = %) (index = inputstring卜 1 - 0x30;

24、獲得索引 k = 0; elsebufk = inputstring - 0x30; 獲得數(shù)據(jù) k+;para = 0;for(i = 0;i k-l;i+)para = para * 10 + buf;PWMindex = para;將得到的整數(shù)參數(shù)立即存入對應(yīng)的PWM數(shù)組單元,修改當(dāng)前運行參數(shù)bufl = lowByte(para); 將整數(shù)轉(zhuǎn)換成兩個字節(jié)。bufO = highByte(para);index = index * 2;計算 EE PROM 地址EEPROM.writefindex, bufl); 寫入 EEPROM 低位在前 index+;EEPROM.writefindex, bufO); 高位在后stringComplete = false; wCnt = 0;)ISR(USART_RX_vect)wCnt = 0;break;case d: 接收到d,右轉(zhuǎn)LP = PWM4;RP = PWM5;LD = 1;RD = O;wCnt = 0;break;case s:接收到后,停止電機(jī)LP = 0;RP = O;LD = 1;RD = 1;wCnt = 0;break;default:LP = 0;RP = O;LD = 1;RD = 1;Move(LRLD,RERD);

展開閱讀全文
溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dā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)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!