日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程

發布時間:2024/9/30 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在老少通吃的智能小車到底是什么呢?科普來嘍!一文中,我們介紹了智能小車的分類及組成,為什么循跡小車能夠追蹤黑線軌跡呢?

智能小車在畫有黑線的白紙?“路面”上行駛,由于黑線和白紙對光線的反射系數不同,可根據接收到的反射光的強弱來判斷“道路”—黑線利用了簡單、應用比較普遍的檢測方法—發光二極管+光敏電阻。發光二極管+光敏電阻,即利用光線在不同顏色的物理表面具有不同的反射性質的特點,在小車行駛過程中不斷地向地面發射白光,當白光遇到白色地面時發生漫發射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,則小車上的接收管接收不到信號。

讓我們一起來試驗一下吧!

一.實驗說明

1、使用尋線傳感器控制開發板自帶LED。

2、紅外尋跡模塊是利用紅外線反射的原理,根據反射的強度來判定顏色。本尋跡模塊是用來識別黑白線,黑線輸出低電平,白線輸出高電平。

二.物料清單

三.模塊說明

四.連線圖

五.實驗代碼

int num1;int num2;int num3;int num4;int num5;void setup(){ pinMode(7, INPUT); pinMode(8, INPUT); pinMode(9, INPUT); pinMode(10, INPUT); pinMode(11, INPUT); //定義該接口為接口為輸入接口 pinMode(13,OUTPUT);}void loop(){ num1 = digitalRead(7); num2 = digitalRead(8); num3 = digitalRead(9); num4 = digitalRead(10); num5 = digitalRead(11); //讀出信號接口的值 if (num1 ==LOW) { //如果1號傳感器監測到黑線,燈亮一次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num2 == LOW) { //如果2號傳感器監測到黑線,燈亮兩次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num3 == LOW) { //如果3號傳感器監測到黑線,燈亮三次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num4 == LOW) { //如果4號傳感器監測到黑線,燈亮四次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); } else if (num5 == LOW) { //如果5號傳感器監測到黑線,燈亮五次 digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(5000); }}

六.相關介紹

1、尋線傳感器

尋線傳感器是光電傳感器的一種,是根據反射式光電傳感器原理開發的專用機器人產品,可以幫助你的機器人進行白線或黑線跟蹤,可以檢測白底中的黑線,也可以檢測黑底中的白線。尋線反饋信號可以提供穩定的TTL電平輸出(開關量),使尋線更準確更穩定。其可用于光電測速、程控小車尋線,是輪式機器人的必備傳感器。

2、光電傳感器

光電傳感器是各種光電檢測系統中實現光電轉換的關鍵元件,它是把光信號(紅外、可見及紫外光輻射)轉變成為電信號的器件。由于光電傳感器具有結構簡單、重量輕、體積小、響應快、性能穩定及具有很高的靈敏度等優點,因此在檢測和自動控制等領域中應用廣泛。

光電傳感器按其工作原理可分為模擬式和脈沖式兩類。所謂模擬式,是指光敏器件的光電流的大小隨光通量的大小而變,為光通量的函數。而脈沖式光敏器件的輸出狀態僅有兩種穩定的狀態,也就是“通”與“斷”的開關狀態,即光敏器件受光照時,有電信號輸出,不受光照射時,無電信號輸出。

光電傳感器在工業應用中可歸納為直射式、透射式、反射式和遮蔽式等四種基本形式。Mini紅外尋線傳感器是根據反射式光電傳感器原理開發設計的,所以簡單介紹下此種工作方式。當光源發射出的光通量(紅外線)投射到被測物體上,被測物體又將部分光通量反射到光敏器件上。反射的光通量取決于被測物體的反射條件。該形式常用于表面測量和轉速測量。

七、總結和經驗

根據以上原理我們設計了一個智能循跡小車,經過不斷調試最終能在規定的黑線跑道上行駛。智能循跡小車作為機器人的典型代表,能夠實現自動導引功能。它的原理是主要通過傳感器來感知導引線實現自動識別路線,選擇正確的行進路線,并作出判斷和相應的執行動作。

此次循跡小車由5個傳感器傳輸信號,中間傳感器檢測黑線小車直行,左右各2個負責轉彎,當檢測到黑線時,循跡模塊紅燈亮起,管腳讀取值為0,檢測到白線時紅燈熄滅,管腳讀取值為1。

這里的循跡是指小車在白色地板上循黑線行走,采取的方法是紅外探測法,即利用紅外線在不同顏色的物體表面具有不同的反射性質的特點,在小車行駛過程中不斷地向地面發射紅外光。單片機就是否收到反射回來的紅外光為依據來確定黑線的位置和小車的行走路線。

在我們對小車進行調試的過程中,遇到了幾個問題,現進行總結,希望對大家有所幫助。

1、傳感器檢測距離原理上為0.5~40mm,但小車前方五個循跡傳感器靈敏度很低,需緊貼地面才能識別到黑線,導致傳感器與地面摩擦影響小車行駛。

2、小車左右兩個電機電壓分配不平均。雖然不影響小車循跡但是對轉向大小的修改產生一定影響,導致左右輪轉不一致,要注意調節左右轉輪速度。

3、一開始程序設定處兩側燈檢測到黑線以外,所有情況均直行。但這種方法不適合直角等角度拐角過大的彎道,總會超出跑道,于是我們修改了代碼,只有中間檢測到黑線才會執行,兩側檢測到黑線則拐彎。

但是隨之產生的問題是小車搖擺劇烈,經過修改代碼參數,我們把搖擺幅度降到了最低。當遇到直角轉彎,或者急轉彎的時,可將一次車輪轉速設為0,加大轉向幅度。

4、開始時if-else語句過于復雜給小車運行帶來了一定的延遲。此時選擇代碼優先級,當碰到3個燈同時亮時,if else語句優先執行第一個滿足條件的語句,同時要注意處理好轉向問題。

代碼如下:

#include "config.h"int right1;int right2;int middle;int left2;int left1;void setup(){ setPin();}void loop(){ readDigitalValue(); judge(); //delay(50);}/*定義接口模式*/void setPin(){ pinMode(SensorRight1, INPUT); pinMode(SensorRight2, INPUT); pinMode(SensorMiddle, INPUT); pinMode(SensorLeft2, INPUT); pinMode(SensorLeft1, INPUT); pinMode(right, OUTPUT); pinMode(left, OUTPUT);}/*讀出信號接口的值*/void readDigitalValue(){ right1 = digitalRead(SensorRight1); right2 = digitalRead(SensorRight2); middle = digitalRead(SensorMiddle); left2 = digitalRead(SensorLeft2); left1 = digitalRead(SensorLeft1);}/*對運行狀態進行判斷并作出響應*/void judge(){ if(right1==low&&right2==low&&left2==low){ analogWrite(right,0); analogWrite(left,180); } else if (right1 ==low) turnRightRapidly(); else if (right2== low) turnRight(); else if (middle== low) goStraight(); else if (left2 == low) turnLeft(); else if(left1 == low) turnLeftRapidly(); //else goStraight();}/*直行 返回值為空*/void goStraight(){ analogWrite(right,speedLow); analogWrite(left,speedSpecial);}/*快速左轉 當檢測到左側第一個信號燈信號時 返回值為空*/void turnLeftRapidly(){ analogWrite(right,0); analogWrite(left,speedHigh);}/*快速右轉 當檢測到右側第一個信號燈信號時 返回值為空*/void turnRightRapidly(){ analogWrite(right,speedHigh); analogWrite(left,0);}/*左轉 當檢測到左側第二個燈信號時 返回值為空*/void turnLeft(){ analogWrite(right,20); analogWrite(left,speedMiddle);}/*右轉 當檢測到右側第二個燈信號時 返回值為空*/void turnRight(){ analogWrite(right,speedMiddle); analogWrite(left,20);}配置文件 /* * right 右電機pwm輸出引腳 * left 左電機pwm輸出引腳 * low 檢測到黑線,指示燈亮 * high 檢測到白線,指示燈滅 * speedHigh 高速pwm值 * speedMiddle 中速pwm值 * speedLow 低速pwm值 * speedSpecial 直行左輪速度pwm值,調節兩個電機轉速誤差 * SensorRight1 右側第一個信號燈的引腳 * SensorRight2 右側第二個信號燈的引腳 * SensorMiddle 中間信號燈的引腳 * SensorLeft2 左側第二個信號燈的引腳 * SensorLeft1 左側第一個信號燈的引腳 * right1 讀取的右側第一個信號燈的信號 * right2 讀取的右側第二個信號燈的信號 * middle 讀取的中間信號燈的信號 * left2 讀取的左側第二個信號燈的信號 * left1 讀取的左側第一個信號燈的信號 */ #define right 3 #define left 6 #define low 0 #define high 1 #define speedHigh 222 #define speedMiddle 150 #define speedLow 70 #define speedSpecial 80 #define SensorRight1 4 #define SensorRight2 5 #define SensorMiddle 9 #define SensorLeft2 10 #define SensorLeft1 12

關注我們的微信公眾號:xunmingiot,后臺回復“智能小車”,即可免費獲得智能小車超級詳細的制作視頻,更可以獲取Arduino教程以及其他學習資源。有任何問題歡迎評論或在后臺留言!

總結

以上是生活随笔為你收集整理的arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。