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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2010/01/02
Link#1 SecretThermometer (Down:239)
ㆍ추천: 0  ㆍ조회: 3656   
  M328-USB의 비밀 온도센서
제목 : Secret Thermometer
소개 : 아듀이노 328 기판의 비밀 온도센서(thermometer)를 활용한다.
         (내장된 센서를 사용하므로, 별도의 온도 센서를 필요로 하지 않는다)
참조 : tinkerit ☞ http://code.google.com/p/tinkerit/wiki/SecretThermometer 

오랫만에 연휴를 맞아 새로운 자료를 찾던 중에 이 것을 찾게 되었다.
오호라?  이런 비밀 센서가 ATmega328 칩에 들어 있었다니, 놀라워라 !!!
그렇다면, 이젠 아듀이노 기판을 가지고 있으면, 온도를 출력할 수도 있다는 발견?
(168P와 328P혹은 328PA에서 작동한다, 168인 Decimilla는 불행하게도 작동이 안된다)
 
소스 : 아래 소스를 블록으로 묶어서 복사한 다음,
         아듀이노 스케치 창에 붙혀 넣기 한다음, 새로운 이름으로 저장한다.
설명 : 온도 값은 1/1000 °C를 주함수로 반환한다.
         그러므로 25000은 25 °C로 바꾸어 표시해야 한다. (하위 3자리는 버린다)
 
long readTemp() // 비밀 온도센서를 호출하는 함수 (주함수에서 필요할 때 부른다)
{
  long result; // 반환값은 long 변수를 사용한다.

  // 센서의 온도값을 읽는다. 아날로그 기준전압(reference)은 1.1V 이다.
  // 온도센서의 아날로그 채널은 8번이다. (REF는 내부 1.1V를 선택)
  // Vref 단자는 잡음이 들어가지 않토록 105~106 캐패시터로 접지 시킨다.
  // Vref 단자에 외부전압을 인가하면 온도를 측정할 수 없다.
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
  delay(2); // 아날로그 기준전압 Vref가 안정(setting)될 때 까지 2ms을 기다린다.
  ADCSRA |= _BV(ADSC); // 기준전압을 맞춘 다음, 2ms이 지나고, ADC를 시작시킨다.
 
  while (bit_is_set(ADCSRA, ADSC));  // ADC가 완료될 때 까지 기다린다.
  result = ADCL; // 하위 8 비트를 읽는다
  result |=ADCH<<8; // 상위 2 비트를 읽는다.
  result = (result - 125) * 1075; // 하위 8비트 + 상위2비트 = 10 비트를 온도로 변환 한다.
  return result; // 온도값을 주함수로 가지고 나간다.
}
 
 void setup()   // M328의 직렬통신 속도를 설정한다. (USB 포트에 연결된 PC의 USB-가상직렬포트로 송신한다)  
{
  Serial.begin(9600); // 통신 설정 9600 bps, N,8,1
}
 
 void loop() // 주 함수
{
  Serial.println( readTemp(), DEC ); // 온도측정 함수를 호출한다음. 반환값을 10진으로 표시한다.
 delay(1000); // 1초를 기다린 다음, 다시 반복한다.
}
 
작동 설명
칩은 내부에 ADC를 내장하고 있다. ADC는 아날로그-입력선택-전환기(analog switch =AMUX)를 가지고 있다.
칩의 설계는 MPU의 아날로그 입력에 연결된다. 그리고 간단한 내부의 온도 센서로 연결할 수도 있다.
실지로는 정밀한 내부 기준전압인 1.1V로 선택하는 것이며, 이 신호로 온도에 근접하는 연산을 할 수 있다.
 
추가 설명
원래의 소스는 ±10 °C 이다. 이것을 교정을 한 결과, 아듀이노 센서의 출력은 1 °C에 근접한다. 
참고 : The Secret Voltmeter in the Arduion 168 and 328

168P 혹은 328P 에서 온도와 전압을 읽는 함수
long readTemp()    // 온도를 읽는 함수, 결과는 long (32 비트 변수)으로 주함수에 반환한다. 
{
  long result;          // 결과값을 저장하는 변수는 long (32 비트) 이다
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);   // AMUX를 온도센서로 선택한다 . (기준전압은 1.1V로 선택) 
  delay(20); // Vref 가 안정(settle)될 때 까지 2ms을 기다린다 

  ADCSRA |= _BV(ADSC);  // 주위 온도에 비례하는 입력전압의 ADC 변환을 시작한다
  while (bit_is_set(ADCSRA,ADSC));    // ADC의 변환이 완료할 때 까지 기다린다.

  result = ADCL;    // ADC가 변환완료되면, 처음에 ADC 결과의 하위 8 비트를 읽는다.
  result |= ADCH<<8;    // 나중에 ADC 결과의 상위 2 비트를 읽는다.(순서를 바꾸면 측정값이 흔들린다)
  result = (result - 125) * 1075;    // ADC 읽은 값에서 125를 빼고, 1075를 곱한다 (온도 x1000을 만든다) 
  return result;    // 결과를 주함수로 반환한다. (반환 변수의 이름은 result 이다)
}

long readVcc()  // 전압을 읽어서 주함수에 long(32 비트)으로 반환한다. () 안이 비었음은 입력하는 변수가 없다는 뜻.
{
  long result;     // 지역변수 result를 long으로 선언
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);   // Read 1.1V reference against AVcc
  delay(2); // AMUX에서 선택한 아날로그 기준전압(Vref)가 안정될 때 까지 2ms을 기다린다 (AMUX의 전환속도)

  ADCSRA |= _BV(ADSC);    // 전압을 변환한다. (새로운 AMUX 채널의 입력을 읽기 위해, ADC 변환을 시작한다)
  while (bit_is_set(ADCSRA,ADSC));    //  ADC가 변환을 끝낼 때 까지 대기.(축차변환은 입력전압에 따라 변환시간이 다름)

  result = ADCL;    // ADC가 변환이 끝나면, 프로그램은 while(조건 반복문)을 빠져나와 여기로 온다.
  result |= ADCH<<8;    // 하위 결과에 이어서 상위 결과를 읽는다 (읽는 순서를 바꾸면 값이 흔들린다)
  result = 1126400L / result; // 읽어낸 ADC 결과 값을 AVcc에 비례하는 mV로 변환한다.
  return result;    // 읽어낸 Avcc 값(32 비트 변수 result)을 주함수로 반환한다.(단위는 mV이므로 5000을 읽으면 5V)
}

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

   
윗글 아듀이노 초음파 거리측정 및 응용
아래글 M168-mini로 만드는 USBasp
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 862 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17940 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2932 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 3069 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 6123 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 5039 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3574 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 3130 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3534 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 3155 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3424 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 8102 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4239 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3656 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5513 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4302 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3811 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3500 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6779 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 4090 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5707 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7347 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8445 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4619 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 5048 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5718 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9792 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 17580 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6898 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5654 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4973 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4225 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 6166 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4758 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4741 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 5020 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5559 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4178 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13769 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9656 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 6059 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6918 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4226 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3545 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3311 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5335 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5230 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5880 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4288 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3561 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4881 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9886 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3713 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 5136 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6553 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 5008 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 5018 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5342 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4863 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7704 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6814 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