WEEK 3
6軸 IMU「MPU6050」を AI のコードで動かし、AI が注意した2箇所(プルアップ・アドレス)をわざと間違えて、問題を特定するプロセスを身につける。
0.1 前回の復習
0.2 今回の位置づけ
1
通信の先にあるセンサの内部にもそのまま通用する。
1.1 シリアル通信の役割
2
2.1 方法①:AI に書かせる
実際の会話:claude.ai/share/d543dcbd-ec47-445b-9d15-1811179875a6 (共有のため対話型の画面だが、開発時はエージェント型を使う)
2.2 方法②:公式サンプル
mpu6050_reset(); // 起こして while (1) { mpu6050_read_raw(acceleration, gyro, &temp); // 読んで printf("Acc. X = %d, ...", acceleration[0]); // 表示する }
Raspberry Pi 公式サンプル集 pico-examples の i2c/mpu6050_i2c(概要):github.com/raspberrypi/pico-examples/tree/master/i2c/mpu6050_i2c
2.3 動かす
3
AIも人間も、やってみて動かなかったら修正する、というプロセスを踏む。
3.1 準備①:疑う場所
3.2 準備②:二分探索
線形探索 — 端から1個ずつ潰す
二分探索 — 中点で「そこまでは正しいか」を判定する
3.3 準備③:分ける手段
4
バスを H に戻す部品が1つも無くなる。
4.1 最初の分割
4.2 分割の道具を探す
概要、電気的条件、ピン配置、通信方法が載っている。
レジスタの番地と各ビットの意味が載っている。今日開くのはこちら。
4.3 分割点
一覧の末尾近くに WHO_AM_I(0x75)。
読むと固定値 0x68 が返る「答えの分かっている読み出し」。期待どおりなら経路の生存が1回で確定する。
4.4 道具①:printf
// 最初にWHO_AM_Iレジスタを読み、センサと正しく通信できているか確認する uint8_t whoami = mpu6050_read_whoami(); printf("WHO_AM_I = 0x%02X (expected 0x68)\n", whoami);
4.5 観測結果
4.6 発展
5
5.1 道具②:オシロスコープ
5.2 観測
H に戻す仕事は、プルアップ抵抗だけが担う。
「H を作る部品が無い」ことが波形にそのまま現れている。
5.3 対処
通信は成立しない。
AIのコードはこの状態だった。
理想的なクロック波形になった。
5.4 復旧
6
6.1 アドレスとは何か
6.2 仕込み
6.3 道具③:ロジックアナライザ
6.4 測定で気づく
6.5 対照実験で気づく
現状の再現。動かないことを確かめる基準の側。
仮説「アドレスが違うのではないか」に対応する変更のみ。
7
7.1 切り分け表
8
一気に全部作って、最後に確かめる
動かなかったとき、疑う範囲は「全部」
少し作るごとに、動作確認して足場を築く
疑う範囲は、常に「直前の一歩」だけ
8.1 ただし AI は一気に作れる
どこに置くかは設計判断 — 対象の素性で決める「つまみ」
9
9.1 宿題