2020年4月25日土曜日

ATtiny85のパルスジェネレータで迷走

この前、PICで簡易周波数カウンタ作りましたが
その際に確認用のパルスジェネレータを作りました。
中央下のやつです。

その途中、ほぼ見えてる地雷を踏んでしまったので(-_-;)
記録しておきます。
何せArduino初心者なもので...

作ろうと思ってた所に奇遇にも、YYさんからスケッチをいただきました!
10KHzのパルスでDUTYが5秒毎に25%⇒50%⇒75%と変化するものです。
やっぱ、ArduinoはPICに比べてとても簡単ですね~
*********
void setup() {
  pinMode(1, OUTPUT);
  
  // timer1 の設定 PWM出力for PB1(Digital 1 Pin)
  TCCR1 = (1 << CTC1) | (1 << PWM1A) | (1 << COM1A1);  
  //timer1 Prescaler 1/4 
  TCCR1 |= (1 << CS11) | (1 << CS10);  
  OCR1C = 200; //PWM周波数 CPUクロック8000KHz / 200 / 4(Prescaler)= 10KHz 
}

void loop() {
  OCR1A=50;  //Duty比 OCR1A/OCR1C=50/200 25%
  delay(5000);
  OCR1A=100; //Duty比 OCR1A/OCR1C=100/200 50%
  delay(5000);
  OCR1A=150; //Duty比 OCR1A/OCR1C=150/200 75%
  delay(5000);
}
*********

早速、マーティーのリビングでやると、
あれっ???
何度見ても、1周期 800μsec・・・1250Hzなのです(T_T)
delay(5000)も5秒ではなく、30秒以上なのです。

YYさんのオシロの動画では、9.96KHz(左下の方に表示)で、
DUTYは、5秒間隔で変化してたのです。
・・・RIGOL欲しいな~^^;

Clock 8MHz(internal)にしても、16MHz(PLL)にしても
1250Hzのまま変化しません(T_T)
なんで~?
PWMのClockが1/8になってるとしか考えられないのです。
ちなみにAliExpressから届いたばかりの新品の生ATtiny85なのです。

Timer1のClock 8MHzのハズなのですが
逆算すると
1250 x 4 x 200 = 1000000Hz = 1MHz
ここを変更してみるも変化なし(T_T)

そうだ!Clock 64MHzにする時は、Fuse bitを書き換えると聞いた記憶が!
64MHzに限らず、Clock変更は、Fuse bitを書き換える必要があるんだ!
今頃、気づくのであります(-_-;)
スケッチを書き込む前に
「ブートローダを書き込む」してFuse bitの書込を行なうと

あっさり、
1周期 100μsec・・・10KHzになりました(^O^)/
Timer1 Clockがやっと8MHzになったのです。
気づくのにえらく時間を費やしてしまいました(-_-;)
まあ、時間かかった分、記憶からは簡単に消えないでしょう^^;

新品のATtiny85は、
Clock:8MHz、Prescale Resister:1/8になってるんですね。
なので、Timer1 clock:1MHzだったのです。
US$ 2.24/2個(11% OFF、4個まで送料無料)
その後、日に日に送料が上がってま~す(T_T)
***10個ならこのリンクが生きてるかと? 追記2024.12.27***

ちょっとFuse bitの勉強しようかと、
ATtiny85 DatasheetでFuse bitを探すと、P32に
6.5.2 CLKPR – Clock Prescale Register
がありますね~

よく読むと、Runtimeで書き換えできるようです。
気になるのが、
*********
2. Within four cycles, write the desired value to CLKPS while writing a zero to CLKPCE.
*********
4サイクル以内でどうのこうのとある。

*********
・Bit 7 – CLKPCE: Clock Prescaler Change Enable 
The CLKPCE bit must be written to logic one to enable change of the CLKPS bits. 
The CLKPCE bit is only updated when the other bits in CLKPR are simultaniosly written to zero. 
CLKPCE is cleared by hardware four cycles after it is written or when the CLKPS bits are written. 
Rewriting the CLKPCE bit within this time-out period does neither extend the time-out period, nor clear the CLKPCE bit.
*********

Google先生に翻訳してもらうと
*********
・bit 7 – CLKPCE:クロック・プリスケーラ変更の有効化
 ・CLKPSE bitの変更を有効にするには、CLKPCE bitに「1」を書込せねばなりません。
 ・CLKPCE bitは、CLKPRの他のbitに同時に「0」が書込された場合のみ更新されます。
 ・CLKPCEは、CLKCE又はCLKPSのbit書込後、Hardwareの4-cycleでクリアされます。
 ・その4-cycle期間内にCLKPCE bitを再書込しても、time-out期間は延長されず、
  CLKPCE bitはクリアされません。
*********

