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

【Arduino入門編①】ArduinoでLEDを点滅(Lチカ)させてみる!Arduinoの基本となるデジタル出力の解説その①

これからArduinoを使いサーボモーターを動かしたり、またセンサーの情報を取得したりして何かしようと考えるとアナログやデジタルの入出力ピンに関して理解しないと進めることが出来ません。

Arduino(こちらではArduino UNOを使用)にはデジタル入出力端子としてD0〜D13までの14本、アナログ入力端子としてA0〜A5までの6本の端子が用意されています。

これらデジタル&アナログ端子の使い方をまず理解する事がArduino学習の第一歩だと思います。

今回、LEDの点滅という非常に簡単なスケッチ(プログラム)を使いデジタルピンの使い方を紹介したいと思います。

Arduinoでボード搭載LEDを点灯(点滅)させてみる!

今回の目標

Arduino UNOを使いLEDを点灯や点滅させてみる(Lチカと呼ばれるもの)のが今回の目標となります。
Lチカと言えばArduinoを使って始める第一歩、みなさんまずはここからトライされているかと思います。

LEDを点灯させる方法は多数ありますが、今回は最も基本となるデジタル出力を使いArduino UNOに内蔵されているLED(ビルトインLED)を点滅させてみたいと思います。

またアナログ出力(PWM)での点灯方法もあり、これを使えばLEDを点灯・消灯だけでなく徐々に暗くしたりや50%で光らせたりとアナログ的な点灯も出来ますが、順を追って今後ご紹介できればと思います。

使用スケッチ

Arduino IDEには標準でサンプルスケッチ(プログラム)がインストールされています。
今回はArduinoボード上のLED(ビルトインされているLED)を点滅させるサンプルスケッチ【Blink】を使ってやっていきたいと思います。

Arduino IDEサンプルスケッチのロードは、[ファイル]→[スケッチ例]→[01.Basics]→[Blink]から行います。

分かりやすいようにプログラム本体の部分だけ抜き出し、コメント部分を日本語化しましたこちらのスケッチで進めていきます。(コピペで使って下さい)

スケッチ(プログラム)解説

簡単なスケッチ(プログラム)となりますが、使用している関数(コマンド)を中心に順を追って見ていきましょう。
出てくる関数を1つずつ確実に覚え何度も書いて実際に動かすことがArduino攻略の近道になるかと思います。

私も全くゼロの状態からArduinoの勉強をはじめましたが、自分への備忘録として当ブログでまとめていくことにしました。(すぐ忘れちゃうので!)

setup() 関数

【記述方法】
void setup() {

}

電源投入時やリセットスイッチが押された場合など1回だけ実行されるのがsetup()関数です。(voidとセットで使います)
変数やピンモードの初期化(準備)などに使用します。
つまりプログラムの初期設定を記載する場所となります。

記載方法は、void setup(){…}のように{ }で囲む形となります。

今回は、pinMode(LED_BUILTIN, OUTPUT);関数とセットで使いデジタル入出力ピンのモード設定(OUTPUT:出力に設定)で使っています。

特に記載するものがなくてもスケッチ内には必ず記述する必要があり省略することは出来ません。
記述するものがなければ、void setup(){}と記載。

loop() 関数

【記述方法】
void loop(){

}

setup()関数で初期設定後、 loop()関数内に実行したいプログラムを書きます。(voidとセットで使います)
setup()関数とは異なり、コマンドの実行が終了したらすぐに再実行され繰り返し実行されます。
プログラムのメイン実行部分となります。

pinMode 関数

Arduinoが持っているデジタル入出力ピンの設定を行います。
Arduino UNOのデジタルピン(D0〜D13)は入力用または出力用として使用する事が出来ます。
指定したデジタルピンをどちらのモードで使うか指定する関数となります。

【記述方法】

pinMode(pin,mode);

 

pin:設定したいピンの番号(0~13またはA0~A5)
mode:入力として使いたい場合「INPUT」、出力として使いたい場合は「OUTPUT」と記載。(INPUT_PULLUPというプルアップさせる機能もありますが、今回は割愛)

 

(記述例)pinMode(13,OUTPUT);

入力(INPUT)ではスイッチやセンサなどの電圧をArduinoに取り込み、LEDを点灯させたりサーボモーターなどを動かすには出力(OUTPUT)として電圧を出力します。

具体的にはArduino UNOの場合、D0〜D13までのデジタル入出力ピンがあります。
これを入力ポート(INPUT)として使うか、出力ポート(OUTPUT)として使うか設定(初期化)するという事です。

MEMO
また今回は割愛しますが、アナログ入力ピン(A0~A5)はデジタル出力ピンとして使うことも出来ます。
【例】アナログ入力ピンA0を使ってLEDを点灯させたい場合
pinMode(A0, OUTPUT);

