2018年6月20日水曜日

Matplotlibで明朝体を使えるか

はい,中の人です.
今回はMatplotlibの軸ラベルに明朝体を使おうとした話です.



0.今回使うグラフ
今回は以下のコードを改造しながら進めていきます.(詳しい説明はmatplotlibを紹介しているページへ)

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$")
plt.ylabel(u"変位$y$")

plt.show()




1.概要
Matplotlibでは軸ラベルの設定ができますが,初期設定のフォントでは日本語を入れると変な文字が出てくるはずです.
そこでこの"変な文字"を回避するため,日本語対応フォントを導入して日本語を表示させてみましょう.

2.やってみた
Matplotlibだとフォント変更は以下の二通りがあります.
①rcParamsでフォントを変える
②font_managerで"なんとか.ttc"を直接参照する

①rcParamsを使ってフォントを変える.
rcParamsを使う場合,最初のコードは以下のようになります.


#-*-coding:utf-8-*-
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.family"] = "Yu Mincho"
plt.rcParams["mathtext.fontset"] = "cm"

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$")
plt.ylabel(u"変位$y$")

plt.show()

これはmatplotlibの設定ファイル(matplotlibrc)を書き換えることでフォントを読み込ませる方式です.この場合,数式フォントと普通の文字のフォントを別々に設定できます.
しかし設定できるフォントに限りがあり,以下のコードで調べられます.


#-*-coding:utf-8-*-
import matplotlib.font_manager as fm

fonts = fm.findSystemFonts()
for f in fonts:
    font = fm.FontProperties(fname=f)
    print(font.get_name())
input(">")


②font_managerで"なんとか.ttc"を直接参照する
font_managerを使う場合は以下のようになります.


#-*-coding:utf-8-*-
import matplotlib.pyplot as plt
import matplotlib.font_manager
import numpy as np

fp = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\msmincho.ttc")

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$", fontproperties=fp)
plt.ylabel(u"変位$y$", fontproperties=fp)

plt.show()

この場合,"なんとか.ttc"さえ参照できればフォントを適用できることができます..ttcファイルであればフォントの制限もありませんが,数式はデフォルトのフォントが当てられます.

3.完走した感想
もう英語でいいや




©2018 shts All Right Reserved.

2018年6月10日日曜日

Raspberry Pi 向けモータ制御基板を作ってみた


レポートに発狂しながら生きている中の人です。

少し前にラズパイ向け(というよりArduino Pro Micro向け)の拡張ボード的なものを作ったのですが、その紹介。






1.そもそもの作成理由
Raspberry Piで生成できるPWMの精度があまり良くなかったので、よりきれいなPWMが作れお手軽にコードが書けそうなArduinoを使ってサーボとかモータードライバとかの制御をやってみたかった。
ついでにプリント基板化もしておこうと思った次第です。

2.設計
今回、ArduinoとRaspberry Piの通信部分はUSB経由のUARTにしたので、そこの配線は不要でした。(というよりArduino Pro MicroのUARTピンがうまく使いこなせなかったOTL。)
モータードライバは、i2Cでモータの電流が制御できるDRV8830を二つ使用しました。秋月で取り扱っているのもよかったですね。モータドライバを二つ乗せたのは、今後別のことにも転用できるようにするためです。

RaspberryPiからはi2cで使えるキャラクタ液晶とUARTのピンを引き出しています。液晶はIPアドレス確認用で、UARTはSSHがうまくいかないときのバックアップとしてPCとの通信に使います。

電源ボードはAdafruitのPowerBoost 1000 basicを使用し、1SのLi-poから5Vに昇圧しています。5V1Aぐらいあっても、モータの駆動は若干厳しいです。
電源回りでいえば、Raspberry Piの電源も一緒にしたかったのですが、電源が足りなくなるのとGPIOからの給電がうまくいかなかった関係で別系統にしました。

3.作成

今回もE社に投げ込みました。DRV8830のパッド-パッド間が12milより狭かったので、怒られるのではないかと思っていましたが、難なく仕上げてきました。(恐ろしい)
初めてヒートパッドのついたICのはんだをしたのですが、
①パッドにスルーホールを設けておく。
②パッドが薄くはんだでコーティングされる程度にパッドと穴にはんだを流し込む。(穴は埋める)
③パッドにフラックスを塗り、ICの位置を決め、マスキングテープで固定。
④裏返しにしてスルーホールにはんだごてをあて、固定する。
⑤固定されたら再度ひっくり返して、マスキングを外し、フラックスをICの足に塗る。
⑥ICの足をはんだ付けする。
ってやったら一応ついたようでした。(正しい手順が知りたい)

4.動作確認
正常に動いたので一安心です。

5.改善点
とりあえずヒートパッドの裏の穴はもっと小さくてよかったことと、DRV8830だったらRaspberry Piからi2Cを使って叩けるので、i2CかSPIのPWM生成ICかなんかがあればArduinoが不要なる点でしょうかね。
Arduinoを使うなら、アナログピンやデジタルピンを引き出して、センサなどをさらに追加できたらよりよかったですね。
あっ,i2C線にプルダウン抵抗入れ忘れてました...OTL

6.まとめ
ソフト、ハードともに基礎研究は終了したので、今度は実際に組立てて走らせ、データ収集とデータ加工をしないといけないですね...
©2018 shts All Right Reserved.