さくら IoT – 温湿度センサー HDC1000


さくら IoT と 温湿度センサー HDC1000 で温湿度を観測する

ハンズオン資料
さくらインターネットから、ハンズオンの資料が公開されています。
http://www.slideshare.net/sakura_pr/ss-64599802

センサーとして HDC1000 を、WebSocket クライアントとして node-red を使っています。
HDC1000 は、秋月電子で販売されています。
HDC1000使用 温湿度センサーモジュール

いくつか気になったことがあります。
(1) HDC1000 の +V を Arduino の 3.3V に接続している。
Arduino は 5V 動作なので、HDC1000 も 5V にすべきでしょう。
(2) node-red のインストールを、すべて root ユーザーで行っている。
yum 以外は、一般ユーザで設定できますね。
(3) node-red での動作確認が WebSocket を受信するところまでです。
これは、時間の関係かもしれないが、もうちょっとやりたいですよね。
WebSocket の受信だけなら、WEBブラウザーでも出来るし。
拙作の javascript 版

今回やったこと
HDC1000 のデータを node-red で受信するところまでは、資料と同じです。
その先として、グラフ表示をしてみました。

環境は、CentOS ではなく、MAC で構築しました。
インストールは、下記を参考にしてください。
brew で node をインストールする
MAC に Node-RED をインストールする
Node-RED でグラフ表示をする

センサ側
HDC1000 を通信モジュールに接続する
20161013_sakura_hdc1000

node-red の処理
WebSocket の受信から、http 出力にする flow がわからなかったので。
いったん、WebSocket で受信したデータをファイルに保存しました。
ファイルを読み出して、http 出力に結びつけました。

Flow
Flow は Github で公開しました。
20161013_sakura_flow

parser
WebSocket で受信したデータを cvs 形式にする
コード parser.js

text
一番新しいデータが、上になるように、逆順に並び替える
コード text.js

temperature、humidity、count
最新の100個のデータを、グラフ形式に変換する
コード temperature.js

結果
20161013_sakura_temperature


さくら IoT のケース


さくらの IoT Platform は、さくらインターネットが提供するIoTプラットフォームサービスです。
さくら IoT の通信ボードには、外付けのアンテナをつけますが、小型同軸コネクタを使っており、そのうちに壊れるのは思うくらいヤワな感じです。
そこで、さくらの通信ボードとアンテンを固定し、Arduino と一体にしたケースを、作成しました。
素材はアクリル板で、レーザー加工機を加工しました。
加工データは Github で公開しました。

20160901_sakura_iot_case_board
20160901_sakura_iot_case_front


さくら IoT で温度・湿度を観測する


20160701_sakura_iot_system

さくらの IoT Platform さくらインターネットが提供するIoTプラットフォームサービスです。
前回 は、基本的な確認ができたので。
今回は、実用的なものを作ってみました。
センサーのデータ (温度・湿度など) を、さくらの IoT を経由して、WEB にてグラフ表示します。
作ったプログラムは Github で公開しました。

まず、センサー部です。
センサーボード として、以前作ったものを使います。
温度、湿度、気圧などが測定できます。
20160701_sakura_iot_sensor_board

Arduino にセンサーボードとIoT通信ボードを接続します。
Arduino のスケッチ を作成します。
Arduino に書き込みます。
Arduino の電源を入れると、さくらの IoT サーバーに送信されます。
データは、さくらの IoT コントロールパネルに表示されます。
これで、センサー部は完成です。

続いて、サーバー部です。
今回のアルファ版では、さくらのクラウド 2万円分チケットも付いていました。
ありがたく使わせて頂き、さくらのクラウドで新規にサーバーを立てました。
サーバーのプログラム を作成します。
主要部は、Python Flask で記述しました。
さくらの IoT Platform から来たデータを、いったんデータベース(MySQL) に格納します。
データベースから読み出し、Google Chart でグラフ表示します。
これで、サーバー部は完成です。

自宅で1日ほど運用したものが、下記に示します。
ここのところ、毎日30度を超えて暑いですね。
寝る前に、クーラーを入れたので、そこだけ温度が下がってます。
20160701_sakura_iot_graph


PIC16F84A で Lチカ


20150426_pic_device

