Raspberry Pi3 B+(2)2019年01月29日

Raspberry Pi3 B+のIOインターフェース

久しぶりにRaspberry Piをいじったら、node-redとpythonが大変使いやすくなっていたのでいろいろなものをGPIOやI2Cインターフェースに接続して遊んでみました。

  • 5Mピクセルのカメラモジュール
  • GPIOに直接接続
  • サーボ制御カメラマウントに2個のSG90サーボ
  • 2回路リレー制御モジュール
  • 超音波距離センサー
  • マイクロウエーブドップラーセンサー
  • NaPiOn人感センサー
  • 赤外線リモコン受信機
  • 赤色LED
  • I2Cインターフェースに接続
  • 4チャンネルADコンバーター (ADS1115)
    薄膜サーミスタ温度センサー
  • 1.3インチOLED (SH1106)

これらはすべてnode-redで直接制御できるか、pythonプログラムで制御できます。もちろんMQTTにも対応できます。
node-redのモジュールが充実しています。

pythonプログラムで美咲フォント(日本語フォント)を1.3インチOLEDに表示させてみました。読めますが流石に8x8フォントは小さいです。

はじめてのIoT(2)2017年05月06日

家電製品の連動

家電製品の中にはある機器が動作したら合わせて動作させたい機器があります。連動させるための仕組みが用意されている場合は良いのですがそうでない場合はまず機器Aの動作を監視することで機器Bを動作させるかどうかの判断を行います。簡単には機器Aが接続されたコンセントに電流が流れているかを監視します。電流が想定されるだけ流れていた場合、機器Bの電源をONにするという仕組みで連動させることが可能です。今回はそんな連動ボックスを作成してみました。
電源連動ボックスの心臓部は、AC100Vの電流を検出するセンサーです。電流センサには U-RD社の極小型クランプ式交流電流センサー CTL-6-S32-8F-CLを使用します。このセンサーはAC100Vラインに接続した負荷の消費電流に応じて1/800の電流が出力されるのでその電流を抵抗に流し電圧に変換後、AD変換してESP8266が処理します。
ESP8266には(ESP-12Eでも)ADコンバーターが1CHしかありませんのでADコンバーターはI2Cに接続できるTI社のADS1115 ADコンバーターを使用しました。ADS1115は4チャネルの入力が可能です。今回はそのうちの2チャネルを使用してAC100Vラインの電流を監視します。残りは未使用ですがその他のアナログ入力(センサーなど)に使用できます。アナログ入力に温度センサーとして3Dプリンターで使用している100KΩのNTCサーミスターを使用しました。デジタル出力のセンサーなら値を読み取るだけで済むのですがアナログ入力の場合は電圧を読み取り、ソフトウエア(計算式)で温度への変換を行います。0~50℃で使用するB値を選択しています。

赤外線リモコンでリレーをON/OFFすることもできるように赤外線リモコン受信モジュールを付けて適当なTVリモコンのキーを割り当てるようにしました。バッファロー社のHDMI切替器に赤外線受信機が付いていたのでそれを流用しました。

出力制御にはAC100VをON/OFFするので2回路リレーモジュールを使用しました。温度湿度制御BOXのときとは異なりこのモジュールはリレー回路と制御回路がフォトカプラーでアイソレートされていますのでESP8266の3.3Vロジック電圧で直接動作します。リレー電源は5Vです。


