Rich Richer Richest

カメラ / レンズ / 写真 / 名古屋 / ライフハック / 思い付き / 猫 ライフログで暮らしをRichに!

【備忘録】Arduino + リレーモジュールで切り替えスイッチを作る。

f:id:mocchipa:20200803185301p:plain

友人からしつこく頼まれた

オーディオのセレクタースイッチを自作したいという友人。

そんなの Arduino + マルチリレーモジュールで作れちゃうんじゃね?とアドバイス

早速材料揃えたけど、わかんない、できない、ドラえもーん、、、的に泣きつかれ。

会うたび、作ってくれと言われ続け重い腰を上げる。

 

ハードの材料はこちら

  • Aruduino UNOでもnanoでもどちらでもOK.
  • 8、もしくは16 リレーモジュール。
  • プッシュスイッチ(タクトスイッチ)8pcs ← モーメンタリータイプで!
  • 1/4W 10kΩ抵抗器 8pcs

 

初号機 スイッチポチポチシーケンス式

スイッチを押すたびに リレー1、リレー2、リレー3 と切り替わり、リレー8まで行ったらリレー1に戻ります。

 

これは実験して動作確認済みです。

Arduino の D10 を入力ポートに割り当てます。

Arduino の D1 ~ D8 をリレー制御の出力ポートに割り当てます。

 

スイッチ

D10 のスイッチ部分は下記のようにつないで下さい。

5V は Arduino の 5V のポートから取ればいいです。

抵抗の末端はGNDにつなぎます。

f:id:mocchipa:20200803190926p:plain

リレー制御ポート

片切り、-端子共通式の制御の場合 8リレーの場合

f:id:mocchipa:20200803192009p:plain

マイナスを共通にしないで、両切りにする場合 16リレー、もしくは8リレーモジュール×2

f:id:mocchipa:20200803192212p:plain

プログラムソース

int sw_num;
// D10
int sw_PIN = 10;

void setup() {
// put your setup code here, to run once:

//initalize
// リレー D1 - D8 出力用に初期化
for(int i=1; i <= 8; i++){
pinMode(i,OUTPUT);
digitalWrite(i ,HIGH);
delay(100);
}

//#1 relay is first.
// 起動時1番リレーON
digitalWrite(1,LOW);
// for switch
pinMode(sw_PIN , INPUT);

// switch number intialize;
sw_num = 1;
}

void loop() {
// put your main code here, to run repeatedly:

// Checking if sw is pushed.
//D10 のスイッチが押された判定
if(digitalRead(sw_PIN) == HIGH) {
sw_num = sw_num + 1 ;
if (sw_num > 8) sw_num = 1;
int i = 1;
//全てのリレーをオフする
for(i = 1 ; i <= 8 ; i++){
digitalWrite(i , HIGH);
//stop 0.1sec
delay(100);
}
//対象のリレーをONにする。
digitalWrite(sw_num , LOW);
}
// loop 10times per 1sec.
delay(100);
}

 

弐号機 8ボタン式(動作未確認)

 上記でつくってあげたところ、嫌だ言われました。

ボタン8個で切り替えしたいって、、、

なんてワガママな。。。

もうハードくみ上げて実験する気力ありません。

プログラムソースだけ書いてあとは自分でやってくれと投げました。

下記動作未確認です。

動く気がしますけど、実験してみておかしいところがあったら教えてください!

動作確認してないので参考までに。

 

ここが自信ないところ

入出力で各8ずつほしいです。

Arduinoのデジタル端子が足りません。

調べたら、A0 ~ A5 まで宣言すればデジタル端子の D14 ~ D18 として割り当てれるそうです。

ハードの接続

D0 ~ D7 までをスイッチ端子。接続は初号機参考。

D8 ~ A1 までをリレー制御出力端子に割り当て。これも接続は初号機を参考。

プログラムソース

 

int sel_num;

void setup() {
// put your setup code here, to run once:
int i;

//port No 0 - 7 inupt . connect sw.
for(i=0; i <=7 ;i++){
pinMode(i , INPUT);
}
//port 8 - 15 14(A0) 15(A1)
for(i=8; i <= 15; i++){
pinMode(i,OUTPUT);
digitalWrite(i ,HIGH);
delay(100);
}

//When sysutem boot.
sel_num = 8;
digitalWrite(sel_num ,LOW);

}

void loop() {
// put your main code here, to run repeatedly:
int i;
boolean input_flg = false;

for(i=0 ; i <=7 ;i++){
if(digitalRead(i) == HIGH){
sel_num = i + 8;
input_flg = true;
break;
}
}

// When push some button.
if(input_flg) {
// All Relay Off
for(i = 8 ; i <= 15 ; i++){
digitalWrite(i , HIGH);
delay(100);
}

// selected Relay ON
digitalWrite(sel_num , LOW);
}
delay(100);
}

 

共有で置いておきます。

参考までに!