본문 바로가기
Arduino/AVR/2. Arduino프로젝트

processing을 이용한 아두이노 오실로스코프(oscilloscope)

by pepsiman 2009. 6. 18.
아두이노 전압계 와 processing 만 있으면 아두이노를 오실로스코프로 활용할수 있습니다.

일단 아두이노는 이전 포스팅의 전압계 프로그램을 넣어 놓습니다.

processing라는 프로그램을 다운 받아 설치합니다.


processing에 다음 코드를 붙여 넣게 합니다.
/*
 * Oscilloscope
 * Gives a visual rendering of analog pin 0 in realtime.
 * 
 * This project is part of Accrochages
 * See http://accrochages.drone.ws
 * 
 * (c) 2008 Sofian Audry (info@sofianaudry.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */ 
import processing.serial.*;

Serial port;  // Create object from Serial class
int val;      // Data received from the serial port
int[] values;
String s;

void setup() 
{
  size(640, 480);
  // Open the port that the board is connected to and use the same speed (9600 bps)
  port = new Serial(this, "COM3", 9600);
  values = new int[width];
  smooth();
}

int getY(int val) {
  return (int)(val / 600.0f * height) - 1;
}

void draw()
{
  while (port.available() >= 1) {
    //if (port.readString() == 0xff) {
    //  val = (port.read() << 8) | (port.read());
    //}
    s = trim(port.readString());
    val =   int(s );
    println(val);
  }
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = val;
  background(0);
  stroke(255);
  for (int x=1; x<width; x++) {
    line(width-x,   height-1-getY(values[x-1]), 
         width-1-x, height-1-getY(values[x]));
  }
}
원본코드를 아두이노 전압계에 맞게 약간 수정 했습니다.
아두이노에서 시리얼 포트(제꺼에서는 COM3)쪽으로
119
399
47
499
38
169
436
13
499
이런 식으로 출력 됩니다
이걸 processing에서 받아서 그래프로 출력합니다.



결과물을 볼까요?

아두이노의 ADC가 여러개 있으니 다채널도 가능하겠지요.