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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
 Sensor Applications
아듀이노 응용소스
작성자 avrtools™        
작성일 2013/09/04
첨부#1 mySight.zip (1,009KB) (Down:381)
첨부#2 CDM_2.08.30_WHQL_Certified.zip (3,238KB) (Down:119)
Link#1 (Down:78)
ㆍ추천: 0  ㆍ조회: 2161   
  Arduino로 만드는 mySpectral 분광기
 
 
Spectrometer (빛의 파장 분포를 측정하는 장비)를  제작을 해 보자.
사람의 눈은 개인차가 있지만 빛의 파장에 따라 다른 색과 밝기로 인식한다.


제 1장 분광기의 소개
수준급 과학의 경험 간단하게, 가능한 분광기는 광학, 전자공학, 화학 혹은 기상학의 경험으로 이상적인 선택이다.

손에 들 수 있는 광 파장계(Light Wavelength Meter)는 발전된 연속 회절격자(Continues Diffraction), 
그리고 광신호의 측정과 처리의 기본을 설명할 수 있다.
 
우리가 무료로 제공하는 소프트웨어는 몇 초안에 쉽게 사용할 수 있고, 보고서에 포함되는 공개 수준의 구현이다.

우리는 물리와 화학 교사와 부모를 위해 분광기의 안전한 경험과 함께 교재를 준비했다.
  


알미늄으로 제작된 CCD 센서의 몸체와 CCD 센서 (Sony ILX554B)
    
 
기술 도면, 회로기판의 설계, 아듀이너 분광기의 부품목록,
이제 Specduino 분광기를 직접 만들어 보자.

좌측은 분광기 제작에 필요한 하드웨어와 PC 소프트웨어이며,
우측은 Spectruino를 사용하여 측정할 수 있는 광원들을 보여 준다.
 

 
 
분광 격자 (Diffrection Grating)
무반사 검정색의 CCD Shield 내부로 들어온 빛은, 오목한 반사경 모양의 반사격자(Grating)에서 
360~760nm 파장별로 반사되어 CCD 센서 어레이에 일렬로 배치된 광검출 소자(pixels)로 들어간다.
 

CCD ILX554B : Sony 2MHz 2048 Pixels CCD Array
 
 
OPA350U : TI 38MHz 영상처리용 OPAmp.
 

공개소스 Arduino 분광기
만들며 배우는 Spectruino 분광기는 광학, 물리학, 생물학을 직접 경험할 기회를 제공한다.
무료 소프트웨어 다음에 소개하는 Spectruino와 mySight 소프트웨어의 설치방법을 따른다.
http://myspectral.com/spectruino-installation.html

- 압축 파일인 mySight.zip은 이 자료의 첨부파일을 받아도 된다.
- 실행파일 mySight.exe와 rxtxSerial.dll은 Windows32 서브폴더 안에 있다.
- 201204-CAD-blacky-spectruino.pdf와 201206-IMG-spectruino-diagram02.pdf 도 있다.
- Lib와 Source 폴더에는 다음과 같은 소스가 들어 있다.
  

실내용, 야외용 그리고 우주 탐사용 Spectruino 분광분석기(spectrophotometer)는
자외선 부터 근적외선 파장까지 반응하는 감각적인 분광기의 설치가 필요하다,
- 교정 레이저, 없으면 어찌 하나?
- 과학의 경험이 제한적 이면?
- Spectruino를 만난다, 세계에서 첫번째로 공개하는 분광기의 소스이다.  
MySpectral 소스 : https://github.com/jorellalicki/OpenSourceSpectrometer/archive/master.zip

저렴한 장난감과는 달리, Spectruino는 군용급의 stainless 강판과 최신세대의 알미늄으로 구성되었다.
마지막으로 당신은 휴대용 분광기와 함께 색을 교정하려고 연구실에 머무르거나, 

우주에서 당신의 꿈과 경험을 하거나, 환경감시를 위해 야외로 나갈 수도 있다. 

