Bitirme projesi

Kod:
#include <LiquidCrystal.h> // include the library for the LCD
#include <DHT.h> // include the library for the DHT11 temperature sensor
#include <Stepper.h> // include the library for the stepper motor

// set up the LCD's number of columns and rows:
const int numRows = 2;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// set up the DHT11 temperature sensor
#define DHTTYPE DHT11 // specify the type of DHT sensor
#define DHTPIN A0 // specify the pin the DHT sensor is connected to
DHT dht(DHTPIN, DHTTYPE); // create a DHT instance

// set up the stepper motor
const int stepsPerRevolution = 200; // specify the number of steps per revolution
Stepper stepper(stepsPerRevolution, 0, 1, 2, 3); // create a Stepper instance and specify the pins the motor is connected to

void setup() {
  lcd.begin(16, 2);
 lcd.setCursor(0,0);
 lcd.print(" Sicaklik Olcer");
 delay(1000);
 lcd.clear();

 Serial.begin(9600);
 delay(100);

  // initialize the DHT11 sensor
  dht.begin();

  // set the speed of the stepper motor in steps per second
  stepper.setSpeed(600);
}

void loop() {
 
  // read the input from the LCD button shield
  int buttonInput = readButtonInput();

  // read the temperature and humidity from the DHT11 sensor
  float temp = dht.readTemperature(); // read the temperature in Celsius
  float humi = dht.readHumidity(); // read the humidity in percent
 
 
 lcd.setCursor(9,2);
 
  lcd.setCursor(0,0);
  lcd.print("Sicaklik:");
  lcd.setCursor(9,0);
  lcd.print(temp);
  lcd.setCursor(12,0);
  lcd.print("'C");

  lcd.setCursor(0,2);
  lcd.print("Nem:");
  lcd.setCursor(5,2);
  lcd.print(humi);
  lcd.setCursor(8,2);
  lcd.print("%");

  delay (100);

  // compare the temperature from the sensor with the input from the button shield
  if (temp > buttonInput) {
    // run the stepper motor if the temperature is higher
    stepper.step(stepsPerRevolution); // rotate the motor one revolution
  } else {
    // do something else if the temperature is not higher
  }
}

// function to read the input from the LCD button shield
int readButtonInput() {
  // read the input from the button shield
  int buttonInput = analogRead(A1);

  // map the input to a value between 0 and 100
  buttonInput = map(buttonInput, 0, 1023, 0, 100);

  // return the mapped value
  return buttonInput;
}
Hocam en güncel durum bu şuanda. Elimdeki iki kodu bir şekilde birleştirdim. Sorun şurda lcd shield butonlarından değer giremiyorum bu değeri girip ekranda görebilirsem sıcaklık değerine göre motoru çalıştırabilirim gibi geliyor bana.
Aşağıdaki videoyu dikkatli bir şekilde izleyip uygularsan bu sorunu aşacağını düşünüyorum.

 
Aşağıdaki videoyu dikkatli bir şekilde izleyip uygularsan bu sorunu aşacağını düşünüyorum.

hocam kodu alttaki şekilde yazdım. Tuş atamasını yapabiliyorum. Bunu DHT11 ile birleştirdim mantığıma göre çalışacağını düşündüğüm şekilde if komutuyla ölçülen sıcaklık değeri butonda yazılan son değerden büyük olduğunda motoru çalıştırmak için komut vereceğim ama bi türlü veremiyorum. Yazdığım kod bana doğru geliyor, program da hata vermiyor ama motor dönmüyor. Sesi çıkıyor ama hareket sağlamıyor. Motor için ayrı bir kod yazıp denediğimde motor çalışıyor ama birleşince çalışmıyor. Hatta DHT kullanmadan direkt olarak tuşlardan atanan değer örneğin 26 yı geçtiğinde motor çalışsın diye komut veriyorum o şekilde de çalıştıramıyorum. Nerde hata yapıyor olabilirim?

Kod:
#include <LiquidCrystal.h> 
#include <DHT.h> 
#include <X113647Stepper.h>


