先日、Arduino UNOと一緒に買った入門キットは、「seeedstudio SIDEKICK BASIC KIT」と言うもので、千石電商の2階に置いてあったから無造作にヒョイと選んだものだ。
ブレッドボードにジャンパ各色、小さいサーボ、可変抵抗、抵抗、チルトスイッチ、ダイオード、ボタンやスイッチ、ブザー、LED各種、コンデンサ、Cdsセル、サーミスタなどが詰め合わせになっており、オライリーの「Arduinoをはじめよう第2版」の題材を一通り試せるようになっている。
まず過不足のないところなのだが、seeedstudioというのは何分中国企業で、日本語のドキュメントが少ない。
と言っても、部品は簡単なものばかりなので、特にドキュメントなどなくても自分でテスターで計りながら使えばそれでよいのだが、この中の、サーミスタに関する情報が非常に少なく、難渋する。
サーミスタには写真のように「503」と刻印があるのみで、なんの情報もない。
ネット上で探すと、一応、seeedstudioのFAQページに、情報があることはある。
その中に、中国語のPDFで、こんなシートがある。
要するに「MF11-503K」という型番で、「503」というのはどうやら、「25℃で50kΩ」とでも言う意味らしい。
で、電圧発生抵抗を一本入れて、えーっと、どういう計算になるんだっけな、……と初心に帰る。
抵抗2本、直列に入れた時の一本目の抵抗の電圧はこうだから……
自分の指でつまんで温めたりして試したいんで、ターゲット温度を体温前後にする。なので、データシートどおりに抵抗が変化するんなら、こういう感じに電圧は変化する。
……で、Arduinoのアナログ入力は、0V~5Vを0~1024にマッピングするんで、1024/5をこれらにかけて、近似させればいいよね。
2次式モデルでこうなった。
v = -9.663E-5 * v * v + 0.164 * v + 0.197;
結局、サーミスタに直列に10kΩ、サーミスタの下からアナログへ出して、サーボにつなぐ。サーボの針が体温で上がったり下がったりするわけだ。
コードはこんな感じ。
// // サーミスタでサーボを制御 // 佐藤俊夫 // 27.05.05(火) // #include <Servo.h> // const int SERVO = 9; // D9(Servo) const int THERMISTOR = 0; // A0 const float INMIN = 30; const float INMAX = 40; const float OUTMIN = 5.0; const float OUTMAX = 175.0; // Servo meter; void setup() { meter.attach(SERVO); } void loop() { int v = 0; // v = analogRead(THERMISTOR); v = -9.663E-5 * v * v + 0.164 * v + 0.197; v = map(v, INMIN, INMAX, OUTMIN, OUTMAX); v = constrain(v, OUTMIN, OUTMAX); meter.write(v); }
「Arduino入門キットのサーミスタ」への1件のフィードバック