循跡模組我用的是紅外感測器。黑線的檢測原理是紅外發射管發射光線到路面,紅外光遇到白底則被反射,接收管接收到反射光,經施密特觸發器整形後輸出低電平;當紅外光遇到黑線時則被吸收,接收管沒有接收到反射光,經施密特觸發器整形後輸出高電平。簡單的說就是當紅外尋跡模板遇見黑線時會產生乙個高電平,遇見白線時會返回乙個低電平。所以根據原理設計思路為當左側紅外感測器遇見黑線時左拐,右邊紅外感測器遇見黑線時右拐。這樣就可以完成
尋跡黑線尋跡
白線尋跡
原理左側紅外感測器遇見黑線時左拐,右邊紅外感測器遇見黑線時右拐。
當左側紅外感測器遇見黑線時右拐,右側紅外感測器遇見黑線時左拐。
二、尋跡小車設計注意事項
(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.上位機通過串列埠程式,傳送學習來的碼,可控制...