2017-02-01 40 views
0

私はArduino Unoボードの温度センサーからデータを取り込み、データをグラフにプロットしながらリアルタイムでセンサーの変更をモニターするようにしています。これは最終的には異なるセンサーで実装されます。これは概念証明です。私は現在、私の二つの問題を悩まれている:シリアルポートからのデータの読み取りとリアルタイムでのプロット

1)私は大量のデータを監視する数秒後にデータ・ポイント1000倍の私の現在のコードが行うことができない(第2)

2)を収集する必要がありますノイズがシステム

がここにここに私のMATLABコード

SerialPort = 'com6'; 

s = serial(SerialPort, 'BaudRate', 250000, 'DataBits', 8); 

fopen(s); 

voltage = 0; 

t = 0; 

y = 1; 

voltage = fscanf(s); 
VoltageValue(y,1)=str2double(voltage); 
h = animatedline(t,VoltageValue(y,1)); 

xlim([0 1000]); 
ylim([100 200]); 


tic 
while t <= 1000 
voltage = fscanf(s); 
VoltageValue(y,1)=str2double(voltage); 
addpoints(h, t, VoltageValue(y,1)); 
t= t+1; 
y= y+1; 
drawnow 
end 
toc 

fclose(s); 
delete(s); 
clear s; 

は私のArduinoのコード

です入り
int tmppin = 0; 

void setup() { 
    // put your setup code here, to run once: 

Serial.begin(250000); 
pinMode(tmppin, INPUT); 
} 

void loop() { 
    // put your main code here, to run repeatedly: 

int tempreading = analogRead(tmppin); 

Serial.println(tempreading); 
} 
+1

シリアルから1秒間に1000データは取得されません。 100Hzでもそれを伸ばしている。また、ADCは1000Hzを行うことができないので、二重にねじ込まれています;) – dandavis

答えて

0

私が試したことから、38400bdのシリアル通信は1kHzでintを送信するのに十分です。 115200bdsを使用できます。通常動作する場合でも、500000bdsの速度はサポートされていません。

ADCは1000Hzで問題ありません。 ArduinoコマンドanalogReadは10kHzで動作します。 atmel MCUのレジスタに直接アクセスすると、analogReadを100kHzに高速化できます。

コードはdrawnowで遅くなります。 1kHzでリフレッシュする必要はありません。 10Hzでリフレッシュすると、あなたの目にはリアルタイムです。

arduinoスケッチでは、delay(1)(1ms)を入力してください。シリアルバッファがいっぱいにならないことがわかります。

+0

答えに時間を割いていただきありがとうございます!私は今、仕事をしています。 –