おもしろ工作・プログラミング動画配信中!せでぃあのYouTube

Arduinoでアナログ出力(PWM)を使ってLED明るさを変える【ブロックプログラミングLesson3】

  • URLをコピーしました!

この記事内には、プロモーションが含まれます。

ArduinoプログラミングLESSON3は「押しボタンによる点灯LEDの明るさ切り替え制御」です。

デスクライトのように、好みの明るさに調節できる機器が身近に多く存在していると思います。

LESSON1で取り扱ったLEDの点灯パターンは、デジタル出力を用いた「消灯」と「点灯」の2パターンでした。

今回はアナログ出力機能を用いた、段階的なLEDの明るさ変更プログラミングを学習します。

小学生も安心してプログラミングができるように、スクラッチでのプログラミング方法についても動画付きで紹介しています。

せでぃあ

今回はアナログ出力機能を学習してみよう!

LESSON1:LED点灯プログラミングの学習についてはこちら!

LESSON2:押しボタンスイッチを使うプログラミングの学習についてはこちら!

この記事を読んでわかること
  • Arduinoでアナログ出力を扱う方法
  • Arduino IDEでのプログラミング方法
  • スクラッチ(Scrattino3)を使ったプログラミング方法
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

遊びが勉強に変わる前に!小学生にこそおすすめしたいのがロボット教室です!

目次

アナログ回路ってなに?

デジタル回路とアナログ回路のイメージ比較
デジタル回路とアナログ回路のイメージ

デジタル回路は「0」か「1」の信号のみで構成されるのに対して、アナログ回路は連続的な変化をする信号で構成されます。

今回取り扱うLEDに例えると、その違いは以下のようになります。

デジタル回路:消灯と点灯の2つの状態のみ制御可能
アナログ回路:消灯と様々な明るさの点灯が制御可能

押しボタンによる点灯LEDの明るさ切り替え動作の説明

今回の説明する「押しボタンによる点灯LEDの明るさ切り替え回路動作」は、以下になります。

LED点灯動作の説明
  • 「明るく」ボタンを押すと、LEDの明るさがより明るくなる。
  • 「暗く」ボタンを押すと、LEDの明るさがより暗くなる。
動作説明とスクラッチプログラミング手順の解説動画
動画での解説内容
  • 2つの押しボタンを使った点灯LEDの明るさ変更動作
  • スクラッチを使ったプログラミング手順

まずは動画を見て、アナログ回路とはどういったものなのか確認してください。

また、スクラッチを使ったプログラミングをするためには準備作業が必要です。

動画にて準備作業に必要な手順をくわしく説明しています。

押しボタンによる点灯LEDの明るさ切り替え回路の作り方

STEP
必要なものを準備

プログラミングするために、パソコンが必要です。

電子部品等の必要な機器については、このあと説明します。

STEP
Arduinoを使うためのセットアップ

パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。

Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。

Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。

以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。

STEP
スクラッチでプログラミングするためのセットアップ

パソコンにスクラッチでプログラミングするためのソフトウェア「Scrattino3(スクラッチーノ3)」のインストールを行います。

以下の記事にて詳しく説明しています。

STEP
電気配線

電子部品とジャンパーワイヤの差し込みだけで配線が可能です。

STEP
プログラミング

専用開発ソフトウェア「Arduino IDE」を使います。

私が作成したプログラムをコピペして使ってください。

スクラッチプログラミングについては、動画または後述するプログラミング例を参考にしてください。

STEP
動作確認

プログラムが完成したら動作確認を行います。

動作確認チェックリスト
  • 「明るく」ボタンを押すごとにLEDが明るくなるか?
  • 「暗く」ボタンを押すごとにLEDが暗くなるか?
  • 「明るく」「暗く」ボタンを押すごとに明るさパラメータが「17」ずつ増減するか?
  • 明るさパラメータは0~255の範囲から外れた値にならないか?

記載のプログラムは動作確認済です。

動作確認方法については、以下の記事にて詳しく説明しています。

押しボタンによるLED明るさ変更回路で使うもの

押しボタンによるLED明るさ変更回路で使うもの
配線が完了しプログラム転送できる状態写真
準備するもの
  1. パソコン
  2. Arduino本体
  3. USBケーブル
  4. ブレッドボード
  5. LED(青色)
  6. 押しボタン(「明るく」「暗く」)
  7. 抵抗(1kΩ×2)
  8. 抵抗(220Ω×1)
  9. ジャンパー線(オスーオス)×7本

今回はELEGOO社の初心者スターターキットに入っている部品のみで作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。

【おすすめ】本ブログ記事LESSON9以降にも対応したキットはこちら!

パソコン

プログラムを作成するために必要です。

プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。

パソコンのOSはWindows、Macどちらでも対応可能です。

Arduino本体【キット】

Arduino本体
Arduino本体

基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。

Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。

各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。

USBケーブル【キット】

必要なUSBケーブルの説明写真
USBケーブル

パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。

ブレッドボード【キット】

ブレッドボードの機能説明図
ブレッドボードの機能説明図

たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。

LED(青)【キット】

今回使用するLEDと極性の見分け方説明
LEDのプラス・マイナスの見分け方

青のLED(発行ダイオード)を使用します。

LED素子にはプラスマイナスの極性があるため配線時には注意が必要です。

極性を間違えて配線すると、LEDは点灯しません

押しボタン【キット】

押しボタンの説明
押しボタンの説明

今回のLESSONでは、押しボタンを2つ使用します。

押しボタンの使い道
  • 「明るく」ボタン:LEDの明るさを明るくします
  • 「暗く」ボタン:LEDの明るさを暗くします

押しボタンは押されている間のみ、上記写真での2点が内部でつながります。

このようなボタンをモーメンタリボタンといいます。

今回は扱いませんが、ボタンから手を離してもONしたままになるボタンをオルタネイトボタンといいます。

モーメンタリ・オルタネイトボタンについては以下記事にて詳しく説明しています。

抵抗(1kΩ)【キット】

1kΩ抵抗と色による見分け方
1kΩ抵抗と色による見分け方

1kΩの抵抗を1本使用し、押しボタンに接続します。

抵抗を接続するのは、押しボタンがOFFのときにArduino本体がノイズによる誤検出することを避けるためです。

この記事では詳しく説明しませんが、ボタンを押していないのに押されたと誤認識されることを避ける目的であるということだけ覚えておいてください。

抵抗(220Ω)【キット】

220Ω抵抗とカラーコードによる見分け方
220Ω抵抗と色による見分け方

220Ωの抵抗を4本使用し、各LEDに1本ずつ接続します。

LEDは流せる電流値に制約があるため、抵抗を直列つなぎすることでLEDに流れる電流を調節します。

抵抗は極性がないので、配線時に方向を気にする必要はありません。

LEDを点灯させるために接続する抵抗の選び方については、こちらの記事で詳しく説明しています。

ジャンパー線(オスーオス)【キット】

キットに同梱されているジャンパー線(オスーオス)の説明
ジャンパー線

ジャンパー線を7本使用します。

Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。

Arduinoキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。

配線のやり方

配線完了時の状態写真
配線完了時の状態写真
押しボタンによる点灯LEDの明るさ切り替え回路の配線説明図
押しボタンによる点灯LED明るさ切り替え回路の配線説明図(fritzingを用いて作成)

上図が配線説明図となりますので、これと同じ配線をすれば完成します。

必要な配線作業
  • LEDをブレッドボードに差し込む
  • 押しボタンをブレッドボードに差し込む
  • 220Ω抵抗をブレッドボードに差し込む(LED用)
  • 1kΩ抵抗をブレッドボードに差し込む(押しボタン用)
  • ジャンパー線をブレッドボードとArduinoソケットに差し込む(計5本)
  • ジャンパー線をブレッドボード「5Vライン」とブレッドボード「5D」及び「14D」に差し込む(計2本)

LEDや抵抗、ジャンパー線はArduinoのソケットやブレッドボード穴に差し込むだけでOKです。

LEDはプラス・マイナスの極性があります。

押しボタンは端子が飛び出ている側が同じ側(今回の例だとE列側)になるように差し込みます。

抵抗は極性がありません。

上記説明図で「+」マークがある側(右側)をプラス側にしてください。

LED極性の見分け方については、こちらをご確認ください。

機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください

LEDの明るさ変更プログラムの考え方

アナログ出力機能(PWM)

Arduinoでは0Vと5VのON時間の割合を調節することで、疑似的なアナログ出力ができる機能を持っています。

疑似的なアナログ出力方式をパルス変調といい、PWM(Pulse Width Modulation)出力といいます

アナログ出力の値は0~255までの256段階で出力します。

今回作成するプログラムではアナログ出力値を17ずつ切り替える16段階の明るさ変更プログラムになります。

アナログ出力値と明るさの関係
アナログ出力値と明るさの関係

プログラミングのやり方

Arduino IDEとスクラッチの両方について、プログラミング方法とプログラムを説明します。

2つのプログラミングの特徴は以下の通り。

ArduinoIDE:文字列による命令語形式
スクラッチ:ブロックによるビジュアル形式

文字列を使わないスクラッチの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。

スクラッチを使ってプログラミングをする方は、スクラッチの説明まで読み飛ばしてください。

Arduino IDE

Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。

