<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MPU6050 on きょうのかんぱぱ</title><link>https://kanpapa.com/tags/mpu6050.html</link><description>Recent content in MPU6050 on きょうのかんぱぱ</description><generator>Hugo -- gohugo.io</generator><language>ja</language><copyright>kanpapa.com</copyright><lastBuildDate>Sat, 19 Sep 2026 09:43:15 +0900</lastBuildDate><atom:link href="https://kanpapa.com/tags/mpu6050/index.xml" rel="self" type="application/rss+xml"/><item><title>Arduino UNO Qでモーションセンサーを使ってみた</title><link>https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui.html</link><pubDate>Sat, 19 Sep 2026 09:43:15 +0900</pubDate><guid>https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui.html</guid><description>&lt;img src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/arduino-uno-q-mpu6050.jpg" alt="Featured image of post Arduino UNO Qでモーションセンサーを使ってみた" /&gt;&lt;h2 id="はじめに"&gt;はじめに&#10;&lt;/h2&gt;&lt;p&gt;前回、&lt;a class="link" href="https://kanpapa.com/2026/09/arduino-uno-q-blink-led-webui.html" &gt;Arduino App LabのBrick&lt;/a&gt;を使ってLEDの点灯状態をブラウザにリアルタイム表示する実験を行いました。&lt;br&gt;&#10;今回は手持ちの6軸慣性センサー &lt;strong&gt;MPU6050（GY-521モジュール）&lt;/strong&gt; をUNO Qに接続し、姿勢角をWebUI上にリアルタイム表示することに挑戦してみます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="今回接続するMPU6050(GY-521モジュール)" class="gallery-image" data-flex-basis="318px" data-flex-grow="132" height="602" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/mpu6050-gy-521-module.jpg" width="800"&gt;&lt;/p&gt;&#10;&lt;p&gt;全体の処理分担と構成方針は以下のようにシンプルにしました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;MCU側（sketch）&lt;/strong&gt;：MPU6050から生データを読み取り、姿勢角（roll / pitch / yaw）まで計算する&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Python側（Linux側）&lt;/strong&gt;：Bridge経由でその計算結果を受け取り、WebUI（Socket.IO）へ配信する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;100Hz程度の等間隔サンプリングが必須となる積分処理を、Linux側のスケジューラによる揺れから切り離したかったのが主な理由です。&lt;/p&gt;&#10;&lt;h2 id="ハードウェア構成"&gt;ハードウェア構成&#10;&lt;/h2&gt;&lt;p&gt;GY-521モジュール（MPU6050搭載）をUNO Qに接続します。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;MPU6050&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;UNO Q&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;備考&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VCC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3V3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;UNO QのGPIOは5Vトレラントではないため3.3Vを供給&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GND&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GND&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SDA&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A4 (SDA)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;※実はD20が正解（詳細は後述）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SCL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A5 (SCL)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;※実はD21が正解（詳細は後述）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AD0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GND または未接続&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;未接続でも内部プルダウンによりI2Cアドレスは &lt;code&gt;0x68&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;MPU6050の設定パラメータは、DLPF 44Hz、±250dps、±2g といった標準的な値にしています。加速度センサから算出した絶対角と、ジャイロセンサの積分値を相補フィルタ（α=0.98）でブレンドして roll / pitch を求めました。なお、yawに関しては地磁気センサがないためジャイロ積分のみ（ドリフトを含む相対値）としています。&lt;/p&gt;&#10;&lt;h2 id="mpu6050のスケッチライブラリの追加"&gt;MPU6050のスケッチライブラリの追加&#10;&lt;/h2&gt;&lt;p&gt;スケッチを書く前にArduinoのMPU6050のライブラリをインストールします。すでに有名なセンサーであれば便利なライブラリが揃っており、Arduino App Labでも利用できます。&lt;/p&gt;&#10;&lt;p&gt;Arduino App LabのAdd Sketch Libraryのアイコンをクリックするとライブラリのリストが表示されます。今回は&lt;code&gt;Adafruit MPU6050&lt;/code&gt;を使用しました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Sketch Librariesの画面" class="gallery-image" data-flex-basis="282px" data-flex-grow="117" height="555" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/add-arduino-mpu6050-library.png" width="654"&gt;&lt;/p&gt;&#10;&lt;p&gt;ライブラリが追加されると&lt;code&gt;Sketch Libraries&lt;/code&gt;に表示されます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Sketch Librariesの画面" class="gallery-image" data-flex-basis="244px" data-flex-grow="101" height="257" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/sketch-libraries-mpu6050.png" width="262"&gt;&lt;/p&gt;&#10;&lt;h2 id="i2cが繋がらない"&gt;I2Cが繋がらない&#10;&lt;/h2&gt;&lt;p&gt;配線を済ませてsketchを書き込み、生値を読んでみたところLOGでは加速度もジャイロもすべて0しか返ってきていません。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[4:57:08 PM] WHO_AM_I=0xFF acc=(0.0, 0.0, 0.0) gyr=(0.0, 0.0, 0.0)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[4:57:06 PM] WHO_AM_I=0xFF acc=(0.0, 0.0, 0.0) gyr=(0.0, 0.0, 0.0)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[4:57:03 PM] WHO_AM_I=0xFF acc=(0.0, 0.0, 0.0) gyr=(0.0, 0.0, 0.0)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここから原因究明のための切り分け作業を行いました。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;GY-521モジュールの電源LEDは点灯している → 電源供給は正常&lt;/li&gt;&#10;&lt;li&gt;テスターによるI2Cラインの導通確認 → 配線・接触自体には問題なし&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://docs.arduino.cc/resources/pinouts/ABX00162-full-pinout.pdf" target="_blank" rel="noopener"&#10; &gt;Uno Qのピンアウト&lt;/a&gt;を見直したところ、D20/D21に別のI2Cポート(I2C2)の記載があったため、配線をD20/D21コネクタ側へ差し替えたところ、無事にセンサーの値が返ってきました。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[5:01:16 PM] WHO_AM_I=0x68 acc=(0.213, -0.409, 9.977) gyr=(-2.908, 0.802, -0.191)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[5:01:10 PM] WHO_AM_I=0x68 acc=(0.186, -0.427, 9.972) gyr=(-3.0, 0.779, -0.145)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[5:01:05 PM] キャリブレーション完了 (bias gx=-2.78 gy=0.748 gz=-0.17 deg/s)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[5:01:04 PM] キャリブレーション開始… 基板を静止させてください&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[5:01:01 PM] 接続しました。UNO Q を静止させてからキャリブレーションしてください。&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;UNO QではA4/A5(I2C3)とD20/D21(I2C2)とQwiic(I2C4)はそれぞれ独立したI2Cインターフェースです。I2Cが認識されないときは、従来のArduino感覚で&lt;code&gt;A4&lt;/code&gt;/&lt;code&gt;A5&lt;/code&gt;を使うのではなく、もう一つの&lt;code&gt;SDA&lt;/code&gt;/&lt;code&gt;SCL&lt;/code&gt;（数字の付いていないピン）に接続して確認してみてください。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img alt="I2Cで通信できるようになったArduino Uno QとMPU6050" class="gallery-image" data-flex-basis="318px" data-flex-grow="132" height="602" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/arduino-uno-q-mpu6050.jpg" width="800"&gt;&lt;/p&gt;&#10;&lt;h2 id="bridge-apiの設計"&gt;Bridge APIの設計&#10;&lt;/h2&gt;&lt;p&gt;MCUとPython（Linux）間の通信は、メソッド名やデータ型を厳密に固定して設計しました。ここが1文字でも異なると、例外エラーも出ずに無言で通信が失敗してしまうため注意が必要です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;MCU → Python（push）&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;メソッド名&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;引数&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;説明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;imu_data&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;roll, pitch, yaw, temp (float×4)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20Hz周期で姿勢角と温度をpush&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;Python → MCU（call）&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;メソッド名&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;引数&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;戻り値&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;imu_calibrate&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;samples: int&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON文字列でバイアス値を返却&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;imu_reset_yaw&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dummy: int&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON文字列 &lt;code&gt;{&amp;quot;ok&amp;quot;:true}&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;imu_read_raw&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dummy: int&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON文字列で生値を返却&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;戻り値をJSON文字列にまとめているのは、App LabのBridge内部で使われているmsgpack-RPCの仕様上、戻り値として単一の値しか返せない制約があるためです。&lt;/p&gt;&#10;&lt;h2 id="webui表示"&gt;WebUI表示&#10;&lt;/h2&gt;&lt;p&gt;WebUI-HTML Brickを使用し、Socket.IO経由で10Hz程度に間引いてブラウザへbroadcast配信しました。画面上にroll/pitch/yawの数値をバー表示するだけでなく、渡すデータがすべて明確な数値型や真偽値になるよう徹底しています（前回のBlink実験で「文字列と真偽値の型不一致」にハマった反省を活かしました）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="完成したWebUI" class="gallery-image" data-flex-basis="197px" data-flex-grow="82" height="1030" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2026/09/arduino-uno-q-mpu6050-webui/arduino-uno-q-mpu6050-imu-monitor.png" width="846"&gt;&lt;/p&gt;&#10;&lt;h2 id="cssだけで3d表示"&gt;CSSだけで3D表示&#10;&lt;/h2&gt;&lt;p&gt;Three.jsなどのリッチな外部ライブラリは使わず、CSSの &lt;code&gt;perspective&lt;/code&gt; と &lt;code&gt;rotateX/Y/Z&lt;/code&gt; だけで「板が傾く」簡易3D表示を実装してみました。&lt;/p&gt;&#10;&lt;p&gt;CSS部分は以下のようになります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;scene3d&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;perspective&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;board3d&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;transform-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;preserve-3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;transform&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="kt"&gt;s&lt;/span&gt; &lt;span class="kc"&gt;linear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;JS部分は以下のようになります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;board&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sb"&gt;`rotateZ(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roll&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;deg) rotateX(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pitch&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;deg) rotateY(&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaw&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;deg)`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これだけのコードですが、MPU6050モジュールを手で傾けると、WebUI画面内の板が連動してリアルタイムに同じ方向へ傾いてくれます。CSSの3Dトランスフォームだけでここまで手軽に視覚化できるのは、嬉しい発見でした。&lt;/p&gt;&#10;&lt;div class="video-wrapper"&gt;&#10; &lt;iframe loading="lazy" &#10; src="https://www.youtube.com/embed/_hpNdtfZpAQ" &#10; allowfullscreen &#10; title="YouTube Video"&#10; &gt;&#10; &lt;/iframe&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;MPU6050（GY-521）自体のI2C制御や相補フィルタ計算は定番の手法で問題なく動作し、Arduino IDEでおなじみのライブラリもスケッチで利用できました。&lt;/li&gt;&#10;&lt;li&gt;今回最大のハードルは、UNO QのI2Cピン配置が従来のArduinoシールド配置（A4/A5）とは異なっていたことでした。&lt;/li&gt;&#10;&lt;li&gt;Bridge経由でPython側にデバック情報を中継し、WebUIに表示することで、デバッグをスムーズに行うことができました。&lt;/li&gt;&#10;&lt;li&gt;Bridge APIを定義する際は、メソッド名と型をあらかじめ仕様書として固めておくことで手戻りを防げます。&lt;/li&gt;&#10;&lt;li&gt;CSSの3Dトランスフォームで、センサデータの表示を立体的に表現できました。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今回のスケッチおよびPythonスクリプト一式は、&lt;a class="link" href="https://github.com/kanpapa/mpu6050-monitor" target="_blank" rel="noopener"&#10; &gt;GitHubリポジトリ&lt;/a&gt; に公開しています。&lt;/p&gt;&#10;</description></item></channel></rss>