로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 leeky        
작성일 2008/08/21
첨부#1 Oscilloscope.pde (2KB) (Down:1191)
Link#1 project (Down:417)
ㆍ추천: 0  ㆍ조회: 6201   
  아듀이노 USB 오실로스코프
참조 사이트 : http://accrochages.drone.ws/node/90
제목 : Poorman's oscilloscope
요구사항 : 아듀이노 기판 + 아듀이노 소프트웨어 + 응용 소스(첨부 파일)
 
  

이 소프트웨어는 아날로그 신호를 가시적으로 화면에서 볼 수 있습니다.
깜찍한 실시간 오실로스코프로 분해능은 10 비트 입니다.
이것은 응용소스가 업로드 된, 아듀이노 기판의 A0의 값을 읽어서,
직렬포트를 통해 송신된 값을 PC의 USB 포트에서 수신하여 작동합니다. 
 
장치의 구성
* Processing 첨부파일을 내려받기 하십시요. 
* 호출방법 import processing.serial.*;
* 준비물 아듀이노 소프트웨어 + 아듀이노 기판

설명
1. 첨부된 파일을 내려받고, 아듀이노 소프트웨어에서 스케치 파일로 pde를 연다.
2. 가장 아래에 첨부된 아듀이노 기판용 pde를 만들어, 컴파일 한 다음,
3. 아듀이노 기판에 업로드한다, 일단 아듀이노 프로그램을 닫는다.
4. 화면처리 코드를 작동시킨다.

// 아듀이노로 만드는 USB 오실로스코프
// 아날로그 입력핀 A0의 데이터를 USB 포트로 전송하여 화면에 파형을 그린다.
// 참조 사이트 : http://accrochages.drone.ws
// 저자 : (c) 2008 Sofian Audry (info@sofianaudry.com)

// 이 소트트웨어는 무료이다. 배포 및 개조를 할 수 있다. GNU 일반 공개 저작권에 따른다.
// 이프로그램은 자유롭게 사용하도록 배포되었다. 그러나 어떤 보증도 하지 않는다.
// GNU 일반공개 저작권에 대한 상세한 내용을 받을 수 있다. http://www.gnu.org/licenses/

다음은 아듀이노 기판에 업로드하는 응용소스이다.
#define ANALOG_IN 0
void setup()
{
  Serial.begin(9600);
}


void loop()
{
  int val = analogRead(ANALOG_IN);
  Serial.print( 0xff, BYTE);
  Serial.print( (val >> 8) & 0xff, BYTE);
  Serial.print( val & 0xff, BYTE);
}


위의 응용소스를 아듀이노 소프트웨어의 스케치 장에 붙혀 넣고,
컴파일한 다음, 아듀이노 기판에 업로드한다.

첨부파일 : Oscilloscope.pde, 크기 : 1.88 KB
 
화면처리 소프트웨어 

// 라이브러리는 arduino-0011 > hardware > libraries > SoftwareSerial > 폴더에
// SoftwareSerial.cpp 및 SoftwareSerial.h와 SoftwareSerial.o가 들어 있다.
import processing.serial.*;   // 아듀이노에 저장된 라이브러리를 읽어 온다.
Serial port;    // 직렬 class로 부터 object 를 생성한다
int val;          // 직렬포트에서 수신한 값을 저장한다
int[] values;  // 수심값을 바이트로 만들어 저장한다.

void setup()
{
  size(640, 480);    // 아듀이노 기판이 연결되면 포트를 연다. 속도는 9600을 사용한다

  port = new Serial(this, Serial.list()[0], 9600);
  values = new int[width];
  smooth();          // 평균화를 통해 잡음을 제거할, 라이브러리에 들어 있는 함수를 부른다.
}


int getY(int val)     // 수신된 값을 표시할 화면의 크기에 맞춘다.   
{
  return (int)(val / 1023.0f * height) - 1;
}


void draw()          // 그림을 그리는 주 함수
{
  while (port.available() >= 3)             // 포트번호가 3번 이상이면, 가상 직렬포트를 읽어서 바이트로 만든다.

  {
    if (port.read() == 0xff) 
val = (port.read() << 8) | (port.read());
  }

  for (int i=0; i<width-1; i++) values[i] = values[i+1];           // 표시할 화면의 폭 만큼 변수를 준비한다
  values[width-1] = val;                      // 바이트 값을 변수에 저장한다
  background(0);                                // 화면의 배경색을 0으로 설정
  stroke(255);                                     // 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]));
   }
}


