[스마트팜]관수시스템을위한 소스코드

[스마트팜]관수시스템을위한 소스코드

Makerist 1 1816

#include <LiquidCrystal_I2C.h> // LCD 라이브러리를 불러옵니다.
#include <Wire.h> // I2C 통신 라이브러리를 불러옵니다.


LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 객체를 생성합니다. (주소, 열수, 행수)


const int relayPin = 2; // 릴레이 모듈이 연결된 디지털 핀 번호
const int potentiometerPin = A0; // 포텐시오미터가 연결된 아날로그 핀 번호


int pumpRuntime = 600000; // 펌프가 작동할 시간 (10분을 밀리초로 변환한 값)
int interval = 7200000; // 펌프를 작동시키는 간격 (2시간을 밀리초로 변환한 값)
unsigned long previousMillis = 0; // 이전 작동 시간을 저장하는 변수


void setup() {
  pinMode(relayPin, OUTPUT); // 릴레이 핀을 출력으로 설정합니다.
  digitalWrite(relayPin, LOW); // 초기에 릴레이를 OFF 상태로 설정합니다.
  lcd.begin(); // LCD를 초기화합니다.
  lcd.backlight(); // LCD 백라이트를 켭니다.
  lcd.setCursor(0, 0); // LCD 커서 위치를 (0, 0)으로 설정합니다.
  lcd.print("Timer: 02:00:00"); // 초기 LCD 메시지 출력
  lcd.setCursor(0, 1); // LCD 커서 위치를 (0, 1)으로 설정합니다.
  lcd.print("Pump: 00:10:00");
}


void loop() {
  unsigned long currentMillis = millis(); // 현재 시간을 밀리초로 가져옵니다.


  int potValue = map(analogRead(potentiometerPin), 0, 1023, 0, 7200000); // 포텐시오미터의 값을 0부터 7200000까지의 값으로 변환합니다.
  interval = potValue; // 변환된 값을 간격 변수에 저장합니다.


  if (currentMillis - previousMillis >= interval) { // 설정된 간격마다 펌프를 작동합니다.
    previousMillis = currentMillis; // 이전 작동 시간을 현재 시간으로 업데이트합니다.
    digitalWrite(relayPin, HIGH); // 릴레이를 ON 상태로 변경하여 펌프를 작동합니다.
    delay(pumpRuntime); // 설정된 작동 시간만큼 대기합니다.
    digitalWrite(relayPin, LOW); // 릴레이를 OFF 상태로 변경하여 펌프를 멈춥니다.
  }


  // LCD에 타이머 시간과 펌프 작동 시간을 표시합니다.
  lcd.setCursor(7, 0); // LCD 커서 위치를 (7, 0)으로 설정합니다.
  lcd.print(convertToTime(interval)); // 타이머 시간을 출력합니다.
  lcd.setCursor(6, 1); // LCD 커서 위치를 (6, 1)으로 설정합니다.
  lcd.print(convertToTime(pumpRuntime)); // 펌프 작동 시간을 출력합니다.
}


// 밀리초를 시간(시:분:초)으로 변환하는 함수
String convertToTime(unsigned long millisTime) {
  unsigned long hours = millisTime / 3600000; // 시간 계산
  unsigned long minutes = (millisTime % 3600000) / 60000; // 분 계산
  unsigned long seconds = ((millisTime % 3600000) % 60000) / 1000; // 초 계산


  // 시간, 분, 초를 문자열로 변환하여 반환
  return String(hours) + ":" + String(minutes) + ":" + String(seconds);
}

1 Comments
Makerist 2024.03.15 01:34  
관수를 위한 기본 시스템구성이며 온습도 센서는 추가예정임