標題: Arduino智能循跡避障小車源程序 [打印本頁]
作者: Misty-CC 時間: 2019-10-21 18:48
標題: Arduino智能循跡避障小車源程序
本小車基于Arduino uno開發,循跡比較靈敏,避障部分只適合本人設計的特殊賽道。
設計智能小車首先應該確定小車的基本結構,其主要包括以下幾個部分:
(1)循跡模塊:指小車利用紅外發射裝置發射紅外線后,照射物體表面返回量的多少來測定小車的具體的位置,以進行循跡。
(2)電機驅動模塊:指通過專用電路對電機進行驅動,單片機給出控制信號通過L298驅動電機正常運轉。
(3)控制模塊:這是小車的控制中心,本設計采用Arduino系列單片機
(4)電源模塊: 因設計需要,我們給小車單獨供電,設置獨立的電源模塊,使之穩定運行。
(5)超聲波避障模塊:本文使用Arduino連接 HC-SR04 超聲波測距傳感器,超聲波完成距離測定,并控制小車在前方障礙小于某一特定值時,做出“停止”、“后退”等一系列動作。
- #define STOP 0
- #define FORWARD 1
- #define BACKWARD 2
- #define TURNLEFT 3
- #define TURNRIGHT 4
- int Trig = 12;
- int Echo = 13;
- float distance;
- int Distance = 0;
- int leftMotor1=2;//定義I1接口
- int leftMotor2=4;//定義I2接口
- int ENA = 6;//定義EA(PWM調速)接
- int rightMotor1 =7;//定義I3接口
- int rightMotor2 =8;//定義I4接口
- int ENB=5;//定義EB(PWM調速)接口
- int IRR=14;//定義右側尋線傳感器接口
- int IRM=15;//定義中間尋線傳感器接口
- int IRL=16;//定義左側尋線傳感器接口
- void setup()
- {
- Serial.begin(9600);
- pinMode(Trig,OUTPUT);
- pinMode(Echo,INPUT);
- pinMode(leftMotor1,OUTPUT);
- pinMode(leftMotor2,OUTPUT);
- pinMode(ENA,OUTPUT);
- pinMode(rightMotor1,OUTPUT);
- pinMode(rightMotor2,OUTPUT);
- pinMode(ENB,OUTPUT);
- pinMode(IRR,INPUT);
- pinMode(IRM,INPUT);
- pinMode(IRL,INPUT);
- }
- void motorRun(int cmd,int value)
- {
- analogWrite(ENA, value); //設置PWM輸出,即設置速度
- analogWrite(ENB, value);
- switch(cmd){
- case FORWARD:
- Serial.println("FORWARD"); //輸出狀態 前進
- digitalWrite(leftMotor1,HIGH );
- digitalWrite(leftMotor2,LOW );
- digitalWrite(rightMotor1,LOW );
- digitalWrite(rightMotor2,HIGH );
- break;
- case BACKWARD:
- Serial.println("BACKWARD"); //輸出狀態 后退
- digitalWrite(leftMotor1,LOW);
- digitalWrite(leftMotor2,HIGH);
- digitalWrite(rightMotor1,HIGH);
- digitalWrite(rightMotor2,LOW);
- break;
- case TURNLEFT:
- Serial.println("TURN LEFT"); //輸出狀態 左轉
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNRIGHT:
- Serial.println("TURN RIGHT"); //輸出狀態右轉
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- default:
- Serial.println("STOP"); //輸出狀態 停止
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, LOW);
- }
- }
- float Distance_test()
- {
- digitalWrite(Trig,LOW); //產生一個10US的高脈沖去觸發Trigpin
- delayMicroseconds(2);
- digitalWrite(Trig,HIGH);
- delayMicroseconds(10);
- digitalWrite(Trig,LOW);
- float distance = pulseIn(Echo,HIGH);
- Distance = distance/58;
- return Distance;
- }
- void loop()
- {
-
- Distance_test();
- Serial.println(Distance);
- if(Distance > 20 )
- {
- tracing();
- }
- else if(Distance < 20 )
- {
- motorRun(STOP,0);
- delay(900);
- motorRun(BACKWARD,60);
- delay(200);
- motorRun(STOP,0);
- delay(900);
- motorRun(TURNLEFT,80);
- delay(800);
- motorRun(STOP,0);
- delay(900);
- motorRun(FORWARD,60);
- delay(700);
- motorRuin(STOP,0);
- delay(900);
- motorRun(TURNRIGHT,80);
- delay(800);
- motorRun(FORWARD,60);
- delay(1100);
- motorRun(STOP,0);
- delay(900);
- motorRun(TURNRIGHT,70);
- delay(600);
- motorRun(FORWARD,60);
- delay(600);
- }
- }
- void tracing()
- {
- int r,m,l;
- r=digitalRead(IRR);
- m=digitalRead(IRM);
- l=digitalRead(IRL);
- if(l==HIGH && m==HIGH && r== HIGH){
- motorRun(FORWARD,60);
- }
-
- if(l==LOW &&m==LOW && r== LOW){
- motorRun(FORWARD,60); //如果刪掉forward和delay,在三岔路口小車可能會左右來回“抽風”,讀者可以去掉嘗試一下。
- delay(20);
- motorRun(TURNRIGHT,90);
- // motorRun(TURNRIGHT,90);
- }
- if(l==LOW &&m==HIGH && r==LOW){
- motorRun(FORWARD,60);
- }
- else if(l==LOW &&m==HIGH && r==HIGH){
- motorRun(TURNRIGHT,90);
- }
- else if(l==HIGH &&m==HIGH && r==LOW){
- motorRun(TURNLEFT,90);}
- else if(l==HIGH && m==LOW && r==LOW){
- motorRun(TURNLEFT,90);}
- else if(l==LOW && m==LOW && r==HIGH){
- motorRun(TURNRIGHT,90);}
- else if(l==HIGH && m==LOW && r==HIGH){
- motorRun(TURNRIGHT,90);}
- }
復制代碼
作者: xiancun010 時間: 2019-11-2 21:56
不錯啊,參考下你的程序
作者: 13370353201 時間: 2019-11-5 15:21
能不能,指點我這個設計,聲控小車(走直線,拍手頻率越高,車速越快),用什么實現,用什么芯片,大佬謝謝了
作者: pwq 時間: 2019-11-24 22:57
第114行motorRuin(STOP,0);
多了一個i欸
作者: 小萬 時間: 2020-11-16 11:04
您好,想問一下您設計的賽道長什么樣子,有照片或者可以講解一下嗎?謝謝
作者: glinfei 時間: 2020-11-17 11:26
如果只是根據拍的節奏控制車速,并用Arduino寫,買個最便宜的聲音模塊(10元幾個)就行。拍手導致模塊閾值反轉觸發中斷,再通過時鐘中斷對兩次聲音觸發的中斷計時,對應相應速度就行了。
作者: hhwsljb 時間: 2021-10-22 16:59
把前、后、左、右這些方向寫成一個函數,挺不錯的思路
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲欧美综合精品久久成人
|
国产毛片毛片
|
91xxx在线观看
|
日韩精品一区二区三区在线
|
国产免费高清
|
国产在线观看一区
|
久久久天天
|
日本涩涩视频
|
激情欧美一区二区三区中文字幕
|
奇米av|
少妇诱惑av|
www.成人久久
|
91婷婷韩国欧美一区二区
|
欧美激情久久久久久
|
久久丁香|
91精品国产91久久久久游泳池
|
欧美精品久久久
|
欧美久久久久久久
|
国产一区二区影院
|
天天干天天插
|
成人欧美一区二区三区在线观看
|
性色的免费视频
|
日韩91在线
|
免费在线观看成人
|
免费黄色a级毛片
|
欧美精品一区在线发布
|
成人免费视频网址
|
国产精品久久国产精品久久
|
国产精品日韩欧美一区二区三区
|
午夜精品一区二区三区在线视频
|
国产精品自拍视频
|
国产精品99免费视频
|
久久er精品
|
黑人巨大精品欧美一区二区免费
|
亚洲不卡在线观看
|
91福利在线观看
|
国产精品精品视频
|
av天天干|
亚洲瑟瑟
|
久久久免费电影
|
欧美国产日本一区
|