본문 바로가기
아두이노 러닝보드/아두이노 러닝보드 프로그그램설계

LM35 온도계 만들기: Arduino와 4자리 7세그먼트 디스플레이 활용 🌡️

by 모빌리티키즈 2024. 12. 18.
728x90
반응형

안녕하세요, 여러분! 이번 포스트에서는 Arduino를 이용하여 LM35 온도 센서와 4자리 7세그먼트 디스플레이를 활용한 온도계를 만드는 방법을 소개하려고 합니다. 프로젝트는 다중화 기술을 사용하여 디스플레이를 제어하며, 간단한 연결과 코드로 온도를 시각적으로 확인할 있습니다.

 

필요한 준비물

  • Arduino 보드:  Arduino nano
  • LM35 온도 센서
  • 4자리 7세그먼트 디스플레이
  • 점퍼 케이블
  • 브레드보드

회로 연결

    1. LM35 온도 센서 연결:
      • LM35 센서의 헤더를 Arduino의 A0 핀에 연결합니다.
    2. 4자리 7세그먼트 디스플레이 연결:
      • 세그먼트 연결:
        • 세그먼트 a, b, c, d, e, f, g 핀을 각각 Arduino 디지털 2, 3, 4, 5, 6, 7, 8에 순서대로 연결합니다.
      • 자릿수 연결:
        • D1, D2, D3, D4 핀을 각각 Arduino 디지털 9, 10, 11, 12에 연결합니다.

Arduino 코드

다음은 온도계를 작동시키기 위한 Arduino 코드입니다:

// the pins of 4-digit 7-segment display attach to pin2-13 respectively
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 13;
int d4 = 12;
int d3 = 11;
int d2 = 10;
int d1 = 9;

void setup() {
  // set all the pins of the LED display as output
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(p, OUTPUT);
}

int del = 5;
int temp = 0;

void loop() {
  temp = analogRead(A0) * 0.48828125; // updated code

  clearLEDs(); // clear the 7-segment display screen
  pickDigit(0); // Light up 7-segment display d1
  pickNumber((temp % 100) / 10); // get the value of tens (updated code)
  delay(del); // delay 5ms

  clearLEDs(); // clear the 7-segment display screen
  pickDigit(1); // Light up 7-segment display d2
  pickNumber(temp % 10); // get the value of 1's (updated code)
  delay(del); // delay 5ms

  clearLEDs(); // clear the 7-segment display screen
  pickDigit(2); // Light up 7-segment display d3
  deg(); // display a 'degree' symbol
  delay(del); // delay 5ms

  clearLEDs(); // clear the 7-segment display screen
  pickDigit(3); // Light up 7-segment display d4
  ce(); // display a 'C' for centigrade
  delay(del); // delay 5ms
}

void pickDigit(int x) { // light up a 7-segment display
  digitalWrite(d1, LOW);
  digitalWrite(d2, LOW);
  digitalWrite(d3, LOW);
  digitalWrite(d4, LOW);

  switch (x) {
    case 0:
      digitalWrite(d1, HIGH); // Light d1 up
      break;
    case 1:
      digitalWrite(d2, HIGH); // Light d2 up
      break;
    case 2:
      digitalWrite(d3, HIGH); // Light d3 up
      break;
    default:
      digitalWrite(d4, HIGH); // Light d4 up
      break;
  }
}

void pickNumber(int x) {
  switch (x) {
    default:
      zero();
      break;
    case 1:
      one();
      break;
    case 2:
      two();
      break;
    case 3:
      three();
      break;
    case 4:
      four();
      break;
    case 5:
      five();
      break;
    case 6:
      six();
      break;
    case 7:
      seven();
      break;
    case 8:
      eight();
      break;
    case 9:
      nine();
      break;
  }
}

void clearLEDs() { // clear the 7-segment display screen
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(p, LOW);
}

void zero() { // the 7-segment led display 0
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void one() { // the 7-segment led display 1
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void two() { // the 7-segment led display 2
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void three() { // the 7-segment led display 3
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void four() { // the 7-segment led display 4
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void five() { // the 7-segment led display 5
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void six() { // the 7-segment led display 6
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void seven() { // the 7-segment led display 7
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void eight() { // the 7-segment led display 8
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void nine() { // the 7-segment led display 9
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void deg() { // the 7-segment led display 'degree symbol'
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void ce() { // the 7-segment led display 'C'
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

결론

이번 프로젝트에서는 LM35 온도 센서와 4자리 7세그먼트 디스플레이를 사용하여 온도계를 만드는 방법을 알아보았습니다. 이 프로젝트를 통해 아두이노와 다양한 센서, 디스플레이를 사용하는 기초적인 방법을 배울 수 있습니다. 또한, 멀티플렉싱 기술을 활용하여 여러 자리 숫자를 효율적으로 표시하는 방법도 배울 수 있습니다. 프로젝트 진행 중 궁금한 점이 있으면 언제든지 문의해 주세요!

이 블로그 포스트가 여러분의 창의적인 프로젝트에 도움이 되길 바랍니다. 다양한 가능성을 탐구하며 즐거운 시간을 보내세요! 🎉✨

728x90
반응형