总结:灰度传感器利用不同颜色的传感表面反射不同程度的光线的原理来检测颜色深度。 这就是我们使用的数字灰度传感器。 通过在微机处理后的数据中加入数字灰度传感器,并对得到的原始数据加入滤波算法和数据混合算法,就可以得到变异小、环境适应性高的数字传感器。
文章内容
简介
1.跟踪传感器工作原理概述
2.如何使用
3.代码实现
简介:
基于刚刚结束的产业创新大赛,我们想分享一下我们的传感器。 选型方案
1.跟踪传感器工作原理介绍
灰度传感器有两种类型:数字传感器。和模拟传感器有两种,原理几乎相同。 原理:发光二极管和受光二极管安装在同一表面。 灰度传感器利用不同颜色的传感表面反射不同程度的光线的原理来检测颜色深度。 在有效检测距离内(理论上距离无限大,但实际中会受到外部光源的影响,所以最佳距离为15mm至50mm。如果距离太高,必须将其切断),光线从发光二极管发出的光照亮检测表面。 传感表面反射一些光,光电二极管检测该光的强度并将其转换为微控制器可以理解的电信号。 该电信号是模拟值。 微控制器可以执行二值化处理,或提供电平分割线,具体取决于模拟值的大小。 如果电压大于某个值,则给出高电平(或低电平)。 如果电压低于某个值,就会给出低电平(或高电平)。 当然,您也可以使用电压比较器作为电平参考电压。 这就是我们使用的数字灰度传感器。 通过在数字灰度传感器中加入数据处理微控制器,并对获得的原始数据应用滤波算法和数据混合算法,可以获得波动较小、环境适应性强的数字传感器。 如果采集到的原始数据不经过处理,就会以模拟值的形式输出。 这就是模拟灰度传输传感器。 每个传感器都有误差,因此在相同条件下模拟值永远不会相同。
作为用户,您通常只需要知道如何使用它(用人类语言说话)。 简而言之,智能传感器有两个输出。 方法
第一种是通过GPIO输出高电平和低电平5v/3.3v(比如传感器在黑线上输出高电平,但是黑线不输出(不输出低电平) )
p>
第二个是串口通信。 智能传感器有一个MCU,可以通过自身的采集和计算来收集传感器的状态,只需要使用主板与传感器进行通信即可。 主板知道我们想要什么。 只需知道传感器的状态即可。
2.如何使用
接下来我会讲解如何使用(仅供参考)
小麦车精准定位如果想要实现,首先需要足够的位置状态来实现位置闭环。 使用第一种GPIO输出高低电平时,一个通道对应一个引脚。 四个7通道相当于28个引脚,引脚太多了。 这样很不自然,也很麻烦,所以我采用第二种串口通信方式。 stm32f103模型板有五个硬件串行端口,其中四个用于与传感器通信,其中一个与主机通信以处理数据和计算,从而改变主体的校准。
请说出你的想法
第一步是配置cubemx串口
首先配置RCC、SYS和时钟(此处略)
下一步,生成并打开项目文件
3. 代码实现
1.主函数代码
int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration[k4 ]- ---[k4 ]--------------------------[k4 ] ]---------------- [ k4]------*/ /* 重置所有外设并初始化闪存接口和 Systick。 */ HAL_Init(); /* USER CODE BEGIN Init * / /* USER CODE END Init */ /* 设置系统时钟 */ SystemClock_Config(); /* 用户代码 BEGIN SysInit */ /* 用户代码 END SysInit */ /* 初始化所有配置的外设 */ MX_USART1_UART_Init(); MX_USART3_UART_Init(); MX_UART5_Init(); /* 用户代码开始 2 */lay_ms (1000);HAL_UART_Transmit(&huart) 2、&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 */ /* 死循环*/ /* 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_dat2=0;Rx_dat3=0; ;}如果(Rx_mcu==0x31){chuan_flag=1;}如果(Rx_mcu==0x32){chuan_flag=2;}如果(Rx_mcu==0x33){chuan_flag=3;}如果(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 ;}如果(Rx_mcu==0x3b){qq=0;chuan_flag=11;}如果(Rx_mcu==0x3c){qq=1;chuan_flag=12;}如果(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;}如果(Rx_mcu==0x41){qq=0;chuan_flag=17;}如果(Rx_mcu==0x42){qq=1;chuan_flag=18;}如果(Rx_mcu==0x43){qq=0; =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); 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| | 接收_dat2 == 0x20 ||Rx_dat2 == 0x40 ||Rx_dat2 == 0x30 || dat2== 0x04 || Rx_dat2 == 0x0c | Tx_0x34), } }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_0) x32 ),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(chu an_flag == 13){ if(Rx_dat2 == 0x08){HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31),10000);if(Rx_dat2 == 0x04 ||Rx_dat2 == 0x0c || x_0x33, sizeof(Tx_0x33),10000); }if(Rx_dat2 == 0x10||Rx_dat2 == 0x18| | |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),10 000 }}否则 if(chuan_flag==17){if(Rx_dat2 == 0x01||Rx_dat2 == 0x02||Rx_dat2 == 0x03){ HAL_UART_Transmit(&huart1,&Tx_0x31,sizeof(Tx_0x31), 10000); }如果( Rx_dat2 == 0x40 ||Rx_dat2 == 0x20 ||izeof(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(&华特3, &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, 大小(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); rx_dat == 0x04 || rx_dat = 0x02 || rx_dat = 06 || rx_dat == 0x03){HAL_Uart_transmit 、tx_0x33、 sizeof(Tx_0x33),10000); }if(Rx_dat >= 0x10||Rx_dat ==0x18 || Rx_dat == 0x20 | ++; if(chuan_flag==12){if(Rx_dat == 0x3f){HAL_UART_Transmit(&huart1,&Tx_0x37,sizeof(Tx_0x37),10000); ){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_0x 31,sizeof(tx_0x31),10000);} if(rx_dat == 0x40 || rx_dat == rx_dat == 0x20 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){哈尔_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); }
(供参考)这些都是我当时担任的职务。 我记下了我使用的位置。 有点混乱=.=
评论前必须登录!
注册