// set up the LCD's number of columns and rows:
const int numRows = 2;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int i=25;
int e=40;
int tus = 0;
int adim = 1024; //90 Derecelik adım sayısı
X113647Stepper stepmotor(adim, 0, 1, 2, 3);
// set up the DHT11 temperature sensor
#define DHTTYPE DHT11 // specify the type of DHT sensor
#define DHTPIN A1 // specify the pin the DHT sensor is connected to
DHT dht(DHTPIN, DHTTYPE); // create a DHT instance


void setup() {
 lcd.begin(16, 2);
 lcd.setCursor(0,0);
 lcd.print(" Sicaklik Olcer");
 delay(1000);
 lcd.clear();

 Serial.begin(9600);
 delay(100);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Sicaklik=");
lcd.setCursor(0, 2);
lcd.print("Nem=");

  // initialize the DHT11 sensor
  dht.begin();

   stepmotor.setSpeed(500);
}

void loop() {
 
  // read the input from the LCD button shield
  Serial.println(analogRead(A0));
  tus = analogRead(A0);

  // read the temperature and humidity from the DHT11 sensor
  float temp = dht.readTemperature(); // read the temperature in Celsius
  float humi = dht.readHumidity(); // read the humidity in percent
  lcd.setCursor(9, 0);
lcd.print(temp);
lcd.setCursor(4, 2);
lcd.print(humi);
 
  if (tus >= 95  &&  tus <= 115)
  {
    tus = 99;
    i++;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);

  }
    else if (tus >= 250 && tus <=  270) {
    tus = 260;
    i--;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);
 
  }
  else if (tus >= 0 && tus <=  15){
    e= e+5;
    lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
  else if (tus >= 400 && tus <=  420){
    e= e-5;
 lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
    
   else {
     lcd.setCursor(12, 0);
    lcd.print(i);
    lcd.setCursor(12, 2);
    lcd.print(e);
   }


  // compare the temperature from the sensor with the input from the button shield
  if (temp >= i) {
    stepmotor.step(adim);
    delay(1000);
  } else {
    // do something else if the temperature is not higher
  }
}
 
motor dönmüyor. Sesi çıkıyor ama hareket sağlamıyor.
Şuanda kodlara odaklanamayacak kadar çok başım ağrıyor. Yukarıdaki sorunun sebebi:
1- Motora komut gönderdiğin pini arduinoda PWM pinine bağlamamış olabilirsin. Üzerinde ~ işareti olan bir pine bağladığını kontrol et.
2- PWM sinyali düşük olabilir. Yanlış hatırlamıyorsam 0 ile 254 arasında bir değer vermek gerekti. Sen direk 254 ver. Bu durumda motorun kesin dönmesi lazım.
3- Motor beslemesi. Motor beslemesini nasıl yapıyorsun? Arduinonun 5v çıkışından yapıyorsan, o pinin gücü motoru döndürmeye yetmez. Motora harici besleme bağlaman lazım ve ayrıca harici besleme GND si ile Arduino GND sini birleştirmen lazım.
 
Aşağıdaki kod bloğu dikkatimi çekti.
tus büyük-veya-eşitse 95'e VE tus küçük-veya-eşitse 115'e şeklinde bir if bloğu oluşturmuşsun.
Devamında da VE (&&) operatörünü kullanmışsın. Bu kod çalışmaz. Çünkü tus değişkeni aynı anda 95 ve 115 olamaz.
VE(&&) operatörü yerine VEYA(||) operatörü kullanarak değiştir bu if bloklarını.

C++:
if (tus >= 95  &&  tus <= 115)
  {
    tus = 99;
    i++;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);

  }
    else if (tus >= 250 && tus <=  270) {
    tus = 260;
    i--;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);
 
  }
  else if (tus >= 0 && tus <=  15){
    e= e+5;
    lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
  else if (tus >= 400 && tus <=  420){
    e= e-5;
 lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
 
Şuanda kodlara odaklanamayacak kadar çok başım ağrıyor. Yukarıdaki sorunun sebebi:
1- Motora komut gönderdiğin pini arduinoda PWM pinine bağlamamış olabilirsin. Üzerinde ~ işareti olan bir pine bağladığını kontrol et.
2- PWM sinyali düşük olabilir. Yanlış hatırlamıyorsam 0 ile 254 arasında bir değer vermek gerekti. Sen direk 254 ver. Bu durumda motorun kesin dönmesi lazım.
3- Motor beslemesi. Motor beslemesini nasıl yapıyorsun? Arduinonun 5v çıkışından yapıyorsan, o pinin gücü motoru döndürmeye yetmez. Motora harici besleme bağlaman lazım ve ayrıca harici besleme GND si ile Arduino GND sini birleştirmen lazım.
Hocam normalde motor için bi program yazıp o programdan çalıştırınca motor çalışıyor. Bu programda da arduinonun 5v çıkışından besleme yapıyorum, aynı pinleri kullanıyorum çalışmasında bir sorun olmuyor. Kodlar birleşince dönmüyor
 
Aşağıdaki kod bloğu dikkatimi çekti.
tus büyük-veya-eşitse 95'e VE tus küçük-veya-eşitse 115'e şeklinde bir if bloğu oluşturmuşsun.
Devamında da VE (&&) operatörünü kullanmışsın. Bu kod çalışmaz. Çünkü tus değişkeni aynı anda 95 ve 115 olamaz.
VE(&&) operatörü yerine VEYA(||) operatörü kullanarak değiştir bu if bloklarını.

C++:
if (tus >= 95  &&  tus <= 115)
  {
    tus = 99;
    i++;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);

  }
    else if (tus >= 250 && tus <=  270) {
    tus = 260;
    i--;
    lcd.setCursor(12, 0);
    lcd.print(i);
    delay(400);
 
  }
  else if (tus >= 0 && tus <=  15){
    e= e+5;
    lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
  else if (tus >= 400 && tus <=  420){
    e= e-5;
 lcd.setCursor(12, 2);
    lcd.print(e);
    delay(400);

  }
bu kısımda sorun yaşamadım ama dediğiniz gibi düzelteyim onları
 
bu kısımda sorun yaşamadım ama dediğiniz gibi düzelteyim onları
Tamam değiştirme. İlaçların etkisi ile baş ağrım hafifledi. Biraz daha sağlıklı düşünebiliyorum :)
O bloklar doğru.

Hocam normalde motor için bi program yazıp o programdan çalıştırınca motor çalışıyor. Bu programda da arduinonun 5v çıkışından besleme yapıyorum, aynı pinleri kullanıyorum çalışmasında bir sorun olmuyor. Kodlar birleşince dönmüyor
Belki arduinonun tek başına motora gücü yetiyordur ama ekranı, sensörü vs bağladığında yetmez. Mutlaka harici güç ile besle.
 
Tamam değiştirme. İlaçların etkisi ile baş ağrım hafifledi. Biraz daha sağlıklı düşünebiliyorum :)
O bloklar doğru.


