Arduino kuluçka kodu su pompalamıyor

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:
Python:
// 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 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 = 1000;  // Motorun çalışma süresi (ms)

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);

  // 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);
}

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);
Bir de bunu dene.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Geri
Yukarı