【Arduino】放射温度センサMLX90614を使ってみる(Galileo2についても解説)
手の温度を取得するために、放射温度センサMLX90614を使ってみる。
用意するもの
手順
- 以下のサイトからライブラリをダウンロードして、Arduino > Libraries にコピーして入れる。
https://github.com/adafruit/Adafruit-MLX90614-Library
- IDEを開き、ファイル→スケッチの例から「Adafruit MLX90614 Library」を選択して、mlxtest.ioを実行する。
結果
補足
- Galileo2の利用について
Galileo2で試してみたところ、どうしてもうまくいきませんでした。
I2Cのポートをうまく認識せず、クロック数の相性があるのでしょうか。
2日取り組みましたが、よくわからないままでした。
- 1つのボードによる複数利用について
以下のサイトから、データシートを読みます。
https://learn.sparkfun.com/tutorials/mlx90614-ir-thermometer-hookup-guide
Every MLX90614 has a default I2C address of 0x5A, but that address can be re-written – one of the major features supported by the device. By reconfiguring the address of an MLX90614, you can add multiple devices (up to 127!) to the same bus to get a larger temperature map.
One last bit to note about the SMBus interface – every read or write transmission should be completed with an 8-bit CRC (CRC-8-CCITT) check using a x8+x2+x1+x0 polynomial – handy for that extra bit of data-confidence.
複数つなげる事が可能みたいですね。
【PsychoPy】Arduinoとシリアル通信をさせる。
Adruino(Galileoとのシリアル通信)をBuilder modeでする。
作成したもの
- PsychoPy側から、文字列(一行)を送信
- Arduino側で受け取ったら、その値をPC側に送信
- PsychoPyのプログラムにて、表示
コード
Arduino側
#define num 30//一度に送れる文字数 void setup() { Serial.begin(9600);//シリアル通信開始 } void loop() { char incomingByte = 0; // 受信データ用 char sended_value[num] = {0}; int i = 0; //シリアル通信 while(1){ if(Serial.available() > 0){ incomingByte = Serial.read(); // 受信データを読み込む if(incomingByte > 47 && incomingByte < 59 ){ //アスキーコード10進数(47~59がきたら読み込み) sended_value[i] = incomingByte;//配列に入れる Serial.print(sended_value[i]); i++; } if(incomingByte == '.'){Serial.print(".");} if(incomingByte == ';'){Serial.println(";");break;}//;が来たらwhile文終了。 } else{break;} } }
※ 注意
本Arduino Programはパソコン側から「0,1,2,3,4,5,6,7,8,9」「",",";"」しか受信をせず
。「;」を受信するとそこまでが1行とみなされる。
一回に受信できるコードは一行まで。
結果
【Arduino(Gallileo2)】シリアル通信 PCから送られてきた値配列に格納・表示
ほんの忘備録です。
PCから値送信→Arduino受信→配列に格納
コード
#define num 30//一度に送れる文字数 void setup() { Serial.begin(9600);//シリアル通信開始 } void loop() { char incomingByte = 0; // 受信データ用 char sended_value[num] = {0}; int i = 0; //シリアル通信 while(1){ if(Serial.available() > 0){ incomingByte = Serial.read(); // 受信データを読み込む if(incomingByte > 47 && incomingByte < 59 ){ //アスキーコード10進数(47~59がきたら読み込み) sended_value[i] = incomingByte;//配列に入れる Serial.print(sended_value[i]); i++; } if(incomingByte == ';'){Serial.println(";");break;}//;が来たらwhile文終了。 } } }
結果
【PsychoPy】Galileo2(Arduino)とシリアル通信をしてみる。(coder編)
本日の朝、動作を確認しました。
Galileo側にコンパイル、スケッチを書き込み後、
PsychoPyのcoderモードで動作を確認しました。
以下が、Galileo側のプログラム
//------------------------------------------ //Tact switch time (P/N: 611 - PTS635SL50LFS) //------------------------------------------ unsigned long tt, tt2, tt3; int b_pin = 2; // Desital pin int ledpin = 13; int state = 0; // pin state int flag = 0; float tt4; void setup() { Serial.begin(9600); pinMode(b_pin, INPUT); // input setting pinMode(ledpin, OUTPUT); // input setting digitalWrite(ledpin, LOW); // LED pin } void loop() { float ans , temp , tv ; float ans2 , temp2 , tv2 ; state = digitalRead(b_pin); // read data ans = analogRead(0) ; // read sensor from A0 pin ans2 = analogRead(1) ; // read sensor from A1 pin if(state == 1 && flag == 0){ flag = 1; tt = millis(); Serial.println("ON"); digitalWrite(ledpin, HIGH); } if(state == 0 && flag == 1){ tv = (ans*5)/1024; // convert sensor value to voltage tv2 = (ans2*5)/1024; // convert sensor value to voltage temp = 100 * (tv - 0.5); // convert voltage to temperature temp2 = 100 * (tv2 - 0.5); // convert voltage to temperature tt3 = millis(); tt2 = tt3 -tt; tt4 = (float)tt2 / 1000; flag = 0; Serial.print("time:"); // output serial monitor Serial.print(tt4); // output serial monitor Serial.print(",coldbar:"); // output serial monitor Serial.print(temp); // output serial monitor Serial.print(",warmbar:"); // output serial monitor Serial.println(temp2); // output serial monitor digitalWrite(ledpin, LOW); } delay(100); }
以下がPsychoPyのcoder側のプログラム。
import serial com06 = serial.Serial('COM6') # open first serial port COM6 line = com06.readline() # read a '\n' terminated line print(line) com06.close()
Galileo2はCOM6につないである。
実行結果
次はviewerモードで実装してみます!
Galileoを触ってみる【温度センサ/タクトスイッチを使ってみる】
センサ類をいじってみるよ!
今日は温度センサとタクトスイッチをそれぞれ動かしてみたいと思います。
必要なもの(GalileoとUSBケーブルの他)
温度センサ編
- 温度センサ(temperature sensor: TMP36):https://www.sparkfun.com/products/10988
datasheet: http://www.analog.com/media/jp/technical-documentation/data-sheets/TMP35_36_37_jp.pdf
タクトスイッチ編
- タクトスイッチ(C&K Components PTS635 Series Tactile Switches):http://www.mouser.com/CK-Components/Electromechanical/Switches/Tactile-Switches/PTS635-Series/_/N-5g2m?P=1yzs95eZ1z0zl2x
datasheet: http://www.mouser.com/ds/2/60/PTS635-43997.pdf
- 8.8KΩの抵抗 10KΩくらいなら何でも大丈夫
温度センサ編
温度センサをデータシートの通りにつなげて、以下のコードを書きます。
今回Vs側には3.0Vの電圧をかけるよ。
ない人はGalileoボードの3.3vを使うといいかも。
//**************************************** //Temperature sensor-1(Vs = 3.0v: TMP36) //**************************************** void setup() { Serial.begin(9600) ; // Serial initiallize } void loop() { float ans , temp , tv ; ans = analogRead(0) ; // read sensor from A0 pin tv = (ans*5)/1024; // convert sensor value to voltage temp = 100 * (tv - 0.5); // convert voltage to temperature Serial.println(temp) ; // send value to PC delay(1000) ; // delay. }
出力はこのような感じになりました。
タクトスイッチ編
タクトスイッチにつなげます。電源は5vで出力側はデジタルピン2につなぎます。
その途中から抵抗をグランドにつなげます。
//------------------------------------------ //Tact switch (P/N: 611 - PTS635SL50LFS) //------------------------------------------ int b_pin = 2; // Desital pin int state = 0; // pin state void setup() { Serial.begin(9600); pinMode(b_pin, INPUT); // input setting } void loop() { state = digitalRead(b_pin); // read data Serial.println(state); // output serial monitor delay(500); }
タクトスイッチを押すと1が表示されます!!
Galileo を触ってみる【初期設定とLチカ】
IntelのGalileo Gen2を触ってみます。
販売中止になってしまいましたが、研究室の段ボールにたくさん入っていたので
Galileo Gen2を使うことになりました。
[開発環境]
・Windows8.1
箱から出してセットアップ
箱の中の内容物ですが、
- AC アダプタ
- Galileo本体
このままでは使えないので、大学のショップまで
- USB A male - USB micro B male
の買い物をしに行きました。おおよそ8ドルで買いました。
さあ、気を取り直してIDEとドライバのインストール
ArduinoのIDEも使えます(1.53以上)
ですが、私はintel ArduinoをこちらからダウンロードしてIDEを入れました。
- IntelArduino-1.6.0-windows-installer.exe
https://downloadcenter.intel.com/download/24355/Intel-Galileo-Board-Software-Package
ダウンロードが終わったら、
Galileo本体にACアダプタをさして、電源を入れて
先ほど買ってきたUSBケーブルをパソコンにつなぎます。
次にドライバーのインストール。
右クリックして、ソフトウェアの更新をします。
- 手動で更新をクリック
そして、ドライバの場所を以下で設定
C:\IntelArduino\drivers
そうすると、ドライバが入るはずなのですが、筆者はなぜか
「ストアへドライバーを追加する際に問題が発生しました」
という表示が出てしまい。
こちらのブログの方法を試してみました。
http://www.teradas.net/archives/9922/
そうするとやっとこさ、Galileoが認識されました。
Lチカをやってみる。
Galileoでちゃんとプログラムが書けるかどうか、試してみます。
IntelArduinoを起動して、以下のスケッチを書きます。
#define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(3000); digitalWrite(LED_PIN, LOW); delay(3000); }
書き込み前
- ツール→ボードでintel Galileo Gen2に変更
- ツール→シリアルポートを設定
コンパイルをしてから、書き込みをします。
はい。うまく書き込めました。
お疲れ様です。