スマートウォッチ2020年07月24日

自作スマートウォッチ

自分でスマートウォッチのプログラムを組むことができる(デザインできるとも言えます)Lilygo®Ttgo T-Wristbandというスマートウォッチを見つけてしまいました。日本国内では秋葉原ラジオデパート1階のShigezoneで取扱っています。使用しているプロセッサーはESP32-PICO-D4で4MBFlashメモリー搭載の最小ESP32プロセッサーです。もちろん搭載のインターフェースは2.4GWiFi、Bluetooth4.2 and BLE、GPIO、ADC、DACなど7mm角のチップに搭載され利用可能です。プログラミング環境は従来のESPシリーズと同様にArduino環境が利用できます。Lilygo®Ttgo T-Wristbandには1個のタッチスイッチ、3軸加速度3軸磁気センサー、リアルタイムクロック、0.96インチLCDディスプレー、オプションで心拍センサーや振動モーターがあります。バッテリーチェックのためにADCを利用しています。
サイズはXiaomi Mi Bandとほぼ同じです。さすがに防水機能は要求できません。水濡れなしの日常使いには問題ないと思われます。プログラムのアップロードにはケースを開け、USBシリアル搭載の拡張ボードをFPCケーブルで接続して行いますがリポバッテリーの充電は専用ケーブル(Xiaomi Mi Bandと同じ)で行なえるのでケースを開ける必要はありません。普通のスマートウォッチと同じように扱えます。

今回の注文でオプションの心拍センサーも注文していますので楽しみです。もちろんそれなりに表示させるためにはプログラミングが必要です。

サンプルプログラムや回路図です。
GitHub : Xinyuan-LilyGO/LilyGo-T-Wristband
GitHub : LovyanGFX SPI LCD graphics library

WiFiモジュール(8)2020年01月17日

ESP32Sと環境センサー

今回使用したマイクロコントローラーはESP32Sを使用したWeMos mini32です。WeMos D1 mini liteとほぼ同じ大きさでUSBシリアル通信チップまでボード上に装備ています。2.4GHzWiFi、Bluetooth 4.2/BLE装備の強力マイコンボードです。2個のADCも装備していて最大16ポートのアナログ入力とGPIOポートはほぼ全てピンに出ているので2列のピンアウトになっていてブレッドボードでは使用できません。専用にメインボードを作製しました。

メインボード上に電子ペーパー用のSPIインターフェース、環境センサー用にはI2Cインターフェース、ガスセンサー用のアナログ入力ポートです。I2Cインターフェースに接続する環境センサーにSHT30温湿度センサー、BMP280大気圧センサーを予定しています。
ともにデジタル出力なので必要なライブラリーを入手します。



ガスセンサーには何種類かあり、用途に応じてセンサーを選択します。今回は一酸化炭素センサーMQ-135とアルコールセンサーMQ-7を購入しました。


これらのセンサーはすべてアナログ出力ですので表示単位への換算計算または表示方法(プログレスバー表示やグラフ表示)を工夫する必要があります。
表示装置には白黒2色電子ペーパーを使用してみました。

WiFiモジュール(7)2019年08月25日

環境センサー+LINE通知

今回使用したマイクロコントローラーはESP8285を使用したWeMos D1 mini Liteです。ESP-12Fとほぼ同じ大きさでUSBシリアル通信チップ(CH340Gを使用)までボード上に装備ています。
IoTで利用できる(MQTTクライアント)ネットワーク時計に環境(温度、湿度)センサーを加えて見ました。OLED表示は時間よりも温度湿度を強調した表示になっています。3.5x2cmの表示領域に128x64ドットを表示していますので小さいです。(大きいものは値段が高い)😂
2.4G WiFi機能を装備しているマイクロコントローラなので時計はインターネットで合わせますのでPC並みに正確です。センサーの違いで2種類作成しました。2つ目の方は人間を感知するとLINEに温度、湿度、気圧を通知する機能をプログラミングしてあります。こちらのマイクロコントローラーはESP-12Fを使用しています。プログラムの更新はUSBシリアル通信基盤を経由してPCと接続し行います。
「何の役に立つの?」という質問はご法度です。動機は
・面白そうだから作る。
・こんな物があるからとりあえず動かしてみる。
・「LINEに通知が送れる」なら作ってみる。
などなど😆😆😆

作ったものはそのまま動かし続けるものもあるし、大概のものはバラして再利用しています。今回のマイクロコントローラーは安価で気兼ねなく作成できる所が良いですね。

