2015年12月31日木曜日

ESP-WROOM-02のRTOSをMacOS X El Capitaionで動かす


■大まかな手順■


  • esp-open-sdkをビルド
  • esp-open-rtosをダウンロード

…これだけのことなんですが、MacOS X El Capitain固有の問題やら私の環境固有の問題で大ハマリしました。また、最初ESP8266-RTOS-SDKを試してみたのですが、サンプルのビルドすら通らずに挫折してesp-open-rtosに逃げたら、あっという間にマルチスレッドなLチカまで通って拍子抜け、という経緯がありました。

ということで、ハマりどころも含めてご紹介します。

なお、esp-open-sdkは、大文字小文字を区別するファイル・システムでないと動作しません。なので、Volumeを作ってその中で作業をします。そしてesp-open-rtosはesp-open-sdkがないとダメです。なので、再起動などでunmoutされた後に再度esp-open-rtosを使う場合には以下の手順で再度esp-open-rtosの入っているdmgファイルをマウントしなおす必要があります。

$ sudo hdiutil mount ~/Documents/case-sensitive.dmg
…「見つからない」というエラーが出ればすぐ気づくのですが、ビルドで別のエラーがでる、esptool.pyで書き込みしようとした時にうまくいかない…という直接関連なさそうなエラーが出るので、ちょっとハマりました。

あと、Homebrewが必要です。

■まずesp-open-sdkをビルド■


https://github.com/pfalcon/esp-open-sdk
このページの「Requirements and Dependencies / MacOS」を参考にesp-open-sdkが動く様にします。
$ brew tap homebrew/dupes
$ brew install binutils coreutils automake wget gawk libtool gperf gnu-sed --with-default-names grep
$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
$ sudo hdiutil create ~/Documents/case-sensitive.dmg -volname "case-sensitive" -size 10g -fs "Case-sensitive HFS+"
$ sudo hdiutil mount ~/Documents/case-sensitive.dmg
$ cd /Volumes/case-sensitive
$ git clone --recursive https://github.com/pfalcon/esp-open-sdk.git$ make STANDALONE=y

Buildingでのgit cloneは当然問題ないのですが、その次のmakeでビルドが通りませんでした。なお、私はmake STANDALONE=yを選択しました。esp-open-rtosにはSTANDALONE=nを選べと書いてあるのですが(後で気付いた)、とりあえず問題なく使うことができました。

□ハマり1:じゃまな古いsed□

ビルド途中でエラーが出ました。sed -rオプションが使えない云々。調べるとmac標準のsedではなくgnu-sedを使えば解消できるとあるのですが、「Requirements and Dependencies / MacOS」でbrewと使って導入済み。かなり右往左往しましたが、結果として消し忘れていたMacPortsのsedが悪さをしていました。以下の手順に従ってMacPortsをアンインストールして、sed -rオプション云々のエラーは消えました。


□ハマり2:Xcode command line tools□

makeしているとこんなエラーがズラーっと出てとまります。
[INFO ]  Installing pass-2 core C compiler[ERROR]    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cstddef:46:9: error: no member named 'ptrdiff_t' in the global namespace
...
エラーメッセージの内容からXcodeのcommand line toolsが悪さをしているっぽい。対応策はここで見つけました。

私のところはXcode 6.3ではないですが、結果的には以下のスクリプトを実行することで解消できました。
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-blocking.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-clast-to-gimple.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-dependences.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-interchange.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-optimize-isl.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-poly.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-scop-detection.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-sese-to-poly.c
すぐに終わりますので、再度 make STANDALONE=y を実行します。私のところはこれで通りました。
Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain
このメッセージが出たら完了です。

なお、そのすぐ上にも書いてあるように、ツールを実行するためにパスを設定する必要があります。.bash_profileに追加しておきましょう。
export PATH=/Volumes/case-sensitive/esp-open-sdk/xtensa-lx106-elf/bin:$PATH



■esp-open-rtosの設定とサンプルの実行■

