2018年4月29日日曜日

0603のMLCCを手ハンダ

56歳会社員です。秋月で0603(mm)のMLCCが発売されたので買ってみました。


いやー…ホコリですね。顆粒ダシより細かいっす。

普段MLCCを手ハンダ付けする時には逆作用ピンセットを使うのですが、先端太すぎてまったくつかめません。最初の1個はピンセットで掴みそこねて見事に飛ばしてしまいました。さすがのDUMONTでもダメ。安いHOZANの精密ピンセットをルーターで研磨してかみ合わせを調整してから使いました。いやー、ルーターはいい買い物でした。今まで研いだりするのは大の苦手だったんですが、持っているだけで水平垂直に研磨できるので、少し荒い道具を使いやすいように仕上げることもできます。


基板は手元にあったaitendoの0.6mmピッチSOIC用。例によってサンハヤトのクリームはんだを使います。0.6mm間隔で2つクリームを盛るなんてのは無理なので、設置場所の両端を覆うように1mmぐらいのハンダ山を作りました。しまった写真取り忘れた。

ルーペはヘッドルーペではなくアームルーペ(TERASAKI)を使いました。ハンダゴテはHAKKO FX-100です。

基板をマスキングテープ(3M)で固定してから、左手にピンセット、右手にハンダゴテ。ルーペでもほぼ見えませんw MLCCをクリーム山の中央付近で保持します。コテを基板に当て、少しずつクリームに近づけて行って、クリームが溶けたところでコテを離す。これを4方向から繰り返しました。

最後にUSB顕微鏡下ではみだしたところを修正したのですが…コテ太いw



洗浄したのがこちらです。容量を測定したら70nF程度(MLCCは直流では容量が減ります…秋月のWeb参照)で、損傷せずショートもせずに取り付けできました。


電子工作に復帰して初めて表面実装部品(2012)をいじった時は「わしら年寄りはどうすればええんじゃ…」と思ったもんですが、最近は「2012でけーw」とか言ってるんですから、人間は慣れるもんですね(しみじみ)。

2018年4月22日日曜日

セミナーの進行を止める老人、それが私

Fusion 360のセミナーに参加しました。良いセミナーでした(もう1日あるけど)。Fusion 360の操作感や3Dモデルを作っていく流れを習得できるのでみなさんもぜひ。操作も大事だけど流れはもっと大切です。

セミナーに参加するのは久しぶり。

こういう技術系ハンズオンセミナーでは、まず講師が操作をしながら説明をして、それから「では、一緒に操作してみましょう」という流れになる。

ただ、余裕をもって習いたいので、私は最初の説明を聞きながら操作をして「一緒に操作をしてみましょう」のところではメモなんかを書いていたもんでした。若い頃は。

ところが、今回、最初の操作で躓いた。自分が「ごく初歩的な操作で躓いて、セミナーの進行を止める年寄り」になってしまった。ショック。

何でだろうと思ったら、昔は操作しながらでも講師の説明が頭に入ってきたんですが、今は全然耳に入らない。「聞きながら操作」しているつもりがそうではなかった。

それに気づいてからは、ちゃんと講師の説明をガン見してから自分の操作をすることにして、なんとかついていけるようになったんですが(いや、3D CADのモード切り替えや選択方法の違いなどで戸惑うことはありましたが)…自分の老化にビックリです。

で、講師の説明を聞きながら周りを見ていると…毎回進行を止める人は、やっぱり講師の説明を見てないですね。たぶん御本人は、何で自分が操作をわからないのか、わかっていないんだと思います。

かつて自然にできたことができなくなっている、それは良くあることなんですが…できなくなっていることに気づかない、というのは怖いですね。

----

セミナー会場は南千住。遠いです。写真がないと寂しいので、ランチ写真貼っておきます。

ランチってか「やよい軒」ですけどね。かつてご飯を2杯3杯とおかわりしたもんですが、今は1杯でお腹いっぱい。


あと11:22に撮影した写真がこちらです。これで何度目だ。


