創客實戰 | 用Arduino實現循跡小車(初級)

2021-02-08 光電創客空間


前言

上述視頻中講述的是一個循跡送餐機器人,而喜歡電子設計的朋友,完全可以用幾十塊錢製作一個這樣的機器人模型:循跡小車,製作過程相當簡單。打好基礎後,可以以此為跳板製作一個智能送餐機器人、搬運機器人拿去參加各類比賽。

 

對於電子相關專業的朋友來說,最好自己動手做一些小項目,可以加深對專業知識的理解,就不會覺得模電、數電等專業特別難了。循跡小車並不是很難,非常適合初學者鍛鍊電子設計的綜合能力,下面整體分析一下關鍵的技術要點:

 

(1)作為一輛小車必須有可以行走的輪子,即可以正常行走的小車,這是小車的框架。

 

(2)要求智能,即可以通過CPU控制小車自由移動,那麼必須有控制輪子的驅動,一般輪子的驅動用電機製作,可為直流電機或步進電機,因此這部分內容包括CPU控制電機實現小車前後移動,左拐、右拐,調速;必須有一個CPU處理器,使用單片機、ARM等處理器晶片都可以;電機驅動電路,實現電機正反轉、調速。

 

(3)循跡,必須確定軌跡模型,才能有針對性的選擇傳感器,比如要求小車按地上的黑線軌跡行走,確定軌跡是地上的黑線之後,選擇傳感器用於識別地上的黑線,用什麼檢測地上的黑線呢?最簡單的是使用紅外接收對管,通過黑色吸收光線最強的原理判別小車是否在軌道上。當然也可以使用其他傳感器識別軌跡,比如攝像頭等,不過對於初學者來說沒必要整得這麼複雜。

 

(4)思路清晰之後,接下來就是設計原理圖製作印製板(可以購買現成的最小系統板和電機驅動板自己組裝接線),組裝小車,包括電機、輪子,印製板、電源,甚至傳感器的位置,最後就是編寫程序,識別軌跡,控制小車動作。後期主要就是不斷修改代碼,整體調試,直到成功為止。

 

製作循跡小車的前期準備:了解C語言基礎語法,接觸過Arduino。

Arduino是一款很容易入手的單片機,很適合初學者DIY自己想要的作品。

如果沒有學過C語言、單片機,可以先閱讀電子書。Arduino等單片機必備軟體、電子書資源連結可在本公眾號功能菜單獲取。


材料

帶四個電機的小車、Arduino、2節3.7V鋰電池、若干杜邦線、三路循跡模塊、L298N電機驅動模塊、麵包板、螺絲刀

 

步驟

一、連線

L298N的一種接法:
1、OUT1、OUT2接左路電機,OUT3、OUT4接右路電機。
2、IN1~IN4接arduino的4個引腳(數字和模擬皆可),IN1、IN2控制左路電機正反轉,IN3、IN4控制右路電機的正反轉。
3、12V接電池正極(建議用兩節3.7V的鋰電池,這樣串聯電壓為7.4V,不要超過12V,否則電壓過大晶片會發燙燒壞)。
4、5V接arduino的VIN引腳,用來給arduino供電。也即:電池給L298N供電的同時,L298N又給arduino供電。
5、GND同時接電池負極、arduino的GND引腳。

因為L298N只能控制兩路電機,如果有四個電機怎麼辦呢?那就將小車左邊兩個電機並聯為一個左路,右邊兩個電機並聯為一個右路(可以自己焊一塊板或者用麵包板實現)。

 

以下為小編的接線引腳:
1、L298N的IN1~IN4分別接arduino的數字3/5/6/9引腳
2、三路循跡從左到右的信號引腳分別接arduino的A0/A1/A2

 

小編剛接觸小車的時候,走了很多彎路,所以在這裡小編講一下大家可能會遇到的疑惑點:


問題1:為什麼我用arduino的引腳接入電機(馬達),分別給電機的兩根線輸出高電平和低電平,電機不會轉?而我用電池卻可以?
答:arduino直接控制電機,電機不會動,原因是arduino的數字或模擬引腳的輸出電流很小,小編親測,arduino直接接入電機時只有20mA的電流,這顯然是不足以驅動電機轉動的。所以想讓arduino控制電機轉動的正確做法是:引入L298N電機驅動模塊。