電源連動ボックスの設定WEB画面です。
左側の2つのボックスがリレーのコントロールBOXです。右側はセンサー類を入れているツールBOXです。ツールBOX内のアイコン近くの数値は現在値を1秒間隔で表示しています。コントロールBOX内の電源アイコンは現在のリレーの状態を表示します。このスクリーンショットではコントロール1にAC電流センサー1を割り当ててしきい値は20mA以上になったらリレーをONにする。コントロール2は赤外線リモコンを割り当てるという設定です。
操作は簡単でツールBOXからアイコンをコントロールBOX内にドラッグするとしきい値設定画面が開きますので条件式と値を設定するだけです。AC電流センサーはmA単位、温度センサー(サーミスター温度センサー)は0.1℃単位でしきい値を設定できます。写真ではコントロール1の設定を温度センサーに変更してしきい値を設定しているところです。WEB画面を凝りすぎたため、PCからのみの操作になります。(スマホからではドラッグ操作ができません。)
また、電源投入時の初期値をフラッシュに保存する機能もついていますので保存時の設定で本機を起動することができます。フラッシュメモリーは書き換え限界がありますので手動セーブにしています。

はじめてのIoT(1)2017年04月23日

家電製品のON/OFF

最近良く耳にする「IoT」なる単語が気になって調べてみた。
WiKiペディアでは
モノのインターネット(英語: Internet of Things, IoT)とは、様々な「モノ(物)」がインターネットに接続され(単に繋がるだけではなく、モノがインターネットのように繋がる)、情報交換することにより相互に制御する仕組みである。それによる社会の実現も指す。「物のインターネット」と表記された例もある。
とありました。気になる文言はありますが、要はPCやスマートフォーン、タブレットなどと言った最初からインターネット接続を想定されているもの以外の機器をインターネットに接続し、その機器の持つ情報や操作できる機能を遠隔から利用しようというものです。クラウド利用が前提のような記述もありますが、なんだArduinoやESP8266ボードを利用した制御、計測コントローラーにネット接続機能を付加してあげれば良いようです。
AC100VをON/OFFする制御ボックスを作成してみました。温度湿度センサーDHT11も接続して設定温度湿度でAC100VをON/OFFできるようにしています。
ケースには市販の電源ボックスを使用し、スイッチやコンセントは家電建材用を使用しました。
ESP8266のファームウエアの中にWEBサーバー機能を内蔵し、ブラウザからリアルタイムに情報を見ることができます。また、設定温度湿度の変更と、手動でスイッチのON/OFF操作ができます。
画面はスマートフォーンからでも見やすいよう考慮しています。

WiFiモジュール(4)2016年10月24日

WiFi Felica リーダー

Felicaカードと言えばSuicaですが、最近は交通系のカードはあまり使用しません。その代わり買い物でnanacoやWAONカードをよく使用しますが、残高不足でレジ前でオタオタすることがままあるので残高チェッカーを作ってみました。キングジムの電子マネービュアー 「RELET(リレット)」CITIZENのpeb TWTC501(歩数計と兼用)と同じようなものです。交通系ICカード専用ですがパスケースが残高を表示してくれるnocolyなどもあります。

Felicaカードリーダーは以前Arduinoクローンで作りましたがあの時はブレッドボードによるプロトタイプで終わってしまいました。今回はWiFiモジュールを使用しますので電源電圧は3.3V(単4電池3本~4本の予定)、表示はグラッフィックス表示の128x64ドットOLEDを使用しています。WiFi接続機能は自宅以外では使えませんが、あると便利かなと思い付けようと思っています。ソフト次第ですから利用方法が思いつたら実装します。
残高照会できるカードは交通系ICカード(Suica、PASMOなど)、nanaco、WAON、楽天Edyカードです。お財布携帯については手持ちがないのでテストしていません。たぶんだめでしょう。

  • ここのサイト記事を参考にさせてもらいました。
  • 128x64ドットOLEDモジュール用ライブラリーはWiFiウエザーステーションと同じライブラリーです。
    使用ライブラリーはesp8266-oled-ssd1306です。
    このライブラリーは0.96インチと1.3インチどちらのOLEDディスプレーにも対応していますので使用するモジュールに合わせて変更します。プログラム内で記述しているイメージデータはXBM形式のイメージです。XBM形式への変換はこのサイトで作成したビットマップ画像をXBM形式イメージデータに変換できます。
  • FelicaカードリーダーのライブラリーはSONYが公開している「Arduino向けRC-S620/S制御ライブラリ」を使用しています。
    Arduino IDEのバージョンが1.0以上の場合は(ほとんどこれに当たります)RCS620S.cpp内の
    #include "WProgram.h"を#include "Arduino.h"に
    修正してからでないとコンパイルエラーが出ます。