PIC16F84A は、マイクロチップ社の8ビットマイコンです。
ひと昔前は、8ビットマイコンの定番的な存在でしたが。
現在では、同社の 18F シリーズや、アトメル社の ATmega が主流になっています。
今回は、無償でまとまった数を入手したので、久しぶりに PIC で遊んでみます。

スペック比較
Arduino Uno に使われているアトメル社の ATmega328P と比べると、かなり見劣りします。

ATmega328P PIC16F84A
外形 28ピン DIP 18ピン DIP
動作電圧 1.8 – 5.5V 2.0 – 5.5V
クロック 20 MHz 20 MHz
プログラム容量 32KB 1Kword ※1
EEPROM容量 2KB 64B
RAM容量 1KB 68B
AD変換 6個 なし
UART 1個 なし
SPI 1個 なし
I2C 1個 なし
IO電流 40mA 20mA
秋月価格 250円 250円

※1 PIC16F は14ビット命令長です。

開発環境
マイクロチップ社から MPLAB X IDE が無償で提供されています。
Cコンパイラも、8ビット(XC8)、16ビット(XC16)、32ビット(XC32) の無償版が提供されています。
それぞれ、Windows、MAC、Linux に対応しています。

PICライタ
秋月電子には、30種を超える PICライタ が販売されています。
ホビー用の定番は PICkit3 です。

C言語 プログラム
PICの開発環境が、この数年で大きく変わりました。
古い環境やアセンブラで書いた例はいろいろ見つかりましたが。
MPLAB X IDE + XC8 という新しい環境での例は少なかったです。

PIC特有の流儀は、3つくらいです。
(1) チップの品種ごとにマクロが用意されています。
レジスタのアドレスやビット配置などをさほど意識せずに、すっきり書けます。

#include <pic16f84a.h>

(2) config レジスタ用にマクロが用意されています。
main が実行される前に、初期設定を実行してくれます。

#pragma config WDTE = OFF, PWRTE = OFF, CP = OFF, FOSC = HS 

(3) 外部クロック用に周波数定義のマクロ定数が用意されています。
delay など正確な時間が必要な関数が使えます。

#define _XTAL_FREQ 16000000

Lチカのプログラムを書く。
TRISx は、IOポートの出力/入力を設定するレジスタです。
PORTx は、IOポートの値を設定するレジスタです。
今回は、RB4 に LED を付けます。

#include <xc.h>         /* XC8 General Include File */
#include <pic16f84a.h>  /* PIC16F84A */ 
#define _XTAL_FREQ 16000000     // 16MHz
#pragma config WDTE = OFF, PWRTE = OFF, CP = OFF, FOSC = HS 

void main(void)
{
    TRISA = 0x00;   // PortA all output
    TRISB = 0x00;   // PortB all output
    PORTA = 0x00;   // PortA all low
    PORTB = 0x00;   // PortB all low

    while(1)
    {
        PORTBbits.RB4 = 1;  // LED on
        __delay_ms(1000);   // 1sec
        PORTBbits.RB4 = 0;  // LED off
        __delay_ms(1000);   // 1sec
    }
}

MPLAB X IDE 上でコンパイル&ビルドする。
MPLAB X+XC8で__delay_ms関数にエラーマークが表示される問題の解決方法

プログラム転送
PICkit3 を使って、MPLAB X IDE から、PICマイコンにプログラムを転送する。
このとき、PICkit3 から5V電源を供給するようにすると、PICマイコン側は MCLK のプルアップ抵抗だけあればいいです。
20140426_picschematic_pickit3 20150426_pic_pickit3

最低限の回路
PICマイコンの周りに下記を追加します。
(1) 5V電源
(2) 電源コンデンサ
(3) MCLK のプルアップ抵抗
(4) セラミック発振子 ※2
(5) 動作確認用のLED

※2 クロック回路
PIC のクロック回路には、内部発振と、外部クロックの2つの方法があります。
内部発振では、外付けの抵抗とコンデンサが必要です。
外部クロックでは、水晶発振子、セラミック発振子、あるいはクロック源が必要です。
実装的には、セラミック発振子を使うのが簡単です。

20140426_pic_schematic_basic_led

動作確認
上記の回路で、電源を入れれば、LEDが点滅します。
20150426_pic_device

プログラムなどは、Github で公開しています。

