摘要:灰度傳感器利用不同顏色的檢測面對光的反射程度不同的原理進行顏色深淺檢測。這就是我們用的數字量灰度傳感器。數字量的灰度傳感器如果加入的是單片機處理數據,那么可以把得到的原始數據加入濾波算法數據混合算法得到一個波動小適應環境強的數字傳感器。
文章目錄
引言
1.尋跡傳感器工作原理介紹
2.使用方法
3.代碼實現
引言:
? ? 基于剛剛結束的工創賽給大家分享一下我們的傳感器選擇方案
一、尋跡傳感器工作原理介紹
? ? ? ?灰度傳感器有數字傳感器和模擬傳感器兩種,其原理大致相同。原理:一只發光二極管和一只光敏二極管,安裝在同一面上。灰度傳感器利用不同顏色的檢測面對光的反射程度不同的原理進行顏色深淺檢測。在有效的檢測距離內(理論上距離可以無限遠,實際受外界光源的影響,最佳距離為15mm至50mm,如果距離過高的話,需要進行遮光),發光二極管發出的光,照射在檢測面上,檢測面反射部分光線,光敏二極管檢測此光線的強度并將其轉換為單片機可以識別的電信號。這個電信號是一個模擬值,單片機可以根據模擬值的大小進行二值化處理,也就是給一個電平分界線,當電壓大于一個值的時候給一個高電平(或低電平),當電壓小于一個值的時候給一個低電平(或高電平)。當然這里可以用電壓比較器作為電平的參考電壓。這就是我們用的數字量灰度傳感器。數字量的灰度傳感器如果加入的是單片機處理數據,那么可以把得到的原始數據加入濾波算法、數據混合算法得到一個波動小、適應環境強的數字傳感器。 如果對采集的原始的數據不做處理,那么就是模擬值輸出。也就是我們的模擬量灰度傳感器。因為每路傳感器相互之間都是有誤差的,所以同樣的條件下模擬值肯定不是一樣。
作為我們使用者來說一般知道怎么用就可以了(說點人話)簡單來說智能款傳感器有兩種輸出方式
第一種是通過gpio輸出高低電平5v/3.3v(例如傳感器在黑線上輸出高電平,不在黑線上輸出低電平)
第二種是串口通信,因為在智能款傳感器上有一顆mcu通過自身的采集和計算可以采集到傳感器的狀態,而我們要做的就是用我們的主板與傳感器的主板通信就可以來知道我們想知道的傳感器的狀態就可以了。
?2.使用方法
接下來給大家講一下使用方法(僅供參考)
作為一個麥輪車要想進準的定位首先就是位置狀態足夠多從而實現位置閉環,如果采用第一種gpio輸出高低電平的話,那么一路對應著一路引腳,四個7路就是28個引腳,太占引腳而且麻煩,所以我們采用第二種串口通信的方式,stm32f103這個型號的板子有5路硬件串口,四路作為與傳感器通信,一路與我們的上位機通信處理數據和計算從而改變車身校正。
提供一個思路
第一步配置cubemx的串口
首先配置RCC、SYS、clock(這里跳過了)
?
?
然后生成項目文件打開
3.代碼實現
1.主函數代碼
int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); MX_UART4_Init(); MX_UART5_Init(); /* USER CODE BEGIN 2 */delay_ms(1000);HAL_UART_Transmit(&huart2,&Tx_strcc,sizeof(Tx_strcc),10000);//串口2發送函數HAL_UART_Receive_IT(&huart1,&Rx_mcu,1);//串口1接收函數HAL_UART_Receive_IT(&huart5,&Rx_dat2,1);//串口5接收函數HAL_UART_Receive_IT(&huart3,&Rx_dat3,1);//串口3接收函數 HAL_UART_Receive_IT(&huart2,&Rx_dat,1); //串口2接收函數 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}
?2.串口中斷代碼
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if((huart->Instance)==USART1) { if(Rx_mcu==0x00) {chuan_flag=0; Rx_dat=0; Rx_dat2=0; Rx_dat3=0; wink=0; } if(Rx_mcu==0x31) {chuan_flag=1; } if(Rx_mcu==0x32) {chuan_flag=2; } if(Rx_mcu==0x33) {chuan_flag=3; } if(Rx_mcu==0x34) {chuan_flag=4; } if(Rx_mcu==0x35) {chuan_flag=5; } if(Rx_mcu==0x36) {qq=1; chuan_flag=6; } if(Rx_mcu==0x37) {qq=0; chuan_flag=7; } if(Rx_mcu==0x38) {qq=0; chuan_flag=8; } if(Rx_mcu==0x39) {qq=0; chuan_flag=9; } if(Rx_mcu==0x3a) {qq=0; chuan_flag=10; } if(Rx_mcu==0x3b) {qq=0; chuan_flag=11; } if(Rx_mcu==0x3c) {qq=1; chuan_flag=12; } if(Rx_mcu==0x3d) {qq=0; chuan_flag=13; } if(Rx_mcu==0x3e) {qq=0; chuan_flag=14; } if(Rx_mcu==0x3f) {qq=1; chuan_flag=15; } if(Rx_mcu==0x40) {qq=0; chuan_flag=16; } if(Rx_mcu==0x41) {qq=0; chuan_flag=17; } if(Rx_mcu==0x42) {qq=1; chuan_flag=18; } if(Rx_mcu==0x43) {qq=0; chuan_flag=19; } send_data(); HAL_UART_Receive_IT(&huart1,&Rx_mcu,1); } if((huart->Instance)==UART5) { if(chuan_flag==4) {if(Rx_dat2 == 0x40) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); }} if(chuan_flag==5) {if(Rx_dat2 == 0x7f) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); }} if(chuan_flag==7) { if(chu_or_jue==chu) { if(Rx_dat2 == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } if(Rx_dat2 == 0x10||Rx_dat2 == 0x18||Rx_dat2 == 0x20||Rx_dat2 == 0x40||Rx_dat2 == 0x30||Rx_dat2 == 0x60||Rx_dat2 == 0x70) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); } if(Rx_dat2 == 0x04||Rx_dat2 == 0x0c||Rx_dat2 == 0x02||Rx_dat2 == 0x01||Rx_dat2 == 0x06||Rx_dat2 == 0x07||Rx_dat2 == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x34,sizeof(Tx_0x34),10000); } } if(chu_or_jue==jue) { if(Rx_dat2 == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } } if(chuan_flag==9) {if(Rx_dat2 == 0x40) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); }} if(chuan_flag==10) {if(Rx_dat2 != 0x40&&Rx_dat2 != 0x20&&Rx_dat2 != 0x60) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); } } if(chuan_flag==13) { if(Rx_dat2 == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } if(Rx_dat2 == 0x04||Rx_dat2 == 0x0c||Rx_dat2 == 0x02||Rx_dat2 == 0x01||Rx_dat2 == 0x06||Rx_dat2 == 0x07||Rx_dat2 == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); } if(Rx_dat2 == 0x10||Rx_dat2 == 0x18||Rx_dat2 == 0x20||Rx_dat2 == 0x40||Rx_dat2 == 0x30||Rx_dat2 == 0x60||Rx_dat2 == 0x70) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x31),10000); } wink++; } else if(chuan_flag==14) {if(Rx_dat2 == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x34,sizeof(Tx_0x34),10000); }} else if(chuan_flag==17) {if(Rx_dat2 == 0x01||Rx_dat2 == 0x02||Rx_dat2 == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } if(Rx_dat2 == 0x40||Rx_dat2 == 0x20||Rx_dat2 == 0x30) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } } HAL_UART_Transmit(&huart5,&Tx_strcc,sizeof(Tx_strcc),10000);HAL_UART_Receive_IT(&huart5,&Rx_dat2,1); } if((huart->Instance)==USART3) { if(chuan_flag==6) {if(Rx_dat3 == 0x7f) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); }} else if(chuan_flag==18) {if(Rx_dat3 == 0x01||Rx_dat3 == 0x02||Rx_dat3 == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } if(Rx_dat3 == 0x40||Rx_dat3 == 0x20||Rx_dat3 == 0x30) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } } HAL_UART_Transmit(&huart3,&Tx_strcc,sizeof(Tx_strcc),10000); HAL_UART_Receive_IT(&huart3,&Rx_dat3,1); } if((huart->Instance)==USART2) { if(chuan_flag==1) {if(Rx_dat == 0x08||Rx_dat == 0x04||Rx_dat == 0x0c) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); }} if(chuan_flag==2) {if(Rx_dat == 0x7f) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); }} if(chuan_flag==3) { if(Rx_dat != 0x7f) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } if(Rx_dat == 0x7f) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); }} if(chuan_flag==8) {if(Rx_dat == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); }} if(chuan_flag==11) { if(Rx_dat == 0x08) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } if(Rx_dat == 0x04||Rx_dat == 0x0c||Rx_dat == 0x02||Rx_dat == 0x01||Rx_dat == 0x06||Rx_dat == 0x07||Rx_dat == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x33,sizeof(Tx_0x33),10000); } if(Rx_dat >= 0x10||Rx_dat == 0x18||Rx_dat == 0x20||Rx_dat == 0x40||Rx_dat == 0x30||Rx_dat == 0x60||Rx_dat == 0x70) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x31),10000); } wink++; } if(chuan_flag==12) {if(Rx_dat == 0x3f) {HAL_UART_Transmit(&huart1,&Tx_0x37,sizeof(Tx_0x37),10000); } } else if(chuan_flag==15) {if(Rx_dat == 0x40) {HAL_UART_Transmit(&huart1,&Tx_0x35,sizeof(Tx_0x35),10000); }} else if(chuan_flag==16) {if(Rx_dat == 0x01||Rx_dat == 0x02||Rx_dat == 0x03) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } if(Rx_dat == 0x40||Rx_dat == 0x20||Rx_dat == 0x30) {HAL_UART_Transmit(&huart1,&Tx_0x32,sizeof(Tx_0x32),10000); } } if(chuan_flag==19) {if(Rx_dat == 0x20||Rx_dat == 0x30) {HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000); } } if(chu_or_jue==1) { HAL_UART_Receive_IT(&huart1,&Rx_mcu,1); } HAL_UART_Transmit(&huart2,&Tx_strcc,sizeof(Tx_strcc),10000); HAL_UART_Receive_IT(&huart2,&Rx_dat,1); }
(大家僅供參考)這個是當時我當時做的所有的位置當時用到哪個位置就就寫到哪了有點亂哈=.=
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121784.html
摘要:前言傳感器工作原理代碼部分電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。電機管腳初始化函數定義管腳的結構體打開所要使用的時鐘將管腳特殊功能關掉配置管腳的參數,用于驅動電機。配置管腳的參數紅外傳感器。 前言:傳感器工作原理: 代碼部分:? ? main.c #include motor....
摘要:總線掛載的外設有等。外設地址映射片上外設區分為三條總線,根據外設速度的不同,不同總線掛載著不同的外設,掛載低速外設,和掛載高速外設。 第二章 STM32資源介紹 2...
基于STM32f103c8t6和L292N驅動設計避障小車(核心函數的建立為自己所寫) 一.項目感觸 完成這個項目自己一開始也是無法從本身上出發,看著這個最小系統板和這個電機驅動模塊上面想著怎樣實現讓這兩塊板子實現四個電機上面轉動呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長的借鑒之路,首先作為一個開發者,我覺得學習的地方首選是B站,所以我找了相關的做智能小車的視頻 首先是B站智能小車教...
摘要:文章目錄一原理二實現顯示中文滾動顯示顯示字符串讀取溫濕度顯示溫濕度三結果開機顯示歡迎信息循環讀取溫濕度以及滾動顯示我的四總結五參考六源碼一原理的定義就是串行外圍設備接口。 ...
摘要:基于開發的軟件包導師汪禮超學員崔林威摘要騰訊物聯網操作系統是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數處理進行生成工程配置,按如下界面進行配置,最后點擊,并點擊。 ...
閱讀 3513·2021-10-08 10:04
閱讀 862·2019-08-30 15:54
閱讀 2179·2019-08-29 16:09
閱讀 1346·2019-08-29 15:41
閱讀 2271·2019-08-29 11:01
閱讀 1734·2019-08-26 13:51
閱讀 1025·2019-08-26 13:25
閱讀 1805·2019-08-26 13:24