使用モジュールはESP8266シリーズをプロセッサーに128x64ドットOLEDディスプレー、SONY製のFelicaカードリーダー(RC-S620S)です。
Felicaカードリーダー(RC-S620S)とのデータ通信はシリアルですのでProgram書き込みモード時には結線をUSBシリアルモジュールに変更しなければなりません。そこでUSBシリアルを接続する8Pコネクターで必要なジャンパーも行えるように工夫しました。また実行させるときはRunモード用を8Pコネクターに接続します。

WiFiモジュール(3)2016年10月08日

WiFiウエザーステーション

Tiny OLED full graphics controllerでも使用した0.96インチOLEDディスプレーと環境センサーBME280、Weather Underground StationのAPIを使ってWiFiウエザーステーションを作ってみました。

表示しているデータはインターネット日時->BME280データ->現在の天気->3日間予報->Raspberry Pi2がThingspeak.comにアップデートしている温度データを順に表示しています。
プロセッサーには今年から使い始めたWiFiモジュールESP8266シリーズを使用しました。OLED、BME280センサーとはI2Cインターフェースを使用しますのでGPIOは2個しか消費しないのでESP-01で作成しました。program/runモードの切替はI2CのSDA信号線を共用していますのでモード切替時はESP-01の電源ON/OFFが必要です。

BME280環境センサーは温度、湿度、気圧が計測でき、精度の高いデジタル出力が得られます。プロセッサーとのインターフェースはI2CまたはSPIです。Arduino/ESP8266用のライブラリーも豊富でI2Cの場合2本の信号線と電源ですぐに使用することができますので基板上には配置せず配線を引き出してケース内での配置の自由度を持たせました。e-Bayで安価に調達できます。インターフェース、サイズ、電源などの違いで様々なモジュールが出ています。

  • ここのサイト記事を参考にさせてもらいました。
    使用ライブラリーはesp8266-weather-stationです。
    ESP-01のソフトウエアはサンプルスケッチにあるWeatherStationDemoスケッチにBME280のデータ読み込み処理とデータ表示フレームを追加する形で作成しました。
  • 0.96インチOLEDモジュールの注文をミスってしまいSPI端子仕様を注文してしまいましたが、SSD1306ドライバーはSPIとI2C両インターフェースをサポートしていますので3箇所のジャンパーを変更し、リセット回路を追加してあげればI2C端子仕様と同じになります。SCL、SDAはそれぞれD0、D1端子になります。
    使用ライブラリーはesp8266-oled-ssd1306です。
    このライブラリーにはUi Libraryが付属しています。Ui Libraryを使用すると画面のフレーム制御とスクロールを簡単に行うことができます。今回は5フレーム構成で 時刻->BME280データ->現在の天気->3日間予報->クラウドデータ をスクロール表示させています。
  • BME280モジュールは秋月スイッチサイエンスでも販売していますが3.3V仕様です。そこで安さと5Vまで仕様、小型基板のモジュールをe-Bayから調達しました。
    使用ライブラリーはBME280_MOD_1022です。
  • その他にjson-streaming-parserが必要ですのでライブラリーに追加してください。
まずはブレッドボードでテスト運転です。回路図でもわかるようにモジュール間の結線以外に抵抗4本とコンデンサー1個ですのでユニバーサル基板でかんたんに作成できます。



OLEDディスプレーは128x64ドットのグラフィックス表示装置ですので0.96インチと表示エリアは小さいですが16桁2行キャラクターLCDなどよりも価格が安く表示能力があります。3.3V-5V両用でArduino/ESP8266には手頃な表示装置です。
0.96インチOLEDはSSD1306ドライバー、1.3インチOLEDはSH1106ドライバーになりますのでプログラムソースを若干変更することで1.3インチOLEDを使用することもできます。

