ルーターを毎日再起動させる物を自作
不定期でWi-fiルータのネットワークが切れるので、ルーターを毎日再起動させる物を自作しました。
ネット上の先輩たちはスマートプラグやタイマーコンセントを使用されていましたが、
どちらも定期的に壊れて買い替えている方がいらっしゃるみたいです。
それにスマートプラグを駆動するために自宅のネットワーク情報を外部に登録するのもちょっと怖いし、
せっかくですのでarduinoを使用して自作してみました。
今回の一番の工夫点は、ルーターの12V電源ラインをリレーでON/OFFさせたという点です。
自作で100Vを触るのはさすがに怖い、12Vならまぁきっと致命的な事にはならないだろうとトライしてみました。
(12VならOKっていう根拠はないです。カー用品関連でちょいちょい触ってるな程度の軽い感じです。)
【コンセプト】
・自宅に転がっているarduinoを活用
・ルーターのアダプタスペックより12V、2Aを任意のタイミングでリレーでON/OFFする
・寝ている時間にON/OFFさせたいのでRTCモジュールを使用
部品名 | 概要 |
arduino nano互換品 | RTCモジュールから時刻を取得して、リレーをON/OFFする |
OMRON G5V-2-DC5 | 5V信号でON/OFFできるリレー 接点電流の最大値2A、操作コイル定格電流100mA |
トランジスタ 2SC1815(互換品) | arduinoのデジタルピンは100mA流せないのでトランジスタを使用 ※ブレッドボード試作品でarduinoデジタルピンから直接リレーのコイルにつないだら動いたけど、ちゃんとお作法に沿って正しく設計。 |
1kΩの抵抗 | トランジスタ駆動に使用、秋月電子のリレーモジュールを参考に選定。 (本リレーに特化してトランジスタ増幅の設計計算してないけど、直感的に多分こんなもんやろ。) ドライバー内蔵リレーモジュール基板 |
10kΩの抵抗 | 同上 |
整流用ダイオード 1N4007 | オムロンのFAQを参考に選定、定番のやつを使用。 ・逆耐電圧:回路電圧の10倍以上 ・順方向電流:負荷電流以上 |
DS3231 RTCモジュール | 定番品、精度がいいらしい |
5.5mm DCジャック(メス) | Wi-fiルータの電源プラグをさすやつ。ここからarduinoの電源も少し拝借。 |
5.5mm DCジャック(オス) | Wi-fiルータへ電源を供給する |
電源コード | たまたま手持ちがあったホームセンターの切り売り品。 |
ユニバーサル基板5cm×7cm | たまたま手持ちがあった基板 |
ケース | ダイソーで売ってたトレーディングカードのケース。2個で110円。 |
【組立】
基本的にユニバーサル基板にいい感じに部品を載せて回路をつないでいけばいいですが、
5.5mm DCジャック(メス)はユニバーサル基板の穴に刺さらなかったので、
少し悩んだ末に2.5mmのドリルで穴を広げて無理やり固定しました。
最近は様々なサイズのドリルもダイソーで買えるいい時代になりました。
※最初は7セグでも載せて時刻が読めるようにとも思いましたが、どうせ見ないしな、、という事で廃止。
完成品基板上の左下端っこが大幅に空いているのは7セグでも載せようと思ってた箇所です。
回路を組み立てたらこんな感じになりました。
12Vといえど短絡したら発熱の危険がありますので12V電源系統はエポキシの接着剤で封止しました。
(万が一のショートが発生しても多分ACアダプタ保護機能が働いて電源カットされるはずですが、念のため保護)
【プログラム】
※事前にDS3231の時間合わせが必要です。こちらを参照ください。
arduinoのスケッチは下記です。
5:00にリレーをOFF側に1分駆動して電源遮断することにしました。
arduinoボード上のLEDを時間の数だけ点滅させて、ざっくり時刻が分かるようにしました。
※hourのみLED点滅で把握、minはめんどいからやめました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
//タイマー時間 int timea = 5; //時 int timeb = 0; //分 //DS3231準備 #include #define RTC_addr 0x68 #define ASCII_ZERO 48 char* pchDate = "1990/01/01"; char* pchTime = "00:00:00"; byte sec = 0; byte min = 0; byte hour = 0; byte day = 0; byte date = 0; byte month = 0; byte year = 0; const char* Week[] = { "", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int hun = 0; int ji = 0; //DS3231_日時を取得 void RTC_DS3231(void) { Wire.beginTransmission(RTC_addr); Wire.write(0x00); Wire.endTransmission(); Wire.requestFrom(RTC_addr, 7); if (Wire.available() >= 7) { sec = Wire.read(); min = Wire.read(); hour = Wire.read(); day = Wire.read(); date = Wire.read(); month = Wire.read(); year = Wire.read(); hun = ((int)(min >> 4)) * 10 + (int)(min & B00001111); ji = ((int)(bitRead(hour, 5) * 2 + bitRead(hour, 4))) * 10 + (int)(hour & B00001111); pchTime[0] = bitRead(hour, 5) * 2 + bitRead(hour, 4) + ASCII_ZERO; pchTime[1] = (hour & B00001111) + ASCII_ZERO; pchTime[3] = (min >> 4) + ASCII_ZERO; pchTime[4] = (min & B00001111) + ASCII_ZERO; pchTime[6] = (sec >> 4) + ASCII_ZERO; pchTime[7] = (sec & B00001111) + ASCII_ZERO; pchDate[0] = '2'; pchDate[1] = '0'; pchDate[2] = (year >> 4) + ASCII_ZERO; pchDate[3] = (year & B00001111) + ASCII_ZERO; pchDate[5] = bitRead(month, 4) + ASCII_ZERO; pchDate[6] = (month & B00001111) + ASCII_ZERO; pchDate[8] = (date >> 4) + ASCII_ZERO; pchDate[9] = (date & B00001111) + ASCII_ZERO; } } void setup() { Wire.begin(); //リレーに指示を出すピン pinMode(2, OUTPUT); //時間の数だけLチカの準備 pinMode(LED_BUILTIN, OUTPUT); } void loop() { //DS3231から時刻を読み出して変数を更新する RTC_DS3231(); //時の数だけLチカする for (int i = 0; i < ji; i++) { digitalWrite(LED_BUILTIN, HIGH); delay(200); digitalWrite(LED_BUILTIN, LOW); delay(200); } delay(3000); //設定した時刻でリレーをOFFする if (ji == timea && hun == timeb) { digitalWrite(2, HIGH); delay(60000); digitalWrite(2, LOW); delay(1000); } } |
完成品はこちら。
どうやら毎日けなげに動いてそうです。
材料費2000円以内ぐらいですかね、スマートプラグより少し高いですが満足です。
※AMAZONで電子部品を購入する際は、検索ワードを入れた後に
並べ替え:ベストセラーにすると少しマシになるかもしれません。
スポンサードリンク