2016年7月30日土曜日

理想のハンダ付け作業台を求めて

メインで使っているのはこれです。パナバイス。


パナバイスの固定ベース台座(300)とミニホルダー(203)です。自由度の高さと確実な固定という意味では最高なのですが、サイズの違う基板を挟もうとするとネジをグルグルグルグル…と延々と回し続けなければならないのがネック。基板をほぼワンタッチで固定できるプリント基板ホルダー(315)も持っているんですが、そっちはでかい基板じゃないと使えないので1度も使ったことがありませんw

そういう時はこっち。gootのレンズ付作業台 ST-93 。今Amazonで4000円台ですね。あちこちの機械としての仕上がりが悪くてスムーズにスライドしないし力いっぱいネジ締めないと止まらないしプラスチックカバーも飛んだりするので、この値段はないわーって思います。


でもまぁワニ口でポチっと挟むだけで使えるので小さな基板をちょこっとハンダ付けするにはラクで良いです。ルーペもついているので、ヘッドルーペを買うまでは重宝しました。まぁ便利なんですが、品質が低すぎて使うと気持ちが萎えます。そういう意味ではパナバイスは300+203で9000円ぐらいしますが、満足感あります。

そして今日お勧めする商品はこちらっ じゃじゃんっ(テンプレ)


下から、熱可塑性のプラスチックねんど おゆまる、HAKUBAの自由雲台、ETSUMIの「スマホホルダー」の3点です。自由雲台にスマフォグリップを取り付けて、スマフォグリップで基板を挟んでいる図。このMade in Japanの自由雲台はカメラ用、人間の肩関節と同じ3自由度でスムーズに動くので、好きなアングルにネジ一つでしっかり固定することができます。上記ST-93だとあっちこっちのネジを緩めたり締めたりしないといけないですが、これはネジ一個でピタリと止まります。

ただ、そのままだと軽くてハンダゴテ触っただけで動いてしまうので、熱可塑粘土を柔らかくしておいてギューっと押し付けてやれば、ゴムゴムしたいい感じのマウントが出来上がります。冷えるとスーパーボールみたいな感触で適度なクッション性があり触ってもベタつきません。粘土は850円で約200gなので、全部混ぜて極彩色のゴムマウントにするもよし、鉄の灰皿などに粘土を突っ込んで雲台を固定するのも良いと思います。私は200gのゴム全部使って作りましたが、とてもお見せできる色ではないので写真のオレンジの台は約20gを使ってデモ用に作りましたw

スマフォホルダーは基板を挟む幅の範囲があまり広くない(私のは55-88mm)のとグリップ力が強すぎるという点がネックになるかもしれません。また広げるほどバネが強くなるので、大きな基板で熱を加えると基板が変形してしまうかもしれません。でもサイズさえあえば、作業性はとても良いですし、安いのに品質感があって気持ちいいです。

後ろから見た図:うなじがセクシー

そういえばこの2週間ぐらいはパナバイスと自由雲台ばかり使っているなぁ…。道具がスムーズに動くのってストレス少ないんですよね。

2016年7月23日土曜日

Sitesの落とし穴再び / Salesforce

Salesforceのことをここに書き込むのは何年ぶりでしょ。

勤務先でSalesforceを導入するかも?ってんで、やらせてもらってます。で、Sitesを使うんですが…初期段階で動いていたものが、いつの間にか毎度おなじみの「認証が必要です」画面が出てしまうように。

当然ApexもVisualforceも登録済です。そして数日後、Apexのコンストラクタを見て気付きました。

public FooClass() {
    Id userId = UserInfo.getUserId();
    ....
}

…そりゃ認証しろって言われますよね・・・これに気づかなかった自分がいや。本来ここでidを取得する必要はまったくないのですが、社内デモ向けにSitesではなく普通のVisialforceとして見せるためにちょこっと追加したコードでした。

あー、でも動いてよかった。

なお、この「認証が必要です」について「salesforce sites 認証が必要です。」でぐぐったら2010年3月にまさにこのわたくしがdeveloper forumで同じ質問をしていることが判明いたしましたorz この時は違う原因だったんですが…。