OLEDとBME280モジュール共に5Vまでの使用が可能(秋月、スイッチサイエンスのモジュールは3.3V仕様です)ですが、今回は3.3Vで動作させています。それ以外の電圧で動作させる場合は1個20円のAMS1117 3.3 DCDCモジュールを使用します。

パーツ紹介(amazon)2016年06月30日

最近使用しているモジュール基板


3Dプリンター(18)2016年04月23日

Tiny OLED full graphics controller

skeleton3D 3DプリンターのグラフィックスコントローラーはMKS Genコントローラーボードとセットで購入したLCD 12864 Smart Display Controllerを使用していたのですが、せっかく小型3Dプリンターに仕上げたのにPrusa i3などと同じLCDではバランスが悪いような気がしていました。
RepRap WiKiを検索していて見つけたDIY Tiny OLED I2C full graphics controllerのほうがよりすっきりするようでした。0.96インチのOLEDディスプレーとMicroSDを使用した超小型コントローラーです。コントロールできる機能や表示情報は今使用しているLCD 12864 Smart Display Controllerと同じですが、大きさは約1/4になります。 それに加えて操作用のロータリーエンコーダーにはSparkfunのRGBイルミネーションロータリーエンコーダーを使用しています。未使用品が部品箱の中にあったので3Dプリンターの状態を色で表示させています。
I2Cインターフェースの0.96インチOLEDはMarlinに定義されていませんのでWiKiスレッドで紹介されているパッチを参考にしてソースを修正します。それに加えてRGB LEDイルミネーション用のコードを多少追加しました。今のところエラー発生で赤、コントロールパネルで青です。印刷時に移動コマンドG0、G1、G2、G3コードを受信するとイルミネーションするようにMarlin Frameworkを修正してみました。
e-Bayを検索すれば同じようなコントローラーが2,000円ちょっとで中国から通販で購入できます。違いはOLEDがSPI接続であることと普通のロータリーエンコーダーだということくらいです。
MicroSDカードは3.3V動作ですので3.3Vレギュレーターとロジックレベル変換回路が必要です。WiKiスレッドではSD Card Moduleを使用しています。このモジュールを使用すれば5V電源で使用することができます。やはりe-Bayを検索するといろいろとヒットします。AU$1ですから100円しません。結局作成するのはロータリーエンコーダー周りと各モジュールを接続する基板ということになります。

コントローラーケースもThingiverseに登録されています。サイズは62x48x25mmと大変小型です。あとはskeleton3Dに取り付けるステーを作成して完成になります。


完成してskeleton3Dに取り付けました。LCD 12864 Smart Display Controllerを使用していた時の写真と比べると大変にすっきりとしました。

WiFiモジュール(2)2016年02月13日

ESP8266改造

正月にいじっていたESP8266というWiFiモジュールの改造に成功です。改造と言ってもGPIOを2本引き出しただけです。オリジナルのESP-01は利用できるGPIOが2本しか出ていません。その他にはPCと通信するためのシリアル送受信ピンです。OneWire温度センサーにGPIOを使用しているので他に何もつけることができませんでした。今回はESP8266 ICの9、10ピンから直接配線をそれぞれ引き出し、GPIO14とGPIO12が使用できるようになりました。とは言え0.1mmピッチのICの足に直接リード線をはんだづけするわけです。引き出したGPIOはI2Cインターフェースとして使用します。
LCD-Blue-I2Cで紹介されているライブラリーを使用してI2C接続のLCD(PCF8574Tを使用)にIPアドレスとクラウドにアップした最新の温度を表示するようにしました。PCF8574Tと秋月の小型キャラクターLCDの組み合わせで動作させるためのコードは、

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN     3
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6,
       7, BACKLIGHT_PIN, POSITIVE);  
