식물 모니터: 보고서
Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 20번째.
마지막 단계에서는 1초마다 보고서를 작성합니다. 수분량과 상태를 나타내는 단어인 DRY, OK 또는 WET을 표시합니다. 식물 옆에 있는 사람을 위해 LCD에 표시하고, 컴퓨터를 위해 Serial 모니터에도 표시합니다.
LCD는 일반적인 방식으로 연결합니다. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 그리고 setup()에서 lcd.begin(16, 2)를 사용합니다. 윗줄에는 Moisture: 42%가 표시되고, 아랫줄에는 상태를 나타내는 단어가 표시됩니다.
Serial 모니터에서는 상태를 나타내는 단어가 수분량과 같은 줄에 표시되므로, println()이 아니라 Serial.print()로 수분량을 출력합니다. 그런 다음 상태 표시등의 세 가지 범위에 따라 단어를 선택하고 둘 다에 출력합니다.
if (moisture < 30) {
lcd.print("DRY");
Serial.println("DRY");
} else if (moisture <= 70) {
lcd.print("OK ");
Serial.println("OK");
} else {
lcd.print("WET");
Serial.println("WET");
}이전 문자가 남지 않도록 주의하세요. OK는 DRY보다 짧으므로 공백을 포함해 "OK "를 출력해야 합니다. 그렇지 않으면 화면에 OKY가 표시됩니다. 100%가 5%로 바뀌는 경우도 마찬가지입니다. % 뒤에 공백을 두 개 출력하세요.
챌린지
중급보고서를 초마다 한 번씩 작성하세요:
setup()에서 LCD(핀 12, 11, 5, 4, 3, 2)를 설정합니다- 맨 윗줄:
Moisture: 42%, 뒤에 공백을 넣습니다 - 맨 아랫줄: 30% 미만이면
DRY, 30%부터 70%까지는OK, 70% 초과이면WET를 표시하고, 공백으로 채웁니다 - Serial 모니터:
Moisture: 42% OK와 같은 한 줄
상태 표시등과 알람을 유지하세요. Run을 누른 다음 Check를 누르세요.
직접 해보기
// 손잡이는 토양 수분 센서 역할을 합니다
const int sensorPin = A0;
// 상태 표시등: RGB LED
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// 경보음
const int buzzerPin = 8;
bool wasDry = false; // 마지막 측정 때 토양이 건조했는가?
unsigned long dryStart = 0; // 토양이 건조해진 시점
// 수분 함량(퍼센트): 0은 완전히 건조한 상태, 100은 흠뻑 젖은 상태입니다.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// 건조하면 빨간색, 적절하면 초록색, 젖어 있으면 파란색입니다.
void showStatus(int moisture) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
if (moisture < 30) {
digitalWrite(redPin, HIGH);
} else if (moisture <= 70) {
digitalWrite(greenPin, HIGH);
} else {
digitalWrite(bluePin, HIGH);
}
}
// 토양이 5초 넘게 건조한 상태면 1초마다 신호음을 울립니다.
void checkAlarm(int moisture) {
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis();
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}
}
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int moisture = readMoisture();
Serial.print("Moisture: ");
Serial.print(moisture);
Serial.println("%");
showStatus(moisture);
checkAlarm(moisture);
delay(1000);
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
프로젝트의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드