Flow sensor + Magneetklep

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 247
Geregistreerd: 03 Okt 2015, 13:39

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 13 Mrt 2016, 20:52

Het is zeker nog te ingewikkeld Nico, ook dat had ik eerder aangegeven..

Ik ben het hele weekend al aan het knutselen maar ik kom niet verder, op het net heb ik een andere sketsch gevonden:
cpp code
byte sensorInterrupt = 0;
byte sensorPin = 2;

float calibrationFactor = 4.5;

volatile byte pulseCount;

float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long totalLitres;
unsigned long oldTime;

void setup() {

Serial.begin(38400);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");

pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0.0;
totalLitres = 0.0;
oldTime = 0;


}

void loop() {


if ((millis() - oldTime) > 1000) // Only process counters once per second
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
totalLitres = (totalMilliLitres / 1000);
unsigned int frac;

}

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

}
void pulseCounter()
{
// Increment the pulse counter
pulseCount++;
}



]


Is dit dan een betere?

Ik heb al allerlei codes klaar om samen te voegen maar daar gaat het juist mis.

Doel:

Ik wil middels 3 druknoppen ( Start, Reset, setpoint ) de installatie bedienen.
Door een 16x2 LCD wordt alles weergeven, verder heb ik dan een solenoid klep en een water flow sensor.
Met de setpoint knop wil ik per keer dat ik druk 100 m/Liter optellen totdat ik de gewenste setpoint heb.
Als ik op de startknop druk dan gaat mijn solenoid klep open totdat het setpoint bereikt is en dan sluit de klep weer, als ik nu op reset druk dan gaat de totaal liter teller weer op nul.

Ik hoop echt dat jullie mij kunnen helpen en ja ik ben een echte beginner..

Advertisement

Berichten: 247
Geregistreerd: 03 Okt 2015, 13:39

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 13 Mrt 2016, 20:55

De code op pagina 2 werkt op zich prima alleen zijn de buttons enorm traag geworden, voordat ik ze samenvoegde ging het prima maar daarna niet meer..

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Flow sensor + Magneetklep

Berichtdoor shooter » 14 Mrt 2016, 10:38

dat komt door de delay die er nog steeds in zit.
zie het als een paar processen naast elkaar en niet achter elkaar.
elke puls is 2.25 ml.
na 1 seconde en na 1 minuut of zelfs beide kijk je hoeveel pulsen er zijn geweest.
verder heb je nog een losse teller die het totaal doet.
bij elke puls doe je dus count++, en minuutcount++, en total++
in de loop kijk je alleen maar of je een grens hebt bereikt, of van een timer of van je total teller.
is dat zo dan ga je naar een functie toe om het af te handelen.
paul deelen
shooter@home.nl

Berichten: 247
Geregistreerd: 03 Okt 2015, 13:39

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 14 Mrt 2016, 19:43

Ok, het gaat nu beter!
Ik heb de delay eruit gehaald en er een count voor in de plaats gezet.
De Pushbutton's werken super snel en ook heb ik de reset aangepast dat hij gereset kan worden om eerder te resetten zoals Nico al aangaf.


cpp code
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int flowPin = 2; //This is the input pin on the Arduino
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.
double Liters = 0; // totaal telling doorstroming
int Klep = 16; //Dit is de output pin voor de solenoid klep
int startButton = 17; //Dit is de output pin voor de startbutton
int resetButton = 18; //Dit is de output pin voor de resetbutton
const int setpointButton = 19; //Dit is de output pin voor de setpointbutton
int val = 0;
int old_val = 0;
int state = 0;
float setpoint = 0.50;
int hits = 0;
int setpointState = 0;
int prevsetpointState = 0;

void setup() {

lcd.begin(16, 2);

pinMode(Klep, OUTPUT); //Zet de pin als een Output
pinMode(startButton, INPUT_PULLUP); //Zet de pin als een Input
pinMode(resetButton, INPUT_PULLUP); //Zet de pin als een Input
pinMode(setpointButton, INPUT_PULLUP); //Zet de pin als een Input
pinMode(flowPin, INPUT); //Zet de pin als een Input
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() {

lcd.setCursor(0, 0);
lcd.print("Setpoint:");
lcd.setCursor(12, 0);
lcd.print(hits);
lcd.setCursor(15, 0);
lcd.print("L");
lcd.setCursor(0, 1);
lcd.print(flowRate);
lcd.setCursor(5, 1);
lcd.print("L/min ");
lcd.setCursor(11, 1);
lcd.print(Liters);
lcd.setCursor(15, 1);
lcd.print("L");


count = 0; // Reset the counter so we start counting from 0 again
interrupts(); // Enables interrupts on the Arduino
count;
noInterrupts(); // Disable the interrupts on the Arduino

flowRate = (count * 2.25); // Take counted pulses in the last second and multiply by 2.25mL
Liters += (flowRate / 1000); // verhoog aantal liters met doorstroming na 1 seconden
flowRate = flowRate * 60; // Convert seconds to minutes, giving you mL / Minute
flowRate = flowRate / 1000; // Convert mL to Liters, giving you Liters / Minute


// SetpointButton //
setpointState = digitalRead(setpointButton);
if (setpointState != prevsetpointState) {
if (setpointState == LOW) {
hits = hits + 1;
}
}
prevsetpointState = setpointState;

// startButton //
val = digitalRead(startButton);
if ((val == LOW) && (old_val == HIGH)) {
state = 1 - state;
delay(1000);
}
old_val = val;
if (state == 1) {
digitalWrite (Klep, HIGH);
}
else {
digitalWrite (Klep, LOW);
}

//Setpoint-Klepdicht///
if (Liters > hits) {
digitalWrite(Klep, LOW);
state = 0;
}
if (digitalRead(resetButton) == LOW) {
delay(1000);
Liters = 0.00;
flowRate = 0.00;
while ((digitalRead(resetButton) != HIGH)) {};

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

}

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Flow sensor + Magneetklep

Berichtdoor shooter » 14 Mrt 2016, 21:21

gebruik verschillende variabelen voor verschillende waarden, ik doel op flowrate die wordt voor drie waarden gebruikt en dat is lastig.
paul deelen
shooter@home.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Flow sensor + Magneetklep

Berichtdoor shooter » 14 Mrt 2016, 21:24

en nog steeds haal je de totale hoeveelheid uit de count gebruik aub gewoon bij flow() nog een variabele die pas naar nul gaat als de klep dicht is en je op de reset drukt.
oops, daar hoort ergens een komma bij, sorry nico.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Flow sensor + Magneetklep

Berichtdoor nicoverduin » 14 Mrt 2016, 23:08

shooter schreef:en nog steeds haal je de totale hoeveelheid uit de count gebruik aub gewoon bij flow() nog een variabele die pas naar nul gaat als de klep dicht is en je op de reset drukt.
oops, daar hoort ergens een komma bij, sorry nico.
Tja ik zal wel een ouwe lul zijn dat ik nog probeer iets van de Nederlandse taal overeind te houden :twisted:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 36 gasten