Sıvı dozajlama ünitesi - Liquid Flowmeter - Button kontrolü ise belirli miktar sıvıyı vermek.
  • Merhaba, forumları genelde okurum pek yazışmam, artık okumak yetmez oldu. İyice arduinoyla haşır neşir oldum. Umarım doğru yere yazıyorumdur. Ufak bir proje yapıyorum iş yerim için. 4 buton var. Her biri sırasıyla 100,75,50,25 ml sıvı dozajlamak için oluşturuldu. Elektrik tesisatı ve kurulum ile ilgili bir problem yaşamıyorum. Devrede selenoid vana, pompa , akışmetre mevcut. Elimde yabancı kaynaklardan akış ölçme kodlarıda mevcut fakat bu kodu butona düzgün biçimde bağlayamıyorum. Tek istediğim örn. 100ml lik butona basınca pompa ve selenoid açsın ve su akmaya başlasın. Akış metre 100 ml okuduğu anda selenoid ve pompa kapansın. Aynı şekilde diğer 3 farklı ölçüyüde yapabilmek.
  • Elimde şu kodlar mevcut ;

    int flowPin = 2; //This is the input pin on the Arduino
    int selenoidPin = 11;
    int buttonPin1 = 3;
    int buttonPin2 = 4;


    int buttonState = 0; // variable for reading the pushbutton status
    int buttonState1 = 0;
    int buttonState2 = 0;
    int buttonState3 = 0;
    int buttonState4 = 0;
    int buttonState5 = 0;

    int selenoidState = 0;



    double flowRate; //This is the value we intend to calculate.
    volatile int count; //This integer needs to be set as volatile to ensure it updates correctly during the interrupt process.

    void setup() {


    // put your setup code here, to run once:
    pinMode(flowPin, INPUT); //Sets the pin as an input
    pinMode(buttonPin1, INPUT);
    pinMode(buttonPin2, INPUT);
    pinMode(selenoidPin, OUTPUT);

    attachInterrupt(0, Flow, RISING); //Configures interrupt 0 (pin 2 on the Arduino Uno) to run the function "Flow"
    Serial.begin(9600); //Start Serial
    }
    void loop() {

    //digitalWrite(selenoidPin, LOW);

    if (buttonState1 == HIGH)
    {
    SetSelenoidValve();
    }

    // put your main code here, to run repeatedly:
    count = 0; // Reset the counter so we start counting from 0 again
    interrupts(); //Enables interrupts on the Arduino
    delay (1000); //Wait 1 second
    noInterrupts(); //Disable the interrupts on the Arduino

    //Start the math
    flowRate = (count * 7); //Take counted pulses in the last second and multiply by 2.25mL
    flowRate = flowRate * 60; //Convert seconds to minutes, giving you mL / Minute
    flowRate = flowRate / 1000; //Convert mL to Liters, giving you Liters / Minute

    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    // buttonState3 = digitalRead(buttonPin3);
    // buttonState4 = digitalRead(buttonPin4);
    // buttonState5 = digitalRead(buttonPin5);
    selenoidState = digitalRead(selenoidPin);

    Serial.println(flowRate); //Print the variable flowRate to Serial


    }

    void Flow()
    {
    count++; //Every time this function is called, increment "count" by 1
    }



    void SetSelenoidValve()
    {
    digitalWrite(selenoidPin, HIGH);
    }




    if (buttonState1 == HIGH)
    {
    digitalWrite(selenoidPin, LOW);
    }
  • arduino 2 nolu pin i ney kumanda ediyor acaba,
    akış okumasını yapabilmek için o pini kullanıyor program.
  • 2 numarada su akış ölçer mevcut. Kumanda eden bir buton mevcut değil
  • akış olçerın adı sanı datasheetı varmı
  • EGO A7- 5Q Marka fakat nette datasheetini bulamadım. Özellikleri aşağıdaki gibidir;

    Sensor Type: Hall effect
    Working Voltage: 5 to 18V DC (min tested working voltage 4.5V)
    Max current draw: 15mA @ 5V
    Output Type: 5V TTL
    Working Flow Rate: 1 to 30 Liters/Minute
    Working Temperature range: -25 to +80℃
    Working Humidity Range: 35%-80% RH
    Accuracy: ±10%
    Maximum water pressure: 2.0 MPa
    Output duty cycle: 50% +-10%
    Output rise time: 0.04us
    Output fall time: 0.18us
    Flow rate pulse characteristics: Frequency (Hz) = 7.5 * Flow rate (L/min)
    Pulses per Liter: 450
    Durability: minimum 300,000 cycles
    Cable length: 15cm
    1/2" nominal pipe connections, 0.78" outer diameter, 1/2" of thread
    Size: 2.5" x 1.4" x 1.4"
    Connection details:

    Red wire : +5V
    Black wire : GND
    Yellow wire : PWM output.
  • üstat şimdi şu şekilde yaklaşmas umarım yanlış anlaşılmam,tek derdim yardımcı olmak ,bilmediğim varsa onu öğrenmek.
    öncelikle ;
    yazdığın sensörün kablo larından anladığım pwm çıkış veren bir sensör,ve bunun arduino üzerinde belirli bir yerebağlanması gerektiğini düşünmekteyim. pwn uçları veya analog girişler gibi,
    2 nolu pin kullandığın arduino anaboard una göre özelliği değişebilmektedir.
    ve ayrıca programda geçen "attachInterrupt(0, Flow, RISING); " kodundaki "0" 2 nolu pini temsil etnektedir. buda kesmeyi başlatıcak olan pindir.

    bu devreyi arduino mega ana board üzerinde denemeni tavsiye ederim bu baktığım özelliklerden sonra.

    bir diğer konu,

    ölçülen değer sadece serial monitöre yazdırılıyor anladığım kadarıyla. flow başladığında sadece count devreye giriyor.
    serial print teki "flow rate "değerini kullanarak istediğiniz işlemleri yaptıra bilirsiniz anladığım kadarıyla.





  • Bende yeni öğreniyorum hocam. Dün tüm kodların ne işe yaradığını öğrendim. Dediğin gibi flow rate ile bir şeyler yapmaya çalıştım. Butona basıldığında While döngüsüne sokup değer 100 ml olana kadar devam et demeye çalıştım. Ama bu kodlar döngülük değil bence içerisindeki attachinterrupt sürekli saymayı sağlıyor. Bana istediğim değeri sayıp sıfırlasa yetecek diye düşünüyorum. Yakında bişeyler çıkacak gibi. Bu arada sensör için uno da 2. Pini kullanıyorum.
  • Bu ürün flow rate yani akış hızı. ihtiyacın olan flow meter..
    akışı sayacağına (100 ml kücük bir değer) akışı kontrol edebilirsin..
    peristatik pompalara bir gözat derim.
    yani demek istediğim akanı sayacağına, belli miktarda akıt..
    örneğin peristatik pompanın motor miline bir encoder tak ve gelen her pals icin kalibrasyon çarpanıyla hesap yaptır, motora dur de gibi gibi
  • msg dediğini anladım teşekkürler ama encoder falan uğraşmaktansa bu kendi sayıyor işte buna kod yazabilsem devre tamam zaten. Peristatik pompa için saol :)
  • Kodu biraz daha değiştirdim; şimdide buton kontrolünde sıkıntı yaşıyorum. buton çalışmıyor.



    int sensorInterrupt = 0;
    int count = 0;

    int buton1 = 4;
    int buton2 = 3;
    int buton3 = 5;
    int buton4 = 6;
    int sensorPin = 2;
    unsigned int flowMilliLitres = 0;
    int selenoid = 11;

    volatile byte pulseCount =0;

    void setup() {
    Serial.begin(9600);

    pinMode(sensorPin, INPUT); //sensör giriş
    digitalWrite(sensorPin, HIGH);

    pinMode(3, INPUT); // buton
    pinMode(4, INPUT); // buton
    // pinMode(5, INPUT); // buton
    //pinMode(6, INPUT); // buton
    pinMode(11, OUTPUT); //SELENOİD



    }
    void loop() {


    pulseCount = 0;
    pulseCount = digitalRead(sensorPin);


    flowMilliLitres = pulseCount / 7,5;

    Serial.print("Flow rate: ");
    Serial.print(flowMilliLitres, DEC); // Print the integer part of the variable
    Serial.print("mL");
    Serial.print("\t");


    digitalRead(buton2);
    digitalWrite (11,HIGH);

    flowMilliLitres = 0;

    if(buton1 == HIGH)
    {
    pulseCount++;

    digitalWrite (selenoid,LOW);

    }
    }

  • dostum ,
    digitalRead(buton2);
    digitalWrite (11,HIGH);

    flowMilliLitres = 0;

    if(buton1 == HIGH)

    bunun açıklaması nedir? kod yazılımın yanlış butonun çalışmaması normal çünkü butona çalışmasını söylemiyorsun. aslında hiçbirşey söylemiyorsun. temel arduino giriş çıkış kontrol yazılımlarına bak.

    örnek;
    digitalRead(buton2); buton2 yi oku diyorsun . başka bir anlamı yok programda.

    digitalWrite (11,HIGH); void loop dönmeye başladığında 11 nolu pin çıkışını aktif eder devamlı.

    if(buton1 == HIGH) burda buton1 i tek başına kullanamazsın,analogread(buton1) olarak kullanman gerekmekte.
    gibi...gibi...
  • Butonları input pull up / pull down gibi bağlantı yaparsanız , parazitten önlemiş olursanız.Arduino üzerinde bulunan atmega328p de donanımsal olarak input pull up mevcut ilgili pini , setup kısmında
    pinMode(ilgili_pin,INPUT_PULLUP); tanımlayabilirsiniz.
    Bu durumda butona basılmamışsa , logic 1 bilgisi gelecektir , if kontrolü yaparken 0 ise basılmıştır diye kurgu yapmanız gerekmekte.
  • azizmesut hocam kodları anlayabiliyorum ama nereye yazacağımı tam kestiremiyorum. Örnekler üzerinden gidiyorum daha yararlı oluyor ama butonlarla ilgili örneklerde hiç analogread görmedim. zaten butona basıldığında arduinoya sinyal gitmiyor mu? dolayısıyla digitalread olması gerektiğini düşündüm. teşekkürler
  • Tekrar merhaba, hazır buton kodu koyarak sadece aç kapa yapmaya çalıştığımda açmak istediğim pin doğru tepki vermiyor. Direnç vs var. Bağladığım röle ters çalışıyor. LOW yazdığımda açıyor HIGH yazdığımda kapatıyor. VCC yazan kısıma 5V GND zaten GND bir taneside buton (INC gibi birşey yazıyor sanırım). Neden böyle olabilir?
  • buton la birlikte bağladığınız 10k direncin durumunu kontrol ediniz. vcc ye mi bağlı yoksa gnd yemi? çıkış da röleniz ters çalışıyor demişsiniz. digitalWrite(pin,LOW) yazzdığımızda bu pin çıkışını gnd ye çeker yani 0 volt, HIGH yazdığımızda vcc voltajı yani 5 volt, bu durumda sizin kullandığınız rölenin durumuna göre değişiklik göster bilir. arduino modül rölelerden kullanıyorsanız şayet yazdığınız durum normaldir. çünkü,
    modül sinyal olarak 0 volt istemektemektedir. ,5 volt verdiğinizde normal konumuna dönecektir.
  • Röleyi değiştirince problem düzeldi fakat arduino eğitimlerine yeniden başladım birşeyleri atlıyorum ama nedir çözemedim. 3- 5 sn yanan bir led kodu bulursam üzerinden gideğim onuda bulamıyorum. Teşekkürler
  • led pin high
    delay(5000)
    led pin low

    :P
  • Bende sürekli böyle yazdım ama nedense hiç olmadı.

    if
    led pin high
    else
    led pin low
    delay(5000)

    yazınca çalıştı. basıyorum çalışmaya başlayıp 5 sn snra kapanıyor. tüm kod mantığım çöktü:p mantığı nedir bunun?

Howdy, Stranger!

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

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