M5 Atome LiteからM5Stack用ミニリレーユニットを動かす
1. やりたいこと
M5Stack用ミニリレーユニットを使うためのチュートリアルです。カンタンに試せるように、リレーへの給電はAtom Liteの5Vを利用しています。ミニリレーユニットの使い方を学んだ後は、必要に応じて入力電源を変更してください。 2. チュートリアルでやることの概要
M5 Atom Liteのボタン(中央ボタン)でリレーのON/OFFを切り替える
リレーがONのとき:LEDに5Vが供給され点灯
リレーがOFFのとき:LEDは消灯
リレー制御はGPIO26を使用(M5Stackミニリレーユニットのデフォルト)
3. ミニリレーユニットについて
https://gyazo.com/06cb6c0d97cab5735a819c8d61a0aaa1
左の回路図のとおり、通常時(G26「REL.」がLowのとき)はCOM(Common)と NC(Normaly Closed)が接続されています。コイルに電圧を加える(G26「REL.」をHighにする)とスイッチが切り替わり、COM(Common)とNO(Normaly Open)が接続されます。このチュートリアルではNO(Normaly Open)側にLEDを接続しています(NCは使っていません)。
使い分けは、下表を参考にしてください。
table:NOとNCの使い分け
リレー信号が通常状態のときに(G26「REL.」がLowのとき)
回路が切断されていて欲しい → NO(Normaly Open)に接続
回路が接続されていて欲しい → NC(Normaly Closed)に接続
4. ハードウェアの接続
https://gyazo.com/5087ccffe477b633677d5b65f3755c74
table:接続
M5 Atom Lite USB経由でPCに接続
ミニリレーユニット Atom LiteのGroveポート(PORT A)
リレー COM Atom Liteの5Vピン
リレー NO → LED → 抵抗(180Ω)→Atom LiteのGNDピン
リレー NC 接続なし
5. サンプルコード
code:atom_lite_relayU023.ino
const int RELAY_PIN = 26; // リレー制御用ピン(Groveポート G26)
bool relayState = false;
void setup() {
M5.begin(true, false, true); // LEDあり, IMUなし, シリアルあり
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // 初期状態OFF
// 内蔵RGB LEDを青にする(OFF状態)
M5.dis.setBrightness(20); // 明るさ(0〜255)
M5.dis.drawpix(0, 0x0000ff); // 青
}
void loop() {
M5.update();
if (M5.Btn.wasPressed()) {
// リレーのON/OFFを切り替え
relayState = !relayState;
digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
// 内蔵LEDで状態表示(赤:ON、青:OFF)
if (relayState) {
M5.dis.drawpix(0, 0xff0000); // 赤
} else {
M5.dis.drawpix(0, 0x0000ff); // 青
}
}
delay(10); // チャタリング対策
}
細かい解説
リレーのON/OFFの切り替えは、 三項演算子(条件 ? 真の場合 : 偽の場合)を使って以下のように書いています。
code:RELAY_PIN
digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
//relayState が true(=ON状態)なら HIGH、そうでなければ LOWの状態にRELAY_PINに設定
Pythonの三項演算子とはやや表記が異なるので補足で説明しました。
なお、relayStateの状態を考慮すればこの三項演算子の記述は以下のように省略することもできます。
code:RELAY_PIN
digitalWrite(RELAY_PIN, relayState);
//relayState の状態をそのままRELAY_PINに設定しても同じ
ここでは、「『ココで HIGH または LOW を明示的に切り替えてるな』とわかって可読性が上がる」というメリットもあるため、三項演算子を用いた表記を採用しています。人にやさしく。
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b