問題2:為什麼我用L298N電機驅動模塊控制電機,電機還是不會動?
答:先檢查是否正確使用了L298N,L298N其實有兩種用法,其中一種可以參考淘寶賣家的商品描述,而小編用的是另一種用法,下面再講。其次檢查L298N是否與arduino共地(其實我們在用單片機控制各種傳感器遇到的莫名其妙的問題,很多情況都是忘了兩者之間共地)。

 

二、代碼

思路:

1、定義接線引腳

2、在setup函數裡pinMode各引腳,pinMode的意思是將arduino的引腳設置為輸入或者輸出模式

3、編寫小車前進、左轉、右轉等函數,這裡用analogWrite函數,可控制速度。轉彎:左右電機正反轉實現

4、在loop函數裡讀取紅外循跡模塊的值

5、根據從循跡模塊讀入的值判斷小車是左偏還是右偏

 

原始碼請看:

int leftMotor1 = 3;int leftMotor2 = 5;int rightMotor1 = 6;int rightMotor2 = 9;int motorSpeed = 100; int irPin1 = A0;  int irPin2 = A1;  int irPin3 = A2;  int irVal1;int irVal2;int irVal3; void setup(){   pinMode(leftMotor1, OUTPUT);  pinMode(leftMotor2, OUTPUT);  pinMode(rightMotor1, OUTPUT);  pinMode(rightMotor2, OUTPUT);     pinMode(irPin1, INPUT);  pinMode(irPin2, INPUT);  pinMode(irPin3, INPUT);} void loop() {  irVal1 = digitalRead(irPin1);  irVal2 = digitalRead(irPin2);  irVal3 = digitalRead(irPin3);}if(irVal1 == 1) {    left();} else if(irVal2 == 1) {    forward();} else if(irVal3 == 1) {    right();}void forward() {  analogWrite(leftMotor1, motorSpeed);  analogWrite(leftMotor2, 0);  analogWrite(rightMotor1, motorSpeed);  analogWrite(rightMotor2, 0);}void left() {  analogWrite(leftMotor1, 0);  analogWrite(leftMotor2, motorSpeed);  analogWrite(rightMotor1, motorSpeed);  analogWrite(rightMotor2, 0);}void right() {  analogWrite(leftMotor1, motorSpeed);  analogWrite(leftMotor2, 0);  analogWrite(rightMotor1, 0);  analogWrite(rightMotor2, motorSpeed);}


其中motorSpeed是電機速度,可以根據自己的需求來定義,但analogWrite只支持0~255的值,所以motorSpeed最大為255。

 

在loop函數裡的if判斷代碼顯然有幾個漏洞,比如:如果小車走出了黑線,三路循跡都沒檢測到黑線(即 irVal1、irVal2和irVal3的值都為0),不進入if語句裡面,那麼小車就會一直保持著走出黑線前的狀態(如果走出黑線前小車是左轉,但因為小車反應不及,沒來得及左轉,三路循跡都走出了黑線,那麼小車就會一直保持左轉)。如果是轉彎的時候走出黑線,那麼因為原狀態反而還能順利回到黑線跑道,但是如果直線的時候走出黑線,那麼小車就會脫離黑線跑道。


單純看文字讀者可能不明所以,但如果親自測試一下就會明白小編想要表達的意思。

 

使用以上代碼,可以初步達到循跡小車的效果,但如果小車直線走出黑線,就要人工將小車放回黑線跑道,讀者盡可試試。如果想要實現小車走出黑線也能夠自主回到黑線跑道的功能,甚至360度轉彎,請看下一篇文章:用Arduino實現循跡小車(進階)



小車走出黑線後就沒有了「目標」「茫然無措」.


結尾

製作過程如果有技術問題,可以加群交流:點擊右上方的分享按鈕,將這篇文章分享到朋友圈,保留24小時,過後截圖發給創客公眾號後臺,小編審核後就給你進群方式,屆時會有經驗豐富的老司機們給你解答。


小編實驗室有相關器材,如果囊中羞澀,又想親自實戰,可以將本公眾號推薦給10個對電子設計感興趣的朋友關注,並把他們的暱稱發到後臺,小編審核後會聯繫你,不僅有免費的器材借你實戰,還會有老司機給你指導,可以少走很多彎路哦~僅限廣師大校本部學生。


喜歡這篇文章可以分享給朋友哦~


