- 필요한 구성 요소
- MPU6050 센서 모듈 – 간략한 소개
- Attiny85 스텝 카운터 회로도
- Attiny85 스텝 카운터 용 PCB 제작
- PCBWay에서 PCB 주문
- ATtiny85 스텝 카운터 PCB 조립
- ATtiny85 단계 카운터 코드 설명
- 아두 이노 스텝 카운터를 걸어 보자
이 튜토리얼에서는 ATtiny85 IC, MPU6050 가속도계 및 자이로 스코프, OLED 디스플레이 모듈을 사용하여 쉽고 저렴한 보수계를 구축 할 것입니다. 이 간단한 Arduino 기반 걸음 수 카운터는 3V 코인 셀로 구동되므로 산책이나 조깅을 할 때 쉽게 휴대 할 수 있습니다. 또한 빌드 할 구성 요소가 거의 필요하지 않으며 코드도 비교적 간단합니다. 이 프로젝트의 프로그램은 MPU6050을 사용하여 3 축 (X, Y, Z)을 따라 가속도의 크기를 측정합니다. 그런 다음 이전 값과 현재 값 사이의 가속도 크기 차이를 계산합니다. 차이가 특정 임계 값보다 크면 (6보다 큰 걷기 및 10보다 큰 경우) 그에 따라 걸음 수가 증가합니다. 총 단계가 OLED 디스플레이에 표시됩니다.
이 휴대용 스텝 카운터를 PCB에 구축하기 위해 우리는 PCBWay에서 PCB 보드를 제작했으며이 프로젝트에서 동일한 것을 조립하고 테스트 할 것입니다. 더 많은 기능을 추가하려면이 설정에 Heartbeat 모니터를 추가 할 수도 있으며 이전에 ADXL335를 사용하여 Arduino 가속도계 걸음 수 카운터를 구축했습니다. 관심이 있으시면 확인하십시오.
필요한 구성 요소
Arduino 를 사용하여이 보수계 를 구축하려면 다음 구성 요소가 필요합니다.
- Attiny85 IC
- MPU6050
- OLED 디스플레이 모듈
- 2 × 푸시 버튼
- 5 × 10KΩ 저항기 (SMD)
MPU6050 센서 모듈 – 간략한 소개
MPU6050은 MEMS (Micro-Mechanical Systems) 기술을 기반으로합니다. 이 센서에는 3 축 가속도계, 3 축 자이로 스코프 및 내장 온도 센서가 있습니다. Acceleration, Velocity, Orientation, Displacement 등과 같은 매개 변수를 측정하는 데 사용할 수 있습니다. 이전에 MPU6050을 Arduino 및 Raspberry pi와 인터페이스했으며 Self Balancing 로봇, Arduino Digital Protractor 및 Arduino 경사계와 같은 몇 가지 프로젝트를 구축했습니다.
MPU6050 모듈은 크기가 작고 전력 소비가 적고 반복 횟수가 높으며 충격 내성이 높으며 사용자 가격이 낮습니다. MPU6050은 I2C 버스 및 보조 I2C 버스 인터페이스와 함께 제공되며 자력계 및 마이크로 컨트롤러와 같은 다른 센서와 쉽게 간섭 할 수 있습니다.
Attiny85 스텝 카운터 회로도
MPU6050 스텝 카운터의 회로도는 다음과 같습니다.
위 이미지는 MPU6050 및 OLED 디스플레이를 Attiny85 IC와 인터페이스하기위한 회로도를 보여줍니다. MPU6050, OLED 디스플레이 및 Arduino 간의 인터페이스는 I2C 프로토콜을 사용하여 구현되어야합니다. 따라서 ATtiny85의 SCLPin (PB2)은 MPU6050 및 OLED 디스플레이의 SCLPin에 각각 연결됩니다. 마찬가지로 ATtiny85의 SDAPin (PB0)은 MPU6050 및 OLED 디스플레이의 SDAPin에 연결됩니다. 두 개의 푸시 버튼은 ATtiny85 IC의 PB3 및 PB4 핀에도 연결됩니다. 이 버튼을 사용하여 텍스트를 스크롤하거나 표시되는 텍스트를 변경할 수 있습니다.
참고: Digispark 부트 로더를 사용하여 USB를 통해 직접 ATtiny85 IC 프로그래밍 자습서를 따라 USB 및 Digispark 부트 로더를 통해 ATtiny85 IC를 프로그래밍하십시오.
Attiny85 스텝 카운터 용 PCB 제작
회로도가 완료되고 PCB 레이아웃을 진행할 수 있습니다. 원하는 PCB 소프트웨어를 사용하여 PCB를 설계 할 수 있습니다. 이 프로젝트를 위해 EasyEDA를 사용하여 PCB를 제작했습니다.
아래는 스텝 카운터 PCB의 상단 레이어와 하단 레이어의 3D 모델보기입니다.
위 회로의 PCB 레이아웃은 아래 링크에서 Gerber로 다운로드 할 수도 있습니다.
- ATtiny85 스텝 카운터 용 Gerber 파일
PCBWay에서 PCB 주문
이제 설계를 완료 한 후 PCB 주문을 진행할 수 있습니다.
1 단계: https://www.pcbway.com/에 접속하여 처음이라면 가입하십시오. 그런 다음 PCB 프로토 타입 탭에서 PCB 치수, 레이어 수 및 필요한 PCB 수를 입력합니다.
2 단계: '지금 견적'버튼을 클릭하여 진행합니다. Board type, Layers, Material for PCB, Thickness 등과 같은 몇 가지 추가 매개 변수를 설정할 수있는 페이지로 이동합니다. 대부분은 기본적으로 선택됩니다. 특정 매개 변수를 선택하는 경우 선택할 수 있습니다. 여기에 있습니다.
3 단계: 마지막 단계는 Gerber 파일을 업로드하고 결제를 진행하는 것입니다. 프로세스가 원활하게 진행되도록 PCBWAY는 결제를 진행하기 전에 Gerber 파일이 유효한지 확인합니다. 이렇게하면 PCB가 제작에 친숙하고 약속 된대로 도달 할 수 있습니다.
ATtiny85 스텝 카운터 PCB 조립
며칠 후, 우리는 깔끔한 패키지로 PCB를 받았으며 PCB 품질은 항상 좋았습니다. 보드의 상단 레이어와 하단 레이어는 다음과 같습니다.
트랙과 발자국이 올바른지 확인한 후. PCB 조립을 진행했습니다. 완전히 납땜 된 보드는 다음과 같습니다.
ATtiny85 단계 카운터 코드 설명
전체 Arduino 단계 카운터 코드 는 문서 끝에 제공됩니다. 여기서 우리는 코드의 몇 가지 중요한 부분을 설명합니다.
이 코드는 TinyWireM.h & TinyOzOLED.h 라이브러리를 사용합니다. TinyWireM 라이브러리는 Arduino IDE의 Library Manager에서 다운로드하여 설치할 수 있습니다. 이를 위해 Arduino IDE를 열고 Sketch <Include Library <Manage Libraries로 이동하십시오 . 이제 TinyWireM.h를 검색 하고 Adafruit 의 TinyWireM 라이브러리를 설치합니다.
TinyOzOLED.h 라이브러리는 주어진 링크에서 다운로드 할 수 있습니다.
Arduino IDE에 라이브러리를 설치 한 후 필요한 라이브러리 파일을 포함하여 코드를 시작합니다.
#include "TinyWireM.h"#include "TinyOzOLED.h"
라이브러리를 포함시킨 후 가속도계 판독 값을 저장할 변수를 정의합니다.
intaccelX, accelY, accelZ;
설정 () 루프 내에서 와이어 라이브러리를 초기화하고 전원 관리 레지스터를 통해 센서를 재설정하면 OLED 디스플레이에 대한 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 () 함수, 가속도계 데이터를 판독함으로써 시작한다. 각 축의 데이터는 2 바이트 (Upper & Lower) 또는 레지스터에 저장됩니다. 모두 읽으려면 첫 번째 레지스터부터 시작하여 requiestFrom () 함수를 사용하여 X, Y, Z 축에 대해 6 개의 레지스터를 모두 읽어야합니다. 그런 다음 각 레지스터에서 데이터를 읽고 출력이 2의 보수이므로 적절하게 결합하여 완전한 가속도계 값을 얻습니다.
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 (); }
이제 loop 함수 내에서 먼저 X, Y, Z 축 값을 읽고 3 축 값을 얻은 후 X, Y 및 Z 축 값의 제곱근을 취하여 총 가속도 벡터를 계산합니다. 그런 다음 현재 벡터와 이전 벡터의 차이를 계산하고 차이가 6보다 크면 단계 수를 늘립니다.
getAccel (); 벡터 = sqrt ((accelX * accelX) + (accelY * accelY) + (accelZ * accelZ)); totalvector = 벡터-vectorprevious; if (totalvector> 6) {Steps ++; } OzOled.printString ("단계", 0, 4); OzOled.printNumber (단계, 0, 8, 4); vectorprevious = 벡터; 지연 (600);
아두 이노 스텝 카운터를 걸어 보자
PCB 조립이 끝나면 ATtiny85를 프로그래머 보드에 연결하고 코드를 업로드합니다. 이제 손으로 걸음 수 카운터를 설정하고 단계적으로 걷기 시작하면 OLED에 걸음 수를 표시해야합니다. 때로는 설정이 매우 빠르게 또는 매우 느리게 진동 할 때 단계 수가 증가합니다.
이것은 ATtiny85 및 MPU6050을 사용 하여 자신 만의 스텝 카운터를 구축하는 방법 입니다. 프로젝트의 전체 작업은 아래 링크 된 비디오에서도 찾을 수 있습니다. 프로젝트가 즐거웠고 자신 만의 프로젝트를 만드는 것이 흥미 로웠기를 바랍니다. 질문이 있으시면 아래 댓글 섹션에 남겨주세요.