https://github.com/SuperHouse/esp-open-rtos

RTOS-SDKの大騒ぎと比べるとあっけないほど簡単です。まず、適当な作業用ディレクトリを作り、そこにesp-open-rtosをダウンロードします。
cd
mkdir esp
cd esp
git clone --recursive https://github.com/Superhouse/esp-open-rtos.git
cd esp-open-rtos

…はい、これだけです。

次に、自分のアプリをビルドする際のssidとpasswordを設定しておきます。1つのESP8266/ESP-WROOM-02だけで遊ぶには良いんですが、複数あるときはちょっと面倒ですが・・・include/ssid_config.hを開き、
#define WIFI_SSID "mywifissid"
#define WIFI_PASS "my secret password"
を自分のSSID/passwordに変更し、すぐ上にある#warningも消します。やらないとは思いますが、ここでcloneしたsdkに変更をしてpushする際に、自分のSSID/passwordを一緒にプッシュしないように気をつけなさいよ、というwarningです。

続いて、サンプルのビルドと実行ですが、そのまえにESP-WROOM-02をシリアルポートにつなぎ、PROGを押したままRESETを押し離し、PROGを離します。さらに2組のLEDと220-1kΩの抵抗を直列にして、GPIO 12とGPIO 13に接続します。次に、examples/blink_times/blink_timers.cを開き、
const int gpio_frc2 = 14;
const int gpio_frc2 = 13;
に変更します(他のGPIOを使う場合にはそれに合わせて変更してください)。

あとは、

make flash -j4 -C examples/blink_timers ESPPORT=/dev/<usbシリアルのポート>
を実行すれば、ビルドの後、自動的にESPに書き込まれ、二個のLEDが1/5秒周期と2秒周期で点滅します。ソースを見ればわかりますが、2個のLEDはそれぞれ別々のスレッドとして動作しています。

お疲れ様でした。ソースをXcodeなどのエディタで開いてしまえば、ビルド&ダウンロードはコマンド一発(ターミナルでは上向き↓を押してENTERを押すだけ)なので、Arduino IDEで使う場合とそう変わりはありません。これで本格的なマルチスレッドが手に入るのだから、苦労も報われるというものです。



■余談:ESP8266-RTOS-SDKをビルドする際のハマり■

ビルドはできたものの、サンプル中の「GPIO_OUTPUTが見つからない」というエラーを解消できずに挫折というか諦めました。ただ、そこまで行くのにかなり苦労したので、一応記録を残しておきます。

ESP8266_RTOS_SDK

まず、esp-open-sdkをセットアップするのはesp-open-rtosと同じです。

次に適当なディレクトリを作ってそのなかに移動してから
$git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
でSDKをダウンロードします。つぎに、gen_misc.shを開き、SDK_PATHは書いてあるとおりRTOSの場所、BIN_PATHはビルドしたバイナリを置く場所を指定します。

BIN_PATHに指定したディレクトリはビルド前に作っておかないとエラーになります。指定したディレクトリにバイナリが入るので、そこからesptool.pyなどを起動すると何かとラクですね。

さて、ビルドを始めると、
.out section `.irom0.text' will not fit in region `irom0_0_seg'
で止まってしまいます。

回避策はRTOS_SDK V1.3 do not fit my code any moreで見つけました。ESP8266_RTOS_SDK/ld/eagle.app.v6.ldってファイルを開き、MEMORYってブロックを記事の末尾にある
MEMORY
{
  dport0_0_seg :                        org = 0x3FF00000, len = 0x10
  dram0_0_seg :                         org = 0x3FFE8000, len = 0x14000
  iram1_0_seg :                         org = 0x40100000, len = 0x8000
  irom0_0_seg :                         org = 0x40210000, len = 0x7C000
}
で置き換えるとビルド通ります。お疲れ様でした。

2015年12月30日水曜日

ホームリフロー入門はサンハヤトのハンダクリームに限るっ


■追記2018-03-22■

