STM32 学习笔记3-智能小车-红外避障
目錄
紅外避障基本原理:
硬件:
紅外傳感元器件:紅外,眼睛,探測前方障礙物的情況,并反饋給小車
控制模塊:STM32? F103 系列? ? ? ? ?LM393 :比較電壓
電路圖:
?軟件:
邏輯定義(及相關(guān)系統(tǒng)性能定義):
代碼實現(xiàn)
主函數(shù):main.c
越學(xué)越糊涂,C語言中 .h文件和.c文件區(qū)別?
紅外避障配置:void IRAvoidInit(void)? ? PB1? 口,基本思路就是配置GPIO的思路
cybertruck 鎮(zhèn)樓 (圖文無關(guān))
紅外避障基本原理:
紅外避障基本原理和上一篇的循跡很像,只不過傳感元器件為一個紅外傳感器,檢測到障礙物的時候,車輛后退 左右 轉(zhuǎn)等動作
硬件:
紅外傳感元器件:紅外,眼睛,探測前方障礙物的情況,并反饋給小車
F5紅外發(fā)射管940NM V7
F5紅外接受管940NM V4
詳細(xì)了解可看:下面鏈接文章紅外收發(fā)管參數(shù)及硬件設(shè)計參考_sternlycore的博客-CSDN博客_紅外接收二極管參數(shù)
小車及相關(guān)附件:骨架,車身底板,四輪, 作用是提供相關(guān)元器件安裝點
驅(qū)動:雙腿,電機 兩個直流電機
控制模塊:STM32? F103 系列? ? ? ? ?LM393 :比較電壓
電路圖:
2.模塊描述
電路板尺寸:3.2CM*1.4CM;3mm 的螺絲孔,便于固定、安裝;
接通電源后,紅色指示燈亮起,該傳感器模塊對環(huán)境光線適應(yīng)能力強,其具有一對紅外線發(fā)射與接收管,發(fā)射管發(fā)射出一定頻率的紅外線,當(dāng)檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收,經(jīng)過比較器LM393電路處理之后,綠色指示燈會亮起,同時信號輸出接口輸出數(shù)字信號(一個低電平信號),可通過電位器旋鈕調(diào)節(jié)檢測距離,順時針調(diào)電位器,檢測距離增加;逆時針調(diào)電位器,檢測距離減少,有效距離范圍2~30cm,檢測角度35°,工作電壓為3.3V-5V。
傳感器模塊輸出端口OUT 可直接與單片機IO 口連接即可,也可以直接驅(qū)動一個5V 繼電器;
傳感器主動紅外線反射探測,目標(biāo)的反射率和形狀是探測距離的關(guān)鍵。黑色探測距離最小,白色最大;小面積物體距離小,大面積距離大。
接口:1 VCC 外接3.3V-5V 電壓(可以直接與5v 單片機和3.3v 單片機相連);2 GND 外接GND;3 OUT 數(shù)字量輸出接口(0 和1)
調(diào)試時,注意不要用黑色遮擋,紅外直接被吸收掉不能返回。
————————————————
原文鏈接:https://blog.csdn.net/u011878611/article/details/110110927
?軟件:
邏輯定義(及相關(guān)系統(tǒng)性能定義):
傳感器持續(xù) 檢測前方障礙物情況
1、無障礙物→ 保持前進(jìn)
2、有障礙物的情況→ 后退→向左轉(zhuǎn)→ 檢測障礙物?
3、若無→前進(jìn)
4、若有→回到第二步
涉及的相關(guān)參數(shù)設(shè)置
傳感器:傳感器探測的距離S=10cm左右,
傳感器:探測物體的類型=黑色為啥不能檢測?與物體表面的光潔度有關(guān)系?涉及標(biāo)定
(傳感器主動紅外線反射探測,目標(biāo)的反射率和形狀是探測距離的關(guān)鍵。黑色探測距離最小,白色最大;小面積物體距離小,大面積距離大。)
避障后退距離: L1=speed * time?
避障左轉(zhuǎn):??speed? ?和? ?time 的設(shè)置? ? ?大概就這些
其實最最重要的是,避障的策略相關(guān)算法的實現(xiàn),由于我這個小車就是買的網(wǎng)上的成品,非定制,暫未這么深入分析,還在摸索基本功能。
代碼實現(xiàn)
主函數(shù):main.c
主函數(shù)比較簡單,各個函數(shù)的初始化,最主要的是 避障函數(shù)的定義
#include "stm32f10x.h" //stm 系統(tǒng)函數(shù) #include "delay.h" //延時函數(shù) #include "motor.h" //電機 #include "keysacn.h" //按鍵掃描函數(shù) #include "IRSEARCH.h" //紅外搜索函數(shù) #include "IRAvoid.h" //紅外避障函數(shù)int main(void){ delay_init(); //初始化延時KEY_Init(); //初始化按鍵IRSearchInit(); //初始化 紅外搜索 IRAvoidInit(); //初始化紅外避障TIM4_PWM_Init(7199,0); //初始化 PWM 避障STM32_brake(500); //電機剎車0.5skeysacn(); //初始化按鍵搜索while(1){ AVoidRun(); //避障函數(shù)}}IRAvoid.h
#ifndef __IRAVOID_H_ #define __IRAVOID_H_#include "stm32f10x.h" // Device headervoid IRAvoidInit(void); void AVoidRun(void); /* 避障傳感器AVOID_PIN PB1*/#define AVOID_PIN GPIO_Pin_1 #define AVOID_PIN_GPIO GPIOB #define AVOID_IO GPIO_ReadInputDataBit(AVOID_PIN_GPIO, AVOID_PIN) #define BARRIER_Y 0 //有障礙物 #define BARRIER_N 1 //無障礙物#endif越學(xué)越糊涂,C語言中 .h文件和.c文件區(qū)別?
(來源于:C語言中 .h文件和.c文件區(qū)別 - 知乎)
一、意思不同
二、用法不同
三、作用
如果在.h文件中實現(xiàn)一個函數(shù)體,那么如果在多個.c文件中引用它,而且又同時編譯多個.c文件,將其生成的目標(biāo)文件連接成一個可執(zhí)行文件,在每個引用此.h文件的.c文件所生成的目標(biāo)文件中,都有一份這個函數(shù)的代碼,如果這段函數(shù)又沒有定義成局部函數(shù),那么在連接時,就會發(fā)現(xiàn)多個相同的函數(shù),就會報錯。
如果在.h文件中定義全局變量,并且將此全局變量賦初值,那么在多個引用此.h文件的.c文件中同樣存在相同變量名的拷貝,關(guān)鍵是此變量被賦了初值,所以編 譯器就會將此變量放入DATA段,最終在連接階段,會在DATA段中存在多個相同的變量,它無法將這些變量統(tǒng)一成一個變量,也就是僅為此變量分配一個空 間,而不是多份空間,假定這個變量在.h文件沒有賦初值,編譯器就會將之放入BSS段,連接器會對BSS段的多個同名變量僅分配一個存儲空間。
PB1? 口,基本思路就是配置GPIO的思路
void IRAvoidInit(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);GPIO_InitStructure.GPIO_Pin = AVOID_PIN; // PB1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Init(AVOID_PIN_GPIO , &GPIO_InitStructure); }避障函數(shù):?AVoidRun();
void AVoidRun(void) {if(AVOID_IO == BARRIER_N ) //BARRIER_N=0 無障礙物 BARRIER_Y=1 有障礙物 {STM32_run(50,10); //直行BEEP_RESET; //蜂鳴器不工作LED_D3_RESET; //LED不亮}else{BEEP_SET; //蜂鳴器不工作 LED_D3_SET; //LED亮STM32_brake(300); //停止300MSSTM32_back(50,400); //后退400MSSTM32_Left(50,500); //左轉(zhuǎn)500MS}}總結(jié)
以上是生活随笔為你收集整理的STM32 学习笔记3-智能小车-红外避障的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可重定位目标文件(REL)的符号和符号表
- 下一篇: 90后人大硕士为学医竟重新高考,成功被首