11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

M5StickCでLEDを点滅させてみる!汎用ポートGPIOやPWM制御って何?

TAGS:

最近M5StickCくんに完全にハマっておりますが・・・
冷房の効いた部屋でノンビリと、ドローンとはまた違った楽しみ方が出来る楽しい遊びとなります。

M5StickCってなんぞやって方はこちらをご覧下さい。
マイコン搭載の小型端末でアイデア次第で面白いことがいろいろ出来そうな予感のするガジェット、そしてお値段も2,000円しないなんて驚きです!
これから電子工作などはじめてみようって方に非常にオススメです!

【M5StickC】これからはじめる電子工作。M5StickCからはじめてみるのはオススメです!

前回、このM5StickCでの開発環境のセットアップについてご紹介しました。

【M5StickC】ブロックプログラミング(UIFlow)で動作させるための環境づくり&セットアップ手順!

次はArduinoでの環境整備をご紹介しようかと思いましたが、このブログをご覧の方の大半はプログラミング初心者の方が多いかと思います。(私もそうなんですが)
ということで、初心者の方でも比較的簡単に扱えるUIFlow(ブロックプログラミング)でいろいろとご紹介していった方がどんな事が出来るのか分かりやすく、そして難しいこと抜きで楽しめるかと思います。

【M5StickC】汎用ポートGPIOを使いLEDを点滅させてみる!

M5StickCで使える拡張端子

まずはM5StickCで使える拡張端子について簡単にご説明しておきます。
M5StickCは単体で使うというよりこの拡張できる端子に様々なデバイス(センサーやスイッチ、モーターやサーボなど)を繋げてこそ、その魅力が発揮できます。

M5StickCで使える拡張端子として上部に[HAT]と下部に[GROVE]という拡張モジュールを取り付けるための端子があります。
これはM5StickC専用の拡張モジュールとして販売されているHATやGROVEを取り付けるための拡張端子となります。

例えば[JOYSTICK HAT]を取り付けると、2台のM5StickCを使い1台をジョイスティックとして使用しもう1台を動かすなんてことが出来ます。

機能拡張用の様々なHATやGROVEが販売されていますが、それ以外にも使い方はいろいろできます。
M5StickC本体裏側には、各ポートの情報が詳細に記載されています。

HATモジュールは8ピンで、各ピンはGND・5V→・G26・G36・G0・BAT・3V3・5V←となっています。
またGROVEモジュール端子は4ピンで、各ピンはGND・Vout・G32・G33となっています。
それぞれ電源やI/Oポートの記載となります。

HATモジュール端子

HATを取り付ける以外にも、2.54mmピッチのピンヘッダーやジャンパーワイヤーなどで接続する事が出来ます。

  • GND:GND(マイナス)端子
  • 5V→:5V電源出力端子
  • G26:GPIO26ポート端子
  • G36:GPIO36ポート端子 ※入力専用
  • G0:GPIO0ポート端子
  • BAT:内蔵バッテリー出力端子
  • 3V3:3.3V電源出力端子
  • 5V←:5V電源入力端子

GROVEモジュール端子

GROVEケーブルを使って市販されているGROVEと接続します。
また先端が2.54ピッチのヘッダーピンに接続できる形状のものもあり、これを使えばジャンパーワイヤーやブレッドボードなどを使い接続出来るようになります。

  • G:GND(マイナス)端子
  • Vout:5V電源出力端子
  • G32:GPIO32ポート端子
  • G33:GPIO33ポート端子
M5Stack Universal 4Pin Buckled Grove Cable
M5Stack
GROVE – 4ピン-ジャンパメスケーブル (5本セット)

入出力で使える汎用ポートGPIO

電源(5Vや3.3V)やGNDは、その端子名から電源を取ることが出来るというのは感覚的に分かると思います。
それでは、G26やG36・・・って一体何なんでしょうか?

これはGPIO(General-purpose input/output)と呼ばれる汎用入出力ポートとなります。

I/O(インプット・アウトプット)という言葉はパソコンなど使っているとよく出てくる単語ですが、感覚的にはそんな感じです。
汎用的に使えるI/Oポート(デジタル or アナログで使える入出力ポート)となります。

デジタル(High or Low)またはアナログデータ両方で使え、さらにInput(入力)やOutput(出力)のどちらでも使う事が出来るポートとなります。
何かこの時点で難しそう?と思われる方もいるかと思いますが・・・

いえいえ!
言葉にすると難しそうですが要するにM5StickCで何かをさせよう(モーターやサーボを動かしたり、センサー情報を取得したりなど)と思えば、このポートに接続することによりそれが可能となります。