2018年4月13日金曜日

ESP32+Mongoos OS、入れてみました。

まず、ESP-IDFが正しくインストールされている必要があります。

で、ホストMac/PCに環境を構築します。macの場合はターミナルに3行コピペするだけ。1分もかからず終了し、ブラウザにmongoose os環境が立ち上がります。

mongoose osは、ESP上で動くOS(FreeRTOSベース?)、JavaScriptランタイム、フラームワーク、それらと連携するMac/PC上で動くホストツールなどで構成されています。フレームワークはAWS, Google IoTなど各社クラウドサービスに対応していて、お手軽に使えます。

サーバとなっているツール部分がESPと通信しながら動いているので、ブラウザIDEなのにスタンドアローンアプリ形式のIDEと同様に使えます。例えば、こんなダイアログが出てくるので、ESP32 Dev-CモジュールをUSBに接続するとシリアルポートが選べます。選んだらSelectボタン。


次にプラットフォームと書き込むアプリを選んでFlash。書き込みが自動で始まります。書き込みが終わるとデモアプリ「demo-js」が起動して、じわじわとメッセージを流してきます。


このあとSet WiFiで使用場所でのSSIDとPasswordを設定してSetボタンを押せば接続完了。

楽だなー。ESP32用の開発ツールとして一番よく出来ているかも。

JavaScriptとC/C++も簡単に連携できるし、しばらく遊んでみます。ずっと保留したままになっているニキシー管時計、これで作ってみようかしらw

ESP32 + VisualStudio Code + PlatformIO

マカーだけどいろいろあってVisualStudio Codeを入れてESP-IDFを動かすことに。参考にしたのはこの辺。ありがとうございます。
Install the IDE PlatformIO extension for Visual Studio Code

Windows版VSCだとArudino IDEプラグインが使えるんですが、このプラグインはMacには出ていないようなので、PlatformIOを使います。AtomやSublimeでもPlatformIOは使えるんですが、どうもしっくりこない。

まずVisualStudio Code、Mac版のインストール。ダウンロードして解凍すると.appができるので /Application へコピーし、ダブルクリック。

PlatformIOのインストールは、表示>拡張機能メニューから platformio を探して選びます。


試しにプロジェクトを作ってみます。PlatformIOのHome(画面下コマンド行の家アイコン)をクリックし、New Projectをクリックします。

プロジェクト名を入力し、BoardのところでESP32と入力すると候補が出てきますので、無難にEspressif ESP32 Dev Moduleを選びます。FrameworkはESP-IDFを選び、Finishをクリックすると空のプロジェクトができます。


すると勝手に依存関係が解消されていきセットアップが完了します。PlatformIO偉い。

srcを右クリックして「新しいファイル」を選び、main.cを作ります。適当なコードを入力します。とりあえずesp-idfのexamplesにあるhello_world/main/hello_world_main.cの内容をコピーしました。

シリアルモニタのポートとボーレート設定は、platformio.iniに
monitor_port = /dev/cu.SLAB_USBtoUART
monitor_baud = 115200
を追加。ポートは設定しなくても聞いてきてくれるけど、まぁこっちの方が楽かと。

では、ESP32をUSBに接続し、ウィンドウ最下行の「→」ボタンでbuild&uploadします。最初のコンパイルが長い遅いのはお約束。なお、VSCを再起動する度に再コンパイルする仕様ですが、修正してコンパイルした時は対象ファイルだけコンパイルされます。

コンパイルが終わり、ESP32へのアップロードが始まります。

終わったらウィンドウ最下行の「Monitorアイコン(横向きのACプラグ)」をクリックするとmake monitorが起動します。

なお、シリアルポートを専有するので再度uploadするときにはmonitorを止めなければいけませんが、uploadボタンをクリックすると「monitorタスク止めますか?」と聞いてくれるので安心です。

Windowsは大嫌いですが、MSの開発ツールは嫌いではありません。VSCも良く出来ています。少なくともEclipseよりもサクサク動いてくれる、ような気がしますw 

