トランジスタを用いた、スイッチの電子的操作

工作・機械

始めに

本記事は、以下で公開した記事に関連する補足情報をまとめるため、以下のリンク先と同様の内容を転記したものです。

elchika.com/article/03e63fbe-f997-4169-bac0-abc3d0ef5bd8/

作ったもの

M5 Atom Liteとトランジスタを用いて、リモコンのボタンを電子的に操作するシステムを作った。なお、本記事は電子工作初心者向けに、とりあえず動けばいいや、という程度の適当な記事である(※)。トランジスタや抵抗の値の設計方法などの説明に問題があると感じる上級者がいらっしゃれば、ぜひ分かりやすい記事をまとめていただきたい。

※:記事の通りに適当にやるとトランジスタやマイコンなどがぶっ壊れる(寿命が短くなる)かもしれない。それが嫌なら(怖いなら)、ぜひちゃんと色々調べてお勉強した上で実践していただきたい。

背景

世の中には、物理的なボタンを備えたシステムが多数存在する。このようなシステムにおいて、ボタンを遠隔で操作したいことはよくあり、例えば下記に示すSwitchbotのような製品が市販されるほどである。
www.switchbot.jp/products/switchbot-bot

しかしながら、上記のようなデバイスは導入が非常に簡単で便利であるが、以下のような課題が存在する。

  1. 物理ボタンと、ボタンを押し込むデバイスの位置調整が難しい(うまく押せなかったり、押す力が強すぎてボタンのケースなどが外れることがある)
  2. 手動操作との併用が難しくなる
  3. 電池駆動である(コンセントからの給電ができない)
  4. 物理ボタン周辺の見た目がよろしくない

家の照明のスイッチなど、スイッチそのものに高電圧・大電流が流れるものを自作のデバイスで制御するのは、安全性の面で問題があるのであまり触らない方がいい(市販の製品を使う方が様々な面で安心である※1)。が、パソコンのマザーボード(※2)のスイッチやリモコンのボタンのような制御信号のみをやり取りするものについては、トランジスタを使用してマイコンから操作してやると非常に便利である。

※1:高電圧・大電流(電子工作レベル比)のものも、適切なトランジスタあるいはリレーを選定すればできなくはない(自分は怖いからやろうと思わないし、法的に問題がないかも知らない)。なお、住宅の壁などにあるスイッチや配線をいじるには、電気工事士の資格が必要な場合がある。
→自宅の電気配線をいじれるなら、既製品で便利なスイッチが多数販売されている。操作の自動化・遠隔化に使えそうなスイッチをPanasonicの商品から適当に選んだだけでも、下記の通りたくさんある。

※2:Wake On Lan(WOL)という、パソコンを遠隔で起動するための機能が備わっているものもある。

今回は、M5 Atom Liteとトランジスタを用いた、物理ボタン(操作信号)をマイコンから操作するシステムを紹介する。

やることの概要

以下の写真は、今回操作したいリモコンの写真である。矢印で示した部分にボタンが二つあり、これらをM5Atom Liteから制御することとした。

マイコンで制御したいリモコン

下図に、今回作成したものの回路図の概要を示す。図中のS1がリモコンの押したいボタンを表しており、図中の3V3(※3)、GND及びGPIOはマイコンのピンを表している。リモコンをテスター等で調べた結果、スイッチの一方はGND(電池のマイナス極)と接続されていることが分かった。スイッチのプラス側(「?」の部分)は、リモコンのスイッチ以外の回路が入る。
※3:今回、たまたまリモコンの電源の電圧が3Vだったので、M5Atom Liteの3V3から給電することとした。

今回、リモコン及びマイコン以外に追加する部品は、図中のQ1及びR1である。Q1には、例えば2SC1815のようなNPNトランジスタ(※4)を使用し、R1にはリモコンのスイッチに流れる電流値をもとに、抵抗値を決定(※5)した抵抗を使用する。なお、この抵抗をベース抵抗と呼ぶが、その抵抗値は「トランジスタ ベース抵抗」などの検索ワードで調べて計算するとよい。
※4:PNPトランジスタを使用する場合、下図の回路とはちょっと違う回路にする必要がある。本当はトランジスタも増幅率などの仕様をもとに何を使用するか検討するべきであるが、ここでは昔から定番の(筆者の手元にいつのまにかたくさんある)「2SC1815」で説明をした。
※5:筆者はついうっかり抵抗を入れ忘れてシステムを作ってしまったが、一応意図したとおりの動作をしている。LEDと同様に、ベース抵抗を入れ忘れても動くことは動くらしいが、トランジスタ等の寿命を短くするらしく、あまりやらないほうがいいらしい。

例えば、トランジスタの増幅率が200くらい、スイッチに流れる電流が10mAならば、ベース電流は10mA/200=50μA以上流す必要がある。トランジスタのベース・エミッタ間電圧を0.7Vとすると、ベース抵抗は(3.0-0.7)V/50μA=46kΩとなる。実際には増幅率は200より小さくなることがあるので、ベース電流にもう少し余裕を持たせるため、抵抗値46kΩより小さい値で適当なもの(例えば10kΩとか※6)を選ぶといった具合に計算する。
※6:M5Atom liteの3V3の最大電流は500mAっぽい(?)ので、ベース電流は500/200=2.5mAもあれば十分である。よって、とりあえずベース抵抗は(3.0-0.7)/2.5mA≒1kΩくらいのものをつけておけばよいのではないかと思う(多少無駄な電力を消費するかもしれないが)。

スイッチ周りの回路

まとめ

以上の内容の通り、作成することで、M5AtomLiteからリモコンのスイッチを制御することができた。実際に作成したものの写真とテスト用のソースコードを示して本記事の締めとする。

トランジスタとM5AtomLite(配線は裏側)
リモコン側の配線(赤線がGPIO、白線が3V3またはGND)

動作確認用のプログラムは下記のとおりである。なお、本プログラムはM5AtomLiteのボタンを押すことで、リモコンの2つのスイッチを順番に押す・離す制御を行う。

#include "M5Atom.h"

//LEDの色を設定する関数
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
  return (CRGB)((r << 16) | (g << 8) | b);
}

int flag=0;
void setup()
{
    // 本体初期化(UART有効, I2C無効, LED有効)
    M5.begin(true, false, true);
    delay(10);
    //スイッチを制御するために使用するGPIOピンを指定
    pinMode(22, OUTPUT); 
    pinMode(33, OUTPUT); 
    //初期状態ではボタンのLEDを緑にする
    M5.dis.drawpix(0, dispColor(0, 255, 0));
}


void loop()
{
	//M5AtomLiteのボタンを押すと、スイッチを押す
    if (M5.Btn.wasPressed())
    {
      if(flag==0){
        flag=1;
        digitalWrite(22, HIGH);//ボタンを押す
        delay(200);
        digitalWrite(22, LOW);//ボタンを離す
        M5.dis.drawpix(0, dispColor(0, 0, 255)); //LEDを青
      }
      else{
        flag=0;
        digitalWrite(33, HIGH);//ボタンを押す
        delay(200);
        digitalWrite(33, LOW);//ボタンを離す
        M5.dis.drawpix(0, dispColor(255, 0, 0)); //LEDを赤
      }
      
    
    delay(50);
    M5.update();
}



コメント