これコンサル取得する前かなー…いやはや…なんとも…。

2016年7月22日金曜日

ラズパイ用電源制御基板

かわいいラズパイA。実は一番好きだ。
ラズパイからI2Cでコマンドを送ると指定した秒数経過後に電源を落とし、また設定時間経過後に電源を入れる基板。こんな単純な処理にMSP430G2553を使うことはないんだけど、手持ちで一番消費電力が少なくEnergia(≒Arduino IDE)で簡単に開発できるので(ATTinyあるけど書き込むの面倒くさい)。

とりあえず出来たので記念写真。ユニバーサル基板は疲れるわー。でも、ちゃんと?回路図を書いてから作業したので、私にしては珍しく一箇所も間違えずに完成した。大抵、出来上がってから「あ、1ピンと20ピンが逆だった」みたいな致命的なミスを見つけるんだけどorz

回路図は人様に見せられるものではないレベルw

見せてるけどなw
疲れたから仕上げは後にしようっと。始めたのは16:30だったから3時間か…。

--

あとは明日にしようと思っていたら23:30ごろ目が覚めてしまって、作業再開。

その間色々なことがありました…。

圧着した後でピンが違うことに気づき

ピンを付け直して圧着完了

部品が干渉するのでTO220を表面実装のMOSFETに交換。プルアップ抵抗もまとめて実装。
まずは圧着するピンを間違えてやりなおしorz

特性が今ひとつなのでハイサイドのスイッチをN-ch一個から2SC1815で電圧変換してからP-ch MOSを駆動する回路に変更。動作が安定せず。調べてみたら、ベース抵抗が100Ωだった。ゲート抵抗をそのまま使っていて交換忘れてましたorz 2.2kΩに交換して安定動作を確保。

パワーLEDを負荷として用いたチェックを一通り終えたので、いよいよラズパイ2B+をつないで見た…ら、MSP430G2553が起動しないorz

オシロで電源見てみたら、起動した瞬間に5v電源が3v近くまでドロップし(犯人はUSBケーブル)ていました。ので、3.3vラインに220μFのケミコンを追加して無事解決。

と思ったらケースのフタがしまらなくなってしまったので、電解コンデンサを取り付け直し。

よし、あとは電源のためのコネクタを接続…しようと思ったら、秋月から仕入れたミニBのDIP化基板には100mAのリセッタブルヒューズがついていて使えない。ねんのため普通のBも買ってあったのですが、家にB<->BのUSBケーブルが見当たらない…。他の小物と一緒にヨドバシに注文。

結局徹夜になりましたw

前述の通り、今回久しぶりのユニバーサル基板作業だったのですが、ヘッドマウントルーペの威力は絶大でした。今まで見えてないなかでよく作業してたなーと呆れるレベル。なにせワイヤストリッパにワイヤをセットするにもよく見えていなかったし、圧着もほぼ勘でしたw ハンダが溶け込んでいくところもよく見えるし、ピンとピンの隙間にハンダ付けをするのも楽勝でした。ちょっと近くが見えにくくなってきた方は、騙されたと思って使ってみてください!



さらにちょっとプログラムを書き換えようとしたら「JDK 6がないと起動しない」とEnergia.appに言われたので今どき6はないだろ、とEnergia最新版を入れたらI2Cが動かなくなりまして。しばらく頭を抱えていたのですが、「そういえば以前もそんなことがあったな」と自分のブログを思い出す。で、改めて、その「動いてたバージョン」を入れたのですが、「ダウンロードしたバイナリが壊れているのでインストールできません」と言われるorz しょうがないのでTimeMachineからほじくりだして再々インストール。無事動くようになりました…。Energia、活動していないわけではないみたいですけど、止まってますねぇ…。

で、書き換えたのは、2番目のパラメータを5分単位に。これで最大5*255=21時間25分までのwake upタイマーとして使えます。とりあえず7/24日 18:13に 60秒後にoff、130*5分後にon…というコマンドを送ったので、これで明日の朝5時ごろ起きてくれれば最終テストOK。