CD 센서의 응용 : LED 광속 측정 (LED Intergrate Sphere).
 
 
CCD 센서의 응용 : 분광 분석기 (Light Spectrum Analyzer).
http://www.kickstarter.com/projects/575960623/ardusat-your-arduino-experiment-in-space

과학탐사 위성인 Ardusat에 들어있는 Specduino
  
 
CCD 센서의 응용 : Grain sorter, 


 
CCD 센서의 응용 : DNA sequencer,
 


CCD 센서의 응용 : Displacement sensor.
 
 
Arduino CCD Shield 인터페이스 회로도
CCD는 ILX554B, 아날로그 완충증폭기는 OPA350, 기준전압은 TL431을 사용한다.  

 
CCD Shield 회로도 :   MySpectral_Schematics.pdf(19KB)
CCD Shield 시험용 소스 :  CCD_test2.zip(1.3KB)

mySpectral의 광원 인식과 분석
Arduino의 분광(Spectrum) 인터페이스(Shield)는 광원(Light Source)의 밝기와
아래의 광원들에서 방사되는 연속된 파장의 분포(Spectrum)를 측정할 수 있다.
- 레이저 다이오드 (Laser diodes)
- 반도체 발광소자 (LED)
- 전구의 형광 (Fluorescent lightbulbs)
- 가스 방전관 (Gas discharge tubes)
- 수조의 광원 (Fish tank light tubes)

 
- 수평(X) 축은 파장(Wavelength), 수직(Y) 축은 각 파장 성분들의 밝기(Intensity)이다.

태양 활동의 파장 분포(Solar spectrum)와 밝기의 분석
태양의 파장 분포의 변화에 의존하는 현재 대기 조건의 기상측정으로
수자원 조건과 태양 분광의 모양과 밝기의 관련성을 발견할 수 있다.

 
 
제 2장 Arduino CCD 인터페이스(shield)의 내부.
Arduino로 희망하는 모든 빛의 처리가 되는가? Spectruino는 된다.
ATmega328P과 ATmega168 프로세서와 호환되는 Arduino 데시밀라, 듀에밀라, 나노, 미니
(Arduino Uno인 M328-mini-V2.0도 가능)를 위한 CCD 인터페이스(Arduino Shield)를 설계하였다.  
오직 몇개의 핀을 사용한다. 그렇게 만들 수 있고, 우주탐사 로봇을 쉽게 조정할 수 도 있다.
 
 
Spectruino의 설치 (Arduino 소프트웨어의 설치 방법)
1. Ardunino 기판의 종류에 알맞는 Driver를 설치한다. http://arduino.cc/it/Guide/Windows#toc4
2. Arduino Nano, Decimilla, Duemilanov는 FTDI 드라이버가 필요하다.

OS에 맞는 (USB를 사용하는 가상 직렬 통신포트) 드라이버를 설치한다.
Arduino Uno의 드라이버는 Arduino 편집기, 번역기인 Sketch 폴더안에 이미 들어 있다.

FTDI 드라이버는 http://www.ftdichip.com/Drivers/VCP.htm 에서 찾을 수 있다.
다음 바로가기와 같이 Windows XP/Vista/7은 32-비트 버전을 사용한다.
http://www.ftdichip.com/Drivers/CDM/CDM 2.08.30 WHQL Certified.zip
 
mySight 소프트웨어 분석기의 설치방법
1. https://github.com/methoxid/mySight 에서 mySight 소프트웨어를 내려 받는다.
2. 압축된 mySight.zip 파일을 C:의 mySight 폴더에 풀어 놓는다
3. 폴더 C:mySight 안의 windows32 하위 폴더에서 mySight.exe와 mySight.dll을 mySight로 복사한다.
4. 복사된 mySight 폴더에서 mySight.exe를 실행한다.
(하위의 폴더 Windows32 에서 실행되지 않는다)
 

 
5.
 인터터페이스가 없다면, 키보드 숫자 "1"을 누르면 모의실행(simulation)을 시작한다.
 
 