今回使っているサンプルスケッチでは、使用ピン番号は「LED_BUILTIN」を出力(OUTPUT)として使うように記載しています。

この「LED_BUILTIN」とは、Arduinoボード上に標準で搭載されているLED(ビルトインされているLED)のことを指します。
実際にはArduino UNOの場合、D13ピンがこれにあたります。
少しややこしいですね!

「LED_BUILTIN」はD13ピンと同じとなります。
今回使っているサンプルスケッチは実際には、

pinMode(13, OUTPUT);

と記載しても動作は同じとなります。

このサンプルスケッチの場合、今回はArduino UNOボードを使っていますが違う種類のボードではこのピン番号が変わってきます。
どんなボードでも動くようにサンプルスケッチでは「LED_BUILTIN」が使われているようですね。
少しややこしいので実際には、pinMode(13, OUTPUT); のように記載した方が分かりやすいと思います。

Arduino UNOの場合「LED_BUILTIN」とD13ピンは同じなので、D13ピンにLEDを接続すれば(電圧制限用の抵抗も必要)Arduino UNOボード上のLEDも同時に点灯することとなります。

そしてsetup()関数内に記載し、ボード搭載のLED(D13ピン)を出力モードに設定しています。

digitalWrite 関数

指定したピンにHIGH(5V)またはLOW(0V)を出力します。

【記述方法】

digitalWrite(pin,value);

 

指定したpinに”HIGH”または”LOW”を出力します。
指定したピンがpinMode()関数で出力(OUTPUT)に設定されている場合、次の電圧にセットされます。
HIGH:5V
LOW:0V(GND)

 

(記述例)digitalWrite(13,HIGH);

今回使用しているサンプルスケッチでは、指定したピン「LED_BUILTIN」(13ピン)がpinMode()関数で出力(OUTPUT)に設定されているので、HIGHで内蔵LEDを点灯・LOWで消灯させています。

delay() 関数

プログラムを指定した時間(ミリ秒間)停止させます。
delay(1000);の場合、1000ミリ秒=1秒間停止させます。

【記述方法】

delay(ms);

 

ms:停止させる時間を指定(ミリ秒)

void loop()関数内でLEDの点灯・消灯をずっと繰り返すプログラムになりますが、このdelay()関数によりLEDが点灯している時間、消灯している時間を調整しLEDを点滅させています。(この関数を使い点灯や消灯している時間を指定しないとあまりにも早すぎて認識できないため)

いろいろとdelayの数字を変え点灯や消灯時間を変えてみると面白いですよ!

実際に動かしてみる

今回のサンプルスケッチを実際に動かしてみます。
Arduino UNO搭載のLED(ビルトインされているLED)が点滅するかと思います。

折角なのでD13ピンにもLEDを接続してみました。
ビルトインされているLEDは先述のようにD13ピンと同じなので、同時に点滅しているのが確認できます。
問題なく動いていますね!
外部に接続したLEDの点灯に関しては次回詳しくやっていきたいと思いますので、今回はArduino UNOに搭載されたLEDが点滅すれば目標達成です!

今回使った関数(コマンド)まとめ

今回のサンプルスケッチで使ったコマンド(関数)のまとめです。

関数使用方法
void setup(){…}
初期設定を記載する場所。
1回だけ実行されるコマンドです。
最初の1回だけ実行したいことを記載する。
voidとセットで使い{}で囲む。
void loop(){…}
繰り返し実行したい指示を記載します。
setup()関数とは異なり、コマンドの実行が終了したらすぐに再実行され繰り返し実行されます。
プログラムのメイン実行部分となります。
pinMode(pin,mode);
Arduinoが持っているデジタル入出力ピン(D0〜D13)の設定(入力or 出力)をする。
Pin:設定したいピンの番号
mode:入力として使いたい場合「INPUT」、出力として使いたい場合は「OUTPUT」と記載。
【例】pinMode(13, OUTPUT);
digitalWrite(pin,value);
指定したpinに”HIGH(5V)” または “LOW(0V)”を出力します。
pinMode()関数とペアで使い、指定したピンがpinMode()関数でOUTPUTに設定されている場合、次の電圧にセットされます。
HIGH:5V
LOW:0V(GND)
【例】digitalWrite(13,HIGH);
delay(ms);
プログラムを指定した時間(ミリ秒間)停止させます。
delay(1000);の場合、1000ミリ秒=1秒停止させる。

今回のポイント

  • void setup()内にはポートの設定など初期設定を書き込む
  • void loop()内には実際に動かすプログラム(繰り返し行われる)を書く
  • デジタル入出力端子を使うには、まずpinMode関数で使用するピン及び入出力(INPUT or OUTPUT)を指定し、digitalWrite関数で実際にHIGH(5V)かLOW(0V)を出力する
  • LED_BUILTINはデジタル端子D13と同じ