プログラムはPCでArduino開発環境というソフトウエアを使用して作っていきます。教育用ということもあって世界中の人がいじっているのでライブラリーが充実しています。ゆえにやりたいことがすぐできるというわけです。
Raspberry Piでも同じようにプログラミングしますがこちらではコンパイルが不要なPython言語を多く利用しています。
最近のプログラミング手順はゼロからプログラミングなどしません。プロトタイプあるいはライブラリーについているサンプルを利用して必要な修正を加えるプログラミングです。まさにネットワーク時代のプログラミング?(コピペ!!)😵

ホームオートメーション(2)2019年04月28日

MQTTと赤外線リモコン

赤外線リモコンの学習とWiFiリモコン化にチャレンジしています。
家にはたくさんのリモコンがあります。人が操作しなくてはいけない機器には必ず(ある程度の価格のものは)赤外線を利用した手元リモコンが付属しています。TVから始まってエアコン、扇風機、シーリングライトなど数え上げたらきりがありません。ゆえに居間のテーブルの上にはリモコンが散乱することになります。これをまとめられたらどんなに楽になるだろうと思わずに入られません。(実際にはそんな簡単なものではないのですが)

今回はその糸口になればと思いESP8266を使用して既存のリモコン信号を学習して、WiFi(MQTT経由)からの操作で機器をコントロールするリモコンを作成しました。2台作成して、学習データ作成用に1台は送受信機をつけてあります。もう1台は3.5mmプラグ付きの延長ケーブルLEDを使用して設置条件に合わせられるようにしました。

ホームオートメーション(1)2019年02月11日

MQTTとホームオートメーション

Raspberry PiでMQTTブローカーであるmosquittoのインストールも終わり、MQTTブローカーが動き出すとMQTT経由で遠隔地のセンサーからのデータ受信やリレーを制御することが容易になりました。パワーポイントにあるように接続される機器はネットワーク上にあれば良く、同一サーバー上にある必要がなくなり設置に関しての自由度が格段と増しました。しかし、現在販売されているホームオートメーション機器を使用してシステムを構築しようとすると様々な問題が出てきます。今回はSONOFFスイッチが格安で入手できたので2台購入して使ってみたいと思います。
最近のホームオートメーション関連機器はAmazon AlexaやGoogle Homeなどいろいろと出てきていますが、対応機器が限られているのと割高感があります。
データ収集はESP8266やESP-32などWiFiに対応したモジュールを利用し、制御プログラムはRaspberry Pi内のnode-redに担当してもらいます。

はじめての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モジュール(5)2017年03月27日

電圧・電流のグラフ化

リチュウムイオン電池をいろいろといじっていて電圧・電流測定をします。マルチテスターでは記録が残らず、PCをいちいち立ち上げるのも面倒です。そこでWiFiモジュールESP-01を使ってスタンドアローンでデータをロギングし、グラフ化できるWEB UIを持った電圧・電流ロガーを作ろうと思います。しかし、ESP-01(ESP8266)にはアナログ入力がありません。アナログデータを扱うにはセンサーとのインターフェースにI2Cを使用することで実現できます。TI社のINA219電流センサーは電圧・電流の測定結果をI2C接続でデジタル出力してくれます。モジュールボードに載っている電流測定用のシャント抵抗も0.1Ωなので測定値にはほぼ影響しません。e-Bayからの購入であればモジュールボードの販売価格もお手頃です。

ブレッドボードで仮作成しました。リアルタイムデータの表示用に1.3インチ128x64ドットOLEDモジュールを追加しています。写真の表示している電流はDCDCコンバーターのアイドル電流(2.1mA)です。
18650リチュウムイオン電池を使用したUSBバッテリーの電池側の電圧と電流をを計測中です。今のところリアルタイムモニターとシリアル出力のみ実装しました。やはり時系列でグラフ化しないと電圧・電流の変化がわかりません。

USBコネクターに接続した33Ωの抵抗で放電させたときのシリアル出力をPCで受信してソフトでグラフ化しました。このようにグラフ化すると大変わかりやすくなります。

12000mAh表記の中国製18650リチュウムイオン電池は実質容量が500mAh程度なことがわかります。バッテリー容量が知りたいのであればBattery Capacity Meter Discharge Testerを使用すれば測定できます。放電特性になるとやはりグラフ化するとはっきりわかります。バッテリー電圧が3.5Vを過ぎたあたりから急激に低下していることがわかり、バッテリープロテクターが正しく動作して2.5Vあたりで電流がカットされているのもわかります。
秋月で販売しているGP社のReCyko+(Ni-MHニッケル水素電池)をテストしてみました。旧タイプで使い込んでいますが結構いい結果が出ました。計測は電池を2本直列、負荷抵抗は17.5Ωで行いました。放電電流は約130mAと低めで行ったのが良い結果を出したと思われます。この電池は購入から数年が経過していますが利用頻度が低いので1976mAhという結果です。

