2018年12月18日火曜日

[Elegoo: 9] サーボモータ
ポテンショメータでモータのシャフト(角度)を制御する




概要 (Overview)
  • サーボモータについて学ぶ
  • ポテンショメータでサーボモータのシャフト(角度)を制御する




使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動 サーボモータ1
機構 ポテンショメータ1
ブレッドボード1
ジャンプワイヤ(赤)[オス-オス]3
ジャンプワイヤ(黒)[オス-オス]3
ジャンプワイヤ(黄)[オス-オス]2



電子部品について (Component Introduction)

サーボモータ SG90


"サーボ"とは、指示した位置や速度にすばやく追従させる制御をおこなう装置。
サーボモータは精密に制御できるギア(歯車)とシャフト(軸)を統合したモータで、 電気を入れたら回る、回りっぱなしのモーターではなく、
検出器がモーターの状態(速度や回転角度)をフィードバックしながら
回転の速度や位置を制御するドライバーと組み合わせて使用する

《データシート》
コネクタJR/FP
動作速度0.12秒/60度(4.8V)、0.10秒/60度(6.0V)
停動トルク(4.8V)1.6kg/cm
温度-30〜60℃
デッドバンド幅5us
使用電圧3.5 - 6V
寸法3.2cm×3cm×1.2cm
重量134グラム

《端子》
ServoMotorPin
BrownGND
Red5V
OrangeDigital (PWM) 9 or 10



電子回路 (Electronic Circuit)

回路図 (Schematic)


実体配線図 (Wiring Diagram)





実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

サーボライブラリ
  • Arduinoボードからシャフトの角度である電気パルスを送信してモータを制御する
  • サーボは精密に制御できるギア(歯車)とシャフト(軸)を統合したモータで、 一般的なサーボはシャフトを様々な角度(0~180度)にすることができる
  • 殆どのボードで12個のサーボオブジェクトを作成可能だが、
    多くのサーボを制御する場合はArduinoの5Vピンではなく、
    外部から電源を供給する
    ※ この場合必ずArduinoと外部電源のアースを接続する
書式引数説明
uint8_t Servo::attach(int pin)
uint8_t Servo::attach(int pin, int min, int max)
pin:デジタルピン番号
min:最小値
max:最大値
サーボにピンに割り当て
0~180度のパルス幅を
マイクロ秒で指定
※9,10ピンのPWM機能⇒不可
※省略時:min[544],max[2400]
(一部:min[700],max[2300])
void Servo::write(int value) value:角度(0-180) サーボに角度を書き込み
シャフトを制御する
void Servo::writeMicroseconds(int value) value:角度(0-180) サーボに角度のパルス幅を
マイクロ秒単位で書き込み、
シャフトを制御する
int Servo::read() サーボの現在位置(0-180)の
角度を戻す
bool Servo::attached() サーボ変数がピンに
割り当てられているかを
戻す
void Servo::detach() サーボ変数をピンから
切り離す
※9,10ピンのPWM機能⇒可

スケッチ
/**********************************************/
/* 【 Elegoo:9 】サーボモータ                  */
/*    ポテンショメータで                        */
/*    サーボモータのシャフト(角度)を制御する     */
/**********************************************/

/*----------------------------*/
/* サーボ ライブラリ
/*----------------------------*/
#include <Servo.h>


// サーボオブジェクトの作成
Servo objServo;

// シャフトの角度
int intAngle = 0;

/*----------------------------*/
// ポテンショメータ(10K)使用
/*----------------------------*/
#define METER 

/*----------------------------*/
// ピンの定義
/*----------------------------*/
#define PIN_SERVO 9   // D9:サーボモータ
#define PIN_METER 0   // A0:ポテンショメータ(角度)


/*********/
/* setup */
/*********/
void setup(){

  // --------------------------------------------------
  // サーボモータにピンに割り当て,
  // 0~180度のパルス幅をマイクロ秒で指定
  // --------------------------------------------------
  objServo.attach(PIN_SERVO, 700, 2300);

  // --------------------------------------------------
  // シャフト位置の初期化
  // --------------------------------------------------
  objServo.write(0);  // サーボに角度を書き込む
  delay(500);         // シャフトがその位置に達するのを待つ

}