ここにも
• Bits 3:0 – CLKPS[3:0]: Clock Prescaler Select Bits 3 - 0
*********
These bits define the division factor between the selected clock source and the internal system clock. 
These bits can be written run-time to vary the clock frequency to suit the application requirements. 
As the divider divides the master clock input to the MCU, the speed of all synchronous peripherals is reduced when a division factor is used.
The division factors are given in Table 6-15.
To avoid unintentional changes of clock frequency, a special write procedure must be followed to change the CLKPS bits:
1. Write the Clock Prescaler Change Enable (CLKPCE) bit to one and all other bits in CLKPR to zero.
2. Within four cycles, write the desired value to CLKPS while writing a zero to CLKPCE.
Interrupts must be disabled when changing prescaler setting to make sure the write procedure is not interrupted.
The CKDIV8 Fuse determines the initial value of the CLKPS bits. 
If CKDIV8 is unprogrammed, the CLKPS bits will be reset to “0000”. 
If CKDIV8 is programmed, CLKPS bits are reset to “0011”, giving a division factor of eight at start up. 
This feature should be used if the selected clock source has a higher frequency than the maximum frequency of the device at the present operating conditions. 
Note that any value can be written to the CLKPS bits regardless of the CKDIV8 Fuse setting. 
The Application software must ensure that a sufficient division factor is chosen if the selcted clock source has a higher frequency than the maximum frequency of the device at the present operating conditions. 
The device is shipped with the CKDIV8 Fuse programmed.
*********
Google先生に翻訳してもらうと
*********
これらのbitは、選択したクロックソースと内部システムクロックの間のprescaleを定義します。
これらのbitは、Run-Timeに書込して、アプリケーション要件に合わせてクロック周波数を変更できます。
分周器がMCUへのマスタークロック入力を分周するため、分周係数を使用すると、

すべての同期ペリフェラルの速度が低下します。
分周係数を表6-15に示します。
クロック周波数の意図しない変更を回避するには、特別な書込手順でCLKPS bitを変更する必要があります。
1. CLKPCE bitを「1」に、CLKPRの他の全てのbitを「0」に書込します。
2. 4-cycle以内に、CLKPCEに「0」及び、CLKPSに必要な値を書込します。

Prescale設定を変更する時は、割込無効にして、書込手順が中断されないようにする必要があります。
CKDIV8 Fuseにより、CLKPS bitの初期値が決定されます。
CKDIV8 Fuseがプログラムされてない場合、CLKPS bitは「0000」にリセットされます。
CKDIV8 Fuseがプログラムされている場合、CLKPS bitは「0011」にリセットされ、

起動時に1/8のPrescaleになります。
この機能は、選択したクロックソースの周波数が

現在の動作条件でのデバイスの最大周波数よりも高い場合に使用する必要があります。
CKDIV8 Fuseの設定に関係なく、任意の値をCLKPS bitに書込できることに注意してください。
選択したクロックソースの周波数が現在の動作条件でのデバイスの最大周波数よりも高い場合、

アプリケーションソフトウェアは十分なPrescaleが選択されていることを確認する必要があります。
デバイスは、CKDIV8 Fuseがプログラムされた状態で出荷されます。

*********

「1.」と「2.」に
CLKPR:Clock Prescale Register や CLKPS: Clock Prescaler Select Bitsの
書き込み手順が、あります。
特にCLKPSは、4-cycle以内に書き込まねばならないようです。
ん~ん、なんか厄介そうですね~
まさかアセンブリ言語じゃないといけないのだろうか?

それと、Fuse bitがプログラムされた状態で出荷されてるので
起動時にFuse bitからCLKPSにコピーされ、「0011」になるので
Prescale 1/8になるのです。


このブロック図で、System Clockは、CKSELで制御されてます。

Table 6-6の(1)に
出荷時は、8MHzとありますね!
ここにも、default 8.0MHz clockとあります。
*********
6.2.3 Calibrated Internal Oscillator
By default, the Internal RC Oscillator provides an approximate 8.0 MHz clock.
*********
これで新品のATtiny85の挙動と辻褄が合ってスッキリです(^O^)/

さて、CLKPR:Clock Prescale Registerや
CLKPS: Clock Prescaler Select Bits は、
「Runtimeに書き込みできる」とあるのですが、
「CLKPSは、4-cycle以内に書き込まねばならない」ってのが引っかかります。

探してみると~~
ここに「Programming CLKPR」というのがありました!
スケッチのmain()の中で設定できることはわかったのですが
マーティーには「~_BV」や「_BV」は謎のコードであります(-_-;)
どうも「1 << CLKS0」や「0b00011000」じゃダメそうな気配ですね~
***CLKPR部だけ抜粋***
~略~
int main(void)
{
CLKPR=_BV(CLKPCE);
CLKPR=(CLKPR & (~_BV(CLKPS0) | ~_BV(CLKPS1) | ~_BV(CLKPS2) | _BV(CLKPS3)));
~略~
    while(1)
    {
~略~
     }
}
*********

CLKPRレジスタの中身は、これなので
上のは、CLKPS:0b0001 でPrescale:1/2だと思われます。

ここの「Arduinoの高速化」に理由が載っていました。

上の
CLKPR = _BV(CLKPCE);
は、
CLKPR = ( 1 << CLKPCE );

CLKPR = 0b10000000;
の意味で、PORTを制御するC言語のマクロらしいのです

「PB1をHIGH」を例にすると
digitalWrite(1, HIGH);
は、44-cycle clock
PORTB = _BV(1);
だと、3-cycle clockで実行されるということなのです。

