STM32紅外尋跡小車

2021-09-25 18:38:56 字數 3304 閱讀 7367

循跡模組我用的是紅外感測器。黑線的檢測原理是紅外發射管發射光線到路面,紅外光遇到白底則被反射,接收管接收到反射光,經施密特觸發器整形後輸出低電平;當紅外光遇到黑線時則被吸收,接收管沒有接收到反射光,經施密特觸發器整形後輸出高電平。簡單的說就是當紅外尋跡模板遇見黑線時會產生乙個高電平,遇見白線時會返回乙個低電平。所以根據原理設計思路為當左側紅外感測器遇見黑線時左拐,右邊紅外感測器遇見黑線時右拐。這樣就可以完成

尋跡黑線尋跡

白線尋跡

原理左側紅外感測器遇見黑線時左拐,右邊紅外感測器遇見黑線時右拐。

當左側紅外感測器遇見黑線時右拐,右側紅外感測器遇見黑線時左拐。

二、尋跡小車設計注意事項

(1)因為硬體條件有限,反應速度不是很快會有一定的誤差,所以小車的速度要盡量慢下來,從而彌補硬體的不足讓小車有足夠的反應時間。

(2)在設定兩個紅外感測器的io口模式時要設定為浮空輸入,這樣才能通過程式讀取io口的狀態來判斷。

(3)在測試小車時盡量在光線較暗的條件下來測試小車,避免光線過亮影響測試。

(4)紅外尋跡模組的out不能接在有上拉電阻的io口

三、尋跡小車程式

#include "timer.h"

void tim3_int_init(u16 arr,u16 psc)//初識化定時器3

void tim3_pwm_init(u16 arr,u16 psc)

timer.h**如下:

#ifndef __timer_h

#define __timer_h

#include "sys.h"

#define left tim3->ccr1

#define right tim3->ccr3

void tim3_int_init(u16 arr,u16 psc);

void tim3_pwm_init(u16 arr,u16 psc);

#endif

moter.c**如下:

rcc->apb2enr|=1<<2;         //使能porta時鐘

rcc->apb2enr|=1<<3; //使能portb時鐘

rcc->apb2enr|=1<<4; //使能portc時鐘

gpioa->crl&=0xff0fffff;

gpioa->crl|=0x00300000;

gpioa->odr|=1<<5;

gpioa->crl&=0x0fffffff;

gpioa->crl|=0x30000000;

gpioa->odr|=1<<7;

gpiob->crl&=0xffffff0f;

gpiob->crl|=0x00000030;

gpiob->odr|=1<<1;

gpiob->crl&=0xfffff0ff;

gpiob->crl|=0x00000300;

gpiob->odr|=1<<2;

gpiob->crl&=0xffff0fff;

gpiob->crl|=0x00003000;

gpiob->odr|=1<<3;

gpiob->crl&=0xfff0ffff;

gpiob->crl|=0x00030000;

gpiob->odr|=1<<4;

gpioc->crl&=0xfff0ffff;

gpioc->crl|=0x00030000;

gpioc->odr|=1<<4;

gpioc->crl&=0xff0fffff;

gpioc->crl|=0x00300000;

gpioc->odr|=1<<5;

moter.h**如下:

#ifndef __moter_h

#define __moter_h

#include "sys.h"

//電機埠定義(pwma pb0 pwmb pa6)

#define ain2 pbout(1)

#define ain1 pbout(2)

#define stby pbout(3)

#define bin2 pcout(5)

#define bin1 pcout(4)

void moter_init(void); //初始化

#endif

xunji.c**如下:

#include "xunji.h"

void xunji_init(void)

xunji.h**如下

#ifndef __xunji_h

#define __xunji_h

#include "sys.h"

#define left_led pcin(6)

#define right_led pcin(7)

void xun_init(void); //初始化

#endif

這段**中很容易犯錯誤為#define left_led pcout(6) #define right_led pcout(7)

因為我們要讀取io口的狀態所以不能用out必須用in,寫成#define left_led pcin(6)和#define right_led pcin(7)

test.c**如下:

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "moter.h"

#include "timer.h"

#include "xunji.h"

void hou(void)//定義後退函式

void stop(void)//停

void you(void)//右拐

void zuo(void)//左拐

void go(void)//前進

int main(void)

else

if(left_led == 0 && right_led == 1)//小車左邊出線,右轉修正

} }}

STM32循跡 藍芽小車

在做小車之前,首先應該明確需要的器件,其次劃分功能模組,乙個模組乙個模組的來,在完成乙個模組之後新增另乙個能保證最終小車的穩定功能實現。有兩種思路 一,以實現功能為主,不考慮後期要加什麼東西,實現以後再做優化。二,先將專案整體需要做的東西全部過一遍,再一步步做出成品。我是第一種,在搭建的過程中也遇到...

stm32 藍芽 智慧型小車

電源問題已經解決,還是18650更給力,兩節就可以達到8v上下。原來是模仿網上下的模板,把模板燒進去發現並沒有成功,所以就把原來寫的 全部推翻,重新開始寫。其實寫乙個工程,最快的方法並不是一口氣把所有東西都給新增上,因為一旦出現錯誤,當然肯定會出現錯誤,根本不知道從 下手改bug,所以還不如乙個乙個...

STM32紅外的實現

剛畢業不久,這可以說是我在公司做的第乙個專案吧,跟大家分享一下!一 環境 公司所採用的是stm32f103rbt6晶元,本人開發是基於官方提供的v3.5.0的函式庫。二 所要實現的功能是 1.開發板能夠學習由遙控器傳送來的紅外碼,並在串列埠上列印出來。2.上位機通過串列埠程式,傳送學習來的碼,可控制...