/********/
/* loop */
/********/
void loop(){

// --------------------------------------------------
// ポテンショメータでシャフトを制御する
// --------------------------------------------------
#ifdef METER
  // ポテンショメータから角度(0-180)を読み込む
  intAngle = map(analogRead(PIN_METER), 0,1023,0,180);
  objServo.write(intAngle); // サーボに角度を書き込む
  delay(10);                // シャフトがその位置に達するのを待つ

// --------------------------------------------------
// 角度:0⇔180度でシャフトを制御する
// --------------------------------------------------
#else

  // 角度:0 → 180度
  for (intAngle = 0; intAngle <= 180; intAngle += 1){ 
    objServo.write(intAngle);   // サーボに角度を書き込む
    delay(10);                  // シャフトがその位置に達するのを待つ
  }

  // 角度:180 → 0度
  for (intAngle = 180; 0 <= intAngle; intAngle -= 1){ 
    objServo.write(intAngle);   // サーボに角度を書き込む
    delay(10);                  // シャフトがその位置に達するのを待つ
  }

#endif
}

結果(動画)・モニタリング


サーボモータのシャフト(角度)を制御する


ポテンショメータでサーボモータのシャフト(角度)を制御する

2018年10月9日火曜日

[Elegoo: 8] 傾斜センサ
チルトボールスイッチで傾きを検出する




概要 (Overview)
  • 傾斜センサについて学ぶ
  • 傾きを検出してボード上のLEDを点灯する



参照 (Reference)
傾斜センサ
  • 傾斜センサで動き(ON・OFF)や方向や傾きを検出できる
  • 筒状の本体の中に2つの接点と、固定されていない導電体のボールが入っている
  • ピンを下にして立つ状態だと導電体が接点に触れて通電(ON)し、
    逆さにすると切れる(OFF)



使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動 チルトボールスイッチ1
機構 ジャンプワイヤ(黄)[オス-メス]1
ジャンプワイヤ(黒)[オス-メス]1



電子部品について (Component Introduction)

チルトボールスイッチ


  • チルトボールスイッチは傾きでON・OFFが切り替わるスイッチ
  • ピンを下にして立つ状態だと導電体が接点に触れて通電(ON)し、
    逆さにすると切れる(OFF)



電子回路 (Electronic Circuit)

回路図 (Schematic)


実体配線図 (Wiring Diagram)





実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

ライブラリ
  • 無し

スケッチ
/****************************************************/
/* 【 Elegoo:8 】傾斜センサ                         */
/*    チルトボールスイッチで傾きを検出して             */
/*    ボード上のLEDを点灯する                        */
/****************************************************/

// ピンの定義
#define SW_BALL 2    // D2:チルトボールスイッチ


/*********/
/* setup */
/*********/
void setup(){

  // --------------------------------------------------
  // デジタルピンを設定
  // --------------------------------------------------
  pinMode( LED_BUILTIN, OUTPUT );   // ボード上のLED( D13 )
  pinMode( SW_BALL, INPUT );

  // --------------------------------------------------
  // チルトボールスイッチを初期化( OFF )
  // --------------------------------------------------
  digitalWrite( SW_BALL, HIGH );
} 


/********/
/* loop */
/********/
void loop(){

  // --------------------------------------------------
  // チルトボールスイッチ : OFF ( HIGH )
  // --------------------------------------------------
  if(digitalRead(SW_BALL) == HIGH){
    digitalWrite(LED_BUILTIN,LOW);    // LEDを消灯

  // --------------------------------------------------
  // チルトボールスイッチ : ON ( LOW )
  // --------------------------------------------------
  } else {
    digitalWrite(LED_BUILTIN,HIGH);   // LEDを点灯

  }
}

結果(動画)・モニタリング


傾きを検出してボード上のLEDを点灯する

2018年10月5日金曜日

[Elegoo: 6-7] ブザーで電子音・音階・メロディを鳴らす




概要 (Overview)
  • ブザーの鳴らし方について学ぶ
  • ブザー音・音階(ドレミファソラシド)・メロディを鳴らす



参照 (Reference)

tone関数
(周波数指定型PWM 出力)

  • PWM出力はLEDの明るさを変更できる。PWMの周波数はLEDの明るさや光の波長には無関係だが、PWMの周波数が関係する素子もある。その一つが電圧の振動で音波を生じる電圧スピーカー
  • 電圧の周波数と発生する音波の高さ(音の高さ)が一致するので、PWMの周波数が固定されていると音の高さを変えることができないが、Arduinoには指定した周波数(31Hz~65KHz[最大81KHz])の矩形波(50%デューティ)を出力するtone関数が用意されている
  • PWM出力に利用するタイマと同じタイマ(タイマ/カウンタ2)を利用するためデジタルピンの3番と11番へのPWM出力を妨げるので注意する
