728x90
반응형
안녕하세요, 여러분! 이번 포스트에서는 Arduino를 이용하여 LM35 온도 센서와 4자리 7세그먼트 디스플레이를 활용한 온도계를 만드는 방법을 소개하려고 합니다. 이 프로젝트는 다중화 기술을 사용하여 디스플레이를 제어하며, 간단한 연결과 코드로 온도를 시각적으로 확인할 수 있습니다.
필요한 준비물
- Arduino 보드: Arduino nano
- LM35 온도 센서
- 4자리 7세그먼트 디스플레이
- 점퍼 케이블
- 브레드보드
회로 연결
- LM35 온도 센서 연결:
- LM35 센서의 핀 헤더를 Arduino의 A0 핀에 연결합니다.
- 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
반응형
'아두이노 러닝보드 > 아두이노 러닝보드 프로그그램설계' 카테고리의 다른 글
아두이노 학습 키트를 이용한 디지털 온도계 만들기 (0) | 2024.12.18 |
---|---|
아두이노 학습 키트를 이용한 디지털 알람 시계 만들기 (0) | 2024.12.18 |
도트 매트릭스 디스플레이로 웃는 얼굴 만들기 😊 (2) | 2024.12.18 |
LCD 테스트 프로젝트: Hello World 예제 🌟 (1) | 2024.12.18 |