2016年8月22日月曜日
Eagle v7からステンシル用DXFを出力する方法
スイッチサイエンスさんのスクリプトを使う方法が一般的に広まっていると思うのですが、私のところのEagleがv7なせいか同スクリプトを走らせても有効なステンシルデータが出力されません。
ふと思い立って、brd画面に表示されているレイヤをDimensionとtCreamだけにしてからFileメニュー>Export>DXFを実行してみたら、正しいDXFが出力されました。
その際、Use Wire WidthsとFill areasのチェックを外し、単位をmmからinchに切り替えるといい感じにできました(mmのままだと、何故か幅2mもある巨大なデータが出力されました)。
近日中に地元のfabスタジオで試してみます。
2016年8月17日水曜日
ESP+400円あれば10分で作れる睡眠計
ただし送料は別ですw
これは毎度おなじみのPIRセンサー、赤外線を発する物体が動いたことを検出してくれるセンサーです。主に防犯用途で使われるものですが、安い割には高感度なので鳩の検出や来客の検出など便利に使えます。なお、このHC-SR501は安いんですが、動きを検出したあと信号を数秒〜数分間引き伸ばして出力する仕様です。侵入者を検知してランプを点灯するためのものなので。そういう意味ではSE-10というセンサーの方が正確に把握できるんですが、高いのと5V電源では正常に動作しないので、今回は見送ります。
今回はこの400円のセンサーと無料のThingSpeak.comを使って10分で睡眠記録デバイスを作ってみます。
当然ESP-WROOM-02のモジュールも必要です。それにはぜひ倉橋屋Board1をご検討ください:-)
…他にオス - メスのジャンパワイヤとかブレッドボードが必要ですが、それはさておき。
まず、PIRとESP-WROOM-02を接続します。PIRの電極は、ドームを上、ピンを手前にした状態で左からGnd, Signal, Vccです。GndとESPのGnd、SignalとIO12、Vccと電源(5v以上…Board1をUSBにつないでいる場合はVin、ESPrなどではVOUT)を接続します。Signal出力は約3vなので、ESPと直結しても大丈夫です。なお、PIRによってはもっと電圧の高いものやオープンコレクタのものもあるので、その場合は仕様に従ってください(コメント欄に書いていただければ、わかる範囲でお答えします)。
接続はこれでおしまいです。HC-SR501はボリュームが2つ付いていて、それぞれ感度調整と持続時間調整です。感度はその通り感度で時計回りに回すほど敏感になります。持続時間は一度動きを検出した時にその後何秒出力HIGHを維持するかを設定できます。睡眠計として使うのであれば、感度は最低(時計回り目一杯)+持続時間最小(時計回り目一杯)で良いと思います。あとジャンパが一箇所ありますが、基板の端の方にするとHIGHになっているときに次の動きを検出してもLOWになるタイミングは延長されませんが、基板端から離れた方に挿すと動きを検出した時点でHIGHが延長されます。これ、どっちが良いでしょうね。
ThingSpeak.comのアカウントを登録します。ThingSpeak.comは「チャンネル」という単位で送信されてくるデータを管理します。一つのチャンネルは最大8個までのデータ列を記録することができます。New Channelで新しいチャンネルを登録し、Nameは適当に、Field1に「movement」というタイトルを付けチェックします。下の方の「Save Channel」をクリックすればOKです。次にAPI Keysというタブをクリックし、「Write API Key」の値をコピーしておきます。
あとは、以下のソースをArduino IDEで開き、お使いのWiFiのSSIDとパスワード、それからさっきコピーしたWrite API KeyをapiKeyにセットすればOKです。
一晩走らせてみた結果がこちら。
そのままグラフにすると細かすぎてわからないので10分ごとの平均を480分表示させています。SE-10で取得したデータほどすっきり分離されないですが、xx時にベッドに入り、xx頃入眠、xxにトイレに起きてxx時起床というのが(言われれば)おわかりいただけるかと思います。
私は初老なので睡眠導入剤などを使っていますが、とりあえずこういうグラフがあれば「どの食事/運動/薬/サプリが有効なのか」を客観的に知ることができるかなー…と思っています。昼間部長とメールバトルした日などはドキドキして眠れないので、なかなか客観的な評価は難しいのですが(笑)。
小心者指数を計れるデバイスが出たら買います。買うべきです。ま、買っても役に立ちませんががが。
![]() |
秋月電子通商のサイトから |
これは毎度おなじみのPIRセンサー、赤外線を発する物体が動いたことを検出してくれるセンサーです。主に防犯用途で使われるものですが、安い割には高感度なので鳩の検出や来客の検出など便利に使えます。なお、このHC-SR501は安いんですが、動きを検出したあと信号を数秒〜数分間引き伸ばして出力する仕様です。侵入者を検知してランプを点灯するためのものなので。そういう意味ではSE-10というセンサーの方が正確に把握できるんですが、高いのと5V電源では正常に動作しないので、今回は見送ります。
今回はこの400円のセンサーと無料のThingSpeak.comを使って10分で睡眠記録デバイスを作ってみます。
当然ESP-WROOM-02のモジュールも必要です。それにはぜひ倉橋屋Board1をご検討ください:-)
…他にオス - メスのジャンパワイヤとかブレッドボードが必要ですが、それはさておき。
まず、PIRとESP-WROOM-02を接続します。PIRの電極は、ドームを上、ピンを手前にした状態で左からGnd, Signal, Vccです。GndとESPのGnd、SignalとIO12、Vccと電源(5v以上…Board1をUSBにつないでいる場合はVin、ESPrなどではVOUT)を接続します。Signal出力は約3vなので、ESPと直結しても大丈夫です。なお、PIRによってはもっと電圧の高いものやオープンコレクタのものもあるので、その場合は仕様に従ってください(コメント欄に書いていただければ、わかる範囲でお答えします)。
接続はこれでおしまいです。HC-SR501はボリュームが2つ付いていて、それぞれ感度調整と持続時間調整です。感度はその通り感度で時計回りに回すほど敏感になります。持続時間は一度動きを検出した時にその後何秒出力HIGHを維持するかを設定できます。睡眠計として使うのであれば、感度は最低(時計回り目一杯)+持続時間最小(時計回り目一杯)で良いと思います。あとジャンパが一箇所ありますが、基板の端の方にするとHIGHになっているときに次の動きを検出してもLOWになるタイミングは延長されませんが、基板端から離れた方に挿すと動きを検出した時点でHIGHが延長されます。これ、どっちが良いでしょうね。
ThingSpeak.comのアカウントを登録します。ThingSpeak.comは「チャンネル」という単位で送信されてくるデータを管理します。一つのチャンネルは最大8個までのデータ列を記録することができます。New Channelで新しいチャンネルを登録し、Nameは適当に、Field1に「movement」というタイトルを付けチェックします。下の方の「Save Channel」をクリックすればOKです。次にAPI Keysというタブをクリックし、「Write API Key」の値をコピーしておきます。
あとは、以下のソースをArduino IDEで開き、お使いのWiFiのSSIDとパスワード、それからさっきコピーしたWrite API KeyをapiKeyにセットすればOKです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Sleep log by PIR by Koichi Kurahashi 2016-08-13 | |
// | |
// | |
// WiFi | |
#include <ESP8266WiFi.h> | |
#include <WiFiClient.h> | |
#include "../../private_ssid.h" | |
//const char *ssid = "*************"; | |
//const char *pass = "*************"; | |
//String apiKeyTest = "*************"; | |
WiFiClient client; | |
// | |
// 時間 | |
#include <Time.h> | |
#include <TimeLib.h> | |
int prevMinute = -1; // 分単位の処理をするためのフラグ | |
// | |
// PIR Sensor | |
// | |
const int kPIRSensor = 12; | |
volatile int pirCounter = 0; // volatileは最適化せずメモリに置いとけというコンパイラへの指示 | |
// 割り込みの中でアクセスする変数などに指定。 | |
// | |
// タイマー割り込み関連 | |
// | |
extern "C" { | |
#include "user_interface.h" | |
} | |
os_timer_t myTimer; | |
// | |
// Setup | |
// | |
void setup() { | |
// | |
// Serial | |
Serial.begin(115200); | |
// | |
// PIR | |
pinMode(kPIRSensor, INPUT); // PIR Sensorを入力モードで使う | |
prevMinute = -1; | |
// Interval Timer | |
os_timer_setfn(&myTimer, timerCountPIR, NULL); // myTimerを使い, 割り込みが起こったらtimerCountPIRを呼ぶ | |
os_timer_arm(&myTimer, 1000, true); // myTimerの割り込みは1000mSecごとに、繰り返し(true)起こす | |
// | |
// WiFi | |
// | |
// 接続&接続確認 | |
Serial.print("WiFi Connectiong"); | |
WiFi.begin(ssid, password); | |
} | |
// | |
// メインループ | |
// | |
void loop() { | |
// | |
// 1分ごとに処理 | |
if (prevMinute != minute()) { | |
if (prevMinute != -1) { // 最初の1回は飛ばす | |
// | |
// PIRの値を文字列に変換 | |
char pirBuf[10]; | |
itoa(pirCounter, pirBuf, 10); // air to pirBuffer, in Decimal | |
// 変換し終わったら素早くカウンタを0にリセット | |
pirCounter = 0; | |
// | |
// 人間の動きっぷりをシリアルへ出力 | |
Serial.print("Movement: "); | |
Serial.print(pirBuf); | |
Serial.println(" s/min"); | |
// Thing Speak | |
String postStr = "&field1=" + String(pirBuf); | |
sendToThingSpeak(postStr); | |
} | |
prevMinute = minute(); | |
} | |
delay(1000); | |
} | |
void sendToThingSpeak(String inPostStr) { | |
Serial.print("Connecting..."); | |
if (client.connect("184.106.153.149", 80)) { // api.thingspeak.com | |
Serial.print("Connected...."); | |
String postStr = apiKeyTest + inPostStr + "\r\n\r\n"; | |
client.print("POST /update HTTP/1.1\n"); | |
client.print("Host: api.thingspeak.com\n"); | |
client.print("Connection: close\n"); | |
client.print("X-THINGSPEAKAPIKEY: " + apiKeyTest + "\n"); | |
client.print("Content-Type: application/x-www-form-urlencoded\n"); | |
client.print("Content-Length: "); | |
client.print(postStr.length()); | |
client.print("\n\n"); | |
client.print(postStr); | |
Serial.println("posted."); | |
} | |
client.stop(); | |
} | |
// | |
// タイマー割り込みでPIRがHIGHならカウントアップ | |
// | |
void timerCountPIR(void *temp) { | |
if (digitalRead(kPIRSensor) == HIGH) { | |
pirCounter ++; | |
} | |
} |
![]() |
会社のIoT勉強会で使ったThinkSpeakを流用したのでArkの名前がw |
そのままグラフにすると細かすぎてわからないので10分ごとの平均を480分表示させています。SE-10で取得したデータほどすっきり分離されないですが、xx時にベッドに入り、xx頃入眠、xxにトイレに起きてxx時起床というのが(言われれば)おわかりいただけるかと思います。
私は初老なので睡眠導入剤などを使っていますが、とりあえずこういうグラフがあれば「どの食事/運動/薬/サプリが有効なのか」を客観的に知ることができるかなー…と思っています。昼間部長とメールバトルした日などはドキドキして眠れないので、なかなか客観的な評価は難しいのですが(笑)。
小心者指数を計れるデバイスが出たら買います。買うべきです。ま、買っても役に立ちませんががが。
2016年8月11日木曜日
Eagleライブラリで多角形のPADは無理?
■プリント基板設計は楽しいけれど■
部品のLibraryを探したり作るのが面倒なんですよね。今回もルネサスの妙に特性の良いパワーMOSFETを使ってみようと思ったのはいいですが、パッケージがヘン。なんすかHWSON-8って。
![]() |
仕様書より |
ってことでEagleで久しぶりに部品を作りましたが、今まで丸いスルーホールか四角いパッドしか使ったことがないので、単純にSMDを8個置いて、上のSMDと接するように放熱パッドをWidth=0のPolygonで作ってみました。
すると…Deviceとして回路図と結合しようとしたら上のパッド部分が接続できません…。正確な寸法をEagleの座標系に移して作るのは結構たいへんだったのにムダ手間かよorz
と思ったのですが、ぐぐったら、「polygonをsmdに変更する方法はないけど、tStopとtRestrict書いて重ねれば良いよ」というQ&Aが見つかりました。
ということで、こんな感じにコピーしてtStopとtCreamに変更し、tStopはWidthを0.127(mm)にして少し外に広げます(右下)。Widthを変更する前は全体がグレイで塗りつぶされた感じなのですが(右上)、いい感じにハッチングが入ります。creamはpadと同サイズなのでWidthは0のまま。
これを重ねあわせてできたのがコレ。純正SMDパッドの部分とPolygonのtStopとに段差ができてしまいましたが、まぁ良いやw
で、これを実際の回路に置いてみました。一応使えるのですが、上の放熱パッド部分がベタVとつながってくれません。
ので、結局、でっかいパッドをどーんと置くことにしました。
わお、シンプル。
で、最後にTextで「>NAME」「>VALUE」を追加。
これで何とか目的のパターンが出来上がりました。
のですが…このままだと表面張力に引っ張られて上にズレて行くような気がします。チップの仕様書で横に飛び出している箇所ってそれを防止するためにあるんじゃないだろうか。
ということで、SMDパッドを大雑把な形にして貼り付けました。ライブラリ上ではただ置いただけ。
出来上がったパターンを見ると、臙脂色の通りにマスクから銅箔が露出してクリームハンダが塗られるようです。これで「表面張力水泳」が止まってくれればいいのですが。
何だかんだで合計5時間くらい作業してたと思います。試行錯誤(右往左往ともいう)を除き、パッド置いておしまい、なら30分程度だと思うんですけど…ああしんどい(笑顔)。
なお、今回、このライブラリを作る際にはEagle Librariesで公開されていたP-ch MOSFETの回路図記号を使わせていただいたのですが、再配布に関するライセンス条件がわからないので今回はとりあえずパッケージだけ公開します。
2016年8月6日土曜日
超音波洗濯、その1
シャープのハンディ超音波洗濯機が話題になっているので、どこのご家庭にも有る超音波洗浄機で、ワイシャツの汚れの首輪に立ち向かってみました。
検体はワイシャツ。普段液体洗剤を直接塗って洗っても落ちない黄ばみが汚れです。超音波洗浄機はシチズンのSW1500、8年前に自転車のチェーン洗浄用に買ったものです。最近はもっぱらメガネ洗浄専用ですけどね…。
■今日の実験■
指定濃度に薄めた液体洗剤で試しました。洗浄槽に約500cの希釈洗剤を入れ、そこに襟をたたんでから筒状に丸めて突っ込みました。逆立ちしてるイメージです。5分後取り出してから通常通りの洗濯をしました。
■結果■
普段よりすこし白くなった気もしますが、黄ばみの皮脂汚れは依然残ってしまいました。
ただ、普通に洗うと灰色のホコリ線も薄っすらと残ったりするのですが、そっちは液体洗剤原液を塗ったのと同程度以上には綺麗になったので、効果はあるのかもしれません。
■次回■
濃厚な液体洗剤で試してみます。
それでダメなら、白いシャツなので「自転車用デグリーザー(脱脂洗浄剤)」を使った方が速いんじゃない?という気もしてきましたw
なお、濃厚洗浄液はスタッフがおいしくいただきましたその後、普通に洗濯で使いました。
■追記8/21■
シミに液体洗剤原液をつけてしばらく置いてから、約100倍程度の洗剤液で動作させてみましたが、普通に洗濯した場合と比べて差異はありませんでした。うーむ。なお、濃厚洗浄液は
登録:
投稿 (Atom)