개발/Arduino

[Arduino] 온도 센서로 RGB LED 제어하기 (+파이썬)

Hyunsun 2021. 9. 17. 01:41
728x90

온도센서란? 온드를 전압이나 저항 변화와 같은 전기신호로 변환한 것

온도에 따라 색이 변하는 장치 만들기

그 중 제일 긴 다리(왼쪽에서 2번째 다리)가 GND, 왼쪽부터 순서대로 R, G, B

 

온도 센서(LM35)는 다리가 3개

평평한면 기준 왼쪽부터 VCC, 출력, GND

 

아두이노 연결 방법

 

직접 연결한 모습

 

const int BLED=9; //9번 핀 파란색
const int GLED=10; //10번 핀 초록색
const int RLED=11; //11번 핀 빨간색
const int TEMP=0; //아날로그 입력 0번 핀 온도 센서
const int LOWER_BOUND=54; //온도 하한 값
const int UPPER_BOUND=60; //온도 상한 값
int val=0; //온도 센서의 현재값

void setup(){
  Serial.begin(9600);
  pinMode(BLED, OUTPUT);
  pinMode(GLED, OUTPUT);
  pinMode(RLED, OUTPUT);
}

void loop(){
  val=analogRead(TEMP);

  Serial.println(val);
  delay(500);
  
  if (val < LOWER_BOUND){ // 현재 값이 하한값 미만일 때
    digitalWrite(RLED, LOW);
    digitalWrite(GLED, LOW);
    digitalWrite(BLED, HIGH); // LED를 파란색으로 켬
  }
  else if(val > UPPER_BOUND){ // 현재 값이 상한값 초과일 때
    digitalWrite(RLED, HIGH); // LED를 빨간색으로 켬
    digitalWrite(GLED, LOW);
    digitalWrite(BLED, LOW);
  }
  else{
    digitalWrite(RLED, LOW);
    digitalWrite(GLED, HIGH); // LED를 초록색으로 켬
    digitalWrite(BLED, LOW);
  }
}

아두이노 코드

 

차가움을 표현할 때는 바람을 불어도 바뀌지 않아서 아이스팩을 이용했다.

 

실행 결과

온도 값이 얼마나 나올지 몰라서 시리얼 모니터를 사용했다.

손을 댈 때와 대지 않을 때 차이가 분명하다.

 

아래는 파이썬으로 실행하기

 

[Arduino] 파이썬에서 아두이노 LED 제어

파이썬, 아두이노 설치 방법 [Python] 파이썬 설치하기 파이썬 설치 파이썬 홈페이지 접속 후 다운로드 클릭 (https://www.python.org/) Welcome to Python.org The official home of the Python Programming Lang..

hyunsun99.tistory.com

저번에 했던 포스팅을 참고하여 prototype을 실행해줌

 

업로드 완료 후 파이썬을 실행함

 

from Arduino import Arduino
import time

BLED = 9 
GLED = 10 
RLED = 11 
TEMP = 0
LOWER_BOUND = 54
UPPER_BOUND = 60
val = 0

board = Arduino('115200')

board.pinMode(BLED, "OUTPUT")
board.pinMode(GLED, "OUTPUT")
board.pinMode(RLED, "OUTPUT")

while True :
    val = board.analogRead(TEMP)
    print(val)
    time.sleep(0.05)
    
    if val < LOWER_BOUND :
        board.digitalWrite(RLED, "LOW")
        board.digitalWrite(GLED, "LOW")
        board.digitalWrite(BLED, "HIGH")
        time.sleep(0.3)
    elif val > UPPER_BOUND :
        board.digitalWrite(RLED, "HIGH")
        board.digitalWrite(GLED, "LOW")
        board.digitalWrite(BLED, "LOW")
        time.sleep(0.3)
    else :
        board.digitalWrite(RLED, "LOW")
        board.digitalWrite(GLED, "HIGH")
        board.digitalWrite(BLED, "LOW")
        time.sleep(0.3)

파이썬 코드

 

실행 결과

손을 댈 때와 대지 않을 때 차이가 분명하다.

728x90