Arduino 智能避障智能小車制作圖文教程

今天為大家分享一個Arduino自動避障小車的完整制作過程榆鼠,昨天有朋友咨詢想做一個自動施肥的創(chuàng)意遥昧,但說實(shí)話Arduino這個單片機(jī)是比較簡單的易桃,做一些簡單的應(yīng)用還可以褥琐,涉及到復(fù)雜的應(yīng)用不管是從算力還是接口方面都稍顯不足。不過整體而言還是很適合大家入門單片機(jī)的晤郑。

關(guān)于單片機(jī)方面敌呈,波波本身也沒有經(jīng)過專業(yè)的學(xué)習(xí)贸宏,而是因?yàn)楸旧韾酆镁幊毯碗娮訕I(yè)余學(xué)習(xí)。因此分享的筆記中難免有不足之處磕洪。還望大家指正吭练。

首先看下小車安裝好的效果圖:

image

想做一個Arduino 自動避障智能小車我們至少需要以下幾種材料,當(dāng)然類似螺絲刀這樣的工具就不說了褐鸥。

1线脚、Arduino主板一塊(不是必需的,如果大家有Esp8266這樣的芯片叫榕,也可以用來開發(fā)成網(wǎng)絡(luò)控制的小車)

2浑侥、L298N電機(jī)驅(qū)動模塊,作用驅(qū)動兩個輪子的直流電機(jī)晰绎。

3寓落、超聲波模塊,陀機(jī)及其支架荞下。

4伶选、小車底盤、萬向輪尖昏、電池盒仰税、接線。

材料準(zhǔn)備好了抽诉,我們要按照圖片所示安裝起來陨簇,最后一步是寫入程序。程序源碼如下:


#include <Servo.h>
#define Trig 2                 //引腳控制超聲波發(fā)出聲波
#define Echo 3                 //引腳反應(yīng)接收到返回聲波
#define LIN1 7                 //左側(cè)輪子
#define LIN2 6          
#define RIN1 5                 //右側(cè)輪子
#define RIN2 4          
//#define Steeringpin 9        //舵機(jī)控制端口
int S = 0;                     //初始化距離
Servo Steering;                //轉(zhuǎn)向舵機(jī)
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);          //設(shè)置比特率 
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  pinMode(LIN1, OUTPUT);
  pinMode(LIN2, OUTPUT);
  pinMode(RIN1, OUTPUT);
  pinMode(RIN2, OUTPUT);
//  pinMode(Steeringpin, OUTPUT);
  Steering.attach(9);           //定義舵機(jī)所用引腳
  Steering.write(90);           //初始化舵機(jī)角度
  delay(2000);                  //開機(jī)延時
}
void loop() {
  // put your main code here, to run repeatedly:
  Steering.write(90);
  Range();                      //測距函數(shù)
  if(S <= 5)      //距離太近不足以轉(zhuǎn)彎
  {
    Back();                     //執(zhí)行后退函數(shù)
    delay(300);                 //后退持續(xù)時間
  }
  else if(S >= 5 && S <= 15)   //距離中等可以轉(zhuǎn)彎
  {
    Turn();                     //執(zhí)行轉(zhuǎn)彎判斷函數(shù)
  }
  else                          //距離充足
  {
    Line();                     //執(zhí)行直行函數(shù)
  }
}
void Range()                    //測距函數(shù)
{
  digitalWrite(Trig,LOW);       //測距
  delay(2);                     //延時2微秒
  digitalWrite(Trig,HIGH);
  delay(10);
  digitalWrite(Trig,LOW);
  float distance = pulseIn(Echo,HIGH); //讀取高電平時間
  S = float( distance * 17 )/1000;     //把值賦給S
  Serial.println(S);            //向串口發(fā)送S的值迹淌,可以在顯示器上顯示距離
}
// float distance = pulseIn(Echo,HIGH);
// S = float( distance * 17 )/1000; 
// 將回波時間換算成cm
// 讀取一個引腳的脈沖(HIGH或LOW)河绽。例如,如果value是HIGH唉窃,pulseIn()會等待引腳變?yōu)镠IGH耙饰,開始計時,再等待引腳變?yōu)長OW并停止計時纹份。
// 返回脈沖的長度苟跪,單位微秒。如果在指定的時間內(nèi)無脈沖函數(shù)返回蔓涧。
// 此函數(shù)的計時功能由經(jīng)驗(yàn)決定件已,長時間的脈沖計時可能會出錯。計時范圍從10微秒至3分鐘蠢笋。(1秒=1000毫秒=1000000微秒)
// 接收到的高電平的時間(us)* 340m/s / 2 = 接收到高電平的時間(us) * 17000 cm / 1000000 us = 接收到高電平的時間 * 17 / 1000  (cm)
void Turn()                     //轉(zhuǎn)向函數(shù)
{
  Lull();                       //停止
  Steering.write(170);          //使舵機(jī)轉(zhuǎn)到170度(左側(cè))
  delay(1000);                  //留時間給舵機(jī)轉(zhuǎn)向
  Range();                      //測距
  Steering.write(90);           //使舵機(jī)回復(fù)原位
  delay(1000);
  if(S >= 15)                   //距離充足
  {
    turnLeft();                 //左轉(zhuǎn)彎后退
  }
  else                          //距離不足
  {
    Steering.write(10);         //使舵機(jī)轉(zhuǎn)到10度(右側(cè))
    delay(1000);
    Range();
    Steering.write(90);         //使舵機(jī)回復(fù)原位
    delay(1000);
    if(S >= 15)                 //距離充足
    {
      turnRight();              //右轉(zhuǎn)彎后退
    }
    else
    {
      Back();                   //后退
      int x = random(1);        //產(chǎn)生一個隨機(jī)數(shù)使小車隨機(jī)轉(zhuǎn)向
      if(x == 0)
        turnLeft();
      else
        turnRight();
    }
  }
}
void Back()                 //后退函數(shù)(使電機(jī)反轉(zhuǎn))
{
  digitalWrite(LIN1, LOW);
  digitalWrite(LIN2, HIGH);
  digitalWrite(RIN1, HIGH);
  digitalWrite(RIN2, LOW);
}
void Line()                 //直線行駛函數(shù)(使電機(jī)正轉(zhuǎn))
{
  digitalWrite(LIN1, HIGH);
  digitalWrite(LIN2, LOW);
  digitalWrite(RIN1, LOW);
  digitalWrite(RIN2, HIGH);
}
void turnLeft()             //小車左轉(zhuǎn)后退
{
  digitalWrite(LIN1, LOW);
  digitalWrite(LIN2, HIGH);
  digitalWrite(RIN1, LOW);
  digitalWrite(RIN2, LOW);
  delay(1000);
}
void turnRight()            //小車右轉(zhuǎn)后退
{
  digitalWrite(LIN1, LOW);
  digitalWrite(LIN2, LOW);
  digitalWrite(RIN1, HIGH);
  digitalWrite(RIN2, LOW);
  delay(1000);
}
void Lull()                 //停止 
{
  digitalWrite(LIN1, LOW);
  digitalWrite(LIN2, LOW);
  digitalWrite(RIN1, LOW);
  digitalWrite(RIN2, LOW);
}

