Arduino + Sensörlü DC Motor Kontrolü (Sorular, Sorunlar)

VolStone

Üye
Katılım
15 May 2022
Mesajlar
4
Puanları
1
Yaş
43
Öncelikle herkese merhaba, bir projeyle ilgili bir kaç soru var aklimda, burada siz işi bilenlere bir sormak, fikrinizi görüşlerinizi almak istiyorum.
İki kayan bant ve bunları kontrol eden iki dc motor, arduino lazer sensörü (ldr'li) ve ürünlerin çıkış yapacağı bir adet katlanır kapıyı kontrol eden üçüncü bir dc motordan oluşan basit bir sisteme sahibim. (Eskizlerini mesajin hemen altına ekliyorum; bakıp, kontrol edebilirsiniz) merak ettiğim şey şu
20240314_162039.jpg

20240314_162259.jpg

ilk etapta:

1-) Sistemde kullandığım dc motorların matematiksel hesaplarla elde ettiğim uygun çalışma süreleri var; her üçüde sistemin beyni olarak onları kontrol edecek bir arduino uno r3'e bağlı. Mesela istediğim:
Aynı zamanda lazer sensörle de bağlantısı olan Birinci motor, arduinoya enerji verilir verilmez 5 sn çalışsin ve sonra dursun. Bundan sonra lazer önünden her urun geçişinde bunu algılayıp sadece 5sn çalışsin ve dursun. (Yani ilk caliştırılma haricinde sadece lazer sensör önünden her ürün geçişinde bunu ilk algıladiiğı an 5 sn çalışıp sonra duracak ve bir sonraki urunun lazer sensor onunden geçmesini bekleyecek)
İkinci motor arduinoya ilk enerji verilir verilmez çalısacak ve sistem dışardan kapatılana kadar yada arduino'nun enerjisi kesilene kadar çalışmaya devam edecek.
Üçüncü motorda yine arduino'ya enerji verilir verilmez sadece kapıyı yukarı kendine doğru açmak için 10 sn çalışacak ve duracak.

Sorum Üç adet motoru bu formatlarda arduinoya bağlayıp çalıştırabilirmiyim? Yani motor surucu kartı vb bağlamadan sadece uçlarına ulaşan enerjiyi arduino ile kontrol ederek? Kod bölümünde Kütüphane eklemek illa ki bu sistem için şart mı? Bir tanesine ait örnek kod yazarmısınız mesela motor 3 için?
Teşekkür ediyor ve yorumlarınız
 
arduino'ya enerji verilir verilmez
Böyle bir şey yapmayın, yani Arduino'yu kontrol etmek için enerji verilip kesmeyin, bunun yerine Arduino'yu kontrol sistemi olarak kullanın.

İstediğiniz kod bu şekilde olabilir

const int girisPin = 3; // Giriş pinini tanımlandı
const int cikisPin = 4; // Çıkış pinini tanımlandı
bool oncekiGirisDurum = LOW; // Giriş durumunu saklamak için değişken
bool cikisDurum = LOW; // Çıkış durumunu saklamak için değişken
unsigned long baslangicZamani = 0; // Zamanı takip etmek için değişken
const unsigned long tetiklemeSuresi = 10; // Tetikleme süresi (milisaniye cinsinden)
const unsigned long cikisSuresi = 10000; // Çıkış süresi (milisaniye cinsinden)

void setup() {
pinMode(girisPin, INPUT); // Giriş pinini giriş olarak ayarla
pinMode(cikisPin, OUTPUT); // Çıkış pinini çıkış olarak ayarla
}

void loop() {
// Giriş pininin durumunu oku
bool yeniGirisDurum = digitalRead(girisPin);

// Eğer giriş pininin durumu değiştiyse ve tetikleme süresi geçmişse
if (yeniGirisDurum != oncekiGirisDurum && millis() - baslangicZamani >= tetiklemeSuresi) {
// Giriş durumunu güncelle
oncekiGirisDurum = yeniGirisDurum;

// Eğer giriş aktifse
if (oncekiGirisDurum == HIGH) {
// Çıkışı aktif et
digitalWrite(cikisPin, HIGH);
cikisDurum = HIGH;
// Başlangıç zamanını kaydet
baslangicZamani = millis();
}
// Eğer giriş pasifse
else {
// Çıkışı kapat
digitalWrite(cikisPin, LOW);
cikisDurum = LOW;
}
}

// Eğer çıkış aktifse ve çıkış süresi geçmişse
if (cikisDurum == HIGH && millis() - baslangicZamani >= cikisSuresi) {
// Çıkışı kapat
digitalWrite(cikisPin, LOW);
cikisDurum = LOW;
}
}


