ラズパイ入門まとめ:ロータリーエンコーダ & 加速度センサ 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 (右回り)
計測値(エンコーダ位置)の推移:
コードを編集したらどうなるか
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))の推移:
コードを編集したらどうなるか
傾き検出のしきい値を決めれば「倒れた」判定ができます。Y軸も使えば2方向の傾きや振動検出に発展できます。
まとめ
加速度・傾き・振動を測る基本です。姿勢検知や落下検知、歩数計などに応用できます。
Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。
おわりに
どちらもラズパイの基礎として役立つテーマです。気に入ったらLGTM・ストックしていただけると励みになります。他のテーマも順次まとめていきます。