半導体レーザーで200W




ファイバーアウト出力200Wの半導体レーザー
リコーは、高い出力性能を備えたファイバーカップリング式808nm帯半導体レーザー「ハイパワーVCSELモジュール」を開発した。VCSELアレイ単体の出力は310W、ファイバーアウト出力は200Wを達成。センシング用途に加えて、エンジンなどの点火用途にも適用できるという。
(以上の写真およびヘッドラインはEDN Japanより引用しました)

さすがにこれはホビー用には出力高すぎるけど、でも半導体でもこんな出力可能なんですね。10Wぐらいのやつないかな。そしたらKitMill BT100/200にファイバーの先端を括りつけて「フライス盤兼なんちゃってレーザー加工機」にするんだけど。
(ORIGINALMIND.CO.JPサイトより)
10Wあればアクリルも何とか加工できるから、レーザーで切断してフライス盤でケズることができれば大抵のものは作れちゃう…気がする。

というか2Wの半導体レーザーで良いので、出してください>Original Mind様

2016年7月15日金曜日

MSP430G2553とRaspberry PiをI2Cで繋ぐ


■MSP430G2■

超低消費電力をArduinoと同じコードでさくっと動かすにはMSP430G2553 + Energiaに限ります。クロックを1Mhzに落とせば消費電流220μA、単3エネループ2本で1年近くもってしまう計算になります。

■接続■

GND同士、SDA同士、SCL同士…をつなぎます。3.3vは接続してはいけません。

ラズパイのHDMI端子を手前におき、GPIO端子の手前側の列、左から2番目がSDA、3番目がSCL、SCLの奥がGNDです。

例によって白がSCLです。でも黄色SDA/茶GNDなのは在庫切れorz

MSP430G2553側は、P1.6がSCL、P1.7がSDA、20ピンがGNDです。

Energiaは、I2Cが自動的にプルアップされるので抵抗を外付する必要はありません。海外ブログで ラズパイとArduino Unoをつないでいる記事を見かけて、それによれば「ラズパイがマスターでArduinoがスレーブなら問題ない。ラズパイは3.3vでプルアップされるがArduino側はされてないからだ」とのことなんですが…今手元にArduino unoがないので、確認できません。Nanoパチ(5v)で試したところ、4.5v程度の中途半端な電圧が出ていました。なので、5vロジックのArduinoを使うことはお勧めしません。接続前に電圧を測定してからにした方が無難です。

■Energiaの準備■

TI MSP430 LauchPadにMSP430G2553をセットします。同じMSP430G2でもチップによってジャンパの設定が違いますので、チップを取り替えたらこのページで確認してください。

ソースはこれです。Energiaは単に信号を受けて、1バイト目 x 2バイト目の回数、LEDを点滅させています。2バイト以外の場合はバイト数を高速で点滅します。ただし10以上はカットします。動作確認用なので特に意味はありません。

今回Arduinoではじめてi2cスレーブを書いたんですが、受信も送信もハンドラを書く方式でわかりやすくて良いですね。今後活用したいと思います。




■ラズパイの準備■

ここを参考にして一発でした。ありがとうございます。

あとは、i2cdetectで0x40が現れれば接続はOKです。
pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                      
pi@raspberrypi:~ $ 

あとは、以下のように4バイト書き込めば4回チカチカし、
sudo /usr/sbin/i2cset -y 1 0x40 3 2 2 7 i

こちらで6回ゆっくり点滅すればOKです。
sudo /usr/sbin/i2cset -y 1 0x40 3 2 2 7 i

私は貧乏性なので数千円のラズパイを壊すのがとても恐ろしい。ですが、この構成ならば、例えばリレーやモーターなどの危ないことはマイコンにやらせておいて、ラズパイ様は安全なところで命令だけ下していればいい…という運用も可能になります。

■追記7/24■

i2cdetectで0x40にデバイスが現れない場合には、Energia IDEのバージョンをRelease 0101E0015にしてみてください。Release 0101E0016 / Release 0101E0017でI2Cが動かないという問題で大ハマリしたことがあり、まさにさっき同じ穴に落ちましたのでorz

2016年7月12日火曜日

聴覚支援コイルを自作

補聴器には磁気コイルという補助装置がついてます。磁気ピックアップみたいなもので、美術館や劇場などに設置されたコイルから音声信号出力で駆動される磁気を拾って補聴器に直接届くというすぐれもの。

残念ながら設置場所はそう多くないんですよね。

で、自作してみました。こないだ入手した25Wアンプに24AWGを直径1mで20ターンほど。

見事に、聞こえましたw

左右用を作ったのですが、片チャンネルを裏返しにするとボーカルがヘコんだりしてイトオカシww

できあがった時にはたまたまビートルズが流れていたんですが、THE ENDのドラムスが左右に広がって、Her Majestyがほわほわと左右に揺れるのを聞いて、ちょっと涙でました。

コツはコイルをでかくすること。2mぐらいの輪にすると輪の軸上から左右45度、中心から1mぐらいはしっかり聞こえます。もし周囲にコイル付き補聴器をしている人がいたら、ちょっと電子工作してあげると喜ばれるかもしれません。アンプにコイル接続するだけなので、工作ってほどでもないんですがw

私は食卓の自分の席の前にステレオ設置する予定。今までテレビはヘッドホンで聞いてたんだけど、これで食事をしながらアニメをみながらヨメ(三次)と会話できます :-)

2016年7月10日日曜日

はい撤収

1年ぐらい前から、LPC1114FN28と200円の8x8マトリクスLEDを1枚の基板に乗っけて、I2Cで並列接続して大きなLEDマトリクスを安く簡単に作るような「部品」を売り出す…というのを進めていたんですが、量産しないと値段が下がらない、量産しても果たして売れるのかそんなもの…というところでウダウダしてました。世間様にお披露目したのは去年のmbed祭りだっけか。


ウダウダしているうちに出ちゃいました。

しかも、私はただのディスプレイで考えていましたが、ゲームにするなんて考えてもいませんでした。
IchigoDotS(イチゴドットS) 小型ワンキーゲーム機

価格も私のルートで量産した場合の原価とほぼ同じ。

アイディアも価格も完敗(笑)。

Eagleの設計データはここに公開します。ガーバーファイルも入れておきますので、Elecrowにzipそのまま送ればちゃんと基板になって出来上がってきます。

上のデモを動かしているプログラムはこちら。

