KiCad 7のSpecctra DSNのNPTHがおかしい?

以下のバグは,KiCad 7.0.5 でfix済みとのことです!

KiCad のメジャーバージョンが7になって,白抜き文字や任意のフォントが使えるようになるなど,とても良くなっています。
しかし一点だけ困ったことがあって,NPTH(ノンスルーホール)を含むPCBでDSNをエクスポートすると,キープアウトエリアが異常に大きくなってしまい,freeroutingで正しく処理できなくなってしまうという点です。

自分で置いたMountingHole等ならいったんパッドに置き換えて配線してからまたMountingHoleに戻すという手もありますが,部品のフットプリント自体に「位置合わせ用NPTH」があったりするとそうもいかなくなります。

これについては,以下の手動対処で一応なんとか回避できるようです。

KiCad 7からエクスポートしたDSNファイルを任意のテキストエディタで開く。

以下のような行を探す。

(keepout "" (circle F.Cu 502200))

これを以下のように修正(今のところ,単純に500000を減算することで対処できています)。

(keepout "" (circle F.Cu 2200))

USB3150-30-130-A という部品にも2箇所のNPTHがあり,やはり以下のようなDSNが出力されるのですが,これらの500850を850に書き換えたところうまくいきました。


(keepout "" (circle F.Cu 500850 -1500 425))
(keepout "" (circle B.Cu 500850 -1500 425))
(keepout "" (circle F.Cu 500850 4100 425))
(keepout "" (circle B.Cu 500850 4100 425))

おそらくすぐにバグフィックスされるとは思いますが,とりあえずの対処法ということで。

STLファイルの寸法を知りたい

3Dプリンタでも良く使われるSTLファイルですが,人からもらったSTLファイルの外寸(寸法,サイズ)をさくっと知りたいときはRubyで以下のような感じです。

#!/usr/bin/ruby
# stldimensions.rb: STLの外寸を求める。
# 要 stl (Gem)
# usage: $0 stlfile

require 'stl'

class Points < Array
  def dimension(axis)
    (self.map(&axis).max-self.map(&axis).min)
  end
end

# STLファイル中の全平面の全座標を得る。各要素はGeometry::Point。
points = Points.new(STL.read(ARGV.shift).map(&:last).map(&:points).flatten)

# 最大外寸を調べて表示
printf("%.2f x %.2f x %.2f\n",
       points.dimension(:x),
       points.dimension(:y),
       points.dimension(:z))

stlはgemでインストールできます。

$ gem install stl

STLビューアを立ち上げるのが面倒or不可能なときに。

ESPr Developer (ESP-WROOM-02) を電池で駆動する

小型で手に持てるIoT端末を作りたくて,スイッチサイエンスのESPr Developerがどんな電池で駆動できるか色々試しました。

  • ESPr Developerは素のESP-WROOM-02よりいくつか回路が追加されているので,その分少しだけ消費電力は高いかもしれません。
  • ESPr Developer以外に温湿度センサNeoPixel WS2813Bも接続してテストしています。
  • すべて,ESPr Developer のVINに入れているので,ESPr Developer上の3.3Vレギュレータは通っています。
  • 都合により,Li-Poバッテリは使えない前提です。
  • 本来は3.7~6.0 VをVINに入れるものなので,3Vは完全に定格外です。従って全くの無保証であり,たまたま動くこともあるんだねくらいの情報です。
電池 本数 合計電圧 動作したか
CR2032 2本直列 3V x 2 = 6V ×
CR2450 2本直列 3V x 2 = 6V
単4 3本直列 1.5V x 3 = 4.5V
単4 2本直列 1.5V x 2 = 3V
単5 3本直列 1.5V x 3 = 4.5V
単5 2本直列 1.5V x 2 = 3V
CR123A 2本直列 3V x 2 = 6V
CR123A 1本 3V
CR2 2本直列 3V x 2 = 6V
CR2 1本 3V

