INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Durchflussmesser/Puls
12.11.2020, 01:36
Beitrag #1
Durchflussmesser/Puls
Hallo, ich brauchte mal Hilfe bei einem Sketch für einen Durchflussmesser.
In meiner Cocktailmaschine (im Bau) drücke ich Cola mit Druck durch ein Magnetventil, dann durch einen Duchflussmesser.
Der UNO zählt dabei die Impulse vom Duchflussmesser. Pin 8 (Magnetventil), Pin 9 (Durchflussmesser Plus) und Pin 10 (Start CNC Maschine) sind beim Einschalten HIGH.
Bei 200 Pulsen schalten die Pins auf Low. Jetzt soll nach z.B.9 Sekunden der Zähler auf null gestellt werden.
Das klappt auch alles. Aber leider nicht immer. Wenn die Cola langsam läuft klappt es nicht immer. Dann schaltet der Zähler zu früh auf Null.
Bestimmt hat da jemand eine Idee. Danke

Durchflussmesser:
https://media.digikey.com/pdf/Data%20She...16_Web.pdf



Code:
const int buttonPin = 2;
const int Ventil8 = 8;
const int Messer9 = 9;
const int Start_CNC10 = 10;
          
unsigned long PulsAuf0;  //Pause


// the number of the pushbutton pin
boolean buttonState, oldButtonState;
unsigned long anzeigeMillis, aktMillis;
const int anzeigeZeit = 10;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  buttonState = digitalRead(buttonPin);
  oldButtonState = buttonState;

             pinMode(Ventil8, OUTPUT);
             pinMode(Messer9, OUTPUT);
             pinMode(Start_CNC10, OUTPUT);
                                                                  
          PulsAuf0 = millis();//Pause
                                                  
  
}

void loop(){
  static int Puls;
  aktMillis = millis();
  buttonState = digitalRead(buttonPin);

                    if (Puls < 200)
            digitalWrite(Ventil8, HIGH);
             if (Puls >= 200)
            digitalWrite(Ventil8, LOW);
                                                
           if (Puls < 200)
            digitalWrite(Messer9, HIGH);  
            if (Puls >= 200)
            digitalWrite(Messer9, LOW);  

            if (Puls < 200)
            digitalWrite(Start_CNC10, HIGH);  
            if (Puls >= 200)
            digitalWrite(Start_CNC10, LOW);  

if (Puls >= 200) {            
              // Pause
             if ((millis() - PulsAuf0) >= 9000){
             Puls = 0;
             PulsAuf0 = millis();                        
                                                    
  }
}      

  if ( buttonState && !oldButtonState ){
    //delay(10); // Entprellen
    Puls++;

}  

  oldButtonState = buttonState;
  if (aktMillis - anzeigeMillis >= anzeigeZeit) {
    anzeigeMillis = aktMillis;
    Serial.print("Puls: ");
    Serial.println(Puls);
  
   }  
  }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.11.2020, 00:25 (Dieser Beitrag wurde zuletzt bearbeitet: 13.11.2020 00:30 von GuaAck.)
Beitrag #2
RE: Durchflussmesser/Puls
Hallo,

formatiere Deinen Code (Tools/Formatieren o. ä.).

Unklar ist mir, wo Du "Puls" vom Durchflussmesser einliest.

Ansonsten folgende Vorschläge:
Code:
if (Puls < 200)
...
if (Puls >= 200)
durch
Code:
if (Puls < 200)
...
else
ersetzen.

millis() besser nur einmalig in der Loop aufrufen, ansonsten kannst Du ja verschiedene Werte erhalten.

Gruß
GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.11.2020, 21:24
Beitrag #3
RE: Durchflussmesser/Puls
Hallo. Danke für die Antwort.
Ich habe den Code if/ else umgeändert und das eine millis() rausgestrichen.
Das 2. millis() war um die Puls im Monitor anzuzeigen.
Habe den Code aus dem Web und nur die Pins um die Ausgänge zu steuern und die millis() für die Verzögerung eingebaut.
Der Puls wird an Pin 2 eingelesen.
Jetzt macht der Code jedenfals das was er soll.
Gruß
Günter

Code:
const int buttonPin = 2; //Durchflussmesser einlesen
const int ledPin8 = 8;
const int ledPin9 = 9;
unsigned long PulsAuf0;  // Einschaltverzögerung

boolean buttonState, oldButtonState;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);

  buttonState = digitalRead(buttonPin);
  oldButtonState = buttonState;

  pinMode(ledPin8, OUTPUT); //Pin als Ausgang Bestimmung
  pinMode(ledPin9, OUTPUT); //Pin als Ausgang Bestimmung

  PulsAuf0 = millis();// Einschaltverzögerung
}

void loop() {
  static int Puls;

  buttonState = digitalRead(buttonPin);

  if (Puls < 40)
    digitalWrite(ledPin8, LOW);
  else
    digitalWrite(ledPin8, HIGH);

  if (Puls < 40)
    digitalWrite(ledPin9, HIGH);
  else
    digitalWrite(ledPin9, LOW);

  if (Puls >= 40) {
    // Einschaltverzögerung
    if ((millis() - PulsAuf0) >= 9000) {
      Puls = 0;
      PulsAuf0 = millis();

    }
  }


  if ( buttonState && !oldButtonState ) {

    Puls++;
  }
  oldButtonState = buttonState;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Monostabile Kippstufe mit konstantem Puls/Pausen Verhältnis Alex1328 16 2.104 12.12.2019 15:45
Letzter Beitrag: Alex1328
  Schrittmotor mit Puls/Richtung Steuern Günni 6 4.167 19.01.2018 10:30
Letzter Beitrag: Tommy56
  Arduino Puls Sensor zum laufen bringen damaris 0 3.265 10.07.2014 20:11
Letzter Beitrag: damaris

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste