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

GD32VW553开发板光敏电阻传感器模块移植实战:ADC与GPIO双模式光照检测

GD32VW553开发板光敏电阻传感器模块移植实战ADC与GPIO双模式光照检测最近在做一个智能环境监测的小项目需要检测环境光照强度。手头正好有立创的GD32VW553开发板和一块常见的光敏电阻模块型号5516今天就来分享一下如何把这两者结合起来实现光照检测功能。这个教程适合正在学习GD32VW553或者需要集成光敏传感器的朋友。我会从模块原理讲起一步步带你完成硬件连接、驱动编写和代码调试让你不仅能点亮LED还能真正理解传感器的工作原理和编程方法。1. 光敏电阻模块先搞懂它怎么工作光敏电阻听起来挺专业其实原理很简单。它就是用硫化镉或硒化镉这类半导体材料做成的特殊电阻特点是光照越强电阻值越小。你可以把它想象成一个“见光怂”的电阻——有光的时候内部会产生很多能导电的粒子载流子电阻就变小了没光的时候这些粒子很少电阻就变得很大。我手头这个5516型号在光亮环境下电阻大约8-20KΩ在黑暗环境下能达到1MΩ左右。咱们用的这个模块设计得很贴心给了我们两种读取方式接口信号类型工作原理AO模拟输出模拟电压直接输出光敏电阻分压后的电压值光照越强电压越高DO数字输出数字电平通过LM393比较器电压超过阈值就输出高/低电平AO接口直接读取模拟电压需要用到MCU的ADC模数转换器功能。这样我们可以得到连续的光照强度值精度高。DO接口输出的是0或1的数字信号相当于一个“开关”。当光照低于某个阈值时输出一种状态高于阈值时输出另一种状态。这个阈值可以通过模块上的电位器调节。注意模块工作电压是3.3-5VGD32VW553开发板上有3.3V输出直接接上就行不用担心电压不匹配。2. 硬件连接把模块接到开发板上连接很简单就四根线。我选择用开发板的PB0引脚接模块的AO模拟输出PB2引脚接DO数字输出。为什么选这两个引脚因为PB0有ADC功能而PB2是普通GPIO正好满足我们的需求。具体接线如下模块引脚开发板引脚作用VCC3V3供电3.3VGNDGND接地DOPB2数字输出接GPIO输入AOPB0模拟输出接ADC输入接好线后模块上的指示灯应该会亮起。如果没亮检查一下接线有没有接反。3. 代码编写创建光照传感器驱动接下来是重头戏——写代码。我们需要创建两个文件bsp_illume.c和bsp_illume.h把它们放在你的工程里记得把包含路径添加到编译器设置中。3.1 头文件定义bsp_illume.h头文件主要是定义引脚和声明函数咱们先看看关键的宏定义#ifndef BSP_CODE_BSP_ILLUME_H_ #define BSP_CODE_BSP_ILLUME_H_ #include gd32vw55x.h #include systick.h /* 引脚定义 */ /* PB0 用作ADC输入对应ADC通道8 */ #define BSP_ADC_GPIO_RCU RCU_GPIOB #define BSP_ADC_GPIO_PORT GPIOB #define BSP_ADC_GPIO_PIN GPIO_PIN_0 #define BSP_ADC_RCU RCU_ADC #define BSP_ADC ADC #define BSP_ADC_CHANNEL ADC_CHANNEL_8 /* PB2 用作数字输入 */ #define BSP_DO_GPIO_RCU RCU_GPIOB #define BSP_DO_GPIO_PORT GPIOB #define BSP_DO_GPIO_PIN GPIO_PIN_2 /* 读取DO引脚电平的宏 */ #define BSP_DO_READ() gpio_input_bit_get(BSP_DO_GPIO_PORT, BSP_DO_GPIO_PIN) /* 函数声明 */ void illume_Init(void); // 初始化函数 int Get_illume_Adc_Value(uint8_t Count); // 获取ADC原始值 int Get_illume_Percentage_value(void); // 获取光照百分比 uint8_t Get_illume_DO_In(void); // 读取DO引脚状态 #endif /* BSP_CODE_BSP_ILLUME_H_ */这里有几个关键点BSP_ADC_CHANNEL_8PB0引脚在GD32VW553上对应的是ADC通道8这个一定要写对BSP_DO_READ()用宏定义封装了GPIO读取函数后面用起来方便函数分工明确初始化、读原始值、读百分比、读数字状态3.2 初始化函数bsp_illume.c初始化要做两件事配置ADC和配置GPIO。ADC配置稍微复杂点我一步步解释void illume_Init(void) { /* 1. 先打开时钟开关 */ rcu_periph_clock_enable(BSP_ADC_GPIO_RCU); // GPIOB时钟 rcu_periph_clock_enable(BSP_DO_GPIO_RCU); // GPIOB时钟和上面是同一个但为了清晰分开写 rcu_periph_clock_enable(BSP_ADC_RCU); // ADC时钟 /* 2. 配置DO引脚为输入模式 */ gpio_mode_set(BSP_DO_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, BSP_DO_GPIO_PIN); /* 3. 配置ADC时钟为4分频 */ adc_clock_config(ADC_ADCCK_PCLK2_DIV4); /* 4. 配置ADC引脚为模拟输入模式 */ gpio_mode_set(BSP_ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, BSP_ADC_GPIO_PIN); /* 5. 配置ADC工作模式 */ adc_special_function_config(ADC_SCAN_MODE, ENABLE); // 使能扫描模式 adc_data_alignment_config(ADC_DATAALIGN_RIGHT); // 数据右对齐 adc_resolution_config(ADC_RESOLUTION_12B); // 12位分辨率 /* 6. 配置ADC通道 */ adc_channel_length_config(ADC_ROUTINE_CHANNEL, 1); // 规则组用1个通道 /* 7. 配置触发方式 */ adc_external_trigger_config(ADC_ROUTINE_CHANNEL, EXTERNAL_TRIGGER_DISABLE); // 禁用外部触发 adc_software_trigger_enable(ADC_ROUTINE_CHANNEL); // 使能软件触发 /* 8. 最后使能ADC */ adc_enable(); }这里有个坑我踩过ADC的配置顺序很重要。一定要先配置时钟和引脚模式再配置ADC参数最后才使能ADC。如果顺序乱了ADC可能工作不正常。提示GPIO_MODE_ANALOG是模拟输入模式当引脚用作ADC输入时必须设置成这个模式不能设置成普通的输入模式。3.3 ADC读取函数ADC配置好后怎么读取数据呢我写了一个ADC_GET()函数static int ADC_GET(void) { uint16_t gAdcResult 0; uint16_t timeOut 1000; // 超时计数器 /* 设置要采集的通道 */ adc_routine_channel_config(0, BSP_ADC_CHANNEL, ADC_SAMPLETIME_14POINT5); /* 启动转换 */ adc_software_trigger_enable(ADC_ROUTINE_CHANNEL); /* 等待转换完成 */ while(!adc_flag_get(ADC_FLAG_EOC) timeOut--) { delay_us(1); } /* 清除完成标志 */ adc_flag_clear(ADC_FLAG_EOC); if(!timeOut) { printf(ADC_GET Failed!!!\r\n); return 0; } /* 读取转换结果 */ gAdcResult adc_routine_data_read(); return gAdcResult; }这里有几个细节ADC_SAMPLETIME_14POINT5是采样时间单位是时钟周期。14.5个周期对于光敏电阻这种变化不快的信号足够了。一定要加超时判断如果ADC卡住了程序不会一直死等。读取数据后要清除标志位不然下次转换可能出问题。3.4 获取光照百分比直接看ADC原始值0-4095不够直观我更喜欢用百分比表示光照强度。0%表示最暗100%表示最亮int Get_illume_Percentage_value(void) { // ADC是12位的最大值是2^12 - 1 4095 int adc_max 4095; int adc_new 0; int Percentage_value 0; // 读取5次取平均减少波动 adc_new Get_illume_Adc_Value(5); // 计算百分比 // 注意光照越强ADC值越小所以用1减去比值 Percentage_value ( 1 - ( (float)adc_new / adc_max ) ) * 100; return Percentage_value; }这里有个关键点光照越强光敏电阻阻值越小分压后电压越低ADC值就越小。所以ADC值越小代表光照越强。我在计算百分比时用1 - (adc_new / adc_max)来反转这个关系。Get_illume_Adc_Value(5)函数会读取5次ADC值然后取平均这样数据更稳定。实际使用中你可以根据需求调整采样次数。3.5 读取数字输出数字输出就更简单了直接读取GPIO电平uint8_t Get_illume_DO_In(void) { if( BSP_DO_READ() 1 ) { return 1; // 检测到过暗 } return 0; // 光照正常 }模块上的LM393比较器会对比光敏电阻的电压和一个可调阈值。当光照较暗电压低于阈值时DO输出高电平1光照较亮时输出低电平0。你可以通过调节模块上的蓝色电位器来改变这个阈值。4. 主程序测试驱动写好了在主程序里测试一下。在main.c中添加#include bsp_illume.h int main(void) { /* 系统初始化时钟、串口、LED等 */ systick_config(); gd_eval_led_init(LED1); gd_eval_com_init(EVAL_COM0); /* 初始化光照传感器 */ illume_Init(); printf(Illumination sensor initialized.\r\n); while(1) { /* 读取并打印所有数据 */ printf(ADC Value %d\r\n, Get_illume_Adc_Value(5)); printf(Percentage value %d%%\r\n, Get_illume_Percentage_value()); printf(DO %d\r\n, Get_illume_DO_In()); delay_ms(500); // 每500ms读取一次 } }编译下载后打开串口调试助手波特率根据你的配置设置应该能看到类似这样的输出ADC Value 1245 Percentage value 70% DO 0用手遮住光敏电阻或者用手机手电筒照它看看数值变化是否正常。5. 实际使用中的几个要点根据我的项目经验有几点需要注意1. ADC采样稳定性光敏电阻的响应不是瞬间的有一定惯性。如果你发现ADC值跳动比较大可以增加采样次数比如从5次增加到10次在软件里做滑动平均滤波适当增加ADC采样时间2. DO阈值调节模块上的蓝色电位器可以调节比较器的阈值。顺时针旋转阈值电压升高需要更强的光照才能让DO输出低电平逆时针旋转则相反。根据你的应用场景调节到合适的位置。3. 光照百分比校准我的百分比计算是基于ADC最大值的理论计算。在实际应用中你可能需要校准在最暗环境下读取ADC值作为0%参考在最亮环境下读取ADC值作为100%参考然后用这两个值做线性映射4. 功耗考虑这个模块工作电流约1mA对于电池供电项目来说不算大。但如果需要长时间待机可以考虑定时采样而不是连续采样。6. 扩展应用思路这个基础驱动做好后你可以做很多有趣的应用自动调光台灯根据环境光照自动调节LED亮度光照暗时调亮光照强时调暗。智能窗帘控制光照太强时自动关闭窗帘光照适中时半开早晨光照足够时自动拉开。植物补光系统检测植物所在位置的光照不足时自动开启补光灯。光照数据记录结合RTC实时时钟记录一天中不同时间的光照变化分析光照规律。代码我已经在实际项目中用过稳定性没问题。如果你在移植过程中遇到问题重点检查以下几点引脚定义是否正确PB0对应ADC通道8时钟是否使能ADC配置顺序是否正确串口打印是否正常好了关于GD32VW553驱动光敏电阻模块的内容就分享到这里。实际动手做一遍你会发现并没有想象中那么难。嵌入式开发就是这样多看数据手册多动手调试慢慢就熟练了。