これはあまり初期費用をかけないで表面実装部品をきれいに実装しよう!という方向けの記事です。その後、0.5mmピッチのICやコネクタを扱うようになり作る枚数も多くなったので、ステンシルプリンターとリフロー炉を導入しました。

ただ、「1mm以上の部品をさくっと実装して試してみたい」というような状況では、今でもサンハヤトのシリンジ入りハンダクリームを愛用しています。50gぐらい入ったボトル欲しいです>サンハヤトさん

■ホームリフロー■

いきなりアフィリでも狙ってんの?ってタイトルで恐縮ですが、ホームリフローを始めて18ヶ月にして初めて購入したサンハヤト「表面実装部品取付キット SMX-21」を使ってみました。

最短時間で不良ゼロ

でした。マチ針を使って「うまく塗れない」と言っていたあの日。マンガ「ハルロック」から得た知識でマイナスドライバーを使ってうまく塗れるようになって歩留まり向上したあの時。そして購入後18ヶ月を経過してさすがに品質低下してはんだボールだらけになり「ダメだこりゃ」と気付いた朝。ついにさようならです。

白い箱の中身


■注意事項■

箱を開けると「表面実装部品取り付けキット 特殊クリームハンダをお使いになるまえに」という注意書きが入ってます(フラック成分が固まってピストンが動きにくくなっていることがある云々)。私のはそれほどではないものの少し固くなっていたので、記載通りの処置をして問題なく使えました。とはいえ、最初使う時にはどのぐらいの力で押したら出てくるのかわからないので、ティッシュなどを用意するか比較的面積の広いパッドを標的にするのが良いかと思います。

クリームハンダは冷蔵庫で保存する必要があります。作業の1-2時間前に冷蔵庫から出しておきましょう。ただ、室温に戻ったとはいえ手の温度よりは冷えてます。冷えたものを暖めると当然熱膨張します。そのため、ふと気が付くと5mmぐらいハンダが出ていることがあるので、作業は手早く行い中断する場合にはティッシュなどの上に置きましょう。ただ瓶に入っているものと違い、瓶からスプーンですくい取るという作業がないので、中断せずにずっと拡大鏡の視野の中で作業し続けることができると思います。

あと念のためですが、キットには接着剤が付属しています。これでチップを固定するとハンダ付け作業が楽になるのですが・・・この接着剤はリフローには対応していません。あくまで手ハンダ用の接着剤なのでお間違えなく。

■塗布■

