備忘録

スポンサーサイト

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

RaspberryPiから、Arudinoを制御 Doragon Remote Control版 その2

前回までのは↓
RaspberryPiから、Arudinoを制御 Doragon Remote Control版
http://nanicananica.blog.fc2.com/blog-entry-20.html

実際にArduinoにDRC(Doragon Remote Control)を入れて
動かしてみるのだけれど、コマンド'@'のpingは通るけど、
Arduino A0ピン読み出し(コマンドa0)が上手くいかない

なんでかなと思ったら、
PCからminicomで、コマンド"a0"送信すると、当たり前だけれども
アスキーコードにして"0x40 0x30"が飛ぶわけです。

DRCファームは、アスキーコード"0x30"をコマンド"0"としてみてくれないため
A0を読む処理まで行ってなかったです
DRCファームには、"0x40 0x01"を送信しなければいけなかったわけです。

阿呆なミスでした・・・

ただ、これですといろいろと面倒なので、DRCファームを修正しました。
修正したものが↓
https://docs.google.com/file/d/0B3Shzpx27ZKgZUs2WjdTR0YtMjg/edit?usp=sharing

int myGetchar ()
{
int x ;
while ((x = Serial.read ()) == -1)
;
if(x>=48 && x<=57)
x = x-48;

return x ;
}

なんのことはない、0~9のアスキーコード(0x30~0x38)を受信したら、
0x0~0x9に変更するというだけです。

確認のため、温度計をつけたArduinoと、RaspberryPiを接続しました。
接続回路は↓
raspi_Arduino_temp.png
# 見づらくてすみません
Arduinoは5V系なので、RasPiとの接続は、↓のレベルコンバータを挟んでいます
https://strawberry-linux.com/catalog/items?code=18187
LM60は温度計でArduinoのA0に接続しています

RaspberryPiでテスト用に利用したコードは、↓です

- - - - - DRC_DRC_analogRead_002 - - - - - -
#include <stdio.h>
#include <string.h>

#include <wiringPi.h>
#include <wiringSerial.h>

int main(){

/* シリアルポートオープン */
int fd = serialOpen("/dev/ttyAMA0",115200);
if(fd<0){
printf("can not open serialport");
}

while(1){
/* 受信処理 */
while(serialDataAvail(fd)){
printf("%02x\n" , serialGetchar(fd) );
fflush(stdout);
}

/* 送信処理 */
serialPuts(fd,"a0");

delay(1000);
}

return;
}

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

実行結果は。。。。
00
77

Arduino A0ピンのセンサー値を取得しました。
# 上位バイト、下位バイトの順で出力されます

上記の値は、ArduinoがAD変換した生の値なので、実際の値は。。。
0077h -> 119d
4.9mV*119 = 583.1mV がA0ピンで取得した電圧値

温度センサLM60BIZのデータシートを見ると、出力電圧と、
温度の関係が以下の式で表されています。
Vo = (+6.25[mV/℃] * T[℃])+424[mV]
このため
T = (Vo-424)6.25
 = 25.44[℃]

大体あってそうですね
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/05/19(日) 18:54:50|
  2. Arduino
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。