Belki arduinonun tek başına motora gücü yetiyordur ama ekranı, sensörü vs bağladığında yetmez. Mutlaka harici güç ile besle.
Hocam tekrardan merhabalar uzun zamandır dönüş yapamadım projeyle de ilgilenemedim finaller bütünlemeler dersler derken vakit bulamadım. Şimdi tekrar uğraşmaya başlayıp yarıyıl tatilinde bitirmem gerek. Ben bu motoru harici güçle nasıl besleyeceğim konusunda bı yardım bulamadım. Rica etsem kısaca tarif eder misiniz?
 
Hocam tekrardan merhabalar uzun zamandır dönüş yapamadım projeyle de ilgilenemedim finaller bütünlemeler dersler derken vakit bulamadım. Şimdi tekrar uğraşmaya başlayıp yarıyıl tatilinde bitirmem gerek. Ben bu motoru harici güçle nasıl besleyeceğim konusunda bı yardım bulamadım. Rica etsem kısaca tarif eder misiniz?
Alelacele çizdim. Pek sanmıyorum ama eğer hata yapmışsam üçüncü bir göz düzeltebilir.

kumbara devresi.png
 
Hocam denedim, pilin eksisini arduino ile birleştirdim artısını direkt motor sürücüsüne verdim yine de motorda bir hareket olmadı. Sanırım benim kodlarımda bir yanlışlık var ama bulamıyorum hatayı
En son kullandığın kodların tamamını atar mısın buraya.
 
#include <LiquidCrystal.h> // include the library for the LCD
#include <DHT.h> // include the library for the DHT11 temperature sensor
#include <X113647Stepper.h>