さあ次行こう、次。次は「他人の褌」で相撲を取る(w

2016年7月1日金曜日

ESP単体で30分のデータをまとめて送信


■RTCメモリ/Ambient■

ESP8266 / ESP-WROOM-02のRTCメモリは、電源つないでおけばdeep sleepの後でも消えない約500バイトのメモリです。フラッシュと違って電池外すと消えちゃいますが、どうせdeep sleepでは電池つなぎっぱなしですし、使っても使わなくても電流消費変わらないので、使わにゃソンです。

で、Ambientは個人の方が開発・運営しておられるデータ可視化サービス。ThingSpeak.comのようなサービスですが、ThingSpeakにはないデータをまとめて送信できるAPIが追加されたとのことで、使ってみました。

■Ambientに登録■

メールアドレスとパスワードをすると、確認メールが届きます。確認メールのリンクをクリックすれば登録完了。

Myチャネル画面で「チャネルを作る」をクリックし、一覧表示されたチャネルのリンクをクリックします。

チャート登録画面でチャネル設定でデータの種類を登録し、グラフの軸となるデータ種別を登録します。チャネル設定のデータの種類は、チャート設定での「データn」と対応しています。

1つのチャートには複数のデータを表示できます。関連のありそうなデータを左右軸に振り分けて登録しましょう。チャート1には温度と湿度と気圧、チャート2には気温と空気質を登録します。左右ごとにスケーリングされるようなので、温度と湿度は左、気圧は右にするといい感じでグラフが3本並びます。

登録の際に「日付指定」をチェックしてください。これがThingSpeakと違うところで、Thing Speakはpostした日時がグラフ横軸になるためある程度貯めておいたデータを一気に送る、ということができません。でも、Ambientはデータに日付フィールドを添付して送ることができるので、ESP-WROOM-02のように送信時に消費電力が著しく増大するマイコンにはとてもありがたい機能です。

1つ注意しなくてはいけないのは、Arduino/ESP SDKの日付シリアルtime_tは、秒単位、Ambientはミリ秒単位だということです。Arduinoはdoubleもlong longを扱えないのでこういう仕様になっているのかもしれませんが、それに気づかずにグラフがおかしい…と悩んでAmbientの運営さんのお手を煩わせてしまったのはこの私ですorz

ということで、シリアル値を送る形式で一度完成していたのですが、W3C似のAmbient文字列に変換してから送るように書き換えました。まぁ送り出しのところ一箇所なので、ちょちょいのちょいw

いずれにしても、サイトのドキュメント見てください。

■Ambientへの送信■

ThingSpeakは、POST一発でデータを送ることができるという簡便さが素晴らしいです。でも、Ambientは、SDKがあります。なので、

ambient.begin(channelId, writeKey, &client);ambient.set(1, "12.34");
ambient.set(2, "45.56");
ambient.send();  //  Ambientにデーターを送信

…これだけです。わはははは。

上記は即時送信の場合ですが、一括送信はJSON形式にする必要があります。時刻はunix time(1970年1月1日 00:00:00からのミリ秒)か文字列日付(YYYY-MM-DD HH:mm:ss.sss)で指定します。データのJSON化ついてはこちらの記事をご覧くださいませ。ほんとにこのライブラリ、使いやすくて素晴らしい。

■ESP-WROOM-02にデータを貯める■

ESPには電源でバックアップされた512byteのRAMが搭載されています。4 byte単位での読み書きが可能なのですが、先頭の4バイトはダメっぽいので508バイトを使います。このメモリについてはこちらのブログで知りました。リファレンスちゃんと隅まで読まないとダメよね…つくづく…。

読み書きの際には、まず初期化が必要なのですが…最初に初期化プログラムを走らせて、それから実際のデータを書き込む、なんてのは面倒だしスマートでないので、初期化されたかどうかをCRCで判断します。RTCメモリに書き込まれたCRCと新たに計算したCRCが一致すれば初期化済です。あとは、データを書き換えるごとにCRCを書き換えてやる必要があります(でないと毎回初期化されちゃいますからね)。CRCの計算ルーチンはこちらのコードを使ってます。

読み書きはこんな感じです。


■ソース全体■

ソースはgithubに上げました(あとで掃除します)。

■Ambient感想■

個人で開発・運営しておられるそうですが、サクサク使える良いものに仕上がっていると思います。日付指定ができると良いな、って言ったの俺だもん俺俺w

でも、贅沢なのがユーザです。下記、ご検討よろしくお願いします:-)
  • チャネル設定した名前がチャート追加画面にも反映される
  • データに色と線種を指定できる
  • Arduino time_t形式でのcreatedタイムスタンプが使える←NEW!

■CM■

スイッチサイエンスさんで発売中の「Board1 ver.1.0」ESP-WROOM-02搭載モジュール、値下げしました。1680->1290円です。どうぞよろしくお願いします。

2016年6月27日月曜日

ArduinoでJSON


javaでJacksonなんかをいじっていると、 "{\"name\" …なんて書いていくのは面倒くさいというか、どうせミスするのがオチなんだよ俺なんかー(血の叫び

と、つい人は不良化してしまいます。

というわけで、また楽な道を探しましたところ、良いライブラリ見つけました。

これ使いやすいですよ。ちょっとバッファを食うので、nano / unoあたりだと大きなデータは作りにくいかもしれないですが、例えばAmbient(thingspeak.comのようなクラウドサービス)に送るデータをserializeする場合なんか、これだけで書けてしまいます。dictionaryもarrayもかなり直感的に書くことができてとてもラクです。