書式引数説明
void tone( [byte]pin, [unsigned int]frequency )            
void tone( [byte]pin, [unsigned int]frequency,
                 [long]durations )
pin:デジタルピン番号
frequency:
音の高さの周波数(Hz)
durations:   ※オプション
出力時間(ms)
pinにfrequencyを
(durations時間)
出力し続ける
void noTone( [byte]pin ) pin:デジタルピン番号 pinの出力を止める




使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動アクティブブザー1
パッシブブザー1
機構プッシュボタン3
ブレッドボード1
ジャンプワイヤ(赤)[オス-メス]1
ジャンプワイヤ(黒)[オス-メス]1
ジャンプワイヤ(青)[オス-オス]1
ジャンプワイヤ(黄)[オス-オス]1
ジャンプワイヤ(緑)[オス-オス]1
ジャンプワイヤ(黒)[オス-オス]4




電子部品について (Component Introduction)

ブザー

  • 電子ブザーはDC電源で集積回路を備えている。
  • PCやプリンタ、アラームや電子玩具、車載電子機器、電話機、タイマ及び音声デバイス用の電子製品に広く使用されている
  • ピンを上に向けて、黒色のテープで囲まれているのがアクティブ(能動的)ブザー、緑色の回路基板を持つのがパッシブ(受動的)ブザー
  • アクティブブザーは発振器内臓で、決まった直流電圧を掛けると決まった音程のブザー音(BEEP音)が鳴る。また周波数(2k~5k)にて音程を変えたり、メロディーを流すことも可能
  • パッシブブザーは周波数にて音程を変えたり、メロディーを流すことができる





電子回路 (Electronic Circuit)

回路図 (Schematic)



実体配線図 (Wiring Diagram)





実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

ライブラリ
  • 【pitches】音階の周波数を宣言

スケッチ
/*****************************************/
/* 【 Elegoo: 6-7 】 ブザー              */
/*    電子音・音階・メロディを鳴らす        */
/*****************************************/

// pitchesライブラリ:音階の周波数(Hz)を宣言
#include "pitches.h"

// ピンの定義
#define BUZZER    5   // D5 : BUZZER
#define SW_BEEP   7   // D7 : Switch 電子音(BEEP)
#define SW_TONE   8   // D8 : Switch 音階
#define SW_MELODY 9   // D9 : Switch メロディ

/*-------------------------*/
/* 音階                    */
/*    "pitches.h"より      */
/*-------------------------*/
int aryFrequency[] = {
    NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
    NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5
};

/*-------------------------*/
/* メロディ : きらきらぼし   */
/*    "pitches.h"より      */
/*-------------------------*/
int aryMelody[] = {
    NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, 
    NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4, 
    NOTE_G4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4,
    NOTE_G4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4,
    NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4,
    NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4
};
// 音の長さ
int aryMelodyDurations[] = {
    4,4,4,4,4,4,2,
    4,4,4,4,4,4,2,
    4,4,4,4,4,4,2,
    4,4,4,4,4,4,2,
    4,4,4,4,4,4,2, 
    4,4,4,4,4,4,2
};

/*-------------------------*/
/* 音階総数                */
/*-------------------------*/
int noteNum; 


/*********/
/* setup */
/*********/
void setup(){
  // pinの設定
  pinMode( BUZZER,    OUTPUT );       // BUZZER : 出力用
  pinMode( SW_BEEP,   INPUT_PULLUP ); // Switch : プルアップ時に発動
  pinMode( SW_TONE,   INPUT_PULLUP ); // Switch : プルアップ時に発動
  pinMode( SW_MELODY, INPUT_PULLUP ); // Switch : プルアップ時に発動
}

/********/
/* loop */
/********/
void loop(){
  // --------------------------------------------------
  // Switch 電子音(BEEP) ==> BEEP音 出力
  // --------------------------------------------------
  if( digitalRead( SW_BEEP ) == LOW ) outputBeep();

  // --------------------------------------------------
  // Switch 音階 ==> 音階 出力
  // --------------------------------------------------
  if( digitalRead( SW_TONE ) == LOW ) outputTone();

  // --------------------------------------------------
  // Switch メロディ ==> メロディ 出力
  // --------------------------------------------------
  if( digitalRead( SW_MELODY ) == LOW ) outputMelody();
}


