omerfbuber
Üye
- Katılım
- 12 Mart 2021
- Mesajlar
- 15
Herkese merhaba,
Bir proje üzerinde çalışıyorum. Normalde projede bulanık mantık kullanarak fan hız ayarı yapıyorum fakat Arduino donma sorunu yaşıyorum. Hafıza sorunu olabileceğini düşünüp projeyi temel haline getirdim. Değişken ve fonksiyonları kaldırdım. Fakat halen donma sorunu yaşıyorum. Hafızayı çok yoğun olarak kullandığımı düşünmüyorum. Kodları aşağıya bıraktım. Donma problemi belli bir süre çalıştıktan sonra oluyor. Bu süre 1.5 saat de oldu 7 saat de. Arduino'yu 12V adaptör ile besliyorum. Herhangi bir elektrik kesintisi sorunu olmuyor. Program loop'tan çıkmış gibi kalıyor. Bu konuda yardımınızı bekliyorum. Şimdiden teşekkürler.
Bir proje üzerinde çalışıyorum. Normalde projede bulanık mantık kullanarak fan hız ayarı yapıyorum fakat Arduino donma sorunu yaşıyorum. Hafıza sorunu olabileceğini düşünüp projeyi temel haline getirdim. Değişken ve fonksiyonları kaldırdım. Fakat halen donma sorunu yaşıyorum. Hafızayı çok yoğun olarak kullandığımı düşünmüyorum. Kodları aşağıya bıraktım. Donma problemi belli bir süre çalıştıktan sonra oluyor. Bu süre 1.5 saat de oldu 7 saat de. Arduino'yu 12V adaptör ile besliyorum. Herhangi bir elektrik kesintisi sorunu olmuyor. Program loop'tan çıkmış gibi kalıyor. Bu konuda yardımınızı bekliyorum. Şimdiden teşekkürler.
Kod:
#include <Servo.h>
#include "DHT.h"
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define SU A0
#define DHTPIN A1 //DHT Sensörünün bağlı olduğu pin
#define DHTTYPE DHT11 //DHT sensörünün tipi
#define IN1 13
#define IN2 12
#define IN3 11
#define IN4 10
#define ENA 6
#define ENB 5
#define AMPUL 7
int milisaniye = 0;
int saniye = 0;
float sicaklik; //DHT11 gelen değer
float nem; //DHT11 gelen değer
byte fanHiz;
byte servoKonum = 45;
bool servoFlag = false;
byte i;
DHT dht(DHTPIN, DHTTYPE);
Servo servoMotor; //45-Orta / 80-yukari / 10-asagi
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
servoKonum = EEPROM.read(100);
dht.begin(); //DHT11 sensörü tanımlandı
servoMotor.attach(9); /* Servo motor 9 numarali pine baglandi */
servoMotor.write(servoKonum);
pinMode(AMPUL,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
digitalWrite(7,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN4,LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
analogWrite(ENA,0);
analogWrite(ENB,0);
lcd.begin();
cli();
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
// set compare match register for 8khz increments
OCR2A = 249;// = (16*10^6) / (8000*8) - 1 (must be <256)
// turn on CTC mode
TCCR2A |= (1 << WGM21);
// Set CS21 bit for 8 prescaler
TCCR2B |= (1 << CS21);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
sei();
}
ISR(TIMER2_COMPA_vect){
milisaniye++;
if(milisaniye >= 8000)
{
milisaniye=0;
saniye++;
}
if (saniye >= 43200)
saniye = 0;
if (saniye == 0)
servoFlag = true;
}
void loop() {
sicaklik = dht.readTemperature();//DHT11 sıcaklık sensöründen veri alınıyor
nem = dht.readHumidity();//DHT11 sıcaklık sensöründen veri alınıyor
if (!isnan(sicaklik) && !isnan(nem))
{
if (sicaklik <= 37.5)
digitalWrite(7,LOW);
else if (sicaklik >= 38.3)
digitalWrite(7,HIGH);
if (sicaklik < 30 || nem < 40)
fanHiz = 150;
else if (sicaklik < 36 || nem < 50)
fanHiz = 75;
else if (sicaklik < 39 || nem < 60)
fanHiz = 0;
else if (sicaklik >= 39 || nem >= 60)
fanHiz = 255;
analogWrite(ENA, fanHiz);
if(servoFlag)
{
servoKonum = EEPROM.read(100);
if(servoKonum == 10)
{
for (i = 10; i <= 80; i++)
{
servoMotor.write(i);
delay(15);
}
EEPROM.write(100, 80);
}
else
{
for (i = 80; i >= 10; i--)
{
servoMotor.write(i);
delay(15);
}
EEPROM.write(100, 10);
}
servoFlag = false;
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("S: ");
lcd.print(sicaklik);
lcd.print(" / N: ");
lcd.print(nem);
lcd.setCursor(0,1);
lcd.print("Fan:");
lcd.print(fanHiz);
delay(1000);
}