Arduinoの基本

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

ソフトウェアのダウンロードとインストール

Arduinoのプログラムを作成するソフトウェアはAruinoのサイトからダウンロードできます。
OSにあったものをダウンロードして、インストールしてください。

ArduinoとPCの接続

ArduinoとPCをUSBケーブルで接続します。

設定1:ボードを設定

Arduinoにはいろんな種類があります。どの種類のArduinoを使うかの設定はツールから設定できます。
初めて使う人がよく使うArduino UNOの場合、
[ツール]→[ボード]→[Arduino UNO/ Genuino UNO]を選択します。

設定2:シリアルポート

[ツール]→[シリアルポート]で接続したUSBを選択します。
Windowsの場合はCOM1,COM2と表示されるので、適切なものを選択してください。

Arduino互換機を使っている場合

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

Lチカ

まずは、LEDを光らせてみましょう。LEDをチカチカさせることをLチカといいます。

LEDのプラス、マイナス

LEDは長い方が+、短い方がーです。
+はアノード
ーはカソード
といいます。

LEDをArduinoにさす

LEDの
長い方(+)を13番ピン
短い方(ー)をGNDに
挿入します。

Lチカプログラムを書き込む

下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
LEDtest.ino

ポイント1:setupとloop

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

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

ポイント2:約束事

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

※ただし、ifやforのように{}でくくるループや条件分岐の場合は除きます。

ポイント3:ピンの設定と出力

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

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



ポイント4:delay

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を切り替えます。

明るさセンサー(CdS)で明るさを測定する


配線

ブレッドボードを使って
Arduinoの5Vー10kΩの抵抗ーCdSセルーArduinoのGND
の流れができるような配線をします。
その後、10kΩの抵抗とCdSセルが繋がっている列からArduinoのA1ピンに配線します。

プログラムを書き込む

下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
Cdstest.ino

シリアルモニタで数値を確認

図の赤枠の部分を押すとシリアルモニタが表示されるので、明るさセンサーで観測された値が表示されます。
暗くすると、数値が大きくなります。

シリアルモニタの様子


ポイント1:アナログ入力

デジタルは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)の値を読むことを意味しています。

サーボモータを動かす

サーボモータは回転角度などを簡単に制御できるモーターです。今回の例ではサーボモータはSG90というものを使います。

Arduioとの接続

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

どこにさせばいいかというのは製品のデータシートをみるようにしましょう。

プログラムを書き込む

下記のファイルをダウンロードし、Arduinoに書き込んでみましょう。
Servo_test.ino

ポイント1:ライブラリの利用

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

#include <Servo.h>

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

ポイント2:変数

変数というのは名前付きの箱です。

int deg:

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

Servo myservo;

もmyservoというサーボモータ(Servo)を入れるための箱(変数です)

ポイント3:変数に値を入れる(値の代入)

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

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

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

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


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

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

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

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

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

myservo.write(deg);
という記述で
myservoという名前のサーボモータに角度を指定して、その角度にサーボヘッドを動かします。

ポイント7:インクリメント

deg++;

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

deg=deg+1;

と記述しても構いません。

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


配線

 LEDの例と明るさセンサーの例とおなじようにLED,明るさセンサーを配線します。

プログラムの書き込み

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

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


配線


プログラムの書き込み

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

シェアしよう!

Arduinoを使って作ったものをUsagesでシェアしよう!動画の方がわかりやすいよ!