広告の限界を超える|セールス
広告の限界を超える|セールス
2015.10.30

今日から組み込み系!FT232でおてがる家電制御をはじめよう

野秋 拓也

はじめまして、立命館大学学部生の外部ライターのっきーと申します。LIGブログ DevRelの外部ライターとしてIoTに関する記事をいくつか寄稿していく予定です。

最近は、IoTが徐々に盛り上がりを見せてきており、Web系のエンジニアの方もハードウェアを扱う勉強会でお見かけするようになってきました。

MakerムーブメントではRaspberry PiやArduinoが流行っていますが、何かを制御する目的なら「とにかく、てっとり早くAPIが欲しい」という場合が多いと思います。APIが欲しいだけなのにArduinoとサーバが通信をするためのソフトウェアを設計したり、Raspberry Piをセットアップするのは大変です。

そこで今回は、サーバPCから直接制御することができるノンプログラミングのIC「FT232」を紹介したいと思います。電子工作をされる方でないとなかなか聞く機会のない製品だと思いますが、FTDI社というかなりのシェアを持っている会社のシリアル通信用のICです。FTDIのチップはArduino互換機や初期のArduinoにものっていましたし、PCと通信する製品にはよく採用されています。

シリアル通信をご存知の方なら「RS-232Cの規格だよね? シリアル通信でハードウェアを制御するの?」とお思いになるかもしれませんが、このFT232にはシリアル通信の他に、Bit-Bangモードと呼ばれる8bitのパラレルI/Oを制御する機能があります。この機能を使えば、単純なスイッチの入力を読み取ったり、5V/3.3Vの出力をサーバPCから直接制御できます。

作例として拙作のコーヒーサーバを紹介します。

このコーヒーサーバはWebの可能性を広げるために開発した、コーヒーを操作することができるWebサーバです。

電子制御されていない単純なコーヒーメーカーのスイッチを乗っ取り、FT232で制御できるようになっています。Webからコーヒーを制御するUIはSinatraと呼ばれるRubyのWebアプリケーションフレームワーク上で書かれており、FT232もRubyから制御しています。今回は、このコーヒーサーバにも使っている回路を使って家電を制御しようと思います。

目次

  1. 準備するもの
  2. 工作手順を写真で解説
  3. セットアップ
    • libftdiのインストール
    • libftdi-rubyラッパーのインストール
  4. プログラム
  5. あとがき

準備するもの

今回は初心者向けの工作なので工具はニッパーかカッター、そしてテープがあれば大丈夫です。

延長コードはどんなものでも構いませんが、切断してしまうので100均で買われるのが良いと思います。あとの4つの部品ですが、すべて秋月電子通商で揃います。

なお、FT232RLには姉妹品のFT245RLなどもありますが、今回はより入手性の高い、FT232RLを使います。秋月電子通商で買えるFT232RL USBシリアル変換モジュールにはハンダ付けのされていないキット品もあるので、ハンダ付け設備のない方は完成品を買うようにしてください。

なお、今回、クリップでの配線は実験用の簡易的な環境であり、家庭用電源を扱っているため、常用は危険です。常用する場合はきちんと基板上にハンダ付けしましょう。

今回使用しているソリッドステート・リレーやクリップ付きコードは大電流にはあまり耐えられるものではありません。調理器具などワット数の高い機器を繋ぐ場合には、耐圧の高いリレーと太い導線をハンダ付けして動かしてください。

工作手順を写真で解説

IMG_20151025_133649

まずは延長コード、FT232RL、ソリッドステート・リレー、クリップコードを用意してください。用意ができたら加工していきます。

 
IMG_20151025_134155

延長コードを真っ二つにします。ニッパーがない場合はカッターで加工するのをオススメします。

 
IMG_20151025_134243

メス側の線の被覆を剥きます。カッターで裂け目を付けて引っ張れば簡単にできますよ。

 
IMG_20151025_134527

内側の被覆を剥きます。この際に左右の導線の長さを変えておくと、ショートするリスクが激減しますよ。

 
IMG_20151025_134846

オス側の線も同様に加工します。加工ができたら配線をしてみましょう。

 
IMG_20151026_010515

全体の配線はこのようになります。

まずは延長コードのあいだにソリッドステート・リレーを接続しましょう。

 
IMG_20151026_021117

ソリッドステート・リレーD2N202KDには左からGND(マイナス)、プラス、延長コードのメス側、オス側を接続しています。家庭用電力は交流なので延長コード側は極性を気にせずに接続することもできます。

 
IMG_20151026_021137

