ラミネーター修理

プリント基板のトナー熱転写に使っているアイリスオーヤマLTA42Eが壊れたので修理する
症状:
・消費電力は250W程度あるのでヒーターは切れていない
・見た目動作は正常なのだが温度が上がらない
・所定の温度になるとLED点滅->点灯にかわるが表示上点灯になっても温度が上がっていない
・120~130℃になるはずが60℃にもなっていない感じ
・センサーが怪しいがセンサーはNTCサーミスターと思われるもの常温実測100kΩで壊れていないような気がする

KLA4もついでに改造


2021-06-16

分解してみるも原因らしき個所は発見できず

R0049153.jpg

制御回路。仕組みは簡単なので回路を全部すててデジタル制御に改造してしまう事にする

R0049161.jpg

温度センサー。この機種は3段階に温度調節できる。温度変化によるダイオードの順方向電圧変化を使用しているのかと思ったがこれはNTCサーミスタ。半導体は150℃で壊れるので半導体センサの温度計測範囲は125℃までが一般的。NTCサーミスターは半導体センサーなら確実に壊れてしまう250℃程度まで使える。温度変化により抵抗値が大きく変化するのでオペアンプで電圧増幅しなくても使える。NTCサーミスターの特性について調べるとちょっと面倒なことになっている。三菱マテリアル NTCサーミスタの基本特性?抵抗-温度特性
NTCサーミスターの抵抗値は
 抵抗値=温度25℃における抵抗値 exp (B定数*(1/センサー温度[ケルビン]-1/(25[℃]+273.15[K]))
という式で表す。これは近似式。B定数が固定値なら センサー温度= の式に変換するのは容易。ところが厳密にはB定数も温度の2次関数になっている。B定数が温度の2次関数だと式全体では3次関数になるので温度を計算で求めるためには3次方程式の解の公式で計算すればよいが3次方程式の解の公式は虚数計算が必要になる。2次方程式の解の公式は中学生で学習する見慣れたやつ。これの3次方程式版があって虚数計算が必要になりMPUには重荷。プログラミングする上でも「その項は虚数になる可能性があるか」「32ビット浮動小数で桁落ちしないか」等を考えるのは面倒。更に3次式の解は3つありそのうち一つだけが正しい温度を表す。こういった苦労をして得られるものは温度でしかないので代数的に解くのは合理的ではない

R0049156.jpg

センサーが当たる箇所

R0049157.jpg

2021-06-17

回路図。ユニバーサル基板で作るかもしれないのでエンコーダーのローパスフィルターやサーミスタのローパスフィルターを入れるか否かは実験してから決める。サーミスタは中国製のMF58の100kΩを注文しておいた。届いたら実験する。表示は7セグメントLEDディスプレイTM1637。消費電力が大きいのでノイズ発生源になりうる

thermisterNTCsch.png

2021-06-19

NTCサーミスターの温度-抵抗値特性近似式はいくつかある
グラフは温度実測値と近似式で求めた温度との差。縦軸計算値と実測値との温度差、横軸温度。メーカーが公表している実測値はどの近似式に最も適合するかを表す
・黒線:一番良く見るNTCサーミスタ特性式
     B定数は25℃と50℃の実測値を使ってサーミスターメーカーが計算したもの
     データシートには必ずこの値がある
・青線:Steinhart-Hart式
     3点の実測値から近似式を求める方式
     大抵のNTCサーミスターは実測値が公開されている
     データシートに掲載されていなくても別のところに掲載されていることがある
     3点の選び方によって結果は異なる
・赤線:三菱マテリアルの式
     黒線の式をB定数を2次関数にすることで補正した式
     Steinhart-Hart式同様3点の実測値が必要
実測値は中国製のNTCサーミスターMF58の100kΩの物。50,100,150℃の時の実測値を使用した。このグラフからわかる事はMF58の特性が三菱マテリアルの式との相性が良いということで他のサーミスターでも同様の傾向を示すかは不明

gosa.png

各式のまとめSteinhart-Hart式と三菱マテリアルの式はデータシートに実測値が掲載されていないと使えない

●NTCサーミスタ特性式

 式 T=1/(LN(R/Ro)/B+1/To)      eq1

 T:絶対温度[K]
 R:温度Tにおける抵抗値[Ω]
 Ro:25℃における抵抗値[Ω]
 To:25℃の絶対温度[K]=25+273.15=298.15[K]
 B:NTCサーミスターのB定数
 LN:自然対数

 B定数の定義は
 B = LN(R/Ro) / (1/T-1/To)

●Steinhart-Hart式

 式 T=a+b*LN(R)+c*LN(R)^3      eq2

 T:絶対温度[K]
 R:温度Tにおける抵抗値[Ω]
 a,b,c:データシートから温度と抵抗値の実測値を3組上記式に代入し連立方程式を解いて求める
 LN:自然対数

●三菱マテリアルの式

 一番上のNTCサーミスタ特性式と同じであるがB定数を温度の2次関数

 Bt=C*T^2+D*T+E とする        eq3

 Bt:温度t[K]におけるB定数

 温度Tn[K]におけるB定数Bnを
  Bn=LN(Rn/Ro)/(1/Tn-1/To) <-これはB定数の定義そのもの eq1をB=に変換しただけ

 Rn:温度Tnにおける抵抗値[Ω]
 Ro:25℃における抵抗値[Ω]
 To:25℃の絶対温度[K]=25+273.15=298.15[K]
 LN:自然対数

 としデータシートから温度と抵抗値の実測値を3組上記式に代入しB1,B2,B3を求める
 3つのB定数と温度を以下の式に代入して係数C,D,Eを求める

 C=((B1-B2)*(T2-T3)-(B2-B3)*(T1-T2)) / ((T1-T2)*(T2-T3)*(T1-T3))
 D=(B1-B2-C*(T1+T2)*(T1-T2)) / (T1-T2)
 E=B1-D*T1-C*T1^2

 求める温度は3次関数になるためMPUでは計算困難。以下の方法でこれを回避

 1.B定数はデータシートにあるB定数をそのまま使いeq1で温度を求める
 2.その温度におけるB定数をeq3で求める
 3.eq1に上記B定数を代入し温度を求める
 4.求めた温度からB定数を計算し直し、計算し直したB定数からeq1で温度を計算し直す
   これを2~3を数回繰り返す 3回程度繰り返すと値(=温度)は収束する

2021-06-25

プログラムの骨組みが完成したので実験。このサーミスターはB値が2000程度しかない。注文したサーミスターは4100なので部品が来るまでしばらく中断

R0049181.jpg

2021-07-03

センサーが届いたので動作確認。沸騰水で96度を表示する。式は三菱マテリアルの物を使っている。校正はB定数のE項を修正すればいいらしいので補正値をexcelで計算して合わせる

R0049214.jpg

対流が激しく計測値は安定しない

R0049217.jpg

エンコーダーとディスプレイを追加。スイッチングレギュレータを注文してあるがまだ到着していない。ノイズが大きすぎる場合はシリーズレギュレータに変更する。ArduinoはPro MiniからNanoに変更。Nanoは書き込みインターフェースとシリーズレギュレータが実装されているので回路を少しだけシンプルにできる

R0049219.jpg

2021-07-04

コネクターとトライアックはそのまま使う。アナログICではなくMPU。HOLTEKのHT48R06A。トライアックはBT137

R0049223.jpg

電源スイッチとLEDもそのまま使うので回路図を書いて動作を確認

R0049224.jpg

予備のラミネーターがあるので基板を作ることにする。但し予備機は若干熱量不足でFR4を転写できない。紙フェノールなら問題無いはず。紙フェノール生基板は使い切ってしまったので200x300mmサイズを6枚注文。電源は中国製が今日届いた。性能は良い

R0049225.jpg

2021-07-09

予備機で転写

R0049232.jpg

出来はいまいち。比較的大きい基板なので熱がかなり逃げるのが原因

R0049234.jpg

修正

R0049237.jpg

エッチング

R0049243.jpg

仮組み。1か所修正が入った。ArduinoNANOのA7ポートはデジタル入出力にならない

R0049249.jpg

PID制御は必要。80℃に設定すると85℃まで上昇する。なかなか冷えないのでPIDパラメータの調整に時間がかかりそう

R0049252.jpg

2021-07-11

温度制御はPIDを使わなくても良いという結論になった。設定温度より10℃低い温度になったら1℃につきPWMデューティーを10%減らすという単純なロジックで±1℃程度に収まるようになる。PWM周期を短くするとヒーターが鳴るので2秒(周波数0.5Hz)の長周期。写真はPIDで制御しているところ。パラメータはP項だけでI,Dはゼロにしてある。100x100mm程度の基板を入れると15℃も温度が下がる。小さい基板を入れる時はセンサーのある中心部に入れないと十分に加熱できないことになる。また基板の余熱が重要であることもわかる

R0049254.jpg

2021-07-12

テストのため基板を一枚作る必要があるが用途のないものを転写するのは無駄なので予備機も同じ制御方式に改造してしまう。予備機は小さいので基板が入る場所がない

R0049258.jpg

小さな基板はLED点灯回路でそれ以外の機能は無い。パイロットランプは加熱時に赤、サーモスタットが切れると青く点灯する。LEDに直列に入っているダイオードは普通の整流用1N4007。LEDの逆電圧破壊阻止だと思う。普通はLEDに並列LEDとは逆向きに小信号用ダイオードを入れるがこうすると阻止用ダイオード経由で電流が流れてしまい意図していないLEDが点灯してしまう。LEDの逆方向漏れ電流>整流用ダイオードの漏れ電流 なので逆電圧がかかった時の漏れ電流を整流用ダイオードで抑制しているのだと思う

R0049269.jpg

回路図

R0049265.jpg

基板レイアウト。先に適当なケースを探してから最終的な大きさを決める。ArduinoNANO、7セグメントLED、電源を注文しておいた

R0049264.jpg

2021-07-13

紙フェノール1.6mm厚。設定温度125℃。基板に熱を奪われるので125℃になる前に通して問題無い。数回通した後に基板が目的の温度になればよい。最初は冷えた基盤を通すので一気にローラー温度が低下するが数回通すうちに下がらなくなってくるのがわかる

R0049280.jpg

Press-n-Peelは見た目で過熱状態が良好なのか判断できる。最初はこんな色

R0049279.jpg

十分に加熱されるとトナーパターンが黒く透けて見えてくる。この色で判断すると失敗しない。最終設定温度は途中で変更して130℃

R0049281.jpg

結果は良好。若干埃のかみ込みがある

R0049282.jpg

ガラスエポキシ基板1.6mm厚も同じ130℃。但し小さいので大きい基板の場合どうなるか不明。修理はこれで完了。予備機の改造を続ける

R0049283.jpg

2021-07-17

板バネでNTCサーミスターを押さえつけている

R0049293.jpg

2021-07-18

温度の上がり方は直線的ではなく90℃付近と120℃付近で足踏み。原因不明。予備機で同様の症状が出るか確認してからの方が問題判別容易なので保留

R0049286.jpg

基板もほぼ完成。これ以上は部品が届いてから。ソフトは既に完成している

R0049295.jpg

2021-07-31

部品が来たのでテスト。ケースはダイソーで買った

R0049303.jpg

設定温度は135℃で転写良好。この後調子に乗って150℃に設定したら温度ヒューズが飛んだ。温度ヒューズは取ってしまっていいような気もするが高いものでもないので注文しておいた。ソフト上の最高温度も140℃に下げた

R0049307.jpg

2021-08-17

温度ヒューズが届いた。10本¥260。Youtube動画 ラミネーター自動温度制御

R0049336.jpg

修理をしたLTA42Eの最終形回路図。点線内はそのまま使用したスイッチLED基板。スイッチはもっと複雑な接点構造になっているが電気的にはこの回路図の通り。抵抗負荷なのでバリスタは取ってしまってよい

laminatorLTA42E.png

改造したKLA4の最終形回路図。点線内はそのまま使用したスイッチLED基板

laminatorKLA4.png
KLA4のArduinoスケッチ
0001  //------------------------------------------------------ 2021-08-16 --------------
0002 // Laminator temperature controler (Arduino 1.8.13)
0003 //
0004 // Board: Arduino Nano Atmega328 16MHz
0005 // Library:
0006 // TM1637 by Avishay Orpaz V1.2.0
0007 //----------------------------- written by Hiroyuki Iizuka ---- Japan ------------
0008 #include <TM1637Display.h>
0009 #include <EEPROM.h>
0010 #include <MsTimer2.h>
0011
0012 //----------------------------------------------------
0013 #define SERIES_RESISTANCE 4608.5 // R1 ohm
0014 #define DISPLAY_TEMPERATURE 96.0 // Celsius
0015 #define TRUE_TEMPERATURE 100.0 // Celsius
0016 //----------------------------------------------------
0017
0018 #define PERIOD 2000 // heater PWM period [msec]
0019
0020 #define TM1637_CLK A3 // 7segment LED clock
0021 #define TM1637_DIO A2 // 7segment LED data
0022
0023 #define THERMISTOR A0 // NTC thermistor
0024
0025 #define HEATER 2 // photo triac
0026 #define HEATER_OFF 0
0027 #define HEATER_ON 1
0028
0029 #define ENCODER_A 11 // rotary encoder
0030 #define ENCODER_B 9 // rotary encoder
0031 #define ENCODER_SW 10 // rotary encoder
0032 #define SW_ON 0
0033 #define SW_OFF 1
0034 #define CW 1
0035 #define CCW 2
0036 #define ENCODER_STOP 0
0037 #define ROTARY_LOCK 1
0038 #define ROTARY_UNLOCK 0
0039
0040 #define MIN_TEMPERATURE 100
0041 #define MAX_TEMPERATURE 140
0042
0043 #define EEPADDR_TEMPERATURE 0
0044
0045 TM1637Display display(TM1637_CLK, TM1637_DIO);
0046
0047 unsigned char Rotary_Enc_A;
0048 unsigned char Rotary_Enc_B;
0049 boolean Rotary_A_Lock;
0050 boolean Rotary_B_Lock;
0051 unsigned char Rotary_Stat;
0052
0053 long target_temperature; // target temperature
0054 double current_temperature; // current temperature
0055 boolean enable_sensor;
0056 boolean enable_encoder;
0057 boolean change_target_temperature;
0058 unsigned long sensor_disable_time;
0059 unsigned long encoder_enable_time;
0060 unsigned char heater_pwm_duty; // 0 to 100
0061
0062
0063 //---- Rotary encoder --------
0064 // RETURN
0065 // CW / CCW / ENCODER_STOP
0066 unsigned char rotary_encoder()
0067 {
0068 unsigned char temp_A;
0069 unsigned char temp_B;
0070 unsigned char result;
0071
0072 temp_A = digitalRead( ENCODER_A );
0073 temp_B = digitalRead( ENCODER_B );
0074
0075 result = ENCODER_STOP;
0076
0077 if( (Rotary_Enc_A == 1) && (temp_A == 0) && (temp_B == 1) ) {
0078 Rotary_Stat = CW;
0079 Rotary_A_Lock = true;
0080 }
0081 if( Rotary_A_Lock ) {
0082 if( (temp_A == 0) && (temp_B == 0) ) {
0083 result = Rotary_Stat;
0084 Rotary_A_Lock = false;
0085 }
0086 }
0087
0088 if( (Rotary_Enc_B == 1) && (temp_B == 0) && (temp_A == 1) ) {
0089 Rotary_Stat = CCW;
0090 Rotary_B_Lock = true;
0091 }
0092 if( Rotary_B_Lock ) {
0093 if( (temp_A == 0) && (temp_B == 0) ) {
0094 result = Rotary_Stat;
0095 Rotary_B_Lock = false;
0096 }
0097 }
0098
0099 Rotary_Enc_A = temp_A;
0100 Rotary_Enc_B = temp_B;
0101
0102 return result;
0103 }
0104
0105 //--------------- calc B constant ----------------------
0106 double calc_Bconstant(
0107 double Tn, // temperature celsius
0108 double Rn, // NTC thermistor resistance
0109 double R0) // NTC thermistor resistance @ 25 degrees_celsius
0110 {
0111 return log(Rn/R0) / (1/celsius_to_kelvin(Tn) - 1/celsius_to_kelvin(25.0));
0112 }
0113
0114 //--------------- calc temperature ----------------------
0115 double get_temperature_Mitsubishi(
0116 double series_resistance,
0117 double R0, // NTC thermistor resistance @ 25 degrees_celsius
0118 unsigned int B_constant, // @25邃
0119 double t1, // temperature celsius
0120 double t2, // temperature celsiusca
0121 double t3, // temperature celsius
0122 double R1, // NTC thermistor resistance @ t1 degrees celsius
0123 double R2, // NTC thermistor resistance @ t2 degrees celsius
0124 double R3, // NTC thermistor resistance @ t3 degrees celsius
0125 double disp_temperature, // display temperature
0126 double true_temperature) // true temperatureE
0127 {
0128 double Bn,Bc1,Bc2,Bc3;
0129 double Tprev,Tn,T1,T2,T3;
0130 double C,D,E;
0131 double Kdisp_temp,Ktrue_temp,disp_B_const, true_B_const, E_calibration;
0132
0133 Bc1 = calc_Bconstant( t1, R1, R0 );
0134 Bc2 = calc_Bconstant( t2, R2, R0 );
0135 Bc3 = calc_Bconstant( t3, R3, R0 );
0136 T1 = celsius_to_kelvin( t1 );
0137 T2 = celsius_to_kelvin( t2 );
0138 T3 = celsius_to_kelvin( t3 );
0139 C = ((Bc1-Bc2)*(T2-T3)-(Bc2-Bc3)*(T1-T2)) / ((T1-T2)*(T2-T3)*(T1-T3));
0140 D = (Bc1-Bc2-C*(T1+T2)*(T1-T2)) / (T1-T2);
0141 E = Bc1 - D*T1 - C*T1*T1;
0142
0143 Kdisp_temp = celsius_to_kelvin( disp_temperature );
0144 Ktrue_temp = celsius_to_kelvin( true_temperature );
0145
0146 disp_B_const = C * Kdisp_temp*Kdisp_temp + D * Kdisp_temp + E;
0147 true_B_const = disp_B_const * (1/Kdisp_temp - 1/celsius_to_kelvin(25.0)) / (1/Ktrue_temp - 1/celsius_to_kelvin(25.0));
0148 E_calibration = true_B_const - disp_B_const;
0149 E += E_calibration;
0150
0151 Tprev = get_temperature( series_resistance, R0, B_constant, true );
0152 for( unsigned char i = 0 ; i < 2 ; i++ ) {
0153 Bn = C * Tprev*Tprev + D * Tprev + E;
0154 Tn = get_temperature( series_resistance, R0, Bn, false );
0155 if( (Tprev - 0.01 < Tn) && (Tn < Tprev + 0.01) ) {
0156 break;
0157 } else {
0158 Tprev = Tn;
0159 }
0160 }
0161
0162 return Tn; // Kelvin
0163 }
0164
0165 //----------------------- temperature conversion -----------------------------
0166 double celsius_to_kelvin( double celsius )
0167 {
0168 return celsius + 273.15;
0169 }
0170
0171 double kelvin_to_celsius( double kelvin )
0172 {
0173 return kelvin - 273.15;
0174 }
0175
0176 //----------- calc temperature -----------------------------
0177 double get_temperature(
0178 unsigned int series_resistance,
0179 double R0, // NTC thermistor resistance @ 25 degrees_celsius
0180 unsigned int B_constant,
0181 boolean exec_ad )
0182 {
0183 static double ntc_resistance;
0184
0185 if( exec_ad ) {
0186 ntc_resistance = get_ntc_resistance( series_resistance );
0187 }
0188
0189 return 1 / (log(ntc_resistance/R0)/B_constant + 1/celsius_to_kelvin(25.0));
0190 }
0191
0192 //---------- A/D ntc resistance ---------------
0193 double get_ntc_resistance( unsigned int series_resistance )
0194 {
0195 double ad_value;
0196
0197 ad_value = 0.0;
0198 for( unsigned char i = 0 ; i < 100 ; i++ ) {
0199 ad_value += (double)analogRead( THERMISTOR );
0200 delay(1);
0201 }
0202 ad_value /= 100;
0203
0204 return ( ad_value * series_resistance ) / ( 1024 - ad_value );
0205 }
0206
0207 //------- EEPROM -> target_temperature ----------------------
0208 unsigned char get_target_temperature()
0209 {
0210 unsigned char temperature;
0211
0212 temperature = EEPROM.read( EEPADDR_TEMPERATURE );
0213
0214 if( (temperature < MIN_TEMPERATURE) || (MAX_TEMPERATURE < temperature) ) {
0215 temperature = MIN_TEMPERATURE;
0216 write_temperature( temperature );
0217 }
0218
0219 return temperature;
0220 }
0221
0222 //------- target_temperature -> EEPROM ----------------------
0223 void write_temperature( unsigned char temperature )
0224 {
0225 EEPROM.write( EEPADDR_TEMPERATURE, temperature );
0226 }
0227
0228 //---------- MsTimer2 interrupt routine --------------
0229 void heater()
0230 {
0231 static unsigned char counter = 0;
0232
0233 if( 100 <= counter ) {
0234 counter = 0;
0235 }
0236 if( counter < heater_pwm_duty ) {
0237 digitalWrite( HEATER, HEATER_ON );
0238 } else {
0239 digitalWrite( HEATER, HEATER_OFF );
0240 }
0241 counter++;
0242 }
0243
0244 //----------------------- setup -----------------------------------
0245 void setup(){
0246 pinMode( THERMISTOR, INPUT );
0247 pinMode( ENCODER_A, INPUT );
0248 pinMode( ENCODER_B, INPUT );
0249 pinMode( ENCODER_SW, INPUT );
0250 pinMode( HEATER, OUTPUT );
0251
0252 digitalWrite( HEATER, HEATER_OFF );
0253 delay(500);
0254
0255 display.setBrightness(7);
0256 display.clear();
0257
0258 target_temperature = get_target_temperature();
0259 display.showNumberDecEx(target_temperature * 10, 0b00100000, false);
0260 delay(1000);
0261
0262 Rotary_Enc_A = digitalRead( ENCODER_A );
0263 Rotary_Enc_B = digitalRead( ENCODER_B );
0264 Rotary_A_Lock = false;
0265 Rotary_B_Lock = false;
0266
0267 Serial.begin(9600);
0268 Serial.println("-------- Laminator temperature controller -------------------");
0269
0270 enable_sensor = true;
0271 enable_encoder = false;
0272 MsTimer2::set(PERIOD/100, heater);
0273 MsTimer2::start();
0274
0275 heater_pwm_duty = 0;
0276 change_target_temperature = false;
0277 }
0278
0279 //----------------------- loop ------------------------------------
0280 void loop()
0281 {
0282 // long encoder_value;
0283 unsigned char turn;
0284
0285 if( enable_sensor ) {
0286 current_temperature = kelvin_to_celsius(get_temperature_Mitsubishi( SERIES_RESISTANCE, 100000, 4100, 50, 100, 150, 34470, 6092, 1569, DISPLAY_TEMPERATURE, TRUE_TEMPERATURE ));
0287 if( !enable_encoder ) {
0288 display.showNumberDecEx( current_temperature * 10, 0b00100000, false);
0289 }
0290 enable_sensor = false;
0291 sensor_disable_time = millis();
0292 Serial.print("temp="); Serial.print( current_temperature ); Serial.print(" ");
0293 Serial.print("target="); Serial.print( target_temperature ); Serial.print(" ");
0294 Serial.print("PWM duty=");Serial.print( heater_pwm_duty ); Serial.println(" ");
0295 heater_pwm_duty = max( 0, min( ( target_temperature - current_temperature ) * 15, 100 ));
0296 }
0297
0298 if( sensor_disable_time + 1000 < millis() ) {
0299 enable_sensor = true;
0300 }
0301
0302 if( enable_encoder ) {
0303 turn = rotary_encoder();
0304 if( turn == CW && target_temperature < MAX_TEMPERATURE ) {
0305 target_temperature++;
0306 display.showNumberDecEx( target_temperature * 10, 0b00100000, false);
0307 change_target_temperature = true;
0308 encoder_enable_time = millis();
0309 }
0310
0311 if( turn == CCW && MIN_TEMPERATURE < target_temperature) {
0312 target_temperature--;
0313 display.showNumberDecEx( target_temperature * 10, 0b00100000, false);
0314 change_target_temperature = true;
0315 encoder_enable_time = millis();
0316 }
0317 sensor_disable_time = millis();
0318 }
0319
0320 if( encoder_enable_time + 2000 < millis() ) {
0321 enable_encoder = false;
0322 if( change_target_temperature ) {
0323 write_temperature( target_temperature );
0324 change_target_temperature = false;
0325 }
0326 }
0327
0328 if( digitalRead(ENCODER_SW) == SW_ON ) {
0329 enable_encoder = true;
0330 encoder_enable_time = millis();
0331 enable_sensor = false;
0332 sensor_disable_time = millis();
0333 display.showNumberDecEx( target_temperature * 10, 0b00100000, false);
0334 }
0335 }
0336
0337 //--------------- E N D -------------------------------------------------------------------
行番号
解説
13
NTCサーミスター直列抵抗(回路図R1)実測値。抵抗値の誤差がそのまま計測誤差になるので実測する
14
校正のための項目。実際の温度が15行目の温度の時この温度を表示する。校正なしなら15行目と同じ値にする
286
NTCサーミスターがMF58の100kΩならそのままで良いが違うサーミスターを使うならここを書き換える必要がある。ここでは50,100,150℃におけるデータシート上の抵抗値を入力しているが装置が使用する温度が異なるのであれば使用する温度付近の値を入力するほうが良い
回路図+プリント基板CADファイル(EAGLE)+プログラム(Arduino sketch)
ファイル ファイルタイプ 添付ファイルの解説
laminatorKLA4L.png PNG KLA4大きい回路図
laminatorINO.zip arduino プログラムLTA4
laminatorKLA4.zip arduino プログラムKLA4
laminatorEAGLE_LTA4.zip EAGLE LTA4 プリント基板CAD EAGLE V4.15以降用
laminator_rev2_EAGLE_KLA4.zip EAGLE KLA4 プリント基板CAD EAGLE V4.15以降用