つまり、先の
*********
CLKPR=_BV(CLKPCE);
CLKPR=(CLKPR & (~_BV(CLKPS0) | ~_BV(CLKPS1) | ~_BV(CLKPS2) | _BV(CLKPS3)));
*********
は、
Datasheet P32の6.5.2にあった
1. CLKPCE bitを「1」に、CLKPRの他の全てのbitを「0」に書込します。
2. 4-cycle以内に、CLKPCEに「0」及び、CLKPSに必要な値を書込します。
の手順において
「CLKPR=_BV(CLKPCE);」は、3-cycleで実行されるので
「2.」の条件「4-cycle以内」にCLKPSの設定を実行できるのです。

ちなみに、参考サイトの「Arduinoの高速化」には、(日本語で~す!)
「digitalWrite」と「_BV と ~_BV」を比較した波形写真もあり
とても参考になりましたm(_ _)m

では、まずは、新品の生チップに
このCLKPRの設定をしていないスケッチで書き込んでみます。
到着後、初めての書込です。
****スケッチ①*****
void setup() {
  pinMode(1, OUTPUT);       // PWM OUT PB1(pin6)
  
  // Timer1 の設定 PWM出力 for PB1
  TCCR1 = (1 << CTC1) | (1 << PWM1A) | (1 << COM1A1);
  //timer1 Prescale 1/4
  // "|="は、左辺 = 左辺 OR 右辺、上のTCCR1で設定したBITを消さないため 
  TCCR1 |= (1 << CS11) | (1 << CS10);  
  OCR1C = 199 ; //周波数固定、CPU Clock 8000KHz / (199+1) / 4(Prescale)= 10KHz

  OCR1A = 67; // Duty比 約30%
}

void loop() {
  // Freq. Duty固定なので、なにもなし
}
*********

Arduino IDE Ver.1.8.3の設定はこれです。
Timer1 Clock:CPU
Clock:8MHz(internal)
Arduino UNOの書込機を使ってるので[Arduino as ISP]です。
[ブートローダー書き込む]はしません。

AliExpressから届いた生チップで、これが1回目の書込です。
[書込装置を使って書き込む]だけします。

電源ON!
約800μsecなので1250Hzです。

この前、PIC 16G1827で作った周波数&DUTY計測器では、
1246Hzとでました。
Timer1 Clock = 1246 x 200 x 4 = 996800Hz ≒ 1MHz
になっているということです。
工場出荷時のSystem Clock:8MHzのハズなので
CLKPRのPrescale設定は、1/8になってるということになります。

