'AREF'에 해당되는 글 2건
- 2018.03.04 Hardware | Arduino 의 AREF pin 에 대해 알아보자
- 2018.02.28 Hardware | Arduino 로 Photoresister 가지고 놀기 - 2
1. 시작
일전에 여러 photoresistor 의 수치적인 차이를 확인해 보았습니다.
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 2
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-2
여기서 사용했던 arduino 의 또다른 기능.
그것은 AREF 였습니다.
위의 글에서는 참고한 사이트를 단순히 따라하다 보니 진정 AREF 의 기능을 모르고 사용했더랬습니다.
오늘은 이 AREF 에 대해 좀더 알아보도록 하죠.
2. What is the AREF?
왜 욕하냐구요?
아닙니다. Arduino 는 영어하는 형들이 만들었으므로, 기본 영어로 모든 문서가 되어 있습니다.
AREF 는 Analog REFerence 의 약자 입니다.
가장 명확한 설명은 당연 arduino 제조사 사이트겠지요.
* analogReference()
- https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
다만 뭔가 와닿지 않습니다.
다른 사이트를 살펴 보지요.
* Arduino Tutorials – Chapter 22 – the AREF pin
- http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
설명이 자세하게 잘 나와 있습니다.
요는, analogRead() 를 통해서 입력받은 voltage 값이 작거나 차이가 적을 때, digital 화 시켜서 leveling 을 해준다는 것 입니다.
실제로 photoresistor 를 가지고 놀았을 때, 소자간의 차이가 거의 없는 경우는,
단순히 voltage 값만 안다고 해서 그 차이를 느낄 수가 없었습니다.
3. ADC
이런 analog 값을 digital 로 바꿔주는 기능이 ADC 입니다.
그럼 ADC가 뭐야? 라고 할 수 있습니다. (욕 아니예요)
* Analog to Digital Conversion
- https://learn.sparkfun.com/tutorials/analog-to-digital-conversion
위의 그림처럼 5V 기준으로 4가지로 레벨링 한다고 합시다 (0, 1, 2, 3),
입력값이 1V라고 한다면 1.25V ~ 0V 사이이므로 0값을 리턴하고, 3V 라고 한다면 2값을 리턴하게 됩니다.
위의 경우는 2의 2승인 2-bit 해상도의 ADC 입니다.
Arduino 는 10-bit ADC 가 내장되어 있어서, 2의 10승인 1024 leveling 이 가능합니다.
실제 output 값은 0~1023 까지가 되지요.
아래는 실제 photoresistor 를 측정했을 시의 표시 값들입니다.
실제 voltage 값이 아니라 0~1023 으로 leveling 한 값이 측정되게 됩니다.
4. Sketch
그럼 어떻게 사용하는 것일까요?
아래 소스처럼 선언해주면 됩니다.
void setup() { ... analogReference(EXTERNAL); ... }
옵션의 의미는 다음과 같습니다.
* DEFAULT
- 5V 전압이 기본인 arduino 에서는 5V,
3.3V 전압을 사용하는 arduino 에서는 3.3V 를 기준 전압으로 사용합니다.
* INTERNAL
- 내장 기준 전압을 사용한다는 의미이며, ATmega168/ATmega328 를 사용한 arduino 에서는 1.1V,
ATmega8 를 사용한 보드에서는 2.56V 가 기준 전압이 됩니다.
Arudino MEGA 는 아래 두가지 (1V1 / 2V56) 기준이 사용됩니다.
* INTERNAL1V1 (only for Arduino MEGA)
- 내장 1.1V 를 기준 전압으로 사용합니다.
* INTERAL2V56 (only for Arduino MEGA)
- 내장 2.56V 를 기준 전압으로 사용합니다.
* EXTERNAL
- AREF 핀에 외부 전원 (0~5V)을 연결하여, 이를 기준 전압으로 사용합니다.
- 이것을 우리가 사용한 것이죠.
FIN
이제 analogRead() 를 사용할때면 analogReference() 를 사용하여 쉽게 leveling 할 수 있을것 같습니다.
'Hardware' 카테고리의 다른 글
Hardware | Cross cable 로 MediaWiki 서버 연결해 보기 (0) | 2018.03.25 |
---|---|
Hardware | RadarBox24 신청부터 설치까지 (0) | 2018.03.07 |
Hardware | HC-SR501 PIR motion sensor - 2 (2) | 2018.03.01 |
Hardware | Arduino 로 Photoresister 가지고 놀기 - 2 (0) | 2018.02.28 |
Hardware | Digitial Compass - HMC5883L 사용기 - 1 (0) | 2018.02.19 |
1. 시작
Photoresistor 를 가지고 놀아 봤더랬습니다. (아래 글)
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 1
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-1
다만, 위의 사진에서 보이듯 광원을 받는 센서부의 홈 갯수가 적어 보이는 것 같았습니다.
밑의 사진처럼 촘촘하면, 뭔가 더 예민하게 반응할 것 같았습니다.
이미 PIR motion sensor 에도 GL5528 을 가지고 적용해 봤으나 (아래 글),
완벽한 어둠이 있지 않으면 동작하지 않아, 적당한 어둠에도 동작하도록 하기 위해 위와 같이 촘촘한 센서를 찾아보게 됩니다.
* Hardware | HC-SR501 PIR motion sensor
- http://chocoball.tistory.com/entry/Hardware-HCSR501-PIR-motion-sensor
2. 주문
AliExpress 를 뒤져 봅니다.
제가 GL5528을 구입할 때만 해도 다양한 센서를 한묶음으로 파는 경우를 못본것 같은데, 이제는 팔고 있네요.
* Photoresistor Kit 5Kindsx10pcs 5506 5516 5528 5537 5539 Light Dependent Resistor LDR Pack Photoresistor Package for Arduino
미리 이런게 있었더라면...
하면서 바로 주문을 넣습니다.
다양한 센서라 그런지, 다른 부품들보다는 다소 비싼 편 입니다. 한, 500원 정도 ?! :-)
3. 도착
한 2주 걸려서 도착했습니다. 알리에서 주문한 것 치곤 빠른 편 입니다.
스폰지 형태로 잘 포장되어 왔구요.
한뭉텅이로 왔구요.
각 부품이 10개씩 포장되어 들어 있구요.
네 그렇습니다.
이렇게 촘촘한 photoresistor 센서를 얻기 위해, 첫번째 시행착오를 거쳐 두번째 구매를 하게 된 것이죠.
다만, 각 센서의 감도 차이를 알고 싶어졌습니다.
물론 spec. 문서를 보면 나와 있습니다만, 주변의 빛의 세기에 따라 어떤 형태의 값들로 움직이는지 보고 싶었습니다.
또한 예전에 구입한 GL5528 이 다른 센서들과 비교하여,
PIR 센서에 적합한 센서를 찾기 위해 값을 비교해 보기로 합니다.
4. Layout
입력은 5V 이지만, 0~1023 레벨로 결과값을 받을 수 있게, 3.3V 를 AREF pin 에 연결합니다.
저도 이번에 AREF를 사용하면서 AREF 의 용도를 알게 되었습니다.
AREF 에 대해서는 따로 정리해 봤습니다.
* Hardware | Arduino 의 AREF pin 에 대해 알아보자
- http://chocoball.tistory.com/entry/Hardware-Arduino-AREF-pin
아래는 구성도 입니다.
아래는 실제 배선 샷 입니다.
사진에는 마지막에 추가한 GL5528 이 없습니다.
이 테스트를 하기 전에 사진을 찍은 후, 자고 일어났더니 예전 GL5528 이 생각이 나, 추가하여 결과값을 추출하였습니다.
저항은 10k ohm 입니다.
이는 아래 사양서에서 볼 수 있듯이, 일반적인 낮의 100 lux 에서 대략 10k ohm 의 값을 가지기 때문입니다.
5. Sketch
원리는 다음과 같습니다.
V = IR
* case 1 : 10KΩ
- 10KΩ + 10KΩ = 20KΩ
- I = 5V / 20KΩ = 0.25mA
- 0.25mA * 10KΩ = 2.5V
- 5V - 2.5V = 2.5V --> analog input
* case 2 : 30KΩ
- 30KΩ + 10KΩ = 40KΩ
- I = 5V / 40KΩ = 0.125mA
- 0.125mA * 30KΩ = 3.75V
- 5V - 3.75V = 1.25V --> analog input
* case 3 : 100KΩ
- 100KΩ + 10KΩ = 110KΩ
- I = 5V / 110KΩ = 0.045mA
- 0.045mA * 100KΩ = 4.54V
- 5V - 4.54V = 0.54V --> analog input
less light --> more resistance --> less analog input
more light --> less resistance --> more analog input
결론은,
많은 광량일 경우는 높은 치수를, 즉 낮은 저항 수치를 가지고,
적은 광량일 경우는 낮은 치수를, 즉 높은 저항 수치를 가지고 서로의 성능을 비교하는 과정입니다.
지금까지의 과정과 아래 소스는 다음 blog 를 참조하였습니다.
* Photo resistors, in depth
- https://piandmore.wordpress.com/2016/10/14/photo-resistors-in-depth/
예전에 구입한 GL5528 를 A5 에 추가 연결하였으므로, 소스에서도 입력과 출력에 대해 A5 를 추가하였습니다.
//////////////////////////////////////////////////////////////////////////////////// // // PI and more // Photo resistors in depth // // https://piandmore.wordpress.com/2016/10/14/photo-resistors-in-depth/ // //////////////////////////////////////////////////////////////////////////////////// // // The number of steps after which the header is repeated // #define STEPCOUNT 10 // // The current step count // byte step = STEPCOUNT; void setup() { // // Setup serial // Serial.begin(115200); Serial.println("Ready"); // // Set the reference for measuring the analog signals // For some reason I got incorrect readings without connecting // the 3.3v (on my Arduino Nano) to AREF and setting this // reference analogReference(EXTERNAL); // // Setup all analog inputs. We are using 5 which is the maximum // for the Nano on which I tested. // pinMode(A0,INPUT); pinMode(A1,INPUT); pinMode(A2,INPUT); pinMode(A3,INPUT); pinMode(A4,INPUT); pinMode(A5,INPUT); } void loop() { // // Increase our counter // step++; // // If we are over our STEPCOUNT then we repeat the header // if (step>STEPCOUNT) { // // The reference to the different photo resistors // GL5506, GL5516, GL5528, GL5537 and GL 5539 // Serial.println("* 5506 5516 5528 5537 5539 GL5528"); step = 0; } // // Print all analog values to serial // Serial.print(" "); Serial.print(analogRead(A0)); Serial.print(" "); Serial.print(analogRead(A1)); Serial.print(" "); Serial.print(analogRead(A2)); Serial.print(" "); Serial.print(analogRead(A3)); Serial.print(" "); Serial.print(analogRead(A4)); Serial.print(" "); Serial.print(analogRead(A5)); Serial.println(); delay(250); }
위의 sketch 를 실행시키면 다음과 같이 "Serial Monitor" 를 통해서 값을 확인할 수 있습니다.
6. 결과
제조사의 사양서는 찾을 수 없었지만, 5506 부터 나와있는 사양 테이블은 아래와 같습니다.
그래프를 보면 결과값과 비슷하게 나온것 같습니다.
강한 불빛인 휴대폰 플레쉬부터, 거실 불 하나만의 광량, 손으로 그늘을 만들고,
마지막에 손으로 가리는 순간들의 값을 EXCEL 정리해 봤습니다.
* EXCEL
- photoresistor_record_20180225.xlsx
숫자로만 보면 들쑥날쑥 하여 알아보기 힘듭니다.
아래의 그래프로 그려봤습니다.
EXCEL 숫자만 보면, 과연 순서대로 나열해서 했나 싶을 정도로 들쑥날쑥 합니다만,
그래프로 그리면 확실히 그 경향을 알 수 있습니다.
FIN
예전에 구입한 GL5528 (녹색) 은, 이번에 구입한 5528 (회색) 과 확연한 값의 차이를 나타냅니다.
오히려 5537 (노랑) 과 더 비슷해 보이는군요.
위의 결과를 가지고 생각해 보면, photoresistor 를 직접 사용하기 전에는 측정을 통하여 사용처에 맞는 센서를 골라야 하겠군요.
'Hardware' 카테고리의 다른 글
Hardware | Arduino 의 AREF pin 에 대해 알아보자 (0) | 2018.03.04 |
---|---|
Hardware | HC-SR501 PIR motion sensor - 2 (2) | 2018.03.01 |
Hardware | Digitial Compass - HMC5883L 사용기 - 1 (0) | 2018.02.19 |
Hardware | MAX4466 마이크 앰프 breakout board 사용해 보기 (0) | 2018.02.11 |
Hardware | 2.54mm pin header 구매하기 (0) | 2018.02.11 |