例えばモーターやサーボを動かしたり、またLEDを点灯させたりしたい場合はその命令をM5StickCから出すわけですからアウトプットとして使います。
また、スイッチやセンサーなどの情報をM5StickC側に取得したい場合にはインプットとして使用するといった感じです。
これでなんとなくイメージが掴めたのではないでしょうか?

今回は電子工作の基本とも言われるLチカ(LEDをチカチカと点滅させる)をこのGPIOポートを使ってやってみたいと思います。

M5StickC本体のLEDを点滅させてみる

M5StickC本体にはLEDが組み込まれています。
まずはこれを使ってLチカをやってみます。

LEDを点灯されるためのブロック(消灯させるブロック)が用意されています。
それにタイマーブロックを使い点灯・消灯時間を指定するだけです。
ブロックを並べていくだけなので感覚的に出来ると思います。

実回路でこれを作ろうと思えば、コンデンサや抵抗の値を計算してと・・・そこそこ大変です。

外部に取り付けたLEDを点滅させてみる

そしてこれを外部に取り付けたLEDで同じように点滅させてみたいと思います。
ここで登場するのがGPIOポートです。
デジタル・アナログどちらでも使え、そして入出力(I/O)が可能なポートとなります。

LEDのオン・オフの動作なので、GPIOポートにデジタル出力が出来るブロックを使ってみたいと思います。
【高度なブロック】⇒【Easy I/O】にデジタル出力が出来るブロックがありました。
ここでは[◯◯]ピンに[◯◯]をデジタルで出力するというブロックを使ってみたいと思います。

ここで[◯◯]ピンの部分にはGPIOの出力させたいポートを指定します。
冒頭に出てきた(M5StickC本体裏側にポートが記載)G0やG26・G32・G33・G36がこれにあたります。(※G36は入力専用ポートとなるので今回は使えません)

[◯◯]をデジタルで出力する部分には、デジタルなので”ON”なら”1″、”OFF”なら”0”を入力します。

MEMO
GPIOポートから出力される電圧は、”1(High)”の場合は3.3V、”0″の場合は0Vが指定したポートに出力されます!

言葉で説明すると少し分かりづらいですが、今回G26ポートを使ってやってみたいと思います。
ジャンパーワイヤーを使いG26ポートにLEDを繋ぎ、GNDへと接続すれば回路は完成です。(1本抵抗を入れています)

MEMO
一般的なLEDは定格2.0V 20mAほどで動作します。
GPIOの出力電圧は、”1”(High)の状態で約3.3Vの電圧が出力されます。
そのため抵抗を入れて分圧し、抵抗側に1.3V(3.3V-2.0V)かかるようにしています。
抵抗値の計算はオームの法則で簡単に計算できます。
抵抗に掛かる電圧は1.3V、電流は20mAなので
抵抗:R=V(電圧)/I(電流)=3.3-2.0/0.02(20mA)=65Ωとなります。(ここでは100Ωの抵抗を使っています)

ブロックプログラムではこんな感じとなります。
これでG26に繋いだLEDを上写真のように点灯させることが出来ます。

さらにLチカ、点滅させるにはLEDを消灯(”0”出力)とタイマーブロックを組み合わせると簡単に出来ます。

今回G26ポートを使いましたが、他のポートも同様の手順で使うことができ(G36は入力専用なので今回の方法では使えません!)複数同時に点灯させることも出来ます。

こんな感じで2ポート(G0とG26を使用)を使えば交互にLEDを点灯させることも出来ます。

ブロックプログラムではこんな感じ。
簡単ですね!

また同じ方法でブザーに繋げれば、ブザーを鳴らすことも出来ます。(圧電ブザー使用)

LEDをPWM制御で点灯させてみる

Lチカの方法、なんとなくでも分かってもらえたでしょうか?
ブロック(Blockly)で組む方法として一番わかり易い方法でやってみましたが、他のブロックを使いポートのIN・OUTを切り替えたりとやり方はいろいろありそうです。

UIFlowだと直感的に出来るので、ブレッドボードやジャンパーワイヤーなどを使い実際にいろんなポートに繋いでやってみると分かりやすいかと思います。

そして折角なのでLEDを徐々に明るくしたり(暗くしたり)する方法もご紹介します。
PWM(Pulse Width Modulation)という制御方法を使います。

難しそうなのが出てきた!!
何か英語で書くと難しそうですが・・・
上記で説明したLEDの点滅にはデジタル出力(High or Low)だけだったので簡単だったんですが、LEDをゆっくり点灯(または消灯)させるアナログ的な動きをやる場合、少し面倒となります。(デジタル出力って1と0しかないから)

