Làm thế nào tôi có thể giao tiếp từ Arduino đến MATLAB


7

Tôi muốn sử dụng các cảm biến trên Arduino để điều khiển các giá trị trong chương trình MATLAB . Lựa chọn của tôi để giao tiếp là gì?

Tôi đã sử dụng Xử lý để nhận dữ liệu được gửi qua cáp nối tiếp và chiến lược đó đã hoạt động khá tốt. Có điều gì tương tự tôi có thể làm khi sử dụng MATLAB không? Tôi hơi mới đối với MATLAB, vì vậy hướng dẫn nhẹ nhàng sẽ rất tuyệt.

Tôi thực sự không tìm kiếm thứ gì đó giống như gói ArduinoIO - tôi muốn có tính toán riêng biệt thực hiện trên Arduino và thỉnh thoảng thông báo cho chương trình MATLAB của tôi (đôi khi sẽ thăm dò dòng nối tiếp, tôi cho rằng).


6
Bạn có cần trợ giúp viết mã cho Arduino hoặc giúp viết mã MATLAB để đọc dữ liệu đầu vào từ luồng nối tiếp không?
apnorton

1
Câu hỏi này dường như lạc đề vì đó là về lập trình trong Matlab.
Chàng trai với chiếc mũ

Cổng nối tiếp là đặt cược tốt nhất của bạn. Tôi sẽ xác định một định dạng tin nhắn đơn giản dựa trên nhu cầu của bạn. Nếu bạn chỉ làm những việc đơn giản như bật / tắt van: Tôi sẽ xác định một byte bắt đầu theo sau là một số byte dữ liệu cố định. Nếu bạn muốn phức tạp hơn trước tiên hãy gửi một byte độ dài, theo sau là nhiều byte dữ liệu. Xin nhớ: không gửi byte nối tiếp không ngừng nghỉ, luôn có một vài lần ngắt (chu kỳ ngủ) trong dữ liệu cho phép các chip nối tiếp phục hồi xung nhịp.
portforwardpodcast

Câu trả lời:


5

Gói hỗ trợ MATLAB cho Arduino (còn gọi là Gói ArduinoIO) cho phép bạn thực hiện khá dễ dàng.

Sử dụng mẫu:

% - kết nối với bảng

a = arduino('COM9')

% - chỉ định chế độ pin

a.pinMode(4,'input');

a.pinMode(13,'output');

% - i / o kỹ thuật số

a.digitalRead(4) % read pin 4

a.digitalWrite(13,0) % write 0 to pin 13

% - tương tự i / o

a.analogRead(5) % read analog pin 5

a.analogWrite(9, 155) % write 155 to analog pin 9


Nếu tôi hiểu ArduinoIO chính xác, tất cả các tính toán được bắt đầu ở phía Matlab và Arduino chỉ trở thành một phần mở rộng cảm biến. Đó không phải là điều tôi muốn. Tôi muốn có một chương trình trên Arduino (thực hiện tính toán riêng) đôi khi giao tiếp với Matlab.
Bill Nace

1
Phía MATLAB chỉ đơn giản cung cấp cho bạn các chức năng để giao tiếp với Arduino. Tùy bạn / khi nào bạn muốn hai người giao tiếp với nhau. Arduino có thể ghi vào cổng nối tiếp và điều này cho phép bạn đọc từ nó.
sachleen

3

Tôi không biết nhiều về MATLAB, nhưng tôi đã tìm thấy một số hướng dẫn về đọc và viết từ cổng nối tiếp:

s = serial('COM1');
fopen(s)
fprintf(s, 'Your serial data goes here')
out = fscanf(s)

out bây giờ là dữ liệu nhận được của bạn và bạn có thể làm bất cứ điều gì bạn muốn với nó.

Đóng:

fclose(s)
delete(s)
clear s

Đó là từ Viết và Đọc dữ liệu ( MATLAB / Quản lý dữ liệu và tệp / Thiết bị cổng nối tiếp ).

Từ câu hỏi của bạn, tôi giả sử bạn biết về khía cạnh Arduino (sử dụng Serial).


0

Tôi đã thiết lập kết nối, gửi số. Bằng cách chỉ cần thay đổi Serial.write thành Serial.print và chuyển sang fscanf, bạn có thể gửi / nhận văn bản ASCII rõ ràng thay vì dữ liệu nhị phân.

Cả hai mã MATLAB và arduino có thể được tìm thấy tại câu hỏi này:

/programming/24368670/matlab-plot-serial-data-continiously


-1

clc xóa tất cả giá trị toàn cầu giá trị toàn cầu1 toàn cầu val5 toàn cầu val6 toàn cầu val7 toàn cầu val8 toàn cầu val9 a = arduino ('COM4'); giá trị = số không (); giá trị1 = số không (); val5 = số không (); val6 = số không (); val7 = số không (); val8 = số không (); val9 = số không (); cho i = 1: 1000

val1 (i) = analogRead (a, 0) / 2; % không liên quan

val2 (i) = analogRead (a, 1) / 2; % nóng

val3 (i) = analogRead (a, 2) / 2; % tản nhiệt

val4 (i) = analogRead (a, 5) / 2; % atmsphr

val8 (i) = analogRead (a, 6) / 2; %sức ép

val9 (i) = analogRead (a, 7) / 2; %sức ép

val (i) = analogRead (a, 0) / 2;

giá trị (i) = (val1 (i) + val4 (i) + val3 (i)) / 3;

giá trị1 (i) = (val8 (i) -val9 (i)); %sức ép

val5 (i) = analogRead (a, 0) / 2% đến

val6 (i) = analogRead (a, 4) / 2% đi

val7 (i) = value (i) -val6 (i) lô (giá trị, 'r'); tiêu đề (tem nhiệt độ tản nhiệt ');

hold on

plot(val5, 'k');

title('incoming air temprature');
plot(val6, 'g');

title('outgoing air temprature');

 plot(val4, 'k');
 title('atmospheric temperature');

plot(val7,  'c');
title('change in temprature');

pause(6)

figure
plot(value1,  'r');
title('change in pressure'); 

pause(6)

kết thúc


1
Cung cấp một câu trả lời mã mà không có lời giải thích về những gì nó không phải là một câu trả lời hợp lệ ở đây trên StackExchange. Bạn có thể chỉnh sửa bài viết của bạn cung cấp một số thông tin?
LoganBlades
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.