2018年5月18日金曜日

C基板用アクリル板


秋月のユニバーサル基板はサイズごとに名前がついてシリーズ化されてます。

そのうち、C基板はサイズが手頃なので、よく使います。少し前に基板にフィットするサイズのアクリル板が発売されていたので、使ってみました。

バラックなのに、いい感じに見えますw



これは空気質(TVOC:総揮発性有機化合物)とCO2濃度センサーのCCS811と0.96インチOLEDをESP32 Dev Kitで制御しているものです。友達に頼まれて作りました。

CO2、締め切って眠り、起床一番での数値は4000ppmを越えていました。あまり風がないせいか換気してもせいぜい1000ppm程度。屋外に出ても同程度でした。その後風向きが変わって大気レベルに近い450ppmまで下がりました。

前にも書きましたけど…換気は大事っすね…。

あと、当たり前ですがガス排気筒の近くは恐ろしい値になりますw

2018年5月13日日曜日

LTEモジュールでえらい目に会った



■トラブル発生■

「SIM7500JE-B2BというLTEモジュールをマイコンと接続する基板作って」という依頼を受けて試作したのですが…いやー苦労しました。

触ったことがないモジュールなので、仕様書の推奨回路の通りで作ってみたのですが…動きません。Power Key信号を送ると起動するんですが、シリアルに"AT\r\n"を送ってもOKが帰ってきません。

SIM7500JEのロジック回路は1.8V、マイコンは5Vなのでレベルシフタが必要です。レベルシフタにはTIのTXB0108RGYRが推奨されていたので、5Vでも対応可能なことを確認した上で使用しました。

信号を見ると、SIM7500JEからのLOW出力が0.4Vぐらいあります。Vthとしては微妙ってか、TXB0108RGYR的にはNG。仕様書には入力側のVL/VHは書いてあるんですが、出力については書いてないんですよね…。

■対策1-トランジスタレベルシフト回路■

結局、SIM7500JEからの出力には、昔からあるトランジスタ1個の非反転レベルシフト回路で処理しました。Arduinoで動作確認OK。

…まぁ、これで終われば半日仕事だったんですが、この後、ちょっと特殊なマイコンを使ったら動作せず。

■対策2-トランジスタとインバーター■

結局、昔からあるトランジスタ1個の反転型レベルシフト回路で1.8 → 5.0vに変換してから、インバーターで反転しなおして、Arduinoでも特殊マイコンでもOKになりました。作業時間合計11時間…バイトなので残業代でませんw

■教訓■

  1. 仕様書にVL, VHなどのごく基本的な資料すら乗っていないチップは使わない。
  2. 推奨回路など寸毫たりとも信じてはならない。そもそも双方向のレベルシフト回路いらねえじゃん、って話。
  3. 「テストポイントを用意しておくかな…でも、こんな基本的な信号で問題は出ないだろう」という判断は甘い。常に甘い。試作は全ラインを引っ張り出すぐらいの勢いが必要。でないと以下のような苦労をします(笑)。

■作業風景■

プリント基板のTxラインをUSB顕微鏡で見ながらデザインナイフでカットして、同じく顕微鏡を見ながら0.5mmピッチのコネクタからスズメッキ線で引き出しました。USB顕微鏡を買ったばかりの頃に試してみたらぜんぜんうまく出来なくて諦めていたのですが、最近背に腹は代えられぬ事態が多く、使っていたら馴れてきました。

やっぱり人間必要に迫られると適応するものです。

コツは、
  1. USB顕微鏡だと立体感がなくて上下方向の動きはよくわからないので…まず裸眼で基板近くまでコテ先やカッターを移動し、それから拡大された画面を見ながら作業する。
  2. USB顕微鏡が動かないように机にしっかり固定する
  3. 顕微鏡のステージに小指を置いて作業する
って感じでしょうか。0603(mm)のチップコンデンサなどで練習するとよろしいです。

また、写真のようなハンダ付けでは、
  1. コテがあたったら溶けてしまいそうな部品にカプトンテープを貼って保護する。その際、テープをピッタリと密着させるのではなく、熱が伝わらないように隙間を開けつつ何枚か貼ること。カプトンテープは熱伝導率が高いのでぴったり貼ると中の物を保護できません。
  2. マスキングテープで誤差0.5mmぐらいの位置にスズメッキ線を仮止めする。基板のパターンとマスクに段差があるので、この段階でピッタリの位置に置くのは難しいです。なので、あくまで仮止め。 
  3. USB顕微鏡をみながらピンセットで正しい位置に完全に合わせてから、マスキングテープをしっかり貼る。最後の0.1mm以下の調整は、スズメッキ線に直接さわるよりスズメッキ線の横からマスキングテープを押さえて調整する方が良いです。 
  4. USB顕微鏡をみながらハンダ付け箇所にクリームハンダを塗る。普段使っているシリンジだと針が太い/細い針だとクリームが出てこないので、マイナスのマイクロドライバーの先にちょこっとつけてから、左にドライバー、右手にピンセットを持って、蟹が食事をするような気分で目的の箇所にハンダを置きます。 
  5. あとはハンダゴテを目的の箇所に当てるだけ 