相关文章:

GD32VW553开发板光敏电阻传感器模块移植实战:ADC与GPIO双模式光照检测

GD32VW553开发板光敏电阻传感器模块移植实战:ADC与GPIO双模式光照检测 最近在做一个智能环境监测的小项目,需要检测环境光照强度。手头正好有立创的GD32VW553开发板和一块常见的光敏电阻模块(型号5516),今天就来分享一…...

DamoFD在智慧社区门禁系统落地:0.5G模型支撑多终端低延迟识别

DamoFD在智慧社区门禁系统落地:0.5G模型支撑多终端低延迟识别 1. 项目背景与需求分析 智慧社区建设正在快速发展,门禁系统作为社区安全的第一道防线,面临着新的挑战和机遇。传统门禁系统往往存在识别速度慢、准确率不高、设备成本高等问题&…...

Z-Image-Turbo_Sugar脸部Lora生成图像超分辨率对比:细节放大后的品质审视

Z-Image-Turbo_Sugar脸部Lora生成图像超分辨率对比:细节放大后的品质审视 最近在玩一个挺有意思的Lora模型,叫Sugar脸部风格。用它生成的人像图,第一眼看上去感觉还不错,风格挺甜美,光影也挺柔和。但有个问题一直让我…...

ACE-Step实战案例分享:如何用AI生成忧郁大提琴独奏+雨声环境音

