Arduinoでエレキジャック付録のLM73を使う [電子工作]
Arduino で エレキジャック No.8 「一冊まるごとマイコン入門だ!」に付属の温度センター、LM73を動かしてみました。
(1) LM73基盤を完成させる
LM73は付録の基板上に既に固定されていますが、ピンが無いのでそのままではブレッドボードに刺さりません。記事の説明にある通り、ピンヘッダとバスコン用のコンデンサ(0.1μ)を半田付けします。
この作業に入るまでに、我が家には半田ごてが無かったのですが(最後に半田を使ってから20年ぐらい?)、そんな私でも見てくれが悪いですが何とか成功しました。
よく見ると中央に「T731」のマーキングがあります。エレキジャックのp.164をみると「T730」と「T731」ではスレーブアドレスが異なるようです。今回は「T731」でフロート(無接続)なので、ステー部アドレスは 1001 100になります。
(2) ブレッドボードで Arduino と接続する。
ArduinoはI2Cをサポートしているので、マニュアルの通りSDAをアナログ・インプット4に、SCLをアナログ・インプット5に接続します。またそれぞれ 1KΩの抵抗でプルアップしています。このあたりは知識が不足しているので、接続などは心配なところですが、記事を参考にして何とか回路が組みあがりました。
(3) Arduinoプログラミング
ArduinoのCPU、ATmega168は石のレベルでI2Cをサポートしているようです。Arduinoでこの機能を使うために Wire ライブラリがそのまま利用できます。
Wireライブラリについてはあまり丁寧に書かれた資料が見つけられませんでした。一番参考になったのはやはり船田戦闘機さんのArduino日本語リファレンスでした。
下記が作成したソースファイルになります。
(4) 完成!
こちらが実行時のイメージです。LM73から取得したセンサーの値をシリアル経由でPCのコンソール(例では Arduino のIDE内のコンソール)に表示させています。
応用として取得した温度を7セグのLEDに表示させてみました。
鋭意バージョンアップ中なのでソースは割愛しますが、正しく温度が表示されているようです。
Arduinoを使うことで、かなり簡単にここまでこぎつけることができました。
参考リンク
・Arduino日本語リファレンス
・温度センターLM73を使ってみる
・Keith's Electronics Blog ~Arduino I2C Expansion~
(1) LM73基盤を完成させる
LM73は付録の基板上に既に固定されていますが、ピンが無いのでそのままではブレッドボードに刺さりません。記事の説明にある通り、ピンヘッダとバスコン用のコンデンサ(0.1μ)を半田付けします。
この作業に入るまでに、我が家には半田ごてが無かったのですが(最後に半田を使ってから20年ぐらい?)、そんな私でも見てくれが悪いですが何とか成功しました。
よく見ると中央に「T731」のマーキングがあります。エレキジャックのp.164をみると「T730」と「T731」ではスレーブアドレスが異なるようです。今回は「T731」でフロート(無接続)なので、ステー部アドレスは 1001 100になります。
(2) ブレッドボードで Arduino と接続する。
ArduinoはI2Cをサポートしているので、マニュアルの通りSDAをアナログ・インプット4に、SCLをアナログ・インプット5に接続します。またそれぞれ 1KΩの抵抗でプルアップしています。このあたりは知識が不足しているので、接続などは心配なところですが、記事を参考にして何とか回路が組みあがりました。
(3) Arduinoプログラミング
ArduinoのCPU、ATmega168は石のレベルでI2Cをサポートしているようです。Arduinoでこの機能を使うために Wire ライブラリがそのまま利用できます。
Wireライブラリについてはあまり丁寧に書かれた資料が見つけられませんでした。一番参考になったのはやはり船田戦闘機さんのArduino日本語リファレンスでした。
下記が作成したソースファイルになります。
// // LM73_test1 // sample program for reading LM73 // // Figure.1 LM73を搭載したエレキジャックNo.8の基盤のイメージ図 // // -------------- // | LM73 | // |O O|<-SDA // | =--= | // GND->|O = = O| // | =--= | // VDD->|O C1 O|<-SCL // | -||- | // | | // -------------- // // NOTE: // Arduino analog input 5 - I2C SCL // Arduino analog input 4 - I2C SDA // #include#define LM73_ADDR 0x4c // 2進数なら 1 0 0 1 1 0 0 int ret; void setup() // run once, when the sketch { Wire.begin(); Serial.begin(9600); delay(1000); // デバック用 Wire.beginTransmission(LM73_ADDR); Wire.send((byte)0x04); // Control/Status Registerを選択 Wire.send(0x60); // 14 bits modeにセットする ret=Wire.endTransmission(); Wire.beginTransmission(LM73_ADDR); Wire.send(0x00); // 次の通信のため温度レジスターをセットする。 ret=Wire.endTransmission(); delay(100); // 次の読み取りまで念のため0.1秒間をあける } void loop() // run over and over again { int data=0 ; Wire.beginTransmission(LM73_ADDR); ret=Wire.requestFrom(LM73_ADDR, 2); data = 0; if (Wire.available()) { // 1バイト目読み取り data = Wire.receive(); } else { Serial.println("Wire not available."); } if (Wire.available()) { // 2バイト目読み取り data = (data << 8 )| Wire.receive() ; } ret=Wire.endTransmission(); printdata(data); // シリアルへ温度データを送る delay(2000); } void printdata(int data){ int data2; int data3; float data_f; boolean negative=false; if (data < 0 ) { // マイナスならbooleanにtrueをセットしプラスに変換 negative=true; data = -data; } data2 = data >> 7; // 小数値切り捨て data_f = (float)(data >> 2 ) / 32; data_f = data_f - data2 ; data3 = data_f * 100 ; Serial.print ("Current temperature is "); if (negative) { Serial.print("-"); } Serial.print(data2); Serial.print("."); Serial.print(data3/10); Serial.print(data3 % 10); Serial.println(" C. "); }
(4) 完成!
こちらが実行時のイメージです。LM73から取得したセンサーの値をシリアル経由でPCのコンソール(例では Arduino のIDE内のコンソール)に表示させています。
応用として取得した温度を7セグのLEDに表示させてみました。
鋭意バージョンアップ中なのでソースは割愛しますが、正しく温度が表示されているようです。
Arduinoを使うことで、かなり簡単にここまでこぎつけることができました。
参考リンク
・Arduino日本語リファレンス
・温度センターLM73を使ってみる
・Keith's Electronics Blog ~Arduino I2C Expansion~
コメント 0