基于STM32的风速风向传感器设计
引言
本项目设计了一个基于STM32的风速和风向传感器系统,能够通过组合使用旋转式风速传感器和电子罗盘,实时测量风速和风向,并将数据通过显示屏或无线模块发送给用户。该系统适用于气象监测、环境监控、农业自动化等场景,具有准确、实时的监测功能。
环境准备
1. 硬件设备
- STM32F103C8T6 开发板(或其他 STM32 系列)
- 风速传感器(如霍尔效应传感器配合旋转杯式风速仪,用于测量风速)
- 电子罗盘模块(如 HMC5883L,用于测量风向)
- OLED 显示屏(用于显示风速、风向数据)
- USB-TTL 串口调试工具
- 电阻、杜邦线、面包板等基础电子元件
2. 软件工具
- STM32CubeMX:用于初始化 STM32 外设。
- Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
- ST-Link 驱动程序:用于下载程序到 STM32。
项目实现
1. 硬件连接
- 风速传感器连接:将霍尔效应传感器的输出引脚连接到 STM32 的 GPIO(如 PA0),用于检测风速传感器的转速(每转一个脉冲)。
- 电子罗盘连接:将 HMC5883L 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于测量风向角度。
- OLED 显示屏连接:将 OLED 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于显示风速和风向。
- 其他连接:为 STM32、传感器和显示屏提供适当的电源,并确保信号线接线正确。
2. STM32CubeMX 配置
- 打开 STM32CubeMX,选择你的开发板型号。
- 配置系统时钟为 HSI,确保系统稳定运行。
- 配置 GPIO 用于检测风速传感器的脉冲信号。
- 配置 I2C,用于与 HMC5883L 电子罗盘和 OLED 显示屏通信。
- 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序
在生成的项目基础上,编写风速脉冲检测、风向测量、数据计算、状态显示的代码。以下是风速风向传感器的基本代码示例:
#include "stm32f1xx_hal.h"
#include "hmc5883l.h"
#include "oled.h"
#include "gpio.h"// 定义计时器和风速参数
#define WIND_SPEED_PIN GPIO_PIN_0 // 风速传感器引脚
#define WIND_CIRCUMFERENCE 0.7 // 旋转杯的周长(米)
#define PULSE_PER_ROTATION 1 // 每次旋转产生一个脉冲
#define TIME_INTERVAL 1 // 采样间隔(秒)// 函数声明
void System_Init(void);
void Measure_Wind_Speed(void);
void Measure_Wind_Direction(void);
void Display_Status(void);// 全局变量
uint32_t pulse_count = 0; // 风速传感器的脉冲计数
float wind_speed = 0; // 计算出的风速(m/s)
float wind_direction = 0; // 计算出的风向(角度)void System_Init(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();OLED_Init();HMC5883L_Init();OLED_ShowString(0, 0, "Wind Sensor Ready");
}// 计算风速
void Measure_Wind_Speed(void)
{// 每秒钟采集一次脉冲计数wind_speed = (pulse_count / PULSE_PER_ROTATION) * WIND_CIRCUMFERENCE / TIME_INTERVAL;pulse_count = 0; // 清除计数,等待下一次测量
}// 计算风向
void Measure_Wind_Direction(void)
{wind_direction = HMC5883L_GetHeading(); // 读取电子罗盘的角度值
}// 显示风速和风向
void Display_Status(void)
{OLED_Clear();OLED_ShowString(0, 0, "Speed: ");OLED_ShowFloat(48, 0, wind_speed, 2);OLED_ShowString(0, 1, "Dir: ");OLED_ShowFloat(48, 1, wind_direction, 2);
}// 处理风速传感器的脉冲中断
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == WIND_SPEED_PIN){pulse_count++; // 每次中断增加脉冲计数}
}int main(void)
{System_Init();while (1){Measure_Wind_Speed(); // 计算风速Measure_Wind_Direction(); // 计算风向Display_Status(); // 显示状态HAL_Delay(1000); // 每秒更新一次数据}
}
4. 各模块代码
风速传感器脉冲检测
通过 GPIO 检测风速传感器的脉冲信号,计算风速:
#include "gpio.h"// 初始化风速传感器引脚
void Wind_Sensor_Init(void)
{// 配置 GPIO 为外部中断模式,用于检测风速脉冲HAL_GPIO_EXTI_Callback(GPIO_PIN_0); // 使用 GPIO 中断
}// 每次检测到脉冲时,增加计数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == WIND_SPEED_PIN){pulse_count++; // 增加脉冲计数}
}
电子罗盘风向测量
通过 HMC5883L 电子罗盘获取风向的角度值:
#include "hmc5883l.h"// 初始化电子罗盘
void HMC5883L_Init(void)
{// 配置 I2C,用于 HMC5883L 读取
}// 获取当前风向角度
float HMC5883L_GetHeading(void)
{// 从 HMC5883L 读取角度数据return 45.0; // 假设返回的风向为45度
}
OLED 显示
OLED 显示屏用于显示当前的风速和风向数据:
#include "oled.h"// 初始化 OLED 显示屏
void OLED_Init(void)
{// OLED 初始化代码
}// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, const char *str)
{// 在 OLED 显示屏上显示字符串
}// 显示浮点数
void OLED_ShowFloat(uint8_t x, uint8_t y, float num, uint8_t decimal_places)
{// 显示带小数的数值
}// 清屏
void OLED_Clear(void)
{// 清除 OLED 显示内容
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
系统工作原理
-
风速测量:系统通过旋转式风速传感器获取风速的脉冲信号,每次旋转产生一个脉冲信号,STM32通过GPIO外部中断记录脉冲数,并根据脉冲数、时间间隔和传感器的旋转半径计算出当前的风速(米/秒)。
-
风向测量:通过电子罗盘(HMC5883L)测量风向,电子罗盘能够通过地球磁场检测当前的角度,从而得出风向信息(0°~360°)。
-
状态显示:OLED显示屏用于实时显示当前的风速和风向数据,便于用户观察。
常见问题与解决方法
1. 风速测量不准确
- 问题原因:霍尔效应传感器检测灵敏度不足或安装不正确。
- 解决方法:检查霍尔效应传感器的安装位置,确保能够准确检测到旋转时的磁场变化。
2. 风向测量误差
- 问题原因:电子罗盘受到周围金属物体或磁场的干扰。
- 解决方法:将电子罗盘安装在远离干扰源的地方,并通过校准减少误差。
3. OLED 显示不正常
- 问题原因:I2C 通信故障或 OLED 显示模块故障。
- 解决方法:检查 I2C 连接是否牢固,确保 OLED 初始化配置正确。
扩展功能
-
数据记录与上传:可以通过 SD 卡模块记录风速和风向数据,或通过 Wi-Fi 模块将数据上传到服务器,便于远程监控和历史数据分析。
-
报警系统:增加风速和风向的报警功能,当风速超过预设值或风向出现异常时,系统能够发出声音或灯光报警提示。
-
多传感器集成:可以集成温度、湿度和气压传感器,构建一个更加全面的气象监测站,提供更加详细的气象数据。
结论
通过本项目,我们设计了一个基于 STM32 的风速风向传感器系统,能够通过旋转式风速传感器和电子罗盘实时测量风速和风向。系统具有高精度、实时监测的特点,适用于气象监测、环境监控等场景。未来可以通过集成数据记录、远程监控等功能,进一步提升系统的智能化和应用价值。
相关文章:
基于STM32的风速风向传感器设计
引言 本项目设计了一个基于STM32的风速和风向传感器系统,能够通过组合使用旋转式风速传感器和电子罗盘,实时测量风速和风向,并将数据通过显示屏或无线模块发送给用户。该系统适用于气象监测、环境监控、农业自动化等场景,具有准确…...
域名申请.
操作场景 Internet上有成千上万台主机,每一台主机都对应一个唯一的IP地址。IP地址因不具备实际意义,非常难于记忆,于是就产生了域名。 域名(Domain Name)是一串用点分隔的字符串组成的名称(例如huaweiclo…...
mysql5.7与mysql8.0身份认证插件的区别
MySQL 5.7 和 MySQL 8.0 在身份认证插件方面有一些重要的区别。这些变化主要集中在默认的身份验证插件、密码管理和安全性增强上。 默认身份验证插件 MySQL 5.7 默认插件: mysql_native_password mysql_native_password 是 MySQL 5.7 及更早版本中的默认身份验证插件。它使用…...
进化吧!原始人
如果你想体验一下人类的进化过程~ 如果你有一颗充满探索的好奇心~ 千万不要错过博主新开发的小游戏哦! 点击链接,立即体验! 🙋 欢迎来到冒险互动游戏《进化吧原始人》! 🦍 在这里,你将扮演一…...
SaaS架构:中央库存系统架构设计
大家好,我是汤师爷~ 近年来,越来越多的零售企业大力发展全渠道业务。在销售额增长上,通过线上的小程序、直播、平台渠道等方式,拓展流量变现渠道。在会员增长方面,通过多样的互动方式,全渠道触达消费者&am…...
C语言中点操作符(.)和箭头操作符(->)的区别
在C语言中,点操作符(.)和箭头操作符(->)用于访问结构体的成员,但它们的使用方式有所不同。以下是具体介绍: 点操作符(.)的使用 直接访问结构体变量的成员:…...
基于FPGA的以太网设计(一)
以太网简介 以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如…...
Insert into on duplicate key update 死锁问题解析
Insert into on duplicate key update 死锁问题解析 背景 前段时间的需求中有这个么一个场景,每天早上需要通过定时任务到不同的平台拉取一些广告投放的相关数据,涉及的表比较多,数据量也比较大,有的需要全量同步,有…...
Apache Lucene 10 已发布!Lucene 硬件效率改进及其他改进
作者:来自 Elastic Adrien Grand Apache Lucene 10 刚刚发布,重点关注硬件效率!查看主要版本亮点。 Apache Lucene 10 终于发布了!自 Lucene 9.0(于 2021 年 12 月发布,距今已有近 3 年)以来&a…...
【SQL】SQL查询语句
目录 🎄 基本查询语法 ⭐查询多个字段 ⭐设置别名 ⭐去除重复记录 ⭐ 数据准备 ⭐ 案例 🎄 条件查询 ⭐ 语法 ⭐ 案例 🎄 聚合函数 ⭐ 介绍 ⭐ 常见的聚合函数 ⭐ 语法 ⭐ 案例 🎄 分组查询 ⭐ 语法 ⭐ where与having的区…...
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台
AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 一、简单介绍 二、Docker 下载安…...
机器学习摘下诺奖桂冠
前言 近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一…...
营销邮件软件:提升邮件营销效率必备工具!
营销邮件软件选择技巧?免费高效的邮件营销软件推荐? 如何高效地管理和优化邮件营销活动成为了企业面临的一大挑战。营销邮件软件成为提升邮件营销效率的必备工具。MailBing将深入探讨营销邮件软件的功能、优势以及如何选择合适的工具。 营销邮件软件&a…...
鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)
当运行时的状态变量变化,UI重新渲染,在ArkUI中称为状态管理机制,前提是变量必须被装饰器修饰。不是状态变量的所有更改都会引起刷新,只有可以被框架观测到的更改才会引起UI刷新。其中boolen、string、number类型,可观察…...
第 6 章:vue-router
1. router 相关理解 1.1 vue-router 的理解 vue 的一个插件库,专门用来实现 SPA 应用 1.2 对 SPA 应用的理解 单页 Web 应用(single page web application,SPA)。整个应用只有一个完整的页面。点击页面中的导航链接不会刷新页…...
PaddleOCR模型转换、部署全流程(Ubuntu系统)_随记2
本篇衔接文章1、环境流程需要看随记1就可以 PaddleOCR环境搭建、模型训练、推理、部署全流程(Ubuntu系统)_随记1 一、ONNX导出 1、环境准备 主要参考官方技术文档:官方技术文档 未完做完更新... 参考:PaddleOCR-PP-OCRv4推理详解…...
Tableau 2024.3 发布!表格可视化项扩展、空间参数和 Cloud 管理器等,助力企业大规模分析
在升级至最新版前,先来详细一览 Tableau 2024.2 的最新特性吧~ Tableau 发布新版本啦!作为今年的收官之作,Tableau 2024.3 在延续经典之余,也为用户带来了不少惊喜,让企业数据分析之旅更加丰富多彩。 使用 Tableau Cl…...
即时通讯增加kafka渠道
此次给im服务增加kafka渠道,刚好最近有对SpringCloudStream进行了解,刚好用来练练手 增加kafka渠道 pom.xml 引入stream相关依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-strea…...
建造者模式和工厂模式的区别
工厂模式和建造者模式都是创建型设计模式,它们的主要作用都是为了简化对象的创建过程,但是它们在设计意图和实现细节上有着显著的区别。 总结区别: 关注点不同: 工厂模式关注的是对象的创建。建造者模式关注的是对象的构造过程…...
GEE数据集——ERA5-陆地每日汇总--ECMWF气候再分析数据集
目录 简介 数据集说明 Dataset Availability Dataset Provider Collection Snippet 空间信息 Resolution Bands Table 变量 代码 代码链接 结果 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 简介 注(2024-04-19): …...
Graphormer效果展示:同一分子不同SMILES写法下的预测一致性验证
Graphormer效果展示:同一分子不同SMILES写法下的预测一致性验证 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB(Open Graph Benchmark)和PCQM4M等分子基准测…...
解密微信小程序逆向工程:3种核心方法深度解析wxappUnpacker
解密微信小程序逆向工程:3种核心方法深度解析wxappUnpacker 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程工具wxappUnpacker为开发者提供了一套完整的源码还原解决方案,能…...
复古设备新生:树莓派运行OpenClaw轻量版+Phi-3-vision服务
复古设备新生:树莓派运行OpenClaw轻量版Phi-3-vision服务 1. 为什么要在树莓派上折腾OpenClaw? 去年收拾书房时,我在抽屉深处发现了吃灰多年的树莓派4B。这块曾经风靡极客圈的小板子,如今性能早已被现代硬件碾压。但当我看到Ope…...
告别云端!用Ollama本地运行Yi-Coder-1.5B,保护代码隐私的终极方案
告别云端!用Ollama本地运行Yi-Coder-1.5B,保护代码隐私的终极方案 1. 为什么选择本地代码生成模型? 在软件开发过程中,我们经常需要快速生成代码片段、解决编程问题或理解复杂逻辑。传统做法是使用云端代码生成服务,…...
vLLM-v0.17.1与Proteus仿真联动:为嵌入式设计添加自然语言交互
vLLM-v0.17.1与Proteus仿真联动:为嵌入式设计添加自然语言交互 1. 当电路设计遇上自然语言 想象这样一个场景:你正在设计一个嵌入式系统电路,突然想到"这里需要加个滤波电路来消除噪声"。传统方式需要手动查找元件库、绘制电路图…...
告别CUDA!用OpenAI Triton写GPU Kernel,Python开发者也能玩转高性能计算
用Python解锁GPU算力:OpenAI Triton实战指南 当Python遇上GPU计算,传统路径总是绕不开CUDA C的陡峭学习曲线。但现在,OpenAI Triton正在改写这一规则——它让开发者能够用熟悉的Python语法编写高性能GPU内核,像操作NumPy数组一样自…...
Qwen3.5-9B-AWQ-4bit Proteus电路仿真辅助:原理图分析与代码生成
Qwen3.5-9B-AWQ-4bit Proteus电路仿真辅助:原理图分析与代码生成 1. 电子工程师的新助手 作为一名电子工程师,你是否经常遇到这样的场景:面对复杂的电路原理图,需要花费大量时间分析各个模块的功能;或者在Proteus中设…...
忍者像素绘卷效果展示:飞雷神之术瞬移轨迹×金色像素残影动态图
忍者像素绘卷效果展示:飞雷神之术瞬移轨迹金色像素残影动态图 1. 作品概览 忍者像素绘卷是基于Z-Image-Turbo深度优化的图像生成工作站,它将传统忍者文化与16-Bit复古游戏美学完美融合。这款工具特别擅长生成具有强烈动态感的忍者动作场景,…...
用普中开发板A234和Proteus 8.16,手把手复刻一个课堂/竞赛用的八路抢答器(附完整代码和避坑点)
用普中开发板A234和Proteus 8.16打造竞赛级八路抢答器实战指南 在电子设计竞赛、课堂互动或社团活动中,一个稳定可靠的抢答器往往是点燃现场气氛的关键设备。市面上虽然有不少成品抢答器,但价格昂贵且功能固定,难以满足个性化需求。而基于51单…...
OpenClaw多模态开发:千问3.5-27B视觉API调用与结果解析
OpenClaw多模态开发:千问3.5-27B视觉API调用与结果解析 1. 为什么选择OpenClaw对接多模态模型 去年我在整理个人照片库时,发现手动标注几千张旅行照片几乎是不可能完成的任务。直到偶然接触到OpenClaw和千问3.5-27B的组合,才找到自动化解决…...