/********************************/
/* BEEP音 出力                  */
/********************************/
void outputBeep(){
  int i, j;

  // --------------------------------------------------
  // 音の長さ
  // --------------------------------------------------
  for( j = 0; j <= 600; j += 150 ){

    // --------------------------------------------------
    // 演奏回数
    // --------------------------------------------------
    for( i = 0; i < 5; i++ ){
      digitalWrite( BUZZER, HIGH );
      delay( j );
      digitalWrite( BUZZER, LOW );
      delay( j );
    }
  }
}


/********************************/
/* 音階 出力                    */
/********************************/
void outputTone(){
  // --------------------------------------------------
  // 音階総数の設定
  // --------------------------------------------------
  noteNum = sizeof aryFrequency / sizeof aryFrequency[0];

  // --------------------------------------------------
  // 音階数の周波数を出力する 
  // --------------------------------------------------
  for( int i = 0; i < noteNum; i++ ){
    tone( BUZZER, aryFrequency[i] );
    delay( 500 );   // 演奏速度
  }

  // --------------------------------------------------
  // 周波数の出力を停止する
  // --------------------------------------------------
  noTone( BUZZER );
  delay( 500 );
}


/********************************/
/* メロディ 出力                */
/********************************/
void outputMelody(){
  // --------------------------------------------------
  // 音階総数の設定
  // --------------------------------------------------
  noteNum = sizeof aryMelody / sizeof aryMelody[0];

  // --------------------------------------------------
  //  音階数の周波数を音の長さだけ出力する 
  // --------------------------------------------------
  for( int i = 0; i < noteNum; i++){
    tone( BUZZER, aryMelody[i],( 1000 / aryMelodyDurations[i] ) );
    delay( 500 );   //演奏速度
  }

  // --------------------------------------------------
  // 周波数の出力を停止する
  // --------------------------------------------------
  noTone( BUZZER );
  delay( 500 );
}


結果(動画)・モニタリング

アクティブブザー

BEEP音

音階

メロディ[ きらきらぼし ]


パッシブブザー

BEEP音
※ 発振器が内臓されていないため、
電圧を掛けてもブザー音(BEEP音)は鳴らない

音階

メロディ[ きらきらぼし ]

2018年9月29日土曜日

[Elegoo: 4] アナログ入出力
RGB LEDの色をポテンショメータで制御する




概要 (Overview)
  • PWM幅変調とアナログ入出力について学ぶ
  • RGB LEDの色をポテンショメータで制御する



参照 (Reference)
PWM(パルス幅変調)
  • PWM(パルス幅変調)は電力を制御する技術
  • 「~」の付いたデジタルI/Oピン[D3,D5,D6,D9,D10,D11]の6本
  • ピンの状態設定(出力)はスケッチ上で行う
  • 基本的にはHIGH(5V)かLOW(0V)の1Bit[0,1]だが
    デューティ比として8Bit[0~255]の値を出力可能

アナログI/Oピン
  • A0~A5番の計6本
  • ピンの状態設定をスケッチ上で行わない
  • ピンの電圧を10Bit[0~1023]で取得可能

アナログ入出力関数

書式引数説明
void pinMode( [byte]pin, [boolean]mode ) pin:デジタルピン番号
mode:ピンモード
・OUTPUT:出力
pinにmodeを設定
void analogWrite( [byte]pin, [byte]value ) pin:デジタルピン番号
value:デューティ比
pin[D3,D5,D6,D9,D10,D11]に
value[0-255]を出力
※) pinMode関数で
"OUTPUT"を設定
int analogRead( [byte]pin ) pin:アナログピン番号 pin[A0-A5]から値[0-1023]を返す
※) pinMode関数で
ピンの状態を設定しない




使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動RGB LED1
受動220Ω 抵抗器1
機構 ポテンショメータ1
ブレッドボード1
ジャンプワイヤ(黒)[オス-オス]3
ジャンプワイヤ(赤)[オス-オス]2
ジャンプワイヤ(緑)[オス-オス]1
ジャンプワイヤ(青)[オス-オス]1
ジャンプワイヤ(黄)[オス-オス]1




電子部品について (Component Introduction)