3Dプリンター(19)2016年11月08日

レーザー加工機へ転用

レーザーカッター、レーザー加工機は3Dプリンターに比べてまだまだ高価な機器です。Instructableの記事でConvert a 3D PRINTER to LASER ENGRAVERを見つけました。RepRap Prusa i3 3Dプリンターをレーザー加工機に変えようという記事です。転用するための改造ポイントは3Dプリンターのホットエンドを取り外し、半導体レーザーモジュールに置き換えることで実現しています。RepRap Prusa i3のベッド(200mmX200mm)が加工できる最大サイズになりますのでレーザー加工機にしては小型になります。3Dプリンターとレーザー加工機共にXY軸は同じ動きをしますが、一般的なレーザー加工機ではZ軸(上下方向)はレーザーの焦点を調整後は動かすことができません。3Dプリンターで使用しているコントロールボードやステッピングモータ、モータードライバー、制御ソフトはそのままレーザー加工機で使用します。
今回は450nm 2000mW Blue 半導体レーザーモジュールを使用します。国内ではレーザーモジュールの単品販売は見つけられませんのでe-Bay(中国)から購入しました。2000mW程度であれば値段的にもお手頃です。また、電源は12V 2Aですから3Dプリンターで使用している電源で足りるでしょう。半導体レーザーは低出力ですが手軽に使用できる点が利点です。
3Dプリンターへの取付金具を3Dプリンターで作成します。レーザーモジュールの電源は12Vに接続し、TTL制御端子をコントロールボードの冷却ファン端子に接続した12VリレーでON/OFF制御をします。(今回の制御ボードではTTL端子をショートするとレーザーOFFでした) instructablesの記事では冷却ファン電源でレーザーモジュールの電源をON/OFFしていますが、購入したレーザーモジュールは電源ONから実際にレーザーが照射されるまでしばらく時間がかかります。これでは加工開始のタイミングが取れませんのでTTL制御端子を利用しました。

安全のために防護メガネも注文しました。

レーザー加工機と3Dプリンターでは加工データに違いがあります。レーザー加工機の加工データは加工テーブル(ベッド)とレーザーヘッドの移動速度設定とXY軸の移動データ、半導体レーザーのON/OFF制御データになります。
また、レーザー加工機では加工対象を切る、あるいは彫刻することが目的ですので3Dプリンター用のデザインツールでは用途が違います。そこでレーザー加工用のデータ作成にはInkscapeGコード作成プラグインRaster 2 Laser GCode generatorプラグインを使用することにしました。Inkscape はベクター画像を高品質で作成・編集できるオープンソースソフトウェアです。イメージの編集ツールはAdobeのツールでも構いませんが有料ソフトですので使っていません。最終的にGコードファイルが作成できるものであればよいのではないでしょうか
加工手順は

  1. Inkscape で作成したいデザインを編集。
  2. パス(アウトライン化)を作成。
    切断が目的ならオブジェクトのアウトライン化が必要ですが、彫刻ならイメージ情報をそのままGコードに変換します。
  3. Inkscapeのプラグインを呼び出してGコードファイルを作成。
    Gコード作成プラグインは切断用のGコードファイルを作成します。Raster 2 Laser GCode generatorは彫刻用のGコードファイルを作成します。
    ここまでがInkscape での作業です。

  4. 3Dプリンターの場合と同様に作成したGコードファイルをOctoPrintにアップロードしてPrintボタンを押す。
Gコード作成プラグインのページに詳細な手順が出ています。
Raster 2 Laser GCode generatorはこちらを参考にしてください。


7mmのMDF板に文字を彫刻してみました。
Raster 2 Laser GCode generatorの設定は
 ・解像度を5pixel/mm
 ・スピードを1000
 ・変換アルゴリズムはB/W fixed threshold
で設定しいます。写真でもわかる通り若干問題(横にはみ出している部分がある)があります。
ラスターイメージからの彫刻用Gコードを作成する別のソフトを探しています。 img2gcoというWEBベースのラスターイメージからGコードを作成するサイトを見つけました。こちらを試しています。

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モジュールを使用します。