This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

マイコンおよびプログラムの構築

Last updated at Posted at 2017-04-10

マイコンおよびプログラムの構築

以下の画像の「マイコンおよびプログラムの構築」部分を説明します。

スクリーンショット 2017-04-07 16.48.15.png

本資料で説明する最終的な成果物(マイコン)はこんな感じになります。
IMG_2192.jpg

手順

  1. Arduino IDE のインストール
  2. ボードとシリアルポートの設定
  3. LEDを点滅させてみよう
  4. 3つのLEDを点滅させてみよう
  5. 照度センサの値をシリアルモニタで見てみよう
  6. sakura.ioに照度センサの値を送る

Arduino IDE のインストール

https://www.arduino.cc/en/Main/Software にアクセスし、開発環境を入手します。

ボードとシリアルポートの設定

Arduino IDE が起動したら、Arduino本体をPCに接続します。

ボード

ツール > ボード からArduino/Genuino Unoを選択します。
スクリーンショット 2017-04-09 21.59.25.png

シリアルポート

ツール > シリアルポート から、出てきたCOMポートを選択します。
Macの場合はシリアルポート内の~~~~(Arduino/Genuino Uno)となるものを選択します。
スクリーンショット 2017-04-10 10.37.08.png

LEDを点滅させてみよう

結線

以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを接続していきましょう。

⚠️注意して欲しいこと

  • ArduinoをPCから外してから作業を行いましょう。
  • プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。

ℹ︎ヒント

  • 今回用意しているLEDは、抵抗を内蔵している製品となります。
  • ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
    • 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
  • LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。

blink_led_ブレッドボード.png

プログラムの流し込み

ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。

blink_led.ino
#define LED 12

void setup() {
  pinMode(LED, OUTPUT);

}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

スクリーンショット 2017-04-09 22.28.47.pngマークをクリックし、Arduinoにプログラムを書き込みます。
LEDが一秒置きに点滅したら成功です。

3つのLEDを点滅させてみよう

結線

以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを追加で接続していきましょう。

⚠️注意して欲しいこと

  • ArduinoをPCから外してから作業を行いましょう。
  • プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。

ℹ︎ヒント

  • 今回用意しているLEDは、抵抗を内蔵している製品となります。
  • ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
    • 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
  • LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。

blink_yellow_white_blue_led_ブレッドボード.png

プログラムの流し込み

ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。

blink_yellow_white_blue_led.ino
#define YELLOW_LED 10
#define WHITE_LED 9
#define BLUE_LED 8

void setup() {
  pinMode(YELLOW_LED, OUTPUT);
  pinMode(WHITE_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);

}

void loop() {
  // 黄色LEDを点滅
  digitalWrite(YELLOW_LED, HIGH);
  delay(1000);
  digitalWrite(YELLOW_LED, LOW);
  delay(1000);

  // 白LEDを点滅
  digitalWrite(WHITE_LED, HIGH);
  delay(1000);
  digitalWrite(WHITE_LED, LOW);
  delay(1000);

  // 青色LEDを点滅
  digitalWrite(BLUE_LED, HIGH);
  delay(1000);
  digitalWrite(BLUE_LED, LOW);
  delay(1000);
}

スクリーンショット 2017-04-09 22.28.47.pngマークをクリックし、Arduinoにプログラムを書き込みます。
黄色、白色、青色のLEDが一秒置きに点滅したら成功です。

照度センサの値をシリアルモニタで見てみよう

結線

以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを追加で接続していきましょう。

⚠️注意して欲しいこと

  • ArduinoをPCから外してから作業を行いましょう。
  • プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。

ℹ︎ヒント

  • 今回用意しているLEDは、抵抗を内蔵している製品となります。
  • ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
    • 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
  • LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。
  • 照度センサには極性がありません。どちらの向きで配線しても大丈夫です。
  • 抵抗には極性がありません。どちらの向きで配線しても大丈夫です。

light_sensor_ブレッドボード.png

プログラムの流し込み

ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。

watch_light_value.ino
// 照度センサー
#define CDS A0

// LED
#define RED_LED 12

// 照度センサーの閾値
#define UPPERLIMIT 750

uint32_t light_val = 0;
uint32_t upperlimit = UPPERLIMIT;

