DIY: Raspberry Pi를 사용하여 유머 감각을 갖춘 해킹 가능한 체중 추적 저울 만들기

  • Oct 19, 2023

몸무게를 재는 것이 이렇게 재미있었던 적은 없었습니다.

01-스마트스케일.jpg

매일 아침 저 멍청하고, 영혼 없고, 나쁜 소식을 전하는 저울을 쳐다보는 것이 지겹나요? 좋은 소식: 전문가 초기 상태사물인터넷(Internet of Things) 회사의 데이터 분석 회사인 는 유머 감각이 내장된 해킹 가능한 체중 추적 문자 메시지 욕실 체중계를 내놓았습니다.

이것은 Wii 밸런스 보드와 라즈베리 파이, 그리고 온라인 데이터 분석 플랫폼 해킹할 수 있는 Python 스크립트로 제어되는 웹 연결 규모를 생성합니다.

프로젝트 수준: 초급 대략 완료 시간: 20분

파트 I: 장비

이 단계별 자습서에서는 다음을 수행합니다.

  • 블루투스를 통해 Wii 밸런스 보드를 Raspberry Pi에 연결
  • 저울판을 밟을 때 체중을 측정하는 Python 스크립트를 실행하세요.
  • Raspberry Pi를 사용하여 체중을 초기 상태의 클라우드 서비스로 스트리밍합니다.
  • 체중을 측정할 때마다 SMS 알림을 설정하세요.
  • 웹 브라우저에서 액세스할 수 있는 체중 추적 대시보드 구축

다음은 이 튜토리얼에서 사용할 모든 장비 목록과 각 항목을 구입할 수 있는 링크입니다.

  • SD 카드 및 전원 공급 장치가 포함된 Raspberry Pi 3*
  • Wii 밸런스 보드
  • Wii Fit 충전식 배터리 팩
  • "="">
  • 연필 (연필 구입처 링크는 안 드려요... 숙제라고 생각하세요)

