Arduinoを使ってみる

Created Date: 2018-10-25/ updated date: 2018-11-06
  • Medium img 0100
Owner & Collaborators
License
By
Summary
【ゆるファブレシピ】Arduinoを使ってLEDを光らせたり、モーターを動かしたり、センサーで計測したりしてみましょう。

Materials

    Tools

      Blueprints

        Making

        • Arduinoの基本

          0
          Thumb 17121761 595368707326938 736807872 o
          Arduinoとは入出力ポートがあるマイコンボードです。
          プログラムを書いて、センサーの値を読み込んだり、モーターを動かしたり、LEDを光らせたりと電子工作といわれることが簡単にできます。
          • ソフトウェアのダウンロードとインストール

            0
            Thumb 17121761 595368707326938 736807872 o
            Arduinoのプログラムを作成するソフトウェアはAruinoのサイトからダウンロードできます。
            OSにあったものをダウンロードして、インストールしてください。
            Small           2018 10 25 14.05.29
          • ArduinoとPCの接続

            0
            Thumb 17121761 595368707326938 736807872 o
            ArduinoとPCをUSBケーブルで接続します。
          • 設定1:ボードを設定

            0
            Thumb 17121761 595368707326938 736807872 o
            Arduinoにはいろんな種類があります。どの種類のArduinoを使うかの設定はツールから設定できます。
            初めて使う人がよく使うArduino UNOの場合、
            [ツール]→[ボード]→[Arduino UNO/ Genuino UNO]を選択します。
            Small           2018 10 25 14.01.00
          • 設定2:シリアルポート

            0
            Thumb 17121761 595368707326938 736807872 o
            [ツール]→[シリアルポート]で接続したUSBを選択します。
            Windowsの場合はCOM1,COM2と表示されるので、適切なものを選択してください。
            Small           2018 10 25 14.10.25
          • Arduino互換機を使っている場合

            0
            Thumb 17121761 595368707326938 736807872 o
            チップがCH340GのArduino互換機を使っている場合で使用OSがwin7、8の場合ドライバーをインストールする必要があります。(ここを参考にしましょう)win10の場合は挿せば認識されるはずです。
            macの場合はドライバを入れたらクラッシュする事例などもあるので、初心者の方は互換機の使用を避けた方がいいかもしれません。

        • Lチカ

          0
          Thumb 17121761 595368707326938 736807872 o
          まずは、LEDを光らせてみましょう。LEDをチカチカさせることをLチカといいます。
          • LEDのプラス、マイナス

            0
            Thumb 17121761 595368707326938 736807872 o
            LEDは長い方が+、短い方がーです。
            +はアノード
            ーはカソード
            といいます。

            Small img 0101
          • LEDをArduinoにさす

            0
            Thumb 17121761 595368707326938 736807872 o
            LEDの
            長い方(+)を13番ピン
            短い方(ー)をGNDに
            挿入します。
            Small img 0102
          • Lチカプログラムを書き込む

            0
            Thumb 17121761 595368707326938 736807872 o
            下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
          • ポイント1:setupとloop

            0
            Thumb 17121761 595368707326938 736807872 o
            void setup() {
            }
            void loop() {
            }
            Arduinoのスケッチを作成するとという2つのプログラムがもともと書いてあります。

            setupは最初に一回だけ実行されるプログラム
            loopはずっと繰り返し実行されるプログラム
            です。
            { 〜 }の間がそれぞれのプログラムになります。
          • ポイント2:約束事

            0
            Thumb 17121761 595368707326938 736807872 o
            ダンロードしたプログラムの中をみると、ところどころに;(セミコロン)があります。
            Arduinoでは基本的に命令文の最後には;(セミコロン)をつけます

            ※ただし、ifやforのように{}でくくるループや条件分岐の場合は除きます。
          • ポイント3:ピンの設定と出力

            0
            Thumb 17121761 595368707326938 736807872 o
            デジタルピン(1〜13)の設定
            pinMode:指定したピンを入力用に使うのか、出力用に使うのかを設定する
            今回はLEDを点灯させるために13番ピンから電気を流したい(出力したい)ので、
            pinMode(13,OUTPUT);

            digitalWrite:デジタルピンの出力をLOWかHIGHで設定します。
            LOW→0V
            HIGH→5V
            が出力されます。
            つまり、
            digitalWrite(HIGH)でLEDがつく
            digitalWrite(LOW)でLEDが消える
            事になります。



          • ポイント4:delay

            0
            Thumb 17121761 595368707326938 736807872 o
            delayはしていした時間待つ命令です。
            単位はミリ秒(ms)です。
            例)
            delay(1000)→1秒待つ (1000/1000=1)
            delay(100)→0.1秒待つ(100/1000=0.1)
            delay(10)→0.01秒待つ(10/1000=0.01)

            LEDを高速で点滅させると、点滅しているかわからないので、ある程度の間隔をおいてHIGHとLOWを切り替えます。
        • サーボモータを動かす

          0
          Thumb 17121761 595368707326938 736807872 o
          サーボモータは回転角度などを簡単に制御できるモーターです。今回の例ではサーボモータはSG90というものを使います。
          • Arduioとの接続

            0
            Thumb 17121761 595368707326938 736807872 o
            ジャンパワイヤを使って
            SG90の茶色をArduinoのGND
            SG90の赤色をArduinoの5V
            SG90ののオレンジをArduinoの11番ピン
            に接続します。

            どこにさせばいいかというのは製品のデータシートをみるようにしましょう。
            Small img 0103
          • プログラムを書き込む

            0
            Thumb 17121761 595368707326938 736807872 o
            下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
          • ポイント1:ライブラリの利用

            0
            Thumb 17121761 595368707326938 736807872 o
            サーボモータを動かすためのプログラムを1から自分で書くと、実はちょっと大変です。Arduinoにはサーボモータを簡単に動かすためのライブラリというものがあり、それを取り込む(インクルード)することによって、簡単なプログラムでサーボモータを動かせます。
            サンプルプログラム冒頭の

            #include <Servo.h>

            はサーボモータのライブラリをインクルードしたことを意味しています。

          • ポイント2:変数

            0
            Thumb 17121761 595368707326938 736807872 o
            変数というのは名前付きの箱です。

            int deg:

            という命令文がありますが、これは
            degという整数(int)を入れる箱を準備し、まず初期値として0を入れたという命令文になります。このようにコンピュータに名前付きの箱を準備することを、変数を宣言するといいます。
            degはサーボモータの角度を指定する際に使っています。

            Servo myservo;

            もmyservoというサーボモータ(Servo)を入れるための箱(変数です)
          • ポイント3:変数に値を入れる(値の代入)

            0
            Thumb 17121761 595368707326938 736807872 o
            setupの中に
            deg =0;
            という記述があります。
            これはdegという箱の中に0を入れるという命令です。
            変数の中に値を入れることを値の代入といいます。

          • ポイント4:サーボモータをアタッチ

            0
            Thumb 17121761 595368707326938 736807872 o
            myservo.attach(11);
            と命令文がありますが、
            「11番ピンをサーボモータの制御に使うよ!」
            「11番ピンをサーボモータに接続するよ!」
            という意味です。

            これは特殊な書き方で、基本文法ではありません。
            ですので、こういうものだと思ってください。


          • ポイント5:条件分岐(if文)

            0
            Thumb 17121761 595368707326938 736807872 o
            if文がプログラムを書く際に多用する文法です。
            もし〜だったら、どうする
            というように条件を指定して、命令を実行する際に使います。

             if (deg>180){
                deg=0;
              }

            という記述はもし
            degが180より大きい値になったら、degを0にする
            という意味です。
            SG90というサーボモータは0〜180°までの間しか動かないので、角度を指定する際に180より大きい値を指定しないようにするための命令です。

          • ポイント6:サーボモータの角度指定

            0
            Thumb 17121761 595368707326938 736807872 o
            myservo.write(deg);
            という記述で
            myservoという名前のサーボモータに角度を指定して、その角度にサーボヘッドを動かします。
          • ポイント7:インクリメント

            0
            Thumb 17121761 595368707326938 736807872 o
            deg++;

            という記述はdegという変数に入っている値を1増やすという意味になります。

            deg=deg+1;

            と記述しても構いません。
        • 明るさセンサー(CdS)で明るさを測定する

          0
          Thumb 17121761 595368707326938 736807872 o

          • 配線

            0
            Thumb 17121761 595368707326938 736807872 o
            ブレッドボードを使って
            Arduinoの5Vー10kΩの抵抗ーCdSセルーArduinoのGND
            の流れができるような配線をします。
            その後、10kΩの抵抗とCdSセルが繋がっている列からArduinoのA1ピンに配線します。
            Small img 0104
          • プログラムを書き込む

            0
            Thumb 17121761 595368707326938 736807872 o
            下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
          • シリアルモニタで数値を確認

            0
            Thumb 17121761 595368707326938 736807872 o
            図の赤枠の部分を押すとシリアルモニタが表示されるので、明るさセンサーで観測された値が表示されます。
            暗くすると、数値が大きくなります。
            Small           2018 10 25 14.41.03
          • シリアルモニタの様子

            0
            Thumb 17121761 595368707326938 736807872 o

            Small           2018 10 25 14.44.40
          • ポイント1:アナログ入力

            0
            Thumb 17121761 595368707326938 736807872 o
            デジタルは01の世界と言われますが、Arduinoの例でいうと0=0V(LOW)、1=5V(HIGH)です。
            つまり、Lチカの例で行ったデジタル出力は0Vか5Vのどっちかしかない出力です。
            しかし、アナログは連続した値です。0〜5Vの値の間のどの値でも取れます。
            今回の明るさセンサーは明るさ、暗さを数値で表したいのでアナログピンを使います。
            ただし、アナログ入力は0-5Vの入力電圧を0-1023の値に変換されます。
            0→0V
            1023→5V

            val=analogRead(1);
            はアナログ1番ピン(A1)の値を読むことを意味しています。

        • 暗くなったらLEDを点灯させる例

          0
          Thumb 17121761 595368707326938 736807872 o

          • 配線

            0
            Thumb 17121761 595368707326938 736807872 o
             LEDの例と明るさセンサーの例とおなじようにLED,明るさセンサーを配線します。
            Small img 0105
          • プログラムの書き込み

            0
            Thumb 17121761 595368707326938 736807872 o
            下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
            暗くなったら、LEDが点灯します。(100を閾値にしているので、環境によってこの数値を変えてください。)

        • 暗くなったらサーボモータを動かす

          0
          Thumb 17121761 595368707326938 736807872 o

          • 配線

            0
            Thumb 17121761 595368707326938 736807872 o

            Small img 0106
          • プログラムの書き込み

            0
            Thumb 17121761 595368707326938 736807872 o
            下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
            暗くなったら、サーボモーターが動きます。(100を閾値にしているので、環境によってこの数値を変えてください。)

        • シェアしよう!

          0
          Thumb 17121761 595368707326938 736807872 o
          Arduinoを使って作ったものをUsagesでシェアしよう!動画の方がわかりやすいよ!
          Add Card Order

          References

            Usages

            • 1分タイマー

              Thumb 39932426
              一周で60秒測ってくれます。インスタントラーメンなら巻き戻し音を3回聞いたら食べごろです。
            • 光に反応するひまわり

              Thumb 43777787
              光センサーを使って、モーターの角度を制御されたひまわりです。
              健気に動くひまわりが可愛いです。
            • 明るさ指標

              Thumb 43746184
              子供の頃とかに部屋をもっと明るくしなさいと言われたことを思い出して作りました
            • 需要に応じる整理券発券機

              Thumb logo 2018
              乗客の影をセンサーに感知され、乗車状況に応じて、必要な枚数を出す整理券発券機
            • フィギュア回してくれるやつ

              Thumb 39932408
              モーターを使って、フィギュアを回してくれるやつを作りました。
              このフィギュアは3Dプリントしたドラムぇもんです。(こっちのが時間かかりました)
            • まぶしい!

              Thumb 17633449
              常に瞬きをしており、まぶしい時には目を瞑ります。
            Convert State

             to Annotation.

            Select the numebr of the state to annotate.

            OK
            cancel
            Loading

            facebook

            , data-width="400", data-show-faces="true" data-send="true"
            , data-width="400", data-order-by="reverse_time"