プログラミングするにあたり、ある程度の命令語を知っておく必要があります。

スクラッチプログラミングをする場合でも、Arduino IDEを使ったファームウェア書き込みが必要ですがプログラミング技術は必要ありません。

Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。

プログラミング方法

Arduino IDEでのプログラミング画面(LESSON3)
Arduino IDEでのプログラミング画面

Arduino IDEを使って、文字列プログラミングを行います。

Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。

Arduino IDEプログラム

/* 作品名:LESSON3 */
/* 作成者:せでぃあ https://cediablog.com */
/* プログラムによるアナログ出力制御(押しボタンを使ってLEDの明るさを替える) */

int LED_SOCKET = 5       ; //LEDの出力ソケット番号
int DARK_BTN_SOCKET = 8  ; //LEDの明るさDOWN入力ソケット番号
int LIGHT_BTN_SOCKET = 9 ; //LEDの明るさUP入力ソケット番号
int led_out = 0          ; //LEDの明るさ値

void setup() {
  // put your setup code here, to run once: プログラム起動時1回だけ処理される回路

  Serial.begin(9600); //シリアル接続(9600ビット/秒) アナログ出力値をシリアルモニタでモニタリングするために設定

  //入出力の割り当て

  pinMode(LED_SOCKET, OUTPUT);      //5番ソケットはLED点灯出力として使用
  pinMode(DARK_BTN_SOCKET, INPUT);  //8番ソケットは「暗くボタン」入力として使用
  pinMode(LIGHT_BTN_SOCKET, INPUT); //9番ソケットは「明るくボタン」入力として使用

}

void loop() {
  // put your main code here, to run repeatedly: プログラム起動後ループ処理される回路

if(digitalRead(LIGHT_BTN_SOCKET) == 1){           //「暗くボタン」がONのとき
  if(led_out < 255){                              //かつLEDの明るさ値が最大値の255より小さいとき
    led_out = led_out + 17;                       //LEDの明るさ値を+17した値にする
  }
  while(digitalRead(LIGHT_BTN_SOCKET) == 1){      //「暗くボタン」がONのとき
    delay(100);                                   //0.1秒ウェイト回路をループさせる
  }
}
if(digitalRead(DARK_BTN_SOCKET) == 1){           //「明るくボタン」がONのとき
  if(led_out > 0){                               //かつLEDの明るさ値が最小値の0より大きいとき
    led_out = led_out - 17;                      //LEDの明るさ値を-17した値にする
  }
  while(digitalRead(DARK_BTN_SOCKET) == 1){      //「明るくボタン」がONのとき
    delay(100);                                  //0.1秒ウェイト回路をループさせる
  }
}
analogWrite(LED_SOCKET,led_out);                  //LEDの明るさ値でLED点灯電圧をアナログ出力させる
Serial.println(led_out);                          //LEDの明るさ値をシリアル出力させる
delay(100);                                       //0.1秒ウェイトさせる

}

上記が押しボタンによるLED点灯明るさ変更回路のプログラムになります。

Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。

各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。

せでぃあ

まずは自分でプログラムを考えてみるのもいいね!

命令語の解説

今回のプログラムで使用した命令文について、解説します。

変数のデータ型指定

変数のデータ型を指定するものです。

今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。

またアナログ出力値は「0~255」の整数を扱いますので、同じく「int型」を指定します。

スクロールできます
データ型説明扱える範囲
int2バイトの整数を代入可能。-32768~32767
long4バイトの整数を代入可能-2,147,483,648~2,147,483,647
float4バイトの小数を代入可能。3.4028235×1038~-3.4028235×1038
char1バイトの値を代入可能。文字列の代入に利用されます。-128~127
boolean0または1のみ代入可能。フラグのON-OFFなどに利用されます。0,1

Serial.begin(通信速度)

シリアル通信を初期化します。

通信速度は単位が「ビット/秒」で、300、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200から選択します。

Serial.println(書き込むデータ,データを変換する方法)

文字列をシリアル送信して改行します。

データを変換する方法は省略が可能です。

DEC:10進数、HEX:16進数、OCT:8進数、BIN:2進数

pinMode(入出力番号,INPUTまたはOUTPUT)

指定したデジタル入出力ソケット番号の機能を指示します。

入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。

digitalRead(入出力番号)

指定したデジタル入出力ソケット番号の状態がON、またはOFFであるか確認します。

ONのときは「HIGH」、OFFのときは「LOW」の値が返ってきます。

analogWrite(入出力番号,0~255の範囲のアナログ値)

指定したデジタル入出力ソケット番号の電圧を256段階での値で出力します。

5V出力の場合、0のとき0V、255の時5Vの出力となります。

