PDA

Επιστροφή στο Forum : Ελεγχος ανοιγματος ηλεκτροβανας



genaris
28-04-11, 20:37
θελω να ελεγχω 2 ηλεκτροβανες, 1 που θα ελεγχει το ζεστο νερο και μια που θα ελεγχει το κρυο ωστε να εχω νερο συγκεκριμενης θερμοκρασιας. Ξερει κανεις κατι για αυτο..?

genaris
28-04-11, 23:44
τπτ....;;

rf radio takis
28-04-11, 23:52
Για ποιά χρήση είναι?

genaris
29-04-11, 00:06
χριαζομαι νερο συγκεκριμενης θερμοκρασιας κ σκεφτικα να βαλω δυο ηλεκτροβανες που μεσω καποιου μικροεπεξεργαστη(..??) θα ανοιγουν οσο χρειαζεται η καθε μια (μια για κρυο νερο κ μια για ζεστο) ωστε να εχω το νερο της θερμοκρασιας που θελω.. εχεις καμια ιδεα..

Ηλιας Α
29-04-11, 00:18
χριαζομαι νερο συγκεκριμενης θερμοκρασιας κ σκεφτικα να βαλω δυο ηλεκτροβανες που μεσω καποιου μικροεπεξεργαστη(..??) θα ανοιγουν οσο χρειαζεται η καθε μια (μια για κρυο νερο κ μια για ζεστο) ωστε να εχω το νερο της θερμοκρασιας που θελω.. εχεις καμια ιδεα..

Για κοίτα εδώ
http://www.hvac-controls.gr/?pid=3&productId=172
τρίοδος βάνα με προσαρμογή κινητήρα πιστεύω να σου κάνει

JOUN
29-04-11, 00:21
Υπαρχει ετοιμη βρυση που ρυθμιζεις την θερμοκρασια νερου.Ψαξε για θερμομηκτικη.

genaris
29-04-11, 00:53
παιδια σας ευχαριστω... οτι αλλο δεκτο περι προγραματισμου και ελεγχου

rf radio takis
29-04-11, 00:57
Είναι μεγάλος ο όγκος του προς έλεγχο νερού? Εξήγισε σε παρακαλώ συνοπτικά την λειτουργεία που θες.

genaris
29-04-11, 08:54
οχι μια βρυση ειναι απλη στην οποια θελω να ελεγχω εγω τη θερμοκρασια με ενα θερμοστατη, να ρυθμιζω για παραδειγμα το θερμοστατη στους 20C και μεσω ενος θερμομετρου που θα ειναι μεσα στη σωληνα υδροδοτησης (μαλλον θα κανω καμια τρυπα, θα δω αναλογα με τι θερμομετρο θα βρω) ο μικροεπεξεργαστης (δεν ξερω αν κανει θα δω πως θα το κανω αυτο ψαχνω) θα ελεγχει τις 2 ηλεκτροβανες που θα ειναι συνδεδεμενες σε δυο δεξαμενες αντιστοιχα ζεστου-κρυου και θα ρυθμιζουν ποσο θα παιρνουν απο την καθε δεξαμενη ωστε να εχω εγω τη θερμοκρασια που θελω στη βρυση..

FILMAN
29-04-11, 09:30
Έχεις υπόψη σου ότι οι συνηθισμένες βάνες θέλουν κανα λεπτό ώστε να ανοίξουν ή να κλείσουν τελείως;

daman
29-04-11, 10:13
δες μια στιγμη και αυτα τα εξαρτηματα μηπως και σε βολεψουν :
http://www.doctoris.gr/pdf/40.pdf
ειναι θερμομικτικες βανες μηχανικες και χρησιμοποιουνται σε συστηματα θερμανσης ηλιακων

genaris
29-04-11, 15:52
οχι ρε φιλιππε τοσο πολυ... δεν ξερω αλλα πιστευω οτι λες πολυ.. μιλαμε για μικρη παροχη μια απλη απο ενα λαστηχο. με μικροεπεξεργαστη μπορω να ελεγχω τη θερμοκρασια και να ανοιγω-κλεινω την αντιστοιχη βανα ωστε να ''ρυθμιζω'' την θερμοκρασια..?

FILMAN
29-04-11, 16:04
Τι "'όχι τόσο πολύ"; Οι βάνες στις κεντρικές θερμάνσεις κάπου τόσο κάνουν! Αν θες κάτι γρήγορο, βάλε ηλεκτροβαλβίδες από πλυντήριο.

genaris
29-04-11, 16:15
θα μπορω ομως να κανονιζω εγω ποσο θα ανοιγουν..?? ή ειναι on-off..? ξερεις αν γινετε αυτο που ειπα με τον mega16..?? Ευχαριστω.

