Python/Arduino学習記録,備忘録

コツコツ学んだ学習記録と備忘録。現在Python,Arduino勉強中。

【Arduino#4】ボタンスイッチとLED回路(明暗3段階に変化)

前回のボタンスイッチ/LEDの回路に引き続き,ボタンスイッチを用いてLEDのの明るさを調節する回路を作る。
順序として,単純にLEDの明るさを設定可能な回路を作成した後に,スイッチと組み合わせ,3段階でスイッチング可能なLED回路を作成する。

1. 必要素子

〇LEDの明るさ設定する簡易回路

  • ブレッドボード
  • 抵抗(10kΩ)
  • LED
  • ジャンパー線 2本

〇スイッチを用いた明るさ調節回路

  • ブレッドボード
  • 抵抗(10kΩ) 2個
  • LED
  • ジャンパー線 5本
  • ボタンスイッチ(以下,SW)

2. 配線図

〇LEDの明るさ設定する簡易回路
f:id:opuktr:20180806215621p:plain



〇スイッチを用いた明るさ調節回路
f:id:opuktr:20180812103806p:plain


3. スケッチ

〇LEDの明るさ設定する簡易回路

const int LED = 9;//pin9にLED接続
int light = 0;//明るさの変数

void setup() {
  pinMode(LED, OUTPUT);//LEDpinを出力に設定
}

void loop() {
 
  light = 0; //LED暗
  analogWrite(LED, light); //PWM波を出力(デューティ比=0%)
  delay(1000);

  light = 128;  //LED中
  analogWrite(LED, light);//PWM波を出力(デューティ比=50%)
  delay(1000);

  light = 255;  //LED明
  analogWrite(LED, light);//(PWM波を出力デューティ比=100%)
  delay(1000);
}

〇スイッチを用いた明るさ調節回路

const int LED = 9;//LEDを13番pinに設定
const int SW = 7;//プッシュボタンを7番pinに設定

int val = 0;//7番pinから読み込んだ値を格納
int val_old = 0;//古いvalを格納
int state = 0;//SWの状態を格納
int light = 0;//明るさの変数

void setup() {
  pinMode(LED,OUTPUT);//LEDpinを出力に設定
  pinMode(SW, INPUT);//SWpinを入力に設定
}

void loop() {
  val = digitalRead(SW);//7番pinからHIGH/LOW読込

  //SWのON/OFFでstateの状態を変更
  if((val == HIGH)&&(val_old == LOW)){
    if(state==0){
      state = 1 ;//state=0 → state=1
      }else if(state==1){
        state = 2 ;//state=1 → state=2
      }else{
        state = 0 ;//state=2 → state=0
      }
    delay(10);//SWのバウンシングを防ぐために間隔設定
    }

    val_old = val;//1つ前のvalを格納

  //stateの状態によって明るさ設定
  if(state == 1){
    light = 255;  //LED明
    analogWrite(LED, light);//PWM波を出力(デューティ比=100%)
    }else if(state == 2){
      light = 128;  //LED中
      analogWrite(LED, light);//PWM波を出力(デューティ比=50%)
    }else{
      light = 0; //LED暗
      analogWrite(LED, light); //PWM波を出力(デューティ比=0%)
    }
}

4. スケッチで用いた関数まとめ

各々の関数についてまとめる。基本的にはArduino Referenceで説明されている。

const int LED = 9;
const int SW = 7;

変数を読み取り専用の変数として定義するもの
不変の値を設定したい時にconstを用いると良い。

  pinMode(LED,OUTPUT);
  pinMode(SW, INPUT);
//pinMode(pin番号, OUTPUT / INPUT / INPUT_PULLUP);
//戻り値:なし

pinの動作を入力(INPUT, INPUT_PULLUP)か出力(OUTPUT)に設定する関数
入力には以下の2種類ある。
INPUT:普通の入力
INPUT_PULLUP:マイコン内部のプルアップ抵抗を利用する(回路簡素化できる)

analogWrite(LED, light);
//analogWrite(pin番号, デューティ比に対応する値(0~255));
//戻り値:なし

指定したpinからPWM波を出力する関数
ここで,指定するpinはDigital pinの~がついているpin(3,5,6,9,10,11番pin)とする必要がある。
また,デューティ比に対応する値が0であれば0Vを出力,255であれば5V(3.3V)を出力する電圧源と等しくなる。

 delay(1000);
//delay(時間[単位はms]);
//戻り値:なし

指定した時間だけプログラムを止める関数
ここで,設定する時間はunsigned long型である。

digitalRead(SW);
//digitalRead(pin番号);
//戻り値:HIGH/LOW

指定したpinの値を読み取る関数
5Vボードでは,3V以上の電圧がかかるとHIGH,1.5V以下の電圧がかかるとLOWとなる。
3.3Vボードでは,2V以上の電圧がかかるとHIGH,1V以下の電圧がかかるとLOWとなる。