RGB LED


  • 内部にRGBのLEDが存在し、個々のLEDの明るさ[0-255]を制御することで、様々な色を表現できる
  • ピンは一番長いCATHODEの”ー(GND)”を挟んで1本が"赤"、2本のうちCATHODE横のピンが”緑”、隣が”青”の計4本
  • 各LEDを直接電源に接続すると多くの電流が流れて破壊されるため、抵抗器で電流を調整する

ポテンショメータ

  • ボリューム(音量)の調整等、抵抗値を調節できる3端子の可変抵抗器
  • 形状としては、回転角度を検出するロータリーポテンショメータと、直線上の位置を検出するリニアポテンショメータがある
  • 使用方法としては二つの固定電極の両端に基準電圧を掛け、可動電極の電圧を測定することで可動電極の位置を判定する




電子回路 (Electronic Circuit)

回路図 (Schematic)


実体配線図 (Wiring Diagram)






実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

ライブラリ
  • 無し

スケッチ
/****************************************************/
/* 【 Elegoo:4 】アナログ入出力                      */
/*    LEDの色をポテンショメーターで制御する            */
/****************************************************/

/*----------------------------*/
/* RGBリスト:表示する色(RGB)  */
/*----------------------------*/
long  RGB_LIST[] = {
    0x000000,   // BLACK
    0x0000FF,   // BLUE
    0x00FFFF,   // CYAN
    0x00FF00,   // GREEN
    0xFFFF00,   // YELLOW
    0xFF0000,   // RED
    0xFF00FF,   // MAZENTA
    0xFFFFFF,   // WHITE
};
// RGBリスト_配列数
byte bytRgbNum;

// ポテンショメータ値
int intMeter = 0;

// ピンの定義
#define METER 0   // A0:ポテンショメータ
#define BLUE  3   // D3:BLUE
#define GREEN 5   // D5:GREEN
#define RED   6   // D6:RED


/*********/
/* setup */
/*********/
void setup(){
  // --------------------------------------------------
  // デジタルピンを出力に設定
  // --------------------------------------------------
  pinMode( BLUE,  OUTPUT );
  pinMode( GREEN, OUTPUT );
  pinMode( RED,   OUTPUT );

  // --------------------------------------------------
  // RGBリストの配列数を設定
  // --------------------------------------------------
  bytRgbNum =  sizeof(RGB_LIST) / sizeof(RGB_LIST[0]);
}

/********/
/* loop */
/********/
void loop(){
  // ------------------------------------------------------------
  // ポテンショメータ[0-1023]の値を[0~RGBリストの配列数]で読み込む
  // ------------------------------------------------------------
  intMeter = map( analogRead(METER), 0, 1023, 0, bytRgbNum );

  // --------------------------------------------------
  // RGBリストの中からポテンショメータ値のRGBを出力する
  // --------------------------------------------------
  analogWrite( BLUE,  (   RGB_LIST[intMeter] & 0x0000FF ) );
  analogWrite( GREEN, ( ( RGB_LIST[intMeter] & 0x00FF00 ) >> 8) );
  analogWrite( RED,   ( ( RGB_LIST[intMeter] & 0xFF0000 ) >> 16) );
  
  delay( 100 );
}

結果(動画)・モニタリング


RGB LEDの色をポテンショメーターで制御する

[Elegoo: 5]  デジタル入出力
 LEDの点灯・消灯をプッシュボタンで制御する




概要 (Overview)
  • デジタル入出力について学ぶ
  • Arduino IDEにてスケッチを作成し、LEDの点灯・消灯をプッシュボタンで制御する



参照 (Reference)

デジタルI/Oピン
  • D0~D13番の計14本
  • ピンの状態設定(入力/出力/プルアップ時)はスケッチ上で行う
  • 基本的にはHIGH(5V)かLOW(0V)の1Bit(0,1)
  • 「~」の付いたピン[3,5,6,9,10,11]は8Bit[0~255]でパルス幅変調(PWM)出力が可能


デジタル入出力関数

