Butona basıldığında Sensörler sayesinde motor ileri geri gidecek

removel066

Üye
Katılım
19 May 2021
Mesajlar
3
Puanları
1
Yaş
27
Selamın Aleyküm öncelikle;
Bu işlerde biraz acemiyim Yanlış anlamayın beni işin ehli birisi yardım ederse çok sevinirim


Şimdi arduinoda
Devrede kullanılacak olan elemanlar şunlar;
1 buton
4 proximity sensör npn && Switch olabilir
4 role
2 motor

Sorun şu butona basılmadan hiç bir sensör aktif olmuycak.
butona bastıktan sonra role 1 çekili iken motor ileri gidicek fakat sensörü aktif edince motor geri dönecek ve diğer sensör aktif olana kadar çalışcak ve sensöre gelincede durucak.
Motor durunca diğer motor aktif olup ileri yönde dönecek diğer motor gibi sensöre gelince geri dönüp diğer sensörde durucak yapmak istediğim bu
ama her butona basılınca çalışıcak sistem

Yardımcı olursanız çok sevinirim 1 haftadır uğraşıyorum

Kodlarım şunlar

Kod:
int kasileri = 19, kasgeri = 20;
int rkasileri = 18, rkasgeri = 21;
int start = 17;
int x = 0;
int y = 0;
int kasileridurum = 0, kasgeridurum = 0;
int rkasileridurum = 0, rkasgeridurum = 0;
int basla = 0;
void setup() {
  pinMode(kasileri, INPUT_PULLUP);
  pinMode(kasgeri, INPUT_PULLUP);
  pinMode(rkasileri, OUTPUT);
  pinMode(rkasgeri, OUTPUT);
  pinMode(start, INPUT);
}

void loop() {
  kasileridurum = digitalRead(kasileri);
  kasgeridurum = digitalRead(kasgeri);
  basla = digitalRead(start);
  if (basla == 1 && x == 0)
  {
    x = 1;
    if (kasileridurum == 1 && y == 0)
    {
      y = 1;
      if (rkasileridurum == 0)
      {
        rkasileridurum = 1;
      }
      else
      {
        rkasileridurum = 0;
      }
    }
    if (rkasileridurum == 1)
    {
      digitalWrite(rkasileri, 1);
    }
    else
    {
      digitalWrite(rkasileri, 0);
    }
    if (kasileridurum == 0 && y == 1)
    {
      y = 0;
    }
    delay(10);
  }
  if (basla == 0 && x == 1)
  {
    x = 0;
  }
  delay(10);

}
4role olması motorların yön değiştirmesi için
 
Sistemi mümkün olduğunca parçalara ayırın.
Buton algılamasını kesinleştirmek için;
Kod:
if(digitalRead(start))
{
    delay(50);
    if(digitalRead(start))
    {
         baslat = 1;
    }
    else
    {
         baslat = 0;
    }
}
şeklinde bir ekleme yapabilirsiniz.
Önce bir motoru çalıştırın. Sonra ikincisine
devam edin.
Bir de kodların yanına, altına, üstüne bol-bol
açıklama yazın.
Durma kısmında "basla" değişkenine "0" değeri
verirsiniz.
 
teşekkürler deneme yapacağım
 
Yapamadım Hocam rica etsem
5 buton 4 tane role devresi yapsan ama şu şekilde olucak
1 buton start push buton varya
4 butonda aynı sekilde push buton
4 butondan 1.si rolenin tekini çekip motoru ileri yönde sürecek
2.butona basılıp çekildiğinde geri yönde dönecek 1. butona dokununca durucak tekrardan.
2.butona dc motor tekrardan gelince 3.buton kendiliğinden aktif olucak
3.butona basılınca diğer motor için role çekilcek motoru ileri yönde sürücek
4. butona basılınca aynı şekilde geri gidip 3.butona basınca durucak
sistem bu yazamadım bir türlü roleler kendi kendine aktif olup kapanıyor sensörler çıkışı 1 önüne metal gelince çıkış 0 oluyor. NPN olduğu için

Ben sadece bu sensörlerin roleleri çekip bırakmasını istiyorum
ama yapamadım tıkanıp kalıyorum tek roleyi çektirebiliyorum ama bu sayıyı 4'e çıkartamadım
Rica Etsem yapabilirmisin hocam lütfen
 
Konu eskiymiş ama madem hortlamış basit bi kod yazalım gelecekte arayanların işine yarar. İşin sırrı bayrak atanarak motorun durumunu takip etmekten geçiyor. Buton yerine sensörler bağlanabilir.

C++:
#include <Arduino.h>
#define DURUYOR false
#define DONUYOR true
#define ILERI true
#define GERI false

const uint8_t baslat_buton = A0,ileri_buton = A1, geri_buton = A2;
const uint8_t motor_ileri = 2, motor_geri = 3;
bool motor_durum = DURUYOR;
bool motor_yon = ILERI;

void setup() {

  pinMode(baslat_buton,INPUT_PULLUP);
  pinMode(ileri_buton,INPUT_PULLUP);
  pinMode(geri_buton,INPUT_PULLUP);

  pinMode(motor_geri,OUTPUT);
  pinMode(motor_geri,OUTPUT);

}

void loop() {
  if(motor_durum == DURUYOR){
    digitalWrite(motor_ileri,LOW);
    digitalWrite(motor_geri,LOW);
    while(baslat_buton);
    motor_durum = DONUYOR;
  }
  else{
    if(!digitalRead(baslat_buton))
      motor_durum = DURUYOR;
    if(!digitalRead(ileri_buton))
      motor_yon = ILERI;
    if(!digitalRead(geri_buton))
      motor_yon = GERI;
    if(motor_yon == ILERI){
      digitalWrite(motor_ileri,HIGH);
      digitalWrite(motor_geri,LOW);
    }
    if(motor_yon == GERI){
      digitalWrite(motor_ileri,LOW);
      digitalWrite(motor_geri,HIGH);
    }  

  }
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…