setup()の最初にI2C使用のピン番号を指定します。
Wire.begin(14, 12);
lcd.begin(16,2);      // initialize the lcd 
   ....
lcd.home ();          // go home
lcd.print("Hello,  ESP-01 ");  
をそれぞれ追加・修正しました。後は普通にLCDにデータを書き込みます。

3Dプリンター(16)2016年02月07日

PTCヒーター

PTCヒーターでヒーテッドベッドを作成しました。取り付けはシリコングリースとカプトンテープのみで、断熱材で落ちないように支えています。110V100Wのヒーターはちょっとワット数が大きすぎたかなと思うほど強力です。過熱直後プレート上ではかなり温度ムラがあり、しばらく放置すると温度が均一になります。グラフを参照してください。期待通りPCBヒーターよりも過熱性能が良いのですが温度が上がりすぎているようです。
グラフは実際に印刷時30分間のグラフです。ホットエンドに比べてヒートベッドの温度変化が大きいことがわかります。AC100VのON/OFF制御はホットエンドと同様に行われているのですが、OFF状態になっても温度上昇がすぐには止まりません。温度センサーはPTCヒーターの横のアルミ板に貼り付けています。グラフでは現れていませんがベッド中央と周辺では温度に差があります。もっと面積のあるヒーターのほうが良いと思うのですが手頃な商品が見つかりませんでした。110V70WのPTCヒーターが販売されているのですが更に小さくなってしまいます。100mm角くらいで150℃程度の商品がないものですかね。skeleton3Dは最大印刷範囲が100mmX100mmですからこの程度でもよしとすることにしました。
ABSフィラメントで印刷テストを行いました。AC100Vを使用したヒートベッドは期待通り100℃まで短時間で加熱でき、印刷中も安定でした。温度変化が5℃ほどありますがさほど問題では無いようです。

3Dプリンター(14)2016年01月22日

新素材

3Dプリンターにはいろいろな素材の部材が使用されています。熱溶解型3Dプリンターでは特に耐熱素材が多く登場します。ホットエンド周りは250℃程度、ヒートベッド周りでは150℃程度まで温度が上昇する可能性があります。使用される素材にもその使用条件をクリアする必要があります。
PTFE(ポリテトラフルオロエチレン、商品名テフロン)はフライパンのコート素材として有名ですね。3Dプリンターではボーデン方式のフィラメントチューブやホットエンド内に使用されています。また、耐熱電線の被膜素材にも使用されています。
カプトンテープ(カプトン®ポリイミドフィルム(Kapton® polyimide film)にシリコーン系粘着材を塗布した 絶縁性、耐熱性にすぐれたテープ)はサーミスタやヒーターの電線を絶縁するために使用します。ビニールテープでは危険そうな発熱部分の絶縁材として結構重宝しています。ビニールテープのような柔軟性がないのが欠点でしょう。
PEEK(芳香族ポリエーテルケトン)は耐熱特性と寸法安定性に優れている熱可塑性樹脂に属するポリマーの総称です。この素材をホットエンドの支持素材にした物が出ています。J-Head MK V はE3D のアルミヒートシンク部分をPEEK素材に変更することで更に小型化しています。しかし、コストがE3Dに比べて高いことが欠点です。写真はJ-Head MK Vの中国Cloneです。

skeleton3Dはとにかく小型に仕上げようとPEEK素材のJ-HEADを使用し、Z軸センサーの誘導近接スイッチも8mm外径のものにしたのでキャリア上はすっきりまとまりました。注文してあったPEEK J-HEADが到着したので早速ホットエンドとコールドエンドの温度を計ってみました。ホットエンドが230℃の時にコールドエンドの取り付け位置あたりで50℃前後でした。これならファンはいらないと思ったのですがGeetechのWiKiにはファンで冷却しなさいとありました。オリジナルではホットエンドとエクストルーダーが一体化したものを使用していますが、今回はボーデン方式でエクストルーダーはskeleton3Dのステーに取り付けます。