2022-05-17 Arduino_10

2022. 5. 17. 23:51학부 강의/Arduino

 

아날로그 온도센서


1. LM 35

 

LM35는 브레드보드에 저항 연결 없이 바로 사용할 수 있는 온도센서

 

아두이노 시리얼 모니터에서 입력된 온도를 읽을 수 있고 -55ºc에서 150ºc까지 측정 가능

 

1도당 대략 10mV의 스케일로 0~100도를 0 ~ 1V로 표현

 

아날로그 입력 핀에 연결하여 온도 측정

 


2. TMP36

아두이노 시뮬레이터에서 지원하는 온도센서.

 

첫 번째 단자는 Vs로 전원에 연결하고, 두 번째 단자는 Vout으로 온도 값에 해당하는 전압을 출력한다.

 

세 번째 GND에 연결한다.

아날로그 입력값 → 전압 AnalogInput * 5.0/1023
온도 → 전압 Voltage = 1/100 * Temperature + 0.5
전압 → 온도 Temperature = 100 * Voltage - 50

4_1

 

// C++ code
//
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int analogInput = analogRead(A0);
  float voltage = analogInput*5.0/1023.0;
  float temperature = voltage*100-50;

  Serial.print("Temperature : ");
  Serial.println(temperature);
}

float voltage = analogInput*5.0/1023.0;

  • 아날로그 입력값과 전압은 비례한다.
  • 아날로그 입력은 0에서 1023의 범위를 갖는다.
  • 전압은 0에서 5V의 범위를 갖는다.
  • Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V)

 


디지털 온습도 센서

DHT11

주변 온습도 측정 가능

 


아날로그 초음파 센서

 

20KHz 이상인 음파를 말함. (가청주파수를 뛰어넘음)

 

발신부에서 신호를 보내고 반사되어 돌아오는 시간을 계산하여 거리 측정

  • 거리 = 1/2 x 반사되어 돌아온 시간 x 음파의 속도(340m/s)
  • Tring : 발신부
  • Echo : 수신부

 

HC-SR04 초음파 센서

 

동작 전압 : 5V

발생하는 주파수 40KHz

측정 거리 : 2~400cm

핀은 4개가 있음. 5V, GND, Trig(발신), 핀번호(수신)


4_3

 

 

void setup() 
{
  Serial.begin(9600); 
}

void loop() 
{
  pinMode(9, OUTPUT); // Trigger

  digitalWrite(9, LOW);
  delayMicroseconds(2);

  digitalWrite(9, HIGH); 
  delayMicroseconds(5); 
  digitalWrite(9, LOW);

  pinMode(9, INPUT); // echo

  double duration = pulseIn(9, HIGH); 
  double cm = duration*340/10000/2;
    //거리 = 1/2 x 반사되어 돌아온 시간 x 음파의 속도(340m/s)

  Serial.println(cm); 
}
  • double duration = pulseIn(9, HIGH);
pulseIn(pin, value)
pulseIn(pin, value, timeout)

pin: 펄스를 읽을 핀 번호. (int)

value: 읽을 펄스의 유형: HIGH 또는 LOW. (int)

timeout (옵션): 펄스 시작을 기다릴 시간 (마이크로초 단위). 기본값은 1초 (unsigned long). 정해진 timeout 안에 펄스가 시작되지 않으면 0을 반환.

 

타이머를 시작하고 9번 pin에 입력값이 HIGH가 될 때까지 기다린다.

 

pin의 입력값이 HIGH가 되면 해당 HIGH신호의 끝에서(HIGH에서 다시 LOW가 되는 순간) 타이머를 멈춘다.

 

펄스의 길이는 마이크로초 단위로 반환한다.

출처 : https://www.arduino.cc/reference/ko/language/functions/advanced-io/pulsein/

 

 

  • double cm = duration*340/10000/2;

1s = 10^6μs이고 1m = 10^2 cm이다.

 

입력 단위에 맞게 m → cm로 s → μs로 바꾼다.

 

거리(cm) = duration(μs) * 340(10^2cm)/(10^6μs)/2

 


적외선 리모컨 송수신

 

적외선 리모컨은 일상생활에 자주 사용된다.

  • 가시광선보다 주파수가 낮음 → 사람의 눈에 보이지 않는다.
  • 적외선 led는 낮은 전압에서 구동된다. → 건전지 2개로 충분하다
  • 출력 power가 다른 led보다 높다. → 적외선 송신 거리가 길다
  • 각 제품마다 고유의 주파수 값으로 통신하고 있어 중복되지 않게 사용할 수 있음

IR 센서 & 적외선 리모컨

 


4_4

 

#include <IRremote.h>

IRrecv irrecv(8);
decode_results results;

void setup()
{
  irrecv.enableIRIn();
  pinMode(9, OUTPUT);

  Serial.begin(9600);
}

void loop()
{
  if(irrecv.decode(&results)){
    Serial.println(results.value, HEX);

    if(results.value == 0xFD30CF){
      digitalWrite(9, HIGH);
    }
    else{
      digitalWrite(9, LOW);
    }
    delay(30);
    irrecv.resume();
  }
}

<IRremote.h> 헤더파일를 포함시키다.

 

  • IRrecv

IRrecv irrecv(8); : 8번 핀엔 연결된 적외선 수신기 클래스 선언

irrecv.enableIRIn(); : IR 리시버 활성화

irrecv.decode(&results) : 수신기에서 받은 데이터를 지정한 주소에 저장

if(irrecv.decode(&results)) : 리모콘에서 입력받은 값이 있는지 확인

irrecv.resume(); : 다음 신호를 받을 수 있도록 준비

 

  • decode_results

decode_results results; : decode_results수신기 에서 받은 리모컨의 데이터를 저장하는 클래스

results.value : 디코딩된 value값

class decode_results
{
    public:
        decode_type_t          decode_type;  // UNKNOWN, NEC, SONY, RC5, ...
        unsigned int           address;      // Used by Panasonic & Sharp [16-bits]
        unsigned long          value;        // Decoded value [max 32-bits]
        int                    bits;         // Number of bits in decoded value
        volatile unsigned int  *rawbuf;      // Raw intervals in 50uS ticks
        int                    rawlen;       // Number of records in rawbuf
        int                    overflow;     // true iff IR raw code too long
};

Serial.println(results.value, HEX); : 적외선 수신기로 받은 결과 값을 16진수(HEX)로 표시

 

 

출처 : https://juahnpop.tistory.com/66

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kaiserkhan21&logNo=221075466490


'학부 강의 > Arduino' 카테고리의 다른 글

2022-05-23 Arduino_12  (0) 2022.05.23
2022-05-21 Arduino_11  (0) 2022.05.21
2022-05-12 Arduino_9  (0) 2022.05.12
2022-05-09 Arduino_8  (0) 2022.05.09
2022-05-05 Arduino_7  (0) 2022.05.05