プログラム生成アプリ
LEDを光らせよう
ブーザーとLEDを接続した基板のプログラムを動かそう
#include <M5Unified.h>
#include <Adafruit_NeoPixel.h>
#define BUZER_PIN 21 // ブザー接続ピン
#define LED_PIN 25 // フルカラーLED接続ピン
// 1個のNeoPixel(GRB, 800KHz)を使用
Adafruit_NeoPixel led(1, LED_PIN, NEO_RGB + NEO_KHZ800);
void setup() {
M5.begin();
Serial.begin(115200);
// ブザー用ピンを出力モードに設定
pinMode(BUZER_PIN, OUTPUT);
// LEDの初期化
led.begin();
led.show();
}
void loop() {
// tone()で指定周波数の音を100ms鳴らす
tone(BUZER_PIN, 440, 100);
delay(120); // 音が鳴り終わるまで待機
// ブザー出力を0にしてノイズを消す
digitalWrite(BUZER_PIN, 0);
// 0~255まで値を増加させる
for (int value = 0; value <= 255; value++) {
updateDisplay(value);
}
// 255~0まで値を減少させる
for (int value = 255; value >= 0; value--) {
updateDisplay(value);
}
}
// 値に応じたLED色とブザー音を更新する関数
void updateDisplay(int value) {
// LED色の決定
// 値が低いと青(0,0,255)、高いと赤(255,0,0)になるよう線形補間
uint8_t red = map(value, 0, 255, 0, 255);
uint8_t blue = map(value, 0, 255, 255, 0);
uint8_t green = 0;
led.setPixelColor(0, led.Color(red, green, blue));
led.show();
delay(50); // 色と音の変化が見やすいように少し待機
}
土壌センサを取り付けて見よう
土壌センサーを使ってミニ犬吠埼灯台をパワーアップさせよう!
#include <M5Unified.h>
#include <Adafruit_NeoPixel.h>
#define BUZER_PIN 21 // 圧電ブザー接続ピン
#define LED_PIN 25 // フルカラーLED接続ピン
#define ADC_PIN 32 // ADC入力ピン(静電容量式土壌センサ)
// ユーザ定義の閾値(実測値に合わせて調整してください)
// 例:水中に入れたときの値(very wet)と空気中の値(dry)から設定
const int veryWetThreshold = 1200; // very wet時のADC閾値(低い値)
const int dryThreshold = 2500; // dry時のADC閾値(高い値)
// 1個のNeoPixel(GRB、800KHz)を使用
Adafruit_NeoPixel led(1, LED_PIN, NEO_RGB + NEO_KHZ800);
void setup() {
M5.begin();
Serial.begin(115200);
// 起動時にブザーで通知(1000Hzの音を100ms出力)
tone(BUZER_PIN, 1000, 100);
delay(120); // ブザー音が終了するまで待機
digitalWrite(BUZER_PIN, 0);
// LEDの初期化
led.begin();
led.show();
}
void loop() {
// ADC値の取得
int adcValue = analogRead(ADC_PIN);
Serial.println(adcValue);
uint8_t red = 0;
uint8_t blue = 0;
// very wet: センサ値が veryWetThreshold 以下なら青色
if(adcValue <= veryWetThreshold) {
red = 0;
blue = 255;
}
// dry: センサ値が dryThreshold 以上なら赤色
else if(adcValue >= dryThreshold) {
red = 255;
blue = 0;
}
// wet: 閾値の間なら、値に応じて線形補間(青→赤)
else {
// 閾値間での正規化(0.0〜1.0)
float norm = float(adcValue - veryWetThreshold) / (dryThreshold - veryWetThreshold);
red = norm * 255; // norm=0で0、norm=1で255
blue = (1.0 - norm) * 255; // norm=0で255、norm=1で0
}
// LED色の設定(今回は緑は使用しないため0固定)
led.setPixelColor(0, led.Color(red, 0, blue));
led.show();
delay(200); // 約200msごとに更新
}
Arduino IDEのセットアップを使用
Arduino IDEをセットアップは下記の記事を参考にインストールを行いましょう
Arduino IDEを使って、M5Atomに書き込めるように設定を行おう。