もう簡単です。拡大鏡をみながら注射器でプチプチと粘り気のある灰色のクリームを置いていくだけです。クリームはかなり粘り気が強くパッドに触れるだけで付着してくれるのでサクサク進みます。ESP-WROOM-02は底面に接点があるのでブリッジしないか心配になったのですが、パッドを無視して一列にブチューっと流し込んだだけです。ただ、チップを押し付けると表面張力が悪い方に作用してしまうと思い、そっと乗せるだけにしました。溶けた時にレジストがハンダをはじいてくれるはず。いずれにせよブリッジのリスクは高くなるので、積極的にはオススメはしません。「一列なおもて動作す。いわんや1パッドごとに置いておや」って感じ(違

チップ部品に関しては、2012なら楽勝でハンダを置きにいけます。

というわけで塗り終わったのがこちらです。


率直に言って汚い。慣れてないからしょうがないねっ

ご覧のように、ちょっと多すぎですね・・・チップ抵抗などはたぶんこの半分ぐらいでいいかと思います。拡大鏡で見ながら作業していると立体感がなくてどのぐらい盛っているのかわからないのと、ハンダのノリがいいのでついつい多めに出してしまいました・・・。なお、写真のタイムスタンプによれば、開封写真の最後〜塗布完了写真の最初まで約15分でした。前回マイナスドライバーで同じ基板に塗った時には30分程度かかっていたと思うので、大幅な時間短縮です。

さて、部品を置いていきます。アル中気味の私ですが、チップ部品を置くときでも手が震えないのでまだ大丈夫かなと安心する一時です。


もうはみ出しまくりだし、ESPの下など本当に不安になってしまう状態ですが、ともかくやってみます。

リフロー工程は

  1. ホットプレートにフタをして150度ぐらいに温めておく
  2. 基板をそっと乗せて、1-2分ほど余熱する。この時、温度を確認するために蓋を開けなければいけないですが、温度はそれほどシビアに考えなくても良いと思います。1-2分と幅がありますが、余熱することが目的なので基板表面が140-150度ぐらいになったらOKではないかと。
  3. 加熱開始、ホットプレートの表面が250度を越えないように注意しつつ、じっと見ていると基板表面が180度を超えたぐらいのところでハンダがキラッと溶けます。そのままホットプレートの温度を保ち、基板表面が210-220度ぐらいになったところで加熱をやめます。
  4. あとは全力でうちわ等で扇いで冷まします。基板表面が150度ぐらいまで冷えればもう触れたり落としても部品が動いたりすることはないので、ピンセットでステンレス流し台などに置いて冷まします。


…あ、リフロー完了直後の写真がない。



というわけで、スイッチやピンソケットなどてハンダ部品取り付け後の写真しかありませんが、こんな感じに仕上がりました。R10のあたりはクリームハンダが盛大にはみ出していたのですが、大きなはんだボールが2個あっただけで、フラックスクリーナーで簡単に除去できました。抵抗などかなりの大盛りですね。ESPについては「ここは少し多いな」というところ(下の写真左下端)は大盛りになっていますが、それ以外のところはきれいに溶け込んでいます。

さて、あとはチップの下でショートしていないかを通電前にテスターで確認をします。
  • VinとGnd、3v3とGnd、Vinと3v3間がショートしていないか
  • ESPの全ピンの接続とブリッジ確認
    • テスターでパッドとその端子が導通しているかを確認
    • 隣のピンとショートしていないかを確認
  • 抵抗、コンデンサ、LEDなどが正しい値を示しているか確認
    • 回路によっては必ずしも表示値と同じにならないので、他の部品との並直列などに考慮する必要はあります。

なお、電源の入力側と出力側の抵抗値を測って記録しておくと、次に同じものを作るときの参考になります。

冒頭書いた通り、ハンダ不良ゼロで一発で動きました。いえー。

■ハンダをしまうときのtips■

シリンジを少し引いてからジップ袋にしまいましょう。発生するガスや熱膨張に起因するキャップの内側にハンダクリームが漏れて固まる現象を軽減できます(と経験者は語るorz)。でもシリンジ引くと空気を吸って酸化が早まるような気もしますし…どっちが優先するかは今後の課題とさせていただきます。

追記(2016-01-31):注射針(ニードル)は、使った後1-2週間で詰まりますね。試しに交換しないで置いたら、2週間後は固いけど少し水っぽい、4週間たつと渾身の力を込めるとごく少量出てくるレベルで、まったく使えません。2週間後に水っぽくなったのは、固まりかけたものがフィルタみたいな状態になり、フラックスだけがにじみ出てきてしまったせいだと思います。

注射針はキットには5本しか入っていないし少し太いかなと思うので、ebay.comなどで安い工作用の注射針をまとめて買っておくと便利です(送料無料で500円ぐらい)。
SMT SMD PCB Solder Paste Adhesive Glue Liquid Dispenser+Dispensing Needle(50pcs)

5本ずつ10種類も入っているので、細すぎるのと太すぎるのが余ってしまうのが悩みです。国内だとインクジェットプリンタのインク入れ替え用に売られているものが入手しやすいようです。

いずれにしても、使い終わったら注射針をつけたままにしておいて、その次に使用するときにはまず針を変えてから作業するのが良いです。ご参考まで。

2015年12月29日火曜日

ESPにつないだRGB LEDをブラウザから制御する


■WiFi制御Lチカ■

ESPからサーバへデータを送信するのは何度かやったのですが、そういえばブラウザなどからESPを制御する、というのはやっていなかったので試してみました。

上の動画では、

  1. http://server/?w=4
  2. http://server/?r=1023&g=1023&b=1023
  3. http://server/?r=1023&g=0&b=0
  4. http://server/?r=0&g=1023
  5. http://server/?w
  6. http://server/?r=0&g=0&b=1023

の順番で操作しています。1.明滅指定、2.全色全点灯、3.青のみ明滅、4.緑のみ明滅、5. 明滅をストップ、6.青のみ点灯、という制御です。

こういうのをゼロから作るのはシンドいので、まず土台になりそうなプログラムをESP8266サンプルの中から探すと「HelloServer」というのが見つかりました。

これは、ブラウザから「/」または「/inline」でアクセスするとそれぞれ異なるメッセージが返ってきて、それ以外だとnot foundとともにargが表示される、というものです。必要なのはパスとargなので、これを使います。

■仕様と解説■

単にLEDを点滅させるだけじゃつまらないので、

  • RGB LEDを接続する
  • 各色ごとに明るさを変える r=100&g=200&b=300 って感じで
  • w=<n>と指定するとn mSec×256周期で滑らかに明滅する。ただしその時に設定されている各色の値がピークの明るさになる。

って仕様にしてみました。明るさを調節するにはanalogWriteでPWMを使い、それを滑らかに変化させるためにTickerを使います。

analogWriteは指定したGPIOに対して約500hzのPWM出力をします。値として0-1023を指定することができますが、値/1023の比率でonになっている時間が長くなります。0を指定すればずっとoff、512なら約50%、1023ならonのまま、ってことです。

Tickerは指定した秒数ごとに指定した関数を呼び出してくれます。attachで有効になり、detachで無効になります。今回のプログラムではsetupであらかじめサインカーブを描くテーブルisinを作っておき、設定したミリ秒数毎にテーブルの値を出力することで滑らかに明るさを変化しています。実際にその処理をおこなっているのはwaveHandlerです。waveHandlerではwaveCountで示されるisinの値を各色ごとの直近の明るさ比率(gRGB)に補正して、RGBごとに位相を120度ずつずらして(i*MaxSinTable/3)出力しています。一個出力したらwaveCountに1を足して次の値を準備します。

ブラウザからのコマンドを受け付けるのはhandleRootです。最初の例で示したように引数は同時に複数指定することができます。何個引数があるかはserver.args()で知ることができるので、これでforループを回します。そして、「引数名=値」の形式の引数名に相当するargName(i)の最初の1文字だけを取り出し、値をarg(i)から取り出します。そして引数名として指定されたのがr, g, bならばそれぞれの明るさをセットし、wならば値をミリ秒単位の割り込み周期としてattachかdetachを実行します。wはトグル動作つまり呼ばれるごとにon/offを切り替えるので、tickerAttachedというフラグを用意して切り替えます。

サーバのルートが呼ばれたらhandleRootを呼び出すということは、setup()の中で
server.on("/", handleRoot);
と指定しています。

…楽だわー。Play! Framework並にラクだわー(すいません、仕事でstruts2などという化石の干物を腐らせたようなライブラリを相手にしているので、つい愚痴が)

なお、handleNotFoundはサンプルのままです。ブラウザから例えば
http:<server>/foo?tare=panda
と呼び出すと、画面上には
File Not Found

URI: /foo
Method: GET
Arguments: 1
 tare: panda

という表示が返ってきてソースと見比べながら引数などをどういう具合いに扱われるかがよくわかります。

また、setup()では
  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });
という記述もあります。この [ ]( ) { } は無名の関数で、別のところにhandler関数を書くかわりにここで簡単な処理をチャッチャと記述してしまうことができます。サンプルのように単純なテキストメッセージを返すならこれで十分ですね。

■ハードウェア■

素のESP-WROOM-02は配線が面倒くさいので、今回は自家製のESP基板を使いました。FTDIとRGB LEDを接続するだけなので素晴らしく簡単です。電源にも良い部品を使っているので動作も安定しています(だれも褒めてくれないので自分だけは自分に優しくしよう)。



ESPでのお約束なプルダウン / プルアップ抵抗などの他には、RGB LEDを接続するだけです。

RGB LEDは秋月の「RGBフルカラーLED 5mm4本足 OSTA5131」です。BlueとGreenのLEDは3.6v以上の電圧かけないと光らないのが建前なんですが、実際には3.3vでも結構明るく点灯しちゃうんですよね。なお、GPIOと直結するのはまずいので、220オームの抵抗を直列に入れてます。また、このRGB LEDはカソードコモンといってマイナスにつなぐ側が共通になっています。GNDと接続してください。その辺、ブレッドボードでつくると妙にでかくなってしまうので、aitendoのユニバーサル基板で作りました。
ああハンダ付けは楽しいw


