MAUEC2018doc

MAU電子工作講習資料

MAU電子工作講習資料(2019/08/22 10:00 – 17:00)

コピーペーストをしやすいように、MAU電子工作講習のコードを載せています。手を動かすことのほうが多いので、特にプログラムの解説はしていません。今回は実際に手を使って組むので、前回のプログラミング講習よりもミスが増えると思います。分からないことがあれば遠慮なく周りに質問してください。

アンケートのご回答

今回の講習のアンケートはここをクリック

  • Teamsに参加していない方は、アンケートの回答をお願いします。
情報共有、欠席連絡等に便利なMicrosoft Teamsに参加していただくために必要な情報について、アンケート(ここをクリック)への回答をお願いします。

質問について

本日の講習スライド

本日の講習スライドは1パートのみです。

  • Arduino入門
  • マイコン内蔵LEDの点灯

    Processingではsetupとdrawでしたが、Arduinoではsetupとloop関数からなります。名前がdrawからloopに変わっていますが、役割は一緒です。

    
    int PIN_LED = 13; //内蔵LEDは13番のPIN
    
    void setup() {
      pinMode(PIN_LED, OUTPUT); //内蔵LEDのPINを出力モードにする
    }
    void loop() {
      digitalWrite(PIN_LED, HIGH); //内蔵LEDのPINをHIGHにして電流を流し、点灯
      delay(1000); //そのまま1秒待つ
      digitalWrite(PIN_LED, LOW); //内蔵LEDのPINをLOWにして、電流を止め、消灯
      delay(1000);
    }
    
    	

    GPIOピンの入力・出力モードの切り替え

    
    int inputPinNo= 10;// ピンはピン番号で指定する
    int outputPinNo= 2;// ピン番号は変数(定数)にし、分かり易い名前をつけよう
    int highOrLow;
    
    void setup(){
      pinMode( outputPinNo, OUTPUT);// ピンを出力モードに切り替え
      pinMode( inputPinNo, INPUT);// ピンを入力モードに切り替え
    }
    
    void loop(){
      digitalWrite(outputPinNo, HIGH);// ピンに出力
      highOrLow= digitalRead(inputPinNo);// ピンから入力
    }
    
    	

    シリアル通信でhello worldを出力

    
    void setup() {
    Serial.begin(9600);
    }
    void loop() {
    Serial.println("hello world");
    delay(1000);
    }
    
    	

    HIGHかLOWかを見る。HIGHなら1,LOWなら0

    
    int inputPinNo= 10;// ピンはピン番号で指定する
    int outputPinNo= 2;// ピン番号は変数(定数)にし、分かり易い名前をつけよう
    int highOrLow;
    
    void setup(){
      pinMode( outputPinNo, OUTPUT);// ピンを出力モードに切り替え
      pinMode( inputPinNo, INPUT);// ピンを入力モードに切り替え
      Serial.begin(9600);
    }
    
    void loop(){
      digitalWrite(outputPinNo, HIGH);// ピンに出力
      highOrLow= digitalRead(inputPinNo);// ピンから入力
      Serial.println(highOrLow);
    
    }
    
    	

    LEDの点灯

    1秒ごとに点滅します。

    
    int PIN_LED = 7;
    void setup() {
      pinMode(PIN_LED, OUTPUT);
    }
    void loop() {
      digitalWrite(PIN_LED, HIGH);
      delay(1000);
      digitalWrite(PIN_LED, LOW);
      delay(1000);
    }
    
    	

    PWM制御を用いたLEDの点灯

    途中のfor文の()内の最後、 led_value += 10は、led_value = led_value + 10と同じで、10ずつ増やしていくループになります。
    その次のfor文の()内の最後、led_value -= 10は、led_value = led_value – 10と同じで、10ずつ減らしていくループになります。
    最初のループで徐々に明るくなり、次のループで徐々に暗くなっていきます。

    
    int PIN_LED = 3;
    void setup() {
      pinMode(PIN_LED, OUTPUT);
    }
    void loop() {
    for ( int led_value = 0; led_value < 256; led_value += 10 ) {
        analogWrite(PIN_LED, led_value );
        delay( 30 );
      }
      for ( int led_value = 255; led_value > -1; led_value -= 10 ) {
        analogWrite(PIN_LED, led_value );
        delay( 30);
      }
    }
    
    	

    フォトリフレクタを使う

    
    int analogPin = 3;     //受信側をアナログピンの3番に接続
    int val = 0;           //読み取った値を格納する変数
    void setup()
    {
      Serial.begin(9600);              //シリアルの設定
    }
    void loop()
    {
      val = analogRead(analogPin);     //入力ピンの読み取り
      Serial.println(val);             //値の表示(0~1024)
    }
    
    	

    フルカラーLEDの点灯

    NeoPixelライブラリをインストールすることを忘れないでください。

    • 「スケッチ」->「ライブラリをインクルード」->「ライブラリを管理」の順にクリック
    • 右上の「検索をフィルタ・・・」の欄に「NeoPixel」と入力する
    • Adafruit NeoPixelを選んで「インストール」をクリックする
    • インストールが終わったら「ライブラリマネージャ」を閉じる

    
    #include <Adafruit_NeoPixel.h> // NeoPixelを接続したPIN番号を設定
    #define PIN 9
    #define NUMPIXELS 1
    Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);
    void setup() {
      pixels.begin(); //NeoPixelの初期化
    }
    
    void loop() {
      pixels.clear(); // 接続しているすべてのLEDを消灯
      pixels.show();  //LEDに色情報を送る(消灯の場合も)
      pixels.setPixelColor(0, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
      pixels.show();   //LEDに色情報を送る
      delay(100); //遅延時間
    }
    
    	

    フルカラーLED複数個の点灯

    このコードは2個の場合です。3個ならば #define NUMPIXELS 2 の「2」を「3」に変えればOKです。

    
    #include <Adafruit_NeoPixel.h>
    #define PIN 6 // NeoPixelを接続したPIN番号を設定
    #define NUMPIXELS 2 // NeoPixelのLEDの数を設定
    Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    void setup() {
      pixels.begin(); //NeoPixelの初期化
    }
    
    void loop() {
      pixels.clear(); // 接続しているすべてのLEDを消灯
      pixels.show();
      for (int i = 0; i < NUMPIXELS; i++) {//接続されているLEDの個数だけ色情報を送る(NUMPIXELSで指定、NUMPIXELSよりもLEDが少なくてもエラーは起こらない)
        pixels.setPixelColor(i, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
        pixels.show();   //LEDに色情報を送る
        delay(100); //遅延時間
      }
    }
    
    	

    おまけ:フルカラーLED複数個の順番点灯

    
    #include <Adafruit_NeoPixel.h>
    #define PIN 6 // NeoPixelを接続したPIN番号を設定
    #define NUMPIXELS 2 // NeoPixelのLEDの数を設定
    Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    void setup() {
      pixels.begin(); //NeoPixelの初期化
    }
    
    void loop() {
      pixels.clear(); // 接続しているすべてのLEDを消灯
      pixels.show();
      for (int i = 0; i < NUMPIXELS; i++) {//接続されているLEDの個数だけ色情報を送る(NUMPIXELSで指定、NUMPIXELSよりもLEDが少なくてもエラーは起こらない)
        pixels.setPixelColor(i, pixels.Color(255, 0, 255));//明るい紫色(ピンク色,赤+青)
        pixels.show();   //LEDに色情報を送る
        delay(50); //遅延時間
        pixels.clear();
        pixels.show();
      }
    }