#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
const int ntcPin = A0; // پین حسگر دما (NTC)
const int servoPin = 9; // پین سروموتور برای گرمکن
const int ledPin = 11; // پین LED برای نمایش نور اکواریوم
const int buzzerPin = 10; // پین Buzzer برای هشدار
const int waterLevelPin = A2; // پین حسگر سطح آب
const int phPin = A1; // پین حسگر pH
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس I2C و تعداد ستون و ردیف LCD
void setup() {
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
controlTemperature(24, 29);
controlWaterLevel(20);
controlPH(6, 8);
controlLight();
}
void controlTemperature(float minTemp, float maxTemp) {
float currentTemperature = readTemperature();
if (currentTemperature < minTemp) {
adjustTemperature(minTemp);
delay(1500);
stopServo();
alert("Temperature is too low!");
} else if (currentTemperature > maxTemp) {
adjustTemperature(maxTemp);
delay(1500);
stopServo();
alert("Temperature is too high!");
}
}
void controlWaterLevel(float minLevel) {
float currentWaterLevel = readWaterLevel();
if (currentWaterLevel < minLevel) {
alert("Low water level!");
}
}
void controlPH(float minPH, float maxPH) {
float currentPH = readPH();
if (currentPH < minPH || currentPH > maxPH) {
alert("pH is out of range!");
}
}
void controlLight() {
int hour = hour();
if (hour >= 0 && hour < 3) {
// نور حداقل روشنایی (0٪)
analogWrite(ledPin, 0);
} else if (hour >= 3 && hour < 9) {
// نور حداکثر روشنایی (100٪)
analogWrite(ledPin, 255);
} else {
// نور با شدت 50٪
analogWrite(ledPin, 128);
}
}
void alert(String message) {
digitalWrite(buzzerPin, HIGH); // روشن کردن بوق
delay(1000);
digitalWrite(buzzerPin, LOW); // خاموش کردن بوق
lcd.clear();
lcd.print(message);
delay(2000);
}
float readTemperature() {
int rawValue = analogRead(ntcPin);
float voltage = rawValue * (5.0 / 1023.0); // تبدیل مقدار خوانده شده به ولتاژ
float resistance = (5.0 - voltage) / voltage; // محاسبه مقاومت با استفاده از قانون اهم
float temperature = 1 / (log(resistance) / 3975 + 1 / 298.15) - 273.15; // محاسبه دما با استفاده از رابطهٔ استاینبرگ
return temperature;
}
void adjustTemperature(float targetTemp) {
myServo.write(90); // حرکت موتور به زاویهٔ 90 درجه (با گرمکن)
delay(1500); // تاخیر برای تنظیم دما (میتوانید تنظیم کنید)
}
void stopServo() {
myServo.write(0); // توقف حرمتن کد کامل به زبان C++:
```cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
const int ntcPin = A0; // پین حسگر دما (NTC)
const int servoPin = 9; // پین سروموتور برای گرمکن
const int ledPin = 11; // پین LED برای نمایش نور اکواریوم
const int buzzerPin = 10; // پین Buzzer برای هشدار
const int waterLevelPin = A2; // پین حسگر سطح آب
const int phPin = A1; // پین حسگر pH
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس I2C و تعداد ستون و ردیف LCD
void setup() {
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
controlTemperature(24, 29);
controlWaterLevel(20);
controlPH(6, 8);
controlLight();
}
void controlTemperature(float minTemp, float maxTemp) {
float currentTemperature = readTemperature();
if (currentTemperature < minTemp) {
adjustTemperature(minTemp);
delay(1500);
stopServo();
alert("Temperature is too low!");
} else if (currentTemperature > maxTemp) {
adjustTemperature(maxTemp);
delay(1500);
stopServo();
alert("Temperature is too high!");
}
}
void controlWaterLevel(float minLevel) {
float currentWaterLevel = readWaterLevel();
if (currentWaterLevel < minLevel) {
alert("Low water level!");
}
}
void controlPH(float minPH, float maxPH) {
float currentPH = readPH();
if (currentPH < minPH || currentPH > maxPH) {
alert("pH is out of range!");
}
}
void controlLight() {
int hour = hour();
if (hour >= 0 && hour < 3) {
// نور حداقل روشنایی (0٪)
analogWrite(ledPin, 0);
} else if (hour >= 3 && hour < 9) {
// نور حداکثر روشنایی (100٪)
analogWrite(ledPin, 255);
} else {
// نور با شدت 50٪
analogWrite(ledPin, 128);
}
}
void alert(String message) {
digitalWrite(buzzerPin, HIGH); // روشن کردن بوق
delay(1000);
digitalWrite(buzzerPin, LOW); // خاموش کردن بوق
lcd.clear();
lcd.print(message);
delay(2000);
}
float readTemperature() {
int rawValue = analogRead(ntcPin);
float voltage = rawValue * (5.0 / 1023.0); // تبدیل مقدار خوانده شده به ولتاژ
float resistance = (5.0 - voltage) / voltage; // محاسبه مقاومت با استفاده از قانون اهم
float temperature = 1 / (log(resistance) / 3975 + 1 / 298.15) - 273.15; // محاسبه دما با استفاده از رابطهٔ استاینبرگ
return temperature;
}
void adjustTemperature(float targetTemp) {
myServo.write(90); // حرکت موتور به زاویهٔ 90 درجه (با گرمکن)
delay(1500); // تاخیر برای تنظیم دما (میتوانید تنظیم کنید)
}
void stopServo() {
myServo.write(0); // توقف حرکت سروموتور
}