当前位置: 首页 > news >正文

STM32 E18-D80NK红外检测

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、E18-D80NK 红外传感器:
        • 1. E18-D80NK 的介绍
        • 2. 电器特性
  • 二、红外检测小实验代码讲解
  • 三、实验现象
  • 总结


前言

这篇文章介绍 如何使用 STM32 控制 E18-D80NK 进行红外检测。

一、E18-D80NK 红外传感器:

1. E18-D80NK 的介绍

E18-D8ONK 这是一种 集发射与接收于一体 的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离的问题(由于红外光的特性,不同颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。
在这里插入图片描述

检测 障碍物的距离 可以根据要求通过 尾部的 电位器旋钮 进行调节。

该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场仓。.

2. 电器特性

  • 棕色:VCC;蓝色:GND;黑色:OUT。
  • 工作电压:5V。
  • 检测距离:3-80cm。
  • 工作原理:检测到目标物体时输出低电平,正常状态时输出高电平
    在这里插入图片描述

二、红外检测小实验代码讲解

本实验是 :使用 E18-D80NK 检测到有障碍物时,对检测到障碍物的次数进行计算。

大家可以使用 CubeMX 生成了 相关的引脚配置使能,我这里 是 没有使用这个软件,单独创建一个 test.c 文件 进行配置引脚使能的。

对于 单独创建的代码函数不理解的,可以参考我之前的文章详细介绍了这些函数:STM32CubeMX串口USART中断发送接收数据

我使用的板子是 STM32F103 ,OUT 端口接在了 PB1

test.c :

#include "test.h"static volatile uint8_t level = 1;  /* 没有检测到返回高电平 1 */
uint8_t count= 0;  /* 碰见物体次数 */void Test_Reint(void)   /* 引脚配置,使能 */
{GPIO_InitTypeDef GPIO_InitStruct = {0};  /* 创建具体变量 */__HAL_RCC_GPIOB_CLK_ENABLE();  /* 使能 *//* 配置引脚 */GPIO_InitStruct.Pin = GPIO_PIN_1;GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;   /* 双边沿触发中断 */GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);   /* 完成初始化配置引脚 */HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 2);   /* 设置优先级 */HAL_NVIC_EnableIRQ(EXTI1_IRQn);   /* 使能中断 */
}/* 外部中断服务函数 */
void EXTI1_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}/* 中断回调函数 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{if(GPIO_Pin == GPIO_PIN_1){level = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);  /* 读电平 */if(level == 0)   /* 有物体 0 */{level = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);  /* 读电平 */count++;     }}	
}	int GetTime(void)
{return count;  /* 向 main.c 传递time 的值 */
}

main.c :

  uint8_t date = 0;  /* 物体次数 */date = GetTime();printf("number = %d\r\n",date);

三、实验现象

E18-D80NK 检测到有障碍物时,led 点亮,同时对检测到障碍物的次数进行计算。

实验现象

总结

这是本专栏的第一个小模块,后面会持续更新 其他的模块实验,希望大家多多支持啦。
有不理解的代码可以留言评论,也可以私聊。

http://www.lryc.cn/news/25643.html

相关文章:

  • Linux常用命令--进程和计划任务管理
  • Unity TextMeshPro
  • 虹科分享| 浅谈HK-Edgility边缘计算平台
  • React Router v6详解
  • 帮助100w人成功入职的软件测试面试常见问题以及答案
  • tensorflow2.4--2.回归问题分析
  • 【2023】DevOps、SRE、运维开发面试宝典之Kafka相关面试题
  • CentOS系统编译安装PHP-5.6.27版本
  • 和风SDK查询城市ID(保姆级教程)
  • 暴力递归到动态规划
  • Java:Java仍然处于领先地位?
  • 虚拟地址空间
  • Python基础篇(十五)-- Pygame游戏编程
  • LeetCode 热题 HOT 100 Java 题解 -- Part 2
  • 【项目实战】IDEA常用快捷键汇总
  • 更新 TKK 失败,请检查网络连接。谷歌翻译 translation插件不能用解决办法 亲测有效
  • SpringBoot整合MybatisPlus多数据源
  • 【教程】如何使用Java生成PDF文档?
  • I.MX6ULL内核开发13:pinctrl子系统和gpio子系统-led实验
  • Linux系列 使用vi文本编辑器
  • 【java基础】接口(interface)
  • ChatGPT(GPT3.5) OpenAI官方API正式发布
  • CAD中如何将图形对象转换为三维实体?
  • 【K8S笔记】Kubernetes 集群架构与组件介绍
  • 9 怎么登录VNC
  • MPI ubuntu安装,mpicc,mpicxx,mpif90的区别
  • 移动端笔记
  • 操作系统笔记、面试八股(一)—— 进程、线程、协程
  • Python每日一练(20230302)
  • Numpy课后练习