参考
PIC 久しぶり – PIC16F84A XC8 LED
LEDを点滅させる - TMR0割込み -(PIC16F84A XC8)
16F84A XC8開発例 – カウンタ回路(7セグメントLEDの制御)
XC8:コンフィグレーションワード記述書式について
MPLAB X+XC8で__delay_ms関数にエラーマークが表示される問題の解決方法


センサーシールドのケース


20150215sensor_case_acrylic

センサーシールド のケースを作りました。

まず、合板で試作しました。
側面にUSBコネクタとDCジャックの穴を開けています。
上面にシリアル通信用にピンソケットの上に横長の穴を開けています。
それ以外のファブラボのロゴとかフォントなどは、熱対策の通気穴です。
20150215sensor_case_wood

少し寸法がおかしいところを修正して。
本番はアクリルで作成しました。
分解できるように、組み合わせて、セロテープで止めています。
次は、ネジ止めにしようかな。
コネクタを差してみると、3mmの板厚の分だけ、ちょっと抜き差しがやりにくいです。
ケースとコネクタの面が合うようにしたほうがいいかな。

データは Github に置いています。
20150215sensor_case_ai


Eagle と Modela を使って電子基板を作る その4


2014128_pcb_test

概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
今回は ファブラボ・メルボルンの手法 を部分的に適用してみました。
題材は、7セグ LED の Arduino シールドです。

EagleデータとArduinoスケッチは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成するところは、ほぼ同じです。
配線を太くしたり、PADを大きくしたりします。
20141227_eagle_sch 20141227_eagle_brd

(2) fablab-mill-n-drill.ulp を使って、ミリング (配線パターンの外形線) とホール (穴) のデータを作成します。
なお、ホールのデータは、小さいので、目視しにくいです。
20141227_eagle_milling

(3) ミリングとホールをひとつにして、dxf 形式でファイルを出力する。
このとき、左右反転 (Mirror) します。

Dr.Engrave 側の作業

1. 配線のと穴の加工
(1) データの作成
配線と穴の dxf ファイルを import します。
残念ながら、大きさの情報は無視されてしまいますが。
bitmap から外形線を抽出するのに比べて、dxf では鮮明な外形線が保持されます。
グリッドを表示して、外形に合わせて、リサイズします。
2014128_engrave

(2) Modelra に 1/64 のエンドミルをつけます。
(3) 加工を指示します。

2. 外形の加工
(1) 配線と穴のデータから、配線と穴を削除して、外形のみにします。
(2) Modelra を 1/32 のエンドミルに変えます。
(3) 加工を指示します。
2014128_milling

穴あけ
(1) 基板を Modela からはずします。
(2) 机に基板を固定します。
(3) ミニドリルに 0.8mm のドリル歯をつけて、穴をあけます。
ピンヘッダには、少し小さいので、穴を大きくなるようにグルグリします。
2014128_dirill

基板の研磨
(1) 基板の縁を平ヤスリで削ります。
(2) 基板の銅箔面を荒い紙ヤスリで磨いて、表面のギザギザをとります。
(3) 銅箔面を研磨剤で磨いて、ハンダが乗りやすいように、表面を滑らかにします。
2014128_polish_2

ハンダ付け
(1) 部品をつけて、裏面をハンダ
付けします。
2014128_pcb_rear 2014128_pcb_front

動作確認
(1) Arduino に今回作った基板を載せます。
(2) Arduino にスケッチを書き込みます。
(3) 全てのセグメントが点灯すれば、OKです。

Arduino スケッチ
000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーです。
スケッチには、各セグメントを1つづつ順番に点灯するモードも含まれています。


Eagle と Modela を使って電子基板を作る その3


概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
今回は、ファブラボ・メルボルンの手法を試してみました。
結果としては、うまくいきませんでしたが、少し前進したところもありました。

ファブラボ・メルボルンの手法
前回まで手法 は、Eagle を使って配線パターンを画像情報として作成して、Modela のソフトでベクタ情報に変換する方法です。
ファブラボ・メルボルンの手法は、Eagle を使って、直接 Modela の CAMデータを作成するやりかたです。
Dr.Engrave や fabmodule などは使用しません。
オリジナルの英文 の他に、日本語訳 もあるので、詳しくはそちらをご覧ください。