このPWMという制御方法はサーボを動かす時にも一般的に用いられています。
またDC(直流)モーターなんかでも使われています。

やっぱりM5StickCを使って何かやろうと思えば、サーボやモーターとかを使って動く何かを作ってみたいなんてイメージしませんか?
なるでしょ、やっぱり!

デジタル出力(High or Low)でアナログ的な動きをさせようと思うと少し工夫が必要です。
例えばDCモーターの回転速度を調整する場合、普通はモーターにかかる電圧を上下させて回転数を変えるわけですが、これがデジタルだとなかなか厄介な作業となります。
M5StickCのGPIOのデジタル出力はHighの3.3VとLowの0Vの2パターンしかありません。

そこで便利な制御法がPWMという方法です。
ここでは簡単に概要だけご紹介したいと思います。
デジタル信号なのでHighかLowの方形波で出力されますが、この周期にあるHighの時間の割合:デューティー比を変える事により可能となります。

簡単に言うとデューティー比50%では1周期の中にHighの時間が50%のパルス(OFFの時間も50%)となり、出力(実効値)は半分に出来ると言うもの。
HとLの平均を取った感じといった方が分かりやすいですかね?

そしてデューティー比を高くしていくと(ONの幅を広く)、出力電圧は上がっていきます。
デジタル出力なのにアナログ的なことが出来る感じですね。

サーボの制御なんかも一般的にはこの方法でサーボが動く角度を決めています。
何か難しそうですね!
実際にサーボを動かす場合はこのデューティー比の計算少し面倒かもしれませんが、LEDの場合は非常に簡単です。
単純にLEDにかける電圧を0〜100%で指定してやるだけです。

UIFlowにはPWM制御で使える便利なブロックが用意されています。
PWM制御で使えるブロックはこちら。
LED点灯の強さをデューティー比で指定してあげるだけで出来ます。

PWM出力ピンは(0〜4)まで任意に使えますが、今回PWM0にG26ポートを割り振りました。

MEMO
今回はテスト動作なので他の項目の、変更の必要は特にありません。

あとはLEDの光る強さ(デューティー比)だけを変えてあげるだけです。
今回、100%→60%→30%→0%で0.5秒間隔で暗くなっていくブロックを組んでみました。
簡単ですね!

LEDでは非常に簡単ですが、サーボを任意の角度まで動かそうと思うとこのデューティー比を計算して動かす形となります。

またご紹介しようと思いますが、PWMという制御方法があり実際に同様な回路を組んでみると理解も早いかと思います。

スターターキットがあると便利!

今回LEDを使って簡単なLチカをやってみました。
実際にM5StickCに回路を繋げたり、またセンサーやサーボなど動かすテストをやるにはブレッドボードやジャンパーワイヤー、抵抗やLEDなど手元にないとはじまりません。

個別でその都度必要な物を揃えていくのもいいのですが、電子工作をはじめるための基本的なものがセットになったスターターキットという便利なものも販売されています。

こちらはBanggoodさんにご提供頂いたものですが、今回使用したパーツが全て含まれています。
またArduino NANOやサーボ、スイッチなどいろいろと入っています。
まさにArduinoを始めるためのスターターキットとなり、M5StickCでいろいろ試すには便利なキットとなります。

電子工作や特にArduino関連のスターターキットは調べてみると多数販売されているようですね!
私がご提供して頂いたこちらのものはGeekcreitさんのものとなります。
Arduino関連の製品やセンサーなど多数取り扱いされているメーカーのようですね。
40種類以上のセンサーがセットになった製品もご提供して頂きましたが、いろいろ試すのに便利です。

またスターターキットではELEGOO製のものが有名なんでしょうか?Amazonでもよく見かけます。
スターターキットはこれから電子工作を始めるのに非常に便利なので、両方リンク貼っておきます。

はじめてだとなかなか何が必要なのか手探り状態だと思いますが、はじめるにあたりある程度必要なものがセットになっているのでいいかもしれませんね!
こちらもまた詳しくご紹介したいと思います。

最後に!

今回LEDを点灯や点滅させるという非常にシンプルで地味な作業をやってみましたが、実際に簡単な回路を組んで繋げながらブロック(プログラム)を組んでいくと楽しく、理解も深まります。

そしてこういった地味作業で理解を深めつつ、M5StickCを乗っけて動かせるキット的なものも販売されているので実際に動かしてみると非常に楽しくなってくるかと思います。

コメントを残す