Flow sensor + Magneetklep

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

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 11 Mrt 2016, 21:32

Hoe krijg je de code op het forum btw zoals jullie ze plaatsen incl regelnummers..

Advertisement

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

Re: Flow sensor + Magneetklep

Berichtdoor nicoverduin » 12 Mrt 2016, 09:53

Je gebruikt nu code en /code tussen 4kante haken. Als je daar code2=cpp en /code2 gebruikt tussen 4kante haken krijg je die mooie listing
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 12 Mrt 2016, 14:44

Ok dit is beter inderdaad.

Ik heb inmiddels een "startButton" toegevoegd en dit werkt.
Ik heb een setpoint van een 0,5 liter, als ik op de start button druk dan gaat mijn klep open, totdat mijn flowmeter 0,5 liter meet, daarna sluit de klep weer.

Nu ben ik aan het stoeien om een resetbutton toe te voegen, in neem aan dat ik deze op regel 82 moet plaatsen? heb al het een en ander daar geprobeerd maar het werkt niet.

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
int setpointButton = 19; //Dit is de output pin voor de setpointbutton
int val = 0;
int old_val = 0;
int state = 0;

float setpoint;


void setup() {

lcd.begin(16, 2);

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

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


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

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

setpoint = 0.5;

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

lcd.setCursor(0, 0);
lcd.print("Setpoint:");
lcd.setCursor(11, 0);
lcd.print(setpoint);
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");

if (Liters > setpoint) { //Als de Liters meer dan het setpoint zijn dan sluit de solenoid klep
digitalWrite(Klep, LOW);
state = 0; //Zorgt ervoor dat de klep dicht blijft



}
}

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

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

Re: Flow sensor + Magneetklep

Berichtdoor nicoverduin » 12 Mrt 2016, 16:02

Ergens in je loop:
cpp code
If (digitalRead(resetbutton) == LOW) {
//
// doe wat je wilt doen
//

//
// wacht tot toets is lisgelaten
//
While(digitalRead(resetButton) != HIGH)){};
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 12 Mrt 2016, 19:00

Inderdaad, dat was hem, helemaal mooi zoals het nu werkt.

Nu moet ik gaan uitzoeken om het setpoint met een pushbutton te gaan veranderen, elke keer dat ik druk moet hij 0.1 omhoog. als ik hem vasthoudt dan moet hij blijven tellen.

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
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;

void setup() {

lcd.begin(16, 2);

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

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

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

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

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

lcd.setCursor(0, 0);
lcd.print("Setpoint:");
lcd.setCursor(11, 0);
lcd.print(setpoint);
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");

if (Liters > setpoint) { //Als de Liters meer dan het setpoint zijn dan sluit de solenoid klep
digitalWrite(Klep, LOW);
state = 0; //Zorgt ervoor dat de klep dicht blijft


if (digitalRead(resetButton) == HIGH) {
delay(10000);
Liters = 0.00;
flowRate = 0.00;
while ((digitalRead(resetButton) != LOW)) {};
}
}
}

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

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

Re: Flow sensor + Magneetklep

Berichtdoor nicoverduin » 12 Mrt 2016, 19:49

Hou je wel rekening dat die reset alleen werkt als er voldoende liters zijn. Op andere momenten gebeurt er niets.
Ik zou eerst mijn programma eens herzien. O.a. wat ik eerder heb aangegeven over herstructureren. Dat hele display stuk kan in een functie. Het tellen met de interrupt herzien waardoor je een meer recht-toe-recht-aan flow in je loop krijg. Nu is het een beetje een zooitje.... (gevolg van eerst bouwen en dan denken.... En tegenwoordig zijn er hele hordes die zo werken.... met alle gevolgen van dien).
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Flow sensor + Magneetklep

Berichtdoor DeDraak » 12 Mrt 2016, 20:54

Dat klopt, ik wil hem ook alleen resetten als ik voldoende vloeistof heb. Wel kan ik de klep dicht sturen als hij nog geen voldoende liters heeft.
Ik heb alles nu volgens mij wat overzichtelijker gemaakt, dat dat hele display in een functie kan wist ik niet. af en toe gooi jij er termen in die voor mij echt helemaal nieuw zijn :oops:
Onder het motto: "al doende leert men" probeer ik het me eigen te maken, ik ga er immers geen apparaten mee bouwen/produceren..

Ik heb nu ook een test gemaakt voor een in te stellen setpoint middels een pushbutton.
Wel moet ik zeggen dat de buttons wat traag werken, is daar een verklaring voor?

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); //Zet de pin als een Input
pinMode(resetButton, INPUT); //Zet de pin als een Input
pinMode(setpointButton, INPUT); //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(11, 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
delay(1000); //Wait 1 second
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 == HIGH) {
hits = hits + 1;
}
}
prevsetpointState = setpointState;

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


if (Liters > hits) {
digitalWrite(Klep, LOW);
state = 0;

if (digitalRead(resetButton) == HIGH) {
delay(10000);
Liters = 0.00;
flowRate = 0.00;
while ((digitalRead(resetButton) != LOW)) {};
}
}


}
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 » 13 Mrt 2016, 19:56

nee zo niet.
gebruik de tot als totaal teller.
ofwel klep gaat open na druk op knop, dan wordt ook tot =0 gemaakt.
in de loop (zonder delay) iets als if tot > (3000/2.25) klep,HIGH of LOW al hoe deze staat.
elke seconde even de lcd updaten (ofwel 1/seconde een functie doen met al die berekeningen en lcd commandos.
paul deelen
shooter@home.nl

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

Re: Flow sensor + Magneetklep

Berichtdoor shooter » 13 Mrt 2016, 20:00

sorry had niet alles gelezen, maar de basis is nog steeds niet goed.
je gaat pulsen missen en door de delay kom je niet uit met je liters
paul deelen
shooter@home.nl

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

Re: Flow sensor + Magneetklep

Berichtdoor nicoverduin » 13 Mrt 2016, 20:05

Ik had het al eerder tegen hem gezegd. Denk nog te ingewikkeld voor hem.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 41 gasten