Google Slidesで作成したスライド類や、Mathematicaのsource類、試作システムなど。
Mathematica document publishing
TEX to HTMLのテスト
http://www.eng.niigata-u.ac.jp/~nomoto/download/mathjax.pdf
Mathematica output box form to LATEX
\[\frac{\partial \left(x^2+y^2\right)}{\partial x}\]
top
Wolfram Communityに投稿した記事がSTAFF PICKS:として、選ばれているので、リストアップしておく。
首都高を知っている編集者がいるようで、このリンクをTwitterで呟いてくれた。
2020年頃の投稿なのだが、編集者が大分遡って見てくれているようだと。
これは投稿したその日にピックアップされた。
Graph Editorのコードを整理している途中に気づいてcall-backの記述法を述べた。
YouTubeに投稿してから、そのリンクを貼っておいたのがこれ。
2017年8月
最初はサーボモーターを回すためには電力の関係で無理かも知れないし、サーボモーターを動かすためのパルス列をMathematica配下にあるRaspberryPiで出来るだろうかとの懸念があったので、別ボードを用意してあったのだが、RaspberryPiでPWMを実現するツールがあって、しかも標準でインストールされている、という話をみつけて、俄然やる気が出たのだった。
早速、Wolfram Communityに投稿した。動画が投稿できなかったので、YouTubeに投稿してから、そのリンクを貼っておいた。
ところで、使ったOLEDやSG90、配線用のピンなどの中華製品が送料込み数百円で手に入って、これで利があるのだろうかと、驚くほどに安い。
2017年9月
仕組みとしては、出来上がったガジェットをどんな向きにおいてあっても、よいことにする。そのために、最初に360度磁力計を回して、磁北を検出する。磁北の検出には、角度ーテスラがサインカーブを描くので、これにサイン関数をフィッティングさせて、その時の位相角から磁力の最大値、すなわち磁北を推定することにした。
次に、方位に関連させた小説ファイルから、ランダムに小説を選んで、その方向にディスプレイを回して、これを表示する。そこで、あ、この小説は読みたいな、と思って、あるいは、ただランダムに回転するディスプレイを眺めて、ぼんやりする、と。
開発にあたっては、磁力計・加速時計のコンビである、LSM303DLHCのレジスタの読み込み方に癖があって、個別に読むとノイズが大きいとか、磁力計の各方向レジスタは、全部読まないとリフレッシュされないなどの、特性を突き止めるのに時間を要した。
YouTubeに投稿してから、そのリンクを貼っておいたのがこれ。
2017年10月
Mathematicaから、RaspberryPI Zeroに接続された外部機器の制御には、Shellを使うことができる。一方、MathematicaからShellの呼び出しと、ShellからI/O機器の呼び出しには、一定の時間を必要とするので、Mahematicaを用いたプログラムは、その影響を受けて、一定の制限を受けることになる。
Node.jsは、RaspberryPi上でHTTPサーバーとして設定できると同時に、rpioによってI/O機器を制御することができる。同時に、Node.jsを用いることで、JITによる高速化と非同期処理機能を享受することができる。これらを考慮すると、MathematicaとNode.jsの組合せは、Mathematica単体による外部機器制御に比べて、その適用範囲を拡大できる可能性がある。
ここでは、両者を組み合わせた結果を評価するために、Node.jsでGPIOに接続したLEDを一定周期で点滅させながら、Mathematicaから任意のタイミングで、この周期を変更するプログラムを試作した。ソースはここ
2018年3月
Mathematicaの基本原理を説明するスライドを、入力とそのリアルタイムの評価結果出力のペアで表示するシステムである。ハードウェアとしては、RaspberryPi Zero Wと静電タッチスイッチ、3.5インチLCDディスプレイ、シャットダウン・スイッチから構成される。
システムのソフトウェアは、スライドのコンテンツをDatasetで保持し、これをNotebook関連ルーチンで表示する。タッチスイッチの制御をOOPで構成し、Task管理ルーチンを用いて自動処理するように構成されている。
このプロジェクトは、可動する部分がなくて、RaspberryPiからLCDに映し出すだけ、とも言える代物なので、実はなかなか形が決まらず、そもそも一体型にする意味があるのか、とか、いやいやディスプレイが剥き出しだからよくないのではないのか、とか、コネクタの向きがおかしいのでうまく纏まらないのだ、とか、HDMIケーブルが長過ぎるから散漫な印象になるのか、とか、プログラムが出来てから、ひと月程も、弄り回していたのだ。
で、ある夜の銭湯で閃いて、そうかこれはストーリーがないからまとまらないのだ、と。とすれば、これは、Mathematicaの秘術を頬を寄せながら高校生に教える女子大生の誘惑の道具なのだ、というシチュエーションを思いついてから、すらすらと纏まったものなのだ。
どんなものでもストーリーは必要だ、という知見を得たプロジェクトだったのだ。ソースはここ
2018年5月
SG90サーボモータの使用が想定されている、"Pan/Tilt Camera Platform Anti-Vibration Camera Mount"なる、安価な2軸のパン・チルト・キットが流通している。そこで、RaspberryPi-Zeroの2チャンネルのPWM出力を、SG90に接続した上、Mathematicaからこの2軸を制御してみる。
このプロジェクトは、パン・チルト2軸制御テーブルに搭載するセンサーを特定せずに、開発したものである。制御システムは以下のようなレイヤー構造を持っている。
(1) PWM設定のためのシェルスクリプト
(2) チルト角度あるいはパン角度を与えた場合に、現在位置から与えた角度に移動する制御関数
(3) チルト角度とパン角度を同時を与えて、2軸を少しずつ動かして目標角度に移動する制御関数
(4) コニカル・スキャンする2軸角度データを作り、このデータから2軸制御テーブルを動かす制御関数
パン・チルト2軸制御テーブルが動作する様子は、YouTubeに投稿してある。リンクを貼っておいたのがこれ。
ソースはここ
2018年8月
二軸テーブルの制御については作ってあるので、これに超音波距離計を搭載して、これを用いてコニカルスキャンするシステムとした。問題となるのは、超音波距離計の仕組みから云って、トリガー信号を距離計に送ってから、リターンパルスの長さを測定する必要があるのだが、これをRaspberryPiで実現するのが困難なことである。他方、Arduinoはこれを容易に実現するピンと関数が準備されている。
そこで、ATtiny85で超音波距離計を制御し、測定結果をI2C経由でRaspberryPiが受け取る仕組みとした。もう一つの問題は、超音波距離計が5Vで動作することである。ATtiny85は5Vの電圧で動作するのであるが、RaspberryPiのピン電圧は3.3Vであるので、両者の電圧差を吸収するための、レベルシフターが必要となった。
測定結果は、16個の測定点を円周上に配置して、距離を色で表現した上、Dynamicに書換えることとした。
超音波距離計のコニカルスキャナーが動作する様子は、YouTubeに投稿してある。リンクを貼っておいたのがこれ。このシステムで、ラズベリーパイ・コンテスト2018に応募中である。
p.s.2018年12月8日
で、ラズベリーパイ・コンテスト2018は、優良賞ということで、賞状と賞品のAmazon買い物券¥1000をゲットしたのだ。
2018年10月
正確に言えばLCDドライバーであるST5032は、小電力消費を特徴としているICであるので、I2CをもってRaspberryPiと接続する場合には問題が生じる。最初に嵌ってしまったのは、ST5032をATtiny85にI2Cで接続するのには何の問題もないのに、これをRaspberryPiに接続しようとすると動作が不安定になってしまうことだった。
これは誤接続をしてしまったせいで、壊してしまったのかと思ったのだが、どうもそうでもないようだ。あちこちをググってみると、RaspberryPiのGPIOピンのプルアップに抵抗値が低めの内部抵抗が設定されている、つまりプルアップされたI2C信号を定格に見合うLowレベルに引くためには、それなりの電流が必要で、ST5032は省電力設計であるゆえに、RaspberryPiのプルアップされたGPIOピンを、Lowにするために必要なシンク電流を引き込めないことが、不具合の原因だった。これを解消するためには、I2Cバスリピーターを途中に挟まなくてはいけないことが、やっと分かった。
これが分かったのは、秋月電子にRaspberryPi用と打たれたST5032モジュールを発注したあとで、到着したモジュールは、当然のごとくRaspberryPiから制御できた。この発注には、PCA9515バスリピーターも入れてあったので、バスリピーターも使ってみることにしたのだ。と言おうか、ここまでにグダグダがあったのだ。時系列に沿って並べると、
1. ST5032モジュールを購入
2. モジュールは携帯電話に合わせて製造されているので、これを標準の基盤に半田付けし、プルアップ抵抗やコンデンサを追加
3. ATtiny85に制御プログラムを入れて、動くことを確認
4. RaspberryPiに接続しても動作が不安定である
5. 問題がプルアップ抵抗やコンデンサのマッチングかとST5032+インターフェース基盤を購入
6. 新しいST5032をインターフェース基盤に半田付け
7. RaspberryPiに接続しても同じような不具合が発生
8. ST5032にはI2Cバスリピーターが必要であることが判明
9. RaspberryPi用ST5032モジュールとPCA9512を発注
10. RaspberryPi用ST5032モジュールが動作することを確認
11. PCA9512をSOT23基盤に半田付け
12. RaspberryPiからPCA9512を介してST5032が動作することを確認
13. ST5032に何を表示しようかと考えて、vcgencmdで得られるダイ温度、メモリ使用量、クロック速度などを表示することに
結局のところ、ST5032 LCDモジュールを3個購入することとなったのだ。単価は数百円であるのだけれど。
I2Cバスリピーターに拘ったのは、もう一つ訳があって、爪の間に入る程の小さいチップ部品やICを基盤にはんだ付けする手法に慣れる、という目的があるのだ。ルーペで拡大しながら、基盤に極小のチップをはんだ付けするのには、ノウハウが必要で、セロテープや瞬間接着剤で固定したり、はんだ吸い取りワイヤを駆使したり、小容量のはんだごてと、細いはんだを準備したり、こて先のチップの形状や、こて先チップの当て方などに、慣れも必要なのだ。
出来上がった結果は地味なのだが、ノウハウが詰まっているので、YouTubeに投稿してある。
2018年10月
■ ■ ■