//
//  send to Ambient
//
const int kMaxJsonBuffer = 2048;
StaticJsonBuffer<kMaxJsonBuffer> jsonBuffer;
char jsonPrintBuffer[kMaxJsonBuffer];
bool sendStorageToAmbient() {
  int n = storage.uni.datas.counter;
  JsonObject& root = jsonBuffer.createObject();
  root["writeKey"] = "*****************";    // ambientのapi write key
  JsonArray& dataArray = root.createNestedArray("data");
  for (int i = 0; i < n; i++) {
    OneData_t *pSrc = &storage.uni.datas.blocks[i];
    JsonObject& one = jsonBuffer.createObject();
    one["created"] = pSrc->created;
    one["d1"] = pSrc->temperature;
    one["d2"] = pSrc->humidity;
    one["d3"] = pSrc->pressure;
    one["d4"] = pSrc->airQuality;
    dataArray.add(one);
  }
  root["data"] = dataArray;
  Serial.print("text size = ");
  Serial.println(root.measureLength());
  root.printTo(jsonPrintBuffer, sizeof(jsonPrintBuffer));
  Serial.println(jsonPrintBuffer);
  int sent = ambient.bulk_send(jsonPrintBuffer);
  return true;
}

お勧め。

上の例ではバッファサイズを2048バイトにしているのでArduinoだと一発アウトですが、一度に送るレコード数を制限する等でカバーしてみてください。

なお、写真は特にこの記事とは関係ありませんが、次期モデルのプロトタイプ。LEDの色をちょっくら変えてみました。緑色LEDが明るすぎるので少し抵抗を大きくしないといけないの図。

2016年6月21日火曜日

450円でESPでもArduinoでも使える高精度RTC

電子工作でRTCっていうとDS1307 / 1302あたりが定番だと思うんですが、秋月で売ってるRX-8025NBって、なかなか良いと思うんです。TXCO使ったものだともっと精度の高いものもあるんですが(NXPのPCF2129など)、450円で月差13秒程度ってのはなかなかのバランスだと思います。

秋月電子のサイトから

ずっと以前に買ってあったものの使う機会がなくて部品沼に沈んでましたが、在庫リストを見ていたら出てきたので使ってみました。

配線は、SDA - SDA, SCL - SCL, Vcc - Vcc, Gnd - Gndで何のひねりもありません。動作電圧範囲が広いのでmbedでもArduino / ESP8266/ ESP-WROOM-02どれでもそのまま使えます。

欠点としては、バッテリバックアップのラインが別になっていないので、電池やスーパーキャパシタをつなぐときにはSBRダイオードなどで一手間かかってしまいます。

この点、VddとVbatが分かれているDS1307+とかPCF2129は便利なんですよね。

余談ですが、こないだPCF2129で基板を作ったんですが動作しなくて泣いています。その辺の顛末はまたいつかブログに書きます。

■ソース■

こちらの記事を参考にさせていただきました。ありがとうございます。

RTCに多いんですが、年月日時分秒すべて60進数のBCDです。通常の10進をそのままセットするとまともな値が返ってこないので、セット前 / 読み出し後に変換してやる必要があります。fromClockFormatはBCD(60進)から10進、toClockFormatは10進からBCDへの変換を行ってます。

time_t(unix時間:1970年1月1日 00:00:00.000からの経過ミリ秒)とグレゴリアン歴との変換は標準関数で済ませてしまいました。テヘペロ。

起動するとWiFiに接続してsntpから時間を取得してRTCにセットし、あとはRTCから読み込んでは時間を表示しているだけです。

このRTCにはアラームをセットして割り込みを掛けたりする機能もあるのですが、使っていません。ESP-WROOM-02でRSTにつないでやると、deep sleepの後に指定した時刻に立ち上がる、なんてこともできると思います。



いい感じで動いているからあと何個か買っておこう。

…秋月にアフィリエイトがないのが残念です(笑)。