다음 사진은 아듀이노 USB 스코프로, LED를 점등하는 1KHz PWM 파형을 측정한 그림이다.


 
그림 출처 : http://accrochages.drone.ws/en/node/90

앗, 그렇군요, 아듀이노의 스케치 기능에는 응용코드만 컴파일하고, 기판에 업로드만 하는것이 아니네요,
프로세싱이라는 처리를 이용하여, 라이브러리를 부르고, PC의 통신, PC의 화면까지 제어하네요,
음~~, 아듀이노 하드웨어를 정신없이 개발하느라, 이것 까지는 미처 몰랏네요,,,아듀이노 재미 있습니다,

프로세싱이 작동하기 위해서는?
프로세싱 소프트웨어를 별도로 설치하여야 합니다.
그밖에  아듀이노 프로세싱 소스에 따라서, 예를 들면, oscilloscope.h를 필요로 합니다.
 
다음 소스는 oscilloscope.pde의 작동에 필요한 oscilloscope.h 이다.
/*
 * oscilloscope.h
 *
 * Gives a visual rendering of a value (typically analog pin 0) in realtime.
 *
 * This is an object-oriented version of the Poorman's oscilloscope as explained here:
 *
http://accrochages.drone.ws/node/90
 *
 * (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/>.
 */
#ifndef OSCILLOSCOPE_INC
#define OSCILLOSCOPE_INC

#include "WProgram.h"
void writeOscilloscope(int value) {
  Serial.print( 0xff, BYTE );                // send init byte
  Serial.print( (value >> 8) & 0xff, BYTE ); // send first part
  Serial.print( value & 0xff, BYTE );        // send second part
}

#endif
/* An example of Arduino code. */
/*
#include "oscilloscope.h"

#define ANALOG_IN 0
void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(ANALOG_IN);
  writeOscilloscope(val);
}

*/
/* The Processing code */
/*
import processing.serial.*;

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

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, Serial.list()[0], 9600);
  values = new int[width];
  zoom = 1.0f;
  smooth();
}

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

int getValue() {
  int value = -1;
  while (port.available() >= 3) {
    if (port.read() == 0xff) {
      value = (port.read() << 8) | (port.read());
    }
  }
  return value;
}

void pushValue(int value) {
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = value;
}

void drawLines() {
  background(0);
  stroke(255);
 
  int displayWidth = (int) (width / zoom);
 
  int k = values.length - displayWidth;
 
  int x0 = 0;
  int y0 = getY(values[k]);
  for (int i=1; i<displayWidth; i++) {
    k++;
    int x1 = (int) (i * (width-1) / (displayWidth-1));
    int y1 = getY(values[k]);
    line(x0, y0, x1, y1);
    x0 = x1;
    y0 = y1;
  }
}

void keyReleased() {
  switch (key) {
    case '+':
      zoom *= 2.0f;
      println(zoom);
      if ( (int) (width / zoom) <= 1 )
        zoom /= 2.0f;
      break;
    case '-':
      zoom /= 2.0f;
      if (zoom < 1.0f)
        zoom *= 2.0f;
      break;
  }
}

void draw()
{
  val = getValue();
  if (val != -1) {
    pushValue(val);
    drawLines();
  }
}
*/


프로세싱이란?
미국 MIT 대학의 미디어랩에서 개발된 시각적 표현방식의 프로그래밍 언어로,
전자 예술(electronic arts)과 시각 디자인 커뮤니티를 위해 만든 언어이며 또한 개발환경입니다.
프로세싱의 목적은 프로그래밍이 비전공인 사람들에게 쉽게 프로그래밍 개념을 배울수 있게 하는 것입니다.
 
프로세싱은 그림, 동영상, 소리를 만들려는 사람들을 위한, 공개소스 언어이며 제작도구(개발환경)입니다.
이것은 학습, 시작품, 제품을 위해 학생, 예술가, 창작자, 조형물 설계, 취미활동 등에 사용됩니다.
이것은 소프트웨어 스켓치와 전문가 도구로 지원하는 시각적인 문서로, 프로그램의 원리를 가르치려고 만들었습니다.
프로세싱은 동일한 분야에서, 소프트웨어 도구와는 다르게, 아티스트와 디자이너들에 의해 개발되었습니다. 
 
현재 많은 대학에서 인문학이나 혹은 예술 전공 학생들에게 이 프로세싱을 가르치고 있습니다.