FILMAN
29-04-11, 16:17
Όχι, είναι on - off. Αλλά μπορείς να κάνεις ρύθμιση αφήνοντας την καθεμιά ανοιχτή για διαφορετικό χρόνο.

soulhealer
29-04-11, 16:38
Όχι, είναι on - off. Αλλά μπορείς να κάνεις ρύθμιση αφήνοντας την καθεμιά ανοιχτή για διαφορετικό χρόνο.

κάποιοι το χρησιμοποιούν κ στο αυτόματο πότισμα κήπου ή μπαλκονιών... με ένα χρονικό 24ώρου δίνουν εντολή στην βάνα να ανοίξει για κάποια ώρα που θέλουν και μετά κλείνει.. τάση 220V.. οπότε νομίζω είναι καλή και φθηνή πατέντα αφού με 15 ευρώ περίπου θα κάνεις δουλειά σου..τώρα συν ένα LAE με δυο επαφές θα μπορούσες να κάνεις αυτό που θες..

genaris
29-04-11, 16:40
LAE...??

soulhealer
29-04-11, 16:44
LAE...??
ψηφιακό όργανο όπου με probe μετράει θερμοκρασία ααπό όπου θες και ανάλογα πως το ρυθμίσεις ανοίγει ή κλείνει τις επαφές του.. για ψύξη ή θέρμοανση.. έχω τέτοιο στο ενυδρείο μου αλλά έχω βάλει και σε φούρνο για να κάνει προθέρμανση σε τυρόπιττες για συγκεκριμένη θερμοκρασία.. κόστος αυτού με επιφύλαξη 50 ευρώ

genaris
29-04-11, 16:49
εισαι φοβερος... ετσι θα γινει θα το ψαξω στο ιντερνετ μηπως κ το πετυχω.. αν εχεις κανα site στα υποψιν ριχτο..! ευχαριστω..

soulhealer
29-04-11, 16:56
ψάξε στο google για LAE 2 επαφών και θα σου βγάλει.. αν ήσουν κοντά πάτρα θα σε προμήθευα εγώ αλλά τώρα δεν μπορώ να σου στείλω στο ηράκλειο.. οπότε είσαι μόνος σου πλέον..

rf radio takis
29-04-11, 16:58
οχι μια βρυση ειναι απλη στην οποια θελω να ελεγχω εγω τη θερμοκρασια με ενα θερμοστατη, να ρυθμιζω για παραδειγμα το θερμοστατη στους 20C και μεσω ενος θερμομετρου που θα ειναι μεσα στη σωληνα υδροδοτησης (μαλλον θα κανω καμια τρυπα, θα δω αναλογα με τι θερμομετρο θα βρω) ο μικροεπεξεργαστης (δεν ξερω αν κανει θα δω πως θα το κανω αυτο ψαχνω) θα ελεγχει τις 2 ηλεκτροβανες που θα ειναι συνδεδεμενες σε δυο δεξαμενες αντιστοιχα ζεστου-κρυου και θα ρυθμιζουν ποσο θα παιρνουν απο την καθε δεξαμενη ωστε να εχω εγω τη θερμοκρασια που θελω στη βρυση..
τι όγκο νερού θες στους 20 'C? Καί τι δεξαμενές αναφέρεις ζεστού κρύου?

genaris
29-04-11, 16:59
οπως και να εχει σε ευχαριστω...
τακη δεν εχω συγκεκριμενη ποσοτητα.. οτι κατσει καθε φορα.. αλλα λιγα πραγματα περιπου στα 30 λιτρα, απο τις δεξαμενες θα περνω νερο (μια με ζεστο κ μια με κρυο) και θα περνω συγκεκριμενη ποσοτητα απο την καθε δεξαμενη για να εχω συγκεκριμενη θερμοκρασια

genaris
29-04-11, 17:05
θοδωρη μηπως κανεις λαθος και το λενε καπως αλλιως..? δεν μ βγαζει τπτ....

rf radio takis
29-04-11, 17:05
οπως και να εχει σε ευχαριστω...
τακη δεν εχω συγκεκριμενη ποσοτητα.. οτι κατσει καθε φορα.. αλλα λιγα πραγματα περιπου στα 30 λιτρα
βαζεις ένα μικρό ταχυθερμοσίφωνα με ρύθμιση θερμοστάτη στους 20C και ούτε ψάξε ουτε φτιάξε κλπ.

genaris
29-04-11, 17:07
βαζεις ένα μικρό ταχυθερμοσίφωνα με ρύθμιση θερμοστάτη στους 20C και ούτε ψάξε ουτε φτιάξε κλπ.