です。

【追記】カプトンテープはぴったり貼らないでふわっと隙間をもたせて何枚か貼ると良いとのアドバイスをいただき、記事に反映させました。ご教示いただきありがとうございますm(_ _)m【追記終わり】

島津とかモノタロウの立体顕微鏡試してみたいんですが、お試しで買って失敗したらかなり辛いお値段。私が買えるような安いやつはレンタルなんてやってないですし。お友達の歯科技工士さんは「工場落ちのニコンの中古最高」って言ってました。

うーん。でも買うんだろうなぁ…きっと…。

2018年5月11日金曜日

小手先クリーナーを掃除した衝撃映像がこちらです



4年分ぐらいでしょうか。こういう鉛を再利用してくれるところはないだろか。

でも純度低いしなぁ…。

ESP32 LEDCのちょっとめんどくさい話


ledcはESP32のLED用高精度PWM機能です。通常のPWMだけでなく、ledc_set_fade_with_timeとledc_fade_startを使えば自動的に指定秒数でfadeしてくれて大変便利。

使い方はだいたいこんな感じです。



なのですが、逆論理のLED(HIGHで消灯、LOWで点灯する回路)でちょっとハマりました。

通常消灯は
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
で良いのですが、逆なので、
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 1023);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
と書いてみたらほんのり点灯してます。細い細いパルスが出てるのですね。

1023を1024に書き換えたら治りました。

じゃあ、ってんで、fadeを
    ledc_set_fade_with_time(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, 1024, BlinkDuration);
    ledc_fade_start(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);
にしてみたら…StackOverflowくらいましたw 【追記2018年9月7日:esp-idf 3.2では治っています。1024でもエラーにならずきっちり消灯します!】

しょうがないので、fadeは1023を使いましたけども…細いパルスが残っているのか完全には消えてくれません。演出で処理しますけども…やぁねぇ。

写真は、Kickstarterで入手したハンダ付け作業治具PCBite 2.0を使って基板を空中に浮かせている図。さすがに製品を晒すわけにはいかないのでダミーです。ケースなしでテストしているとショートの危険性があるけど、テープで止めたり剥がしたりするのも煩雑…ってんで、基板の端をバネ付きのクリップで挟んで磁石で灰皿に張り付いています。とても便利です。

クリップだけ追加注文しておけばよかったなぁ。SwitchScienceさんで扱ってくれないからし。

2018年5月9日水曜日

空気質+CO2センサー CCS811

空気質センサーとOLEDをESP32に接続し、Ambientで可視化しました。

Strawberry LinuxさんのCCS811モジュールとAdafruitさんのライブラリで何事もなく動作します。Adafruitさん、今度買うからね(AdaとSparkfunさんには購入ノルマを設定して時々お布施しています)。

ただ、ハマりポイントがいくつか。
  1. 電源、I2Cの他にReset(VDDへ)とWake(GNDへ)も接続しよう
  2. 基板裏のアドレス選択ジャンパをハンダ付けしよう(0 : 0x5A)
  3. I2CはGPIO21(SDA)とGPIO22(SCL)
これでサンプルコードは動きます。

さらに、OLEDに値を表示するようにしてみました。OLEDライブラリもCCS811ライブラリも初期化でWire.begin()呼んだりするので、初期化の順番が違うとCCS811がヘソを曲げます。この複数のライブラリが勝手にWire.begin呼び出す問題、なんとかならんですかね。どうせWireはオブジェクト一個なので、ライブラリを使うユーザが自主的に初期化すべし、の方がありがたいのですが…初心者保護でしょうがないのかなぁ…。

で、とりあえずCCS811から読んだ値をOLEDに表示できるようになった…と思ったら、途中で動作が不安定に。CCS811から値が返らなくなり、電源を切るかCCS811のRESET端子を一度GNDに落とさないと動いてくれません。I2Cの処理が干渉しているようで、それぞれの通信後にdelayを入れたら安定して動作するようになりました。あるある。

ついでにAmbientにデータを上げるようにしました。Ambientホント楽。

化学物質過敏症で困っている方に貸し出してしまったので写真はありません。いやー、歩きながらディスプレイ見ていると、時々すっごい値が出てきますね。ちょっと窓を閉めているとあっという間に1000ppmに達します。近くに手を置いただけで600ppmになったり。人間がどれだけ二酸化炭素を噴出しているかがわかります。

TVOCの最高値はとある喫煙室で、6000ppbを記録しました。おおおおお。

ってことで、ソースです。


2018年5月4日金曜日

安いお絵かきタブレットと思いきや

ebayで2000円ぐらいでdrawing tabletが出てまして。


2000円なら、最悪落書き用にでも使えりゃいいや、って買ってみたんすよ。


…LEDライトボックスでした。上の広告写真だとわからないけど、こっち(下)をよく見ると紙をクリップで止めているよね。あははははははははは。


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よりぜんぜん良いですし。