*Raspberry Pi 1 또는 2를 사용하는 경우 Bluetooth 어댑터가 필요합니다(예: http://www.amazon.com/gp/product/B00JN5Y5E0).

파트 II: Wii 밸런스 보드 스케일

왜 Wii 밸런스 보드인가? 블루투스 연결 기능을 갖춘 정말 훌륭하고 내구성이 뛰어난 저울이라는 것이 밝혀졌습니다. 이를 통해 단일 보드 컴퓨터(Raspberry Pi)에 연결하여 Python 스크립트로 체중을 읽고 해당 측정값을 온라인 데이터 서비스로 보내 멋진 작업을 수행할 수 있습니다. 또한 귀하 또는 귀하가 아는 사람이 이미 먼지만 쌓이는 장치를 가지고 있을 가능성이 높습니다.

이 프로젝트를 실제로 실용적이고 편리하게 만들려면 Wii 밸런스 보드에 몇 가지 간단한 수정을 해야 합니다.

블루투스 설정:

Raspberry Pi 3에는 Wii 밸런스 보드와 통신하는 데 필요한 모든 블루투스가 내장되어 있습니다. Raspberry Pi 1 또는 2가 있는 경우 USB 포트 중 하나를 사용하여 다음과 같은 저렴한 어댑터를 연결해야 합니다. 아이앤더 USB 블루투스 4.0 저에너지 어댑터.

Pi의 전원을 켜고(이미 Raspbian을 설치했고 부팅되었다고 가정합니다) Raspberry Pi 터미널 창으로 이동합니다. 블루투스 동글의 주소는 다음과 같습니다.

"hcitool dev" 명령: $ hcitool dev

장치:

hci0 00:1A: 7D: DA: 71:13

Python 스크립트에서 사용할 블루투스 모듈을 설치합니다.

$ sudo apt-get 설치 python-블루투스

규모 읽기:

이제 Wii 밸런스 보드를 Raspberry Pi에 연결할 차례입니다. Stavros Korokithakis의 Gr8W8Upd8M8.py 버전을 수정하여 이 작업을 수행하겠습니다. 스크립트. 이 단계에서 사용할 Python 스크립트는 다음 위치에 있습니다. 여기. 이 파일의 내용을 Raspberry Pi에서 생성한 파일에 복사하거나 이 전체 프로젝트에 사용할 모든 Python 파일을 복제할 수 있습니다. 후자를 해보자. Raspberry Pi의 터미널에 다음 명령을 입력하세요.

$ CD ~

$ 자식 클론 https://github.com/InitialState/smart-scale.git

'스마트 스케일'로 복제 중...

원격: 개체 계산: 14, 완료되었습니다.

원격: 개체 압축 중: 100%(12/12), 완료되었습니다.

원격: 총 14개(델타 1), 재사용 8(델타 0), 팩 재사용 0

개체 포장 풀기: 100%(14/14), 완료되었습니다.

연결 확인 중... 완료.

새로운 스마트 스케일 디렉터리에 두 개의 Python 파일(smartscale.py 및 wiiboard_test.py)이 표시되어야 합니다.

$ cd 스마트 스케일

$ ls

README.md smartscale.py wiiboard_test.py

wiiboard_test.py 스크립트를 실행하여 통신을 테스트하고 Wii ​​밸런스 보드에서 무게 판독값을 가져옵니다.

$ sudo 파이썬 wiiboard_test.py

다음과 같은 응답이 표시됩니다.

보드 발견 중...

지금 보드에 있는 빨간색 동기화 버튼을 누르세요.

빨간색 동기화 버튼을 찾으려면 보드 아래에 있는 배터리 덮개를 제거하세요. 스크립트를 실행한 후 몇 초 내에 버튼을 눌러야 합니다. 그렇지 않으면 시간 초과가 발생합니다. 성공하면 다음과 비슷한 내용이 표시됩니다.

주소 00:23:CC: 2E: E1:44에서 Wiiboard를 찾았습니다.

연결하는 중...

주소 00:23:CC: 2E: E1:44에서 Wiiboard에 연결되었습니다.

Wii보드가 연결됨

데이터 쓰기에 대한 ACK가 수신됨

84.9185297파운드

84.8826412파운드

84.9275927파운드

wiiboard_test.py 스크립트는 10행에 지정된 무게 측정 횟수를 가져와서 평균을 출력합니다.

# 사용자 설정

WEIGHT_SAMPLES = 500 #

값을 변경하고 스크립트를 다시 실행하여 측정된 무게와 각 측정에 필요한 시간의 변화를 확인하여 이 숫자를 가지고 놀 수 있습니다. 자신의 체중을 측정하고, 개 무게를 측정하고, 무엇이든 무게를 측정하고 측정값이 적합한지 확인하세요. 스크립트를 중지하려면 Ctrl+C를 누릅니다.

하드웨어 조정

Nintendo는 Wii 밸런스 보드에 항상 4개의 AA 배터리를 사용하고 AC 전원 어댑터는 포함하지 않는다고 가정했습니다. 배터리 전원만 있으면 Wii 보드를 블루투스를 통해 Pi에 영구적으로 연결할 수 없기 때문에 불편할 수 있습니다. 동기화한 다음 배터리를 소모하지 않고 동기화된 상태를 유지하도록 해야 간단히 체중계에 올라서 무게를 측정할 수 있습니다. 운 좋게도 벽면 콘센트에서 지속적인 전원을 공급하는 데 사용할 수 있는 Wii 밸런스 보드용으로 제작된 여러 타사 어댑터가 있습니다. 그만큼 Wii Fit 충전식 배터리 팩 우리의 전력 문제에 대한 완벽한 솔루션입니다. 배터리를 이 배터리 팩으로 교체하고 AC 어댑터를 벽면 콘센트에 연결하십시오.

Python 스크립트를 실행할 때마다 Wii 밸런스 보드와 Raspberry Pi를 페어링해야 하는 것은 동기화 버튼의 위치로 인해 또 다른 불편을 초래합니다. 동기화 버튼은 Wii 보드 하단에 있습니다. 즉, 동기화할 때마다 뒤집어야 합니다. 위에 표시된 대로 연필과 3/8인치 펠트 패드 3개를 사용하여 작은 레버를 만들어 이 문제를 해결할 수 있습니다. 충전식 배터리 팩은 동기화 버튼을 보드 표면 아래에 노출시킵니다. 동기화 버튼에서 보드 바깥쪽 전면까지 이어지는 연필(또는 이와 유사한 것)을 테이프로 붙입니다. 3/8인치 펠트 패드(또는 이와 유사한 것) 3개를 연필 중앙에 쌓아 고정 피벗을 만듭니다. 누군가 실수로 연필을 쫓아내는 것을 원하지 않으므로 연필이 보드에서 너무 많이 노출되지 않도록 주의하십시오. 보드를 뒤집은 후 레버를 누르기만 하면 동기화 버튼을 누를 수 있습니다. 해키하지만 효과적입니다.

Wii 보드를 보관하는 방법에 따라 보드 다리에서 고무 그립 패드를 제거할 수도 있습니다(패드는 단순히 떼어낼 수 있는 스티커입니다). 3/8인치 펠트 패드를 보드의 발에 배치하여 쉽게 미끄러질 수 있습니다.

파트 3: 초기 상태

우리는 체중/데이터를 클라우드 서비스로 스트리밍하고 해당 서비스가 데이터를 노트북이나 모바일 장치에서 액세스할 수 있는 멋진 대시보드로 변환하도록 하고 싶습니다. 우리 데이터에는 목적지가 필요합니다. 초기 상태를 대상으로 사용하겠습니다.

1단계: 초기 상태 계정 등록

이동 https://app.initialstate.com/#/register/ 그리고 새 계정을 만드세요.

2단계: ISStreamer 설치

Pi에 초기 상태 Python 모듈을 설치합니다.

명령 프롬프트에서(먼저 Pi에 SSH를 연결하는 것을 잊지 마세요) 다음 명령을 실행하세요:

$ CD /홈/파이/
$ \curl -sSL
https://get.initialstate.com/python -o - | sudo bash

보안 노트: 위 명령에는 사용자가 알아야 할 몇 가지 중요한 구조가 있습니다. 1) 컬 앞에 \가 있습니다. 이것은 컬의 별칭이 생성된 경우 실행되지 않도록 하는 데 중요합니다. 이는 명령이 의도한 것보다 더 많은 작업을 수행할 위험을 완화하는 데 도움이 됩니다. 2) 명령은 파이프형 명령이므로 실행 시 검색되는 스크립트의 출력을 파이핑합니다. https://get.initialstate.com/python sudo bash 명령에 들어갑니다. 이는 설치를 단순화하기 위한 것입니다. 그러나 여기에서는 설치가 실패하지 않도록 하기 위해 https가 중요하다는 점에 유의해야 합니다. 설치 스크립트의 중간자 조작(특히 스크립트가 상승된 권한으로 실행되고 있기 때문에) 특권. 이는 설치 및 설정을 단순화하는 일반적인 방법이지만, 조금 더 피곤하다면 약간 덜 편리한 대안이 있습니다. 명령을 두 단계로 나누고 컬 명령에서 다운로드되는 bash 스크립트를 직접 조사하여 충실도를 확인하십시오. ~할 수 있다 pip 지침을 따르십시오, 자동으로 생성된 예제 스크립트를 얻을 수 없습니다.

예제 스크립트를 자동으로 가져오라는 메시지가 나타나면 y를 입력합니다. 그러면 Pi에서 초기 상태로 데이터를 스트리밍할 수 있는지 확인하기 위해 실행할 수 있는 테스트 스크립트가 생성됩니다. 다음 메시지가 표시됩니다.

예제를 어디에 저장하시겠습니까? [기본값: ./is_example.py]:

사용자 정의 로컬 경로를 입력하거나 Enter 키를 눌러 기본값을 적용할 수 있습니다.

초기 상태 계정을 등록할 때 방금 생성한 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. 둘 다 입력하면 설치가 완료됩니다.

생성된 예제 스크립트를 살펴보겠습니다.

$ 나노 is_example.py

15번째 줄에는 streamer = Streamer(bucket_...)로 시작하는 줄이 표시됩니다. 이 줄은 "Python Stream example"이라는 새 데이터 버킷을 생성하고 계정과 연결됩니다. 이 연결은 동일한 줄의 access_key="..." 매개변수로 인해 발생합니다. 일련의 긴 문자와 숫자가 초기 상태 계정 액세스 키입니다. 웹 브라우저에서 초기 상태 계정으로 이동하면 오른쪽 상단에 있는 사용자 이름을 클릭한 다음 "내 계정"으로 이동하면 페이지 하단의 "스트리밍 액세스" 아래에서 동일한 액세스 키를 찾을 수 있습니다. 열쇠".