ACE-Step实战案例分享:如何用AI生成忧郁大提琴独奏雨声环境音 深夜,窗外雨声淅淅沥沥,你正在剪辑一部情绪短片。画面是黑白调性的城市夜景,主角孤独地走在雨中。一切都准备好了,只差一段音乐——一段能同时承载大提琴…...

Gemma-3-12b-it多模态微调指南:LoRA适配图文任务的轻量训练流程

Gemma-3-12b-it多模态微调指南:LoRA适配图文任务的轻量训练流程 1. 引言:为什么需要微调多模态大模型? 你刚刚体验了Gemma-3-12b-it多模态工具的强大能力,它能看懂图片、回答文字问题,交互体验流畅自然。但你可能也发…...

Qwen-Image-Edit-F2P算法原理解析与实现

Qwen-Image-Edit-F2P算法原理解析与实现 1. 引言 你是否曾经遇到过这样的情况:手头只有一张普通的人脸照片,却想要生成一张精美的全身照?或者想要保持人物面部特征的同时,创造出不同风格的图像?这就是Qwen-Image-Edi…...

Retinaface+CurricularFace镜像测评:从安装到测试,完整流程解析

RetinafaceCurricularFace镜像测评:从安装到测试,完整流程解析 想快速搭建一个能跑的人脸识别系统,但又不想折腾环境、配置依赖?今天咱们就来实测一个开箱即用的方案:CSDN星图平台上的 RetinafaceCurricularFace 人脸…...