基本的な流れ
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
配線を太くしたり、PADを大きくしたりします。
(2) fablab-mill-n-drill.ulp を使って、ボード図(brd)からミリング(配線パターンの外形線)とホール(穴)のデータを作成する。
(3) fablab-mill-n-drill.cam を使って、Modela の制御コードを作成する。
Modela を新たな工作機器として認識させるために、eagle.def の修正が必要です。
(4) Modela に制御コードをUSBシリアル通信で渡す。

実際に出来たこと
(1) Eagleで、回路図(sch)とボード図(brd)を作成します。
今回の題材は、7セグLED SND2537 です。
20141227_eagle_sch 20141227_eagle_brd

(2) の fablab-mill-n-drill.ulp は、オリジナルのままでは、1/30 くらいの小さいデータが作成されます。これは、Eagleのバージョンの違いによるもので、下記に対処方法がありました。
EAGLE ulp generates wrong scale
20141227_eagle_milling

(3) (4) の操作を行いましたが、Modela は全く反応しなかったです。
生成した制御コードに誤りがあるのだと推測しています。
詳しい調査は、そのうちに。

ひとまず GitHub に下記を公開しておきます。
– fablab-mill-n-drill.ulp (修正したもの)
– fablab-mill-n-drill.cam (オリジナル)
– eagle.def

前進したこと
(1) fablab-mill-n-drill.ulp により、配線パターンの外形線のベクタ情報が得られるようになった。
(2) 配線パターンを bitmap 形式の他に、dxf 形式で出力できるようになった。
fabmodule は、dxf 形式を受け付けることはできませんが。
Dr.Engrave は、受け付けることはできます。
次は、Dr.Engrave を使った基板作成を試してみます。

Arduino スケッチ
000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーです。
スケッチには、各セグメントを1つづつ順番に点灯するモードも含まれています。

参考
Making Printed Circuit Boards with the Fab Lab
FabLabでプリント基板を作る方法
EAGLE ulp generates wrong scale


7セグ電光掲示板


20141125_7seg_front

7セグLEDを6個使った電光掲示板です。
Arduino で制御します。

機能
(1) 数字だけでなくアルファベットも表示します。
フォントは Wikipedia 7セグメントディスプレイ を参考にしました。
(2) 表示モードは2通りあります。
– 文字を右から左にスクロールします。
– 文字の表示する位置を変えずに1文字づつ表示します。
(3) 表示する文字列はUSBシリアルから設定できます。
設定した文字列はEEPROMに保存するので、設定後はPCは不要です。

ケース
アクリル板をレーザーカッタで切りました。
7セグの高さは12mmなので、3mmアクリルx4枚でスペーサーを作りました。
IMG_20141111_163502 20141125_7seg_rear

思った感じで出来ましたが。
実際に使ってみると、少し不具合がありました。
裏側の真ん中がたわみます。
右図のようにすれば、強度が得られるはず。
20141125_7seg_frame_rear_1 20141125_7seg_frame_rear_2

電気回路
使用した7セグは、OasisTek社のTOS-23101FS-Hx です。
ずばりのカタログが見つからなかったので、TOS-23101BE-B を参考にしました。
実測してみたとろこ、コモン・アノード・タイプで、順方向電圧は 3.3V くらいです。
20141125_7seg_measure 20141125_7seg_test

カソードをマルチに接続して、アノードを個別に制御するダイナミック点灯方式です。
20141125_7seg_schematic

配線
配線が一番大変でした。
5Pコネクタ付きケーブル を使いましたが、5時間くらいかかりました。

資料
Arduino のプログラムや、レーザーカッタ用のデータなどは、 GitHub で公開しています。


Fab蔵 IoT Night


20141105fabkura_outside

会津若松の Fab蔵 で開催された IoT Night に参加しました。
Fab蔵の訪問は、6月のオープニングと、2回目です。
オープニングのときに比べて、作品棚や工具棚などが出来て、日々利用されている感じが出ていました。

最初は 伊藤元 さんが FourBeat 開発の話をされました。
中国で製造すると安いけども、修正を依頼しても、1回1カ所しか直らず、何度もやり取りする羽目になると、いう体験案を聞くことができました。

2番手は私で、FabLab Kannai の紹介をしてきました。
どういう人が参加しているかや、運営の実態についても、質問もありました。

参加者は10数名ほどで、アットホームな雰囲気で良かったです。

20141105fabkura_inside20141105fabkura_1

20141105fabkura_320141105fabkura_2