ηθελα να το αποφυγω αυτο αλλα αν δεν βγαλω ακρη ετσι θα γινει..

rf radio takis
29-04-11, 17:11
:thumbup1::byebye:

soulhealer
29-04-11, 17:15
δεν θα πρέπει να κοιτάξει για παροχή ρεύματος για ταχυθερμοσίφωνα..(συνήθως 4mm^2)??

rf radio takis
29-04-11, 17:21
δεν θα πρέπει να κοιτάξει για παροχή ρεύματος για ταχυθερμοσίφωνα..(συνήθως 4mm^2)??
Ένας μικρός ταχυθερμοσίφωνας δεν είναι μεγαλύτερος από 1500ω,οπότε λειτουργεί και με 1,5mm2 καλώδιο (εκτός αν έχει μακρυνή απόσταση) και 10Α ασφάλεια.

manolena
29-04-11, 17:51
Στέφανε, έχω την εντύπωση οτι το θέμα δεν είναι τόσο απλό όσο φαίνεται. Η λύση σε αυτό το πρόβλημα άπτεται εφαρμογής με PID controller. O PID controller υπολογίζει ένα "σφάλμα" σαν την διαφορά μεταξύ μιας μετρούμενης εισόδου (που στην περίπτωσή σου είναι η τρέχουσα θερμοκρασία του νερού που έχεις μετά τη μίξη κρύου-ζεστού και μιας επιθυμητής τιμής θερμοκρασίας νερού που επιλέγεις. Ο ελεγκτής του κυκλώματος προσπαθεί συνεχώς να ελαττώσει το σφάλμα ρυθμίζοντας συνέχεια μια έξοδο (που εδώ είναι το solenoid μιας ηλεκτροβάνας ζεστού ή κρύου νερού). Έτσι το αποτέλεσμα είναι να έχεις συνεχώς στην παροχή σου νερό της θερμοκρασίας που έχεις επιλέξει. Με απλές βαλβίδες πλυντηρίου και απλά ηλεκτρονικά, θα έχεις ζεστό νερό σταθερής θερμοκρασίας, ή νερό κρύο μόνο ή νερό ζεστό μόνο ή τίποτε απολύτως.

soulhealer
29-04-11, 17:58
Στέφανε, έχω την εντύπωση οτι το θέμα δεν είναι τόσο απλό όσο φαίνεται. Η λύση σε αυτό το πρόβλημα άπτεται εφαρμογής με PID controller.

Μιας και το ανέφερες, είναι και ο λόγος που είπα για αγορά LAE.. Αυτός ο έλεγχος προσπαθεί να πιάσει την τιμή που έχω ορίσει όσο το δυνατόν πιο γρήγορα και όταν φτάσει την τιμή τότε με μικρές διορθώσεις (ανεπαίσθητες) για το σύστημα κρατάει την τελική έξοδο σταθερή..

genaris
29-04-11, 20:07
θοδωρη σε ευχαριστω πααρα πολυ για οτι μ εστειλες αυριο που εχω ελευθερο χρονο θα ψαξω τις σελιδες που εστειλες. Μανο και σενα σε ευχαριστω πολυ και αν μπορουσες να στειλεις καμια πληροφορια παραπανω θα σου ημουν ευγνομων. Οσο περισσοτερες πληροφοριες μαζεψω τοσο καλυτερα.

manolena
29-04-11, 20:36
Στέφανε, δεν ξέρω αν τα καταφέρνεις με προγραμματισμό και μ/ε, αλλά μιας και έχεις αυτό το θεματάκι, ήθελα να σου πώ οτι ψάχνοντας στον υπολογιστή, βρήκα κάπου ένα μικρό μισοτελειωμένο προγραμματάκι που είχα κάνει με Arduino (πάλι!!!) και είχε σχεδόν την ίδια εφαρμογή. Εγώ υποτίθεται οτι αναμίγνυα κρύο και ζεστό νερό με τη βοήθεια βαλβίδων (ναι, σαν κι αυτές του πλυντηρίου) σε ένα σχετικά μικρό δοχείο και απο εκεί το χρησιμοποιούσα. Μετρούσα τη θερμοκρασία του νερού στο δοχείο και ανάλογα άνοιγα κρύο ή ζεστό για να την κρατάω σταθερή. Αυτό το έκανε ο Arduino με ένα πρόγραμμα PID με τη βοήθεια ενός σειριακού θερμόμετρου (πάλι το LM75!) και μιας οθόνης με κουμπιά, όπου υποτίθεται οτι προγραμμάτιζα τη θερμοκρασία στόχου του νερού προς χρήση και την αποθήκευα στην EEPROM του ATMega. Ποτέ δεν το τελείωσα όμως και επειδή με τσάντισε το μενού του, το παράτησα. Είναι μάλλον πιο εύκολο και πρακτικό να βρείς κάτι έτοιμο όπως προτείνει ο Θοδωρής... Αυτό είναι και το σκετσάκι που είχα φτιάξει (για όποιον ίσως ενδιαφέρεται...)

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <WString.h>
#include <EEPROM.h>
#include <Wire.h>
#include <PID_v1.h>
//************************************************** **************************************************
#define HotSolenoidPin 40
#define ColdSolenoidPin 41
//************************************************** **************************************************
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//************************************************** **************************************************
#define RIGHT 0
#define UP 1
#define DN 2
#define LEFT 3
#define MENU 4
#define LM75_ADDRESS 0x4F
#define DS1307_I2C_ADDRESS 0x68
//************************************************** **************************************************
float temp;
float setTemp;
float farenheit;
const int DEBOUNCE_DELAY = 50;
byte screenRefresh = 120;
int command = 0; // This is the command char, in ascii form, sent from the serial port
int i;
long previousMillis = 0; // will store last time Temp was updated
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte test;
int hourBuffer, minuteBuffer, secondBuffer, dateBuffer, monthBuffer, yearBuffer = 0;
double aggKp=8, aggKi=8, aggKd=8;
double consKp=1, consKi=0.05, consKd=0.25;
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint,aggKp,aggKi,aggKd, DIRECT);//2,5,1
int WindowSize = 750;
unsigned long windowStartTime;
// Default menu choice
byte screen = 2;
byte lastScreen = 4;
//************************************************** **************************************************
//Key message
int adcKeyIn;
int NUM_KEYS = 5;
int key=-1;
int oldKey=-1;
int adcKeyVal[5] ={ 30, 150, 360, 535, 760 };
//************************************************** **************************************************
byte FI[8] = {
B01110,
B10101,
B10101,
B10101,
B01110,
B00100,
B00100,
B00000
};
byte PSI[8] = {
B10101,
B10101,
B10101,
B01110,
B00100,
B00100,
B00100,
B00000
};
byte down_arrow[8] = {
B00000,
B00000,
B00000,
B00000,
B10001,
B01010,
B00100,
B00000
};
byte GAMMA[8] = {
B11111,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B00000
};
byte DELTA[8] = {
B00100,
B01010,
B10001,
B10001,
B10001,
B10001,
B11111,
B00000
};
byte LAMDA[8] = {
B00100,
B01010,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000
};
byte KSI[8] = {
B11111,
B00000,
B00000,
B01110,
B00000,
B00000,
B11111,
B00000
};
byte PEE[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000
};
//************************************************** **************************************************
//************************************************** **************************************************
void setup()
{
lcd.createChar(0, FI);
lcd.createChar(1, PSI);
lcd.createChar(2, down_arrow);
lcd.createChar(3, GAMMA);
lcd.createChar(4, DELTA);
lcd.createChar(5, LAMDA);
lcd.createChar(6, KSI);
lcd.createChar(7, PEE);

Wire.begin();
lcd.begin(16, 2);

pinMode(HotSolenoidPin, OUTPUT);

lcd.setCursor(0,0);
lcd.print(" HOT WATER MIXER");
lcd.setCursor(0,1);
lcd.print(" v1.0 ");
delay(2000);
lcd.clear();
windowStartTime = millis();
//initialize the variables we're linked to
Setpoint = 50;
setTemp = Setpoint;
myPID.SetSampleTime(500);
//tell the PID to range between 0 and the full window size
myPID.SetOutputLimits(0, WindowSize);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
//************************************************** **************************************************
void loop()
{
Input = temp;
myPID.Compute();
/************************************************
* turn the output pin on/off based on pid output
************************************************/
unsigned long now = millis();
if(now - windowStartTime>WindowSize)
{ //time to shift the Relay Window
windowStartTime += WindowSize;
}
if(Output > now - windowStartTime) digitalWrite(HotSolenoidPin,LOW);
else digitalWrite(HotSolenoidPin,HIGH);
screen_1();
delay(500);
showTemp();
}
//************************************************** **************************************************

// Convert ADC value to key number
int getKey(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adcKeyVal[k])
{
return k;
}
}
if (k >= NUM_KEYS)
k = -1; // No valid key pressed
return k;
}
//************************************************** **************************************************
int getKeyDebounce()
{
// wait for no keypress, then return keypress held for debounce period
adcKeyIn = analogRead(0); // read the value from the sensor
key = getKey(adcKeyIn); // convert into key press
do
{
key = getKey(analogRead(0));
}
while (key != -1);
oldKey = key;
while (oldKey == -1 || key == -1 || key != oldKey)
{
oldKey = key;
delay(DEBOUNCE_DELAY);
key = getKey(analogRead(0));
}
return key;
}
//************************************************** **************************************************
void getTemp()
{
Wire.beginTransmission(LM75_ADDRESS);
Wire.send(0x00);
Wire.requestFrom(LM75_ADDRESS, 1);
if (Wire.available())
{
temp = Wire.receive();
}
Wire.endTransmission();
}
//************************************************** **************************************************
void showTemp()
{
getTemp(); lcd.setCursor(8,0); lcd.print(temp);
lcd.setCursor(8,1); lcd.print(setTemp);
}
//************************************************** **************************************************
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
//************************************************** **************************************************
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
//************************************************** **************************************************
void setDateDs1307()
{
/* second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.
minute = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
hour = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
dayOfWeek = (byte) (Serial.read() - 48);
dayOfMonth = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
month = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
year= (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
*/
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0x01);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}