6. 키보드 숫자 "2"를 누르면 Spectruino를 찾는다.
인터페이스가 있다면 2를 누르고 mySight를 시작하면 통신포트에서 인터페이스를 찾는다.
만일 가상직렬포트에서 장치를 찾을 수 없다면 다음과 같은 화면이 나온다.
아래의 문제 해결(Troubleshooting) 항목을 참조하라
.
 

 
문제 해결 (Troubleshooting)
만일 어떤 문제가 있다면, 프로세싱을 다운로드하고 설치한다.

무료 그래픽 프로세싱 컴파일러 : http://processing.org/download/ 
프로세싱을 실행하고 스켓치(프로세싱 소스파일) mySightmySight.pde를 열고 편집한다.
도움이 필요하면 우리에게 편지를 하라. 우리는 즉시 github에 소프트웨어를 업데이트 한다.
 
프로세싱에서 mySight 스켓치를 다음과 같이 수행한다.
1. 직렬 포트 메뉴를 열고. 직렬포트 목록에서 Spectruino를 찾는다. 
2. USB를 경유하여 들어오는 가상직렬포트의 바이트 stream을 읽는다.
3. 들어온 바이트 stream을 분리하여 길이가 501개 인지 확인한다.
   HEADER bytes가 알맞는 사이즈 501인지 점검한다. 생성(construct)한다
4. 바이트 열을 Spectrum class로 생성한다
5. Spectrum을 그린다 (Plot)
6. 키보드의 숫자를 1, 2, 3, ..... 0을 누르고 기다린다.
   Spectroduion로 노출시간 "Set exposure time (N)" 명령을 보낸다. (N은 숫자)
7. Spectruino는, 노출시간 SetExposureTime(N) 명령을 받으면, 가로채기가 시작(triggered)된다.
   그리고 확인 문자들(characters)이 데이터 전송 중이라도 즉시 회신(sent back)된다.
8. 키보드 "space"를 누르면 파장의 밝기(wavelength intensity)가 읽혀질 것이다.
9. 교정(calibration) 파일이 읽혀지기 시작한다. x-측의 "wavelength [nm]"로 "Pixels"이 들어온다.
   파일은 반드시 실행 폴더에 상주(Resident) 하고 있어야 한다.
10. 마우스를 눌러서 PNG로 그래프를 저장한다.
 
Spectroduino의 펌웨어에서 가상 직렬 포트 (비동기 RS232)를 처리하는 방법.
1. 비어있는 USB 포트에 Spectruino를 연결한다.
2. 프로그램 언어(Processing을 추천한다)의 소스에서 직렬포트를 연다 (예. COM4)
3. 정수(integer values)로 직렬 바이트 열(array)을 0부터 255 까지 Spectroduino에서 PC로 송신한다.
   [pixel1] [pixel2] ... [pixel501], char(A), char(x), 0x01, 0xF5, char(B), 0x01, 0xF5, char(c), char(y)
4. Spectruino이 파장 위치에 맞게 새로운 측정을 한다. CCD 센서는 노출된 빛을 받고 있다. 

5. 단계 3부터 반복한다.
6. 만일 PC로 부터 Spectruino로 들어온 문자가 있으면 수신해야 한다.

Spectroduino의 Arduino 기판 시험용 펌웨어
파일 위치 : OpenSourceSpectrometer / Software / Arduino / CCD_test /

// CCD sensor의 8, 22, 21번 핀은 5V에 연결한다.
// CCD sensor의 20번 핀은 9V로 연결한다. 
// CCD sensor의 4, 10, 19, 12번 핀은 GND로 연결한다.
// CCD sensor의 출력은 OPA350으로 완충(3번 입력, 6번 출력)한다,

