teratail header banner
teratail header banner
質問するログイン新規登録
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

837閲覧

加速度データを取得したい(RaspberryPi4B,ADXL372,Python)

QAZ

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/04 16:18

編集2022/03/05 14:36

0

0

前提・実現したいこと

前提
使用している機器は、RaspberryPi4BとADXL372です
RaspberryPi4BとADXL372はI2C通信、プログラムはPythonで記述を行っています
一応X,Y,Z軸データを取得するプログラムを書いてみたのですが、現状上手くいっていません

実現したいこと
加速度センサーADXL372の加速度データを簡易的にでもよいので正しい値として取得したいと考えています

何か解決に繋がりそうな情報が少しでもありましたら教えていただけると幸いです、よろしくお願いします

発生している問題・エラーメッセージ

X 軸データ、Y軸データ、Z軸データを表示するプログラムを書いたのですが、Z軸データが変化しません
出力結果は以下のようになりました

出力結果 X:48Y:176Z:4080 X:16Y:208Z:4080 X:48Y:192Z:4080 X:240Y:192Z:4080 X:224Y:240Z:4080 X:16Y:192Z:4080 X:48Y:176Z:4080 X:240Y:208Z:4080 X:16Y:240Z:4080 X:16Y:176Z:4080 X:208Y:144Z:4080 X:208Y:192Z:4080 X:240Y:224Z:4080 X:208Y:160Z:4080 X:16Y:176Z:4080 X:16Y:160Z:4080 X:240Y:240Z:4080 X:16Y:176Z:4080 X:16Y:112Z:4080 X:16Y:208Z:4080 X:208Y:208Z:4080 X:16Y:192Z:4080 X:48Y:240Z:4080 X:48Y:208Z:4080 X:240Y:240Z:4080 X:48Y:16Z:4080

該当のソースコード

Python

1import smbus 2import time 3 4i2c = smbus.SMBus(1) 5address = 0x53 6 7try: 8 while True: 9 xh = i2c.read_byte_data(address, 0x08) 10 xl = i2c.read_byte_data(address, 0x09) 11 yh = i2c.read_byte_data(address, 0x0A) 12 yl = i2c.read_byte_data(address, 0x0B) 13 zh = i2c.read_byte_data(address, 0x0C) 14 zl = i2c.read_byte_data(address, 0x0D) 15 16 X_data =str(xh << 4 | xl) 17 Y_data =str(yh << 4 | yl) 18 Z_data =str(zh << 4 | zl) 19 print('X:'+ X_data +'Y:'+ Y_data +'Z:'+ Z_data) 20 time.sleep(0.5) 21 22except KeyboardInterrupt: 23 print("Cleanup")

参考

ADXL372のデータシートです(なぜかリンクに飛べないみたいです、お手数ですが検索していただくか、URLをコピペしてください、すみません)
https://www.analog.com/media/jp/technical-documentation/data-sheets/ADXL372_jp.pdf
34ページからX軸データ、Y軸データ、Z軸データについて書かれていました

X軸データについては下図のように書かれていました
自分は単純に上位8ビットを左に4つずらして下位4ビットとあわせて12ビットを表示するようにしました

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/03/04 21:37

データシートを読むとセルフテスト機能があるようです 一応確認してみてはどうでしょう
QAZ

2022/03/05 14:16

melian様、ozwk様コメントありがとうございます 確かにZ軸だけが変わらない現象がありますね、こんなにたくさん事例あるなら加速度センサーではなく使用者側(私側)の問題ですかね… データシートのセルフテストの場所を確認しました、いろいろと知らない単語があるのでしっかりと調べてから取り組みたいと思います わざわざコメントしていただきありがとうございます
guest

回答1

0

ベストアンサー

ざっとみてきになったところを。

X_data =str(xh << 4 | xl)
X_data =str((xh << 4) | (xl>>4))

ですね
#他のところも同様

投稿2022/03/04 22:25

y_waiwai

総合スコア88180

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

QAZ

2022/03/05 14:20

y_waiwai様回答ありがとうございます 早速コードを書き換えてみたところ若干ではありますが、Z軸データの変化がみられました 下に出力結果をコピーしました、Zの値だけが大きいのは2の補数表現を行っていないため?だと思います、とりあえず値が変化してくれたのでよかったです、ありがとうございました X:14Y:10Z:4088 X:12Y:11Z:4088 X:31Y:10Z:4091 X:12Y:8Z:4087 X:30Y:11Z:4090 X:0Y:11Z:4092 X:15Y:12Z:4089 X:20Y:15Z:4091 X:11Y:12Z:4090 X:17Y:13Z:4091 X:20Y:13Z:4089 X:19Y:11Z:4091 X:13Y:8Z:4088 X:15Y:11Z:4091
y_waiwai

2022/03/05 22:48

12ビットの最上位ビットがたっていたら、 Z_data |= ~0xfff でマイナスの数値が出せます
QAZ

2022/03/08 08:43

ありがとうございます、無事にマイナスの数値の出力もできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問