특히 미디어 아트를 하는 분들이 많이 배우고 또 실제 작품(혹은 시작품)에 사용하고 있습니다.
프로세싱은 컴퓨터에서 그림, 동영상, 소리등을 편리하게 처리할 수 있는 배우기쉬운 언어라는 것입니다. 
 
하드웨어를 이용하는 프로세싱의 종류는 Wiring, Fritzing, Gainer, Arduino 등이 있으며,
대부분 하드웨어를 제어하는 물리적 제어와 가시적 표현을 하는 소프트웨어 프로세싱을 포함하고 있다.
이 중에서 가장 많이 사용되고, 폭 넓은 분야에 보급된  아듀이노는, 첫째로 하드웨어의 비용이 저렴하고,
두번째로, 하드웨어, 소프트웨어, 프로세싱의 표준화와 공개화로, 많은 분야에서의 활용이 기대되는 방식이다. 

프로세싱이 아듀이노 다음에 별도로 설치되고, 또한 설치한 프로세싱이 정상적으로 작동되어야 합니다.
프로세싱 소프트웨어 사이트로 바로가기 입니다. http://processing.org/

프로세싱이 설치되기 위해, Java 6 Standard Edition이 먼저 설치되야 합니다.
Java가 포함된 PC용 프로세싱을 설치하려면 아래 파일을 설치합니다.
파일 크기가 큽니다. 59.6M입니다. http://processing.googlecode.com/files/processing-1.5.1-windows.zip
 
Java를 이미 설치한 PC의 경우는 아래 파일을 설치합니다.
http://processing.org/download/processing-1.5.1-expert.zip

내려받기한 Processing-1.5.1의 압축을 풀고, Processing-1.1.1 폴더를 C: 로 이동합니다.
폴더의 내용은 다음과 같습니다. (무설치 포터블 버전입니다)
 
  

폴더 안의 아래 부분에 processing.exe를 실행하면 PC에 다음과 같은 창이 뜹니다.
프로세싱의 사용방법은 시간이 나는데로, 이 게시판에서 별도의 제목으로 설명하겠습니다.
 
 
File -> Open 을 누르고, C:processing-1.5.1examplesDCameraOrthoVSPerspective 에서,
OrthoVSPerspective.pde를 누르면, 다음과 같이 프로세싱 소스가 뜹니다.
  
 
Sketch -> Run을 누르면 다음과 같이 입체그림이 나타나면, 프로세싱이 정상입니다.
마우스로 그림의 임의의 면을 누르면, 정육면체가 회전합니다. (프로세싱 작동 예 입니다.)
 

이 응용자료는 무료이므로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA

 AVRTOOLS™
   
이름아이콘 TreeOfDrea
2010-03-24 22:44
검은 화면만 뜨고 파형이 안 그려지네요 T.T
아듀노이 코드는 업로드 하고 프로세싱 코드 프로세싱 프로그램으로 돌렸더니
검은 화면만 떠요.. 뭐가 잘못된 걸까요?
   
이름아이콘 avrtools™
2010-04-13 23:22
프로세싱이 아듀이노 다음에 별도로 설치되고,
또한 설치한 프로세싱이 정상적으로 작동되어야 합니다.

프로세싱 소프트웨어 사이트로 바로가기 입니다.
http://processing.org/

프로세싱이 설치되기 위해, Java 6 Standard Edition이 먼저 설치되야 합니다.
Java가 포함된 PC용 프로세싱을 설치하려면 아래 파일을 설치합니다.
파일 크기가 큽니다. 59.6M입니다.
http://processing.googlecode.com/files/processing-1.5.1-windows.zip

Java를 이미 설치한 PC의 경우는 아래 파일을 설치합니다.
http://processing.googlecode.com/files/processing-1.5.1-windows-expert.zip
   
 
윗글 아듀이노 RGB LED
아래글 가속도계 ADXL202 응용소스
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 487 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17510 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2653 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2749 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5490 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4591 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3143 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2815 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3173 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2798 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3043 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7631 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 3962 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3398 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 4996 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 3926 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3459 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3158 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6315 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3822 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5341 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 6940 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 7902 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4356 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4616 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5242 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9312 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16505 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6442 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5326 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4587 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 3939 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5814 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4421 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4469 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4652 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5178 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 3935 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13439 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9154 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5631 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6481 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 3973 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3282 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3091 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 4948 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 4909 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5593 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4026 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3319 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4533 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9564 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3395 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4825 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6201 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4688 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4632 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 4984 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4508 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7204 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6312 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0