Arduino入門キットのサーミスタ

投稿日:

 先日、Arduino UNOと一緒に買った入門キットは、「seeedstudio SIDEKICK BASIC KIT」と言うもので、千石電商の2階に置いてあったから無造作にヒョイと選んだものだ。

 ブレッドボードにジャンパ各色、小さいサーボ、可変抵抗、抵抗、チルトスイッチ、ダイオード、ボタンやスイッチ、ブザー、LED各種、コンデンサ、Cdsセル、サーミスタなどが詰め合わせになっており、オライリーの「Arduinoをはじめよう第2版」の題材を一通り試せるようになっている。

 まず過不足のないところなのだが、seeedstudioというのは何分中国企業で、日本語のドキュメントが少ない。

 と言っても、部品は簡単なものばかりなので、特にドキュメントなどなくても自分でテスターで計りながら使えばそれでよいのだが、この中の、サーミスタに関する情報が非常に少なく、難渋する。

 サーミスタには写真のように「503」と刻印があるのみで、なんの情報もない。

 ネット上で探すと、一応、seeedstudioのFAQページに、情報があることはある。

  •  そのページ
  •  その中に、中国語のPDFで、こんなシートがある。

     要するに「MF11-503K」という型番で、「503」というのはどうやら、「25℃で50kΩ」とでも言う意味らしい。

     で、電圧発生抵抗を一本入れて、えーっと、どういう計算になるんだっけな、……と初心に帰る。

     抵抗2本、直列に入れた時の一本目の抵抗の電圧はこうだから……


    Scan10001

     自分の指でつまんで温めたりして試したいんで、ターゲット温度を体温前後にする。なので、データシートどおりに抵抗が変化するんなら、こういう感じに電圧は変化する。


    Scan10002

    ……で、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件のフィードバック

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください