0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラズパイ入門まとめ:ロータリーエンコーダ & 加速度センサ ADXL345 + 傾き検出

0
Posted at

ラズパイ入門まとめ:ロータリーエンコーダ & 加速度センサ ADXL345 + 傾き検出

Raspberry Pi の定番テーマを、実際にコードを動かしながらまとめて解説します。この記事では ロータリーエンコーダ/加速度センサ ADXL345 + 傾き検出 の2テーマを扱います。

各テーマは ブラウザ上の仮想Raspberry Piシミュレーターで、コードを編集しながら自分で動かせます。

1. ロータリーエンコーダ

概要

右のボタンでツマミを左右に回すと、位置カウントが増減する。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。

プログラムの内容(ざっくり)

A相・B相の変化から回転方向を判定し、位置カウンタを増減します。右のボタンで右回し・左回しを再現できます。

# === ロータリーエンコーダ ===
# A相/B相の変化からツマミの回転方向を検出し、位置カウンタを増減する。
# 右のボタンで回転を再現できる。

import time

last = encoder.position
while True:
    pos = encoder.position
    if pos != last:
        direction = "右回り" if pos > last else "左回り"
        print(f"位置 = {pos}  ({direction})")
        last = pos
    time.sleep(0.1)

配線

配線図(ロータリーエンコーダ)

GPIO5 ── エンコーダ A相(CLK)
GPIO6 ── エンコーダ B相(DT)
GND ── エンコーダ GND

シェルの出力

実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。

🍓 Raspberry Pi シェル

pi@raspberrypi:~ $ python app.py
位置 = 1  (右回り)
位置 = 2  (右回り)
位置 = 3  (右回り)
位置 = 2  (左回り)
位置 = 3  (右回り)
位置 = 4  (右回り)

計測値(エンコーダ位置)の推移:

chart

コードを編集したらどうなるか

1ステップあたりの増分を変えたり、位置で音量や明るさを操作する処理につなげられます。上限・下限を設けることもできます。

まとめ

回転量と方向を読み取る入力デバイスの基本です。音量つまみやメニュー操作に使われます。


Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。


2. 加速度センサ ADXL345 + 傾き検出

概要

I2Cの3軸加速度センサからX/Y/Zを読み、傾き角を計算する。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。

プログラムの内容(ざっくり)

I2Cの3軸加速度センサADXL345からX・Y・Zを読み取り、重力方向からの傾き角を計算します。

# === 加速度センサ ADXL345 + 傾き検出 ===
# 3軸加速度(X/Y/Z)を読み、重力方向からの傾き角を計算する。

import time
import math

while True:
    x, y, z = accel.xyz
    tilt = math.degrees(math.atan2(x, z))
    print(f"加速度 X={x} Y={y} Z={z} g  傾き={tilt:.0f}")
    time.sleep(0.5)

配線

配線図(ADXL345 I2C)

GPIO2 (SDA) ── ADXL345 SDA
GPIO3 (SCL) ── ADXL345 SCL (0x53)
3V3 ── VCC / GND ── GND

シェルの出力

実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。

🍓 Raspberry Pi シェル

pi@raspberrypi:~ $ python app.py
加速度 X=0.26 Y=0.44 Z=0.96 g  傾き=15度
加速度 X=0.41 Y=0.45 Z=0.98 g  傾き=23度
加速度 X=0.64 Y=0.4 Z=0.92 g  傾き=35度
加速度 X=0.77 Y=0.36 Z=0.81 g  傾き=44度
加速度 X=0.76 Y=0.26 Z=0.86 g  傾き=41度
加速度 X=0.78 Y=0.15 Z=0.86 g  傾き=42度
加速度 X=0.72 Y=0.02 Z=0.84 g  傾き=41度
加速度 X=0.57 Y=-0.01 Z=0.91 g  傾き=32度
加速度 X=0.31 Y=-0.2 Z=0.96 g  傾き=18度
加速度 X=0.11 Y=-0.23 Z=1.01 g  傾き=6度
加速度 X=-0.15 Y=-0.38 Z=1.01 g  傾き=-8度
加速度 X=-0.37 Y=-0.37 Z=0.99 g  傾き=-20度
加速度 X=-0.56 Y=-0.44 Z=0.92 g  傾き=-31度
加速度 X=-0.67 Y=-0.44 Z=0.89 g  傾き=-37度

📐 ADXL345

raw XYZ = 0.26, 0.44, 0.96 g
raw XYZ = 0.41, 0.45, 0.98 g
raw XYZ = 0.64, 0.40, 0.92 g
raw XYZ = 0.77, 0.36, 0.81 g
raw XYZ = 0.76, 0.26, 0.86 g
raw XYZ = 0.78, 0.15, 0.86 g
raw XYZ = 0.72, 0.02, 0.84 g
raw XYZ = 0.57, -0.01, 0.91 g
raw XYZ = 0.31, -0.20, 0.96 g
raw XYZ = 0.11, -0.23, 1.01 g

計測値(X軸加速度(g))の推移:

chart

コードを編集したらどうなるか

傾き検出のしきい値を決めれば「倒れた」判定ができます。Y軸も使えば2方向の傾きや振動検出に発展できます。

まとめ

加速度・傾き・振動を測る基本です。姿勢検知や落下検知、歩数計などに応用できます。


Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。


おわりに

どちらもラズパイの基礎として役立つテーマです。気に入ったらLGTM・ストックしていただけると励みになります。他のテーマも順次まとめていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?