void setup() {
  pinMode(RED_LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  light_val = (uint32_t)analogRead(CDS);

  Serial.print("light value: ");
  Serial.println(light_val);

  if (light_val > UPPERLIMIT) {  // 部屋が暗くなったら
    digitalWrite(RED_LED, HIGH);  // LEDを点灯
  } else {
    digitalWrite(RED_LED, LOW);  // LEDを消灯
  }
  delay(1000);
}

スクリーンショット 2017-04-09 22.28.47.pngマークをクリックし、Arduinoにプログラムを書き込みます。
スクリーンショット 2017-04-09 22.58.03.pngマークをクリックして、シリアルモニタを表示します。シリアルモニタに、一秒置きに照度センサの値が書き込まれていたら成功です。
照度センサを手でかざして、値の変化を見てみましょう。

sakura.ioに照度センサの値を送る

ライブラリのインストール

sakura.ioに照度センサの値を送ることを簡潔に行うために、さくらインターネット社が提供しているライブラリをインストールしましょう。
スケッチ > ライブラリをインクルード > ライブラリを管理... をクリックします。

スクリーンショット 2017-04-09 23.02.24.png

右上検索窓からsakuraioを入力すると、SakuraIO by SAKURA Internet Inc.がヒットするので、該当ライブラリをインストールしてください。
スクリーンショット 2017-04-09 23.06.25.png

プログラムの流し込み

ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。

send_light_value_to_sakura.ino
#include <SakuraIO.h>

SakuraIO_I2C sakuraio;

// 照度センサー
#define CDS A0

// LED
#define RED_LED 12
#define YELLOW_LED 10
#define WHITE_LED 9
#define BLUE_LED 8

// 照度センサーの閾値
#define UPPERLIMIT 750

uint32_t light_val = 0;
uint32_t cnt = 0;
uint32_t upperlimit = UPPERLIMIT;

void setup() {
  pinMode(RED_LED, OUTPUT);
  pinMode(YELLOW_LED, OUTPUT);
  pinMode(WHITE_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  Serial.begin(9600);
  Serial.print("Waiting to come online");
  for(;;){
    if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
}

void loop() {
  cnt++;
  Serial.println(cnt);
  light_val = (uint32_t)analogRead(CDS);

  Serial.print("light value: ");
  Serial.println(light_val);

  if(sakuraio.enqueueTx(0,light_val) != CMD_ERROR_NONE){
    Serial.println("[ERR] enqueue error");
  }
  if(sakuraio.enqueueTx(1,upperlimit) != CMD_ERROR_NONE){
    Serial.println("[ERR] enqueue error");
  }


  if (light_val > UPPERLIMIT) {  // 部屋が暗くなったら
    digitalWrite(RED_LED, HIGH);  // LEDを点灯
  } else {
    digitalWrite(RED_LED, LOW);  // LEDを消灯
  }

  sakuraio.send();
  delay(1000);

  uint8_t available;
  uint8_t queued;
  if(sakuraio.getTxQueueLength(&available, &queued) != CMD_ERROR_NONE){
    Serial.println("[ERR] get tx queue length error");
  }

  Serial.print("Available :");
  Serial.print(available);
  Serial.print(" Queued :");
  Serial.println(queued);

  // sakura.ioから受信したデータに応じてLED点滅
  available = 0;
  if (sakuraio.getRxQueueLength(&available, &queued) != CMD_ERROR_NONE) {
    Serial.println("[ERR] get rx queue length error");
  }
  if (available > 0) {
    uint8_t ch, type, value[8];
    int64_t offset;
    sakuraio.dequeueRx(&ch, &type, value, &offset);
    Serial.print("ch:");
    Serial.println(ch);
    Serial.print("value:");
    Serial.println(value[0]);
    if (ch == 10) {
      if (value[0] == 1) {
        digitalWrite(YELLOW_LED, HIGH);
        delay(1000);
        digitalWrite(YELLOW_LED, LOW);
      }
    } else if (ch == 20) {
      if (value[0] == 1) {
        digitalWrite(WHITE_LED, HIGH);
        delay(1000);
        digitalWrite(WHITE_LED, LOW);
      }
    } else if (ch == 30) {
      if (value[0] == 1) {
        digitalWrite(BLUE_LED, HIGH);
        delay(1000);
        digitalWrite(BLUE_LED, LOW);
      }
    }
    sakuraio.clearRx();
  }
}

スクリーンショット 2017-04-09 22.28.47.pngマークをクリックし、Arduinoにプログラムを書き込みます。
スクリーンショット 2017-04-09 22.58.03.pngマークをクリックして、シリアルモニタを表示します。シリアルモニタに、Waiting to come online...という書き込みの後、一秒置きに照度センサの値が書き込まれていたらひとまず成功です。

スクリーンショット 2017-04-11 13.27.01.png

sakura.ioに照度センサの値が実際に送信されているかは次のフェーズで確認します。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up