備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Edisonボードの Arduinoスケッチ 備忘メモ


Edisonボード上で動作しているArduinoスケッチは、
純正のArduinoで動作しているものとは差異があります。

正直、情報が散在している感じで、
把握しきれてはいないのですが、
チェックできた点をメモしておきます。

①Arduinoスケッチと、Edison Yocto Linuxプロセスとの通信1
 フォーラムを見ると、これを見ろ的な感じで、下のURLへ誘導されます。
 https://software.intel.com/en-us/blogs/2014/09/22/efficient-communication-between-arduino-and-linux-native-processes#_ga=1.131696271.1267878252.1412838079 
 正直、今読み解いている段階です。
 
②Arduinoスケッチと、Edison Yocto Linuxプロセスとの通信2
 C言語が利用できるようです。このため、Arduinoスケッチから
 ログや計測結果などを、ファイルに落とすことが可能です。
 
 Arduino IDEのサンプルソースを改造して、
 温度センサの値をファイルへ出力するArduinoスケッチを作成しました。
 [ファイル]→[スケッチの例]→[01.Basics]→[AnalogReadSerial]

 ハードウェア構成は、温度センサとしてLM60DZを利用しました。
 LM60DZのVout → EdisonのArduino拡張ボードのA0へ接続
     Vss → EdisonのArduino拡張ボードの5Vへ接続
     GND → EdisonのArduino拡張ボードのGNDへ接続

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/
#include <stdio.h>
#include <stdlib.h>

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
// int sensorValue = analogRead(A0);
float sensorValue = analogRead(A0);

float Temperature = ((5 * sensorValue) / 1024) * 100;
Serial.print("Temperature=");
Serial.println(Temperature);

FILE *fp;
if((fp=fopen("AnalogRead.log","a"))==NULL){
fprintf(stderr, "ファイルのオープンに失敗しました.\n");
//return -1;
}
else{
int count = fprintf(fp, "read_senser=%f\n",Temperature);
if ( count < 0 ) {
fprintf(stderr, "ファイルの書込みに失敗しました.\n");
fclose(fp);
}
fclose(fp);
}

//delay(1); // delay in between reads for stability
delay(1000); // delay in between reads for stability
}


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

サンプルスケッチからの主な変更点としては、以下の処理を追加・変更しました。
1. インクルードファイルを追加
  fopenなどのC標準関数を使うために、stdio.h、stdlib.hをインクルード

2. アナログ入力A0から読み込んだ値を、温度へ変換
  analogRead(A0)の戻り値は、A0ピンに入ってくる電圧を10bit(0~1023段階)中の
  いくつであるかを返してきます。(例. 10, 50, 1020など1024までの整数)
  これは、電圧0~5Vの値として対応させるとすると・・・
  analogRead(A0)の戻り値に、(5V/1024)*1000[mV]を掛け合わせると、A0にかかっている電圧[mV]が判ります。
 
  あとはセンサLM35DZのデータシートから、「OUTPUT 0mV+10mV/℃」とのことなので
  A0電圧値を10で割れば、温度(摂氏)へ変換できます。
  このため、式にすると
  (sensorValue * (5/1024) * 1000)/10;
  = ((5 * sensorValue) / 1024) * 100;
  となります

3. ファイル出力
  C言語のファイル出力処理です。
  どこにでもある処理ですので、解説は省きます。

このスケッチで、動作させてみると
Edisonのルート直下に、AnalogRead.logというファイルが作られ、
中身をみると、以下のような温度計測ログが確認できました。
Temperature=28.81
Temperature=28.81
Temperature=28.81
Temperature=29.30
スポンサーサイト

テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2014/11/12(水) 11:27:50|
  2. Intel Edison
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。