書式引数説明
void pinMode( [byte]pin, [boolean]mode ) pin:デジタルピン番号
mode:ピンモード
・INPUT:入力
・OUTPUT:出力
・INPUT_PULLUP:プルアップ
pinにmodeを設定
void digitalWrite( [byte]pin, [boolean]value ) pin:デジタルピン番号
value:HIGH/LOW
pin[D0-D13]に
value[HIGH(5V),LOW(0V)]
を出力
※) pinMode関数で
"OUTPUT"を設定
boolean digitalRead( [byte]pin ) pin:デジタルピン番号 pin[D0-D13]から
値[HIGH(5V),LOW(0V)]
を返す
※) pinMode関数で
"INPUT"を設定




使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動5mm LED(赤)1
受動220Ω 抵抗器1
機構プッシュボタン2
ブレッドボード MB-1021
ジャンプワイヤ(黒)[オス-オス]4
ジャンプワイヤ(赤)[オス-オス]1
ジャンプワイヤ(黄)[オス-オス]1
ジャンプワイヤ(青)[オス-オス]1




電子部品について (Component Introduction)

プッシュボタン


  • スイッチはボタンを押すと接点が接続されて、電気が流れるシンプルな電子部品
  • このレッスンで用いるスイッチには4つの足があるが、実際の電気接続は2つ(A&D, B&C)しかない





電子回路 (Electronic Circuit)

回路図 (Schematic)



実体配線図 (Wiring Diagram)

  • ジャンプワイヤは+5Vは赤、グランドは黒など用途別に色分けしておくと配線しやすい
  • 電流を流しすぎて電子部品を焼き切らないよう、必ずデータシートの絶対最大定格を把握し、電源(+5V、グランド)は最後に配線する




実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)

ライブラリ
  • 無し

スケッチ
/****************************************************/
/* 【 Elegoo:5 】デジタル入出力                     */
/*    LEDの点灯・消灯をプッシュボタンで制御する        */
/****************************************************/

/*--------------------------------------------------*/
/* SW_CASE : スイッチボタンの配置                     */
/*       0 :ONを押す間、LEDを点灯する                 */
/*       1 :ONを押すたびにLEDの点灯・消灯を繰り返す    */
/*       2 :ONでLEDを点灯/OFFでLEDを消灯             */
/*--------------------------------------------------*/
#define SW_CASE 0       // 0, 1, 2

// ピンの定義
#define LED  5          // D5 : LED
#define SW_ON 9         // D9 : Switch ON
#define SW_OFF 8        // D8 : Switch OFF

// LEDの点灯状態
boolean led_on = false; // true:点灯/false:消灯

/*********/
/* setup */
/*********/
void setup(){
  // Setting pins:Pinmode(PINNo,[INPUT|OUTPUT|INPUT_PULLUP])
  pinMode(LED, OUTPUT);           // 出力用
  pinMode(SW_ON, INPUT_PULLUP);   // プルアップ時に発動
  pinMode(SW_OFF, INPUT_PULLUP);  // プルアップ時に発動
}

/********/
/* loop */
/********/
void loop(){

  // --------------------------------------------------
  // スイッチボタンの配置別
  // --------------------------------------------------
  switch(SW_CASE){

    // --------------------------------------------------
    // Switch_ONを押す間、LEDを点灯する
    // --------------------------------------------------
    case 0:
        // ONを押した(LOW)
        if (digitalRead(SW_ON) == LOW){
          digitalWrite(LED, HIGH);  // LEDを点灯
        }else{
          digitalWrite(LED, LOW);   // LEDを消灯
        }
        break;

    // --------------------------------------------------
    // Switch_ONを押すたびにLEDの点灯・消灯を繰り返す
    // --------------------------------------------------
    case 1:
          // ONを押した(LOW)
        if (digitalRead(SW_ON) == LOW){

          // LEDの点灯状態が消灯なら
          if( led_on == false){
            digitalWrite(LED, HIGH);  // LEDを点灯
          }else{
            digitalWrite(LED, LOW);   // LEDを消灯
          }

          // LEDの点灯状態を変更する
          led_on = (led_on == false) ? true : false;
        }
        break;

    // --------------------------------------------------
    // Switch_ONでLEDを点灯/Switch_OFFでLEDを消灯
    // --------------------------------------------------
    case 2:
        // ONを押した(LOW) LEDを点灯
        if (digitalRead(SW_ON) == LOW) digitalWrite(LED, HIGH);

        // OFFを押した(LOW) LEDを消灯
        if (digitalRead(SW_OFF) == LOW) digitalWrite(LED, LOW);
        break;
  }

  delay(100);
}

結果(動画)・モニタリング


SW_CASE[0] ONを押す間、LEDを点灯する


