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

STM32F103(标准库)光敏传感器控制蜂鸣器

STM32F103(标准库)光敏传感器控制蜂鸣器

在智能小车、安防系统等应用中,光敏传感器常常用于环境光检测,而蜂鸣器则用于声音提示。

本文将基于 STM32F103 标准库 实现一个简单的实验:通过光敏传感器检测光线变化,控制蜂鸣器响/停


一、实验目标

  • 学习 光敏传感器 在 STM32 上的输入采集。
  • 掌握 蜂鸣器 GPIO 输出 的控制方法。
  • 理解 传感器输入与执行器输出联动 的设计思想。
  • 编写模块化代码(传感器、蜂鸣器、延时),提升工程结构化能力。

二、硬件准备

  1. 核心硬件

    • STM32F103C8T6 最小系统板
    • 光敏传感器模块(数字量输出 DO 引脚)
    • 有源蜂鸣器模块
  2. 接线示例

    • 光敏传感器 DO → PB13(上拉输入)
    • 蜂鸣器控制 → PB12(推挽输出)
    • VCC 接 3.3V,GND 接地

img


三、软件设计

程序分为 主函数、蜂鸣器驱动、光敏传感器驱动、延时模块

1. 主函数 main.c

根据光敏传感器的输入电平,决定蜂鸣器的开关状态。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"int main(void)
{Buzzer_Init();LightSensor_Init();while (1){if (LightSensor_Get() == 1)   // 光敏检测到高电平{Buzzer_ON();             // 蜂鸣器响}else{Buzzer_OFF();            // 蜂鸣器停}}
}

2. 蜂鸣器驱动 Buzzer

Buzzer.h

#ifndef __BUZZER_H
#define __BUZZER_Hvoid Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);
void Buzzer_Turn(void);#endif

Buzzer.c

#include "stm32f10x.h"                  // Device headervoid Buzzer_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_12);    // 默认关闭蜂鸣器
}void Buzzer_ON(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}void Buzzer_OFF(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_12);
}void Buzzer_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12) == 0){GPIO_SetBits(GPIOB, GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB, GPIO_Pin_12);}
}

3. 光敏传感器驱动 LightSensor

LightSensor.h

#ifndef __LIGHT_SENSOR_H
#define __LIGHT_SENSOR_Hvoid LightSensor_Init(void);
uint8_t LightSensor_Get(void);#endif

LightSensor.c

#include "stm32f10x.h"                  // Device headervoid LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    // 上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

4. 延时模块 Delay

Delay.h

#ifndef __DELAY_H
#define __DELAY_Hvoid Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);#endif

Delay.c

#include "stm32f10x.h"void Delay_us(uint32_t xus)
{SysTick->LOAD = 72 * xus;				SysTick->VAL = 0x00;					SysTick->CTRL = 0x00000005;				while(!(SysTick->CTRL & 0x00010000));	SysTick->CTRL = 0x00000004;				
}void Delay_ms(uint32_t xms)
{while(xms--){Delay_us(1000);}
}void Delay_s(uint32_t xs)
{while(xs--){Delay_ms(1000);}
} 

四、运行效果

  1. 上电后,系统开始运行。
  2. 当光敏传感器检测到 光线变化(如被遮挡时输出高电平),蜂鸣器立即 响起
  3. 当光线恢复正常,蜂鸣器 停止
  4. 该逻辑可以扩展用于 防盗报警、夜间感应提醒 等应用场景。

五、总结

本实验基于 STM32F103 标准库,完成了一个 光敏传感器控制蜂鸣器 的应用。

主要收获:

  • 学习了 GPIO 输入(光敏传感器)与输出(蜂鸣器) 的配置方法;
  • 体会了 传感器 → 控制逻辑 → 执行器 的应用链路;
  • 通过模块化设计(Buzzer、LightSensor、Delay),程序结构更加清晰,方便后续扩展。

这个实验非常适合作为 传感器 + 执行器联动控制 的入门案例,为进一步开发智能系统打下了基础。

http://www.sczhlp.com/news/52625/

相关文章:

  • SQL脚本:统计指定SQL没有共享的原因
  • linux,RHEL 7.8,设置dns
  • 详解蛋白质 N 端修饰实验方法:从小分子反应到蛋白修饰的完整操作流程
  • 读书笔记:数据库簇表:让关联查询快如闪电的黑科技
  • 做瞹视频网站哪里看通过网站赚钱
  • 瑞昌市建设局网站网上注册公司官网入口
  • 网站设计和平面设计wordpress 图书
  • 交换友情链接的平台有哪些关键词优化排名要多少钱
  • 辽宁建设厅新网站做网站一定要服务器吗
  • 怎么创建图片网站开发一个平台app需要多少钱
  • 一步完成CalDAV账户同步,日历服务助力钉钉日历日程集中管理
  • Codeforces 1036D Vasya and Arrays 题解 [ 黄 ] [ 双指针 ] [ 前缀和 ]
  • 书写不再“断片”!Pen Kit报点预测丝滑如真笔
  • ASMFD系列二:AFD在CentOS环境中部署
  • Unity JobSystem使用手册
  • codeigniter 手机网站开发做电影网站一年赚多少钱
  • 男和男做的视频网站南昌网站搜索排名
  • 怎么用模板做网站网页打不开怎么设置
  • 中国空间站建造历程wordpress购物主题多大
  • 庐江网站制作网络规划设计师2023论文
  • 求个网站填空题佛山网站建设计
  • Xcode 26 beta 7 (17A5305kTF) - Apple 平台 IDE
  • 卡片一放,服务直达!实现信息零层级触达
  • 网站系统怎么做广州建设工程交易中心怎么样
  • wordpress缩略图排列百度关键词优化方案
  • 网站优化 推广网站创建的一般步骤
  • 平面设计好的网站关于百度网站是多少
  • 新民个人网站建设优势深圳坪山比亚迪
  • 公司 备案 网站名称网站算阵地建设
  • 幼教网站建设分析wordpress 浏览统计