- 所需组件
- MPU6050传感器模块–简介
- Attiny85步数计数器电路图
- 制造用于Attiny85计步器的PCB
- 从PCBWay订购PCB
- 组装ATtiny85步进计数器PCB
- ATtiny85步骤计数器代码说明
- 让我们带走Arduino步数计数器
在本教程中,我们将使用ATtiny85 IC,MPU6050加速度计和陀螺仪以及OLED显示模块构建一个简单而便宜的计步器。这个简单的基于Arduino的步进计数器由3V纽扣电池供电,使您外出散步或慢跑时很容易携带。它还需要构建的组件很少,并且代码也相对简单。该项目中的程序使用MPU6050测量沿3轴(X,Y和Z)的加速度的大小。然后,它计算先前值和当前值之间的加速度大小之差。如果差异大于某个阈值(对于大于6的步行和大于10的奔跑),则会相应地增加步数。然后将采取的全部步骤显示在OLED显示屏上。
为了在PCB上构建此便携式计步器,我们使用PCBWay制造了PCB板,我们将在本项目中对其进行组装和测试。如果您想添加更多功能,还可以在此设置中添加心跳监视器,并且我们之前也已使用ADXL335构建了Arduino加速度计步数计数器,如果有兴趣请查看它们。
所需组件
要使用Arduino构建此 计步器, 您将需要以下组件。
- Attiny85 IC
- MPU6050
- OLED显示模块
- 2个按钮
- 5×10KΩ电阻器(SMD)
MPU6050传感器模块–简介
MPU6050基于微机械系统(MEMS)技术。该传感器具有 3轴加速度计,3轴陀螺仪和内置温度传感器。它可以用来测量诸如加速度,速度,方向,位移等参数。我们之前已经将MPU6050与Arduino和Raspberry pi进行了接口,并且还使用它构建了一些项目,例如自平衡机器人,Arduino数字量角器和Arduino测斜仪。
MPU6050模块尺寸小,功耗低,重复性高,耐冲击性高,用户价格低。MPU6050带有I2C总线和辅助I2C总线接口,可轻松干扰磁力计和微控制器等其他传感器。
Attiny85步数计数器电路图
MPU6050步进计数器的原理图如下:
上图显示了将MPU6050和OLED显示器与Attiny85 IC相连的电路图。MPU6050,OLED Display和Arduino之间的接口必须使用I2C协议实现。因此,ATtiny85的SCLPin(PB2)分别连接到MPU6050和OLED Display的SCLPin。同样,ATtiny85的SDAPin(PB0)连接到MPU6050和OLED Display的SDAPin。两个按钮也连接到ATtiny85 IC的PB3和PB4引脚。这些按钮可用于滚动文本或更改显示的文本。
注意:请 遵循我们之前的教程,使用Digispark Bootloader直接通过USB对ATtiny85 IC进行编程,以通过USB和Digispark Bootloader对ATtiny85 IC进行编程。
制造用于Attiny85计步器的PCB
原理图已完成,我们可以继续布局PCB。您可以使用所选的任何PCB软件来设计PCB。我们已经使用EasyEDA为该项目制造PCB。
以下是步进计数器PCB顶层和底层的3D模型视图:
上述电路的PCB布局也可以从下面给出的链接作为Gerber下载:
- Gertin文件用于ATtiny85步骤计数器
从PCBWay订购PCB
现在,完成设计后,您可以继续订购PCB:
第1步: 进入https://www.pcbway.com/,如果这是您第一次,请注册。然后,在“ PCB原型”选项卡中,输入PCB的尺寸,层数和所需的PCB数。
第2步: 点击“立即报价”按钮继续。您将进入一个页面,在其中设置一些其他参数,例如板类型,层,PCB的材料,厚度等。默认情况下,其中大多数处于选中状态,如果您选择任何特定的参数,则可以选择它在这里。
第3步: 最后一步是上传Gerber文件并继续付款。为了确保过程顺利进行,PCBWAY会在进行付款之前先验证您的Gerber文件是否有效。这样,您可以确保您的PCB易于加工,并且能够按承诺达到您的要求。
组装ATtiny85步进计数器PCB
几天后,我们收到了整齐的PCB板,PCB质量一如既往。电路板的顶层和底层如下所示:
确保轨道和脚印正确后。我着手组装PCB。完全焊接的电路板如下所示:
ATtiny85步骤计数器代码说明
文档末尾提供了完整的 Arduino步骤计数器代码。在这里,我们解释了代码的一些重要部分。
该代码使用TinyWireM.h&TinyOzOLED.h库。可以从Arduino IDE中的库管理器下载TinyWireM库,然后从那里安装。为此,打开Arduino IDE并转到 Sketch <Include Library <Manage Libraries 。现在搜索TinyWireM.h并通过Adafruit安装 TinyWireM库。
虽然可以从给定的链接下载TinyOzOLED.h库。
将库安装到Arduino IDE之后,通过包含所需的库文件来启动代码。
#include“ TinyWireM.h” #include“ TinyOzOLED.h”
包含库之后,定义变量以存储加速度计读数。
intaccelX,accelY,accelZ;
在 setup () 循环中,初始化电线库并通过电源管理寄存器重置传感器,还初始化OLED Display的I2C通信。然后在接下来的几行中设置显示方向,并输入加速度计和陀螺仪值的寄存器地址。
TinyWireM.begin(); OzOled.init(); OzOled.clearDisplay(); OzOled.setNormalDisplay(); OzOled.sendCommand(0xA1); OzOled.sendCommand(0xC8); TinyWireM.beginTransmission(mpu); TinyWireM.write(0x6B); TinyWireM.write(0b00000000); TinyWireM.write(0x1B);
在 getAccel() 函数中,首先读取加速度计数据。每个轴的数据存储在两个字节(上下)或寄存器中。为了读取所有寄存器,从第一个寄存器开始,并使用 requiestFrom() 函数,我们要求读取X,Y和Z轴的所有6个寄存器。然后,我们从每个寄存器读取数据,并且由于输出是二进制补码,因此请对其进行适当组合以获取完整的加速度计值。
voidgetAccel(){TinyWireM.beginTransmission(mpu); TinyWireM.write(0x3B); TinyWireM.endTransmission(); TinyWireM.requestFrom(mpu,6); accelX = TinyWireM.read()<< 8-TinyWireM.read(); accelY = TinyWireM.read()<< 8-TinyWireM.read(); accelZ = TinyWireM.read()<< 8-TinyWireM.read(); }
现在,在循环功能内部,首先读取X,Y和Z轴值,然后获取3轴值,然后通过取X,Y和Z轴值的平方根来计算总加速度矢量。然后计算当前向量与先前向量之间的差,如果该差大于6,则增加步数。
getAccel(); 向量= sqrt((accelX * accelX)+(accelY * accelY)+(accelZ * accelZ)); totalvector = vector-vectorprevious; if(totalvector> 6){步骤++; } OzOled.printString(“ Steps”,0,4); OzOled.printNumber(Steps,0,8,4); vectorprevious =向量; 延迟(600);
让我们带走Arduino步数计数器
完成PCB的组装后,将ATtiny85连接到编程器板上,然后上传代码。现在,您便可以掌握步数计数器的设置,并逐步开始操作,它应该在OLED上显示步数。有时,当设置振动非常快或非常慢时,它会增加步骤数。
这就是使用ATtiny85 和MPU6050构建自己的 步进计数器的方法。您也可以在下面的视频中找到该项目的完整工作。希望您喜欢这个项目,并发现构建自己的项目很有趣。如果您有任何疑问,请留在下面的评论部分。