基板上のTXD、RXD、RTS#、CTS#、DTR#、DSR、DCD#、RI#がそれぞれ1〜8bitに相当します。リレーに電気を流すために1bit目のTXDと、スイッチの入力を取るために2bit目のRXDと、それぞれのマイナスをGNDに接続します。

クリップはぐらつくと他の端子とショートしてしまうことがあるので、台や机に貼りつけて使用するか、ブレッドボードを使うと良いです。また、今回は入手性と汎用性の高さからFT232RLを使用していますが、FT245RLではBit-Bangモードでの動作が前提なので、基盤にBit番号が印刷されていて便利です。

 
IMG_20151026_010515

残りの配線ができたら延長コードのオスをコンセントに、メスには制御したい家電を接続しましょう。今回はクリップコードを使用しているため、つなぐ家電は消費電力が50Whまでのもの(扇風機ぐらい)を推奨します。

ハンダ付けをおこなうと、今回使用しているリレーの上限である200Wh(テレビやミキサー)まで接続することができ、もっと良いリレーを使うともっと消費電力の高い機器を制御することができますよ。ただし、今回の例では、蚊取り器具・ノーマット(5Wh)を接続しています。

上図のように接続できたら、いよいよ完成した回路をRubyから動かしてみましょう。

セットアップ

今回はLinux/OSXで使えるlibftdi-rubyというライブラリを使います。

libusbの実装なのでWindowsの方には難がありますが、libFTDI on WindowsとlibusbK Driverを使うとうまくいくようです。

libftdiのインストール

デバイスドライバ

http://www.ftdichip.com/Drivers/VCP.htm

MacOSX

brew update
brew install libftdi
sudo ln -s /usr/local/Cellar/libftdi/1.1/lib/libftdi1.2.1.0.dylib /usr/lib/libftdi.dylib

Linux

apt-get install libusb-dev libftdi

or

yum install libusb-devel libftdi

Macの場合、FTDIデバイスが標準ドライバで動作してしまい、Bit-Bangモードが使えない場合があります。

sudo kextunload -b com.apple.driver.AppleUSBFTDI

この操作をおこなうと逆にFTDIチップを使っているArduinoなどがうまく動かないことがあります。そういう場合は再起動をするか

sudo kextload -b com.apple.driver.AppleUSBFTDI

で元に戻すこともできます。

libftdi-rubyラッパーのインストール

gem install libftdi-ruby

これでFT232をRubyから扱う準備ができました。スイッチを押しているあいだだけ家電の電源が入るプログラムを動かしてみましょう。

プログラム

require 'ftdi'
ctx = Ftdi::Context.new
begin
  ctx.usb_open(0x0403, 0x6001)
  begin
    ctx.set_bitmode(0x01, :bitbang) #出力bit(1bit目のみ), bitbangモードの設定
    loop do
      puts "00000010".to_i(2) & ctx.read_pins == 0 #読みたいbitの指定
      if "00000010".to_i(2) & ctx.read_pins == 0
        ctx.write_data [0x01] #出力ビットを指定
      else
        ctx.write_data [0x00]
      end
      sleep 0.5
    end
  ensure
    ctx.set_bitmode(0xff, :reset)
    ctx.usb_close
  end
rescue Ftdi::Error => e
  $stderr.puts e.to_s
end

これでスイッチを押しているあいだだけ家電が動作するはずです。

コーヒーサーバではコップの荷重でスイッチが押されているあいだだけコーヒーが出るようになっています。スイッチ入力を使うと、可動するハードウェアの動きのタイミングをつかむのに便利です。自動ドアの可動域の把握なんかにも使われています。

少し改変すればスイッチのON/OFFに関わらず、クライアントからの要求に応じてON/OFFすることもできますね。火事にはくれぐれも気をつけつつ、家電のAPI、サービス開発を始めましょう!

あとがき

今回は部品点数の削減のために、安めのソリッドステート・リレーを用いているので、100V200Wまでの電化製品しか接続することができません。ただし、高性能なリレーを用いれば、好きな電圧の回路や、よりワット数の高い電化製品を接続することもできます。

また、入手性の高さからFT232RLを選んでいますが、FT232RLの特性上、USB接続をしてBit-Bangモードで初期化するまでのあいだに出力がHになる問題も。FT245RLではこれが起こらずに便利ですよ。

なお、本記事を参考にして発生したいかなる損害についても当方は補償しかねますので何卒、自己責任でよろしくお願いします!

j a v a