今回使ったパーツ

Arduino UNO

Arduinoはオープンソースのハードウェアなので正規品以外にも互換品が多数メーカーから販売されています。
互換品でも正規品と比べて特に問題なく使用でき数百円程度で購入が可能なのでArduino学習用としていいですね!

Arduinoスターターキット

また、これからArduino学習を進めていくにあたりArduino UNO(互換品)やブレッドボード、ジャンパーピンなどがセットになったスターターキットが販売されています。
私はGeekcreit製のスターターキットを使っていますが、ELEGOO製のものは国内Amazonなどでも購入可能で人気があるようです。(セット内容はほぼ同じです!)

そしてELEGOOのサイトからスターターキット用サンプルスケッチのダウンロードも可能です。(Geekcreitのキットでも使えます)

参考 チュートリアルダウンロードELEGOO

基本的にこれからこのセットで出来るものから紹介していこうと考えていますが、かなり多くのことが出来ます。
電子工作を始めるにはまずブレッドボードやジャンパーピン、メインとなるArduino UNOやサーボ、LEDなどの基本的なパーツがないと実際に動かすことが出来ませんが、個々にパーツを購入して回路を組んでとなるとかなりの手間がかかります。

スターターキットがあればArduinoの初歩的なことはかなりの数こなすことが出来るのでオススメです!
そこからスキルアップに伴い個別でセンサーなど必要なものを増やしていき・・・。

またブレッドボード1つとっても使いやすさ(サンハヤト製など国産のものは非常に使いやすい)などの発見もあったりと・・・おもしろいものです。

最後に!

LEDを点滅させるだけの非常に簡単なスケッチでしたが、これからArduinoを使う上で重要となるポイントが満載された項目だと思います。

Arduinoでデジタル端子を使い出力を行う場合、
・pinMode();
・digitalWrite();
関数が重要となってきます。

pinMode関数でまず使用するデジタルピンを入力 o r 出力に指定し、digitalWrite関数を使い実際に出力を行う形となります。(デジタル入力digitalRead関数に関しては今後ご紹介したいと思います。)

今回はArduino UNOに搭載されたLEDを点滅させてみましたが、次回は外部に繋いだLEDを複数同時に点滅させてみたいと思います。

その他 Arduio入門編 記事
【Arduino入門編㉛】INA219モジュールで電圧・電流を計測する基本的な方法! 【Arduino入門編㉚】マイコンのデジタル端子(I/O)不足を解消!『I/Oエキスパンダー(MCP23017)』の基本的な使い方! 【Arduino入門編㉙】SPI通信の基礎知識!SPIで使われる信号線や接続方法などについて! 【Arduino入門編㉘】ソフトウェアシリアルを使ってみる! 【Arduino入門編㉗】赤外線(IR)モジュールを使いリモコンの信号を読み取り送受信する方法! 【Arduino入門編㉖】UARTシリアル通信の基礎知識!Arduino間でのデータのやり取りなどをやってみる! 【Arduino入門編㉕】ステッピングモーターを動かしその基礎を理解する!(28BYJ-48 & ULN2003) 【Arduino入門編㉔】Arduinoで7セグメントLEDを制御してみよう!(スタティック制御 / ダイナミック制御) 【Arduino入門編㉓】PCA9685 16チャンネルPWMサーボモータードライバを使って複数のサーボモーターを同時に制御してみる!(最大16台) 【Arduino入門編㉒】ArduinoでDCモーターを制御する。【L298Nデュアルモータードライバ】 【Arduino入門編㉑】温湿度センサー(DHT11)を使い温度と湿度を計測する! 【Arduino入門編⑳】Arduino Uno R3ボードのピン配列&基本機能まとめ! 【Arduino入門編⑲】RTC(リアルタイムクロック)モジュールDS3231を使いシンプルな時計を作る![I2C通信] 【Arduino入門編⑱】I2C通信の基礎!LCDディスプレイに文字を表示させてみる![後編] 【Arduino入門編⑰】LCDディスプレイに文字を表示させてみる![前編][1602 LCDモジュール] 【Arduino入門編⑯】サーボモーターをジョイスティックやシリアルモニタから動かしてみる! 【Arduino入門編⑮】Arduino Unoへの電力供給(外部電源)および電源出力端子の使い方!【追記】 【Arduino入門編⑭】センサーシールド(Sensor Shield)を使ってみる! 【Arduino入門編⑬】テスト環境に便利!Arduino拡張ボード(シールド)プロトタイプシールドを使ってみる! 【Arduino入門編⑫】光センサー(Cdsセル)をアナログ入力ポートで読み取り制御に使ってみる!

2 COMMENTS

コメントを残す