Eagle と Modela を使って電子基板を作る その2


20141019_pcb_test

概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
その1 では、Modela でどんな加工ができるのか味見してみました。
今回は、もう少し実用的なものにしてみました。
題材は、3x3 LED マトリックス の Arduino シールドです。

EagleデータとArduinoスケッチは GitHub で公開しています。

全体の流れ
Modela の加工は、 (1)配線 (2)穴あけ (3)外形 という異なるエンドミルを使う3つのステップがありますが。
今回は、穴あけに適切なエンドミルがないので、配線と同時に穴の位置を切削して、あとでミニドリルで穴をあける手順にしました。
また、外形を加工しようとしたところ、原点がずれたようで違うところを切削しようとしたので、外形の加工は諦めて、あとでアクリルカッタで切りました。

Eagle 側の作業
(1) 回路図(sch)とボード図(brd)を作成するところは、ほぼ同じです。
配線を太くしたり、PADを大きくしたり、大きいドリル穴を追加します。
今回は、配線が交わるところがあるので、一部は表面になっています。
基板で配線されるのは、裏面だけなので、表面は手配線します。
20141019_pcb_eagle_sch 20141019_pcb_eagle_brd

(2) 配線とドリル穴のデータを bitimap で出力します。
このとき、左右反転(Mirror) して、白黒画像にします。
20141019_pcb_eagle_pat 20141019_pcb_eagle_drill

(3) Eagle が exportする画像は png形式なので、BMP形式に変換します。

Dr.Engrave 側の作業

1. 配線の加工
(1) データの作成
配線の画像を import します。
グリッドを表示して、外形に合わせて、リサイズします。
近接している PAD の間に、ハンダブリッジしないように、長方形を追加します。
20141019_pcb_engrave_pat

(3) Modelra に 1/64 のエンドミルをつけます。
(4) 加工を指示します。

2. 穴あけの加工
(1) データの作成
穴あけの画像を import します。
外形に合わせて、リサイズします。
外形を削除します。
穴の大きさを 0.1 mmに変更します。
左下は、切削できなかったところあったので、もう一度切削にするために、配線パターンを残しています。
20141019_pcb_engrave_drill

(2) エンドミルはそのままで、加工を指示します。

3. 外形の加工
(1) 配線と穴あけの画像から、配線と穴あけの削除して、外形のみにします。
(2) Modelra を 1/32 のエンドミルに変えます。
(3) 加工を指示します。
(4) 問題発生
原点がずれたようで違うところを切削しようとしたので、外形の加工は諦めて、すぐに止めました。

穴あけ
(1) 基板を Modela からはずします。
(2) 机に基板を固定します。
(3) ミニドリルに 0.8mm のドリル歯をつけて、穴をあけます。
LEDや抵抗にリード線には、この大きさでぴったりです。
ピンヘッダには、少し小さいので、穴を大きくなるようにグルグリします。
手操作のため、ちょっと穴に位置がずれて、ピンヘッダがまっすぐ入らないところもありますが、気にしないことに。
20141019_pcb_drill

外形の切削
(1) 基板をアクリルカッタで切ります。
結構大変だった上に。
途中まで切って、板を割ったところ、断面がギザギザになってしまった。(^^;
(2) 基板の側面を、やすりで磨きます。
20141019_pcb_outline

基板の研磨
(1) 基板の縁を平ヤスリで削ります。
(2) 基板の銅箔面を荒い紙ヤスリで磨いて、表面のギザギザをとります。
(3) 銅箔面を研磨剤で磨いて、ハンダが乗りやすいように、表面を滑らかにします。
20141019_pcb_board

ハンダ付け
(1) 部品をつけて、裏面をハンダ付けします。
(2) 本来の手順であれば、表面の配線は、部品をつけるときに同時に行うべきですが。
忘れてしまったので、あとから空中配線しました。(^^;
回路図とボード図にゼロオームの抵抗をダミーで置くなど、工夫が必要です。
20141019_pcb_rear 20141019_pcb_front

動作確認
(1) Arduino に今回作った基板を載せます。
(2) Arduino にスケッチを書き込みます。
(3) 全てのLEDが点灯すれば、OKです。

課題
(1) エンドミルを交換するため、電源を切ると、Modela の原点がずれます。
(2) 配線の加工で、切削できないところがありました。
20141019_pcb_milling_2