遠隔PC起動装置を作る (1)【ESP32】
はじめに
新型コロナウィルス対策でのテレワーク準備の中で、テレワークで自宅にいるときに会社のPCを起動したい場合があり、なにか仕組みを考えようと思い立ちました。
今回は構成とサーボモーターの動作確認を行っていきます。
構成を考える
PCの自動起動ではじめに考えついたのは、BIOSのスケジュール機能でした。
しかし、起動時間や曜日をあらかじめ設定しておく必要があるため、今回の目的に合わないため見送ります。
次に考えたのが、物理的にPCの電源ボタンを押すことでした。
ちょうどよく小さめのサーボモーターがあったので、これを動かして実現したいと思います。
次に、自宅から装置を制御する方法を考えます。
会社とのネットワーク接続にはVPNが使えるため活用することにします。
ESP32を社内ネットワークにサーバーを作り、リクエストがあったらサーボモーターで電源ボタンを押す構成にしたいと思います。
サーボモーターを動かす
今回動かすサーボモーターはSG90です。
このサーボモーターは3.3~6Vで駆動し、180度まで回転できます。
制御はPWMで、以下のようなパルスで制御します。
動作確認として、0°→90°→180°の順で動くプログラムを作成します。
ArduinoIDEで以下のプログラムを書きます。
#include "Arduino.h"
#include "stdio.h"
#define SERVO_PIN 32 // PWM信号Pin
#define SERVO_CH 0 // PWMのチャンネル
#define PWM_HZ 50 // 周波数
#define PWM_BIT 16 // ビット数 16bit(0~65535)
// 16ビット,50Hzの場合の、デューティー比の最大、最小を設定
#define RANGE_MAX 7864 // 65535 / 20 * 2.4 = 7864
#define RANGE_MIN 1638 // 65535 / 20 * 0.5 = 1638
// 角度→デューティー比への変換
int duty_set(int deg){
int result;
// 値を0~180の範囲からRANGE_MIN~RANGE_MAXの範囲に変換
result = map(deg, 0, 180, RANGE_MIN, RANGE_MAX);
return result;
}
// セットアップ
void setup() {
Serial.begin(115200); // シリアルポート設定
delay(10);
// PWM設定
ledcSetup(SERVO_CH, PWM_HZ, PWM_BIT); // PWMで利用するチャネルを設定
ledcAttachPin(SERVO_PIN, SERVO_CH); // PWMを出力するピンにチャンネルを設定
// サーボモーター動作
delay(500);
ledcWrite(SERVO_CH, duty_set(0)); // 0°へ移動
delay(500);
ledcWrite(SERVO_CH, duty_set(90)); // 90°へ移動
delay(500);
ledcWrite(SERVO_CH, duty_set(180)); // 180°へ移動
delay(500);
ledcWrite(SERVO_CH, 0); // モーターへの出力停止
}
// メインループ
void loop() {
// なにもしない
delay(1000);
}
サーボモーターが動くことが確認できました。
後は、電源ボタンに取り付けて動作角度を調整する必要があります。
おわりに
今回はシステムの構成とサーボモーターの動作確認を行いました。
次回は構成の通りにサーバーや通信部分のプログラムを書いていく予定です。