STM32紅外避障&紅外尋跡
一、功能實現1、紅外避障:單片機通過安裝在小車前端兩側的紅外避障模塊檢測障礙物與小車間的距離,加以判斷實現避障功能。 - 紅外尋跡:單片機通過安裝在小車底盤兩側的紅外尋跡模塊檢測黑線與小車的相對位置,加以判斷實現尋跡功能。
2、元器件選擇
2.1單片機型號選擇單片機選擇STM32F103C8T6,此款單片機有48個引腳,72M主頻,64K Flash、20K RAM,3個普通定時器,1個高級定時器,2個SPI,2個I2C,3個串口,1個USB,1個CAN,37個可使用IO口,2個12位10通道ADC。 如此豐富的內設硬件資源足以應付大多數場合使用,相對于STM32F103同系列其他單片具有機性價比高,網絡資源多、例程豐富,適合STM32入門初探與產品設計應用。 

單片機資料網盤下載:http://pan.baidu.com/s/1hrGMLA8 2.2紅外避障模塊選擇紅外數字反射傳感器,一種集發射與接收于一體的光電傳感器,發射光經過調制后發出,接收頭對反射光進行解調輸出,因而有效的避免了可見光的干擾。透鏡的使用,也使得這款傳感器最遠可以檢測80厘米距離。可以應用于機器人避障、走迷宮機器人、流水線計件、多功能提醒器。 
資料下載鏈接:http://pan.baidu.com/s/1miR2bbU 2.3紅外尋跡模塊選擇采用TCRT5000紅外反射傳感器,一種集發射與接收于一體的光電傳感器,它由一個紅外發光二極管和一個NPN紅外光電三極管組成。檢測反射距離1mm-25mm適用,傳感器特設M3固定安裝孔,調節方向與固定方便易用,使用寬電壓LM393比較器,信號干凈,波形好,驅動能力強,超過15mA。可以應用于機器人避障、機器人進行白線或者黑線的跟蹤,可以檢測白底中的黑線,也可以檢測黑底中的白線,是尋線機器人的必備傳感器。流水線計件、電度表脈沖數據采樣、傳真機碎紙機紙張檢測等眾多場合。 
資料下載鏈接:http://pan.baidu.com/s/1i5FwN4L 2.4電機驅動模塊

資料下載鏈接:http://pan.baidu.com/share/link?shareid=457085&uk=2302102993 2.5智能小車底盤選擇
3、原理圖
準備好以上模塊后就可以組裝出一套具有尋跡避障功能的STM32智能小車了。 4、連線按照GPIO口分配表進行連線 

STM32F103單片機最小系統 
L298N電機驅動模塊 
注意,全部模塊都要共地(GND要連在一起)
單片機源程序如下:
- /* 包含頭文件 ----------------------------------------------------------------*/
- #include "stm32f1xx_hal.h"
- #include "pwm.h"
- #include "gpio.h"
- #include "delayus.h"
- #include "direction.h"
- #include "avoid.h"
- #include "track.h"
- /* 擴展變量 ------------------------------------------------------------------*/
- /* 私有函數原形 --------------------------------------------------------------*/
- /* 函數體 --------------------------------------------------------------------*/
- /**
- * 函數功能: 系統時鐘配置
- * 輸入參數: 無
- * 返 回 值: 無
- * 說 明: 無
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 9倍頻,得到72MHz主時鐘
- HAL_RCC_OscConfig(&RCC_OscInitStruct);
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系統時鐘:72MHz
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB時鐘:72MHz
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1時鐘:36MHz
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2時鐘:72MHz
- HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
- // HAL_RCC_GetHCLKFreq()/1000 1ms中斷一次
- // HAL_RCC_GetHCLKFreq()/100000 10us中斷一次
- // HAL_RCC_GetHCLKFreq()/1000000 1us中斷一次
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并啟動系統滴答定時器
- /* 系統滴答定時器時鐘源 */
- HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
- /* 系統滴答定時器中斷優先級配置 */
- HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
- }
- /**
- * 函數功能: 主函數.
- * 輸入參數: 無
- * 返 回 值: 無
- * 說 明: 無
- */
- int main(void)
- {
- /* 復位所有外設,初始化Flash接口和系統滴答定時器 */
- HAL_Init();
- /* 配置系統時鐘 */
- SystemClock_Config();
-
- /**************GPIO******************************************************************/
- GPIOA_Init();//初始化L298N接口
- GPIOB_Init();//初始化尋跡和紅外避障模塊接口
- /***************PWM******************************************************************/
- /* 通用定時器初始化并配置PWM輸出功能 */
- GENERAL_TIMx_Init();
-
- /* 啟動通道PWM輸出 */
- HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1);
- HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_2);
- TIM3->CCR1=TIM3->CCR2=1000;//調車速,范圍0~1000,數值越大速度越快
-
- /* 無限循環 */
- while (1)
- {
- Avoid();//避障
- // Track();//尋跡
- }
- }
復制代碼
所有資料51hei提供下載:
STM32尋跡避障-資料.7z
(3.64 MB, 下載次數: 397)
2019-1-5 01:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|