【Arduino】基于Arduino的循迹小车电路连接与程序编写
文章目錄
- L298P工作原理:
- L298P與其他元件的連接方法:laughing:
- 與Arduino的連接
- 與紅外傳感器的連接:smile_cat:
- 電機(jī)的連接
 
- 程序編寫:smiley:
- Aruino函數(shù)說(shuō)明
- 初始宏定義
- 功能函數(shù)定義
- 初始化函數(shù)
- 主任務(wù)循環(huán)
- 完整代碼如下:haircut:
- 無(wú)法循跡、出現(xiàn)錯(cuò)誤怎么調(diào):apple:
 
 
Author:1071094493@qq.com
L298P工作原理:
? 上圖是本文中使用的L298P驅(qū)動(dòng),他的作用是將輸入的3.3V或5V低壓信號(hào)轉(zhuǎn)換為高壓信號(hào)。
? 上圖是L298P的原理圖,從上圖可以看出對(duì)于L298P芯片而言當(dāng)In1(單片機(jī)輸入)為高電平時(shí)輸出Out1將會(huì)和Vs(電源)連通也為高電平,當(dāng)為低電平時(shí)Out1將會(huì)和地相連。對(duì)于(In2-Out2)(In3-Out3)(In4-Out4)這三種組合也是同樣的道理,通過(guò)電路結(jié)構(gòu)我們發(fā)現(xiàn),只有圖中的EnA與EnB同時(shí)為高電平時(shí),四個(gè)輸出接口(Out1、Out2、Out3、Out4)才會(huì)出現(xiàn)有效值。利用這個(gè)特點(diǎn)我們可以通過(guò)拉低EnA和EnB的值來(lái)關(guān)閉輸出實(shí)現(xiàn)剎車的目的。
L298P與其他元件的連接方法😆
與Arduino的連接
首先將L298P電機(jī)驅(qū)動(dòng)板查到Arduno板上如下圖所示:
 
安裝效果如下圖
 
