Grove Beginner KitでのArduino入門 その12 ボーナスプロジェクト

概要

前回までで、すべての部品を使ってみました。今回は公式マニュアルにあったボーナスプロジェクトを確認してみたいと思います。

音楽再生

//Music Dynamic Rhythm Lamp
#define NTD0 -1
#define NTD1 294
#define NTD2 330
#define NTD3 350
#define NTD4 393
#define NTD5 441
#define NTD6 495
#define NTD7 556

#define NTDL1 147
#define NTDL2 165
#define NTDL3 175
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278

#define NTDH1 589
#define NTDH2 661
#define NTDH3 700
#define NTDH4 786
#define NTDH5 882
#define NTDH6 990
#define NTDH7 112

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625

int tune[] =
{
  NTD3, NTD3, NTD4, NTD5,
  NTD5, NTD4, NTD3, NTD2,
  NTD1, NTD1, NTD2, NTD3,
  NTD3, NTD2, NTD2,
  NTD3, NTD3, NTD4, NTD5,
  NTD5, NTD4, NTD3, NTD2,
  NTD1, NTD1, NTD2, NTD3,
  NTD2, NTD1, NTD1,
  NTD2, NTD2, NTD3, NTD1,
  NTD2, NTD3, NTD4, NTD3, NTD1,
  NTD2, NTD3, NTD4, NTD3, NTD2,
  NTD1, NTD2, NTDL5, NTD0,
  NTD3, NTD3, NTD4, NTD5,
  NTD5, NTD4, NTD3, NTD4, NTD2,
  NTD1, NTD1, NTD2, NTD3,
  NTD2, NTD1, NTD1
};

float durt[] =
{
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1 + 0.5, 0.5, 1 + 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1 + 0.5, 0.5, 1 + 1,
  1, 1, 1, 1,
  1, 0.5, 0.5, 1, 1,
  1, 0.5, 0.5, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 0.5, 0.5,
  1, 1, 1, 1,
  1 + 0.5, 0.5, 1 + 1,
};

int length;
int tonepin = 5;
int ledp = 4;

void setup()
{
  pinMode(tonepin, OUTPUT);
  pinMode(ledp, OUTPUT);
  length = sizeof(tune) / sizeof(tune[0]);
}

void loop()
{
  for (int x = 0; x < length; x++){
    tone(tonepin, tune[x]);
    digitalWrite(ledp, HIGH);
    delay(400 * durt[x]);
    digitalWrite(ledp, LOW);
    delay(100 * durt[x]);
    noTone(tonepin);
  }
  delay(4000);
}

Arduinoにあるtone()関数を使って、音を出していますね。長いのですが、曲のデータがほとんどで内容的にはよくある処理ですね。LEDが光っていますがあまり意味がない気もします。

複数センサー

//light Induction Desk Lamp
int soundPin = A2; // Analog sound sensor is to be attached to analog
int lightPin = A6; //Analog light sensor is to be attached to analog
int ledPin = 4; // Digital LED is to be attached to digital

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(lightPin, INPUT);
  pinMode(soundPin, INPUT);
}

void loop() {
  int soundState = analogRead(soundPin); // Read sound sensor’s value
  int lightState = analogRead(lightPin); // Read light sensor’s value
  // if the sound sensor's value is greater than 500 or the sound sensor's is less than 200, the light will be on.
  //Otherwise, the light will be turned off
  if (soundState > 500 || lightState < 200) {
    digitalWrite(ledPin, HIGH);
    delay(500); //You can add the "//" to remove the delay
  } else {
    digitalWrite(ledPin, LOW);
  }
}

マイクと明るさセンサーを使って、一定以上の音か暗くなるとLEDが点灯するスケッチですね。環境音や部屋の明るさは様々ですので、上記の設定のままだとざわざわした部屋だと常に反応してしまうので、もう少し音のしきい値を上げたほうがいいですね。

本当は現在値をシリアル出力か、画面に表示してあげるといいと思います。

自作基板とモジュールを作りましょう

何故か基板を設計しよう的なマニュアルになっていました。Seeed社はPCB作成もやっていますからね。

ちなみにSeeed社もGeppettoというサービスを使って、かんたんに独自基板を作るサービスを提供しています。

上記が英文ですが説明しているブログになります。

上記が実際のサービスページかな。SeeedのGroveモジュールなどを組み合わせて一枚の基板を作ってくれるサービスみたいです。とはいえ、50ドルぐらいかかるので個人では気軽に頼めないかな?

まとめ

全般的には非常におすすめなキットでした。入門には良さそうですね。もう少し凝ったサンプルがあっても良さそうですがArduino UNOだと作り込みが大変そうです。別記事としてESP32を使って制御してみたいと思います。

コメント

タイトルとURLをコピーしました