■はまりどころ■

今回はなかった、と言いたかったんですが、実は解決できていない問題が1つ。このプログラムを起動して r=200&g=200&b=200&w=8 と暗め and ゆっくり目で動かしていると時々「パッ」と明るくなります。WiFiに関する機能を取り除いても起こりますが、明滅させないでいると起こりません。

明滅時にはanalogWrite命令で頻繁にPWMの出力幅を変えているのですが、実行のタイミングが悪いとHIGHがしばらく続いてしまうのではないかと思います。同じような現象はmbed / LPC1114FN28でも経験していて、この時はPWMの周波数を高くすることで回避できたのですが、Arduino IDE環境ではPWMの周波数を簡単には変更できないのでさてどーしたもんかしら。

■ソース■

というわけで、ソースです。

2015年12月27日日曜日

クリームハンダの寿命

リフロー用のハンダ、クリームハンダには寿命があります。微細なハンダ粒とフラックスからできているので、フラックスの影響でハンダが酸化したりフラックス自体の活性が低下するのが原因だそうで、物によりますが大体数ヶ月の消費期限が設定されています。

さて、我が家のクリームハンダ、買ってから18か月が経過しました。

さすがにダメな仕上がりです。



何かよくない微生物でも増殖しちゃったんじゃないか?というレベルでタチの悪そうなハンダボールが多発していて、買ってきた頃と比較すると明らかに状態が悪化しています。何より、今回の基板はリフローしただけでは動かず、溶剤で基板を洗ってハンダボールを除去した後ハンダゴテで補修してようやく動きました。リフローした意味がないw

徐々に悪化したのであまり気にしていなかったのですが、振り返ってみると健全に使えたのは購入後半年ぐらいだったかなと思います。

安いものならebayで送料無料の数百円(ビンに入ったペースト)から、高品質だけど高いサンハヤト製品でも1300円(注射針なしのシリンジ入りハンダのみ)〜3000円(ハンダ入りシリンジ、注射針、吸取り網、固定用接着剤などのセット)で買えるものなので、今後は3-6か月ぐらいで新しいのに交換していこうと思います。

なお、サンハヤトの「表面実装部品取り付けキット SMX-21(共晶ハンダ) / SMX-51(鉛フリー)」「特殊クリームハンダ SMX-H05(共晶ハンダ) / SMX-B05(鉛フリー)」は、門田無線さんで買うと便利です。通販ならクール宅急便で届きますし、あらかじめ連絡して代金を振り込めば取り寄せして店頭で入手することもできます(消費期限のある商品なので、お店にご迷惑をおかけしないようにしましょう)。

廃棄方法はお住いの自治体の指定に従ってください。

2015年12月26日土曜日

ElecrowにPCB Assemblyを頼んでみた


基板だけなら今までにも何度かElecrowに発注したことあるのですが、今度は部品実装まで頼んでみました。