Bu kod, giriş pininin belirli bir süre boyunca aktif olduğunda
(Yanlış tetiklenmeyi önlemek için, burada 10 milisaniye olarak belirlendi)
çıkışı 10 saniyeliğine aktif eder ve ardından çıkışı kapatır.

Umarım bu kod işinizi görür
 
Böyle bir şey yapmayın, yani Arduino'yu kontrol etmek için enerji verilip kesmeyin, bunun yerine Arduino'yu kontrol sistemi olarak kullanın.

İstediğiniz kod bu şekilde olabilir

const int girisPin = 3; // Giriş pinini tanımlandı
const int cikisPin = 4; // Çıkış pinini tanımlandı
bool oncekiGirisDurum = LOW; // Giriş durumunu saklamak için değişken
bool cikisDurum = LOW; // Çıkış durumunu saklamak için değişken
unsigned long baslangicZamani = 0; // Zamanı takip etmek için değişken
const unsigned long tetiklemeSuresi = 10; // Tetikleme süresi (milisaniye cinsinden)
const unsigned long cikisSuresi = 10000; // Çıkış süresi (milisaniye cinsinden)

void setup() {
pinMode(girisPin, INPUT); // Giriş pinini giriş olarak ayarla
pinMode(cikisPin, OUTPUT); // Çıkış pinini çıkış olarak ayarla
}

void loop() {
// Giriş pininin durumunu oku
bool yeniGirisDurum = digitalRead(girisPin);

// Eğer giriş pininin durumu değiştiyse ve tetikleme süresi geçmişse
if (yeniGirisDurum != oncekiGirisDurum && millis() - baslangicZamani >= tetiklemeSuresi) {
// Giriş durumunu güncelle
oncekiGirisDurum = yeniGirisDurum;

// Eğer giriş aktifse
if (oncekiGirisDurum == HIGH) {
// Çıkışı aktif et
digitalWrite(cikisPin, HIGH);
cikisDurum = HIGH;
// Başlangıç zamanını kaydet
baslangicZamani = millis();
}
// Eğer giriş pasifse
else {
// Çıkışı kapat
digitalWrite(cikisPin, LOW);
cikisDurum = LOW;
}
}

// Eğer çıkış aktifse ve çıkış süresi geçmişse
if (cikisDurum == HIGH && millis() - baslangicZamani >= cikisSuresi) {
// Çıkışı kapat
digitalWrite(cikisPin, LOW);
cikisDurum = LOW;
}
}


Bu kod, giriş pininin belirli bir süre boyunca aktif olduğunda
(Yanlış tetiklenmeyi önlemek için, burada 10 milisaniye olarak belirlendi)
çıkışı 10 saniyeliğine aktif eder ve ardından çıkışı kapatır.

Umarım bu kod işinizi görür
Çok teşekkür ediyorum. Kodlar faydalı olacaktır aslinda basit bir okul projesi bu ve bunun kodlarini yazmak, arduinoya atmak vb zor değil asil zor olan motorlarin ucuna takilacak uygun aparatlari temin etmek yine bunlarla uyumlu bantlari uygun yukseklikte tutacak standlar bulmak. Bu daha çok zorluyor ki tüm motor projelerinde böyledir diye düşünmekteyim.
Konuya dönersek, Şöyle bir şey öğrenmek iyi olacaktır, çok basit anlatacağım; mesela ben arduino uno'ya bağlı iki motorlu bir devre kuracağım diyelim. Arduino'dan iki pin belirlesem ve bu pinleri arduino'da kumanda devresindekilere benzer sekilde ( birinci motor sürekli olarak 3 sn çalış 5 sn dur, ikinci motor tek sefer için 5 sn çalış 7 sn dur gibi...) programlayıp belirli kurallara gore 5v gerilim çıkışi saglatarak hic motor kutuphanesi, motor surucu kartı vb kullanmadan motorları bunlara bağlayıp çalıştırabilir miyim, tipki led yakar gibi yoksa motor led gibi yanıp ışık vermeye mi başlar?

Cehaletimi mazur görünüz ;)
 

Yeni mesajlar

Forum istatistikleri

Konular
129,686
Mesajlar
929,004
Kullanıcılar
452,387
Son üye
fevzican

Yeni konular

Geri
Üst