温度計作ってみた


大学でロケット作るサークルを主催してます。(突然
ロケットには電子工作が必要になってきて、新入生に電子工作を教えたいなと思い、基本的なことを学べる用に教材的に基板を設計してみた。機能のわりに大きいのはハンダ付け初心者にハンダ付けさせるためです。なるべく大きな部品使うようにしてますし。

基板は大学にある基板切削機という電子工作用のNCフライスで作った。相変わらず配線のセンスがなさすぎて悲しくなってくるが、反面教師的な部分も無いと教材っぽくないのでご愛嬌かなと。

前に作ったのと同様に
ArduinoのDuemilanoveやUNOに使われているATmega328PというマイコンArduinoブートローダーを書きこんで、電源系、セラロック(背面に取り付けてあるので見えない)を付けた。あとはATmega328Pのピン通りに配線した。本物のArduinoとブレッドボードでプロトタイピングをしておいて、本番として自分で作った基板に載せられる。ハンダ付けも簡単で、そこそこのモノが出来て、なにより完成が早い。

あとは
Arduinoで遊ぼう - PC用ファンの回転数を表示する
ここにある7セグLEDライブラリを使って、温度センサはLM60を使って作った。

間違ってアノードコモンを買ってしまったので、

上記のライブラリのSevenSegment.cppの
const uint8_t SevenSegment::NUMERICAL_NUMBER[] = {
の先を
/*0*/ SEG_G_BIT | SEG_DP_BIT,
/*1*/ SEG_A_BIT | SEG_D_BIT | SEG_E_BIT | SEG_F_BIT | SEG_G_BIT | SEG_DP_BIT,
/*2*/ SEG_C_BIT | SEG_F_BIT | SEG_DP_BIT,
/*3*/ SEG_E_BIT | SEG_F_BIT | SEG_DP_BIT,
/*4*/ SEG_A_BIT | SEG_D_BIT | SEG_E_BIT | SEG_DP_BIT,
/*5*/ SEG_B_BIT | SEG_E_BIT | SEG_DP_BIT,
/*6*/ SEG_B_BIT | SEG_DP_BIT,
/*7*/ SEG_D_BIT | SEG_E_BIT | SEG_F_BIT | SEG_G_BIT | SEG_DP_BIT,
/*8*/ SEG_DP_BIT,
/*9*/ SEG_E_BIT | SEG_DP_BIT,
に変えて、
void SevenSegment::digitOn(void)の関数の中身を
digitalWrite(_digitPins[_currentDigit], HIGH);
void SevenSegment::digitOff(void)の関数の中身を
digitalWrite(_digitPins[_currentDigit], LOW);
にそれぞれ変更した。
やってることは
1.アノードコモンとカソードコモンで点灯時の電圧のHIGHとLOWが逆なので逆にした
2.元のライブラリでは表示させるLEDの場所を指定していたのを、逆に消すLEDの場所を指定した

というだけ。

温度センサは2つ。基板に取り付けたものと、ケーブルを伸ばした先の温度を測るためのもの。(写真は後者を取り付ける前)

気温ですら1℃ぐらいの誤差があるけど、外付けの温度計も切り替えて測れるようにしたので、実用性はあるかなと思う。

100円ショップで温度計が買えるこの時代に800円程度かけて温度計自作するのは悲しくなるけど、それ以上に工作が楽しくて、達成感と勉強できて良かった感は他の何にも変えられないものです。

ワークショップ


【追記】ワークショップ形式でサークルで新入生に作ってもらった。基本的なことを教えながら作ってもらった。同じ基板で同じセンサ・プログラムでも表示される温度が変わってくることなんて、本を読んで勉強してるだけでは理解できないことなので良い教材になったかなと思った。
簡単なハンダ付け練習とLEDチカチカさせて、LCDにHelloWorld表示させた後にこのレベルだとプログミング辺りに少しレベルの乖離があったみたいだけど一日でかなりの達成感を感じてもらえてモチベーション上げてもらえたので良かったかなと。電子工作は修行のような忍耐強さが必要なので、マイコンいじるのが好きになってもらえるのが何よりだった。