// OPA350U 6번 출력은 Arduino A1 핀으로 아날로그 값으로 읽는다.
// Arduino D9 핀 출력은 CCD의 clock으로 연결.
// Arduino D10 핀 출력은 CCD의 shutter로 연결.
// Arduino D11 핀 출력은 CCD의 roc로 연결.
// Arduino의 UART 속도와 포맷은 9600,N,8,1 (Arduino 디버깅용)
// 실제는 57600,N,8,1을 사용해야 한다.  

int vOut = A1;               //connected to pin 1
int clock = 9;               //connected to pin 5
int shutter = 10;            //connected to pin 9
int roc = 11;                //connected to pin 11

unsigned int upArray[2048/100];

unsigned int downArray[2048/100];
void setup(){
Serial.begin(9600);
pinMode(clock, OUTPUT);
pinMode(shutter, OUTPUT);
pinMode(roc, OUTPUT);
        Serial.print("STARTING");
}
 
void loop(){
digitalWrite(roc, LOW);
delay(1);
digitalWrite(roc, HIGH);
for(int i = 0; i < 33; ++i){
digitalWrite(clock, LOW);
digitalWrite(clock, HIGH);
}
 
for(int i = 0; i < 2048; ++i){
digitalWrite(clock, LOW);
// array[i] = analogRead(vOut);
                if(i % 100 == 0){
                  downArray[i/100] = analogRead(vOut);
// Serial.print(i/100);
// Serial.print(" - ");
           // if(i < 1000){Serial.print(" ");}
// Serial.print(array[i]);
            // Serial.print(analogRead(vOut));
// Serial.print(" ");
}
                digitalWrite(clock, HIGH);
                if(i % 100 == 0){
                  upArray[i/100] = analogRead(vOut);
}
}
 
for(int i = 0; i < 7; ++i){
digitalWrite(clock, LOW);
digitalWrite(clock, HIGH);
}
        for(int i = 0; i < 20; ++i){
digitalWrite(clock, LOW);
Serial.print(i);
Serial.print(" - ");
Serial.print(upArray[i]);
                  Serial.print(" - ");
Serial.print(downArray[i]);
Serial.print(" ");
                digitalWrite(clock, HIGH);
}
Serial.print("------------------------------- ");
 
//delay(1000);
          for(int i = 0; i < 500; ++i){
digitalWrite(clock, LOW);
                delay(1);
digitalWrite(clock, HIGH);
                delay(1);
}
        //digitalWrite(shutter, LOW);
        //delay(1);
        //digitalWrite(shutter, HIGH);
    }
 
파장과 밝기의 교정(Calibration)
이 단계는 교정이 안된 장치에는 적용(apply)하지 않는다.

만일 전자우편으로 교정파일을 받았다면, mySight 폴더에 "CFG-spectruino-calibration.txt"로 저장한다.

교정 파일의 예. C:mySightCFG-spectruino-calibration.txt
# Spectruino v1.0 beta TEST device

serial# 003 20120730
a=slope [nm/px], b=intercept [px]
y=a*x+b
0.793064
360


이 교정 파일은 C:/mySight/ 폴더 안에 넣어야 작동한다.

파일은 교정값(calibration value) 과 장치의 일련번호(serial number) 을 포함하고 있어야 한다.
# 은 주석문이며, sreial# 은 장치의 일련번호, a=slope와 b=intercept의 [N]은 측정할 pixel의 수
y=a*x+b는 밝기 y를 연산하는 공식이며, 밝기(y) = slope(a) * 측정값(x) + 간격(b), 360은 시작 파장[nm] 이다.

 
Specduino가 PC로 송신하는 값(510 바이트)을 보라 :
[pixel1]      // 1번 pixel 값 (0~255)
[pixel2]      // 2번 pixel 값 (0~255)
 ...           //  3~500 번 pixel 값 (0~255)
[pixel501],   // 501번 pixel 값 (0~255)
char(A), char(x), 0x01, 0xF5,   // Ax501 (측정 기울기 Ax의 값 = Ax, Low, Hgh) 
char(B), char(y), 0x01, 0xF5,    // By501 (측정 간격 By의 값 =B, Low, High)  
char(C),       // C (delimiter of Header) 

이제 그래프에서 파장(wavelength [nm])을 볼 수 있다.
 

 
Spectroduino에서 CCD 센서의 새로운 노출시간의 설정은 가로채기(interrupt)가 발생된다.
직렬포트로 2개의 문자를 송신하면 setExposureTime(N) 함수가 호출(called) 된다.
char(#) N (문자 N은 16진 바이트로 0x01 ~ 0xFF 이다.) 

Spectroduino의 교정방법
이 교정은 Spectroduino의 제조업체에서 한다.
참조: http://www.thishollowearth.org/category/the/
나는 어제 LS-1-CAL-INT를 사용하는 기회를 얻었다.
 
ocean optics에서 만든 시험기는 Spectruino를 교정한다.
일반적으로 5000K 이하의 분광기(Spectrometer)를 교정하려면 교정장치를 사용한다.
 
다음과 같이 작업한다.
1. 교정기 램프와 분광기 사이를 광 파이버로 연결한다.
2. 알고있는 값으로 교정램프의 빛을 방사시킨다.
3. 분광기로 부터 분광파장(spectrum)을 구하고 알려진 방사값과 비교한다.
 
Spectroduino는 이렇게 한다. 두개의 다른 설정을 사용한다.
(1) 광 파이버
(2) 광 파이버에 cosine collector를 연결한다.
 
다음 처리를 따라한다.
1. 적분시간을 고정한다.
2. 램프를 사용하지 않고 3개의 측정값을 구한다. 알맞는 배경 신호(Dark Signal) b1, b2, b3를 구한다.
3. 램프를 켜고 3개의 값 a1, a2, a3을 구한다.
(1)과 (2)의 방법으로 ((a1 + a2 + a3) - (b1 + b2 + b3)) / 3으로 계산된 값을 교정램프 값과 비교한다.

 
Spectroduino의 성능이 좋은지를 결론낼 수 있도록, 다른 축에 (1) (2)의 그래프를 그린다.

 
2개의 그래프는 비슷하게 보인다. 교정 램프에서 방사된 빛을,
Spectroduino에서 몇 %로 검출하는 가로 부터
맞는 값을 계산한다.

기술
Spectruino는 Arduino 빛의 밝기 대비 파장(Wave Length)의 분광분석기(Spectrometer) 이다. 
규격은 초안(preliminary)이다. 그리고 예고없이 바끨 수 있다.

규격 (Technical Specifications)
- 크기: 101 x 65 x 27 mm (높이 x 길이 x 폭)* 초안이다, 바뀐다.
- 광 센서: linear CCD, 2000 pixels
- 측정 파장: 380 nm ~ 750 nm (근사 값, 각 장치는 반드시 정확하게 교정되어야 한다)
- 측정 pixels의 수: 500, (1 ~ 2000 pixels, 소프트웨어 설정에서 선택된다)
- 광 분해능: 9 nm, 650 nm의 적색 레이저로 평가되었다. 이론적으로 100 μm slit은 8 nm 이하다. 
- PC 연결: RS232 to USB 2.0 혹은 USB 1.0
- 전송 속도: 115 200 baud, 14.4 kB/s
- 노출 시간: 1/1000 ~ 10 s, 소프트웨어로 설정한다.
- 최고 갱신 주기: 고속은 512 pixels의 8 nm 분해능으로 28.125 Hz (frames/sec)
                       저속은 2000 pixels의 2 nm 분해능으로 7.2 Hz (frames/sec)
  갱신 주기는 노출시간에 종속된다. (예. the intensity of light source에서)
- 작동 범위(Dynamic range): 1:300
- 상대(Relative) 밝기Intensity Level)의 분해능(Resolution): 256 (8 bit A/D converter)
- 분광판(Grating-회절판): holographic, 1300 lines/mm
- 광 측정: Slit 폭 100 μm

기술 지원
Andrej Mosat 전자우편: support@myspectral.com
 