少なくともArduino IDEよりもかなりマシに使えます(※個人の感想です)。

ただ、ESP-IDFとビルド方法が異なるので、ESP-IDFで作った既存プロジェクトを開くことはできません。開こうとするとplatformio.iniが無いって言われるので適当にコピーして入れて開いても、VSCからはビルドできません。

PlatformIOで作ったらプロジェクトならビルドできますが、標準ツールと違うビルドシステムにするのは少し抵抗があります。

とりあえず、VSC上でターミナルを開き、そこで make flash を実行すれば、ビルドしてくれるんですけども…違う…そこじゃない感が凄いです。

まぁサクサクで落ちないIDEってだけでも十分っす。あとArduinoプロジェクトに関しては、Arduino IDEよりぜんぜん良いですし。

2018年4月6日金曜日

動物の活動状態を記録する@ココナラ

動いた痕跡

うわわわわ

農業試験場の研究員の方からCoconalaにて「条件を変えたときに害虫の行動にどのような影響があるかを記録したい」というご相談をいただきました。

当初のご相談は「(フォトインタラプタを使用して)通路を遮る動きをカウントしたい」ということでしたが、ラズパイを用いた画像による動体検知を提案しました。

赤外線LED、IR Picamera、Raspberry Piだけという大変シンプルな構成です。起動すると指定秒数ごとに差分を求め、全画素のうち何%が変化したかを標準出力に書き出します。オプションとしてウィンドウに画像を表示するか画像ファイルを出力するか、を指定できるようにしました。

プログラムはPython + OpenCVで書きました。当初、よくある動体検知としてBackgroundSubtractorMOGとapplyを使うタイプで試していただいたのですが、結果は少し意図と違っていました。
虫ではなく坊主頭中年体型のわたくし
ということで「背景からどのぐらい変化したか」ではなく単純に前フレームと差分を求めるプログラムに変更しました。とはいえPython不慣れ+OpenCV初心者なので、こちらのコードを参考にさせていただきました。ありがとうございます。

冒頭の画像が演算結果です。害虫がケースの中で動いているところを捉えた画像と飼育環境の写真です。

依頼者の方からは、新しい知見も含めて期待以上の結果が得られたとのご報告をいただきました。日本の農業のために微力ながらお手伝いができて何よりです。

今回のように「こういう観察がしたい」というテーマがあればご相談ください。相談だけなら500円、実装についても公的な研究機関からの公益性のあるテーマであればできるだけお力になりたいと思っています。お気軽にどうぞ。

一応ソースです…間隔指定ではなくwait指定だ、とか、いろいろ突っ込みどころはあると思いますがpython初心者ということでご寛恕いただきたく存じますm(_ _)m

【追記4月11日】
公開当初のソースは背景との差分検知をするものでした。
フレーム間差分に書き換えました。

2018年4月2日月曜日

M5Stack、ちゃんとPDM音が出ますね

命令を見るとtone系なので「あれ、せっかくのスピーカーなのにビープだけ?」って思ったんですが、回路図を見るとGPIO25がアンプ入力につながってます。

ってことで、下記の通り初期化して

void set_16k_16() {
  i2s_set_pin(I2S_NUM, NULL);
  i2s_config_t i2s_config;
  i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_PDM);       // Only TX
  i2s_config.sample_rate = 16000;
  i2s_config.bits_per_sample = BITS_PER_SAMPLE;
  i2s_config.channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT;                //right channels
  //  i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;                //right left
  i2s_config.communication_format = I2S_COMM_FORMAT_PCM;
  i2s_config.dma_buf_count = 4;
  i2s_config.dma_buf_len =  1024;
  i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;                    //Interrupt level 1
  i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
}

これつかって PCMデータ(符号なし16ビット)を渡すと音声出ますね。

  i2s_write_bytes(I2S_NUM, (const char *)ching, sizeof(ching),   portMAX_DELAY);
  i2s_zero_dma_buffer(I2S_NUM);