Arduino RTC modüllü Step motor devresine nasıl kod yazabilirim?

  • Konbuyu başlatan Emo551115
  • Başlangıç tarihi

Emo551115

Üye
Katılım
3 Nis 2021
Mesajlar
4
Puanları
1
Yaş
16
Merhaba, elimde 28byj-48 adlı mini step motor ve DS1302 adlı bir gerçek zaman modülü var. Birde Ardunio Uno var,
Kod:
#include <Stepper.h>
#include <virtuabotixRTC.h>                            //Kütüphanemizi ekliyoruz.
int CLK_PIN = 2;                                       //6. pini clock pini olarak tanımladık
int DAT_PIN = 3;                                       //7. pini data pini olarak tanımladık
int RST_PIN = 4;                                       //8. pini reset pini olarak tanımladık.
virtuabotixRTC myRTC(CLK_PIN, DAT_PIN, RST_PIN);      // Kütüphanemizi pinlere atıyoruz.
#define STEPS 4096
Stepper stepper(STEPS, 10,11,12,13);


void setup() {

stepper.setSpeed(2);
}

void loop() {
myRTC.updateTime();
if(myRTC == (10, 45, 13, 4, 9, 6, 2021)) {                         
stepper.step(4096);}

if(myRTC.time (00, 48, 13, 4, 9, 6, 2021){

  stepper.step(-4096)
}

}
Böyle bir kod yapmaya çalıştım Yotubeden Robotistanın bir videosunu izledim ve loop kısmı dışındaki yerlerin kodları sanırım çalışıyor fakat loop kısmına ne yazmalıyım sadece istediğim if kodunu kullanarak sadece belirli birzamanda tamtur dönmesini sağlamak ve sadece belirli bir zamnda tam tersine dönmesini sağlamak biraz yardımcı fikir verebilirmisiniz. Ardunio da daha çok yeniyim. TEŞEKKÜRLER.
 
Moderatör tarafında düzenlendi:

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
468
Puanları
58
Öncelikle

C++:
if(myRTC == (10, 45, 13, 4, 9, 6, 2021))

bu satır yanlış arduino c++ diliyle kodlanıyor python kullanamıyoruz maalesef. Cdilinde sadece bir değeri karşılaştırabilirsin. myRTC nesnesini birden fazla sayıyla karşılaştıramazsın. Şimdi asıl soru şu neden?

Neden ds1302 ile bir motor kontrol etmek istiyorsun? Alarm olarak mı kullanacaksın? ds1302 sadece elektrik gittiği durumlarda saati unutmadığı için işe yarar yoksa saat fonksiyonunu arduino içerisindeki millis() fonksiyonuyla yapabilirsin.
 
Konu Sah
Emo551115

Emo551115

Üye
Katılım
3 Nis 2021
Mesajlar
4
Puanları
1
Yaş
16
Anladım yani ds1302 gerek yok? Ben bir otamatik sulama cihazı için yapmaya çalışıyorum mesela hergün öğlen saatlerinde 10 dk boyunca bu motor sayesinde kapakcık açılacak ve su geçişi sağlanacak. Peki, bu kullanabildiğim step motor kodu bir siteden buldum ve çalışıyor.
Kod:
//Includes the Arduino Stepper Library
#include <Stepper.h>

// Defines the number of steps per rotation
const int stepsPerRevolution = 2038;

// Creates an instance of stepper class
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
    // Nothing to do (Stepper Library sets pins as outputs)
}

void loop() {
    // Rotate CW slowly
    myStepper.setSpeed(100);
    myStepper.step(stepsPerRevolution);
    delay(1000);
   
    // Rotate CCW quickly
    myStepper.setSpeed(700);
    myStepper.step(-stepsPerRevolution);
    delay(1000);
}
buradaki delay komutu gibimi bu millis. Ben delayı oynadığımdada zaman değişiyordu mesela millis komutunu burada nereye koyabilirim.
 
Moderatör tarafında düzenlendi:

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
468
Puanları
58
Millis() fonksiyonu arduino açıldığı andan itibaren geçen zamanı ms olarak söyler. Yani eğer arduinoyu öğlen 12 de çalıştırdıysan
C++:
if(millis()=(24*60*60*1000))
ifadesiyle 24 saat sonra tekrar motoru çalıştırabilirsin. Millis() 64 bit olduğu için 50 gün civarı başa döner, tabi dikkat edilmesi gereken şey elektrik gidip gelirse başa dönecektir. Eğer tam bağımsız olmasını istiyorsan ds1302 gibi bir modül bağlaman şart.
 

Yeni mesajlar

Forum istatistikleri

Konular
116,830
Mesajlar
822,763
Kullanıcılar
425,838
Son üye
byguslu

Yeni konular

Üst