大まかな手順は以下の通り。
  1. 何はともあれ回路・基板を設計する
  2. PCB Assembly注文ページのリンクから、まず先方に連絡を入れる。
  3. 担当者がアサインされてメールが届くので、その指示に従い、ガーバー、部品リストなどを送って見積もりを出してもらう。部品リスト(BOM)は、以下のように分けて記載します。記入例はElecrowパーツリストライブラリのExcelファイルに同梱(別シート)されています。
    • Elecrowの部品リストに掲載されているもの
    • Digi-key / Mouserなどから入手可能なもの
    • 日本から送るもの
  4. 先方から見積もりが届く。今回、10個,50個,100個で見積もってもらいました。
  5. OKなら、PCB Assemblyのページから支払いをする。PCB Assemblyは単価$1なので、金額分の数量($100なら100個、分かりやすい)を注文する。
  6. 日本から送る部品があるならば、とっとと送る。
  7. 到着を待つ
こんな感じです。最初に連絡を入れてから1日かかりませんでした。注文には最低数量の制限はありません。また、パーツを基板の上に乗せるためのparts mappingを用意する方法がわからなかったので質問してみたのですが、特に何も言われませんでした。

今回お願いしたのは5x5cmほどの両面基板10枚、主要なパーツは日本から送り、RCとLEDを先方のパーツリストから選んで全部ひっくるめて$80でした。とても安いです。

さて、秋月で部品を買ってこなくちゃ。届いたら、また報告します。

■追記(12/30)■

中国への部品発送にはEMSを使いました。通常の発送伝票の他にInvoiceの記入が必要です。なおシンセンへの送料は秋月箱300g以下で900円でした。ご参考まで。

■追記(2016年)■

10日ほどで届きました! 仕上がりは大変キレイです。プリントの掠れもズレもなく、ハンダは輝き1つずつ静電気防止袋に収まって届きました。

で、その後何回か注文しましたが、シルク印刷については当たり外れがあるようです。

グリーンのレジスト+1.6mm厚については、今まで外れたことがありません。しかし、それ以外の色については、ズレたり掠れたりすることがあります。Elecrowは緑以外を指定しても追加料金を取られないのですが、やはり緑1.6mmが一番安定しているかもしれません。

赤や1.6mm以外の基板を指定する場合には、少し割高になりますがpremier PCBを指定することができます。割高といっても100枚作って20% upって感じです。premierだと24milの文字でも潰れずにプリントされます。

あと、ガーバーとBOM(パーツリスト)はくれぐれも正確に。間違えていた場合でも先方から「これはどうなってんの?」と問い合わせが来ることはなく、そのまま生産されてしまいます。

なので、初めての場合はまず最初に少量生産してもらって様子を見る方が安全です。例えば基板を100枚注文して部品を100個発送しておき、「最初に10個だけ作って日本に送ってくれ。よければ残りの90個も生産」というオーダーも可能です(最初に基板100枚分と製造費10セット分を支払う。OKなら90セット分の製造費を支払う)。もちろん、その場合の製造手数料($10)と送料($15〜)は2回分になりますが、そこは部品をパーにするリスクと天秤にかけてご検討ください。

そんなこんなで、premier PCB + PCB Assemblyで注文したモジュール、スイッチサイエンス様から絶賛発売中です :-)


2015年12月23日水曜日

Energia最新版でI2Cが動かない



Energiaの最新版Energia 0101E0017(と一つ前のEnergia 0101E0016)では、MSP430G2553にてI2Cがうまく動いてくれません。

厳密に信号レベルで見たわけではないのですが、他のデバイスあるいはEnergia 0101E0015で動いていたライブラリ等が動作しません。

回避方法は、とりあえずEnergia 0101E0015に戻せば動きます。はい。

・・・これで休日の貴重な2時間を潰してしまったじゃないかorz

I2C of MSP430G2553 is not working on Energia 0101E0016 and 0101E0017. if you got same problem, please install Energia 0101E0015.

2015年11月15日日曜日

Solidarite


人は愚かだ。

しかし、英知は何物も乗り越えることができる。


mbed, LPC1114FN28使用。ライブラリはJacob Bramley氏のPixelArrayを使用しました。

Thanks, Jacob!

