MusaEren
Femtopat
- Katılım
- 5 Mayıs 2024
- Mesajlar
- 57
Daha fazla
- Cinsiyet
- Erkek
Arkadaşlar elimde şöyle bir kod var, bu koda DHT11'i nem için ve DHT22'yi ısı için kullanacağım ama ChatGPT evet yapıyor ama DC motor su pompalaması gereken yerde ya pompalamıyor. Daha hiç çalışmıyor veya durmuyor, yani bayağı bir araşıyor. Yazılım bilgisi olabilenler bakabilir mi?
C-like:
// Kuluçka Makinası
// By MusaEren
// Kullanılan kütüphaneler
#include <DHT.h> // DHT sensörleri için kütüphane
#include <LiquidCrystal.h> // 4-bit modunda LCD ekranı için kütüphane
// Pin tanımlamaları
int ledk = 2; // Kırmızı LED için pin
int led = 13; // Yeşil LED için pin
int buzzer = 3; // Buzzer için pin
int role = 11; // Röle kontrolü için pin
int DC1 = 10; // DC motor 1 için pin
int DC2 = 12; // DC motor 2 için pin
int potPinTemp = A1; // Sıcaklık potansiyometre pin
int potPinHum = A0; // Nem potansiyometre pin
// LCD pinleri (4-bit modunda)
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
// Zamanlama değişkenleri
unsigned long eskiZaman = 0; // Geçmiş zaman değişkeni
unsigned long yeniZaman; // Yeni zaman değişkeni
// DHT22 sensörü için pin ve tür tanımlaması
#define DHT_PIN A2 // DHT22 sensörünün bağlı olduğu pin (örneğin Arduino A2)
#define DHT_TYPE DHT22
// DHT22 sensörü tanımlaması
DHT dht(DHT_PIN, DHT_TYPE);
// LCD ekranı tanımlaması
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // 4-bit modunda LCD ekran
// Sıcaklık ve nem değişkenleri
float temperature = 0;
float humidity = 0;
// Hedeflenen sıcaklık ve nem değerleri (ayarlanabilir)
float hedefIsi = 37.6; // Varsayılan hedef sıcaklık değeri
float hedefNem = 55; // Varsayılan hedef nem değeri
// Durum değişkeni
int durum = 0;
// Motor için zamanlama değişkenleri
unsigned long motorBaslangicZamani = 0; // Motorun başlama zamanı
const unsigned long motorCalismaSuresi = 1; // Motorun çalışma süresi (örneğin 1000 ms = 1 s)
void setup() {
// Seri haberleşmeyi başlat
Serial.begin(9600);
// Pin modlarını ayarla
pinMode(led, OUTPUT);
pinMode(ledk, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(role, OUTPUT);
pinMode(DC1, OUTPUT);
pinMode(DC2, OUTPUT);
// Potansiyometre pinlerini giriş olarak ayarla
pinMode(potPinTemp, INPUT);
pinMode(potPinHum, INPUT);
// DHT sensörünü başlat
dht.begin();
// Başlangıçta bazı bileşenleri ayarla ve kontrol et
digitalWrite(led, HIGH);
digitalWrite(ledk, HIGH);
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(led, LOW);
digitalWrite(ledk, LOW);
digitalWrite(buzzer, LOW);
delay(50);
digitalWrite(led, HIGH);
digitalWrite(ledk, HIGH);
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(led, LOW);
digitalWrite(ledk, LOW);
digitalWrite(buzzer, LOW);
// LCD ekranını başlat ve bazı başlangıç mesajlarını göster
lcd.begin(16, 2); // 16x2 LCD ekran
lcd.setCursor(0, 0);
lcd.print(" Test");
lcd.setCursor(0, 1);
lcd.print("Kulucka Makinesi");
delay(2000);
// DC motor pinlerini başlangıçta kapalı konuma getir
digitalWrite(DC1, LOW);
digitalWrite(DC2, LOW);
}
void loop() {
// Zamanlayıcıyı güncelle
yeniZaman = millis();
// Potansiyometrelerden hedeflenen sıcaklık ve nem değerlerini oku (0-1023 arası değerler)
int potValueTemp = analogRead(potPinTemp);
hedefIsi = map(potValueTemp, 0, 1023, 320, 410) / 10.0; // 0-1023 aralığını 32.0-41.0 derece aralığına dönüştür
int potValueHum = analogRead(potPinHum);
hedefNem = map(potValueHum, 0, 1023, 50, 85); // 0-1023 aralığını 50-85 aralığına dönüştür
// DHT22 sensöründen sıcaklık ve nem değerlerini oku
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Seri monitöre nem ve sıcaklık değerlerini yazdır
Serial.print("SICAKLIK: ");
Serial.println(temperature);
Serial.print("NEM: ");
Serial.println(humidity);
// LCD ekranını temizle ve sıcaklık-nem değerlerini yazdır
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ISI ");
lcd.print(temperature, 1); // Sıcaklık değerini 1 ondalık basamakla yazdır
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("NEM ");
lcd.print(humidity, 0); // Nem değerini tam sayı olarak yazdır
lcd.print("%");
// Hedeflenen sıcaklık ve nem değerlerini de LCD ekranına yazdır
lcd.setCursor(9, 0);
lcd.print(" H ");
lcd.print(hedefIsi, 1); // Hedef sıcaklık değerini 1 ondalık basamakla yazdır
lcd.print("C");
lcd.setCursor(9, 1);
lcd.print(" H ");
lcd.print(hedefNem, 0); // Hedef nem değerini tam sayı olarak yazdır
lcd.print("%");
// Sıcaklık değerine göre kontrol yap
if (temperature >= hedefIsi) {
digitalWrite(role, LOW);
digitalWrite(ledk, LOW);
digitalWrite(led, HIGH);
digitalWrite(buzzer, LOW);
} else if (temperature <= hedefIsi - 2) {
digitalWrite(role, HIGH);
digitalWrite(led, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(buzzer, LOW);
}
// Sıcaklık 0 derece veya altına düştüğünde röleyi kapat ve alarm ver
if (temperature <= 0.0) {
digitalWrite(role, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(led, LOW);
digitalWrite(buzzer, HIGH);
delay(1000); // 1 saniye alarm çal
digitalWrite(buzzer, LOW);
}
// Sıcaklık değeri hedeflenen sıcaklık değerinin 2 derece üzerinde ise alarm ver
if (temperature > hedefIsi + 2) {
digitalWrite(ledk, HIGH);
digitalWrite(led, LOW);
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
}
// Nem değeri hedeflenen nem değerinin 5 puan altındaysa motoru çalıştır
if (humidity < hedefNem - 5 && durum == 0) {
digitalWrite(buzzer, LOW);
digitalWrite(DC1, HIGH);
motorBaslangicZamani = millis(); // Motorun çalışmaya başladığı zamanı kaydet
durum = 1;
}
// Belirli bir süre sonra motoru kapat
if (durum == 1 && millis() - motorBaslangicZamani >= motorCalismaSuresi) {
digitalWrite(DC1, HIGH);
digitalWrite(DC2, HIGH);
digitalWrite(DC1, HIGH);
digitalWrite(DC2, LOW);
digitalWrite(DC1, HIGH);
digitalWrite(DC2, HIGH);
durum = 0;
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
}
// Belirli bir süre sonra durumu sıfırla
if (yeniZaman - eskiZaman > 1800000) {
durum = 0;
eskiZaman = yeniZaman;
}
// Bekleme süresi
delay(1000);
}
Son düzenleyen: Moderatör: