2017-02-01 4 views
0

Я ищу данные от датчика температуры на плате Arduino Uno и хранят данные в Matlab, а также отображают данные на графике в реальном времени для мониторинга изменений сенсора , В конечном итоге это будет реализовано с помощью другого сенсора, и это скорее доказательство концепции. Я два вопроса в настоящее время меня беспокоит:Чтение данных из последовательного порта и построение графика в реальном времени

1) Мне нужно собрать точек данных 1000X в секунду (мой текущий код не может сделать)

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

вы не получите 1000 данных в секунду от серийного номера; afaik даже 100Hz растягивает его. Кроме того, АЦП не может работать на частоте 1000 Гц, поэтому вы двойные винты;) – dandavis

ответ

0

Из того, что я пробовал, последовательной связи на 38400bd достаточно для передачи int на 1 кГц. Вы можете использовать 115200bds; ваша скорость 500000bds не поддерживается, даже если она обычно работает.

У АЦП не будет проблем с 1000 Гц. Команда Arduino analogRead работает на частоте 10 кГц; и если вы получите доступ к регистру atmel MCU напрямую, вы можете ускорить аналоговое чтение до 100 кГц.

Ваш код замедлен с drawnow. Вам не нужно обновляться на частоте 1 кГц; если вы обновляетесь на частоте 10 Гц, это будет реальное время для вашего глаза.

В эскизе arduino вы должны положить delay(1) (1ms), чтобы вы знали, что серийный буфер не будет заполнен.

+0

Спасибо, что нашли время ответить! Сейчас у меня все работает. –

Смежные вопросы