데이터 스트림을 생성할 때마다 해당 액세스 키는 해당 데이터 스트림을 귀하의 계정으로 전달합니다. 따라서 키를 누구와도 공유하지 마십시오.

테스트 스크립트를 실행하여 초기 상태 계정에 대한 데이터 스트림을 생성할 수 있는지 확인하세요. 다음을 실행합니다:

$ 파이썬 is_example.py 단계

웹 브라우저에서 초기 상태 계정으로 돌아갑니다. "Python Stream 예제"라는 새 데이터 버킷이 로그 선반 왼쪽에 표시되어야 합니다(페이지를 새로 고쳐야 할 수도 있음). 이 버킷을 클릭한 다음 Waves 아이콘을 클릭하면 테스트 데이터를 볼 수 있습니다.

이 데이터 시각화 도구를 사용하는 방법을 익히려면 Waves 튜토리얼을 단계별로 진행하는 것이 좋습니다. 다음으로 타일에서 데이터를 확인하여 동일한 데이터를 대시보드 형식으로 확인하세요.

이제 스케일에서 실제 데이터 스트리밍을 시작할 준비가 되었습니다.

3부: 최종 스크립트

"git clone"을 실행했다고 가정합니다. https://github.com/InitialState/smart-scale.git 2부의 " 명령에서 모든 것을 하나로 묶는 최종 스크립트는 ~/smart-scale 디렉터리에 있는 smartscale.py입니다. (https://github.com/InitialState/smart-scale/blob/master/smartscale.py)

스크립트를 실행하려면 먼저 스크립트에서 몇 가지 설정을 지정해야 합니다. nano와 같은 즐겨 사용하는 텍스트 편집기에서 smartscale.py를 엽니다.

$ CD ~

$ cd 스마트 스케일

$ 나노 smartscale.py

이 파일 상단 근처에 사용자 설정 섹션이 있습니다.

# 사용자 설정

BUCKET_NAME = ":apple: 내 체중 기록"

BUCKET_KEY = "무게11"

ACCESS_KEY = "여기에 초기 상태 액세스 키를 입력하세요."

METRIC_UNITS = 거짓

WEIGHT_SAMPLES = 500

THROWAWAY_SAMPLES = 100

무게_역사 = 7

#

  • BUCKET_NAME은 체중/데이터가 스트리밍될 초기 상태 데이터 버킷의 이름을 설정합니다. 이는 여기에서 설정하고 나중에 UI에서 변경할 수 있습니다.
  • BUCKET_KEY는 데이터가 스트리밍될 위치를 지정하는 고유 버킷 식별자입니다. 다른 버킷/대시보드를 생성하려면 여기에서 다른 식별자를 사용하세요(*참고: 버킷을 보관하는 경우 새 버킷에서 해당 키를 재사용할 수 없습니다).
  • ACCESS_KEY는 초기 상태 계정 키입니다. 이 필드에 ACCESS_KEY를 입력하지 않으면 데이터가 계정에 표시되지 않습니다.
  • METRIC_UNITS를 사용하면 True로 설정된 경우 체중을 kg 단위로, False로 설정된 경우 lb로 지정할 수 있습니다.
  • WEIGHT_SAMPLES는 실제 체중을 얻기 위해 얼마나 많은 측정을 하고 평균을 내는지 지정합니다. 500회 측정에는 약 4~5초가 소요되며 상당히 정확한 결과를 제공합니다.
  • THROWAWAY_SAMPLES는 보드에 처음 발을 디딜 때 버려지는 샘플 수를 지정합니다. 이렇게 하면 초기 단계와 이동으로 인해 최종 측정이 중단되는 것을 방지할 수 있습니다. 이는 항상 WEIGHT_SAMPLES보다 훨씬 작아야 합니다.
  • WEIGHT_HISTORY는 추가 업데이트가 전송되기 전에 수행되는 측정 횟수를 설정합니다. 2시간 이상 간격으로 측정한 것만 기록에 포함됩니다.

