Sensör ve Switch Kontrollü Timer
  • Selamün Aleyküm Arkadaşlar,
    Sorun(m) şu; Depoda dalgıç pompası var ve çalışınca 3 saniye boyunca röle çektirmesini istiyorum, bunun için Dalgıç pompasına titreşim sensörü taktım, en pratiği bu, yoksa şamandra ile uğraşmak zor, bu sayede sensör hareket algılayınca Arduino ya sinyal yollayacak ve çıkıştaki 1. röle 3 saniye boyunca çektirilecek, bir de limit switch bağlı olacak o da basıldığı an bir kez 2. röleyi çektirip bırakacak.
    Yardımcı olabilirseniz mutlu olurum,

    Saygılarımla...
  • sensörün adını yazarsanız daha rahat yardımcı olunur
  • dijital çıkışlı titreşim ve eğim sensörü.
    yine bundan farklı olarak sadece titreşim sensörü de mevcut.
  • const
    int swPin = A0; //Switch Girişi
    int rlyPin = 13; //Tetik Röle Çıkış Pini
    int stpPin = 12; //Stop Röle Çıkışı
    int sensPin = 7; //Sensör Dijital Girişi

    void setup() {
    pinMode(rlyPin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);
    }

    void loop() {
    // Sensör Okuma:
    digitalRead(sensPin);
    analogWrite = (rlyPin, HIGH);
    delay(10);
    analogWrite = (rlyPin, LOW);
    delay(300);
    analogWrite(stpPin, HIGH);
    delay(10);
    analogWrite(stpPin, LOW);
    }

    void loop() {
    // Switch Okuma:
    analogRead(swPin);
    analogWrite(stpPin, HIGH);
    delay(10);
    analogWrite(stpPin, LOW);
    }

  • acemilikten bu kadarını yazdım, ama hatalar mevcut, eksik/yanlış nerede inceler misiniz?

    saygılar.
  • verdiği ilk hata ise ;

    exit status 1
    assignment of function 'void analogWrite(uint8_t, int)'
  • son hali ama çözemedim, bir void loop altına ikisini de yazarsam yürür mü?


    const int swPin = A0; //Switch Girişi
    const int rly1Pin = 9; //Tetik Röle Çıkış Pini
    const int stpPin = 10; //Stop Röle Çıkışı
    const int sensPin = 7; //Sensör Dijital Girişi

    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);


    }

    void loop() {
    // Sensör Okuma:
    digitalRead(sensPin);
    analogWrite = (rly1Pin, HIGH); //burada sürekli hata veriyor, bu satırı silince derliyor.
    delay(10);
    delay(300);
    analogWrite(stpPin, HIGH);
    delay(10);

    // Switch Okuma:
    analogRead(swPin);
    analogWrite(stpPin, HIGH);
    delay(10);
    analogWrite(stpPin, LOW);
    }
  • eşittir koymuşum ;( ama son haline bakınca sistem çalışır mı, düzenleme gerekiyorsa lütfen inceleyiniz...



    const int swPin = A0; //Switch Girişi
    const int rly1Pin = 9; //Tetik Röle Çıkış Pini
    const int stpPin = 10; //Stop Röle Çıkışı
    const int sensPin = 7; //Sensör Dijital Girişi

    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);


    }

    void loop() {
    // Sensör Okuma:
    digitalRead(sensPin);
    analogWrite(rly1Pin, HIGH);
    delay(10);
    delay(300);
    analogWrite(stpPin, HIGH);
    delay(10);

    // Switch Okuma:
    analogRead(swPin);
    analogWrite(stpPin, HIGH);
    delay(10);
    analogWrite(stpPin, LOW);
    }
  • en son zirvede bıraktım:) yardım lütfen, Hatalar giderildi ama istediğim gibi çalışmıyor.


    const
    int swPin = A0; //Switch Girişi
    int rly1Pin = 12; //Tetik Röle Çıkış Pini
    int stpPin = 13; //Stop Röle Çıkışı
    int sensPin = 7; //Sensör Dijital Girişi
    int swDurumu = 0;
    int sensDurumu = 0;


    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);
    sensDurumu = digitalRead(sensPin);
    swDurumu = analogRead(swPin);

    }

    void loop() {



    // Sensör Okuma:
    if(sensDurumu = 1){
    analogWrite(rly1Pin, HIGH);
    delay(100);
    analogWrite(rly1Pin, LOW);
    delay(3000);
    analogWrite(stpPin, HIGH);
    delay(100);
    analogWrite(stpPin, LOW);
    }
    else{
    }

    // Switch Okuma:
    if(swDurumu = 1){
    analogWrite(stpPin, HIGH);
    delay(100);
    analogWrite(stpPin, LOW);
    }
    else{
    }

    }
  • Öncelikle, tek tek bir kontrol etmen gerek. Yani sadece titreşim sensörünü okuyabiliyor musun ? Titreşim geldiğinde bir led filan yaktır böylece titreşim OK deriz.
    Daha sonra sadece röleyi çektirebiliyor musun ? bir buton ile röle çektir bıraktır.

    Eğer bunlar OK ise yani donanımsal olarak bir problem yok ise olay basit.
  • İkinci sorum ise titreşim sensörü bir titreşim algıladığında 1 mi geliyor 0 mı geliyor yada analog bir değer mi geliyor ?

    rly1pin çektirmek için bağladığın pini 1 e çekince mi röle çekiyor 0 a çekince mi ?
    stppin bağladığın pini 1 e çekincemi röle duruyor 0 a çekince mi ?

    analogWrite(stpPin, HIGH);
    delay(100);
    analogWrite(stpPin, LOW);

    yapmışsın bu bir pulse. röleyi çektirmek veya durdurmak için pulse mı vermen gerekiyor ? Yoksa sadece HIGH veya LOW yeterli mi
  • Son olarakta,
    Normal komponentlere göre bir örnek kod yazdım,
    Normal komponent;
    Titreşim sensörü titreşim algılayınca "1" verecek,
    Limit switch algılayınca "1" verecek,
    Röleyi kontrol etmek için 2 pine gerek yok 1 pin yeterli ( rly1Pin )
    rly1Pin 1 oldugunda röle çeker,
    rly1Pin 0 oldugunda röle çekmeyi bırakır. Eğer sistemin böyle ise aşağıdaki kodu bir dene



    #define swPin 14 //Switch Girişi
    #define rly1Pin 12 //Tetik Röle Çıkış Pini
    #define stpPin 13 //Stop Röle Çıkışı
    #define sensPin 7 //Sensör Dijital Girişi
    int swDurumu,sensDurumu ;

    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);
    }

    void loop()
    {
    sensDurumu = digitalRead(sensPin);
    swDurumu = digitalRead(swPin);

    // Sensör Okuma:
    if ( sensDurumu )
    {
    digitalWrite(rly1Pin, HIGH);
    for (int i = 0; i <= 300; i++)<br /> {
    delay(10);
    // Switch Okuma:
    if (swDurumu)
    {
    digitalWrite(rly1Pin, LOW);
    }
    }
    digitalWrite(rly1Pin, LOW);
    }
    }
  • for (.....) yazımından sonra siteden kaynaklanan bir html komut ekleniyor benle alakası yok onu sil. (*<*b*r*>*) bunu sileceksin
  • değerli kardeşim, öncelikle ilgin için teşekkürler.
    kısaca iş yerinin altında depo var, su taşma vs ye karşı aşağıya dalgıç pompa kurduk,
    şamandra ile uğraşamıyoruz onun yerine titreşim sensörü taktık,
    sistem titreşim algılayınca (içeri fare ve böcük girmesin diye yaptığımız özel mekanizmalı) elektronik kapağı açacak,
    tabi kapağı açması için rly1Pin i yani açma rölesini çekecek ve hemen bırakacak 3-4 saniye sonra da stop rölesini çekecek ve hemen bırakacak.
    en son manual olarak kapakları kapattığımız kapak altına bir limit switch kurduk, kapak switche değince tekrar stop rölesini çekip hemen bırakacak,

    saygılar.
  • analogWrite(stpPin, HIGH);
    delay(100);
    analogWrite(stpPin, LOW); bu ise manual olarak kapakları kapattığımız kapak altına bir limit switch kurduk, kapak switche değince tekrar stop rölesini çekip hemen bırakacak,

    yani HIGH ve LOW olacak.
  • üstadım bir de kapakta bağlı olan sistem kumandalı(kepenk açma-kapatma sürücü) devre ve maalesef start(rlyPin1) ve stop(stpPin) manual yapılmalı, o yüzden önce açma tetiklenecek ve hemen bırakılacak ve ardından(3-4 sn.) stop tetiklenece ve bırakılacak.

    saygılar.
  • Hım şimdi biraz daha anlaşılır oldu. yani 2 adet röle var birisi açmak için diğeri kapatmak durdurmak için.

    O zaman şöyle revize edelim kodu
    Not: eger (*<*b*r*>*) görürsen sil


    #define swPin 14 //Switch Girişi
    #define rly1Pin 12 //Tetik Röle Çıkış Pini
    #define stpPin 13 //Stop Röle Çıkışı
    #define sensPin 7 //Sensör Dijital Girişi
    int swDurumu,sensDurumu ;

    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);
    }

    void loop()
    {
    sensDurumu = digitalRead(sensPin);
    swDurumu = digitalRead(swPin);

    // Sensör Okuma:
    if ( sensDurumu )
    {
    digitalWrite(rly1Pin, HIGH); // titresim gelince acma rölesi cekip bırakacak kapak acılacak
    delay(100);
    digitalWrite(rly1Pin, HIGH);

    for (int i = 0; i <= 300; i++)<br /> {
    delay(10);
    // Switch Okuma:
    if (swDurumu)
    {
    digitalWrite(stpPin , HIGH); // 3saniye dolduktan sonra kapatma rölesi cekip bırakıcak
    delay(100);
    digitalWrite(stpPin , LOW);
    }
    }
    digitalWrite(stpPin , HIGH); // limit switch basıldıgında kapatma rölesi cekip bırakacak
    delay(100);
    digitalWrite(stpPin , LOW);
    }
    }
  • Eyvallah aziz kardeşim, çok makbule geçti, emeğine - ekmeğine sağlık :D
    deneyeceğim inşaAllah,
    bu arada

    // Sensör Okuma:
    if ( sensDurumu )
    {
    digitalWrite(rly1Pin, HIGH); // titresim gelince acma rölesi cekip bırakacak kapak acılacak
    delay(100);
    digitalWrite(rly1Pin, HIGH);

    ikinci digitalWrite kısmında LOW olması gerekiyor mu, yoksa röle takılı kalır sanırım,


    saygılarımla. Hayırlı Ramazanlar.
  • Aynen öyle :) orasını kaçırmışım. Low olacak
  • hocam Allah razı olsun, bir sorum daha var, Arduino Uno R3 kullanıyorum, 13 pin mevcut son iki pin ise GND ve AREF, dolayısı ile pin 11 e swPin i aplike ettim, sanırım AREF yada GND ye bağlanmıyor değil mi, Saygılar.
  • bir de mesela motor çalışırken sürekli titrediği için sürekli tetikliyor röleleri, tek sefer tetiklemesini sağlayabilir miyiz, sadece limit switch sürekli çalışır.
  • bir de mesela motor çalışırken sürekli titrediği için sürekli tetikliyor röleleri, tek sefer tetiklemesini sağlayabilir miyiz, sadece limit switch sürekli çalışır.
  • #define swPin 14 //Switch Girişi
    #define rly1Pin 12 //Tetik Röle Çıkış Pini
    #define stpPin 13 //Stop Röle Çıkışı
    #define sensPin 7 //Sensör Dijital Girişi
    int swDurumu,sensDurumu ;

    void setup() {
    pinMode(rly1Pin, OUTPUT);
    pinMode(stpPin, OUTPUT);
    pinMode(sensPin, INPUT);
    pinMode(swPin, INPUT);
    }
    int motordurmabit=1;

    void loop()
    {
    sensDurumu = digitalRead(sensPin);
    swDurumu = digitalRead(swPin);

    // Sensör Okuma:
    if ( sensDurumu && motordurmabit )//sensorden data gelirse ve aynı zamanda motor duruyor ise motoru calıstır
    {
    motordurmabit=0;
    digitalWrite(rly1Pin, HIGH); // titresim gelince acma rölesi cekip bırakacak kapak acılacak
    delay(100);
    digitalWrite(rly1Pin, LOW);

    for (int i = 0; i <= 300; i++)<br /> {
    delay(10);
    // Switch Okuma:
    if (swDurumu)
    {
    digitalWrite(stpPin , HIGH); // 3saniye dolduktan sonra kapatma rölesi cekip bırakıcak
    delay(100);
    digitalWrite(stpPin , LOW);
    delay(1000); //kapatma rolesı cektıkten sonra 1 sn bekle
    motordurmabit=1; //motorun durdugunu belirten biti aktif et
    }
    }
    digitalWrite(stpPin , HIGH); // limit switch basıldıgında kapatma rölesi cekip bırakacak
    delay(100);
    digitalWrite(stpPin , LOW);
    delay(1000);//kapatma rolesı cektıkten sonra 1 sn bekle
    motordurmabit=1;//motorun durdugunu belirten biti aktif et
    }
    }
  • Bu kod ile titreşim geldiğinde artık titreşim algılamayı kapatır, motor durduktan 1 sn sonra titreşim algılamayı açar. Böylece senin 3 saniye içerisinde pompa titrediği için tekrar sinyal almak yerine, 3 saniye sonunda motoru durdurur ve 1 sn sonra sensörü aktif eder.
  • eyvallah aziz dostum, emeğinize sağlık.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.