コイン電池2枚も魅力的だったのですが,とりあえずの結論として,電池と電池ボックスの入手性も考慮して単5✕2本で動かしてみます。

サイボウズLiveで行っていた研究進捗管理をScrapboxに移行

結論から先に書くと,以下に移行しました。

  • 研究進捗報告: Scrapbox
  • スケジュール管理: Googleカレンダー

サイボウズLiveが2019年4月でサービスを終了しました。本研究室では研究進捗管理をサイボウズLiveで行っていて,特に以下2つをフル活用していました。

  • 掲示板機能: 学生各個人の研究進捗報告。学生1名につき1つのトピックを立て,それに学生が報告,教員がコメント,という順で進捗を報告していく。
    • 良かった点:
      • 画像のインライン埋め込みができる。報告書として議論しやすい。
      • 動画も簡単に貼れる。
      • ソースコードはシンタックスハイライトされて見やすい上に,デフォルトでは畳まれていて見たい時だけ展開できるので,議論がしやすい(サイボウズさん側のハッカー魂を感じられる)。
        プログラミング必須な研究室ではかなり重要な機能。

      • 学生にとっては,自分以外の学生の報告も見ることができるため,報告の良し悪しの相互学習になる。また,進み具合の相互発奮につながる。
      • APIがあるため(充実というほどではないが),オートメーション可能。
    • もう少し機能が欲しかった点(無料なので本当に十分なのですが,あえて言えば):
      • バックアップ機能。HTMLでの書き出しができないので,年度を締めくくって整理するのが厳しかった。(自作して対処していました)
  • カレンダー機能: ミーティングをいつにするか,卒論の〆切はいつか等を管理。また,就職活動等で欠席する日を報告。
    • 良かった点:
      • 予定当日にメールが届くのでうっかりが少なくなる。
      • 「Cc予定」という機能があり,自分の予定を誰と共有するかの範囲を指定できるので,表示が煩雑になりすぎない。
      • スマホ専用アプリがあったため,スマホのUIに則った通知や操作ができる。
    • もう少し機能が欲しかった点(無料なので本当に十分なのですが,あえて言えば):
      • APIの充実。予定の登録は本質的に面倒。例えば定例の会議とかは登録を自動化したい。(これも結局Selenium+Rubyで自作して対処していました)

その他,今年度に新しく購入した書籍や,関連研究のニュースなどをまとめていて,非常に便利に使わせて頂いていました。
しかしサービス終了とのことで,上記の「良かった点」をできるだけ持ち越せるようなグループウェア等を探しました。
いろいろなものを試してみて前述の通りの環境に移行したわけですが,理由は以下の通りです。

Scrapboxの良い点,および今までできていたことができなくなったのをどう対処しているか:

  • ソースコードがシンタックスハイライトされる。たたみ/展開はできないが,別ページへのリンクが極めて簡単なのでソースコードだけページを分けてしまえば良い。
    ちなみにArduinoのソースコード(拡張子.ino)も簡単ではあるがシンタックスハイライトされる(サイボウズLiveはそこまではできなかったので投稿時に拡張子を.cppに変えていた)。

  • 画像は簡単に貼れる。(Gyazoを通じてだが,それは意識する必要は全くない)
  • 動画は貼れないが,リンクを貼るのは簡単なので,Googleドライブに動画を置いてそれにリンクを貼れば問題ない(後述のように,Googleアカウントは全員持っている)。
  • 1研究テーマ(1個人)につき1プロジェクトという風にすれば,だいたい今までと同じ使い勝手になり,かつ,各プロジェクトに全員を所属させれば他学生の報告も参照できる。
    ただしプロジェクトをまたいだリンクや検索はできない。Scrapboxはリンクが機能のキモであり発想支援が素晴らしいので,どうするか検討中。

  • プロジェクトはPrivateにもできる。
  • ログインにはGoogleアカウントが必要だが,本学ではGmailを契約しているため,全員がGoogleアカウントを持っている。
  • バックアップは,プロジェクト単位でJSONでエクスポートできる。また自動定期バックアップ機能もある。
    HTMLで書き出せたりできるわけではないが,JSONでエクスポートしたものをコンバートするプログラムを書けば,インライン画像埋め込みも含めて簡単にできそう。