程序燒錄完畢拨齐,我們就可以上電測試了。喜歡的朋友們別忘了點(diǎn)個贊喲~~
本文轉(zhuǎn)自“菠菜園”昨寞,原文:https://www.zkii.net/tech/arduino/2227.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞻惋,一起剝皮案震驚了整個濱河市厦滤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歼狼,老刑警劉巖掏导,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羽峰,居然都是意外死亡趟咆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門梅屉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來值纱,“玉大人,你說我怎么就攤上這事坯汤∨斑耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵惰聂,是天一觀的道長疆偿。 經(jīng)常有香客問我,道長搓幌,這世上最難降的妖魔是什么杆故? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮溉愁,結(jié)果婚禮上处铛,老公的妹妹穿的比我還像新娘。我一直安慰自己叉钥,他們只是感情好罢缸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布篙贸。 她就那樣靜靜地躺著投队,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爵川。 梳的紋絲不亂的頭發(fā)上敷鸦,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音寝贡,去河邊找鬼扒披。 笑死,一個胖子當(dāng)著我的面吹牛圃泡,可吹牛的內(nèi)容都是我干的碟案。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼颇蜡,長吁一口氣:“原來是場噩夢啊……” “哼价说!你這毒婦竟也來了辆亏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鳖目,失蹤者是張志新(化名)和其女友劉穎扮叨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體领迈,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彻磁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狸捅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衷蜓。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尘喝,靈堂內(nèi)的尸體忽然破棺而出恍箭,到底是詐尸還是另有隱情,我是刑警寧澤瞧省,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布扯夭,位于F島的核電站,受9級特大地震影響鞍匾,放射性物質(zhì)發(fā)生泄漏交洗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一橡淑、第九天 我趴在偏房一處隱蔽的房頂上張望构拳。 院中可真熱鬧,春花似錦梁棠、人聲如沸置森。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凫海。三九已至,卻和暖如春男娄,著一層夾襖步出監(jiān)牢的瞬間行贪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工模闲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留建瘫,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓尸折,卻偏偏與公主長得像啰脚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子实夹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 大家好橄浓!這是小編第二次做小項(xiàng)目~ 小編目前專業(yè)是電氣自動化的晾咪,不搞點(diǎn)硬件方面的東西,不學(xué)點(diǎn)控制技術(shù)...
    世緣閱讀 10,668評論 4 15
  • 前言 先前做了一個外包app關(guān)于google的blockly二次開發(fā)贮配,文見Android 基于Android bl...
    Jafir閱讀 26,579評論 68 67
  • 什么是arduino谍倦? Arduino,是一個開放源代碼的單芯片微控制器泪勒,它使用了Atmel AVR單片機(jī)昼蛀,采用了...
    竹個介閱讀 17,316評論 0 9
  • "大眾創(chuàng)新 萬眾創(chuàng)業(yè)",學(xué)校對于創(chuàng)客教育日漸重視,熱情高漲,紛紛開始創(chuàng)客教育課程,有條件的打造學(xué)校創(chuàng)客實(shí)驗(yàn)室,不吝...
    少兒創(chuàng)客閱讀 15,161評論 11 52
  • 《走一步,再走一步》 這是一篇敘事性作品,敘述了作者童年的一件事情,將解決個別問題的經(jīng)驗(yàn)提升為普遍的人生經(jīng)驗(yàn),對學(xué)...
    箱子_1b52閱讀 892評論 1 1