このライブラリはBurstSPIを利用しています。SPI/MOSI端子を出力ピンとして使用し、WS2811/2812のDin端子と接続してください。Din信号は周波数特性に敏感なので、なるべく配線を短くしてつなぎます。誤動作するとLED全点灯側に振れますので、電源がヤバいです。配線を長くしなくてはいけない場合は両端にSN751768などを入れてRS485信号に変換し、ツイステッドペアのシールド線で配線すれば少し安心だと思います。

今日の秋月:NchMOSFET 2SK4033 (60V5A) (5個入)

(秋月のサイトから)

Nch MOSFET 2SK4033、本当に今のMOSFETはVth低くてもRds小さくてスゴいですね(データシートから転記)

  • Vdss 60V
  • Vgss ±20V
  • Rds 0.07Ω
  • Id 5A
  • Pd 20W
  • Ciss 730pF
  • Coss 95pF
  • Crss 60pF

Arduinoはもちろん、mbedからでも十分スイッチできます。電子工作の定番MOSFETの2N7000とは桁が違う(秋月のサイトから引用)

  • VDSS 60V
  • VGSS ±20V
  • RDS(ON) 標準1.8Ω 最大5.1Ω(@VGS=4。5V)
  • ID 200mA
  • PD 400mW
  • Ciss 標準20pF 最大50pF
  • Coss 標準11pF 最大25pF
  • Crss 標準4pF 最大5pF


値段もあまり変わらないし、もう2SC1815や2N7000は買わなくて良いんじゃね?と思うくらいなのですが…2SK4033の方が入力容量がデカいので、マイコン直結だと高速でスイッチングするのは厳しいですね。

ところで、表面実装部品を直接ピンヘッダにハンダ付けして使うのがマイブーム(笑)なのですが、2SK4033は表面実装だけど端子間隔が2.54mmなのでピンヘッダに直接ハンダ付けするのが楽だし、そうすれば普通に使える。

よし何個か買って置こうか…と思ったのですが。

電気的特性の同じ2SK4017↓を買えばいいんだよな、と直前に気づきましたw

NchパワーMOSFET 2SK4017(Q) (60V5A)

2015年11月14日土曜日

今日の秋月:DS1307 I2Cリアルタイムクロックモジュール(RTC)

(秋月のサイトより)

サインスマートのI2C接続RTCモジュール、750円。

RTCのDS1307と32kbitシリアルEEPROM 24C32と電池ホルダーを一つにまとめたモジュール。5V版。

自分でデジタル時計を作る時にはDIP版のDS1307+をよく使います。外付けなしで動いて値段が手頃でI2Cの扱いも簡単、何よりバックアップ電源端子が別になっているのでリチウム一次電池を直結するだけでバックアップできて便利なんですよね。このモジュールには充電回路もついているのでどっちにしろ気にしなくて良いですが。

1307に限らないですが、RTCは通電当初はあんまり精度が良くなくて「まぁ…値段相応かな」と思うんですが、数日経つと普通のクォーツ程度の精度に落ち着いてきます。

あ、今気づいたけど、このモジュールって温度センサーDS18B20用のパターンもついてるんですね。ただ、DS18B20は別売り。I2Cとは別に1 wireで接続する必要があるので、温度計が必要なら少し高いけど湿度も測れるHDC1000を使った方が良いんじゃないかなー。熱慣性小さくて好き。

今日の秋月:液晶表示ミニ周波数カウンター(1MHz~500MHz)

(秋月のサイトより)

サインスマート製で006P電池と同じようなサイズの周波数カウンター、2750円。

私が電子工作に興味をもった小学生の頃(うわ40年前だ)、テスターは持っていましたが、周波数カウンターは超憧れの計測器でした。当時いくらぐらいだったっけなぁ。10万とか30万とか、とにかく小学生には雲の上というか銀河系の外レベルの話でした。それも一番安いやつは30Mhzが上限。

これは2750円で500Mhzまで計れちゃうんですね(遠い目

// 「今日の」には多少の誤差を含みますw