では、void setup() { の最初に次のスケッチを追加してみます。
( 1 << CLKPCE ) も4cycle以内に実行されれば、
Prescaleが1/1に設定されるはずです。
*********
void setup() {
  // System Clock Prescale Initialize
  CLKPR = ( 1 << CLKPCE ); // CLKPR書込フラグセット
  CLKPR &= 0b00000000; // CLKPS:0000・・・Prescale 1/1

  pinMode(1, OUTPUT);       // PWM OUT PB1(pin6)


以下同じ
*********
これも[ブートローダー書き込む]はしません。
このチップさん2回目の書込です

[書込装置を使って書き込む]だけします。

電源ON!
お~っ!周波数が高くなってる!
ちと予想外であります。

100μsecなので10KHzです!
あっさりできてしまいました!

こっちも、10050Hzになっています。
「CLKPR = ( 1 << CLKPCE ); 」でも4-cycle以内に実行されるってことですね。
「CLKPR = _BV(CLKPCE);」と同じで3cycleで実行されてるんでしょう。

ただし、これは、Fuse bitが書き換えられたわけではないので
先のCLKPRの設定がないスケッチ①を再度書き込むと
1250Hzに戻ります。
Prescale 1/8に戻って、Timer1 Clock 1MHzになるのです。
これは、予想通りの挙動です^^;

では、
先のCLKPRの設定がないスケッチ①を書き込む前に
「ブートローダーへ書き込む」します。
設定項目は最初と同じです。

その後に、CLKPRの設定がないスケッチ①を
[書込装置を使って書き込む]します。

目出度く10KHzになりました。

スケッチでPrescaleを設定して
ダイナミックに変更することができることがわかったのですが
Prescaler前段のMaster Clockを8MHzや16MHzに変更したり
Timer1 Clockを32MHzや64MHzに変更するには、
結局「ブートローダーを書き込む」でFuse bitを書き換えしないと
反映されないのです。
ん~ん、今の所、使い道は、なさそうですね~

今の所、マーティーの用途では、
Arduino IDEの「ブートローダーを書き込む」で事足りると思います^^;

また、AVR StudioってのがFuse bitをGUIで読み書きできるようですが、
これもInstallしてません。

まあ、「_BV();」や「~_BV();」では
僅か3cycleで実行できて高速にポート制御できるのってのが
分かったのは収穫であります^^;
digitalWrite(); の代わりに
非常に高速にPORT制御したい時には、忘れずに使いたいものです。

それと「~」文字はフォントによって、位置が変わるんですね~

ATtiny85は、Timer Clockに64MHzが使えて、8ピンだし重宝しそうです。
16bit Timerがあれば更にいいのですがね~
まだまだ遊んでもらえそうなので(-_-;)
ちょっと在庫増やしておこうかな~^^;
10個だとここが安そうです。
US$ 12.31/10個(送料無料)
まあ、秋月電子の130円/個とほぼ同じだけど^^;

忘れた頃にまた見ないといけないので
後でよ~く眺めようと思ってる参考サイトを記録しておきます。

1.これ
「James Lewis」さん「Benchmarking Arduino’s digitalWrite() with a Logic Analyzer」
 Just how fast is digitalWrite()?
コードの違いによる、ポート制御の時間差の波形が面白い。

2.これ
「AVRWiki」の「I/O入出力ポート」ってところ。
I/Oレジスタ、入出力ポートの使い方。
一部のAVRには、PINB命令でbit-nに1を書込と、
PORTBのbit-nが反転するというおいしい機能があるそうです。
ATtiny85は使えそうです。

3.これ
Fuse bit(byte)の書き込みは、間違えると大変ですが
「しなぷすのハード製作記」さん
「「ArduinoISPを汎用AVRライタとして使う(2)」
Fuse bitの詳しい解説と
avrdudeをコマンドラインでのFuse bit(byte)の読/書があります。

4.これ
Qiitaの@autumn-positionさんの
「Arduinoプログラムの高速化」
基本的なArduino命令の書き換えが参考になります。

5.これ
「プログラミングテクニック集キヤミー 」さんの
「Arduino処理速度とメモリー使用改善の策」
ハンドブック的に使えそうです。

2020年4月19日日曜日

3Dプリンタ その44(巷で噂のマスクをTPUで格闘)

3Dプリンタ その43」で初TPUやって、
巷で流行ってるマスクをTPUでプリントしてみようと思いました。

一応、一言^^;
これは、3Dプリンタ・マスクをTPUでプリントした格闘の記録です。
使用を推奨する為ではありませんのでご理解願いますm(_ _)m

さて、TPUの手持ちが黒しかないので、Amazonで白のTPU 500gを見つけて、
あまり考えずにポチったら中国からの配送で、丁度2週間後に到着(T_T)
FIYA wigsブランドかと思ったら店の名前で、中身はノーブランドっぽい?
今見ると、どうやらBestoreというブランドみたいです。
ポチった時は1,887円だったのですが、2,387円に値上がりしてますね~(T_T)
注:500gです。
Amazonはここから

郵便受けに入ってましたが、外箱は、見慣れた茶色テープぐるぐる巻で
AliExpressにこんなでかいの注文してないのにな~
と思って外側の段ボールを開封すると、Amazonに注文してたフィラメント!
中身も茶箱だ~!茶箱トラウマでちと不安が過ぎります(-_-;)
ラベルはこれのみ。
ブランド名はどこにもないです。
SUNLUの茶箱ORANGEの時も茶箱にブランドなしのラベルだけでした(-_-;)
不安は高まりますが
元々、有名ブランドじゃないとこで買ったので覚悟の上であります。
中のリールは、乾燥剤入の真空パックでした。
500g品なので、リールの径は、1Kg品と同じで厚みが約半分です。
触った感じでは、SUNLUの黒TPUより微妙に硬い感じです。
これでスライスします。
バージョンアップは積極的にしない方なので...(-_-;)
まずは、前回のSUNLU TPU+と同じく
[FABtotum]の[TPU]の中は[TPU]を選択して
ノズル径:0.3mm、レイヤー:0.2mmでいきます。
SUNLU TPU+(黒)は、箱の推奨:185~215℃ では、
ノズル:205℃で、そこそこ上手く行ったのですが
ベッド:70℃で食いつきが良すぎて、剥がすのに苦労しました。
4mm厚のFR4ベッドです。
今回の謎のTPUの箱には、190~230℃
ちと幅が広いですね~(-_-;)
ベッドは、50℃まで下げるとちと心配なので、55℃
TPUは、スロート温度が上がり過ぎるとまずいので
ノズルは低めの207℃で手を打つことにします。
ほんとは、まず温度タワーとかプリントすればいいのでしょうが...
感に頼るのは好きな方です^^;
リトラクトは、1mm
まあ、気休めでしょうが、どうしてもゼロにしたくなくて...^^;
Speedは、この前のSUNLU TPU+と同じで
基本 20mm/min、Travel SpeedだけPLAと同じにしてます。
Initial Layerは、更に1/2の10mm/minです。
レイヤーファンは、いつもこの設定です。
3Layer目辺りで徐々に回り始め、10Layer目でフル回転になります。
そういえば、肝心のマスクデータの紹介を忘れておりました。
ここの「PITATT 3D print mask」
「ワンタッチでフィルター交換できる3Dプリントマスク」
2種類の大きさ、SMALLとREGULARのデータが公開されています。
誠にありがたいことでありますm(_ _)m
データに利用規約のPDFが同梱されているので読んでおきます。

2パーツ(outer、innner)で構成されていて、
間にフィルターを挟めて、取り換えできる構造です。
outerとinnerを並べて、スライスします。
傾斜50°以下のオーバーハングの赤い警告がでてますが、
このままやってみます。
サポート不要ということで、この位のBRIMでいけるでしょう。
どひゃ~っ!マーティー初の3時間超え!
予想時間:8時間2分であります。
27gなので、フィラメント材料費:102円ってことになりますね~

Repetier-Host Ver.1.6.0に読み込みます。
このバーションの画面デザインが好きなんです^^;
 こっちでは予想時間は、8時間を僅かに切ってます。

マーティーの3Dプリンタ Geeetech i3 Pro Bは、
3Dプリンタ その41」でキャリッジを5mm厚の総アルミに改造して、
3Dプリンタ その42」でスロート・ラジエータを付けいています。
ちなみにフィンは、10円玉ではなくて~
0.5mmの銅板をΦ30にカットしたものです^^;
TPUでは、予想以上にこれが、効果を発揮してるようです。
この日は冬が戻ったのか、室温13.4℃、エアコンはOFFです。
フィラメントを挿入して、少し出した感じでは
SUNLU TPU+よりも出がいい感じです^^;
午前9時5分、プリントスタート!
outerパーツのBRIMは外側からプリントしていきます。
いつの間にかベッドが傾いてるようで、右側がやけに薄いです。
3D TouchもIR Senserも調子が悪くなり、
オリジナルのメカSWで中央のZゼロ調整してるだけです。
この時、9:10
9:21
動きはゆっくりなので、プリント中にベッド調整用の右側のボルトを
少し締めてベッドの右側をちょっと下げていき、
BRIMの内側では良くなってきました。
9:31
innerパーツのBRIMはいい感じです^^;
最初の方は、なかなか目が離せませんね~
9:36
この辺までできると大丈夫でしょう!
9:38
でも、造形物の幅がわずか3本分なので、心配は残ります。
ちょこちょこ確認する必要はあるでしょう。
まあ、異常があった時は、中断してやり直すしかないんですが...
9:55
横から
10:38
やっとここまで、
12:07
時々、糸引きがでますが、少ないです。
12:11
12:53
穴部分の糸引きはありません。
手前のouterパーツと奥のinnerパーツ間にも糸引きはないです。
意外とRetract 1mmが効いてるようです。
13:52
四角穴が今一かな~
小さな穴には糸引きがあります。
13:58
こっちの四角穴は良さげです。
14:01
この辺りを動画で!
14:40
 あと2時間ちょいかな?
15:37
かなりいい感じでできてます。
15:38
糸引きもなさそう。
16:37
裏側から。
糸引きがかなり出ると思ってたら、殆ど出てません。
outerパーツの右の方にモジャモジャがあります。
16:38
既に手前のinnerは、完成して、完璧に近いです(^O^)/
16:38
もうすぐかな~
16:39
スローとのラジエーターがなかなか活躍してくれたようです。
16:44
 innerの穴がここまでキレイにできるとは思いませんでした。
16:45
あと少し!
16:47
最後の1層か!
16:48
できました!
9:05~16:48なので7時間43分
上方から。
outer(左側)の上の方のモジャモジャが気になります。
オーバーハングでもないんだけどな~
真上から。
outer(上側)の湾曲の所は、傾斜が50°以下で警告が出てましたが
キレイにできたようです。
では、TPUの柔らか感を動画で!
油絵のヘラで造形物を取り外します。
よく密着していますが、ベッド70℃の時より剥がし易いです。
冷えても剥がれないので、ひょっとしてベッドOFFでもいいのかも?
ヘラは必須ですが、わりとすんなり剥がれました^^;
outer(手前)の上の方が段差の筋が大きいです。
裏側で層の段差が目立ちます。
TPUが柔らかいために、振動で揺れてズレるようです。
Travel 80mm/minで速めなので振動も大きいのかも?
こっちはモジャモジャがでています。
オーバーハングの部位ではないんですが、表側に突起がある部位です。
正面から
穴は糸引きもほぼなしでキレイにできてて、修正不要のようです。
こっちの角穴はキレイですが、
こっちは、ゴミも付いて、やや汚いです。
左右で違ってるので、執筆中に改めてTravelだけを見てみたら
このTravelの向きが原因かな~
outer(上側) ⇒ inner(下側)へのTravelが行きか戻りかの違いのようです。
Travel Speedにも関係してるのでしょう。
outerとinnerの間には、全く糸引きはないんだけどな~
これは、innerパーツ
かなりバッチリできています。
さて、BRIMを取り外さないといけませんが
柔らかいのでこの小さなハサミを使うことにします。
切り取りました!
outerの裏側にinnerを被せてみました。
ひっくり返して表から
不織布がちょっとだけあったので
inner取付部に切り目を入れてouterの裏に乗せて
innerを装着して固定します。
上側が鼻部分になるので、不織布を飛び出させておきます。
表側、上の鼻の部分が飛び出し部分を
ハサミでカット
仮の紐を付けて試し装着!
鼻から上は謎の人物ということでモザイクで失礼します(-_-;)
フィット感は思ったよりいいです。
鼻の部分のRが大きい感じで隙間があります。
顎部もちょっとだけ長いかな?
90%位に縮小するともっとピッタシなるのかも?
ちょっとした買い物では使えそうですが、
肌に密着部分は、通気しないので、長く着けてると蒸れます(T_T)
飛沫や花粉がある程度は阻止できると思いますが、
フィルターの素材や密着具合でも変わるので保証されるものではありません。
まあ、市販の家庭用マスクもフィルター素材しか試験されてませんが...
ヒモですが、作者さんのサイトのMovieでは
手芸用の平ゴム、使い捨てマスクのゴム紐、輪ゴムで解説されています。
今は、ゴム紐類でさえどこも売り切れなのでこれを使ってます。
マーティーは、古いアンダーシャツを小さくカットして
油拭き用として使っているのですが、
その袖や裾の二重になった所を切って紐状にします。
まあ、布をミシンで縫って作ってもいいのでしょうが...
メリヤスだと思いますが、丁度いい感じで伸び縮みするのです。
先端をステップルで止めて
先端を二つ折りにします。
紐の取付部は脱着式でとても良くできた構造で
この溝状の挿入口にスライドして入れれば、
紐の取り付け完了です!
鼻上部のRが大きめで隙間が気になったので
鼻の部分だけ90℃のお湯に30秒ほど浸けて、熱いのでお湯をよく切って
顔に当ててマスクの端の鼻の部分を摘むと整形すると、
フィット感が良くなりました。
息を吐く時はほっぺた部分からもやや漏れてますが、
吸う時は、ほっぺた部分が密着するのがわかります。
取替用のフィルターの材料も軒並み売り切れであります。
ゴム紐が劣化して使えない古いマスクが見つかったので、これにします。
家のマスクの在庫もかなり減ってます(T_T)
両側の紐部分をカット、真ん中もカットして二等分します。
inner取り付け穴の間隔にほぼ合います。
脱着式のinnerを取り付けました。

続いて、Smallの方もプリントしました。
こっちは小さいので1時間程短くなり7時間ちょっとです。
これは、ほとんど放置でプリントしました。
これも写真左側上(プリント時の右側)の品質が悪いです。
内側の壁の1層だけが、表面が糸引きみたいに定着してないのです。
Regular(中央)とSmall(左下)を並べました。
これも鼻の部分だけ90℃のお湯に30秒ほど浸けて、お湯をよく切ってから
顔に当ててマスクの端の鼻の部分を摘んで整形しました。
Regularの裏にSmallを被せるとこれ位の差です。
上がRegular
下がSmall
単純に小さくしたものではなく、別人の顔に合わせてあるようで、
顎の所も形状にも差があります。
子供用というより、女性用と男性用って感じです。
この手の丸ゴム紐はやや太いので、先端を結んで固定するには、溝幅が小さいです。
マーティーは、小顔というわけではないですが
このSmallでも顎部分が少し短いけど、なかなかフィットします。
プリントの質が悪い所がほっぺたに当たると、ちょっちガザガザします。
何の条件の差かわかりませんが、Smallの方が、プリント品質が悪いので
アクリル樹脂専用接着剤で整えることにします。
アクリサンデーと同じ成分の二塩化メチレン(ジクロロメタン)
使用は屋外で、マスク必須です!
これは全然ダメですね~
TPUは溶けなくて、吸い込んで膨張するようです。
レイヤーの一本一本が伸びて浮き上がって、逆に悪化しました(T_T)
この前のSUNLU 黒 TPU+で確認済の
セメダインのABS用接着剤を塗ることにします。
成分は、これです。
どうやらTPUには、ABS用接着剤の方がいいです。
二塩化メチレンで伸びきった後で汚いと思ったら、
これも多量に付けると膨張して伸びます(T_T)
二塩化メチレンよりは溶けてる感じです。
半乾きの所で押さえ付けないと浮いてきますね~
これもやってみました!
矢崎化工株式会社のイレクターパイプ専用の接着剤であります。
成分は、シクロヘキサノン、MEK(メチルエチルケトン)、トルエン
いずれも取り扱いには厳重注意の溶剤であります。
二塩化メチレンよりは、表面が溶けてくれますが、
ブツブツが取れるほどではなく、膨張します。
ひょっとしてアセトンがいいのかもですが、手持ちがありません。
柔らかいのでブツブツなどはヤスリで削れません(T_T)
KOTELYZERで温めて溶かすしかなさそうです。
レイヤーの付きが悪い所も修正できますが
Infillが少ない所は、温めすぎると凹みます。
TPUは紙ヤスリとかで削れないので、修正するのは難しいですね~
outerをもう一個プリントしました。
Travel 80⇒40mm/minに落とし、Retract無し、Infill 100%でやったら
こんなに酷い糸引きが~~(T_T)
その他の設定は、先と同じ
ノズル 0.3mm 207℃、Layer 0.2mm、20mm/min、ベッド FR4 55℃ です。
Retract 1mmの効果は、かなりあったということになります。
穴もこんなに酷いことに(T_T)
大半の糸引きは、ハサミでカットしましたが、
それでもどうしようもなく醜いので
ダメ元でこのバーナーで炙ってみました^^;
炙り方がかなり難しいです。
バーナーを動かしながら10秒ないくらいかな
表面が溶けて光りだしたら、炙るのを止めると、じわっと表面がキレイになりました。
Infill 100%にしてたので、凹むことはないですが、気をつけないと変形します。
溶けるだけで伸び縮みはほぼないので、Wallが浮いてる所とか
大凡の修復はできた感じです。弾力も失われないです。
ブツブツもわりとなだらかになります。
ただ、溶けた所は、ちょっと炙り過ぎたのか、
テカるのと、僅かに黄色っぽくなってます。
先のKOTELYZERでコツコツとやった方が良さそうです。
表から。
穴の中の糸引きも取れないことはないですが、小さい穴は難しいです。
炙りすぎると穴同士の架橋が縮んで細くなりそうです。
上手いことやればキレイにできそうですが、難しいです。
Infill 100%は必須でしょうが、慣れると炙りが一番手っ取り早いのかも?
仕方ない、もう一個やるか!
Retract 1mmで他は上のと全く同じにしました。
見事なまでに糸引きが激減しました。
ちょっとモジャモジャが出てます。
Retract 2mmにすると減るのかな~?それとも悪影響がでるかな~?
矢印部の段差は、造形物が薄くて高くなると
TPUが柔らかいのでプリント時に揺れて発生するみたいです。
[Z Hop When Retracted]ONにすると改善するかな~?
裏側。
どうしても左側(プリント時は右側)の品質が悪いです。
これも上の方で発生してるので、ノズル温度ではなさそうです。
プリント時に揺れてるんだろうな~
[Z Hop When Retracted]で抑えられるかもしれないな~?
表側。
穴の中の糸引きも激減です。
Retract 1mmでこんなに差がでるとは!
これは、先のRetract無し、他の設定は全く同じです。

ちなみにレイヤーファンOFFの場合もやりました^^;
矢印部から下が全体的に凹み、
オーバーハングが最大になる赤丸部(顎部)は、かなり凹みました。
写真の下側が、プリント時は上になります。
ん~ん、もうひとつプリントしたくなりました~^^;
[Retraction Distance]1mm ⇒ 2mm
[Z Hop When Retracted]ON
[Z Hop Height]0.2mm
Retractする直前に0.2mmノズルを上げて移動するという設定を
やってみたいのであります。

ちょっと途中で見に行くと、
RetractでZ Hop(ノズルが0.2mm上昇)する時に
一瞬停止状態になるので穴の所で糸引きがでてます。
Z HopのSpeedを上げるといいのかもしれませんが、
Cura Ver.3.5.1では、設定はないようですね~(T_T)
Z軸そのももの速度を上げればいいのかな? Firmかな~?
丁度見に行ったらモジャモジャの所だったので、原因が分かりました!
右側のモジャモジャは、写真で左からTravelで移動してきて入る所ですが
紐の取付部が太くてやや盛り上がってるみたいで、
Z Hop 0.2mmしてるけど、ノズルがあたって
造形物が歪んだ瞬間に空中に出し始めていたのです。
他も部分も、プリントしている時は、ノズルが接触状態にあり
造形物が薄くてTPUが柔らかいので、高くなると、全体の重みもあって
ノズルの動きで造形物の揺れが大きいのです。
特に、TPUの場合、サポートをつけるしか改善策はなさそうです(T_T)
右側も、Z Hopなしの時より汚いですね~(T_T)
修正はKOTELYZERでやるのが、最も良さそうです。
表はまあまあの出来です。
Z Hop無し、Retract 1mmの方が良さそうです。
ん~~~ん、ここらで諦めようかとも思いましたが、
どうしてもキレイにプリントしたいな~
もうこうなったらモデル自体ににサポート付けるしかないです^^;
Fusion360にSTLファイルをアップロードして
壁厚0.3mmの下駄を履かせて
前側をカットしてサポートにします。
こんなサポート下駄です。
一体でSTL化するので一体でプリントされます。
所が、Cura Ver.3.5.1でスライスすると
追加したサポート部分は、Travelのラインができるだけで
造形されないのです(T_T)
まさか、Fusion360でSTL保存する時に失敗したのか?
Line Width:0.3mmの設定に対して、サポートの壁厚 0.3mmでした(-_-;)
[Print Thin Walls]にチェックを入れると
サポート部もプリントするようになりましたが、
やけにTravelラインだらけです。
まあ、サポート間のTravelなので問題ないのですが、効率悪そう(-_-;)
で、[Horizontal Expansion]0 ⇒ 0.01mmにしてみると
いい感じになりました。
サポート下駄の肉厚を0.3mmより僅かに太くしていけばよかったんですが...
水平方向の肉厚が、0.01mm太るだけなので本体への影響はないでしょう。
これでやることにします。
ちなみにプリント時間は、5時間 ⇒ 7時間にUPであります。
[Z Hop When Retracted]OFF
[Retraction Distance]1mm
に戻してます。
まずは、快調にプリントできてるようです。
本体とサポートの間とか糸引きがあるけど、この程度ならいいでしょう。
できました!
サポートなしでは、上側(顎部)がレイヤーズレで段差になってましたが
とてもキレイな曲線になりました\(^o^)/
やはり、プリント中に揺れてたのが原因だったんですね。
横から見ても上側(顎部)の曲線がキレイにできてます。
頂点近くはオーバーハングに近いのでレイヤーファンの効果大です。
表側、一見キレイにできてるかと思ったら、
矢印の所に、糸引きが増えてますね~
なかなか上手くいかないもんですね~
まあ、この程度の糸引きはカットすればいいのですが、
悪化したのでどうも気に入りません^^;
糸引きが出てる辺りの1~88 Layerまでを上から見ると
前面に突き出たTravelライン(濃い青線)が多いですね~
サポートつけてライン取りが変わったようです。
これは、オリジナルのサポートなしの場合
前面に突き出たTravelライン(濃い青線)が少ないです。
前面の糸引きを減らすべく、色々、設定をイジっていると
どうやらこれがいいみたいですね~
この設定をイジりました。
[Optimize Wall Printing Order]:ON
[Print Thin Walls]:ON
[Horizontal Expansion]:0
ちなみに設定の挙動については、
スライサー Ultimaker CURA 設定完全攻略 Ver4.4.1対応版
を活用させていただいておりますm(_ _)m
全体の1~88 Layerまでを上から見るとこれ、良さそうです。
さすがに疲れてきたけど、これで最後だ~~
そうだ、サポートつけたので、最初のTravel 80mm/minでいいんじゃないかな。
Retract 1mmの効果が大きかったので2mmで行くことにします。
主な設定をまとめると、
[Layer Height]0.2mm
[Line Width]0.3mm
[Optimize Wall Printing Order]ON
[Print Thin Walls]ON
[Horizontal Expansion]:0
[Infill Density]100%
[Retraction Distance]2mm
[Retraction Speed]20mm/min
[Print Speed]20mm/min
[Travel Speed]80mm/min
[Z Hop When Retracted]OFF
[Enable Print Cooling]ON

で、待つこと7時間弱、できました!
これで、Smallの7枚目!
50時間弱プリントしてることになります。
表側の糸引きはほぼ皆無です\(^o^)/
糸引きがだいぶ減ってます。
[Retraction Distance]2mm
[Travel Speed]80mm/min
一つ前のは、これ。
[Retraction Distance]1mm
[Travel Speed]40mm/min
でも、サポートの所が妙です。
モデルは、厚み0.300mmで描いています。
この設定で、細い壁をやると、キレイにプリントできてるのに
[Print Thin Walls]OFF
[Horizontal Expansion]0.01mm
この設定で細い壁をやると、
[Print Thin Walls]ON
[Horizontal Expansion]0
ノズルが小刻みにギザギザ動作でプリントしていました。

Curaのスライス結果を見直して、拡大すると
こんな妙な転々のTravelが発生してました(T_T)
なぜか片方のサポートだけなのです。
やっぱ[Line Width] 0.3mmなので、
モデルのWallを0.31mmとか僅かに大きくするべきでした(-_-;)

さて、サポートを取り去っていきますが、
小さいハサミでざっくり切り取った後、裏返して
曲面なので、0.2mm厚のオルファカッターで歯を湾曲されて、切っていき、
裏返しして、サポートを取ったところ。
左右に縦線の跡が2本ずつ残ります。
最後の方は、この「KEIBA アングルニッパー HAC-D04」ってので、仕上げします。
ブツブツの塊も取っていきますが、毛玉を取る感じで時間が掛かります。
2000円をちと超えますが、日本製を実感できる工具です。
Amazonはここから

最後のサポート付きでプリントした2品です。
ようやく満足いくものができました\(^o^)/
上が7回目、下が6回目
上の方がRetraction Distance 2mmですが、穴の糸引きが多いですね~
僅かですが、四角穴の出来も、上の方が悪いです。
Retraction Distance 1mmで十分のようです。

マーティーは、ここ数日、近くの買物の時だけ
一発目のRegularサイズのマスクをしています^^;
やはり、ほっぺたや鼻部分からの漏れは少なからずあります。
市販のマスクや不織布がどうしても手に入らない場合に
ティッシュペーパーを4つ折りでフィルター代わりにすれば、
なんとかマスクになりそうです。
スーパーのレジでは、どこも透明ビニールのカーテンが付いてます。
もはやマスクだけではダメだということですね~(T_T)

最後にマスクの箱の表示を色々見てみました。

まずこれは、
・細菌を含む飛沫:BFE(Bacterial Filtration Efficiency)試験
・ウイルスを含む飛沫:VFE(Viral Filtration Efficiency)試験
・花粉:花粉捕集効率試験
・微粒子:PFE(Particle Filtration Efficiency)試験
なので、花粉、微粒子、飛沫の大きさの試験がやられてます。
これは、試験名はないですが
具体的に「10~25μm未満の粒子」と載ってますね~
家庭用の不織布マスクはどれもこんな性能だと思われます。
俗にPM2.5:2.5μm、飛沫状態でなく空気中に漂う場合は、
細菌:1μm、ウイルス:0.1μm らしいです。
これも小さく「PFE/VFE/BFE試験」とあります。
これも同じ試験です。
この三種の「PFE/VFE/BFE試験」が標準のようです。
これは、試験名はなく、この注意書きだけでした。
一般財団法人 カケンテストセンターのここで、
BFE、VFE、PFE試験を行っているようです。
メルトブローン不織布を使ってないと
試験しても著しく低い結果が出るのでお勧めしないってことが、
依頼前の確認用のフローチャートに載ってます。
試験方法についてはマーティーにはよくわかりません(-_-;)

しかも試験はマスクとしてではなく、フィルターだけの性能試験なので
マスクの装着状態によってどうにでも変わるということですね~

日本では、サージカルマスクも不織布製マスクも、性能基準・認可制度がなく
サージカルマスクに該当するか、判断の根拠がないのが実情らしいです。

一応、読んだ資料のリンクです

・北里大学のこのPDF
 「動物とヒトのコロナウイルス」
 ー2019新型コロナウイルスの流行を受けてー

・厚生労働省のサイトのここ
 「第10回 除染作業等に従事する労働者の放射線障害防止に関する専門家検討会資料
 の資料8(PDF)は、
「日本における産業用防じんマスク、医療用マスク及び家庭用マスクの実態」
(平成24年4月の)

・JHPIA 一般社団法人衛生材料工業連合会にここには、「マスクの自主基準」、
 その中のPDFに「マスクの表示・広告自主基準」がある。