Qwen3-ASR-0.6B在金融领域的应用:电话客服质检系统

Qwen3-ASR-0.6B在金融领域的应用:电话客服质检系统 1. 引言 金融行业的电话客服每天要处理大量客户来电,从简单的账户查询到复杂的投资咨询,每个通话都代表着客户对金融机构的信任。传统的客服质检方式往往依赖人工抽查,不仅效率…...

小米米家8键蓝牙开关硬件设计与低功耗实现解析

1. 项目概述小米米家8键蓝牙无线开关-V2是一款面向智能家居场景的低功耗无线控制终端,其核心设计目标是提供一种高可靠性、易部署、免布线的物理交互入口。该设备不依赖Wi-Fi或Zigbee等传统智能家居协议栈,而是基于蓝牙5.0 Low Energy(BLE&am…...

DDrawCompat深度解析:让经典软件在现代Windows系统焕发新生

DDrawCompat深度解析:让经典软件在现代Windows系统焕发新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/D…...

云容笔谈·东方红颜影像生成系统重装系统后快速恢复部署指南

云容笔谈东方红颜影像生成系统重装系统后快速恢复部署指南 重装系统,对开发者来说,就像给电脑做一次“大扫除”,清爽是清爽了,但之前辛辛苦苦搭建好的环境、配置好的服务,也一并被清空了。特别是像“云容笔谈东方红颜…...

3大突破!用ROS2 SDK构建低成本AI机器人开发平台

3大突破!用ROS2 SDK构建低成本AI机器人开发平台 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk 副标题:如何基于开源工具链实现Go2 Air的二…...

一键部署MogFace人脸检测模型-large:快速搭建人脸识别应用,简单易用

一键部署MogFace人脸检测模型-large:快速搭建人脸识别应用,简单易用 想在自己的电脑上快速体验人脸检测技术,但又不想折腾复杂的开发环境?今天给大家介绍一个超级简单的方法:使用CSDN星图镜像,一键部署Mog…...

阴阳师智能高效挂机解决方案:让游戏收益自动化的全新体验

阴阳师智能高效挂机解决方案:让游戏收益自动化的全新体验 【免费下载链接】yysScript 阴阳师脚本 支持御魂副本 双开 项目地址: https://gitcode.com/gh_mirrors/yy/yysScript 作为阴阳师玩家,你是否也曾经历过这样的困境:每天花费数小…...

【R语言工业AI部署白皮书】:从caret到tidymodels迁移实录,6类高发故障F1-score提升至0.92+

第一章:工业R语言设备故障预测概述在现代智能制造与工业物联网(IIoT)场景中,设备故障预测正从传统的定期维护转向基于数据驱动的主动预警模式。R语言凭借其强大的统计建模能力、丰富的机器学习生态(如caret、mlr3、sur…...

SecGPT-14B WebUI进阶:自定义CSS美化界面+添加企业LOGO品牌化部署

SecGPT-14B WebUI进阶:自定义CSS美化界面添加企业LOGO品牌化部署 1. 引言:从能用,到好用,再到专属 你已经成功部署了SecGPT-14B,一个专注于网络安全问答与分析的强大模型。现在,它正稳定运行在你的服务器…...

PUBG-Logitech优化指南:从问题诊断到场景化配置的全流程方案

PUBG-Logitech优化指南:从问题诊断到场景化配置的全流程方案 【免费下载链接】PUBG-Logitech PUBG罗技鼠标宏自动识别压枪 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-Logitech PUBG-Logitech作为一款基于罗技鼠标硬件的压枪辅助工具,通过…...

DeerFlow实战作品分享:看AI如何自动完成一次深度的比特币价格分析

DeerFlow实战作品分享:看AI如何自动完成一次深度的比特币价格分析 你是否曾为了一份详尽的市场分析报告而焦头烂额?从数据收集、信息整理到趋势研判,整个过程耗时耗力。今天,我将带你亲身体验一次由AI驱动的深度研究——使用Deer…...

亚洲美女-造相Z-Turbo图文对话增强:结合CLIP引导提升亚洲特征语义对齐精度

亚洲美女-造相Z-Turbo图文对话增强:结合CLIP引导提升亚洲特征语义对齐精度 你是不是也遇到过这样的问题:想用AI生成一张亚洲美女的图片,输入了“一个漂亮的亚洲女孩”,结果出来的形象却总感觉“差了点意思”?要么是五…...

StructBERT中文通用相似度模型效果展示:高精度匹配‘手机没电了’与‘充电宝在哪借’

StructBERT中文通用相似度模型效果展示:高精度匹配‘手机没电了’与‘充电宝在哪借’ 1. 引言:当AI真正理解你的意思 你有没有遇到过这样的情况?手机快没电了,着急找充电宝,却在搜索框里输入"手机没电了"&…...

一站式AI开发环境:在星图GPU上部署gte-base-zh并配置Jupyter Notebook

一站式AI开发环境:在星图GPU上部署gte-base-zh并配置Jupyter Notebook 你刚在星图GPU上部署好了gte-base-zh模型镜像,看着那个命令行界面,是不是有点无从下手?想调试模型、写点代码、看看结果,难道每次都要在终端里敲…...

【立创开发板】GameStation-YunQy:基于梁山派打造NES掌机的硬件设计与模拟器移植实战

基于梁山派打造NES掌机:硬件设计与模拟器移植实战 最近有不少朋友问我,能不能用国产的GD32单片机做个好玩的东西?正好,立创EDA的梁山派开发板(GD32F470)性能强劲,价格也合适,我就用它…...

千问3.5-27B惊艳效果:对漫画分镜图进行剧情推演与角色关系图谱生成

千问3.5-27B惊艳效果:对漫画分镜图进行剧情推演与角色关系图谱生成 1. 引言:当AI“看懂”漫画,会发生什么? 想象一下,你是一位漫画创作者或编辑,手头有一叠刚画好的分镜草图。你想知道:这个故…...

嵌入式MIPI-DSI小屏终端硬件设计与POGO连接方案

1. 项目概述“小手机”是一个面向嵌入式人机交互学习与原型验证的紧凑型移动终端硬件平台。其核心设计目标并非复刻商用智能手机的全部功能,而是以工程可实现性、接口可扩展性与教学清晰性为优先级,在有限的物理尺寸(整机厚度控制在12mm以内&…...

Qwen3-4B-Instruct-2507快速部署避坑指南:常见问题与解决方法

Qwen3-4B-Instruct-2507快速部署避坑指南:常见问题与解决方法 1. 引言 当你兴冲冲地下载了阿里最新开源的Qwen3-4B-Instruct-2507模型,准备体验一下这个号称“4B体量,30B能力”的轻量级大模型时,是不是也遇到了各种意想不到的“…...

3步实现QQ机器人零门槛搭建:LuckyLilliaBot开源机器人服务配置指南

3步实现QQ机器人零门槛搭建:LuckyLilliaBot开源机器人服务配置指南 【免费下载链接】LuckyLilliaBot 使你的NTQQ支持OneBot11协议进行QQ机器人开发 项目地址: https://gitcode.com/gh_mirrors/ll/LuckyLilliaBot 在数字化时代,拥有一个属于自己的…...

零基础入门:Qwen3-4B保姆级部署指南,开箱即用的纯文本AI助手

零基础入门:Qwen3-4B保姆级部署指南,开箱即用的纯文本AI助手 你是不是也对那些动辄几十GB、部署起来让人头大的AI模型望而却步?想体验一下大语言模型的魅力,却被复杂的配置、漫长的下载和看不懂的命令行劝退? 别担心…...

LyricsX:Mac桌面歌词工具使用指南

LyricsX:Mac桌面歌词工具使用指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 解决Mac音乐体验痛点的必备工具 在Mac上听音乐时,你是否遇到过…...

【收藏级】大模型学习路线图:从零基础到实战大神的全流程指南

当下大模型技术热潮席卷全球,无论是刚入门的编程小白,还是想转型AI领域的资深程序员,系统的学习路线都是避免走弯路的关键。本文整理了从基础铺垫到前沿进阶的完整大模型学习框架,清晰拆解每个阶段的核心目标、必学内容与优质资源…...

RetinaFace参数调优指南:如何设置阈值获得最佳检测效果?

RetinaFace参数调优指南:如何设置阈值获得最佳检测效果? 你是不是遇到过这样的情况:用RetinaFace检测人脸,要么漏掉了一些人,要么把背景里的东西也当成了人脸?这很可能是因为你用的那个默认的0.5阈值&…...