'AREF'에 해당되는 글 2건

  1. 2018.03.04 Hardware | Arduino 의 AREF pin 에 대해 알아보자
  2. 2018.02.28 Hardware | Arduino 로 Photoresister 가지고 놀기 - 2

Hardware | Arduino 의 AREF pin 에 대해 알아보자

|

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 할 수 있을것 같습니다.


And

Hardware | Arduino 로 Photoresister 가지고 놀기 - 2

|

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

https://ko.aliexpress.com/item/Photoresistor-Kit-5Kindsx10pcs-5506-5516-5528-5537-5539-Light-Dependent-Resistor-LDR-Pack-Photoresistor-Package-for/32812625860.html




미리 이런게 있었더라면...

하면서 바로 주문을 넣습니다.


다양한 센서라 그런지, 다른 부품들보다는 다소 비싼 편 입니다. 한, 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 를 직접 사용하기 전에는 측정을 통하여 사용처에 맞는 센서를 골라야 하겠군요.


And
prev | 1 | next