소유권
이 사이트의 모든 자료는 국제 저작권(copyright law)으로 보호된다.
그림과 문장의 사용은 Creative Commons 3과 동일한 조건으로 허용한다.
조직원들의 사진은 myspectral.com 조직에서 쓰여진 방법으로만 재사용할 수 있다.
Myspectral의 문양(logo)은 Andrej Mosat가 저작권 등록을 하였다.
 
면허
Spectruino 분광계는 Andrej Mosat가 획득한 Creative Commons ShareAlike 3.0
상업용으로 개조하지 않는 조건으로 허용된다.
myspectral.com의 자료를 기본으로 신청된 범위를 넘으면,  http://myspectral.com 이 소유하게 된다.

Spectruino 소프트웨어
소프트웨어는 processing 언어로 개발되었다. 이것은 무료이다.
당신의 코드를 우리와 전세계로 공유해 주세요!
우리는 당신이 달성할 수 있다고 믿고 있습니다.
processing.org : http://processing.org/
 
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.

이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 AVRTOOLS™
   
윗글 Arduino Uno로 만드는 3축 CNC
아래글 8채널 12비트 ADC MCP3208 오실로스코프
    N         제목    글쓴이 작성일 조회 추천
아듀이노 응용소스 게시판 avrtools™ 2016/02/05 (금) 230 0
25 ESP8266 MQTT Relay Control avrtools™ 2016/03/03 (목) 388 0
24 2 채널 ESP8266 WiFi Switch의 제작 avrtools™ 2016/02/25 (목) 435 0
23 ESP-12E SDK 0.9.5 사용방법 avrtools™ 2016/02/18 (목) 467 0
22 ESP8266 ESP-12E WiFi 센서 서버의 제작 avrtools™ 2016/02/17 (수) 440 0
21 Arduino DS3231 RTC to 5110 LCD avrtools™ 2016/02/16 (화) 475 0
20 ESP8266 Weather Server의 제작 avrtools™ 2016/02/15 (월) 473 0
19 Arduino 온습도 센서 DHT-22 avrtools™ 2016/02/12 (금) 405 0
18 ESP8266 WiFi 펌웨어 업그레이드 avrtools™ 2016/02/11 (목) 611 0
17 Arduion ESP8266 WiFi 설정 방법 avrtools™ 2016/02/10 (수) 566 0
16 Arduino 정전용량식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 334 0
15 Arduino 전극식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 433 0
14 Arduino 정밀 전력계의 ADC avrtools™ 2016/02/02 (화) 651 0
13 Arduino 정밀 전력계의 LPF avrtools™ 2016/02/02 (화) 466 0
12 Ardunio 16비트 ADC Data Logger avrtools™ 2016/01/31 (일) 350 0
11 Arduino AC/DC Power Meter의 제작 avrtools™ 2016/01/29 (금) 601 0
10 Arduino 교류 역율계(power factor)의 제작 avrtools™ 2016/01/29 (금) 452 0
9 Arduino DUE based DDS Synthesizer avrtools™ 2016/01/24 (일) 273 0
8 QTouch ADC 근접검출 스위치 avrtools™ 2016/01/21 (목) 478 0
7 Arduino 음성인식 Speech/Voice Recognition avrtools™ 2013/09/14 (토) 1730 0
6 Arduino Uno로 만드는 3축 CNC avrtools™ 2013/09/10 (화) 2624 0
5 Arduino로 만드는 mySpectral 분광기 avrtools™ 2013/09/04 (수) 2161 0
4 8채널 12비트 ADC MCP3208 오실로스코프 avrtools™ 2012/03/29 (목) 540 0
3 교류저항 (impedance) 측정 AD5933 avrtools™ 2012/03/17 (토) 483 0
2 Arduino DMX512 수신기 제작 avrtools™ 2012/03/15 (목) 3707 0
1 TSL2561 조도 측정기의 제작 avrtools™ 2011/09/11 (일) 2701 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