license.Summary【ゆるファブレシピ】Arduinoを使ってLEDを光らせたり、モーターを動かしたり、センサーで計測したりしてみましょう。(0)MaterialsToolsBlueprintsMakingArduinoの基本0Arduinoとは入出力ポートがあるマイコンボードです。プログラムを書いて、センサーの値を読み込んだり、モーターを動かしたり、LEDを光らせたりと電子工作といわれることが簡単にできます。Commentsソフトウェアのダウンロードとインストール0Arduinoのプログラムを作成するソフトウェアはAruinoのサイトからダウンロードできます。OSにあったものをダウンロードして、インストールしてください。CommentsArduinoとPCの接続0ArduinoとPCをUSBケーブルで接続します。Comments設定1:ボードを設定0Arduinoにはいろんな種類があります。どの種類のArduinoを使うかの設定はツールから設定できます。UNO]を選択します。Comments設定2:シリアルポート0[ツール]→[シリアルポート]で接続したUSBを選択します。Windowsの場合はCOM1,COM2と表示されるので、適切なものを選択してください。CommentsArduino互換機を使っている場合0チップがCH340GのArduino互換機を使っている場合で使用OSがwin7、8の場合ドライバーをインストールする必要があります。(ここを参考にしましょう)win10の場合は挿せば認識されるはずです。macの場合はドライバを入れたらクラッシュする事例などもあるので、初心者の方は互換機の使用を避けた方がいいかもしれません。OrderLチカ0まずは、LEDを光らせてみましょう。LEDをチカチカさせることをLチカといいます。CommentsLEDのプラス、マイナス0LEDは長い方が+、短い方がーです。+はアノードーはカソードといいます。CommentsLEDをArduinoにさす0LEDの長い方(+)を13番ピン短い方(ー)をGNDに挿入します。CommentsLチカプログラムを書き込む0下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。{}Arduinoのスケッチを作成するとという2つのプログラムがもともと書いてあります。setupは最初に一回だけ実行されるプログラムloopはずっと繰り返し実行されるプログラムです。}の間がそれぞれのプログラムになります。Commentsポイント2:約束事0ダンロードしたプログラムの中をみると、ところどころに;(セミコロン)があります。Arduinoでは基本的に命令文の最後には;(セミコロン)をつけます※ただし、ifやforのように{}でくくるループや条件分岐の場合は除きます。・pinMode:指定したピンを入力用に使うのか、出力用に使うのかを設定する今回はLEDを点灯させるために13番ピンから電気を流したい(出力したい)ので、pinMode(13,OUTPUT);・digitalWrite:デジタルピンの出力をLOWかHIGHで設定します。LOW→0VHIGH→5Vが出力されます。digitalWrite(HIGH)でLEDがつくdigitalWrite(LOW)でLEDが消える事になります。Commentsポイント4:delay0delayはしていした時間待つ命令です。単位はミリ秒(ms)です。(1000/1000=1)delay(100)→0.1秒待つ(100/1000=0.1)delay(10)→0.01秒待つ(10/1000=0.01)LEDを高速で点滅させると、点滅しているかわからないので、ある程度の間隔をおいてHIGHとLOWを切り替えます。Order明るさセンサー(CdS)で明るさを測定する0Comments配線0ブレッドボードを使ってArduinoの5Vー10kΩの抵抗ーCdSセルーArduinoのGNDの流れができるような配線をします。その後、10kΩの抵抗とCdSセルが繋がっている列からArduinoのA1ピンに配線します。Commentsプログラムを書き込む0下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。Cdstest.inoCommentsシリアルモニタで数値を確認0図の赤枠の部分を押すとシリアルモニタが表示されるので、明るさセンサーで観測された値が表示されます。暗くすると、数値が大きくなります。Commentsシリアルモニタの様子0Commentsポイント1:アナログ入力0デジタルは01の世界と言われますが、Arduinoの例でいうと0=0V(LOW)、1=5V(HIGH)です。Lチカの例で行ったデジタル出力は0Vか5Vのどっちかしかない出力です。アナログは連続した値です。0〜5Vの値の間のどの値でも取れます。今回の明るさセンサーは明るさ、暗さを数値で表したいのでアナログピンを使います。アナログ入力は0-5Vの入力電圧を0-1023の値に変換されます。0→0V1023→5Vval=analogRead(1);はアナログ1番ピン(A1)の値を読むことを意味しています。Orderサーボモータを動かす0サーボモータは回転角度などを簡単に制御できるモーターです。今回の例ではサーボモータはSG90というものを使います。CommentsArduioとの接続0ジャンパワイヤを使ってSG90の茶色をArduinoのGNDSG90の赤色をArduinoの5VSG90ののオレンジをArduinoの11番ピンに接続します。どこにさせばいいかというのは製品のデータシートをみるようにしましょう。Commentsプログラムを書き込む0下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。Servo_test.inoCommentsポイント1:ライブラリの利用0サーボモータを動かすためのプログラムを1から自分で書くと、実はちょっと大変です。Arduinoにはサーボモータを簡単に動かすためのライブラリというものがあり、それを取り込む(インクルード)することによって、簡単なプログラムでサーボモータを動かせます。<Servo.h>はサーボモータのライブラリをインクルードしたことを意味しています。Commentsポイント2:変数0変数というのは名前付きの箱です。deg:という命令文がありますが、これはdegという整数(int)を入れる箱を準備し、まず初期値として0を入れたという命令文になります。このようにコンピュータに名前付きの箱を準備することを、変数を宣言するといいます。degはサーボモータの角度を指定する際に使っています。=0;という記述があります。これはdegという箱の中に0を入れるという命令です。変数の中に値を入れることを値の代入といいます。「11番ピンをサーボモータに接続するよ!」という意味です。これは特殊な書き方で、基本文法ではありません。いうものだと思ってください。Commentsポイント5:条件分岐(if文)0if文がプログラムを書く際に多用する文法です。〜だったら、どうするというように条件を指定して、命令を実行する際に使います。(deg>180){deg=0;}という記述はもしdegが180より大きい値になったら、degを0にするという意味です。SG90というサーボモータは0〜180°までの間しか動かないので、角度を指定する際に180より大きい値を指定しないようにするための命令です。Commentsポイント6:サーボモータの角度指定0myservo.write(deg);という記述でmyservoという名前のサーボモータに角度を指定して、その角度にサーボヘッドを動かします。Commentsポイント7:インクリメント0deg++;という記述はdegという変数に入っている値を1増やすという意味になります。deg=deg+1;と記述しても構いません。Order暗くなったらLEDを点灯させる例0Comments配線0LEDの例と明るさセンサーの例とおなじようにLED,明るさセンサーを配線します。Commentsプログラムの書き込み0下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。CdS_LED.ino暗くなったら、LEDが点灯します。(100を閾値にしているので、環境によってこの数値を変えてください。Order暗くなったらサーボモータを動かす0Comments配線0Commentsプログラムの書き込み0下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。ServoCds.ino暗くなったら、サーボモーターが動きます。(100を閾値にしているので、環境によってこの数値を変えてください。一周で60秒測ってくれます。インスタントラーメンなら巻き戻し音を3回聞いたら食べごろです。光に反応するひまわり光センサーを使って、モーターの角度を制御されたひまわりです。健気に動くひまわりが可愛いです。乗客の影をセンサーに感知され、乗車状況に応じて、必要な枚数を出す整理券発券機フィギュア回してくれるやつモーターを使って、フィギュアを回してくれるやつを作りました。このフィギュアは3Dプリントしたドラムぇもんです。(こっちのが時間かかりました)まぶしい!常に瞬きをしており、まぶしい時には目を瞑ります。