2018年 03月 06日

3Dプリンタで出力するモデル設計の温度感

どんな分野でもまず「温度感」をつかむのが大事だと思っていて、そもそも「温度感」って何かというと、どの部分の神経を使うか、熱量を使って考えて、どこの手を抜くかという話です。「コツ」を少し具体的に表現して「温度感」といっている、というとちょっと身も蓋もないのですが。

3Dプリンタのモデル設計の温度感

ここでいう 3D プリンタは普及している FDM (Fused Deposition Modeling・熱溶解積層法) の話です。FDM は基本的に X/Y 精度が悪く、Z精度はそれに比べると高いという特徴があります。

具体的には X/Y については±0.5mmぐらいで、Zは±0.1mmで考えます。特に X/Y の精度の悪さは設計難易度にかかってきます。同一条件で出力したパーツを組合せる分にはともかく、他の規格品、例えばナットや、あるいは三脚ネジのようなものを出したいときは、だいたいの場合は何度かプリントして現物あわせをする必要があるのです。

±0.5mm これはキャリブレーションしてフィラメント量を調節していてもなお生じる誤差と考えたほうが良くて、キャリブレーションしていなければもっと精度が出ません。

動くすきまを確保したい場合

基本的に動く面すべてに 0.5mm のトレランスをもうけます。つまり引き出しみたいなものなら、1mm 小さい立体を入れるようにします。

ぴったり圧入する場合

パズルのピースのようにハメこむ場合は、0.25mmのトレランスをもうけます。四角に四角をハメる場合 0.5mm 小さい立体になります。しかし実際には素直にうまくいくことは少ないでしょう。絶対に失敗しない方法は 0.2mm 程度のトレランスで、出力してから削ることです。

圧入して固定するような場合、これはかなり難しいですが、形状で工夫すると楽になります。設計上は、内接多角形の柱と同一内径の穴をモデリングして無理矢理ハメこむのが楽です。

KiCAD + Machinekit (LinuxCNC) で切削して基板をつくるときの手順

しばらくすると忘れてしまうので、現状のフローをまとめておく。

  1. pcb2gcode の millproject
  2. AutoLeveller は基本的には常時使うほうが結果的に早い。DIP しか使わないような電源回路では使わなくてもなんとかなるけど使ったほうが安心。
  3. 基板外形のカッターは 1.5mm が適当。1mm だと 500mm/min でフィードするとちょいちょい折れてストレス
  4. パターン切削は30度0.1mmのカッター

概要

  • KiCAD からの出力
  • pcb2gcode の設定
  • machinekit (LinuxCNC) での操作

KiCAD でのデザインルール

0.25mm 幅で削るので、これが限界。0.05mm でもトレランスをとれれば安定しやすい。

  • 最小配線幅は 0.25mm が限界。できれば 0.3mm のほうが安定。
  • クリアランスも 0.25mm が限界。できれば 0.3mm ぐらいにしたい。

KiCAD からのエクスポート

- 切削する銅箔層 (F.Cu or B.Cu) と Edge.Cut をガーバーに出力する
- ドリルファイルを出力する

pcb2gcode

以下のような前提で gcode 化する

  • 30° 先端0.1mm のVカッターを掘る用に使う
  • φ0.8mm のエンドミルを全ての穴開けに使う
  • φ1.5mm のエンドミルかφ1mmで2枚刃を外形カットに使う
  • 基板の厚さは 0.8mm か 1.6mm を使う。基板の歪みを矯正できるぶん、0.8mm のほうが細かいパターンは削りやすく感じる。

先端0.1mmのエンドミルといっても、実際買ってみると綺麗に 0.1mm になっていることはすくない。というかすぐ先端が折れる。計算するときは 0.15〜0.20mm として扱う。

切削速度を落とせばφ0.8mmで穴開け〜外形カットまで可能で、ツール取り替えの手間が減らせるはずだけど、0.8mm のミルは高価であんまり折りたくないので、別途φ1.5mmのミルを使っている。これは今後 0.8mm にするかも。あんまり太いミルで外形カットすると切削抵抗が大きくなり、両面テープが剥れてずれる可能性もあるので注意。