SW_CASE[1] ONを押すたびにLEDの点灯・消灯を繰り返す


SW_CASE[2] ONでLEDを点灯/OFFでLEDを消灯

2018年9月23日日曜日

[Elegoo: 3] 電子回路の基礎を学ぶ



概要 (Overview)
  • 電子部品の組み合わせ方(電子回路)を学ぶ
  • 抵抗器の値の読み方を学ぶ
  • 異なる値の抵抗器を使用して、LEDの明るさを変更する方法を学ぶ



使用する電子部品 (Component Required)
電子種別電子部品個数
マイコン Elegoo UNO R3 マイコンボード1
USBケーブル1
能動5mm LED(赤)1
受動220Ω 抵抗器1
1KΩ 抵抗器1
10KΩ 抵抗器1
機構ブレッドボード MB-1021
ジャンプワイヤ(赤)[オス-オス]1
ジャンプワイヤ(黒)[オス-オス]1



電子部品について (Component Introduction)

LED


  • LED (Light Emitting Diode) は「発光ダイオード」と呼ばれる半導体素子で、サイズ(直径)は3mm、5mm、8mm、10mmが一般的
  • 形状ごとに光の方向性に違いがあり、砲弾型(正面)、テープ型(拡散)、角型(拡散)、チップ型(拡散)などがある
  • LEDを直接電源に接続すると多くの電流が流れて破壊されるため、抵抗器で電流を調整する
  • 長いピンが正(+)、短いピンが負(ー)

抵抗器(レジスタ)


  • 抵抗器は電気の流れに抵抗し、抵抗値が高いほど抵抗が大きくなり、電流は少なくなる
  • 抵抗の単位はオーム(Ω)で色の縞模様(カラーコード)で抵抗値を示し、正と負のピンはない


カラーコード

ブレッドボード


  • ピンの差し込み口(ピンソケット)が碁盤の目状に配置され、田付けなしでピンを自由に着脱できる基板(ボード)
  • メインのピンソケットとは離れて2つのピンソケットがある場合、通常は+5Vとグランドのペアになっている。これらはレールと呼ばれ、ボード上の電子部品やポイントに電源を接続できる
  • 電子工作には必須パーツのひとつで、様々な形状やサイズの製品があり素早く回路を試作できるが、外れやすく半田付けほどの信用性はない

ジャンプワイヤ


  • ブレッドボード上の配線を行う際に役立つツール
  • 通常はリード線の両端にオス・メス・ワニ口クリップ等のピンが固定され、長さも数mmから数十cmまで用意されている
  • 接続する電子部品のピンの形状や回路の規模に合わせてジャンプワイヤを選択する
  • 単線タイプのジャンプワイヤは数mmから数cmまでの短いものが多く、固めの単線をコの字型に曲げて作成されている



電子回路 (Electronic Circuit)

回路図 (Schematic)


実体配線図 (Wiring Diagram)


  • ジャンプワイヤは+5Vは赤、グランドは黒など用途別に色分けしておくと配線しやすい
  • 電流を流しすぎて電子部品を焼き切らないよう、必ずデータシートの絶対最大定格を把握し、電源(+5V、グランド)は最後に配線する



実践 (To Practice)

配線写真 (Example Picture)


プログラム (Code)


ライブラリ
  • 無し

スケッチ
  • 無し

結果(動画)・モニタリング


抵抗器:220Ωbr

抵抗器:1kΩ


抵抗器:10kΩ

2018年8月5日日曜日

[Elegoo: 1 - 2] シリアルモニタ

1.シリアルモニタ
  1) シリアルモニタとは?
     ・Arduino等のマイコンボードは、その状態を知ることが重要なので、
        Arduino IDEとシリアル通信するためにシリアルモニタを組み込んだ。
     ・簡単にシリアルポートの入出力の確認ができるため、
        プログラムのデバッグ等に便利。

  2) シリアルモニタの開き方
     ・ArduinoボードとパソコンをUSBケーブルで繋ぎ、
        ツール-シリアルポートで開くポートを選択する

      ・以後はシリアルモニタのアイコンをクリックすると開く
 


  2) 設定

      ① ボーレートドロップダウンメニューをクリックして正しいボーレートを選択
          ※ ボーレート:1秒間に転送することのできるデータ量 bps(bits per second)
      ② 端末を自動スクロールに設定するかどうかを指定