Googleカレンダーの良い点,および今までできていたことができなくなったのをどう対処しているか:

  • 複数のカレンダーを重ね合わせることができるので,自分の予定と研究室の予定は色などで区別できる。
  • スマホのUIがある。スマホのホーム画面にも貼れる。通知もしてくれる。
  • PCのブラウザでのUIはやや見づらいが,拡張によりややカスタマイズはできる。
  • Googleアカウントが必要だが,前述のように全員持っている。

ということで,かなり満足のいく移行ができています。
たまたま学生が全員Googleアカウントを持っているなどの特殊事情はあるので参考にはあまりならないかも知れませんが,書いてみました。

なお,その他に以下のグループウェアなどを検討しました。
以下の感想は個人の主観であり間違いも含んでいると思います。
また,研究進捗報告に適しているかも私にとっては重要です。

  • サイボウズOffice
    30日間無料を試してみたが,掲示板機能はサイボウズLiveよりも貧弱に思える。
    ソースコードを文中に挿入することもできない。
    (添付はできるが,展開ができずダウンロードになる)

  • R-Group
    クラウド型,容量無制限,利用人数無制限。
    試用してみようとユーザ登録したがメールが来ないので試用できなかった。

  • ZOHO Connect
    UIが学生に厳しそう。Taskの使い方がよくわからない。

  • GROUP SESSION
    オープンソース。画面がややモダンではないか。
    掲示板が,文->ソース->図->文… みたいな文中埋め込みができない。

  • SHIRASAGI
    デモサイトがあるが,グループウェアとしてどう使うのかがよくわからなかった。

  • Stock
    「ノート」機能はドラッグ&ドロップでどんどんファイルをくっつけていけるが,投稿ごとにわかれるわけではないので使っていくとどんどん長大なノートになってしまう(と,前のを誤操作で消してしまいそう)。

  • iQube
    無料だと30MBなのでちょっと厳しい。

  • Office 365
    掲示板機能はあるが,ちょっと面倒そうな印象。
    ソースコードも貼れないっぽい。

OpenGLが使えない環境でも3Dプリンタのスライサが使いたい(MesaによるOpenGLのソフトウェアエミュレーション)

3Dプリンタでは,3Dモデルをスライサというソフトウェアでスライスする必要があります。スライサは大抵の場合「どんな向きでプリントするか」等も調節できるため,一種の3Dビューアにもなっており,このためOpenGLを要求されることがあります。

本研究室の3Dプリンタ「QiDi X-Smart」付属のスライサ「QiDi Print」でもやはりOpenGLを要求されます。このため,リモートデスクトップや,非力なノートPC等でQiDi Printを起動すると,

Could not probe OpenGL. This program requires OpenGL 2.0 or higher.
Please check your video card drivers.

のように言われてしまい起動できません。しかし,そんなに凝った調節をしたいことはあまりないので,どうにか起動させてスライスだけしたいことも多いと思います。こんなときの解決法として,OpenGLをソフトウェアでエミュレーションしてしまうという方法があります。方法は非常に簡単です。

具体的には,まず普通に QiDiInstall 4.2.16.exe をインストールします (C:\Program Files\QiDi 4.2 に入る)。
次に
http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-mesa-18.3.4-1-any.pkg.tar.xz
をダウンロードし,7zip等でxz,tarの順に伸長していくと,mingw64\bin\opengl32.dll があるのでこれを
C:\Program Files\QiDi 4.2
にコピーします (QiDiPrint.exe のある場所)。

これだけです。意外にも軽く,普通に実用になります。
これはたまたまQiDi Printの例ですが,他のスライサやその他の3D関係にも応用可能だと思います。