이 섹션에서 각 매개변수를 지정하고 변경 사항을 저장하면 최종 스크립트를 실행할 준비가 된 것입니다. 스크립트를 실행하기 전에 스크립트가 수행할 작업을 살펴보겠습니다.

  • 스크립트 시작 시 Wii 밸런스 보드를 Raspberry Pi와 페어링하라는 메시지가 표시됩니다. 하드웨어 조정 섹션에서 함께 해킹한 레버를 사용하여 동기화 버튼을 누르세요. 메시지가 표시됩니다.
  • 스크립트가 실행되면 Wii 보드에 올라 체중 측정을 시작하세요. 4~5초 후에 체중이 자동으로 초기 상태 계정으로 전송됩니다.
  • 몇 단계를 거쳐 SMS 알림을 설정하면 측정 후 곧 문자 메시지를 받게 됩니다.

스크립트를 실행하여 마법을 시작하세요.

$ sudo python smartscale.py

계기반

초기 상태 계정으로 이동하여 BUCKET_NAME 매개변수에 해당하는 이름(예: 내 체중 기록)을 가진 새 데이터 버킷을 클릭하세요. 체중 기록 대시보드를 보려면 타일을 클릭하세요. 타일에서 데이터를 처음 볼 때 업데이트, 체중 날짜 및 체중(파운드)이라는 세 개의 타일이 표시되어야 합니다. 대시보드를 사용자 정의할 수 있습니다. 타일 ​​크기 조정 및 이동 ~처럼 보기 유형 변경 그리고 심지어 타일 ​​추가. 이 대시보드를 사용하면 체중 기록을 한 눈에 볼 수 있습니다. 그것은 모바일 친화적 그리고 당신은 심지어 할 수 있습니다 다른 사람들과 공유하세요.

SMS

체중계가 체중을 측정할 때마다 SMS 알림을 만들어 보겠습니다.

우리는 다음에 설명된 트리거 알림 설정 프로세스를 따를 것입니다. http://support.initialstate.com/knowledgebase/articles/834354-triggers-adding-a-trigger.

  1. 맥주 데이터 버킷이 로드되었는지 확인하세요.
  2. 데이터 선반(해당 이름 아래)에서 버킷 설정을 클릭합니다.
  3. 트리거 탭을 클릭합니다.
  4. 트리거할 데이터 스트림을 선택합니다(데이터 버킷이 로드된 후 드롭다운 목록을 사용하여 기존 스트림에서 선택하거나 스트림 이름/키를 수동으로 입력할 수 있음). *참고: Safari는 HTML5 드롭다운 목록을 지원하지 않습니다. 위의 예시 스크린샷에서는 "업데이트"를 선택했습니다.
  5. 조건부 연산자(이 경우 '일치')를 선택하세요.
  6. 작업을 트리거할 트리거 값을 선택합니다(원하는 값을 수동으로 입력). 미터법 단위를 사용하지 않는 경우 lb를 입력하고, 미터법 단위를 사용하는 경우 kg를 입력합니다. 업데이트 스트림에 "lb"(또는 "kg")가 포함될 때마다 문자 메시지 알림을 받게 됩니다.
  7. 트리거 조건을 추가하려면 '+' 버튼을 클릭하세요.
  8. 작업을 선택합니다(SMS로 알림 선택).
  9. 액션을 추가하려면 '+' 버튼을 클릭하세요.
  10. 설정을 완료하려면 새 전화번호를 추가하는 경우 인증 코드를 입력하세요.

이제 트리거가 활성화되었으며 조건이 충족되면 실행됩니다. 완료를 클릭하면 메인 화면으로 돌아갑니다.

설정이 완료되면 체중을 측정할 때마다 체중, 마지막 측정 이후 체중 변화량, 무작위 농담/욕설/칭찬이 포함된 SMS를 받게 됩니다.

결론

이 프로젝트를 기반으로 구축할 수 있는 가능성:

  • 다른 소스의 데이터를 동일한 체중 기록 대시보드로 스트리밍할 수 있습니다(정보) 나만의 개인 건강 대시보드를 만들 수 있습니다.
  • messageWeighFirst, messageWeighLess, messageWeighMore 및 messageWeighSame 기능의 농담을 어떤 엉뚱한 유머 브랜드로든 변경할 수 있습니다.
  • 농담을 실용적인 메시지로 바꾸거나 제거하고 체중계 코드를 사용하여 자신의 체중 외에 중요한 것의 무게를 추적할 수도 있습니다.
  • 동일한 접근 방식을 사용하여 나만의 스마트 맥주/와인 냉장고를 만들 수 있습니다. 이를 위해 만들어진 멋진 튜토리얼이 이미 있습니다. 여기.

해킹해 보세요!