與紅外傳感器的連接😸
? 本次實(shí)驗(yàn)采用的紅外傳感器如下圖所示,有三個(gè)引腳VCC、GND和Out引腳。其中VCC為電源正極引腳,GND為電源負(fù)極引腳,Out為輸出腳。白色小燈泡發(fā)射紅外線,黑色小燈泡負(fù)責(zé)接收紅外信號(hào)。調(diào)節(jié)模塊上面藍(lán)色可調(diào)變阻器的阻值可以調(diào)節(jié)紅外傳感器的探測(cè)范圍。
? 當(dāng)模塊可以收到紅外信號(hào)時(shí)模塊信號(hào)燈亮起,此時(shí)可以看到模塊上有兩個(gè)紅燈會(huì)亮(一個(gè)為電源燈,另一個(gè)為信號(hào)燈)。同時(shí)Out端電壓由高電平變?yōu)榈碗娖健M瑯拥牡览碛捎诤谏占t外光線能力強(qiáng)、白色反射能力強(qiáng),當(dāng)紅外對(duì)準(zhǔn)白色區(qū)域時(shí)紅外線會(huì)被反射回來(lái),Out由高到低,當(dāng)對(duì)準(zhǔn)黑線時(shí)白燈發(fā)射的紅外信號(hào)會(huì)被黑線吸收,模塊收不到紅外信號(hào)Out端就會(huì)被拉高,輸出高電平。
電機(jī)的連接
將電機(jī)驅(qū)動(dòng)板與Arduino開發(fā)板按照第一步插在一起后按照上圖連好電機(jī)與紅外傳感器即可。
程序編寫😃
Aruino函數(shù)說(shuō)明
| PWM輸出函數(shù) | analogWrite(number,value); | number是十進(jìn)制數(shù)字,對(duì)應(yīng)Arduino引腳號(hào)。value為0-255之間的值。 | 
| 開關(guān)數(shù)字量函數(shù) | digitalWrite(number,HIGH/LOW) | number同上,第二個(gè)參數(shù)為HIGH時(shí)引腳輸出高電平,為L(zhǎng)OW時(shí)輸出低。 | 
初始宏定義
下方代碼是對(duì)接口的宏定義,采用宏定義而非變量原因在于,宏定義在程序運(yùn)行時(shí)不可改變。
//對(duì)接口進(jìn)行重命名(此處需要根據(jù)自己的驅(qū)動(dòng)引腳分布進(jìn)行改變-本文以L298P為例) #define ENA 10 #define ENB 11//IN1與IN2在電路中通過(guò)反相芯片進(jìn)行反相因此不必再定義In2和In4 //IN3與IN4反相 #define IN1 12 #define IN3 13//將電機(jī)接口朝上 //L298P 從左至右分別為OUT 1 2 3 4//定義紅外傳感器輸入接口 //左側(cè)紅外使用8腳輸入,右側(cè)使用9腳 //壓到白線為低電平,壓到黑線輸出高電平 #define L_SENSE 8 #define R_SENSE 9紅外傳感器信號(hào)采集變量定義
//定義全局變量用于讀取紅外傳感器的值 int L=0; int R=0;功能函數(shù)定義
void start_run() {//開始運(yùn)行analogWrite(ENA,100);analogWrite(ENB,100);digitalWrite(IN1,HIGH);digitalWrite(IN3,HIGH); }void stop_run() {//剎車analogWrite(ENA,0);analogWrite(ENB,0);digitalWrite(IN1,HIGH);digitalWrite(IN3,HIGH); }void direct_run() {//直行analogWrite(ENA,100);analogWrite(ENB,100);digitalWrite(IN1,HIGH);digitalWrite(IN3,HIGH); }void left_run() {//向左轉(zhuǎn)analogWrite(ENA,100);analogWrite(ENB,50);digitalWrite(IN1,HIGH);digitalWrite(IN3,HIGH); }void right_run() {//向右轉(zhuǎn)analogWrite(ENA,50);analogWrite(ENB,100);digitalWrite(IN1,HIGH);digitalWrite(IN3,HIGH); }初始化函數(shù)
void setup() {//初始化接口模式輸出pinMode(ENA,OUTPUT);pinMode(ENB,OUTPUT);pinMode(IN1,OUTPUT);pinMode(IN3,OUTPUT);//定義接口模式紅外輸入pinMode(L_SENSE, INPUT);pinMode(L_SENSE, INPUT);//設(shè)置串口波特率為9600Serial.begin(9600);//上電即開始運(yùn)行start_run(); }主任務(wù)循環(huán)
void loop() {//分別讀取左右兩個(gè)紅外傳感器的狀態(tài)L=digitalRead(L_SENSE);R=digitalRead(R_SENSE);//當(dāng)兩側(cè)同時(shí)為低電平時(shí)左右都不壓線if(L==LOW&&R==LOW){direct_run();}else if(L==LOW&&R==HIGH)//當(dāng)右側(cè)壓線時(shí)向左轉(zhuǎn){right_run();}else if(L==HIGH&&R==LOW)//當(dāng)左側(cè)壓線時(shí)向右轉(zhuǎn){left_run();}else{direct_run();//默認(rèn)情況下直行 } }完整代碼如下💇
//對(duì)接口進(jìn)行重命名 #define ENA 10 #define ENB 11//IN1與IN2在電路中通過(guò)反相芯片進(jìn)行反相 //IN3與IN4反相 #define IN1 12 #define IN3 13//將電機(jī)接口朝上 //L298P 從左至右分別為OUT 1 2 3 4//定義紅外傳感器輸入接口 //左側(cè)紅外使用8腳輸入,右側(cè)使用9腳 //壓到白線為低電平,壓到黑線輸出高電平 #define L_SENSE 8 #define R_SENSE 9//定義全局變量用于讀取紅外傳感器的值 int L=0; int R=0;void setup() {//初始化接口模式輸出pinMode(ENA,OUTPUT);pinMode(ENB,OUTPUT);pinMode(IN1,OUTPUT);pinMode(IN3,OUTPUT);//定義接口模式紅外輸入pinMode(L_SENSE, INPUT);pinMode(L_SENSE, INPUT);//設(shè)置串口波特率為9600Serial.begin(9600);start_run(); }無(wú)法循跡、出現(xiàn)錯(cuò)誤怎么調(diào)🍎
1:檢查電池電量是否充足
2:代碼沒(méi)有問(wèn)題,經(jīng)過(guò)檢驗(yàn)可以進(jìn)行循跡,不要隨便修改。
3:采用兩個(gè)紅外傳感器就行,傳感器之間距離不要太遠(yuǎn),也不要太靠近。兩傳感器分置黑線兩側(cè)、距離黑線2-3CM為佳。
4:紅外傳感器不要和驅(qū)動(dòng)輪在同一天直線上,否則小車來(lái)不及反應(yīng),容易跑偏。
5:上電之后默認(rèn)為直行,檢查兩個(gè)電機(jī)是否均為向前轉(zhuǎn)動(dòng),如果不是調(diào)換下電機(jī)兩個(gè)接口使其正向轉(zhuǎn)動(dòng)。
6:此處定義紅外信號(hào)采集腳為8、9腳,如果無(wú)法循跡調(diào)換左右兩個(gè)紅外傳感器輸入腳試試,比如左側(cè)傳感器插入到9腳中。
總結(jié)
以上是生活随笔為你收集整理的【Arduino】基于Arduino的循迹小车电路连接与程序编写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Python 贪吃蛇 代码
- 下一篇: Java 输入输出流实验
