最后查出来是IO口初始化配置问题
搞成默认的推挽输出了
记得改成开漏输出

墨衍会员
·
AI 创作全网分发
墨衍智能分发
本文由作者通过墨衍一键同步至各平台
1分发平台
400+累计阅读
467平均单平台
已同步平台
优快云
微信公众号
微博
知乎
掘金
百家号
博客园
抖音
小红书
你的文章也可以这样分发
墨衍会员 ¥399起/年,写一次发全网
我也要 →
码龄4年
搞成默认的推挽输出了
记得改成开漏输出

STM32驱动GY-87九轴传感器:MPU6050与QMC5883L数据读取实战
在嵌入式开发中,通过I2C总线读取九轴传感器数据是姿态检测、运动追踪等场景的基础能力。本文从STM32F103C8T6与GY-87模块的硬件接线入手,讲解MPU6050陀螺仪加速度计与QMC5883L磁力计的寄存器配置方法,以及如何将原始数据换算为物理量并通过串口输出。内容涵盖HAL库初始化、突发读取、航向计算等关键环节,并针对I2C总线锁死、串口乱码等高频故障给出实用排错策略。无论是初学者打通第一条传感器数据链路,还是工程师验证模块一致性、评估零偏干扰,都能通过本文快速掌握九轴传感器开发的完整流程。
stm32单片机开发五、使用I2C连接MPU6050
10轴就是3轴加速度、3轴角速度、3轴磁场强度和1个气压强度任何一种传感器都不能获得精确且稳定的欧拉角,要想获得精确且稳定的欧拉角,就必须进行数据融合,把这几种传感器的数据结合起来,常见的数据融合算法,一般有互补滤波、卡尔曼滤波等I2C的地址为7位,假设这里将他的地址(110 1000)转换为16进制的0x68,一定不要忘记了在传输的时候要将0x68
STM32健康监测智能蓝牙手环完整项目实战:从传感器到APP全流程解析
物联网穿戴设备的核心在于打通从传感器采集到终端展示的完整数据链路。以健康监测手环为例,首先涉及心率、体温、步数等生理信号的感知原理,例如基于光电容积脉搏波描记法(PPG)的MAX30102心率传感器,以及六轴加速度计MPU6050的步态识别;随后需要单片机完成数据滤波与特征提取,再通过蓝牙模块(如HC-05)实现无线透传;最后在手机APP端完成协议解析与可视化。这一过程涵盖了嵌入式驱动开发、通信协议设计、低功耗工程优化等关键技能。无论是学生毕设、课程设计还是DIY项目,理解从STM32底层外设配置到物联网云
软件I2C读取MPU6050的数据时出现的问题
在使用STM32f107读取MPU6050数据时,读出数据都是0xFF。
STM32无人机飞控源码实战:从姿态解算到Mavlink联调全解析
嵌入式系统是无人机控制的核心,而姿态解算与稳定控制则是飞控软件的关键环节。姿态解算通过传感器融合,利用互补滤波算法将陀螺仪的短期精度与加速度计的长期稳定性结合,确定飞行器的实时朝向。PID控制律基于姿态误差生成电机指令,串级结构保证了系统的动态响应与抗扰动能力。Mavlink协议则作为飞控与地面站通信的桥梁,实现参数调优、状态监控与指令下发。本文以一套基于STM32的四轴飞控源码为例,系统梳理了从传感器校准、Mahony互补滤波原理,到PID调参实战与Mission Planner联调测试的完整流程,并分享
SHAP图全解析:从理论到实践,教你如何读懂和优化模型特征
本文全面解析SHAP图,从博弈论基础到实战应用,指导读者如何解读和利用SHAP值优化机器学习模型。通过详解特征重要性条形图、小提琴图、依赖图及决策图等关键可视化工具,帮助数据科学家精准诊断模型、识别特征交互,并将洞见转化为特征工程与模型调试的实际行动,有效提升模型可解释性与性能。
MPU6050读ID错误,出现0XD1现象(正确ID应为0x68或0x69)解决办法。
起因:笔者最近的一个小项目里面需要使用到一块MPU6050姿态传感器。因为之前在某宝买过现成的MPU6050调试过,使用的是一块STM32F1x系列的单片机驱动,代码是没有问题的。所以根据MPU6050官方手册提供的参考电路直接弄到项目的板子上了。但是板子出来之后再调试的过程中一直读取ID的时候一直出现0XD1的数值,并且读取到的所有数据都是错误的。 解决办法:1、首先检查一下电路是否连接正确,特别是第20引脚的电荷泵电容。之前翻阅的中文手册发现参考电路上的电容数据是错误的,而且错误的离谱,电路和原件列表
VS2022命令行编译C++报错?一招解决‘fatal error C1034: iostream: 不包括路径集‘
本文针对VS2022命令行编译C++时常见的'fatal error C1034: iostream: 不包括路径集'错误,深入剖析了其根源在于环境变量缺失。文章提供了永久配置用户环境变量(PATH、INCLUDE、LIB)的一劳永逸解决方案,确保在任何终端中都能直接使用cl命令进行编译,并给出了进阶配置与常见错误排查指南。
STM32CubeMX-H7-11-IIC读写MPU6050模块(上)-软件IIC协议的解析、封装,实现基本功能获取MPU6050的ID
用是最好的学,学习了IIC协议的知识,那么我的要去使用他才更方便我们去理解,本篇文章会给出.c和.h的文件,直接复制粘贴,直接修改引脚和主频,就可以直接使用这套代码区读MPU6050。IIC和MPU6050这篇文章有点长,所以我分为上中下篇上篇主要讲解IIC协议和基本使用,获取MPU6050的ID中篇主要讲解MPU6050模块的使用下篇主要是硬件IIC驱动MPU6050IIC协议的优点是两根信号线就可以对多个设备进行通信,缺点是通信速度慢,刚好跟SPI相反。
iTunes登录协议逆向与自动化实现
本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。
如何让C++程序生成dump文件?生成dump文件的方式有哪些?如何使用Windbg分析dump文件?
本文详细介绍了如何让C++程序生成dump文件、生成dump文件的多种方式以及如何使用Windbg分析dump文件,并给出了对应的实战分析案例,有一定的实战参考价值。
STM32平台MPU6050/MPU9250/ICM20948的DMP与MPL移植实战
姿态解算是惯性测量单元(IMU)应用的核心技术,从平衡车到机械臂、从跌倒检测到航姿参考系统都离不开稳定的姿态数据输出。在嵌入式开发中,MPU6050、MPU9250与ICM20948是使用最广泛的六轴与九轴传感器,而DMP与MPL则是处理这些传感器数据的两条经典技术路线。DMP依靠芯片内部硬件引擎完成四元数解算与姿态融合,MCU负载低、开发周期短;MPL作为主机端软件库,则提供了更灵活的算法定制空间,适合对精度和漂移补偿有更高要求的场景。理解两者的原理差异,有助于开发者在资源受限的STM32平台上快速选型并
【Python高阶开发】12. 工业知识图谱实战:从0构建设备故障诊断系统(附Neo4j部署+完整代码)
摘要:传统工业设备故障诊断依赖专家经验,存在知识难沉淀、故障定位慢、根因分析不彻底等痛点。本文基于开源工具栈(Neo4j+Py2neo+Spacy+FastAPI),从0到1构建工业知识图谱故障诊断系统。内容涵盖:知识图谱核心概念解析、Neo4j图数据库部署、工业设备本体设计、多源知识抽取(结构化Excel+非结构化手册)、图谱构建与查询、故障诊断与根因分析功能实现,以及可视化与API服务部署。每个模块附完整可运行代码及执行结果,新手可按步骤复现全流程,进阶读者可直接复用代码到实际项目
基于STM32与MPU6050的陀螺仪摇杆遥控器:从I2C到互补滤波的完整实践
在嵌入式开发中,I2C通信协议是连接主控与传感器的基石,而姿态解算则是让设备感知自身状态的关键技术。本文从传感器读取、数据处理到控制信号映射的完整链路出发,介绍如何利用STM32F103C8T6通过I2C总线驱动MPU6050六轴传感器,并融合陀螺仪与加速度计数据实现可靠的姿态估计。互补滤波作为经典的轻量级数据融合算法,能够在资源受限的单片机上有效抑制噪声、校正漂移,为后续的摇杆值映射提供稳定输入。这一技术路径广泛应用于无人机飞控、体感手柄、平衡小车等领域,是工程师提升系统感知能力的核心技能。文章还结合AI
XCP实战系列介绍07-使用ASAP2 Editor生成A2l文件详解
介绍通过ASAP2 Editor工具生成A2l文件步骤详解
国科大学习资料--机器人智能控制_袁如意老师PPT后习题答案(学长精心整理)
人工神经元激活函数的作用是什么? 答:激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。 人工神经网络的学习规则有哪些?各有何特征? 答:大类可以分为无监督学习算法、有监督学习算法和强化学习。其中无监督学习算法指只有输入信息,没有期望的输出信息,如Hebb学习规则,神经元连接强度的变化与两个相互连接的神经元的激活水平成正比。竞争学习法则:网络各输出单元相互竞争,最后达到只有一个最强者激活。有监督学习算法指同时提供输入信息和对应的期望输出信息,如误差学习(Delta学
MPU6050调试避坑指南:从I2C通信到DMP姿态数据的8个高频问题
在嵌入式开发中,传感器通信与姿态解算是机器人、无人机和可穿戴设备等场景的核心技术基础。I2C作为一种同步串行总线,凭借其线路简单、多设备挂载方便的特点,成为众多传感器与主控交互的首选协议。然而,物理层时序异常、上拉电阻配置不当、地址冲突等工程问题,常常导致设备通信失败或数据异常。姿态融合算法则进一步提升了系统对运动状态的感知能力,通过MPU6050内置的DMP(数字运动处理器)可以高效输出四元数,降低主控计算负担。但在实际部署中,从寄存器读写到FIFO数据解析,每一步都可能隐藏陷阱。本文聚焦于STM32、E
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
STM32C5驱动LSM6DSVE陀螺仪:轮询读取从零开始实战指南
在嵌入式运动控制与可穿戴设备开发中,六轴惯性传感器(IMU)是感知姿态与动作的核心器件,而如何高效、稳定地读取其数据则是所有上层算法的基石。I2C作为一种广泛应用的板级通信协议,凭借其引脚少、易调试的特性,成为传感器调试阶段的首选。理解传感器驱动的基本原理,即通过轮询状态寄存器判断数据就绪,是嵌入式工程师必须掌握的基础技能。轮询方式虽然朴素,却能直观地验证寄存器配置、数据时序与通信链路,为后续的中断驱动、DMA传输乃至基于RTOS的任务调度奠定逻辑基础。本文以STM32C5系列驱动ST新一代六轴传感器LSM
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
深度学习工具包 DeepLearningToolbox
深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[](https://bitdeli.com/free "Bitdeli Badge")
STM32C5驱动LSM6DSVE:轮询读取陀螺仪数据实操指南
在嵌入式系统开发中,IMU(惯性测量单元)是姿态检测、运动控制与导航应用的核心传感器,而陀螺仪作为其中测量角速度的关键部件,其数据读取方式直接影响系统实时性与功耗设计。理解I2C总线通信、寄存器映射以及数据拼接原理,是掌握传感器驱动开发的基础。LSM6DSVE作为ST新一代低功耗六轴传感器,支持轮询、中断与FIFO等读取模式,其中轮询模式逻辑透明、易于调试,尤其适合初学者快速建立寄存器操作与数据流的概念。通过STM32C5系列微控制器配合HAL库,开发者可以高效实现I2C接口下的陀螺仪数据读取,并利用BDU
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
STM32C5+SPI读取IIS3DWB振动传感器完整教程
在工业振动监测中,MEMS加速度计的数据采集质量直接影响故障诊断的准确性。SPI作为一种高速同步串行通信协议,凭借其全双工、高速率、低引脚开销的特点,成为连接高性能传感器与MCU的理想选择。本文从SPI通信的基本原理出发,讲解如何通过STM32C5的SPI外设与ST超宽带MEMS振动传感器IIS3DWB进行数据交互。内容涵盖硬件连接、CubeMX参数配置、寄存器读写时序、原始数据的量纲换算以及实测波形验证,并分享调试过程中遇到的电源去耦、时钟串扰等典型问题。掌握这套基础驱动,你就能稳定读取26.7kHz采样
STM32C5实战:LSM6D3TR-C陀螺仪轮询读取完整指南
MEMS惯性传感器是嵌入式系统中实现运动检测与姿态感知的核心器件,陀螺仪通过测量角速度(dps)为设备提供旋转信息。在STM32平台开发中,I2C通信是连接MCU与传感器最常用的方式之一,而寄存器配置、数据就绪状态轮询以及原始数据到物理量的换算,则是确保稳定读数的关键环节。本文从六轴传感器LSM6D3TR-C的硬件接线、CubeMX初始化出发,深入解析CTRL2_G等寄存器的配置方法,并给出基于STM32C5的轮询读取代码与实测验证建议。无论是工业监测、可穿戴设备还是机器人控制,掌握这套从状态位判断到连续读
【单片机毕业设计】【yq-022】计步器
随着物联网的发展和人们对健康的重视,计步器作为一种定量监测人运动情况的可穿戴设各走进了千家万户。本文设计了一款基于传感器MPU6050的低功耗计步器,本设计通过MPU6050陀螺仪进行计步,通过DS1302对时间进行获取,通过AT24C02存储月、日和当天的总步数,每天的00.00.00,将数据保存一次,并清除总的步数,通过按键可修正时间、查看记录每天的步数和运动时间,通过显示屏显示时间和步数,除此之外,通过蓝牙模块,手机端可实时获取当天的步数和查看当天运动记录。计步器作为一种步伐检测设备,一定程度上可以反
嵌入式开发从零到实战:C51与STM32全链路学习指南
嵌入式系统开发是连接软件与硬件的核心技术领域,其核心在于通过编程语言(如C语言)直接控制微处理器及其外设。从基本原理上看,开发者需要理解计算机体系结构、数字电路以及微控制器(MCU)的工作机制,通过配置寄存器或调用硬件抽象层(HAL)来驱动GPIO、定时器、中断和通信接口等外设。这项技术的核心价值在于实现智能设备的实时控制、数据采集与处理,广泛应用于物联网终端、智能家居、工业自动化及消费电子等领域。对于初学者而言,从经典的51单片机(如C51)入手是建立硬件思维的理想起点,它能帮助开发者直观理解位操作、内存
STM32C5通过SPI驱动IIS3DWB振动传感器:从硬件连接到数据解析
在工业振动监测与故障诊断场景中,传感器与MCU之间的通信接口选择直接影响数据采集的实时性与完整性。SPI凭借全双工、高速率优势,常被用于替代I2C来满足宽带加速度计的高吞吐需求。本文围绕STM32C5与IIS3DWB的组合,介绍如何通过CubeMX配置SPI时序、完成寄存器读写及FIFO批量读取,并实现振动数据的物理量解析与验证。从硬件接线到踩坑排查,提供一套可复用的工程实践路径,适用于旋转机械状态监测、轴承故障诊断等需要高频采样的场景,帮助开发者快速打通传感器数据链路。
【单片机毕业设计】【yq-019】跳绳计数器
随着生活节奏的加快,人们的生活压力随之加大,跳绳作为排解生活压力的一项重要的体育运动,但在跳绳过程中,传统的计数采用人工或机械结构方式计数,这两种方式存在成本高、误差大、人力消耗大等问题。因此,本文采用传感器和单片机技术,设计一款基于STC89C52单片机的智能跳绳计数器。通过MPU6050计数传感器检测跳绳次数;通过AT24C02可将每天跳绳的总次数进行保存;通过按键设置跳绳计时时间,当计时时间结束时,进行蜂鸣器响3s提醒,用户可以通过按键查看跳绳时间和跳绳次数。计数传感器利用惯性单元对跳的状态进行判断,
1106
1486
1180
1044

被折叠的 条评论
为什么被折叠?



