본문 바로가기
만들기/랩뷰(labview)

[matlab] 아두이노 여러개의 아날로그 데이터를 3D 그래프로 나타내기

by 훨훨날아 2022. 7. 6.

자기장을 측정할 수 있는 홀센서를 아두이노 아날로그 핀과 연결한뒤 매트랩을 이용하여 실시간 데이터를 3D그래프로 나타냈다.

매트랩을 아두이노와 연결하기 위해 매트랩의 아두이노 하드웨어 애드온을 설치해 주었다. 아날로그 신호를 읽을 수 있도록 매트랩 코드를 짠 뒤 bar3을 이용하여 3차원 막대그래프로 만들었다. 

 

 

 

기능적으로는 만들어졌지만 최적화되지 못한것이 몇가지 있다.
1) 실시간 데이터를 받는 과정에서 반복횟수를 정하고 for 루프가 돌아가도록 만들었다. 이것을 시간이 흐르는 동안으로 만들어야할 것 같다.
2) 데이터를 업데이트 시킬때 for 루프 안에서 아날로그값을 계속 불러오고 bar3그래프를 반복적으로 그리게되는데 bar3은 그대로 있는 상황에서 값만 업데이트하는 방법을 찾아봐야겠다.

arduinoObj = arduino("COM4", "Mega2560") % 하드웨어 자동생성으로 코드만듦


configurePin(arduinoObj, "A0", "AnalogInput");
configurePin(arduinoObj, "A1", "AnalogInput");
configurePin(arduinoObj, "A2", "AnalogInput");


A0 = readVoltage(arduinoObj, "A0"); % 아두이노에서 아날로그값 불러오기
A1 = readVoltage(arduinoObj, "A1");
A2 = readVoltage(arduinoObj, "A2");
A3 = readVoltage(arduinoObj, "A3");
A4 = 1;
A5 = 1;
Z = [A0, A1, A2;
    A3, A4, A5];

x = 1:1:1000; % 반복되는 횟수
n = numel(x);

figH = figure;

for i = 1:n

    if ~ishghandle(figH) % figure를 닫으면 종료되는 코드
        break
    end

    A0 = readVoltage(arduinoObj, "A0");
    A1 = readVoltage(arduinoObj, "A1");
    A2 = readVoltage(arduinoObj, "A2");
    A3 = 1;
    A4 = 1;
    A5 = 1;

    Z = [A0, A1, A2;
    A3, A4, A5];
    
    bar3(Z*1000) % 바차트를 이용해서 3D 그래프로 표시하기
    
    pause(0.1)
end

clear arduinoObj
반응형