# Use standard mm
metric=true
metricoutput=1

front=tachometer-B_Cu.gbr
#back=
outline=tachometer-Edge_Cuts.gbr
drill=tachometer.drl

front-output=front.gcode
back-output=back.gcode
outline-output=outline.gcode
drill-output=drill.gcode
milldrill-output=milldrill.gcode

# https://github.com/chrysn-pull-requests/pcb2gcode/blob/graphical-documentation/man/options.svg
zwork=-0.1
zsafe=1
mill-feed=220
mill-speed=10000
mill-vertfeed=150
mill-diameters=0.22
milling-overlap=25%
isolation-width=0.5

zdrill=-1.7
zmilldrill=-1.7
zchange=20
drill-feed=100
drill-speed=10000
min-milldrill-hole-diameter=0
milldrill-diameter=0.8

# 外形カット時のミル直径
cutter-diameter=1
# PCB板厚+0.1mm
zcut=-1.7
cut-feed=500
cut-speed=10000
cut-infeed=1
cut-side=front
# mirror-axis=51.575mm

optimise=true
zero-start=true

pcb2gcode 2.0.0 で動くように変更

pcb2gcode して生成 gcode をデスクトップとリモートの Machinekit に転送する。デスクトップにコピーしているのは CAMotics で読みこませて確認するときに便利なので。

  • mirror-axis を基板サイズの半分に設定すること
    • これやらないと back 面がマイナスからはじまってしまう
    • 一度実行して表示される width を元に書きかえる必要がある
~/ghq/github.com/pcb2gcode/pcb2gcode/pcb2gcode && cp *.gcode ~/Desktop/ && scp *.gcode machinekit@192.168.0.240:gcode

確認

  • CAMotics を起動して、すべてのファイルを読みこむ。
  • Workpiece を以下のように設定して再描画
    • X: xxx/0
    • Y: xxx/0
    • Z: 1.6/-1.6

段取り

  • 事前に捨て板の面出しをする (φ6mm ぐらいのミルで加工面全てを 0.2mm ほどさらう)
    • AutoLeveller 使うなら毎回やる必要はない。
  • ニチバン ナイスタック 透明タイプ (材質がセロハンのもの) を使って切削基板を捨て板に固定する
  • このときしっかり全面を押さえつけて捨て板に接着する (加工時の圧力で高さが変わらないように)

AutoLeveller

  • AutoLeveller に切削対象 gcode を読みこませる
  • Probe Clearance は 0.5〜1、Z Safe Height は 1、Z feed は 50 にする
  • create probe file only にチェックを入れて、Create Levelled Gcode ボタンを押すと、ALProbeback.ngc ができる
  • ALProbeback.ngc を machinekit に読みこませる
  • 一旦 Probe を行い、Z を Touch Off する (原点を設定する)
  • 実行して基板全体を Probe する。
  • .ini と同じディレクトリに RawProbeLog.txt ができているので、ローカルに転送する
    • gcode 用のディレクトリに RawProbeLog.txt への symlink を貼っておくと便利
  • RawProbeLog.txt を AutoLeveller に読みこませる
  • create probe file only にチェックをはずして Create Levelled Gcode を押す
  • ALback.ngc ができるので転送する

drill や外形カットなどは面倒なので AutoLeveller はかけず、0.1mm 余計に掘る。

https://lowreal.net/2016/10/19/1

AutoLeveller の起動

java -cp ~/ghq/bitbucket.org/daedelus1982/autoleveller/out/artifacts/autoleveller_jar/autoleveller.jar  com.cncsoftwaretools.autoleveller.Autoleveller

生成 gcode の転送

