こんにちは!や~べ~です。今回は、モーター制御にも通じる!Arduino(アルディーノ、アルドゥイーノ?、アルデュイーノ?)とエンコーダーを使ったオモシロIoT工作&プログラムまとめ、ということで記事を書いていきたいと思います。本格的にモーターを制御する為には、エンコーダー以外にも電流値などをセンシングする必要があると思いますが、今回はエンコーダーに焦点を当てて記事を作成していきたいと思います。している紙などの長さ、車輪などが転がった距離など、を算出することができます。ラジコンの駆動モーターにエンコーダーが付属してるモーターを使用すれば、Arduino(アルドゥイーノ)にその情報を入力することで、モーターの回転数、速度などを算出することができます。(クルマの車速なども同じような考え方で検出&算出しています!)※モーターの制御には、「PWM制御」などの、モーター制御方法の理解も必要だと思いますが、今回は割愛させていただきます。_)>まずは、先日見つけた、ロータリーエンコーダーを使ったちょっと面白いIoTガジェット工作例の話から行きたいと思います。先日、Arduino(アルドゥイーノ)関連の記事を漁っていると。Shield」を追加し、マウスから入手した「ロータリエンコーダ」をトイレに設置、その「ロータリエンコーダ」のセンサー信号をキャプチャし、トイレットペーパーの使用量を検出、さらに検出した数値をもとに、ツイッターbotから全世界へ向けて発信していくと言う、シンプルな構成でありながら、面白IoTガジェットとして、発想をしっかりと具現化できている代物でした。(*^▽^*)個人で自作してしまうあたり、かなりのツワモノだと思います。Shield」の販売が終了してしまっているようなので、他の汎用Wi-Fiモジュール↓を使って、ネット接続&無線化を行っていく方が現実的のようです。日本国内の技適も取得しており安心して使用できます。数百円とリーズナブル!「ESP-WROOM-02」の接続方法や通信に関するプログラミング方法は、↓の記事を参考にして下さい。(Arduino)1-2.ロータリーエンコーダーの入手方法ロータリーエンコーダーは、使い古したマウスか、リサイクルショップなどでジャンク扱いになってるマウスを分解して準備すれば、充分だと思います。[電子回路]分解後、ロータリーエンコーダーからの「A相」、「B相」、「GND」の3本の配線をはんだづけなどで延長する必要があると思います。1-3.ロータリーエンコーダーからArduinoへの配線方法ロータリーエンコーダーからの「A相」「B相」の2つのパルス信号は、いつも決まって「90°ずれて」それぞれ出力されるので、どちらのパルスが先に出力されたかを検出することによって、回転方向をセンシングすることができます。(↓図参照方)(※↑ここでは簡単に説明してますが、厳密にはもう少し複雑な説明が必要かもしれません。「【Arduino】マウスホイール(ロータリーエンコーダ)の回転量を取得する」よりhttp://nn-hokuson.hatenablog.com/entry/2017/03/26/102145↑エンコーダー逆転時はB相が90°早いタイミングで出力される構造になっています!さらに「A相」「B相」それぞれのパルスは、出力する間隔(角度)が決まっているので、パルスの数を数えることによって、回転量(今回は、トイレットペーパーに密着させるので、引き出したペーパーの長さ)をセンシングすることができます。このエンコーダーのパルスをArduinoで検出・計算させる為には、「attachInterrupt」という、「外部割り込み」機能を使用して、プログラミングする必要があります。UNO」で、この「外部割り込み」機能に使用できるピンは、「デジタル2番、3番」になるので、そこへロータリーエンコーダーからの「A相」、「B相」の配線を接続します。左から「A相」、「B相」、「GND」となっているようです。手順としては、机上でホイールを指で動かして、エンコーダーの動きとArduinoのプログラミング動作の確認ができたら、最後に、ホイールの表面がトイレットペーパーの表面に当たるように固定すると良いと思います。Wi-Fi接続関連のハードルが少し高いかもしれませんが、エンコーダー部分の配線等に関しては結構簡単にできてしまいそうですよね!(*^▽^*)ここまでは、「トイレットペーパー使用量報告bot」のエンコーダ入手方法や配線の解説をさせていただきました。続いて、肝心のプログラミング内容の解説を少ししていきたいと思います。スポンサーリンク2.「トイレットペーパー使用量報告bot」のArduino(アルドゥイーノ)プログラミング解説まずは、プログラムの全体です。Arduinoのプログラミングを補助してくれる初期設定ファイルを読み込む命令が書いてあります。使用する機能や関数によって、必要なものを選んで読み込みます。0;↑変数の初期設定をしています。変数というのは、センサ情報などのデータを忘れないように保存しておく「バケツ」のようなものです。「int」「long」という最初のアルファベットの文字列でデータのサイズを決めていて、続いて変数の名前を登録しています。初期値が定まっていないと、プログラムスタート時にプログラムが暴走して、意図しない動きをする可能性があるので、すべての変数に初期値を設定しています。CHANGE);}↑プログラムがスタートしたら1度だけ実行される「セットアップ」を行う関数です。(プログラムは、基本、書いたプログラムの上から順番に下に向かって1行づつ実行していきます。)ピンの入出力の選択、ピンのプルアップ設定、外部割込みの設定などを行っています。encoderValue;}delay(1000);}↑このループ(loop)関数に書いてあるプログラムがメインとなるプログラムになります。この関数内に書いてあるプログラムを、上から順番に1行づつ実行して、一番下まで行ったら、また再度一番上に戻って、電源が切れるまで実行しつづけます。内容としては、エンコーダーの信号から計算して、ある長さ以上トイレットペーパーが引き出されて、ペーパーの動きが止まったら、使用した長さをツイートする、という内容です。encoded;}↑この関数では、エンコーダーの正転、逆転を判断し、パルスをカウントします。※エンコーダー出力に変化があった時に、割り込んで、他のプログラムよりも優先して処理されます。(処理後は、再度もとの行に戻って、プログラムを実行します。failed.");}}↑ツイートを実行するプログラムです。ループ関数の中で、呼び出されています。́∀`*)Arduinoのプログラミングをする場合には、基本的には、この順番(ヘッダー呼び出し⇒変数の初期設定⇒セットアップ⇒ループ関数、その他の関数)で書いておくと良いと思います。※C言語を使ったマイコンプログラミングでも、ほぼ同じような順番でプログラムを書いていきます。Shield」ではなく、「ESP-WROOM-02」を使用することになると思うので、初期設定やツイートを実行する関数などは、参考にできない部分があると思います。Arduino最後に、ロータリーエンコーダーの原理と構造、上手な使い方についてまとめていきたと思います。スポンサーリンク3.ロータリーエンコーダーの原理と構造、上手な使い方についてロータリーエンコーダーには、大きく分けると「インクリメンタル型」と「アブソリュート型」の2種類があります。どちらの型も、片側から光を投射して、規則的にスリット(穴)の開いた回転する円盤を通過して検出される、光のON・OFF信号を利用したものが主流になっています。※使用環境の厳しいクルマの車輪などには、ABSなどの高度な制御を行う為のセンサとして、光学的ではなく磁力を使ったメカ的なエンコーダーが使われることもあります。「インクリメンタル型」は、発光ダイオードなどで発光した光が、円盤のスリットを通過して、フォトトランジスタで検出される単純な構造となっています。「ロータリーエンコーダー編(原理と構造)」よりhttp://www.fa.omron.co.jp/guide/special/knowledge/re/principle_structure.html実際に、プログラミングする際には、先ほどの「トイレットペーパー使用量報告bot」での使用方法と同様に、パルスを検出するプログラムを記述する必要があります。updateEncoder()の部分。3-2.「アブソリュート型」ロータリーエンコーダーの原理と構造スリットを透過させた光のON・OFF信号を利用する基本的な考え方は「インクリメンタル型」と同様ですが、構造的に、光源、センサ、スリットがそれぞれ複数存在することが大きな違いになります。複数のスリットを透過した光が、複数のセンサで検出されると、エンコーダーの回転角度(現在位置)を「グレイコード」と呼ばれる「2進数」の一種で表現できるようになっています。「インクリメンタル型」で必要だったArduinoでのパルスカウントが不要で、エンコーダーからの情報がそのまま角度情報として使えます。(「グレイコード」の変換は必要だと思います。)エンコーダーのスリット盤面に、直に、数字で「角度」情報が書かれているようなものなので、それを常に監視すれば、いつでもエンコーダーの絶対角度を検出することができます。「ロータリーエンコーダー編(原理と構造)」よりhttp://www.fa.omron.co.jp/guide/special/knowledge/re/principle_structure.htmlエンコーダーパルスをカウントするプログラムを記述する必要はありませんが、回転数などの情報が必要となる場合には、エンコーダーの情報をカウントアップ、またはダウンしていく関数が必要だと思います。きベルトによる伝達」、「歯車による伝達」、「フレキシブルカップリングによる駆動」の4つの方法が主に使われます。今回紹介した「トイレットペーパー使用量報告bot」では、「直接駆動」でローターリーエンコーダーを使用しています。「ロータリエンコーダ編(上手な使い方)」よりhttp://www.fa.omron.co.jp/guide/special/knowledge/re/good_usage.htmlその他、参考にさせていただいた「Arduino&エンコーダー」関連の記事です。昨今問題になっている、「老人の一人暮らしの安否確認」の手段の一つとしても、「使えるIoTガジェット」になり得るのではないかと思います。遠方に高齢の親御さんがいて一人で生活している場合など、普通に日常生活で行っていることが、特別な操作をしなくても安否の情報として受け取ることができれば、心配な気持ちが少しでも和らぐのではないかと思います。(#^.^#)(もちろん、この仕様のままではプライバシーに関わってしまう部分もあると思うので、色々と試行錯誤は必要だと思いますが。巷で流行っているArduinoですが、まずどのタイプのものを選んだらいいか迷ってしまうと思います。Arduino(アルディーノ)シリーズ23種類の価格、スペック、まとめ一覧表これからArduino(アルディーノ)を使ってみようと考えてる方、既に使っていて他に便利な使い方がないかと思っている方はこちらの記事もどうぞ↓こんな使い方があった!Arduino(アルディーノ)完全攻略。・嫁の遺伝子検査結果をコソッと紹介(笑)GeneLife(ジーンライフ)の肥満遺伝子検査DIET(ダイエット)を試してみた結果。スポンサーリンクこちらの記事もよく読まれています。↓(※広告含む)最後までお読みいただいて、ありがとうございます。@share_labFeedly、RSS、Push7はこちら!!Line@はこちら!!Arduinoまとめガジェット投稿ナビゲーション前の投稿ブログアフィリエイト初心者必見!収入が年間20万円以下の場合は確定申告不要だって知ってる?次の投稿日頃の感謝を込めて。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト人気記事週間TOP15こんな使い方があった!Arduino(アルディーノ)完全攻略。92ビューあれっ!?おかしいなぁ。(1)「Arduino」の人気記事(月間TOP10)徹底比較。734ビューこんな使い方があった!Arduino(アルディーノ)完全攻略。30ビューみんなのひらめきをカタチにしよう!@愛知県豊橋市。みなラボは、初心者の方にも分かり易いデジタルものづくり技術ブログを目指しています。管理人プロフィール名前:や~べ~新しいものづくりのカタチを探す、町工場の一社員。様々なアイデアをカタチにしていきます。「永遠に生きるかのように学べ。明日死ぬかのように生きろ。「あきらめたらそこで試合終了ですよ。「みなラボ」にアクセスいただいてありがとうございます!町工場の一社員や~べ~が新しいものづくりのカタチを模索する日々の中で、学んだこと、感じたこと、思ったことなどを書き綴ってます。