0Vと5Vの状態を時間の割合で調整して作る、疑似的なアナログ出力になります。

delay(時間)

()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。

if 文

条件が成立しているときのみ、{ }内の文が実行されます。

条件が成立しなければ、{ }内の文は処理されず、次の処理に移ります。

if( 条件 ){
 条件成立時に実行する文 ;
}

while 文

( )内の条件が成立している間は、{ }内の文を繰り返し実行します。

while( 条件 ){
 繰り返し実行する文 ;
}

比較演算子

スクロールできます
比較演算子説明
A == BAとBが等しい場合に成立
A != BAとBが等しくない場合に成立
A < BAがBより小さい場合に成立
A <= BAがB以下の場合に成立
A > BAがBより大きい場合に成立
A >= BAがB以上の場合に成立
比較演算子の説明

スクラッチ

Scrattino3(スクラッチーノ3)によるスクラッチプログラミングの説明(LESSON3)
スクラッチを使ったプログラミング

Scrattino3(スクラッチーノ3)というソフトウェアを使って、プログラミングする方法です。

Scrattino3のインストール方法やプログラミング、動作確認方法については、以下の記事にて詳しく説明しています。

プログラミング、動作確認方法については、本記事の説明動画でも紹介しています

せでぃあ

動画を参考にプログラミングしてみよう

スクラッチプログラム(Scrattino3|スクラッチーノ3)

Scrattino3(スクラッチーノ3)によるスクラッチプログラミングの詳細解説
スクラッチプログラミングと解説

上記がスクラッチのプログラミングとなります。

右側の解説の()内はブロックの種類になります。

Scrattino3(スクラッチーノ3)でのスクラッチプログラミングの作り方について、本記事冒頭の動画にて詳しく説明しています。

Arduinoをプログラミング制御するときは、USBケーブルの常時接続が必要です

Arduino専用ブロックについては、以下の記事にて詳しく説明しています。

動作確認方法

配線状態説明図(LESSON3)
配線状態説明図
動作確認チェックリスト
  • 「明るく」ボタンを押すごとにLEDが明るくなるか?
  • 「暗く」ボタンを押すごとにLEDが暗くなるか?
  • 「明るく」「暗く」ボタンを押すごとに明るさパラメータが「17」ずつ増減するか?
  • 明るさパラメータは0~255の範囲から外れた値にならないか?

上記項目について確認していきましょう。

アナログ出力値の確認方法

Arduino IDE、スクラッチ「Scrattino3(スクラッチーノ3)」それぞれ、アナログ出力値の確認方法があります。

パソコンとArduino本体をUSBケーブルで接続し、通信した状態で確認を行ってください

Arduino IDEでのアナログ出力値確認方法

Arduino IDEでのアナログ出力値確認方法
Arduino IDEでのアナログ出力値確認方法

Scrattino3でのアナログ出力値確認方法

スクラッチ「Scrattino3(スクラッチーノ3)」でのアナログ出力値確認方法
Scrattino3でのアナログ出力値確認方法

「明るく」ボタンを押すごとにLEDが明るくなるか?

「明るく」ボタンを押して、LEDの明るさが押すごとに明るくなっていくか?確認してください。

「暗く」ボタンを押すごとにLEDが暗くなるか?

「暗く」ボタンを押して、LEDの明るさが押すごとに暗くなっていくか?確認してください。

「明るく」「暗く」ボタンを押すごとに明るさパラメータが「17」ずつ増減するか?

以下について確認してください。

  • 「明るく」ボタンを押すとアナログ出力値が「+17」の値になるか?
  • 「暗く」ボタンを押すとアナログ出力値が「-17」の値になるか?

明るさパラメータは0~255の範囲から外れた値にならないか?

以下について確認してください。

  • アナログ出力値が255のとき、「明るく」ボタンを押しても255から変化しないか?
  • アナログ出力値が0のとき、「暗く」ボタンを押しても0から変化しないか?

今回0~255まで、0,17,34,51,…,221,238,255と17の倍数でアナログ出力値を刻んでいます

LESSON3:アナログ出力回路のまとめ

この記事の内容をまとめると
  • Arduinoには0から255まで、256段階のアナログ出力機能がある
  • アナログ出力機能により、LEDの明るさを変化させることができる
  • アナログ出力値は、画面に数値を出力させて確認する

小学生のお子様には断然、スクラッチでのプログラミングがおすすめです!

LEDへのアナログ出力プログラミングを学習したら、次のLESSON4(アナログ入力回路)にチャレンジしてください。

せでぃあ

次はアナログ入力回路にチャレンジしよう

小学生のお子様には、プログラミング教室での基礎学習をおすすめしています!

Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。

Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。

応援ありがとうございます(^^)/

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次