scp ~/Desktop/*.ngc machinekit@192.168.0.240:gcode 

プローブログを手元に転送

scp machinekit@192.168.0.240:gcode/RawProbeLog.txt ~/Desktop/

切削手順

基板パターン

  • ALback.ngc を machinekit に読みこませる
  • 実行すると Probe をつけろと言われるので、つけて Resume
  • Probe後、Probe をはずせと言われるので、はずして Resume
  • 切削がはじまる

ドリル

  • エンドミルをφ0.8mmに交換
  • Probe を行い、Z Touch Off
  • Feed Override を 10% ぐらいに下げる (折れ対策。pcb2gcode が mill 時と milldrill 時でフィードレートが変えられないので)
  • drill.gcode を読みこんで実行

外形

  • エンドミルをφ1.5mmに交換
  • Probe を行い、Z Touch Off
  • outline.gcode を読みこんで実行

備考

pcb2gcode の --al 系オプションは使わないの?

ある程度規模が大きくなると machinekit に読みこませたときに非常に時間がかかってしまうので、その時間を使うぐらいなら AutoLeveller を使ったほうがよいと考える。時間がかかるのはプレビューのために gcode を一通り仮想的に実行しているためだと思う。

また、--al のオプションは Probe → 切削 がひとつの gcode で行われるため、リトライすることができない。途中でミルが折れたりすると交換してやりなおすということができなくなる。

エンドミルの不具合

基板切削をはじめた直後に削った銅がけばだつようだったらミル先端が既に折れている可能性がある。そのまますすめてもうまくいかないので新しいのに変えること

または確認しても折れていないようなら、ミルの突き出し量を見直すこと。ぎりぎりまでマシンに指しこんでいないと、同様にけばだつことがある。

2018年 02月 27日

LPC11U35 の mbed ローカル開発環境構築

秋月でLPC11U35 が乗っているボードを買った。うっかり3枚買っていた。EA LPC11U35 QuickStart Board
と互換のもの。

RAM や Flash が少なめだけど以下の点で魅力的なボード

  • mbed 対応
  • 850円と安価
  • 単体で USB 経由で書きこめる
    • デバッグするならシリアルは別途繋ぐ必要あるけど
  • 別のチップに対して USB SWD インターフェイスになれる

コード的な備考を先に書いておく

  • LED1 〜 LED4 は全部 P0_7 のエイリアスになっている。
  • USBTX/USBRX はサポートされない

Lチカのコードは何の変哲もない。

#include "mbed.h"

DigitalOut led(LED1);
// Serial serial(UART_TX, UART_RX);

int main() {
	for (;;) {
		led = 1;
		wait(0.5);
		led = 0;
		wait(0.5);
	}
}

ビルドするも動かない

platformio でビルドしたのを書きこんでもさっぱり動かず、再度 CRP DISABLED というボリュームがマウントされてしまう。オンラインコンパイラでは動くので、手元の環境の問題であることはわかったが、なかなか原因がわからなかった。

結局 platformio は mbed OS 5 の環境でビルドしようとするが、LPC11U35 では RAM が足りず起動できないようだ。

実際、mbed の公式を見て mbed OS 5 系に対応するボードをリストにすると (そういうことができることにはじめて気付いたが)、LPC11U35 は出てこない。

platformio でフレームワークのバージョンを指定してビルドする方法がどう調べてもわからなかった。

mbed cli を使う

そういうことで、いろいろ試したけど、あきらめて platformio のことは忘れましょう。

ARM 公式で提供されている mbed-cli をいれるのが今のところは最良のようです。

インストール

まず Python のツールなので python が必要なのと、pip も必要です。ここでは

  • python は macOS のシステムに入っているものを使う
  • pip はグローバルに入れる
  • mbed-cli もグローバルに入れる
  • ほかだいたいの依存モジュールはユーザー領域にいれる (pip --user)
    • 既存の setuptools をアップグレードしようとするのだが OS 保護に守られて root でも上書きできないので、基本的に --user で入れたほうが良い。

という感じでいきます。

curl https://bootstrap.pypa.io/get-pip.py | sudo python
sudo pip install mbed-cli IntelHex

mbed-cli には GCC_ARM のツールチェーンを入れてくれる機能はなく、前もって arm-none-eabi-gcc とかを入れておく必要がある。https://launchpad.net/gcc-arm-embedded とかを入れてパスを通しておく。

もしくは、platformio で既に入れてあるのがある場合は以下のようにしてパスを通せば使える。

export PATH=$HOME/.platformio/packages/toolchain-gccarmnoneeabi/bin:$PATH

プロジェクト作成

今回使う LPC11U35 は mbed OS 5 未対応のため、mbed 2 (いろいろ別名がある。mbed library / mbed classic など) を使うようにプロジェクトを作る。--mbedlib を指定すると mbed 2 環境になる。

sketch はプロジェクト名。

mbed new sketch --mbedlib
cd sketch
vim main.cpp
mbed deploy
pip install --upgrade --ignore-installed --user -r .temp/tools/requirements.txt
mbed compile -t GCC_ARM -m LPC11U35_401
# LPC11U35 を USB かきこみモードにして
cp ./BUILD/LPC11U35_401/GCC_ARM/sketch2.bin /Volumes/CRP\ DISABLD/firmware.bin 
#リセットボタンで動く

しかし mbed-cli は凶悪で、プロジェクトディレクトリ以下に 2GB ぐらいファイルをコピーしてくる (mbed 2 の全ソースコード)。

自分は複数端末 (ノートとデスクトップ) で開発する関係で Dropbox のディレクトリで同期させておくことが多いのだが、これだと死ねる。つらい。

ピン名など

回路図

見比べると結構違う。

  • Q1 の違い。秋月版はFET
  • 3.3V レギュレータの違い
  • リセットICの違い
  • USB 入力の保護の違い

~/.platformio/packages/framework-mbed/targets/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_401 以下にある。

https://os.mbed.com/users/mbed_official/code/mbed-dev/file/57724642e740/targets/TARGET_NXP/TARGET_LPC11UXX/

2018年 02月 20日

LM1972 デジタルボリューム

4ch 分の音量を一括で変更したいと思ったが、4連ボリュームというのは入手性が極めて悪く、市販の2連ボリュームを改造して4連にしたりするようだ。

ということでそもそもアナログボリュームをやめてデジタルポテンションメータを使うことを検討しはじめた。デジタルボリュームならギャングエラーも少ないし、多チャンネル化もしやすい。インターフェイスも自由にできる (といってもアナログBカーブボリュームをADCして4ch分可変させる予定だが)

LM1972

秋月で売ってる中から選ぶと、実質的にはこれしかない。1つで2チャンネル分。これを使ってひとまず2ch分を作ってみる。

実装

回路図

後段のオペアンプは実際は手元にあった OPA2134 を使っている。単電源でも使えるが、今回は正負電源を用意する予定なのでVSSとGNDはわけてある。

基板

コード

さくっと書きこんで動かせるので Arduino Nano で実験。

  • ADC 0 から値を読んで、0から78dBの間を可変する (ミュートなし)
  • ADC 0 にBカーブ可変抵抗器をつける (0〜5V分圧可変)

という前提。以下のようなことに気をつける。

  • SPI は MODE 0。ローからはじまって立ちあがりで読む。
  • D10 SS を使ってるけど、マスターなので特にこのピンを使う意味はない
  • LOAD/SHIFT は1ch書きこむごとにオン/オフすること (16bit 書くごと)
  • DATA-OUT をデイジーチェーンして次の DATA-IN に繋げる場合は単に4ch分を連続して書きこむ

volumeToAttenuation() は 0〜1023 の値を 1dB ステップで 0〜78dB の設定値に変換する関数。48dB を境に減衰量が変わるので注意が必要。0.5dB ステップは使ってない。

#include <Arduino.h>
#include <SPI.h>

void setAttenuation(const uint8_t v) {
	// channel selection
	//     0x00 (channel 1) / 0x01 (channel 2)
	// attenuation setting
	//     0b00000000 (0) 0.0dB
	//     0b00000001 (1) 0.5dB
	//     0b00000010 (2) 1.0dB
	//     ...
	//     0b01100000 (96) 48.0dB
	//     0b01100001 (97) 49.0dB
	//     0b01100010 (98) 50.0dB
	//     ...
	//     0b01111110 (126) 78.0dB
	//     0b01111111 (127)  100.0dB (Mute)
	//     0b10000000 (128) 100.0dB (Mute)
	//     ...
	//     0b11111111 (255) 100.0dB (Mute)
	//
	// initial state is Mute
	digitalWrite(SS, LOW);
	delay(1);
	SPI.transfer(0x00);
	SPI.transfer(v);
	delay(1);
	digitalWrite(SS, HIGH);

	delay(1);

	digitalWrite(SS, LOW);
	delay(1);
	SPI.transfer(0x01);
	SPI.transfer(v);
	delay(1);
	digitalWrite(SS, HIGH);
}

uint8_t volumeToAttenuation(uint16_t v) {
	// volume 0%   -> 78dB (126)
	// volume 100% -> 0dB (0)
	uint8_t dB =  ((uint32_t)(1023 - v) * 78 / 1023);
	uint8_t att = 0;
	if (dB < 48) {
		att = 2 * dB;
	} else {
		att = 96 + dB - 48;
	}
	return att;
}

void setup() {
	Serial.begin(9600);
	Serial.println("setup");

	// LM1972 Pin / Arduino Pin
	//  (9) CLOCK <-> (D13) SCL
	//  (10) LOAD/SHIFT <-> (D10) SS
	//  (11) DATA-IN <-> (D11) MOSI
	pinMode(SS, OUTPUT);
	digitalWrite(SS, HIGH);
	SPI.setBitOrder(MSBFIRST);
	SPI.setClockDivider(SPI_CLOCK_DIV16);
	SPI.setDataMode(SPI_MODE0);
	SPI.begin();
}


uint8_t prevLevel = 255;
void loop() {
	uint16_t val = analogRead(0);
	uint8_t att = volumeToAttenuation(val);
	if (abs(att - prevLevel) > 1) {
		Serial.print("analogRead = ");
		Serial.print(val);
		Serial.print(" att = ");
		Serial.println(att);
		prevLevel = att;
		setAttenuation(att);
	}
}

備考

最初うっかり±15V、つまりVSS=-15V, VDD=15V をかけてしまい、燃やしてしまった (煙が出て、はんだが溶けてチップが脱落した)。LM1972 は絶対最大定格がVDD-VSS=15V、Typical 12V なので、定格の倍以上の電圧をかけていたことになる。あたりまえだけど定格は確認しないといけない。設計段階で回路図を書く前に気付くべきな、あまりにもしょうもないミス。自戒のためアホなことをしたことも書いておく。

運用上でのよくない点も災いした。

いつもは電源をはじめていれるときは安定化電源を電流制限 (CC) をかけつつオンにし、電流量を見るのだが、今回は正負電源を用意する必要があったため、初回から直接手元にあったトランス経由の電源回路へ繋いでしまった。おかげで異常に電流が流れていることに気付きにくかった。

ということで、正負電源を用意しやすくし、事故を減らすために電源を1台増やす予定。


結局 ±5V で試した。当然うまくいった。

2018年 01月 31日

最近のミシン - エプロン

保育園からの要請でミシンした。型紙をレンタルするから作ってこい、みたいなのりなんだけど、完全なレシピは用意してくれないので、最大限忖度して作らないといけなかった。というか時間なくて保育園に預けてるんだから作らなくても買えるようにしてほしい。

まぁそれはともかく、仕様が雑なので外注するのも難しいわけで、結局作ったほうが早い。

「エプロン」と書いてあったけど、構造的にはノースリーブワンピースのようなもので、袖口とかが存在する。「服」は小物と違って曲線で立体的なので素人には難しい。

型紙から 10mm 縫いしろをつけて裁断し、完全に同様の例はないものの既存の本を参考にしながら以下の手順で完成とした。

  • 前身頃・後ろ身頃をそれぞれ裁断
  • 周囲をジグザグですべてかがる
  • 表あわせで前身頃・後ろ身頃を縫いあわせる
  • 袖口・襟などを内側に 10mm 折ってステッチ
  • うらがえす
  • 袖口と襟をパイピング
  • 後ろにゴムをつける (つけかたが分からなかったので適当にミシンで2往復した)

布団カバーを作ったときに余っていた布を使ったので生地が若干うすい。あとやたらシックな感じになった。

同じ布・バイアステープで給食帽もつくった (写真はない)。こちらのページを参考に直径40cmで、バイアステープでゴムを入れる部分をつくった。両折りではなく縁取り用のバイアステープを使ったので広げながら縫ったけどなんとかなった。

ググった

「前身頃」「後ろ身頃」

この用語を初めて聞いたのでググった。それぞれ服の前のパーツ・後のパーツの意味らしい。

バイアステープの処理

バイアステープで縁取り(パイピング)するのが初めてだったので、「バイアステープ 処理」「バイアステープ 縫い終わり」とかでググった。買ったのは縁取り用に折られているバイアステープ 11mm。

やらなくても直接的に服の機能にあまり問題はないけど、袖や首まわりは肌にあたる可能性があり、かがった部分が直接露出しているとあんまりよくなさそう。またカーブしている部分は縫いしろに切り込みを入れたりするので、本体だけでは綺麗に処理できず、パイピングすると相当綺麗に仕上るように見える。あと袖とかはバイアステープで処理すると形が安定する模様。

例によって本とかにも「何のためにパイピングするか」ということは書いてないことが多いので、何らかの目的を持ってこれを行うのだということが書いてあるものが欲しくなる。

2018年 01月 16日

固定回線異常との戦い

12月中旬から自宅回線に異常が発生していて困っていた。

最初の症状:上りが異常に遅い

最初の症状は上り速度が異常に遅いという症状。下りで70Mbps出ても上りは0.6Mbpsとかがザラ。この時点では明確な症状といえず、プロバイダに連絡するも軽くあしらわれる。この時点では上りだけおかしいので回線異常とは思わずプロバイダ側になんらかの制限がかけられているのでは?と疑っていた。

不規則に回線不通

12月下旬の年末ぎりぎりあたりから回線そのものが不通となる自体が発生。PPPoEセッションが一切張れず、ルータを外してノートPC直結でPPPoEもダメだったため、回線異常であると切り分け。

さすがに症状が明確なのでNTTに連絡したりしていたが、特定の時間になると回復したりして「今起きてます」という状態がつくれず連絡しても「問題なさそうなんですが…」とか言われて困る。

宅内VDSL端末の交換

ただ、宅内VDSL端末(集合住宅なので共有ONU・共有VDSL端末と電話回線経由で宅内VDSL端末を繋ぐ構成)の不具合かもしれないので交換しますということになり交換。しかし交換翌日に再度同様の現象が発生したため、原因は宅内VDSL端末ではないことがわかる。このときは、やはり時間で回復したので連絡せず。

完全な回線不通

ある日、不通になったのち一向に回線が回復しないという自体がたまたま土曜日に発生し、即座に電話すると回線調査が入り、共有ONUから応答がないという旨を伝えられる。

その後すぐに担当者が来訪することとなった。調査の結果、宅内VDSL端末から共有ONUまでのリンクは問題なく (宅内VDSL端末側のLinkが点灯していたため) 共有ONUの電源部がフリーズのため再起動でとりあえず復帰。内心「これはまた発生するだろうな」と思ったけど、NTT設備なのでこっちからONU交換してくれとは言えず、再起動だけで帰ってもらう。

共有ONU交換

その後6日間ぐらいは回線異常にはならなかった。しかし再度現象が発生したため営業時間外ながら即座に電話をかけてみると、録音対応ではあったものの10分程度でコールバックがきて再度担当者がくることとなった。

今回は2人担当者が来訪し、片方は共有設備、片方は宅内端末およびユーザ(自分)対応という構成だった。作業時には既にリンクが回復していたため、宅内から見る限り共有設備は正常といわれ内心解決しないのではないかと緊張が走る。

その後2人とも共有設備を見にいった。しばらくたって、共有設備ONUがフリーズしておりデータ送り出しができない状態であったため、この設備を交換したといわれる。「この状態でなんで通信できていたかわからない」とも言っていた。

ひとまずこれで異常は回復したとみられる。アップロード帯域が異常に狭い現象も再現しなくなった。

ひかり回線異常のノウハウ

現象が発生し次第に即座に連絡する。

NTT側は過去の回線状況はわからないらしいので、回線の不具合が発生したら即座にひかりサポートセンターに連絡を入れる必要がある。時間外は録音と書いてあるので翌営業日対応なのかと思いきや、縮退運用しているだけで担当者は裏にいるみたいで一応即座に調べてコールバックしてくれる。

状況を監視する

自宅内に常時外部と通信しているちょうどいい Raspberry Pi があったため、これに mackerel-agent を入れて、年末から監視を開始した。mackerel-agent は特に設定せずとも connectivity を監視してアラートを出してくれる。ネットに繋ってる Raspi があれば一瞬でできるので便利だった (本来の用途ではないが)。

あとアラートにメモを書けるので対応状況をメモったりしていたのと、アラート対応という形にすると、半ば機械的にNTTに電話したりするメンタルになるのでキレにくくなって精神的にも良かった。

固定回線はオワコンだなと思う

回線異常のときいちいちNTTの担当者を家に召喚する必要があるとかキツい。ハードがマンション共有部や宅内にあるから、こういうことになっている。

モバイル回線は外の基地局との通信なのでこういったことはない。固定回線も窓の外から家に中にWiFi吹いてくれればいちいちこっちで応対する必要がない。

2017年 12月 30日

SerDe とは

辞書にないけど、単に Serializer/Deserializer の略です。普通 Serializer/Deserializer は対称なので1つのクラスにまとまっていると便利ですね。Hive とか Java 文脈でよく見ますが特に言語に限りません。

2017年 11月 24日

雑にパスワードを生成する

head /dev/urandom| shasum | xxd -r -p | base64

だいたいこうやってる。

head -c 2048 /dev/urandom| shasum -a 256 | xxd -r -p | base64

とかのほうがいいかも

エアロハンドル用のスマフォマウント

エアロハンドルは断面形状が円形ではないので、市販のほとんどのマウントが使えなくて困ります。ということでなんとかします。

CATEYE フロントライト用の FlexTight マウントを流用する

キャットアイ(CAT EYE) H-34N フレックスタイトブラケット 533-8827N 自転車 front - キャットアイ(CAT EYE)

キャットアイ(CAT EYE)

5.0 / 5.0

FlexTight マウントはバンドを締めつけることで固定する方式なので、固定する部分の断面形状に割と自由が効きます。実際ライトやベルを FlexTight で固定していますがしっかり固定できています。

ということでこれを使ってスマフォホルダーも固定するということを試してみました。

組合せたのは以下のホルダーです。

Tiakia 自転車 スマホ ホルダー スタンド オートバイ バイク スマートフォン振れ止め 脱落防止 GPSナビ 携帯 固定用 に適用 ロードバイク クロス バイク すまほ ホルダー サイクリング バイク用 スマホ固定 に適用 iPhone 11 11Pro Max X XS Max 8 7 6S 6plus プロ マックス 10 galaxy s8 s9 HUWEI Mate P20 Pro P10 lite Sony Xperia Nexus android 3.5-6.4インチ 多機種対応 角度調整 360度回転 脱着簡単 強力な保護 - Tiakia

Tiakia

5.0 / 5.0

アダプタを3Dプリント

フロントライト用の FlexTight マウントは、M4 ビスでバンド本体とライトマウントが固定されているため、ライトマウント部分を外して自作のマウントにつけかえることでいろんなものをマウントできる可能性があります。

そこで既存のスマフォホルダーと FlexTight のバンドを繋ぐパーツを設計して3Dプリントしました。

プリント条件的には

  • 素材: PETG
  • infill: 100%
  • layer resolution: 0.1mm

です。infill は 100% 必要です。90% とかでも急激に強度が落ちるので、強度が必要なら infill は 100% 一択になります。

何度かプリントと設計変更を繰替えして各部のサイズを決定しました。

つけてみる


こんな感じです。といっても普段はスマフォはトップチューブバッグに入れていて、知らない道をナビで走るとき以外は使わないので、あまり使用頻度は高くなさそうです。

ref

https://www.thingiverse.com/thing:2666420

2017年 10月 17日

3Dプリンタ用のエンクロージャをつくった

Original Prusa i3 MK2S 用のエンクロージャをつくっていた。ひとまず形にはなった。

目的

最大の目的は ABS をプリントするときの反りの軽減にある。サポートの上に乗る面などがかなり反ってしまってひどいことになるので、できるだけ抑えたい。

ヒートベッドは稼動していて、brim も使っていればベッドと剥れてしまうことはまずないのだけど、ベッドから離れると急激に温度がさがってしまうので、これをエンクロージャで補いたい。

また動かしてないときに埃がたまらないようにもしたかった。

設計

置き場のスペースの問題からフィラメントは箱の外部に置くこととし、本体だけがすっぽり納まるようなサイズとした。基本的には 500x500x500mm のサイズ。スペースの問題で高さだけ470mmに縮めている。これは内容サイズであって、外形サイズはもうすこし大きい。

板同士は3Dプリントしたパーツで連結することにした。ガチガチに固定するというよりは分解しやすいようにした。

前面は磁石をつかって固定することにした。また、Prusa の操作パネルは前面パネルから外に出るようにきりかきをつくった。

素材

3Dプリンタはそれほどうるさいわけではないので、防音性能というよりは透明にして利便性をあげる方向にする。

素材を検討した結果 PET 板が比較的安いことがわかったので、これを採用することにした。主な要件は以下の通りで、PET であればほぼ条件を満たす。

  • 耐熱
  • できれば難燃
  • 安いこと
  • 加工性が良いこと

加工性は比較的良くないが加工困難というほどではない。

作成

PET板はモノタロウでサイズ指定で切板を売っているので、これを利用した。厚さは3mm。このサイズだと3mmでも結構たわむ。

PET板はアクリルほどの透明度はないのだが、気になるほどではなくて十分透明度があって綺麗だと思う。

3Dプリントするパーツはひたすらプリントしていった。地味にサイズが大きいので30時間以上かかってる。

前面パネルは磁石で固定するつもりだったが、実際に作ってみると重すぎて支えきることができなかった。このため途中で設計を変更してヒンジを追加している。

ヒンジはビスで固定している。

電源の部分は必要なサイズだけ穴をあけている。

効果

まだよくわからない。あんまり効果がない気もしている。気温計を入れるつもり。

備考:メモ

Google Keep にメモった内容をそのままはっておく試み

Prusa 用のエンクロージャ

https://www.monotaro.com/p/3660/3165/
ポリカーボネートで 500x500 で切ってもらうのがいいかな?

ポリカーボネートは耐熱(140℃まで)・難燃(自己消火性)

https://www.monotaro.com/p/3660/0067/
PET のほうがかなり安い。

耐熱(150℃まで)・難燃ではないっぽい


50x50x50cm にする。→ これだと高さでひっかかって入らないぞ

高さ47cm、奥行44cm じゃないと入らない。

奥行き優先?

奥行き50、高さ47cm、幅50cm

全面・背面:50x47*2
側面:50x47 * 2
上・下:50x50

角:8箇所
エッジ:8箇所

コーナーは2つで100mm

470mmエッジ:2箇所 (=コーナー100mm + 170mm + 200mm )
500mmエッジ:6箇所 (=コーナー100mm + 200mm * 2)
470mmエッジフロント:2箇所 (=コーナー100mm + 170mm + 200mm )
500mmエッジフロント:2箇所 (=コーナー100mm + 200mm * 2)

角パーツ:4個
角パーツフロント:4個
170mmエッジパーツ:2個
200mmエッジパーツ:12個
170mmエッジパーツフロント:2個
200mmエッジパーツフロント:6個

磁石だけだと支えられない。ヒンジに