// set up the LCD's number of columns and rows:
const int numRows = 2;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int i=25;
int e=40;
int tus = 0;
int adim = 1024; //90 Derecelik adım sayısı
X113647Stepper stepmotor(adim, 0, 1, 2, 3);
// set up the DHT11 temperature sensor
#define DHTTYPE DHT11 // specify the type of DHT sensor
#define DHTPIN A1 // specify the pin the DHT sensor is connected to
DHT dht(DHTPIN, DHTTYPE); // create a DHT instance


void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(" Sicaklik Olcer");
delay(1000);
lcd.clear();

Serial.begin(9600);
delay(100);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Sicaklik=");
lcd.setCursor(0, 2);
lcd.print("Nem=");

// initialize the DHT11 sensor
dht.begin();

stepmotor.setSpeed(500);
}

void loop() {

// read the input from the LCD button shield
Serial.println(analogRead(A0));
tus = analogRead(A0);

// read the temperature and humidity from the DHT11 sensor
float temp = dht.readTemperature(); // read the temperature in Celsius
float humi = dht.readHumidity(); // read the humidity in percent
lcd.setCursor(9, 0);
lcd.print(temp);
lcd.setCursor(4, 2);
lcd.print(humi);

if (tus >= 95 && tus <= 115)
{
tus = 99;
i++;
lcd.setCursor(12, 0);
lcd.print(i);
delay(400);

}
else if (tus >= 250 && tus <= 270) {
tus = 260;
i--;
lcd.setCursor(12, 0);
lcd.print(i);
delay(400);

}
else if (tus >= 0 && tus <= 15){
e= e+5;
lcd.setCursor(12, 2);
lcd.print(e);
delay(400);

}
else if (tus >= 400 && tus <= 420){
e= e-5;
lcd.setCursor(12, 2);
lcd.print(e);
delay(400);

}

else {
lcd.setCursor(12, 0);
lcd.print(i);
lcd.setCursor(12, 2);
lcd.print(e);
}


// compare the temperature from the sensor with the input from the button shield
if (temp >= i) {
stepmotor.step(adim);
delay(1000);
} else {
// do something else if the temperature is not higher
}
}
 
1- Buttonlara basınca A0 dan okuduğunuz değerleri seri terminale yazdırın. Bakalım verdiğiniz aralıkta geliyor mu ölçüm?

2-LCD üzerinde beklediğiniz gibi çalışıyor mu program?
 
1- Buttonlara basınca A0 dan okuduğunuz değerleri seri terminale yazdırın. Bakalım verdiğiniz aralıkta geliyor mu ölçüm?

2-LCD üzerinde beklediğiniz gibi çalışıyor mu program?
1- Dediğiniz sistemde değerleri alarak yazdım onları. Sonradan kontrol ettim verdiğim aralıkta geliyor ölçümler.
2- LCD üzerinde bi yere kadar istediğim gibi çalışıyor. Şu şekilde mesela ben istenen sıcaklığı 27 ye getiriyorum dalgalı şekilde yazıyor 27 görüntü garipleşiyor. Daha sonra ölçülen sıcaklık 27 ye geldikten sonra bir daha sıcaklığı değiştiremiyorum
 
Step motor hocam 28byj48 sürücüsüyle birlikte kullanıyorum
Konuya 3-4 günde bir dönüş yaptığın için ben odaklanamamışım. Kumbara projesi diye cevap yazıyorum hep. Yukarıda attığım resimde de o yüzden servo, ldr filan var.
Neyse son attığın kodlarda dikkatimi çekti. Senin LCD ekranın 16x2. Yani 2 satır 16 sıra.
Bu iki satırı kodlarken ilk satır için "0", ikinci satır için "1" kullanman gerekiyor. Senin en son attığın kodlarda ikinci satır için "2" değerini kullandığın görülüyor. O 2'lerin hepsini "1" yap öyle dene.

Birde iflerin içinde LCD.clear(); kullanman gerekiyor. Kullanmazsaz her aldığı değeri bir önckinin üstüne yazar ve sende ekranda anlamsız şekiller görürsün.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,788
Mesajlar
98,999
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top