線路跟隨機(jī)器人是一個(gè)簡單而迷人的機(jī)器人,適合大多數(shù)學(xué)生/業(yè)余愛好者建造。在本教程中,我們將學(xué)習(xí)線路跟隨機(jī)器人的工作原理以及如何使用PIC 微控制器 PIC16F877A構(gòu)建一個(gè)。PIC16F877A是Microchip的40引腳多用途MCU,我們在完整的PIC教程系列中使用了該IC。
所需材料:
PIC16F877A
直流減速電機(jī) (2Nos)
L293D 電機(jī)驅(qū)動(dòng)器
貴妃椅(您也可以使用紙板建造自己的躺椅)
移動(dòng)電源(任何可用的電源)
線路跟隨器的概念
線路跟隨機(jī)器人能夠在紅外傳感器的幫助下跟蹤線路。該傳感器具有紅外發(fā)射器和紅外接收器。紅外發(fā)射器 (IR LED) 傳輸光,接收器(光電二極管)等待透射光返回。紅外光只有在被表面反射時(shí)才會返回。然而,所有表面都不反射紅外光,只有白色彩色表面可以完全反射它們,黑色表面將完全觀察它們,如下圖所示。
?
?
現(xiàn)在,我們將使用兩個(gè)紅外傳感器來檢查機(jī)器人是否與線路一起在軌道上,并使用兩個(gè)電機(jī)來糾正機(jī)器人是否移出軌道。這些電機(jī)需要大電流,應(yīng)該是雙向的;因此,我們使用L293D等電機(jī)驅(qū)動(dòng)器模塊。我們還需要一個(gè)像PIC這樣的微控制器,根據(jù)紅外傳感器的值來指導(dǎo)電機(jī)。簡化的框圖如下所示。
這兩個(gè)紅外傳感器將放置在線路的兩側(cè)。如果沒有傳感器檢測到黑線,則PIC微控制器指示電機(jī)向前移動(dòng),如下所示
如果左側(cè)傳感器出現(xiàn)在黑線上,則微控制器通過單獨(dú)旋轉(zhuǎn)右輪來指示機(jī)器人向左轉(zhuǎn)動(dòng)。
如果右傳感器出現(xiàn)在黑線上,則微控制器通過單獨(dú)旋轉(zhuǎn)左輪來指示機(jī)器人向右轉(zhuǎn)。
如果兩個(gè)傳感器都位于黑線上,則機(jī)器人停止。
這樣,機(jī)器人將能夠在不離開軌道的情況下跟隨線路?,F(xiàn)在讓我們看看電路和代碼是什么樣的。
電路圖及說明:
這款基于 PIC 的線路跟隨機(jī)器人的完整電路圖如下所示
該電路采用兩個(gè)紅外傳感器和一對直流減速電機(jī)以及一個(gè)電機(jī)驅(qū)動(dòng)器模塊,如上所示。本項(xiàng)目中使用的電機(jī)驅(qū)動(dòng)器模塊是L293D,我們需要一個(gè)電機(jī)驅(qū)動(dòng)器,因?yàn)镻IC微控制器的輸出引腳無法為電機(jī)驅(qū)動(dòng)提供足夠的電流。該模塊將直接由電路中所示的電源(5V)供電。該模塊有四個(gè)引腳(每個(gè)電機(jī)兩個(gè)),連接到PIC以控制電機(jī)的方向。我們還有兩個(gè)紅外傳感器,用作PIC微控制器的輸入。如果這些傳感器在白色表面上,它們將變?yōu)楦唠娖剑?),而在黑色表面上時(shí),它們將變?yōu)榈停?)。下表顯示了完整的引腳連接。
?
S.No | 連接自 | 已連接到 |
1 | 紅外傳感器 左邊引腳 | RD2(引腳 21) |
2 | 紅外傳感器 右輸出引腳 | RD3(引腳 22) |
4 | 電機(jī) 1 通道 A 引腳 | RC4(引腳 23) |
5 | 電機(jī) 1 通道 B 引腳 | RC5(引腳 25) |
6 | 電機(jī) 2 通道 A 引腳 | RC6(引腳 26) |
7 | 電機(jī) 2 通道 B 引腳 | RC7(引腳 27) |
?
在實(shí)際硬件中,我使用了一個(gè)移動(dòng)電源,它將直接通過其USB端口提供+ 5V的輸出;因此,我繞過了 7805 穩(wěn)壓器,并使用它為 PIC、傳感器和電機(jī)供電。您可以執(zhí)行相同的操作,例如使用12V電池和穩(wěn)壓器,如電路所示。
?
PIC微控制器編程:
準(zhǔn)備好硬件后,就該開始編程了。本頁末尾給出了此PIC線路跟隨器機(jī)器人項(xiàng)目的完整程序。但是,重要的塊解釋如下。
通過以下行初始化 I/O 引腳。2 個(gè)紅外傳感器引腳用作輸入,4 個(gè)電機(jī)引腳充當(dāng)輸出引腳。
TRISD2 = 1; TRISD3 = 1; //Bath the IR sensor pins are declared as input
TRISC4 = 0; TRISC5 = 0; //Motor 1 pins declared as output
TRISC6 = 0; TRISC7 = 0; //Motor 2 pins declared as output
現(xiàn)在,我們必須讀取紅外傳感器的狀態(tài)并相應(yīng)地控制電機(jī)。例如,如果兩個(gè)傳感器都很高(不在黑線下),那么我們將兩個(gè)電機(jī)向前移動(dòng),如下程序所示。
if (RD2==1 && RD3==1) //Both sensor not over balck line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=0; //Motor 2 forward
}
如果左側(cè)傳感器越過黑線,則我們通過保持電機(jī) 1 靜止并向前旋轉(zhuǎn)電機(jī) 2 來右轉(zhuǎn)。這種類型的車削稱為差速車削。
else if (RD2==0 && RD3==1) //Left sensor is over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=0; //Motor 2 forward
}
同樣,如果右側(cè)傳感器越過黑線,則機(jī)器人通過保持第二個(gè)電機(jī)靜止并單獨(dú)向前旋轉(zhuǎn)第一個(gè)電機(jī)來左轉(zhuǎn),如下所示。
else if (RD2==1 && RD3==0) //Right sensor is over black line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=1; //Motor 2 stop
}
最后,如果兩個(gè)傳感器都處于黑線下方,那么是時(shí)候停止機(jī)器人了。這可以通過將兩個(gè)電機(jī)的所有引腳調(diào)高來完成。執(zhí)行相同操作的代碼如下所示
else //Both Sensor over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=1; //Motor 2 stop
}
也就是說,程序已經(jīng)準(zhǔn)備就緒,可以使用任何程序員(如PicKit)上傳到PIC。
PIC 線路跟隨器的實(shí)際應(yīng)用:
一旦硬件和代碼準(zhǔn)備就緒,就該采取一些行動(dòng)了。如前所述,我已經(jīng)使用移動(dòng)電源為機(jī)器人供電,所以我所要做的就是簡單地將移動(dòng)電源連接到已經(jīng)設(shè)置硬件并上傳代碼的機(jī)器人。
PIC Perf 板是為我們的 PIC 教程系列制作的,在該系列中,我們學(xué)習(xí)了如何使用 PIC 微控制器。如果您不知道如何使用 Pickit 3 刻錄程序,您可能希望回到使用 MPLABX 和 XC8 的 PIC 微控制器教程,因?yàn)槲覍⑻^所有這些基本信息。
現(xiàn)在,只需在黑線上啟動(dòng)機(jī)器人,您應(yīng)該按照黑線觀察它。
在這種情況下,您可能會在開始時(shí)遇到一些困難,請進(jìn)一步閱讀。如果車輪以相反的方向旋轉(zhuǎn),只需互換電機(jī)的極性,而電機(jī)的車輪則以相反的方向旋轉(zhuǎn)。如果機(jī)器人偏離線路,請交換紅外傳感器,一切都應(yīng)該很好。
/*
Line Follower using PIC16F877A
* Code by: B.Aswinth Raj
* Dated: 11-09-2017
* More details at: www.CircuitDigest.com
*/
#include
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void main()
{
TRISD2 = 1; TRISD3 = 1; //Bath the IR sensor pins are declared as input
TRISC4 = 0; TRISC5 = 0; //Motor 1 pins declared as output
TRISC6 = 0; TRISC7 = 0; //Motor 2 pins declared as output
while(1)
{
if (RD2==1 && RD3==1) //Both sensor not over balck line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=0; //Motor 2 forward
}
else if (RD2==0 && RD3==1) //Left sensor is over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=0; //Motor 2 forward
}?
else if (RD2==1 && RD3==0) //Right sensor is over black line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=1; //Motor 2 stop
}?
else //Both Sensor over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=1; //Motor 2 stop?
}
}
}
?
?
評論
查看更多