포토레지스터와 LED로 만드는 주변광 센서: 단계별 가이드
부품 및 소모품
| 부품 | 수량 | 비고 |
| 아두이노 UNO | 1 | 아날로그 핀 1개, 디지털 핀 2개, 그라운드 3개 이상 있는 보드면 어떤 것이든 가능 |
| 포토레지스터 (CdS) | 1 | |
| LED (범용) | 2 | 서로 다른 색상 2개 |
| 저항 1kΩ | 1 | 포토레지스터 풀다운용 |
| 저항 100Ω | 2 | 220Ω 사용했으나 100Ω이 더 적합할 수 있음 |
| 점퍼 와이어 | 1세트 | |
| 브레드보드 | 1 | |
앱 및 온라인 서비스
프로젝트 소개
아두이노를 사용한 지 좀 됐는데, 이제부터는 처음부터 내 프로젝트를 직접 설계해 보기로 했습니다. 알렉스 글로우와 조 코번의 온라인 회로를 참고해 이 프로젝트에 맞게 수정했습니다. 문제점이나 더 나은 설계 아이디어가 있으면 댓글로 알려주세요.
배선
포토레지스터를 아날로그 핀 0번(어떤 아날로그 핀이든 가능)에 연결하고 브레드보드 오른쪽의 5V에 연결했습니다. 접지된 1kΩ 저항을 통과시킵니다. 브레드보드 반대편에 LED(아무 색상)를 디지털 핀 13번(어떤 디지털 핀이든 가능)과 접지된 220Ω 저항(100Ω도 가능)으로 연결했습니다. 첫 번째 LED 오른쪽에 다른 색상 LED를 같은 방식으로 연결하되 다른 디지털 핀을 사용하세요.
작동 원리
포토레지스터 값이 450 초과면 "It is quite light!"를 시리얼 모니터에 출력하고 모든 LED를 끕니다:
if (light > 450) { // 밝을 때...
Serial.println("It is quite light!");
digitalWrite(13, LOW); // 왼쪽 LED 끄기
digitalWrite(12, LOW); // 오른쪽 LED 끄기
}
230~450 사이면 "It is average light!"를 출력하고 왼쪽 LED만 켭니다:
else if (light > 229 && light < 451) { // 보통 밝기...
Serial.println("It is average light!");
digitalWrite(13, HIGH); // 왼쪽 LED 켜기
digitalWrite(12, LOW); // 오른쪽 LED 끄기
}
230 미만이면 "It is pretty dark!"를 출력하고 두 LED 모두 켭니다:
else { // 어두울 때...
Serial.println("It is pretty dark!");
digitalWrite(13, HIGH); // 왼쪽 LED 켜기
digitalWrite(12, HIGH); // 오른쪽 LED 켜기
}
시리얼 모니터 과부하 방지를 위해 루프 끝에 1000ms 딜레이를 추가했습니다:
delay(1000); // 컴퓨터 스팸 방지!
업로드나 실행 전 회로도와 코드를 꼭 확인하세요.
코드
LED_PR_Light_Read (Arduino)
int light = 0; // 현재 빛 값 저장
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
pinMode(13, OUTPUT); // 디지털 핀 13을 출력으로 설정
pinMode(12, OUTPUT); // 디지털 핀 12을 출력으로 설정
}
void loop() {
light = analogRead(A0); // 포토레지스터 값 읽기
Serial.println(light); // 현재 빛 값 출력
if (light > 450) { // 밝을 때...
Serial.println("It is quite light!");
digitalWrite(13, LOW); // 왼쪽 LED 끄기
digitalWrite(12, LOW); // 오른쪽 LED 끄기
} else if (light > 229 && light < 451) { // 보통 밝기...
Serial.println("It is average light!");
digitalWrite(13, HIGH); // 왼쪽 LED 켜기
digitalWrite(12, LOW); // 오른쪽 LED 끄기
} else { // 어두울 때...
Serial.println("It is pretty dark!");
digitalWrite(13, HIGH); // 왼쪽 LED 켜기
digitalWrite(12, HIGH); // 오른쪽 LED 켜기
}
delay(1000); // 컴퓨터 스팸 방지!
}
회로도