Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby × 車 ~ 愛車のデータを取得せよ! ~

Avatar for matsudai matsudai
February 23, 2026
58

Ruby × 車 ~ 愛車のデータを取得せよ! ~

Avatar for matsudai

matsudai

February 23, 2026
Tweet

Transcript

  1. もくじ ・ きっかけ   ① Ruby Kaigi 2024   ②

    かにロボ ・ しくみ   ① 車との接続   ② プログラミング ・ デモ
  2. きっかけ ② 未来の技術者育成を目的とした「ご当地こどもロボコン」 島根県では「 Matz葉がにロボコン」「どじょうすくいロボコン」の2つ ご当地こどもロボコン, https://gotochi-robocon.com/ Matz葉がにロボコン | かにロボ連盟

    ご当地こども向けプログラミングコンテスト, https://www.shimane-oss.org/kani-robo/ どじょうすくいロボコン | ご当地こどもロボコン, https://www.shimane-oss.org/dojyosukui-robo/
  3. きっかけ 見比べてみると…  ① 色が赤い  ② センサーがある  ③ モーター(アクチュエーター)で動く 第1回Matz葉がにロボコンの開催 |

    松江工業高等専門学校 スタートアップ事業, https://www.matsue-ct.jp/startup/%E7%AC%AC1%E5%9B%9Ematz%E8%91%89%E3%81%8C%E3%81%AB%E3%83%AD%E3%83%9C%E3%82%B3%E3%83%B3%E3%81%AE%E9%96%8B%E5%82%AC/ かにロボ 自分の車
  4. きっかけ 見比べてみると…  ① 色が赤い  ② センサーがある  ③ モーター(アクチュエーター)で動く  → 同じ!

    題材としてちょうど良いのでは?    ※ 車のアクチュエーター操作は危険なので読み取りのみ 第1回Matz葉がにロボコンの開催 | 松江工業高等専門学校 スタートアップ事業, https://www.matsue-ct.jp/startup/%E7%AC%AC1%E5%9B%9Ematz%E8%91%89%E3%81%8C%E3%81%AB%E3%83%AD%E3%83%9C%E3%82%B3%E3%83%B3%E3%81%AE%E9%96%8B%E5%82%AC/ かにロボ 自分の車 ∽
  5. そもそも車の制御が外部から可能なのか?  → 2024年から車検時の「OBD 検査」が義務化、PCと繋いでいる!  → プロトコルも決まっている。今回は「CAN」プロトコルの開発キットを購入   開発キット(モジュール)と Raspberry Pi Pico(マイコン)間は

    UARTで通信   UARTはSmTでもサポートしているため問題なさそう しくみ ① 車との接続 OBD-II CAN-BUS DEV KIT | Longan Docs, https://docs.longan-labs.cc/1030002/ OBD II + CAN UART = (モジュールで吸収)
  6. しくみ SmT + kaniwriter 車 OBD II + CAN プログラム

    Ruby (mruby/c) Raspberry Pi Pico ② プログラミング
  7. UARTは「送信側・受信側でタイミングを合わせてビット送受信」する規格 しくみ ② プログラミング TX RX TX RX OBD-II CAN-BUS

    DEV KIT | Longan Docs, https://www.switch-science.com/search?q=OBD+II マイコン側 モジュール側
  8. UARTは「送信側・受信側でタイミングを合わせてビット送受信」する規格 ビット列の意味(プロトコル)はモジュールの仕様で決まっている しくみ ② プログラミング TX RX TX RX OBD-II

    CAN-BUS DEV KIT | Longan Docs, https://www.switch-science.com/search?q=OBD+II ① 「車速をください」 ② 「60km/hです」 マイコン側 モジュール側
  9. UARTは「送信側・受信側でタイミングを合わせてビット送受信」する規格 ビット列の意味(プロトコル)はモジュールの仕様で決まっている ① データの送受信単位:送信 14バイト、受信 12バイトの固定長     → OBD II はシンプルな(「標準」+常にデータ部を持つ)仕様なため

    CAN ID固定 しくみ ② プログラミング データ(8バイト) 00 00 07 DF (00 00) バイト 名称 説明 [0] ID3 ID CAN ID(24-31 bit) ※標準は0固定 [1] ID2 ID上位 CAN ID(16-23 bit) ※〃 [2] ID1 ID CAN ID(8-15 bit) ※通常の操作では全体(0x07DF)固定 [3] ID0 ID下位 CAN ID(1-7 bit) ※〃 [4] EXT フレーム種別 0=標準、1=拡張 ※標準は0固定 [5] RTR リモート要求 0=データ、1=リモート ※OBD II は必ずデータ部を持つため0固定 CAN ID(6 or 4バイト) ※ 受信時は [4] - [5] EXT/RTR が省略されて12バイトになる
  10. UARTは「送信側・受信側でタイミングを合わせてビット送受信」する規格 ビット列の意味(プロトコル)はモジュールの仕様で決まっている ① データの送受信単位:送信 14バイト、受信 12バイトの固定長     → OBD II はシンプルな(「標準」+常にデータ部を持つ)仕様なため

    CAN ID固定 ② データ部の 8バイトで命令・データを送受信 しくみ ② プログラミング バイト 名称 説明 [0] 有効データ長 0x02 ※モード + PIDの2バイト固定 [1] サービスモード 「取得モード」など ★ 重要 [2] PID 取得するデータの種類 ★ 重要 [3] - [7] 未使用 ゼロ埋め バイト 名称 説明 [0] 有効データ長 2 + 取得データバイト数 [1] サービスモード 要求されたサービスモード + 0x40 [2] PID 要求されたPID [3] - [7] 取得データ 要求されたデータ本体 ★ 重要 データ( 8バイト) 00 00 07 DF (00 00) 送信:モジュール ← マイコン 受信:モジュール → マイコン CAN ID(6 or 4バイト)
  11. どのようなデータが取得できるか? しくみ ② プログラミング TX RX TX RX ① 欲しいデータの指示

      例)「車速をください」 ② データの送信  例) 「60km/hです」 マイコン側 モジュール側 バイト 名称 説明 [0] 有効データ長 0x02 ※モード + PIDの2バイト固定 [1] サービスモード 「取得モード」など ★ 重要 [2] PID 取得するデータの種類 ★ 重要 [3] - [7] 未使用 ゼロ埋め バイト 名称 説明 [0] 有効データ長 2 + 取得データバイト数 [1] サービスモード 要求されたサービスモード + 0x40 [2] PID 要求されたPID [3] - [7] 取得データ 要求されたデータ本体 ★ 重要 送信:モジュール ← マイコン 受信:モジュール → マイコン
  12. どのようなデータが取得できるか? しくみ ② プログラミング バイト 名称 説明 [0] 有効データ長 0x02

    ※モード + PIDの2バイト固定 [1] サービスモード 0x01:「取得モード」など [2] PID 0x0D:「車速」など [3] - [7] 未使用 ゼロ埋め バイト 名称 説明 [0] 有効データ長 2 + 取得データバイト数 [1] サービスモード 要求されたサービスモード + 0x40 [2] PID 要求されたPID [3] - [7] 取得データ 「車速」なら 0x3C(60km/h)など バイト モード 取得データ のバイト数 0x0C エンジン回転数 2 0x0D 車速 1 0x33 大気圧 1 0x42 バッテリー電圧 2 0x46 外気温 1 車両データ取得モードの主要なPID バイト モード 0x01 車両データ取得 ★ 今回はこれを利用 0x03 故障診断コード(DTC) ※主に車検で参照 0x09 車両情報 主要なサービスモード ※ PIDは約90種類(対応状況は車種による) 送信:モジュール ← マイコン 受信:モジュール → マイコン
  13. どのようなデータが取得できるか? (例)時速60kmの車速の取得 しくみ ② プログラミング TX RX TX RX OBD-II

    CAN-BUS DEV KIT | Longan Docs, https://www.switch-science.com/search?q=OBD+II ① 欲しいデータの指示( 0x01:取得、0x0D:車速) ② データの送信( 0x3C:10進数で60 [km/h]) マイコン側 モジュール側 00 00 07 DF 00 00 02 01 0D 00 00 00 00 00 00 00 07 E8 03 41 0D 3C 00 00 00 00
  14. 実装:  ① CAN フレームの送受信:送信14バイト、受信12バイトをビット演算で表現  ② PIDごとのデータ取得メソッド:命令の送信 → 結果の受信 → データの取出

     ③ メインループ:各データを取得して出力 しくみ ② プログラミング (例)エンジン回転数・車速・外気温を CSVで書き出す
  15. ・ 走行時間 :2026-02-20 (金) 16:00 - 16:30 (30分) ・ 走行ルート:松江→出雲、国道431沿い 約20km

    ・ 計測データ:車速、エンジン回転数 デモ 会場 出雲空港 松 江 城
  16. 謝辞 SmT対応などへのアドバイス:  松江工業高等専門学校         杉山 耕一朗 教授  しまねソフト研究開発センター( ITOC ) 東 裕人

    様 きっかけをくださった方:  iberianpig (@nukumaro22) 様  Misaki Shioi (@coe401_) 様 業務の調整・撮影協力など:  Zipseven (@zipseven) 様