//************************************************** **************************************************
// Gets the date and time from the ds1307 and prints result
void getDateDs1307()
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0x01);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// A few of these need masks because certain bits are control bits
second = bcdToDec(Wire.receive() & 0x7f);
minute = bcdToDec(Wire.receive());
hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
dayOfWeek = bcdToDec(Wire.receive());
dayOfMonth = bcdToDec(Wire.receive());
month = bcdToDec(Wire.receive());
year = bcdToDec(Wire.receive());
}
//************************************************** **************************************************

//************************************************** **************************************************
void screen_1()
{
lcd.setCursor(0,0);
lcd.print("Out T"); lcd.write(223); lcd.print("= "); lcd.setCursor(13,0); lcd.print(" "); lcd.write(223); lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Set T"); lcd.write(223); lcd.print("= "); lcd.setCursor(13,1); lcd.print(" "); lcd.write(223); lcd.print("C");
}
//************************************************** **************************************************
void showMenu()
{
boolean inMenu = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Please select ");
lcd.setCursor(0, 1);
lcd.print(" mode: ");
lastScreen = 100;

delay(2000);

while (inMenu == 0)
{

if ((screen == 0)&&(lastScreen != 0))
{
lcd.clear();
lcd.print("Set Target Temp");
lastScreen = 0;
}
if ((screen == 1)&&(lastScreen != 1))
{
lcd.clear();
lcd.print("^ ");
lcd.print("Target Temp "); lcd.write(223); lcd.print("C");
lcd.setCursor(0,1); lcd.write(2); lcd.print(" ");
lcd.print("Target Temp "); lcd.write(223); lcd.print("F");
lastScreen = 1;
}
if ((screen == 2)&&(lastScreen != 2))
{
lcd.clear();
lcd.print('^');
lcd.print(" Date, time");
lcd.setCursor(0,1);
lcd.write(2);
lastScreen = 2;
}
if ((screen == 3)&&(lastScreen != 3))
{
lcd.clear();
lcd.print('^');
lcd.print(" Options");
lastScreen = 3;
}

switch (getKeyDebounce())
{
case 1:
if (screen != 0)
screen--;
break;
case 2:
if (screen != 3)
screen++;
break;
case 4:
inMenu = 1;
break;
}
}
if (screen == 2){}
// bla bla bla
if (screen == 4){}
//bla bla bla

screenRefresh = 120;

}

genaris
29-04-11, 20:56
απο προγραμματισμο σε γλωσσα c κατι κανω... θα του ριξω μια ματια και αν βγαλω ακρη εχει καλως. αλλα αυτο που λεει ο Θοδωρης μου ακουγεται πιο ευκολο..

Minakos
05-05-11, 11:19
θα μπορω ομως να κανονιζω εγω ποσο θα ανοιγουν..?? ή ειναι on-off..? ξερεις αν γινετε αυτο που ειπα με τον mega16..?? Ευχαριστω.

Επειδη κανουμε μια εργασια για τη σχολη μας με atmega8515 και relay γινεται εαν βρεις ενα θερμοστατη να το προγραμματισεις και ειναι σχετικα απλο

genaris
06-05-11, 20:00
Επειδη κανουμε μια εργασια για τη σχολη μας με atmega8515 και relay γινεται εαν βρεις ενα θερμοστατη να το προγραμματισεις και ειναι σχετικα απλο

Αν θα μπορουσες να μου στειλεις επιπλεον λεπτομεριες ή και κανα παρομοιο προγραμματακι θα ησουν φοβερος.