<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>計測 | 即戦力モノづくり!エンジニアへの道標</title>
	<atom:link href="https://depfields.com/tag/measurement/feed/" rel="self" type="application/rss+xml" />
	<link>https://depfields.com</link>
	<description>組み込み（マイコン）スキルを楽しんで学びながら身につけて短期間で効率よく自由自在に扱えるようになりたいと思いませんか？</description>
	<lastBuildDate>Mon, 01 May 2023 23:39:22 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3</generator>

<image>
	<url>https://depfields.com/wp-content/uploads/2020/07/cropped-favicon-1-32x32.png</url>
	<title>計測 | 即戦力モノづくり!エンジニアへの道標</title>
	<link>https://depfields.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</title>
		<link>https://depfields.com/accel-gyro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accel-gyro</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sun, 11 Jul 2021 06:59:24 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[モーションコントロール]]></category>
		<category><![CDATA[フィードバック制御]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=9649</guid>

					<description><![CDATA[<p>加速度センサ・ジャイロセンサ（MPU-6050)を搭載したセンサボードGY-521は 3軸加速度、 3軸ジャイロデータをインターフェースI2Cで簡単に取得でき、情報量も多く安価でお勧めなボードです。 ただし、ネット情報で [&#8230;]</p>
<p>The post <a href="https://depfields.com/accel-gyro/">加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img fetchpriority="high" width="620" height="552" src="https://depfields.com/wp-content/uploads/2021/07/gyro-scope.png" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2021/07/gyro-scope.png 620w, https://depfields.com/wp-content/uploads/2021/07/gyro-scope-300x267.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></div>
<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-sm--margin-top"></div></div>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">加速度センサ・ジャイロセンサ（MPU-6050)を搭載したセンサボードGY-521は 3軸加速度、 3軸ジャイロデータをインターフェースI<sup>2</sup>Cで簡単に取得でき、情報量も多く安価でお勧めなボードです。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">ただし、ネット情報ではほとんどがArduino向けのもので、プログラミングは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">既存のライブラリ関数を使用して誰でも簡単に活用できる</span></strong>ようになっていて仕様について理解しなくても動作させることができる反面、なんとなく使うことができてしまいますのでスキルは身につくことにはなりません。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">そこで、今回の記事では加速度センサ・ジャイロセンサ（MPU-6050)の仕様書から要所を把握して、I<sup>2</sup>C通信の基本を押さえながら使いこなせるまでを解説していきます。 </p>







<h2 class="wp-block-heading">加速度・ジャイロセンサボード</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>X,Y,Z3軸傾斜角をはじめから求めようとするとかなり複雑のため、この記事では1軸分(Y軸)まわりの傾斜角を加速度センサおよびジャイロセンサから算出する方法を解説します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050では下図の向きにX、Y、Z軸を設定しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis.jpg" alt="" class="wp-image-9654" width="307" height="280" srcset="https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis.jpg 307w, https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis-300x274.jpg 300w" sizes="(max-width: 307px) 100vw, 307px" /><figcaption>MPU-6050</figcaption></figure>



<h3 class="wp-block-heading">加速度データ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサでY軸まわりに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">θ<sub>y</sub>傾斜する場合</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Z軸方向およびX軸方向の重力比率より傾斜角θ<sub>y</sub>は逆三角関数を使用すると算出</span></strong>できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><a aria-label="加速度センサアプリ (opens in a new tab)" href="https://depfields.com/accel-apl/" target="_blank" rel="noreferrer noopener"><strong>加速度センサアプリ</strong></a>でも説明しましたが、加速度センサの重力(1G)成分による各軸の値a<sub>x</sub>,a<sub>y</sub>,a<sub>z</sub>は重力に対する抗力の向きとなりますので、下図のようにY軸中心に座標を正方向θ<sub>Y</sub>傾斜したとき、重力Z軸成分(1G<sub>Z</sub>)の抗力<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">a<sub>z</sub>は正値</span></strong>で、X軸成分(1G<sub>X</sub>)の抗力<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">a<sub>x</sub>は負値</span></strong>となります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでは動作による加速度は考えていませんので算出データは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">地上に対して傾斜させて静止した角度(絶対角度)</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/accel_sensor.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/accel_sensor2.png" alt="" class="wp-image-9809" width="283" height="296"/></a><figcaption> 加速度センサと動作角度 </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>算出した絶対角度に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オフセットθ<sub>offset</sub>分</span></strong>を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">差し引くと、任意の角度で基準0°にプリセットできる</span></strong>ので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">基準からの相対角度</span></strong>とすることができます。逆三角関数を使用した場合の角度は単位がradのため、必要に応じて°に変換します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_accel.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_accel.png" alt="" class="wp-image-9812" width="474" height="133"/></a><figcaption> 加速度センサによる角度の算出 </figcaption></figure>



<h3 class="wp-block-heading">ジャイロセンサデータ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>の場合、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">データg<sub>y</sub>はY軸まわりの回転時の角速度</span></strong>のため、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">角度を得るにはプログラム内で積分して算出する必要</span></strong>があります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず得られた<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">16ビットデータをスケールに応じた角速度（°/s）に変換</span></strong>します。それから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オフセットがある場合は予め差し引いて</span></strong>おいてから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">積分して角度を算出</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_gyro.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_gyro.png" alt="" class="wp-image-9707"/></a><figcaption>ジャイロセンサによる角度算出</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>プログラム内での積分は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">離散化した近似</span></strong>です。最もシンプルな積分は下図のアルゴリズムです。サンプリングタイムTsが十分小さい場合はこれでも問題はありません。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png"><img decoding="async" width="467" height="258" src="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png" alt="" class="wp-image-9689" srcset="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png 467w, https://depfields.com/wp-content/uploads/2021/07/digital-integral-300x166.png 300w" sizes="(max-width: 467px) 100vw, 467px" /></a></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_gyro2.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_gyro2.png" alt="" class="wp-image-9793" width="488" height="197"/></a><figcaption> 角速度から角度への算出 </figcaption></figure>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>ジャイロセンサの場合、角度は角速度を積分して算出されるために、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">静止した初期状態でオフセットが存在していて０°/sでなければ誤差が大きめに累積</span></strong>してしまいます。そのため、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">オフセットを予め差し引いておくと、角度のドリフトは改善されます</span></strong>。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<h2 class="wp-block-heading">MPU-6050とNucleoボードとの結線図</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050をNucleo-F103RBに接続して使用する場合の配線例を下図に示します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>センサボードGY-521の電源にはLDOレギュレータを内蔵していますので5Vを接続します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ出力インターフェースはI<sup>2</sup>C通信のため、STM32側ではI<sup>2</sup>C2に接続します。I<sup>2</sup>CのI/Oはオープンドレインに設定しますので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通常ではプルアップ抵抗が必要</span></strong>ですが、センサボードGY-521には予め含まれています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/wiring.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/wiring.png" alt="" class="wp-image-9890" width="580" height="443"/></a><figcaption> 配線図 </figcaption></figure>



<h2 class="wp-block-heading">プログラミングによるデータ算出</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず、はじめの関門はI<sup>2</sup>C通信の設定およびデータ読み書きを正常に実現することです。データを任意に安定して読み込めることができればあとはこれまでに解説した方法でデータを演算して角度を算出するだけです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信デバイスを使用するために、I2C2_Configuration()でまず初期設定をします。これは他のI<sup>2</sup>Cデバイスと同様です。詳細は<a href="https://depfields.com/i2c/" target="_blank" aria-label="シリアル通信I2C【STM32のI2C詳細】 (opens in a new tab)" rel="noreferrer noopener"><strong>シリアル通信I2C【STM32のI2C詳細】</strong></a>を参照してください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C2の初期設定のあとはMPU-6050の設定をします。設定はレジスタに値を書き込みます。すべてデフォルトで使用する場合は必要ありませんが、デバイスに内蔵のデジタルフィルタを使用したり、データのフルスケールを変更設定する場合には必要です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/main.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/main.png" alt="" class="wp-image-9726" width="591" height="324" srcset="https://depfields.com/wp-content/uploads/2021/07/main.png 663w, https://depfields.com/wp-content/uploads/2021/07/main-300x165.png 300w" sizes="(max-width: 591px) 100vw, 591px" /></a><figcaption>デバイス初期設定</figcaption></figure>



<h3 class="wp-block-heading">I<sup>2</sup>C設定とデータ書き込み・読み込み</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信では1バイト単位でデータを読み書きするのですが、データ読み込みでは個々のバイトデータを単独で読み込むのではなく、一度に複数バイトを読み込む方が効率的です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>そうなると読み込みデータアドレスは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサのX軸のデータアドレス3Bから14バイト分を読み込んでデータを配列に格納するだけでよい</span></strong>のです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>話は前後しますが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">所望のレジスタに1バイトデータを書き込むための関数は自作</span></strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ポイント</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">スレーブアドレス</span></strong>で、I<sup>2</sup>Cのアドレス送信関数I2C_Send7bitAddress()では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アドレスは1バイト枠で左詰め7ビット分</span></strong>です。これに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最下位ビットに送信か受信フラグを付加</span></strong>した１バイトデータとして扱います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ライブラリ関数の中身を確認して動作をたどると理解できると思います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>例えば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I<sup>2</sup>Cデバイスのスレーブアドレスが0x68の場合は1ビット分左シフトした0xD0を送信関数I2C_Send7bitAddress()に与えるアドレス</span></strong>とします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png" alt="" class="wp-image-9728" width="593" height="252" srcset="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png 634w, https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte-300x127.png 300w" sizes="(max-width: 593px) 100vw, 593px" /></a><figcaption>I2C書き込み関数</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ読み込みは書き込みの延長のようなものですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">複数バイトデータも連続して読み込むことができます</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これも<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">自作の複数バイト読み込み関数</span></strong>ですが、データが複数ある場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最後のバイトデータ受信直前でACKを返さないNACKとすることがポイント</span></strong>です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png" alt="" class="wp-image-9727" width="592" height="485" srcset="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png 631w, https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte-300x246.png 300w" sizes="(max-width: 592px) 100vw, 592px" /></a><figcaption>I2C複数バイト読み込み関数</figcaption></figure>



<h3 class="wp-block-heading">MPU-6050の初期設定</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> MPU-6050 は初期設定としてレジスタへ<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサへのクロック源を設定</span></strong>したり、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ、ジャイロセンサのフルスケール</span></strong>や出力への<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フィルタを設定</span></strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサおよびジャイロセンサにより角度を取得するだけならばデフォルト設定でも使えますが取扱うレジスタはせいぜい下記の程度です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/program1.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/program1.png" alt="" class="wp-image-9749" width="443" height="439" srcset="https://depfields.com/wp-content/uploads/2021/07/program1.png 392w, https://depfields.com/wp-content/uploads/2021/07/program1-300x298.png 300w, https://depfields.com/wp-content/uploads/2021/07/program1-150x150.png 150w" sizes="(max-width: 443px) 100vw, 443px" /></a><figcaption>レジスタアドレス</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">　クロック源の指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>クロック源を指定することで MPU-6050は機能始めます。クロック源は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス6Bの下位3ビット分に設定</span></strong>します。電源投入時のデフォルトでは内部発振8MHzとなっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_6b.png" alt="" class="wp-image-9677"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="374" height="185" src="https://depfields.com/wp-content/uploads/2021/07/clk_config.png" alt="" class="wp-image-9672" srcset="https://depfields.com/wp-content/uploads/2021/07/clk_config.png 374w, https://depfields.com/wp-content/uploads/2021/07/clk_config-300x148.png 300w" sizes="(max-width: 374px) 100vw, 374px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">　フィルタの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050には出力にノイズ対策の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ローパスフィルタを設定</span></strong>することができます。必要に応じて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス1Aの下位3ビットに0から6までの値を設定</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1a.png" alt="" class="wp-image-9674"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="515" height="222" src="https://depfields.com/wp-content/uploads/2021/07/lpf_config.png" alt="" class="wp-image-9673" srcset="https://depfields.com/wp-content/uploads/2021/07/lpf_config.png 515w, https://depfields.com/wp-content/uploads/2021/07/lpf_config-300x129.png 300w" sizes="(max-width: 515px) 100vw, 515px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">　ジャイロセンサスケールの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス1B</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサフルスケールを0から3までの値で設定</span></strong>します。デフォルトでは±250°/sです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1b.png" alt="" class="wp-image-9675"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="219" height="101" src="https://depfields.com/wp-content/uploads/2021/07/gyro_config.png" alt="" class="wp-image-9669"/></figure>



<p><span style="background-color: #003300; color: #ffffff;">　加速度センサスケールの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>レジスタアドレス1C</strong></span>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサフルスケールを0から3までの値で設定</span></strong>します。デフォルトでは±2gです。 </p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1c.png" alt="" class="wp-image-9676"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="222" height="115" src="https://depfields.com/wp-content/uploads/2021/07/accel_config.png" alt="" class="wp-image-9668"/></figure>



<p><span style="background-color: #003300; color: #ffffff;">　加速度センサデータの読み込み　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサの各軸データは16ビットですが、データ格納アドレスは8ビットですので上位8ビット、下位8ビットで構成されます。X軸、Y軸、Z軸のデータは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス3BよりX軸上位、下位...と順に格納</span></strong>されます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データについては例えばフルスケールが±2gの場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">+2g時に32768</span></strong>となるので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1g当たり16384</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="667" height="140" src="https://depfields.com/wp-content/uploads/2021/07/register_accel.png" alt="" class="wp-image-9678" srcset="https://depfields.com/wp-content/uploads/2021/07/register_accel.png 667w, https://depfields.com/wp-content/uploads/2021/07/register_accel-300x63.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="422" height="119" src="https://depfields.com/wp-content/uploads/2021/07/accel_scale.png" alt="" class="wp-image-9670" srcset="https://depfields.com/wp-content/uploads/2021/07/accel_scale.png 422w, https://depfields.com/wp-content/uploads/2021/07/accel_scale-300x85.png 300w" sizes="(max-width: 422px) 100vw, 422px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">ジャイロセンサデータの読み込み　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサの各軸データも加速度センサと同様にX軸、Y軸、Z軸のデータは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス43よりX軸上位、下位...と順に格納</span></strong>されます。 </p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データについては例えばフルスケールが±250°/sの場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">+250°/s 時に32768</span></strong>となるので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1°/s当たり131</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="653" height="139" src="https://depfields.com/wp-content/uploads/2021/07/register_gyro.png" alt="" class="wp-image-9679" srcset="https://depfields.com/wp-content/uploads/2021/07/register_gyro.png 653w, https://depfields.com/wp-content/uploads/2021/07/register_gyro-300x64.png 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="339" height="106" src="https://depfields.com/wp-content/uploads/2021/07/gyro_scale.png" alt="" class="wp-image-9671" srcset="https://depfields.com/wp-content/uploads/2021/07/gyro_scale.png 339w, https://depfields.com/wp-content/uploads/2021/07/gyro_scale-300x94.png 300w" sizes="(max-width: 339px) 100vw, 339px" /></figure>



<h3 class="wp-block-heading">各センサからの角度算出と相補フィルタ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度およびジャイロセンサからのデータが取得できるようになるといよいよそれぞれのデータから角度を算出できるようになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_Read_multibyte()関数による複数バイト読み込みで格納したデータにより加速度およびジャイロセンサ各軸の16ビット値が取得できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>取得できた値により加速度センサによる角度およびジャイロセンサによる角度が算出できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサからの角速度データを積分して角度を算出するためのサンプリングタイムを正確に5msとするために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">RTOSの機能を利用</span></strong>しています。詳細は<a aria-label="FreeRTOSタスク管理の基本 (opens in a new tab)" href="https://depfields.com/task/" target="_blank" rel="noreferrer noopener"><strong>FreeRTOSタスク管理の基本</strong></a>を参照してください。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/program_angle.png"><img decoding="async" width="550" height="748" src="https://depfields.com/wp-content/uploads/2021/07/program_angle.png" alt="" class="wp-image-9878" srcset="https://depfields.com/wp-content/uploads/2021/07/program_angle.png 550w, https://depfields.com/wp-content/uploads/2021/07/program_angle-221x300.png 221w" sizes="(max-width: 550px) 100vw, 550px" /></a><figcaption> 加速度・ジャイロセンサから角度算出 </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサおよびジャイロセンサから単独で算出された角度はそれぞれ一長一短あり安定しません。そこで、両センサの長所である部分をいいとこ取りするための手段に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタ</span></strong>というものを使います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力変化による傾斜角度が得られる</span></strong>ので特に静止状態の場合の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">絶対的な角度変化は信頼性</span></strong>がありますが、情報にノイズが含まれていたり、動作が伴うと重力以外の成分も加わることにもなります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>対して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">回転を検知した角速度が得られる</span></strong>ので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">動作の伴う角度の変化には信頼性</span></strong>がありますが、プログラム内で積分をしているので誤差も同時に累積し<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトを発生</span></strong>してしまうことになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>そこで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタを使用</span></strong>して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ出力にはローパルフィルタ(LPF)</span></strong>により低周波部分だけをとりだし、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ出力にはハイパスフィルタ(HPF)</span></strong>により、ドリフト分をキャンセルすることができます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png" alt="" class="wp-image-9734" width="530" height="83" srcset="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png 530w, https://depfields.com/wp-content/uploads/2021/07/complementary_filter2-300x47.png 300w" sizes="(max-width: 530px) 100vw, 530px" /></a><figcaption>相補フィルタによる角度算出</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタの式だけをみると、至ってシンプルなのですが、奥が深いので別途、<strong><a href="https://depfields.com/complementary-filter/" target="_blank" aria-label="相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】 (opens in a new tab)" rel="noreferrer noopener">相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】</a></strong>で詳細を解説しています。</p>
</div></div></div>



<h2 class="wp-block-heading">実測結果</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>下図は加速度センサ、ジャイロセンサおよび相補フィルタを通した出力による角度変化の様子をグラフ化したものです。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">横軸は経過時間(s)、縦軸は角度(°)</span></strong>です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサによる角度は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">細かなノイズが含まれていますが絶対的な角度を示すのでドリフトは発生していません</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサによる角度は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プログラム内で積分したものなのでノイズもなく滑らかですが、累積誤差によるドリフトが発生しています</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタを通した出力では加速度センサによる出力とジャイロセンサによる出力の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">長所のみを引き継いだもの</span></strong>になっていて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">安定して信頼性があります</span></strong>。相補フィルタの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数は2Hzに設定</span></strong>したものです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output.png"><img decoding="async" width="617" height="382" src="https://depfields.com/wp-content/uploads/2021/07/angle_output.png" alt="" class="wp-image-9657" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output.png 617w, https://depfields.com/wp-content/uploads/2021/07/angle_output-300x186.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></a><figcaption> カットオフ周波数：2Hz </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタのカットオフ周波数によりどのような違いがあるのかを確認するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">4Hzと2Hzで比べ</span></strong>てみました。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数を4Hzに設定した場合</span></strong>はジャイロセンサによる<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトの影響はない</span></strong>のですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサの敏感なノイズ成分が多少含まれて</span></strong>います。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ寄りの影響を受けた出力</span></strong>になっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png"><img decoding="async" width="562" height="421" src="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png" alt="" class="wp-image-9659" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png 562w, https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz-300x225.png 300w" sizes="(max-width: 562px) 100vw, 562px" /></a><figcaption>カットオフ周波数：4Hz</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数を2Hzに設定した場合</span></strong>は加速度センサの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ノイズ成分はほぼキャンセルされ</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ寄りの影響を受けた出力</span></strong>になっています。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ出力からドリフト分だけをキャンセルした出力</span></strong>となっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png"><img decoding="async" width="606" height="367" src="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png" alt="" class="wp-image-9658" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png 606w, https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz-300x182.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></a><figcaption> カットオフ周波数：2Hz </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>下の図はカットオフ周波数を2Hzの場合で、少し速い動作をさせてみた出力結果です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">速い動きほどノイズ成分が顕著</span></strong>に現れ、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフト成分によるオフセットが突然大きくなったり</span></strong>でこのままでは使用できません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>対して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタを通した出力</span></strong>ではこのような動作でも遅れは見られず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">しっかりと追従</span></strong>し、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトの影響もなくほぼ理想の状態</span></strong>となっていて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フィルタ効果が確認</span></strong>できます。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png"><img decoding="async" width="575" height="408" src="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png" alt="" class="wp-image-9660" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png 575w, https://depfields.com/wp-content/uploads/2021/07/angle_output2-300x213.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></a><figcaption>カットオフ周波数2Hzにおける少し速い動作</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer"><div class="vk_spacer-display-pc" style="height:20px"></div><div class="vk_spacer-display-tablet" style="height:10px"></div><div class="vk_spacer-display-mobile" style="height:5px"></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>廉価で人気のあるセンサボードGY-521(MPU-6050)をSTM32Nucleoボードに接続して傾斜角を算出する過程を解説しました。たかだか角度算出のためにと思われるかもしれませんが、ここまで踏み込んで動作を確認すると<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">あいまいな部分が一切なくなる</span></strong>ために、得られた知識等は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">新しいスキルとして自信をもって他のアプリケーションにも適用できる</span></strong>ようになります。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>STM32Nucleoで角度および角速度を取得できる手段を獲得できたところで、ようやく倒立振子を実現する道具が揃いました。現代制御理論による倒立振子のコントロールに関しては<strong><a href="https://depfields.com/controltheory-modern/" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)">マイコンで実現するフィードバック制御のための基礎知識【番外編】</a></strong>で解説しましたが、近日中に実機での実現に挑戦してみたいと思います。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/accel-gyro/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/8110ed110cfd7bc43cc28ed559ae0b54245c8c842dbcfdb782064992266be621.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Posture detection by accelerometer and gyro sensor [STM32Nucleo] | Most Power...</div></div><div class="lkc-url">https://en.depfields.com/accel-gyro/</div><div class="lkc-excerpt">The GY-521 Sensor Board with Accelerometer and Gyro Sensor (MPU-6050) can easily acquire 3-axis acceleration and 3-axis gyro data via I2C interface, and is recommended for its high information content and low cost.However, most of the</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/accel-gyro/">加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】</title>
		<link>https://depfields.com/complementary-filter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=complementary-filter</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Mon, 12 Jul 2021 05:00:37 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[モーションコントロール]]></category>
		<category><![CDATA[フィードバック制御]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=9582</guid>

					<description><![CDATA[<p>加速度・ジャイロセンサを組み合わせて使うのに相補フィルタがよく用いられますがその詳細に関する解説はあまり見かけません。どのような過程で相補フィルタの式が導かれ、式が何を意味しているかは知りたいところです。比較的単純な式の [&#8230;]</p>
<p>The post <a href="https://depfields.com/complementary-filter/">相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="616" height="291" src="https://depfields.com/wp-content/uploads/2021/07/complementary_filter.png" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2021/07/complementary_filter.png 616w, https://depfields.com/wp-content/uploads/2021/07/complementary_filter-300x142.png 300w" sizes="(max-width: 616px) 100vw, 616px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><a href="https://depfields.com/accel-gyro/" target="_blank" rel="noreferrer noopener" title="加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】">加速度・ジャイロセンサ</a>を組み合わせて使う</span></strong>のに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタがよく用いられます</span></strong>がその詳細に関する解説はあまり見かけません。どのような過程で相補フィルタの式が導かれ、式が何を意味しているかは知りたいところです。比較的単純な式の中には<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">深い意味があるところを算出過程で解説</span></strong>していきます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>と<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>は物体にかかる動きや回転の情報を検出するデバイスですが、特に姿勢位置を得るにはそれぞれ短所、長所があるため安定した情報とするのに一工夫する必要があります。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサは動きを検出するセンサ</span></strong>で姿勢位置を得るには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">x,y,z3軸にかかる重力</span></strong>からそれぞれ<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">軸の傾斜角を算出</span></strong>できます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサは それぞれx,y,z3軸の角速度を検出</span></strong>できますのでプログラム内で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">積分させると動作角度を算出</span></strong>できます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">これだけだと物体の姿勢位置を得るのにそれぞれ単独で使用できそうですが、加速度センサは動きがある場合には<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力以外の成分も加わる</span></strong>のに加え、出力が敏感で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">細かなノイズが含まれ</span></strong>ています。ジャイロセンサでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">検出した角速度を積分</span></strong>するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">誤差成分も累積してドリフト（オフセット）</span></strong>が生じてしまいます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">加速度センサ、ジャイロセンサの短所を克服して長所のいいとこ取りだけすると安定した姿勢が得られるのですが、その方法の一つに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタ</span></strong>というものがあります。</p>







<h2 class="wp-block-heading">相補フィルタの構成</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタ</span></strong>をブロック線図で表すと下図のようになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ノイズ成分を除去した低周波領域の情報</span></strong>がほしいために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><a href="https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%91%E3%82%B9%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF" target="_blank" rel="noreferrer noopener">ローパスフィルタ(LPF)</a></span></strong>を通します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">累積するドリフト成分を除去</span></strong>するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><a href="https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%82%B9%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF" target="_blank" rel="noreferrer noopener">ハイパスフィルタ（HPF)</a></span></strong>を通すと<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">情報のドリフトによるオフセット分をキャンセル</span></strong>できます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/complementary-filter.png" alt="" class="wp-image-9586" width="366" height="308" srcset="https://depfields.com/wp-content/uploads/2021/07/complementary-filter.png 366w, https://depfields.com/wp-content/uploads/2021/07/complementary-filter-300x252.png 300w" sizes="(max-width: 366px) 100vw, 366px" /><figcaption class="wp-element-caption">相補フィルタ構成図</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサあるいはジャイロセンサ単独にそれぞれフィルタを通すだけでなく、組み合わせることでいわゆる互いにいいとこ取りしあうところから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタ</span></strong>と呼ばれます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタに使用するLPFとHPFには条件があり、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">任意の周波数でフィルタゲインの和が1</span></strong>であることです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/filter-condition.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/filter-condition.png" alt="" class="wp-image-9640" width="566" height="274"/></a><figcaption class="wp-element-caption">相補フィルタ構成条件</figcaption></figure>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>わざわざ相補フィルタを使わなくても、単独の加速度センサにはローパスフィルタ(LPF)を、あるいは単独のジャイロセンサにはハイパスフィルタ(HPF)を通すだけでいいようにも思われますが、これらの場合には<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">フィルタによる位相遅れが生じたり</span></strong>、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">入出力間で信号情報ゲインが変化</span></strong>してしまいます。２つのセンサの長所を利用することで理想の出力が得られるのがこの<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">相補フィルタの利点</span></strong>です。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<h2 class="wp-block-heading">相補フィルタの周波数特性</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタのLPFとHPF</span></strong>で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数を2Hz</span></strong>とした場合の特性を周波数領域のボード線図で表すと下図のようになります。縦軸はゲインを表していて単位はdB(デシベル）ですが、この条件では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">LPFとHPFのゲインは足すと全領域で1</span></strong>となります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">LPFはカットオフ周波数fc以上の高周波成分を除去</span></strong>しますので加速度センサからの情報は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">低周波部分のみが残ります</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">HPFはカットオフ周波数fc以下の低周波成分を除去</span></strong>しますのでジャイロセンサからの情報は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ゆっくりしたドリフトによるオフセット分が除去されます</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数fc</span></strong>が2Hzとした場合はほぼジャイロセンサによる情報が優勢になります。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最終的には出力を見ながらfcを微調整</span></strong>をすればよいと思います。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="617" height="340" src="https://depfields.com/wp-content/uploads/2021/07/bode-plot-1.png" alt="" class="wp-image-9857" srcset="https://depfields.com/wp-content/uploads/2021/07/bode-plot-1.png 617w, https://depfields.com/wp-content/uploads/2021/07/bode-plot-1-300x165.png 300w" sizes="(max-width: 617px) 100vw, 617px" /><figcaption class="wp-element-caption"> 相補フィルタLPF/HPFボード線図 </figcaption></figure>



<h2 class="wp-block-heading">相補フィルタの算出過程</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタは結果の式だけ知っていれば使用はできるのですが、式の意味を知らなければなんとなくの当てずっぽうで係数等のパラメータ値を決めることになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタを使用するのであればやはりある程度<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">式の内容は理解しておきたい</span></strong>ものです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>以下の算出過程には難解な理論は使用していないのですが理解するには最低限の古典制御理論の基礎知識が必要ですので、当サイトの<strong>フィードバック制御のための基礎知識<a aria-label="【準備編】 (opens in a new tab)" href="https://depfields.com/controltheory-preparation/" target="_blank" rel="noreferrer noopener">【準備編】</a><a aria-label="【解析編】 (opens in a new tab)" href="https://depfields.com/controltheory-analysis/" target="_blank" rel="noreferrer noopener">【解析編】</a></strong>を参照してください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1次遅れフィルタ</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ラプラス変換などの概念</span></strong>がわかっていれば理解できます。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/step.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/step.png" alt="" class="wp-image-9645"/></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ようやくよく目にする相補フィルタの式を導きました。これは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">１次フィルタの場合</span></strong>です。これで重み係数Kの意味もわかると思います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">係数Kはカットオフ周波数fcとサンプリングタイムT<sub>S</sub> で決まる</span></strong>ものです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/step5.png" alt="" class="wp-image-9595" width="389" height="154" srcset="https://depfields.com/wp-content/uploads/2021/07/step5.png 389w, https://depfields.com/wp-content/uploads/2021/07/step5-300x119.png 300w" sizes="(max-width: 389px) 100vw, 389px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>一般的に出回っている相補フィルタ情報の中には加速度センサとジャイロセンサの出力に係数Kを重みとしてかけた解釈のものもありますが、これでは意味をなしません。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="494" height="101" src="https://depfields.com/wp-content/uploads/2021/07/step6.png" alt="" class="wp-image-9597" srcset="https://depfields.com/wp-content/uploads/2021/07/step6.png 494w, https://depfields.com/wp-content/uploads/2021/07/step6-300x61.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></figure>



<div style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>結果だけをみると、相補フィルタの式は比較的シンプルな形になっているのですが、実はこれだけの意味が含まれていることが理解できると思います。<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">式の内容をブラックボックスでなく理解できていると安心して使用できる</span></strong>ようになると思います。相補フィルタの発想は天才的で感動すらあります。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/complementary-filter/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/d42fb3d61698344d4fa206b670608c618a3edea1e6e0a241780ee9e6a8543e09.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Let&#039;s clarify the mechanism of the complementary filter [acceleration/gy...</div></div><div class="lkc-url">https://en.depfields.com/complementary-filter/</div><div class="lkc-excerpt">Complementary filters are often used to combine accelerometers and gyroscopes, but there are few explanations on the details of these filters. It is interesting to know how the complementary filter equation is derived and what the equation</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/complementary-filter/">相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>STM32マイコンのシリアル通信でセンサデータをグラフ化・収集してみる</title>
		<link>https://depfields.com/datalogger/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=datalogger</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sat, 29 Aug 2020 05:55:52 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[USART]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=7222</guid>

					<description><![CDATA[<p>アプリケーションを作成しているとマイコンに取り込んだセンサデータなどのデジタルデータをオシロスコープのようにリアルタイムでグラフ化しながら収集したいことはよくあります。シリアル通信を使ってPCモニターにデータを表示させな [&#8230;]</p>
<p>The post <a href="https://depfields.com/datalogger/">STM32マイコンのシリアル通信でセンサデータをグラフ化・収集してみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="480" src="https://depfields.com/wp-content/uploads/2020/11/data_logger.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/11/data_logger.jpg 640w, https://depfields.com/wp-content/uploads/2020/11/data_logger-300x225.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">アプリケーションを作成しているとマイコンに取り込んだセンサデータなどのデジタルデータをオシロスコープのようにリアルタイムでグラフ化しながら収集したいことはよくあります。シリアル通信を使ってPCモニターにデータを表示させながらマイクロソフトExcelに取り込むことができる簡単に扱えるデータロガーを紹介します。</p>







<h2 class="wp-block-heading">データロガーアプリとは</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これまで シリアル通信などでマイコンに取り込んだ<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサデータなどはターミナルアプリを使って、PCなどのモニターに出力して表示</span></strong>してきました。これらのデータはリアルタイムで確認できるのですが、数値の表示ですのでデータ変化の様子はつかみにくいです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/ターミナル.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/ターミナル.jpg" alt="" class="wp-image-7236" width="495" height="193" srcset="https://depfields.com/wp-content/uploads/2020/11/ターミナル.jpg 494w, https://depfields.com/wp-content/uploads/2020/11/ターミナル-300x117.jpg 300w" sizes="(max-width: 495px) 100vw, 495px" /></a><figcaption>ターミナルアプリによるデータのモニター</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>特に、動きのあるもの、例えば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">モータの回転速度や位置など経時変化するデータ</span></strong>は数値だけでなく変化の様子などを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">グラフ表示などで視覚</span></strong>できれば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">開発途中の解析</span></strong>や、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">性能のチェック評価</span></strong>などができるようになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/データロガー.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/データロガー.jpg" alt="" class="wp-image-7237" width="480" height="194" srcset="https://depfields.com/wp-content/uploads/2020/11/データロガー.jpg 479w, https://depfields.com/wp-content/uploads/2020/11/データロガー-300x122.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></a><figcaption>データロガーアプリによる変化の様子をモニター</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>センサなどから 電気信号を取り込んで、計測・収集したデジタルデータをモニター表示したり、記録したりする装置は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">データロガー</span></strong>と呼ばれていて、さまざまなメーカーが製品として提供しています。ここでは簡易的なデータロガーとして、シリアル通信による送信データを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">リアルタイムでグラフ表示</span></strong>させて、同時にマイクロソフト<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Excelファイル(csvフォーマット）に保存</span></strong>できる<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フリーソフトを使う</span></strong>ことにします。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>私自身も、以前はVB(Visual Basic)やC#などでWindowsアプリとしてシリアル通信で受信したデータをグラフ表示したりする<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">特化したものをプログラミングして自作した</span></strong>ものですが、都度特化したもの作成するのも煩わしく、計測目的だけの場合は汎用的なアプリが<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フリーソフトとして利用</span></strong>できればそれを利用しない手はないです。</p>
</div></div></div>



<h2 class="wp-block-heading">おすすめデータロガーフリーアプリ</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>直感的に簡単に操作できるデータロガーアプリを探したところ、 データテクノ社のリアルタイムグラフソフト <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">CPLT</span></strong>（<a href="https://www.datatecno.co.jp/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener"><strong>ダウンロード先ホームページ</strong></a>）がお勧めです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>初期設定として<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通信</span></strong>および、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">縦軸、横軸のスケーリング</span></strong>だけをすれば、すぐに使用できるとてもシンプルで実用的なアプリでフリーで提供いただけることに感謝します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>アプリ <strong>CPLT Version</strong> <strong>xxx</strong> の圧縮ファイルをダウンロードしてから解凍し、実行ファイルをダブルクリックするとアプリは起動します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/CPLT.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/CPLT.jpg" alt="" class="wp-image-7243" width="682" height="491" srcset="https://depfields.com/wp-content/uploads/2020/11/CPLT.jpg 698w, https://depfields.com/wp-content/uploads/2020/11/CPLT-300x216.jpg 300w" sizes="(max-width: 682px) 100vw, 682px" /></a><figcaption>CPLT Ver.1.04 起動画面</figcaption></figure>



<h2 class="wp-block-heading">実際のアプリ活用方法</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> 実際にセンサからデータを取り込んでモニターさせるアプリケーションとして<strong><a href="https://depfields.com/thermometer-apl/">STM32マイコン Nucleoボードを使った温度計</a></strong> を使用し、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">温度</span></strong>および<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>サーミスタ抵抗値</strong></span>をモニターすることにします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg" alt="" class="wp-image-6725" width="497" height="350" srcset="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg 497w, https://depfields.com/wp-content/uploads/2020/09/circuit-300x211.jpg 300w" sizes="(max-width: 497px) 100vw, 497px" /></a><figcaption>温度計アプリの回路</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>回路は上図のとおりで、<strong>設定(S)</strong>でCOMポート はUSBで認識したもの、 通信条件は プログラム内で設定したもの(9800,8bit,パリティなし,ストップビット1)に合わせます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>チャネル数は２とし、１つ目は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">サーミスタ抵抗値</span></strong>で2つ目は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">温度</span></strong>に指定します。各チャネルの属性でそれぞれ名前、単位および目盛りあたりのデータ値（スケール）を指定します。横軸には１目盛りあたりのデータ数を指定します。例えば、1プロットを0.5s間隔で送信している場合は1目盛りあたりのデータ数を10とすると1目盛りが5sに相当します。</p>
</div></div></div>



<h2 class="wp-block-heading">データロガー用プログラム</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>温度計アプリプログラム(temp monitor.c)のシリアル送信部のみデータロガー用に修正します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>複数のチャネルを指定するときの注意点として、複数データは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カンマ区切り</span></strong>でひとまとめしたものを送ります。数値でも文字列でもアプリで判別するようです。C言語標準関数<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">spirntf</span></strong>を使用する場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">stdio.h</span></strong>をインクルードしておいてください。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/文字列連結送信.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/文字列連結送信.jpg" alt="" class="wp-image-7248" width="611" height="392" srcset="https://depfields.com/wp-content/uploads/2020/11/文字列連結送信.jpg 611w, https://depfields.com/wp-content/uploads/2020/11/文字列連結送信-300x192.jpg 300w" sizes="(max-width: 611px) 100vw, 611px" /></a><figcaption>データロガー用送信データ</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これまでのとおり、まず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ターミナルアプリで送信データを確認</span></strong>してみてください。下図のようにカンマ区切りであればデータ順にCH1、CH2...と認識されます。これで準備は整いましたのでさっそくデータロガーアプリでリアルタイムのグラフ表示を開始してみましょう。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/terminal-data.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/terminal-data.jpg" alt="" class="wp-image-7260" width="586" height="405" srcset="https://depfields.com/wp-content/uploads/2020/11/terminal-data.jpg 616w, https://depfields.com/wp-content/uploads/2020/11/terminal-data-300x207.jpg 300w" sizes="(max-width: 586px) 100vw, 586px" /></a><figcaption>ターミナルアプリでのモニターデータ</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>アプリCPLTを起動してからデータモニターは「<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ファイル</span></strong>」-「<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ロギング</span></strong>」でデータ収集用ファイル名を指定すると開始します。問題なければCH1,CH2のデータのグラフ表示が始まります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データプロットの間隔は横軸の設定で調整できますので適当なものに調整してください。グラフ表示されたデータは同時にチャネルごとにExcelファイル(csvフォーマット）に収集されていますので、解析、評価用データとして利用できます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/11/log-graph.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/11/log-graph.jpg" alt="" class="wp-image-7241" width="711" height="504" srcset="https://depfields.com/wp-content/uploads/2020/11/log-graph.jpg 711w, https://depfields.com/wp-content/uploads/2020/11/log-graph-300x213.jpg 300w" sizes="(max-width: 711px) 100vw, 711px" /></a><figcaption>サーミスタ抵抗値および温度のリアルタイムモニター</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データロガーが使えるようになると実際のデータが<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">リアルタイムでグラフ化</span></strong>できますのでデータ変化を解析することができるようになります。特に、モーションコントロールでのモータ速度や位置制御のアプリケーションでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">実際の動作を確認することが不可欠</span></strong>です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ホビー用途でも、動作の妥当性を評価するのにデータロガーがあれば電気のアナログ信号をオシロスコープで確認するような感覚で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">マイコンに取り込んだり処理したデジタル値をモニターに視覚化</span></strong>でき、アプリケーション開発の強力なツールになることでしょう。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/datalogger/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/0e28ef4fbb00f4eb15eabf39e2994aa5b1afc7d0b06fb11c0d8ccb9452c6c2b6.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Graphing and collecting sensor data via serial communication on STM32 MCU | M...</div></div><div class="lkc-url">https://en.depfields.com/datalogger/</div><div class="lkc-excerpt">When creating applications, it is often necessary to collect digital data such as sensor data captured by MCU while graphing it in real time like an oscilloscope. We introduce an easy-to-use data logger that can import data into Microsoft</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/datalogger/">STM32マイコンのシリアル通信でセンサデータをグラフ化・収集してみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>STM32マイコン Nucleoボードを使った温度計</title>
		<link>https://depfields.com/thermometer-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=thermometer-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Fri, 28 Aug 2020 04:07:31 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[Nucleo]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=6153</guid>

					<description><![CDATA[<p>安価なサーミスタをセンサーの素子として使用した温度計をSTM32マイコン（Nucleoボード）で実現するアプリケーションを作ります。簡易なプログラムですがCortex-M3コアマイコンで浮動小数点演算を使ったアプリで他に [&#8230;]</p>
<p>The post <a href="https://depfields.com/thermometer-apl/">STM32マイコン Nucleoボードを使った温度計</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="372" src="https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640-300x174.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">安価なサーミスタをセンサーの素子として使用した温度計をSTM32マイコン（Nucleoボード）で実現するアプリケーションを作ります。簡易なプログラムですが<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Cortex-M3コアマイコンで浮動小数点演算を使ったアプリ</span></strong>で他にいろいろな算術演算アプリにも発展できます。</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">サーミスタ</span></strong>は温度により抵抗値が変化する特性をもった素子で温度計に適しているのは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">NTC特性</span></strong>をもったものです。 NTC特性のものは温度上昇につれ、抵抗値がゆるやかに減少するタイプですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">直線的な変化でなく非線形な特性</span></strong>となっています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>今回使用する<strong>サー<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ミスタは103AT-2</span></strong>で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">B定数</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">3435K</span></strong>,　基準温度<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">T<sub>25</sub>(25℃)</span></strong>でのサーミスタの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">抵抗値R<sub>25</sub></span></strong>は<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>10kΩ</strong>で</span>す。サーミスタ抵抗値<strong>R</strong>と温度<strong>T</strong>の関係式は下記のものですが、この関係式の温度は絶対温度(K)です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/v-r-formula.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/v-r-formula.jpg" alt="" class="wp-image-7212" width="492" height="296"/></a><figcaption>サーミスタ抵抗値と温度</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>温度と抵抗値は自然対数の関数となっており、グラフを対数表で表すと温度上昇につれなだらかに抵抗値が減少しているのがわかります。データシートにある抵抗値と上記の計算式による値はほぼ一致しているのが確認できます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg" alt="" class="wp-image-6171" width="568" height="432" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg 556w, https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2-300x228.jpg 300w" sizes="(max-width: 568px) 100vw, 568px" /></a><figcaption>温度ー抵抗特性</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg" alt="" class="wp-image-6159" width="291" height="546" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg 290w, https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table-160x300.jpg 160w" sizes="(max-width: 291px) 100vw, 291px" /></a><figcaption>サーミスタ温度-抵抗値特性表</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>温度をマイコンで計測するにはサーミスタの抵抗値を知る必要があります。抵抗値を知るには電圧に変換したアナログ値をマイコンで読み取り、マイコンプログラム内で抵抗値に変換します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> このサンプルでは上限電圧としてのマイコン電圧Vdd(3.3V)とGND間にサーミスタRと抵抗器Ro（サーミスタのR<sub>25</sub>と同じ程度の値のもの 10kΩ ）を直列に接続しています。中間の電圧Vが温度変化に応じて変化しますのでこの電圧をAD変換で読み取り、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">下記の式で抵抗値に変換</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/voltage-resister.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/voltage-resister.jpg" alt="" class="wp-image-6232" width="491" height="283" srcset="https://depfields.com/wp-content/uploads/2020/09/voltage-resister.jpg 491w, https://depfields.com/wp-content/uploads/2020/09/voltage-resister-300x173.jpg 300w" sizes="(max-width: 491px) 100vw, 491px" /></a><figcaption>サーミスタ抵抗値検出</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>サーミスタの抵抗値がわかればあとは温度に変換する式に入力して演算すればよいわけですが、この式では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">自然対数を使った算術演算</span></strong>をしなければなりません。非線形な演算のため、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通常の整数での演算ではなく浮動小数点型変数を使用したもの</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg" alt="" class="wp-image-6177" width="387" height="192" srcset="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg 387w, https://depfields.com/wp-content/uploads/2020/09/v-r-formula2-300x149.jpg 300w" sizes="(max-width: 387px) 100vw, 387px" /></a><figcaption>サーミスタ抵抗-温度変換式</figcaption></figure>





<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>この演算を実現するには、まず自然対数log関数を使用するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">"math.h"をインクルード</span></strong>しておく必要があります。次に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">温度を浮動小数点型変数で演算</span></strong>してください。得られた演算値をシリアル通信でモニターに送り 小数点表示させるのですが、あとはマイコン特有の注意点はなく、プログラミングの問題です。 <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">サーミスタ抵抗-温度関係式 では絶対温度</span></strong>ですので、273.15を引いて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">摂氏（セルシウス温度）に換算</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/09/program1.jpg"><img decoding="async" width="648" height="770" src="https://depfields.com/wp-content/uploads/2020/09/program1.png" alt="" class="wp-image-11287" srcset="https://depfields.com/wp-content/uploads/2020/09/program1.png 648w, https://depfields.com/wp-content/uploads/2020/09/program1-252x300.png 252w" sizes="(max-width: 648px) 100vw, 648px" /></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">抵抗値に相当する電圧(ADCValue_IN0)</span></strong>をAD変換で取り込むのですがこのサンプルプログラムでは連続変換に指定していますので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">任意のタイミングで取得でき、141行で抵抗値に変換</span></strong>しています。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">3.3V入力時にデジタル値4096</span></strong>となるようにしています。142行は表示数字桁数を設定するものです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>143行で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">log関数による浮動小数点演算を実施して温度を求めています</span></strong>。144行は表示数字桁数の設定です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/program2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/program2.png" alt="" class="wp-image-11286" width="580" height="135" srcset="https://depfields.com/wp-content/uploads/2020/09/program2.png 632w, https://depfields.com/wp-content/uploads/2020/09/program2-300x70.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></a></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg" alt="" class="wp-image-6725" width="473" height="350"/></a><figcaption>接続図</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="503" height="337" src="https://depfields.com/wp-content/uploads/2020/09/thermometer.jpg" alt="" class="wp-image-6167" srcset="https://depfields.com/wp-content/uploads/2020/09/thermometer.jpg 503w, https://depfields.com/wp-content/uploads/2020/09/thermometer-300x201.jpg 300w" sizes="(max-width: 503px) 100vw, 503px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>0.5秒周期でサーミスタ抵抗値と温度を表示しています。サーミスタ温度-抵抗値特性表の値とほぼ一致していることが確認できます。指でサーミスタをつまむと温度が体温近くまで上昇するのがわかります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-monitor.jpg" alt="" class="wp-image-6165" width="540" height="430" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-monitor.jpg 539w, https://depfields.com/wp-content/uploads/2020/09/temp-monitor-300x239.jpg 300w" sizes="(max-width: 540px) 100vw, 540px" /><figcaption>サーミスタ抵抗および温度のモニター表示</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このサンプルプログラムは簡易的なものですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">STM32F103RB搭載Cortex-M3コアで浮動小数点演算を使った例</span></strong>を扱いました。他に、非線形演算のSIN関数、COS関数などをつかったアプリにも応用できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>NUCLEO-F103RBに搭載している<strong>STM32F103RB</strong>は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">Cortex-M3コア</span></strong>マイコンで<span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b"><strong>浮動小数点を演算</strong></span>するためのハードウェアDSP(Digital Signal Processor)は搭載しておらず演算は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">ソフトウェアによる</span></strong>ものですが、それを特別に意識しないでも実現できます。このサンプルの温度演算のような比較的低速なアプリケーションでは問題はないでしょうが、例えばFFTアナライザーなど高速演算を必要とする浮動小数点演算を行うアプリケーションの場合にはハードウェアのDSPを搭載したCortex-M4など上位マイコンが有利です。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/thermometer/'>温度計アプリ</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 9.04 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='6169'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/thermometer-apl/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/4accd6d9f0d97e5f853fabf7ebe071915bfe2912570f3b43216a11993be2f275.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Thermometer using STM32 Nucleo | Most Powerful Bible to Become an Embedded En...</div></div><div class="lkc-url">https://en.depfields.com/thermometer-apl/</div><div class="lkc-excerpt">I will create an application to realize a thermometer using an inexpensive thermistor as a sensor element with an STM32 MCU (Nucleo board). It is a simple program, but it can be developed into various other arithmetic applications using fl</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/thermometer-apl/">STM32マイコン Nucleoボードを使った温度計</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>STM32 Nucleoで加速度センサを使ってみる</title>
		<link>https://depfields.com/accel-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accel-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sat, 29 Aug 2020 04:46:33 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[USART]]></category>
		<category><![CDATA[Nucleo]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=6708</guid>

					<description><![CDATA[<p>加速度センサとは 加速度センサというものはいろいろなセンサの中でも製品内の見えない場所で使われていることが多いので利用率が高い割にはどのようなものかを知らない人が多いかもしれません。 例えば、スマホでは内部の加速度センサ [&#8230;]</p>
<p>The post <a href="https://depfields.com/accel-apl/">STM32 Nucleoで加速度センサを使ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="428" src="https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640-300x201.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>




<h2 class="wp-block-heading">加速度センサとは</h2>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>というものはいろいろなセンサの中でも製品内の見えない場所で使われていることが多いので利用率が高い割にはどのようなものかを知らない人が多いかもしれません。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">例えば、スマホでは内部の加速度センサにかかる重力から傾きを検知して画面の向きを変えたり、振動を計測する歩数計アプリなどに使われています。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">今回使用する加速度センサはKinox社の3次元空間の加速度 をX,Y,Z軸で検出できるセンサ本体KXTC9-2050に50Hzのローパスフィルタ用コンデンサを装備したモジュールとなったものです。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">検出した加速度には<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">動き、振動、衝撃などによる加速度</span></strong>に加えて重力(G)もオフセット分(DC分）として含まれるので、X,Y,Z軸方向の重力成分が分かれば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサの傾きも検出</span></strong>できます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">加速度センサを利用したアプリケーションとしては<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力による傾きの検出</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">振動や動きによる振動、自由落下およびモーションの加速度計測</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">衝撃による歩数の計測</span></strong>などさまざまな用途に利用されています。アイディア次第でさらにいろいろな用途へ発展できるでしょう。</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050.jpg" alt="" class="wp-image-6808" width="287" height="206" srcset="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050.jpg 461w, https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050-300x216.jpg 300w" sizes="(max-width: 287px) 100vw, 287px" /><figcaption>フィルタ付き加速度センサモジュール</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> 加速度センサKXTC9-2050 は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">±2Gの範囲内</span></strong>で加速度を検出できます。仕様表1の出力から、例えば、X,Y軸を水平面とし、Z軸に重力方向にセンサを設置すると、X,Y出力は重力成分はゼロなので1.65V, Z軸出力は1G分を含むので2.32(=1.65+0.66)Vとなるはずです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg" alt="" class="wp-image-6823" width="599" height="333" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg 599w, https://depfields.com/wp-content/uploads/2020/10/仕様表1-300x167.jpg 300w" sizes="(max-width: 599px) 100vw, 599px" /></a><figcaption> 仕様表1(データシートより) </figcaption></figure>



<h2 class="wp-block-heading">重力と加速度について</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサは加速度を検知するものですが信号には重力加速度成分を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オフセット分（DC成分）</span></strong>として含んでいます。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力Gは9.8[m/sec<sup>2</sup>]で地面の向きに一定にかかっている加速度</span></strong>です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>通常、加速度は動作に伴って発生するものなのですが、この重力加速度成分は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサを静止させても発生</span></strong>しています。どういうことでしょうか。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg" alt="" class="wp-image-6829" width="388" height="226" srcset="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg 388w, https://depfields.com/wp-content/uploads/2020/10/重力成分-300x175.jpg 300w" sizes="(max-width: 388px) 100vw, 388px" /></a><figcaption>静止時の重力</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサでは実際の動作から 重力加速度成分を直接検出しているのではなく、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力に対する垂直抗力を検出している</span></strong>のです。したがって、机上など水平面に静止させると重力加速度Gと釣り合っている垂直抗力が重力Gとして検出されます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このため、加速度センサ出力に含まれる重力加速度成分の向きは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">実際の重力とは逆向き</span></strong>となりますので、実際の動作の加速度にオフセット分（DC分）として含まれます。例えばZ軸の実際の重力方向（マイナス方向）に自由落下させると加速度センサ出力のZ軸成分は垂直抗力による重力オフセット分がキャンセルされてゼロ、つまり1.65Vになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir.jpg" alt="" class="wp-image-6830" width="407" height="293" srcset="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir.jpg 461w, https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir-300x216.jpg 300w" sizes="(max-width: 407px) 100vw, 407px" /><figcaption>各軸の加速度方向</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサを扱ったアプリケーションで、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">傾きを検知するには各軸のオフセット分である重力成分だけ</span></strong>を検出して計測すればよく、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">動作の中の加速度を検知するには各軸のオフセット分を除いた加速度成分</span></strong>を検出して計測すればよいわけです。また、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">衝撃は瞬時に発生した減速時の加速度成分</span></strong>で計測します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサはアイディアしだいでさまざまな用途に発展できる面白いセンサです。今回はその前準備として加速度センサの出力がどのようなものであるかを確認するために加速度3軸分の加速度出力をモニターするアプリを作成します。</p>
</div></div></div>



<h2 class="wp-block-heading">加速度センサを使ったアプリ</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>今回は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">仕様書どおりの加速度出力を確認するためのアプリプログラムを作成</span></strong>していきます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アナログ入力信号</span></strong>としてSTM32の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">AD変換</span></strong>を使用します。ペリフェラルAD変換は<strong><a href="https://depfields.com/adc/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">ADコンバータ【STM32のADコンバータ詳細】</a></strong>で解説しています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>STM32のAD変換ではアナログ信号入力のパラメータとして、センサの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンス</span></strong>を指定する必要があります。メーカーの仕様表3(データシート)より<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンスは平均32kΩ</span></strong>となっています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg" alt="" class="wp-image-6824" width="612" height="161" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg 612w, https://depfields.com/wp-content/uploads/2020/10/仕様表2-300x79.jpg 300w" sizes="(max-width: 612px) 100vw, 612px" /></a><figcaption> 仕様表2(データシートより) </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサの信号をモニターするアプリにはアナログ入力3点およびPCへのシリアル通信を使用します。今回の AD変換 はアナログ信号が3点ありますので<strong><a href="https://depfields.com/dma/">DMA(Direct Memorry Access)</a></strong>と組み合わせると効率がよいです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg" alt="" class="wp-image-6809" width="497" height="284" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg 497w, https://depfields.com/wp-content/uploads/2020/10/仕様表-300x171.jpg 300w" sizes="(max-width: 497px) 100vw, 497px" /></a><figcaption>仕様表</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/配線図.jpg" alt="" class="wp-image-6818" width="517" height="361" srcset="https://depfields.com/wp-content/uploads/2020/10/配線図.jpg 517w, https://depfields.com/wp-content/uploads/2020/10/配線図-300x209.jpg 300w" sizes="(max-width: 517px) 100vw, 517px" /><figcaption>配線図</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>実際のプログラムではX,Y,Z軸3点アナログ信号入力用にそれぞれポートPA0,PA1,PA4をアナログ入力AD1_CH0,AD1_CH1,AD1_CH4に設定し、AD変換を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">連続変換モード</span></strong>として<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">複数チャネルデータをDMAによりメモリに自動転送</span></strong>しています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">取得したアナログデータ</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">電圧値（整数）に変換</span></strong>してから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">さらに文字列に変換</span></strong>してシリアル通信で送信しています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/10/section1.png"><img decoding="async" width="606" height="967" src="https://depfields.com/wp-content/uploads/2020/10/section1.png" alt="" class="wp-image-6838" srcset="https://depfields.com/wp-content/uploads/2020/10/section1.png 606w, https://depfields.com/wp-content/uploads/2020/10/section1-188x300.png 188w" sizes="(max-width: 606px) 100vw, 606px" /></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>AD変換の初期設定では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">使用するチャネルの指定</span></strong>と加速度センサの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンスに合わせて指定</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/10/section2.png"><img decoding="async" width="617" height="705" src="https://depfields.com/wp-content/uploads/2020/10/section2.png" alt="" class="wp-image-6839" srcset="https://depfields.com/wp-content/uploads/2020/10/section2.png 617w, https://depfields.com/wp-content/uploads/2020/10/section2-263x300.png 263w" sizes="(max-width: 617px) 100vw, 617px" /></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このアプリでは1秒毎に加速度成分のX軸,Y軸,Z軸の電圧値（整数）をシリアル送信してPCターミナルでモニターしています。加速度センサーをX,Y軸平面上に静止させているので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Z軸に重力加速度成分がオフセット分として追加</span></strong>していることが確認できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>静止しているため、重力の影響を受ける成分（垂直抗力分）だけ  基準値約1.65Vに対して出力に変化が現れます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>X軸、Y軸についても重力の影響をうける向きに傾けると出力が変化するのがわかります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/output-monitor.jpg" alt="" class="wp-image-6834" width="560" height="426" srcset="https://depfields.com/wp-content/uploads/2020/10/output-monitor.jpg 560w, https://depfields.com/wp-content/uploads/2020/10/output-monitor-300x228.jpg 300w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption>Z軸方向の重力（電圧値：整数）</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/accel-gravity-apl/'>加速度センサでの重力計測</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 5.99 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='6954'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<p></p>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/accel-apl/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/e834d1c33e999e43d46d98170ccc43b30179469f963d4acb3904c239c68b8c0a.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Accelerometer using STM32 Nucleo | Most Powerful Bible to Become an Embedded ...</div></div><div class="lkc-url">https://en.depfields.com/accel-apl/</div><div class="lkc-excerpt">What is an Accelerometer?Among various sensors, accelerometers are often used in invisible places in products, so many people may not know what they are, despite their high utilization.For example, it is used in smartphones t</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/accel-apl/">STM32 Nucleoで加速度センサを使ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>脈拍センサーとSTM32Nucleoで心拍数を測ってみる</title>
		<link>https://depfields.com/heartbeat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=heartbeat</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Thu, 27 Aug 2020 14:38:47 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[システムクロック・割り込み]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=5749</guid>

					<description><![CDATA[<p>低速パルスである脈拍をカウントして一分間あたりの心拍数を表示するアプリケーションに挑戦してみましょう。 フォトリフレクタおよびオペアンプを使った脈拍センサーの作成 脈拍センサ信号および出力モニター用LEDをマイコンに接続 [&#8230;]</p>
<p>The post <a href="https://depfields.com/heartbeat/">脈拍センサーとSTM32Nucleoで心拍数を測ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="414" src="https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640-300x194.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"> <strong>低速<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">パルスである脈拍をカウントして一分間あたりの心拍数</span></strong>を表示するアプリケーションに挑戦してみましょう。 </p>







<h2 class="wp-block-heading">フォトリフレクタおよびオペアンプを使った脈拍センサーの作成</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>脈拍をカウントして心拍数を表示するアプリケーションの解説をします。心拍数アプリを実現するためのアプリにはアナログ電子回路の知識、STM32マイコンのGPIO、割り込みおよびシリアル通信など学習に必要な要素がバランス良く盛り込まれています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>脈拍を検知するセンサーには電子工作でも一般的によく使われている<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フォトリフレクタ</span></strong>と呼ばれる部品を使用します。<br>このフォトリフレクタは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">赤外線を発光するLED</span></strong>と反射して返ってきた<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">光を検出するトランジスタ</span></strong>で構成されています。 電子工作では色による反射光量の違いで黒いラインのあるなしを判別することを利用したライントレースなどにも用いられます。 </p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> 指先をフォトリフレクタに当てると指先にある毛細血管のヘモグロビン濃度変化を反射率の変化として検知できるのですが、この変化はとても微小でそのまま電気信号としてマイコンに入力してもカウント困難なのでまず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オペアンプ</span></strong>という部品を使って安定した脈拍パルスに増幅します。この増幅回路はさまざまなタイプがあり、採用しているのはその一例ですがインターネットでも十分な情報がありますのでいろいろ試してみるとよいと思います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>オペアンプは1段でも機能するかもしれませんがここでは2段使用しています。フォトリフレクタ信号の変化分だけパルスとしてとりだしたいので直流分をカットする<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">コンデンサCと抵抗Rを組み合わせたRCハイパスフィルタ</span></strong>(カットオフ周波数：約1kHz)を入り口にいれています。</p>
</div></div></div>



<figure class="wp-block-image size-full is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg" alt="" class="wp-image-5750" width="480" height="337" srcset="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg 479w, https://depfields.com/wp-content/uploads/2020/09/脈拍センサ-300x210.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></a><figcaption>オペアンプをつかったフォトリフレクタによる信号の増幅</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">LTSpice®</span></strong>と呼ばれる<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">回路シミュレーション</span></strong>を使用して上記回路の特性を調べてみます。入力信号には振幅1mV、オフセット2.5V、周期1sの矩形波としています。妥当な波形が出力にあらわれているのでこれで回路を構成することにします。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>回路シミュレーションを利用するとおおまかな部品の選定や抵抗値、コンデンサ容量などのパラメータを実際の回路を制作する前に確認することができますので試作のかわりに強力なツールとして利用することをおすすめします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation.jpg" alt="" class="wp-image-6457" width="536" height="402" srcset="https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation.jpg 640w, https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation-300x225.jpg 300w" sizes="(max-width: 536px) 100vw, 536px" /></a><figcaption>LTspiceによる回路シミュレーション</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>製品として完成された脈拍センサーを使うと確実で簡単なのですが、ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">あえて学習用にフォトリフレクタという素子を使って電子工作を兼ねて心拍モニターを実現する</span></strong>ことにしています。</p>
</div></div></div>



<h2 class="wp-block-heading">脈拍センサ信号および出力モニター用LEDをマイコンに接続</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>オペアンプ出力のVINを直接マイコンに入力として接続するので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">入力最大電圧がマイコン電源電圧を超えないようにオペアンプの電源をマイコン電源と共通</span></strong>のものにしています。（STM32では端子により５V入力が可能なものもありますが、すべてではありません。<strong>STM32F103RBの仕様書で確認</strong>してください。）</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/脈拍connection.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/脈拍connection.jpg" alt="" class="wp-image-5772" width="505" height="379"/></a><figcaption>心拍数モニターの配線</figcaption></figure>



<h2 class="wp-block-heading">プログラム内容解説</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>オペアンプにより増幅した<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">脈拍センサ信号は電圧パルス信号としてPA8に入力</span></strong>します。心拍モニターとして入力パルスに同調した<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">LED点灯するためにPB6を汎用プッシュプル出力</span></strong>に設定をします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg" alt="" class="wp-image-5966" width="615" height="466" srcset="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg 615w, https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1-300x227.jpg 300w" sizes="(max-width: 615px) 100vw, 615px" /></a><figcaption>GPIO設定</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">PA8は外部割り込み信号</span></strong>として使うために割り込み設定をします。割り込み入力は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">パルスの立ち上がり</span></strong>時を条件としています。</p>
</div></div></div>



<p>割り込み設定は「<strong><a href="https://depfields.com/interrupt/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">さまざまな割り込み【STM32の割り込み詳細</a>】</strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/interrupt-setting.jpg" alt="" class="wp-image-5759" width="525" height="482" srcset="https://depfields.com/wp-content/uploads/2020/09/interrupt-setting.jpg 525w, https://depfields.com/wp-content/uploads/2020/09/interrupt-setting-300x275.jpg 300w" sizes="(max-width: 525px) 100vw, 525px" /><figcaption>割り込み設定</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>RTOSを使って役割毎にタスクに分類します。脈拍パルス間隔を計測するためのタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_pulse</span></strong>（10ms毎に実行）、LED点灯用のタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_led</span></strong>（100ms毎に実行） 、そして演算して得た心拍数をPCに送る<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">タスクprvTask_monitor</span></strong>（1000ms毎に実行） です。</p>
</div></div></div>



<p>リアルタイムOS(FreeRTOS)のタスクの使い方は「<strong><a href="https://depfields.com/task/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">FreeRTOSタスク管理の基本【学習・実践向け：具体的な使い方】</a></strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg"><img decoding="async" width="680" height="311" src="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg" alt="" class="wp-image-5760" srcset="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg 680w, https://depfields.com/wp-content/uploads/2020/09/main-procedure-300x137.jpg 300w" sizes="(max-width: 680px) 100vw, 680px" /></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>脈拍パルス数計測のタイムチャートです。PA8の割り込み入力パルス立ち上がりで割り込みが発生して割り込みハンドラEXTI9_5_IRQHandlerが呼び出されます。ここでフラグtriger_flag=1として、割り込みが発生したことを通知します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>10msごとに実行している 脈拍パルス間隔を計測するためのタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_pulse</span></strong>がtrigger_flag=1で割り込み発生の通知を受けると 10msごとに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加算カウント</span></strong> <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">(10msクロックのカウント)</span></strong> <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">した値（count_interval_cycle)を取得</span></strong>して<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">心拍数(pulse_count)を演算</span></strong>します。演算処理後、割り込み通知用フラグtrigger_flagとカウント値count_interval_cycleをリセットします。 <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">心拍数は割り込み入力の1分間における回数</span></strong>がわかればよく10msごとの クロックカウント値count_interval_cycle の場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">6000を count_interval_cycle で割ったもの</span></strong>になります。 </p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/time_chart.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/time_chart.jpg" alt="" class="wp-image-5777" width="475" height="339"/></a><figcaption>脈拍パルスカウントのタイムチャート</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg" alt="" class="wp-image-5761" width="576" height="485" srcset="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg 575w, https://depfields.com/wp-content/uploads/2020/09/pulse-frequency-300x253.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /></a><figcaption>割り込み入力による心拍数演算</figcaption></figure>



<h2 class="wp-block-heading">脈拍センサー入力</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>実際に構成した回路で脈拍センサー検知部のフォトリフレクタ-に指先をあてると脈拍を検知して信号がオペアンプで適度に増幅されている様子がわかります。シミュレーション結果と実際の回路による結果が同じようなものであることがわかります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>この心拍数計測のプログラムでは脈拍センサーによるアナログ信号をパルス入力として割り込みでカウントします。</p>
</div></div></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:76% auto"><figure class="wp-block-media-text__media"><video controls src="https://depfields.com/wp-content/uploads/2022/02/heartbeat0.mp4"></video></figure><div class="wp-block-media-text__content">
<p class="has-large-font-size"></p>
</div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<h2 class="wp-block-heading">LEDおよびモニター出力</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>脈拍パルスに同調したLED発光はprvTask_ledで行っています。実行頻度は100ms程度で十分です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>演算して得られた心拍数をシリアルUSART通信で心拍数をモニターするためのタスクがprvTask_monitorです。演算値を文字列に変換して1000msごとにPCモニターに表示させます。PC側のターミナルソフトで値が確認できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>フォトリフレクタは指の押さえ方により敏感に反応してしまいますが安定するように押さえてやると妥当な心拍数が表示されていることがわかります。出力モニター用LEDは脈拍に同調して発光しています。</p>
</div></div></div>



<p>シリアル通信USARTの使い方は「<strong><a href="https://depfields.com/usart/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">シリアル通信USART【STM32のUSART詳細】</a></strong>」および「<strong><a href="https://depfields.com/monitor-debug-apl/">シリアルモニター【STM32シリアル通信】</a></strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg" alt="" class="wp-image-5763" width="513" height="416" srcset="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg 512w, https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor-300x243.jpg 300w" sizes="(max-width: 513px) 100vw, 513px" /></a><figcaption>LEDおよびモニター出力</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg" alt="" class="wp-image-6474" width="580" height="462" srcset="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg 539w, https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor-300x239.jpg 300w" sizes="(max-width: 580px) 100vw, 580px" /></a><figcaption>心拍数モニター</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:76% auto"><figure class="wp-block-media-text__media"><video controls src="https://depfields.com/wp-content/uploads/2022/02/heatbeat1.mp4"></video></figure><div class="wp-block-media-text__content">
<p class="has-large-font-size"></p>
</div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>以上が 基本的な心拍数モニターのプログラム構成です。LEDの点滅をPWM出力の調光にしてみたり、シリアル通信をWiFiで実現してみたり、いろいろと組み合わせて発展していくとよいでしょう。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/heartbeat-monitor/'>心拍数モニター</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 7.49 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='5780'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/heartbeat/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/2704a55c0b9e70c62144f796c598a94c1f543c3a467c53d743637b07b23743b4.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Heart rate monitor using pulse sensor and STM32 Nucleo | Most Powerful Bible ...</div></div><div class="lkc-url">https://en.depfields.com/heartbeat/</div><div class="lkc-excerpt">Try an application that counts the pulse, which is a slow pulse, and displays the heart rate per minute.  Creating a pulse rate sensor using a photo reflector and operational amplifierThis section provides an explanation of</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/heartbeat/">脈拍センサーとSTM32Nucleoで心拍数を測ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		<enclosure url="https://depfields.com/wp-content/uploads/2022/02/heartbeat0.mp4" length="13090962" type="video/mp4" />
<enclosure url="https://depfields.com/wp-content/uploads/2022/02/heatbeat1.mp4" length="14265864" type="video/mp4" />

			</item>
		<item>
		<title>エンコーダの回転位置測定【STM32 Nucleo】</title>
		<link>https://depfields.com/pulse-position/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pulse-position</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Wed, 26 Aug 2020 02:12:37 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[タイマ]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=5353</guid>

					<description><![CDATA[<p>STM32のタイマにはエンコーダ２相出力パルスを入力としてアップダウンカウントする機能があります。この機能を使ってロータリーエンコーダからのパルスをアップダウンカウントさせて基準位置からモータが回転した量を計測する方法を [&#8230;]</p>
<p>The post <a href="https://depfields.com/pulse-position/">エンコーダの回転位置測定【STM32 Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="350" height="350" src="https://depfields.com/wp-content/uploads/2020/08/encoder-1.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/08/encoder-1.jpg 350w, https://depfields.com/wp-content/uploads/2020/08/encoder-1-300x300.jpg 300w, https://depfields.com/wp-content/uploads/2020/08/encoder-1-150x150.jpg 150w" sizes="(max-width: 350px) 100vw, 350px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">STM32のタイマには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">エンコーダ２相出力パルスを入力としてアップダウンカウントする機能</span></strong>があります。この機能を使ってロータリーエンコーダからのパルスをアップダウンカウントさせて基準位置からモータが回転した量を計測する方法を解説しています。</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>この機能を使えば、例えば、モータ軸に直結したエンコーダからのパルスを計測開始時に基準位置としてプリセットしてからアップダウンカウントさせると基準位置からモータが回転した量がわかるのです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>今回のアプリケーションでは「<strong><a href="https://depfields.com/pulse-speed/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">エンコーダの回転速度測定</a></strong>」で使用する回路と共通です。<br>今回は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">エンコーダ出力の2相パルスを使用しますのでTIM3のCH1とCH2を入力</span></strong>とします。<br>実際のプログラムでの設定を解説していきます。</p>
</div></div></div>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">目的：TIM3のCH1、CH2へプルアップ入力したエンコーダパルスをアップダウンカウントして回転量を測定する<br>■　<strong>プルアップ入力に設定したタイマ</strong>TIM3のチャネルCH1(PA6)/CH2(PA7)を使用<br>■　<strong><strong>エンコーダインターフェースモード</strong>に設定</strong>して、<strong>アップダウンカウント</strong>する<br>■　ユーザースイッチ等で<strong>カウント値を基準位置にプリセットしてからアップダウンカウントを実行</strong>する</p>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting2.jpg" alt="" class="wp-image-9035" width="610" height="464" srcset="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting2.jpg 742w, https://depfields.com/wp-content/uploads/2020/08/peripheral-setting2-300x228.jpg 300w" sizes="(max-width: 610px) 100vw, 610px" /></a></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;GPIOおよびタイマTIM３の初期設定</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>タイマの初期設定は「<strong><a href="https://depfields.com/pulse-speed/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">ロータリーエンコーダのパルス速度測定</a></strong>」と同じですので省略します。<br><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">エンコーダインターフェースモード</span></strong>に設定するには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">TIM_EncoderInterfaceConfig()関数</span></strong>を使用します。この関数の使い方詳細は「<strong><a href="https://depfields.com/timer/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">タイマ・カウンタ【STM32の高機能・汎用タイマ詳細】</a></strong>」の「タイマの応用」で解説していますので参照してください。<br></p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;エンコーダカウント値取得およびシリアル通信でPCへ転送</span></p>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/08/pulse-position-count.jpg"><img decoding="async" width="657" height="380" src="https://depfields.com/wp-content/uploads/2020/08/pulse-position-count.jpg" alt="" class="wp-image-5361" srcset="https://depfields.com/wp-content/uploads/2020/08/pulse-position-count.jpg 657w, https://depfields.com/wp-content/uploads/2020/08/pulse-position-count-300x174.jpg 300w" sizes="(max-width: 657px) 100vw, 657px" /></a></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ユーザースイッチを押して任意の値にプリセットします（ここでは上限値32000の中間16000を基準）。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>エンコーダインターフェースモードでCH1,CH2両方のエッジを検出する設定にしている場合は４逓倍となり、180p/r分解能のエンコーダの場合は軸を時計方向に1回転まわすと720増加(または減少)し、反時計方向に1回転回すとその逆の720減少（または増加）していれば成功です。 </p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> CH1,CH2どちらかのエッジを検出する設定にしている場合は2逓倍になり、1回転あたり360増加（または減少）します。 </p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>モーターの回転位置がわかれば、モータをアクチュエータとして動かす機器で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">任意の量だけ動作</span></strong>させて止めて次の動作につなげるアプリケーションが実現できるようになります。</p>
</div></div></div>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"> <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">STM32でのエンコーダカウンタ</span></strong>に関しましては<strong><a href="https://depfields.com/timer" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">タイマ・カウンタ【STM32の高機能・汎用タイマ詳細】</a></strong>の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">外部高速クロックカウンタ-エンコーダインターフェースモード</span></strong>で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">設定の詳細を解説</span></strong>しています。 </p>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/encoder-position/'>ロータリーエンコーダのパルス回転位置測定</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 6.11 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='5351'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/pulse-position/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/dda7bae6b00f49de2f59a3f535968f02233e39e06775d78ee5a00edeac2407fc.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Encoder position measurement [STM32 Nucleo] | Most Powerful Bible to Become a...</div></div><div class="lkc-url">https://en.depfields.com/pulse-position/</div><div class="lkc-excerpt">The STM32 timer has a function to count up and down using encoder 2-phase output pulses as input. This section explains how to use this function to measure the amount of motor rotation from the reference position by up-down counting the pu</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/pulse-position/">エンコーダの回転位置測定【STM32 Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>エンコーダの回転速度測定【STM32 Nucleo】</title>
		<link>https://depfields.com/pulse-speed/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pulse-speed</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Wed, 26 Aug 2020 00:48:22 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[タイマ]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=5315</guid>

					<description><![CDATA[<p>STM32のタイマには外部パルスを計測する機能があります。ロボット等のアクチュエータには位置、速度を検知するセンサとしてエンコーダがよく使われるのですが、エンコーダから回転速度に応じて変化するパルスを計測する方法を紹介し [&#8230;]</p>
<p>The post <a href="https://depfields.com/pulse-speed/">エンコーダの回転速度測定【STM32 Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="400" height="400" src="https://depfields.com/wp-content/uploads/2020/08/encoder2.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/08/encoder2.jpg 400w, https://depfields.com/wp-content/uploads/2020/08/encoder2-300x300.jpg 300w, https://depfields.com/wp-content/uploads/2020/08/encoder2-150x150.jpg 150w" sizes="(max-width: 400px) 100vw, 400px" /></div>
<p>STM32のタイマには外部パルスを計測する機能があります。ロボット等のアクチュエータには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">位置、速度を検知するセンサとしてエンコーダがよく使われる</span></strong>のですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">エンコーダから回転速度に応じて変化するパルスを計測する方法</span></strong>を紹介します。</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>パルス速度は単位時間当たりのカウント数のことですので外部パルスをカウントできる機能を使えればよいわけです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>今回のアプリケーションで使用するエンコーダは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オープンコレクタ出力</span></strong>タイプ仕様のものです。オープンコレクタの出力はトランジスタのコレクタが出力端子のタイプでコレクタ、エミッタも開放状態の無電圧接点です。マイコンに接続するにはコレクタ側をプルアップし、エミッタ側はGNDとします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/08/open-collector-1.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/08/open-collector-1.jpg" alt="" class="wp-image-5318" width="341" height="275" srcset="https://depfields.com/wp-content/uploads/2020/08/open-collector-1.jpg 308w, https://depfields.com/wp-content/uploads/2020/08/open-collector-1-300x243.jpg 300w" sizes="(max-width: 341px) 100vw, 341px" /></a><figcaption>オープンコレクタ出力のマイコン接続</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>エンコーダパルスをSTM32で計測（カウント）するにはペリフェラルの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">タイマに入力として接続</span></strong>します。下記に接続例を示しますが、<strong>速度計測にはエンコーダ出力の2相のうち1つだけを使用</strong>します。STM32の外部パルス計測機能を使用するには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">タイマのCH1とCH2だけ</span></strong>で使用できます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/08/encoder.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/08/encoder.jpg" alt="" class="wp-image-5319" width="539" height="396" srcset="https://depfields.com/wp-content/uploads/2020/08/encoder.jpg 539w, https://depfields.com/wp-content/uploads/2020/08/encoder-300x220.jpg 300w" sizes="(max-width: 539px) 100vw, 539px" /></a><figcaption>エンコーダ速度計測の接続図</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>実際のプログラムでの設定を解説していきます。</p>
</div></div></div>



<p>目的：TIM3のCH1へプルアップ入力したエンコーダパルスを単位時間毎にカウントする<br>■　<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プルアップ入力に設定したタイマ</span></strong>TIM3のチャネルCH1(PA6)を使用<br>■　<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">外部クロックモードに設定</span></strong>して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アップカウント</span></strong>する<br>■　<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">一定期間ごとに（RTOSを使うと便利）カウント値を取得</span></strong>してから、<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>カウントをリセット</strong></span>する</p>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting.jpg"><img decoding="async" width="742" height="568" src="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting.jpg" alt="" class="wp-image-5340" srcset="https://depfields.com/wp-content/uploads/2020/08/peripheral-setting.jpg 742w, https://depfields.com/wp-content/uploads/2020/08/peripheral-setting-300x230.jpg 300w" sizes="(max-width: 742px) 100vw, 742px" /></a></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;GPIOおよびタイマTIM３の初期設定</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>GPIO設定ではエンコーダのオープンコレクタ出力をTIM3のCH1に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プルアップ接続</span></strong>します。<br>TIM3設定ではアップカウントに設定しておきます。TIM.Periodにはカウント値がオーバーフローしない程度の値にしておきます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong>外部クロックモード</strong>に設定するには<strong>TIM_TIxExternalClockConfig()関数</strong>を使用します。<br>この関数の使い方詳細は「<strong><a href="https://depfields.com/timer/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">タイマ・カウンタ【STM32の高機能・汎用タイマ詳細】</a></strong>」の「タイマの応用」で解説していますので参照してください。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/08/pulse-speed-count.png"><img decoding="async" width="597" height="224" src="https://depfields.com/wp-content/uploads/2020/08/pulse-speed-count.png" alt="" class="wp-image-9039" srcset="https://depfields.com/wp-content/uploads/2020/08/pulse-speed-count.png 597w, https://depfields.com/wp-content/uploads/2020/08/pulse-speed-count-300x113.png 300w" sizes="(max-width: 597px) 100vw, 597px" /></a></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;単位時間毎にカウント値取得</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>カウント値を取得するにはTIM_GetCounter（TIMx)を使います。引数は<strong>設定対象タイマTIM3</strong>などを指定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このアプリケーション例ではRTOSを使用して100ms毎にカウント値を取得してからリセットしています。シリアル通信によりパルス速度値としてモニターさせているのですが、パルス速度は１secあたりに換算しているものです。エンコーダの分解能180p/rの場合は1秒間にちょうど1回転の速度で回転させてみると<strong>パルス速度値は180</strong>となっていれば成功です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>エンコーダの速度がわかれば、少し高度になりますが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フィードバックすることで厳密な速度コントロールができる</span></strong>ようになります。モーションコントロールの基本ですので挑戦してみてください。</p>
</div></div></div>



<p>  <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">STM32でのエンコーダ高速パルスカウンタ</span></strong>に関しましては<strong><a href="https://depfields.com/timer" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">タイマ・カウンタ【STM32の高機能・汎用タイマ詳細】</a></strong>の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">外部高速クロックカウンタ-外部クロックモード</span></strong>で解説しています。  </p>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/encoder-speed/'>ロータリーエンコーダのパルス速度測定</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 6.16 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='5347'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/pulse-speed/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/ce96c18d91f2862128c47e81b772ef17e79404289b86c80c4d8a2cacb79c9135.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Encoder speed measurement [STM32 Nucleo] | Most Powerful Bible to Become an E...</div></div><div class="lkc-url">https://en.depfields.com/pulse-speed/</div><div class="lkc-excerpt">The STM32 timer has the ability to measure external pulses. Encoders are often used as sensors to detect the position and speed of actuators such as robots, etc. This section introduces a method to measure pulses that vary with rotation sp</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/pulse-speed/">エンコーダの回転速度測定【STM32 Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