點擊閱讀原文,在電腦上閱讀更省心~


相關焦點

  • 創客童年•Arduino創作大賽(入圍作品展示)
    小車外殼採用3D列印技術自主設計製作,在實現基本行走功能後,我們又擴展了可燃氣體洩露報警、火源檢測報警、迎賓功能、實時溫度播報、智能車燈、觸摸感應、拿起警告等功能。這臺小車不僅可以用語音控制前進、後退、轉向,還可以與它語音互動聊天,最重要的是還可以背誦古詩、做乘法算術。我們收錄了《小學生必背古詩詞70+80首》這本書上面的所有古詩詞。對著小車說出古詩的名字,小車便開始背誦該首古詩。
  • 回憶童年的小遊戲,Arduino製作貪吃蛇!
    前幾天在用點陣製作音樂頻譜儀的時候,被人問到能不能來做一個簡單的貪吃蛇遊戲,作為一個超級業餘創客,在我眼裡就沒有不可以,所以就有了下面的這個作品
  • Arduino用PID控制直流電機定位旋轉 - 【單片機教程-Arduino-PID】
    合作或投稿請發郵件到:rebaby@qq.com在這篇文章中,我們將看到如何實現直流電機的非常精確的位置控制。我們使用Arduino和PID計算來實現簡單直流電機的精確位置控制。這樣的小項目非常有趣,您可以通過構建該項目來學習許多概念,例如PID,閉環系統和編碼器基礎。首先,我想向您簡要介紹什麼是PID,因為這將幫助您進一步了解這些內容。
  • Arduino初級教程1,用手機輕鬆編程,小白也能快速入門!
    以下是我們用Arduino DIY的部分項目↓印表機↓用手機控制的 Arduino列印紙遙控車↓我的Arduino Nano為什麼用安卓手機編程?本人目前上的是技校,手中只有一臺vivo手機,我的第一個程序就是我初中用手機編程的,用手機編程也很簡單。手機編程也適合某些特殊特群。
  • 第1節 Arduino與創客
    基礎篇第1節  Arduino與創客  成為創客,設計製作出自己的創意作品
  • 如何製作Arduino迷你CNC繪圖儀機 -【創客-DIY-電子製作-單片機教程】
    合作或投稿請發郵件到:rebaby@qq.com您好,在這篇文章中的朋友們,我們將看到如何使用舊的廢舊DVD驅動器,arduino和L293D電機護罩製造微型CNC繪圖儀機器。實際上,我過去曾經建造過一些arduino微型CNC繪圖儀或繪圖機。
  • 【技術文章】PCB逆向原理圖,用arduino修好電子琴!
    最近機緣巧合下做了一個開源項目,叫ArduPiano,用大家喜聞樂見Arduino UNO開發板實現了電子琴琴鍵按鍵陣列讀取和midi信號輸出的功能。1、背景故事要從去年疫情還沒爆發前說起,當時放了寒假,於是回了寧波。一天,帶著爸媽和老婆去鼓樓逛街,中午餓了去地下步行街吃個飯。
  • 【arduino】繼續蜂鳴器音樂播放,arduinoIDE裡調用音樂播放庫
    昨天簡單的介紹了一下蜂鳴器硬體和米思齊上如何演奏音樂(一種非常簡單的用arduino控制蜂鳴器播放音樂的方案),今天繼續在arduino
  • Arduino小課堂(11)矩陣電子琴與蜂鳴器和數組
    arduino小課堂(11)矩陣電子琴與蜂鳴器和數組與海大機械電子設計課作業講解2主要內容:1、矩陣電子琴製作
  • 隨講單片機與Arduino
    我相信所有嵌入式和創客DIY的人都對Arduino有所了解,但是Arduino到底是什麼?
  • 創客教學活動目的
    提起創課教學活動的開展,是一件需要付出很多時間和精力的事情,創客課程是開展創客教育活動的目標、內容、方式及評價等的總和及其進程與安排。格物斯坦表示:創客課程不是一門課程,而是由低階到高階的一系列課程組合,活動安排要循序漸進。
  • Arduino-使用IR遙控器控制LED - 【單片機教程-Arduino】
    您需要為電路布線,像這樣然後我去了arduino IDE> file> examples> IRremote> IRrecvDemo。您需要將草圖上載到arduino,打開串行監視器並開始使用遙控器,然後查看arduino接收哪些值。一段時間後,我寫下了當您按下音量調高鍵或任何其他鍵時,串行監視器中會顯示哪些值,並寫下您要使用的所有鍵。
  • 第二批河南省中小學創客示範校名單公布
    近日,省教育廳公布第二批河南省中小學創客教育示範校名單。  根據《河南省教育廳關於進一步推進中小學創客教育的通知》(教電教〔2017〕318號)及《河南省教育廳辦公室關於申報第二批河南省中小學創客教育示範校的通知》(教辦電教〔2019〕317號)精神,經各省轄市、省直管縣(市)教育局遴選、評估、驗收、推薦,省教育廳審核,決定授予鄭州市二七區培育小學等100所學校為 「河南省中小學創客教育示範校」。
  • 《來實戰》之智能車開源項目01期:一起開源吧!(含先導片)
    對策:電路城團隊深諳兩方的急迫和苦衷,作為一個技術交流平臺應有的責任,於是有了《來實戰》的欄目構想,即每期選定一個富有啟發性和趣味性的開源項目,由硬體設計大神帶隊,引領一批自願報名加入的同道愛好者,從項目分析、思路梳理開始,逐步完成動手實踐、項目調試,直到最後的完美再現和更進一步的功能升級。
  • 舊物改造 | 創客奶爸帶你製作遛娃神器
    於是對方奶奶就讓旺仔騎了,但旺仔一騎不要緊,萬般不肯下來,我們家也有一輛這樣的車子,是用手推的,旺仔爸爸就萌生了一種想法,改裝一下車子,讓小朋友喜歡玩,讓奶奶不用推著走,於是就有了今天的作品先來看一下演示視頻:#方案確定#本次作品實現的主要目的是讓小車子變成電動的,能夠遙控,甚至可以隨手拿出手機來操控,用一個電機帶動車子前進後退,使用一個舵機控制車子左右轉向
  • 國外小姐姐用ATtiny85做了一把迷你小提琴
    我沒有使用經典的LiPo JST連接器,因為它與其他元件的對比非常巨大,所以我用2mm的引腳代替焊接。我看到別人用一個很好的技巧來增強LED的發光效果,那就是用黑色熱膠覆蓋它們。: https://github.com/robsoncouto/arduino-songs[6]TimerFreeTone庫: https://bitbucket.org/teckel12/arduino-timer-free-tone/wiki/Home原項目連結:https://www.hackster.io/alexandracovor/attiny85-mini-pcb-violin-d728e5
  • 創客聯盟空間幫你實現
    高寶龍的專業是電氣工程及其自動化,要用單一的專業去完成一個複雜的產品,他認為幾乎是「不可能」的,需要一個多學科專業的跨界交互平臺。將業餘時間悉數投入,他也會有顧慮,擔心會被認為「不務正業」。創客聯盟的成立正是「時候」,對醉心於此的創客來說,不僅是一枚定心丸,更是一劑強心針。
  • 「創新之星」鄰家創客初長成 ——訪河北省沙河市第一中學靳昊樸
    從初三開始,他利用周末在沙河市青少年校外活動中心學習編程,製作了智能晾衣架、老年人馬桶、取物機器人、安全小車等各種各樣或失敗、或成功的創新作品,參加過宋慶齡少年兒童發明大賽、全國中小學信息技術創新與實踐活動、全國中小學電腦製作活動、河北省中小學生創客設計大賽、青少年機器人競賽等比賽,並取得不錯的成績。
  • 中芬設計園無人機創客體驗競賽燃爆創客周
    由深圳市人民政府主辦,深圳市發展和改革委員會、深圳市科技創新委員會、深圳市人民政府臺灣事務辦公室、深圳市福田區人民政府和深汕合作區指導下,中芬設計園承辦2019全國雙創周深圳活動暨第五屆深圳國際創客周「設計互連·創享生活」創客嘉年華系列活動,於6月14-15日期間舉辦無人機創客體驗競賽
  • 【創客樂清】創客黃永江:高清無線直播系統
    用攝像機拍的視頻,可以同步在手機上直播;而用手機拍的視頻,也能直接在電視上播出。信息3.0時代,直播,尤其是移動直播在某種意義上是一種「全民秀場」,因此,直播系統的更新換代尤其重要。創客 黃永江這次參加的項目,是愛米科技的無線直播圖傳,也就是前面這個小盒子。