arduino temperaturstyring
arduino temperaturstyring
Hej Medbryggere.
jeg sidder og leger med en arduino, jeg har lavet en styring der måler temperaturen hvis den er under setpunkt tænder den varmen/output til næste setpunkt er nået, det samme gælder for køling, kort sagt samme funktion som en STC 1000.
jeg har koblet et display på der viser temperaturen samt om varme eller køling er aktiv. http://www.ebay.com/itm/310575296583?_t ... EBIDX%3AIT" onclick="window.open(this.href);return false;
nu kommer problemet: jeg vil gerne kunne justere setpunkterne via nogle trykknapper! jeg havde forestillet mig 3 trykknapper.
1. trykknap aktiverer ''redigeringsmode'' og kan også bruges til at steppe imellem de 4 setpunkter (varme start, varme stop, Køling start, køling stop)
2. trykknap bruges til at steppe værdien af valgte setpunkt op.
3. trykknap bruges til at steppe værdien af valgte setpunkt ned.
håber der er en der har et eksempel på hvordan det gøres/eller et link til et sted det er beskrevet.
Hvis der er andre/simplere måder at gøre det på modtages alt med kyshånd (dog køber jeg ingen STC-1000).
Højt skum: Søren
jeg sidder og leger med en arduino, jeg har lavet en styring der måler temperaturen hvis den er under setpunkt tænder den varmen/output til næste setpunkt er nået, det samme gælder for køling, kort sagt samme funktion som en STC 1000.
jeg har koblet et display på der viser temperaturen samt om varme eller køling er aktiv. http://www.ebay.com/itm/310575296583?_t ... EBIDX%3AIT" onclick="window.open(this.href);return false;
nu kommer problemet: jeg vil gerne kunne justere setpunkterne via nogle trykknapper! jeg havde forestillet mig 3 trykknapper.
1. trykknap aktiverer ''redigeringsmode'' og kan også bruges til at steppe imellem de 4 setpunkter (varme start, varme stop, Køling start, køling stop)
2. trykknap bruges til at steppe værdien af valgte setpunkt op.
3. trykknap bruges til at steppe værdien af valgte setpunkt ned.
håber der er en der har et eksempel på hvordan det gøres/eller et link til et sted det er beskrevet.
Hvis der er andre/simplere måder at gøre det på modtages alt med kyshånd (dog køber jeg ingen STC-1000).
Højt skum: Søren
Re: arduino temperaturstyring
mit korte svar er nimbus39 ;) hvis du ikke ved hvad jeg mener må du vente og se ;)
Sendt fra min SM-G920F med Tapatalk
Sendt fra min SM-G920F med Tapatalk
Mvh.
Jens
Øl og sol er livet....
http://www.fribryg.dk" onclick="window.open(this.href);return false;
http://www.facebook.dk/fribryg" onclick="window.open(this.href);return false;
Jens
Øl og sol er livet....
http://www.fribryg.dk" onclick="window.open(this.href);return false;
http://www.facebook.dk/fribryg" onclick="window.open(this.href);return false;
Re: arduino temperaturstyring
jeg ved godt hvad du mener, det er lidt ham jeg håber læser indlægget. :-)
- martin_pedersen
- Indlæg: 413
- Tilmeldt: 6. okt 2011, 13:49
- Geografisk sted: 7080 Børkop
Re: arduino temperaturstyring
jeg har nok noget liggende derhjemme, men søg på arduino menu programming.. værdier osv. ligger man op i eprom hukommelsen. så kan den tåle at blive slukket
Sendt fra min SM-G925F med Tapatalk
Sendt fra min SM-G925F med Tapatalk
All right, brain, I don't like you and you don't like me - so let's just do this and I'll get back to killing you with beer.
Martin
Ps. Det skal nok blive til øl!
Martin
Ps. Det skal nok blive til øl!
Re: arduino temperaturstyring
Prøv at tage et kig på koden her: http://haandbrygforum.dk/viewtopic.php? ... =15#p94064" onclick="window.open(this.href);return false;
Der gør jeg stort set det du efterlyser med 4 alarmer.
/Rasmus
Der gør jeg stort set det du efterlyser med 4 alarmer.
/Rasmus
Re: arduino temperaturstyring
Jamen så må jeg jo hellere svare ;-)Lillelund skrev:jeg ved godt hvad du mener, det er lidt ham jeg håber læser indlægget. :-)
Det du spørger om har jeg lavet til Admins HLT styring.
Det brugte LCD/Keypad er denne type:
http://www.aliexpress.com/item/Free-Shi ... 79279.html" onclick="window.open(this.href);return false;
Det fungerer ved at læse en analog indgang og alt efter hvad værdien er på indgangen kan det afgøres hvilken knap der trykkes på fordi hver knap har en unik modstand monteret, faktisk lidt smart måde kun at bruge en indgang på at aflæse 5 knapper (den 6. og sidste knap er en hard reset knap)
Jeg læser keypad på denne måde:
Kode: Vælg alt
void ReadKey() // Aflæser keypad, og lægger værdi for knap i KeyPress variablen
{
int x;
x = analogRead (0);
KeyPress = 0;
if (x < 60) // Right
{
KeyPress = 5;
}
else if (x < 200) // Up
{
KeyPress = 3;
}
else if (x < 400) // Down
{
KeyPress = 4;
}
else if (x < 600) // Left
{
KeyPress = 2;
}
else if (x < 800) // Select
{
KeyPress = 1;
}
}
Kode: Vælg alt
boolean SetTemperatur () // Juster temperatur
{
int y = 0;
float x = 0;
boolean stored = false;
lcd.clear();
while (SetTemp)
{
lcd.setCursor(0,0);
lcd.print("Preset: ");
lcd.setCursor(0,1);
lcd.print("New Value:");
delay (400);
while (!PresetSelcected)
{
ReadKey();
switch (KeyPress)
{
case 2: // Left
lcd.setCursor(8,0);
lcd.print("Left ");
PresetSelcected = true;
y = KeyPress;
break;
case 3: // Up
lcd.setCursor(8,0);
lcd.print("Up ");
PresetSelcected = true;
y = KeyPress;
break;
case 4: // Down
lcd.setCursor(8,0);
lcd.print("Down ");
PresetSelcected = true;
y = KeyPress;
break;
case 5: // Right
lcd.setCursor(8,0);
lcd.print("Right");
PresetSelcected = true;
y = KeyPress;
break;
}
}
ReadPotMeter();
x = ((PotMeter/ScaleStep)+ScaleStart); // Udregn temperatur der skal lagres
lcd.setCursor(11,1);
lcd.print(" "); // Ryd pladsen hvor udregnet værdi skrives
lcd.setCursor(11,1);
lcd.print(x); // Skriv udregnet værdi til display
ReadKey();
if (KeyPress == 1) // Hvis der trykkes på Select
{
SetTemp = false; // bryd set temp løkken
}
}
while (!stored) // indtil de indtastede data er gemt
{
if ( y == 2) //Hvis left er valgt tidligere
{
Temp1 = x; // Gem udregnet værdi i left knap
lcd.clear();
lcd.print("Value: ");
lcd.print(x);
lcd.setCursor(0,1);
lcd.print("Stored in Left");
stored = true; // Bryd stored løkke
delay (1000);
lcd.clear();
}
if ( y == 3) //Hvis up er valgt tidligere
{
Temp2 = x; // Gem udregnet værdi i up knap
lcd.clear();
lcd.print("Value: ");
lcd.print(x);
lcd.setCursor(0,1);
lcd.print("Stored in Up");
stored = true; // Bryd stored løkke
delay (1000);
lcd.clear();
}
if ( y == 4) //Hvis down er valgt tidligere
{
Temp3 = x; // Gem udregnet værdi i down knap
lcd.clear();
lcd.print("Value: ");
lcd.print(x);
lcd.setCursor(0,1);
lcd.print("Stored in Down");
stored = true; // Bryd stored løkke
delay (1000);
lcd.clear();
}
if ( y == 5) //Hvis right er valgt tidligere
{
Temp4 = x; // Gem udregnet værdi i right knap
lcd.clear();
lcd.print("Value: ");
lcd.print(x);
lcd.setCursor(0,1);
lcd.print("Stored in Right");
stored = true; // Bryd stored løkke
delay (1000);
lcd.clear();
}
}
// Print alle presets til display
lcd.setCursor(0,0);
lcd.print("L:");
lcd.print(Temp1, 1);
lcd.setCursor(8,0);
lcd.print(" U:");
lcd.print(Temp2, 1);
lcd.setCursor(0,1);
lcd.print("D:");
lcd.print(Temp3, 1);
lcd.setCursor(8,1);
lcd.print(" R:");
lcd.print(Temp4, 1);
delay(5000);
lcd.clear();
}
Kode: Vælg alt
void SetTarget() //Vælg hvilken forudindstillet temperatur der skal være target
{
if (KeyPress==2)
{
TempTarget = Temp1;
}
if (KeyPress==3)
{
TempTarget = Temp2;
}
if (KeyPress==4)
{
TempTarget = Temp3;
}
if (KeyPress==5)
{
TempTarget = Temp4;
}
}
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
Re: arduino temperaturstyring
Hej Rasmusa og Nimbus
der er helt sikkert noget at sætte sig ind i :-).
igår crashede min private computer, igang med arbejdscomputeren, den nægtede at kommunikere med min UNO, den blev ved med at stå som USB2.0 serial, og ville ikke instalere driver fra Arduino biblioteket.
nå frem med en DUE, den skulle lige oprettes men så var der hul igennem, så skulle der downloades biblioteker jeg havde jo fået en ide til hvordan det kan gøres, men hver gang jeg prøvede at Verify eller Uploade, fik jeg fejlmeddelelser.
efter lang tid fandt jeg ud af at en DUE ikke vil samarbejde med et I2C LCD pga. et eller andet langhåret noget, nå men der var altså en der lige viste hvad man skulle rette i et par filer i <LiquidCrystal_I2C.h> library, nu kunne jeg Verify coden og uploade til min DUE.
LCD virker stadig ikke men jeg har fået afprøvet det jeg kom i tanke om, det virker fint i praksis men det er langt fra ligeså raffineret som hvad i er kommet med, og det går tilbage til de defaults der er skrevet i setup hvis strømmen forsvinder.
det er baseret på 4 Threshold, 2 setpunkter og hysterese for hver, samt en buttonstatechange detection med tæller og en masse if if
// read the pushbutton input pin:
buttonState1 = digitalRead(buttonPin1);
// compare the buttonState to its previous state
if (buttonState1 != lastButtonState1) {
// if the state has changed, increment the counter
if (buttonState1 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter1++;
Serial.print("number of button1 pushes: ");
Serial.println(buttonPushCounter1);
}
}
lastButtonState1 = buttonState1;
// read the pushbutton input pin:
buttonState2 = digitalRead(buttonPin2);
// compare the buttonState to its previous state
if (buttonState2 != lastButtonState2) {
// if the state has changed, increment the counter
if (buttonState2 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter2++;
Serial.print("number of button2 pushes: ");
Serial.println(buttonPushCounter2);
}
}
lastButtonState2 = buttonState2;
// read the pushbutton input pin:
buttonState3 = digitalRead(buttonPin3);
// compare the buttonState to its previous state
if (buttonState3 != lastButtonState3) {
// if the state has changed, increment the counter
if (buttonState3 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter3++;
Serial.print("number of button3 pushes: ");
Serial.println(buttonPushCounter3);
}
}
lastButtonState3 = buttonState3;
// function for setting threshold 1
if (buttonPushCounter1 == 1) {
if (buttonPushCounter2 == 1){
threshold1= threshold1 + 1;
}}
if (buttonPushCounter1 == 1) {
if (buttonPushCounter3 == 1){
threshold1 = threshold1 - 1;
}}
// function for setting threshold 2
if (buttonPushCounter1 == 2) {
if (buttonPushCounter2 == 1){
threshold2= threshold2 + 1;
}}
if (buttonPushCounter1 == 2) {
if (buttonPushCounter3 == 1){
threshold2 = threshold2 - 1;
}}
// function for setting threshold 3
if (buttonPushCounter1 == 3) {
if (buttonPushCounter2 == 1){
threshold3= threshold3 + 1;
}}
if (buttonPushCounter1 == 3) {
if (buttonPushCounter3 == 1){
threshold3 = threshold3 - 1;
}}
// function for setting threshold 4
if (buttonPushCounter1 == 4) {
if (buttonPushCounter2 == 1){
threshold4= threshold4 + 1;
}}
if (buttonPushCounter1 == 4) {
if (buttonPushCounter3 == 1){
threshold4 = threshold4 - 1;
}}
if (buttonPushCounter1 >= 5){
buttonPushCounter1 = 0;
}
if (buttonPushCounter2 == 1){
buttonPushCounter2=0;
}
if (buttonPushCounter3 == 1){
buttonPushCounter3=0;
}
det er den simple men tunge måde at lave det på.
jeg skal ihvertefald have nærstuderet jeres løsninger da der er nogle nye funktioner jeg ikke har set før.
@Nimbus, kan den måde du har lavet meny på bruges på displays uden knapper eller er det kun på den type du har linket til?
ps. hvordan indsætter i IDE kode så det kører i sit eget vindue?
Tak for hjælpen. Søren
der er helt sikkert noget at sætte sig ind i :-).
igår crashede min private computer, igang med arbejdscomputeren, den nægtede at kommunikere med min UNO, den blev ved med at stå som USB2.0 serial, og ville ikke instalere driver fra Arduino biblioteket.
nå frem med en DUE, den skulle lige oprettes men så var der hul igennem, så skulle der downloades biblioteker jeg havde jo fået en ide til hvordan det kan gøres, men hver gang jeg prøvede at Verify eller Uploade, fik jeg fejlmeddelelser.
efter lang tid fandt jeg ud af at en DUE ikke vil samarbejde med et I2C LCD pga. et eller andet langhåret noget, nå men der var altså en der lige viste hvad man skulle rette i et par filer i <LiquidCrystal_I2C.h> library, nu kunne jeg Verify coden og uploade til min DUE.
LCD virker stadig ikke men jeg har fået afprøvet det jeg kom i tanke om, det virker fint i praksis men det er langt fra ligeså raffineret som hvad i er kommet med, og det går tilbage til de defaults der er skrevet i setup hvis strømmen forsvinder.
det er baseret på 4 Threshold, 2 setpunkter og hysterese for hver, samt en buttonstatechange detection med tæller og en masse if if
// read the pushbutton input pin:
buttonState1 = digitalRead(buttonPin1);
// compare the buttonState to its previous state
if (buttonState1 != lastButtonState1) {
// if the state has changed, increment the counter
if (buttonState1 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter1++;
Serial.print("number of button1 pushes: ");
Serial.println(buttonPushCounter1);
}
}
lastButtonState1 = buttonState1;
// read the pushbutton input pin:
buttonState2 = digitalRead(buttonPin2);
// compare the buttonState to its previous state
if (buttonState2 != lastButtonState2) {
// if the state has changed, increment the counter
if (buttonState2 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter2++;
Serial.print("number of button2 pushes: ");
Serial.println(buttonPushCounter2);
}
}
lastButtonState2 = buttonState2;
// read the pushbutton input pin:
buttonState3 = digitalRead(buttonPin3);
// compare the buttonState to its previous state
if (buttonState3 != lastButtonState3) {
// if the state has changed, increment the counter
if (buttonState3 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter3++;
Serial.print("number of button3 pushes: ");
Serial.println(buttonPushCounter3);
}
}
lastButtonState3 = buttonState3;
// function for setting threshold 1
if (buttonPushCounter1 == 1) {
if (buttonPushCounter2 == 1){
threshold1= threshold1 + 1;
}}
if (buttonPushCounter1 == 1) {
if (buttonPushCounter3 == 1){
threshold1 = threshold1 - 1;
}}
// function for setting threshold 2
if (buttonPushCounter1 == 2) {
if (buttonPushCounter2 == 1){
threshold2= threshold2 + 1;
}}
if (buttonPushCounter1 == 2) {
if (buttonPushCounter3 == 1){
threshold2 = threshold2 - 1;
}}
// function for setting threshold 3
if (buttonPushCounter1 == 3) {
if (buttonPushCounter2 == 1){
threshold3= threshold3 + 1;
}}
if (buttonPushCounter1 == 3) {
if (buttonPushCounter3 == 1){
threshold3 = threshold3 - 1;
}}
// function for setting threshold 4
if (buttonPushCounter1 == 4) {
if (buttonPushCounter2 == 1){
threshold4= threshold4 + 1;
}}
if (buttonPushCounter1 == 4) {
if (buttonPushCounter3 == 1){
threshold4 = threshold4 - 1;
}}
if (buttonPushCounter1 >= 5){
buttonPushCounter1 = 0;
}
if (buttonPushCounter2 == 1){
buttonPushCounter2=0;
}
if (buttonPushCounter3 == 1){
buttonPushCounter3=0;
}
det er den simple men tunge måde at lave det på.
jeg skal ihvertefald have nærstuderet jeres løsninger da der er nogle nye funktioner jeg ikke har set før.
@Nimbus, kan den måde du har lavet meny på bruges på displays uden knapper eller er det kun på den type du har linket til?
ps. hvordan indsætter i IDE kode så det kører i sit eget vindue?
Tak for hjælpen. Søren
Re: arduino temperaturstyring
Jeg har også frigivet et bibliotek, der har cirka samme funktion med knapper. Den sørger for debouncing, har mulighed for repeat, og bruger en analog indgang til multiple knapper. Og så er det så nemt som følgende i programmets hovedsløjfe:
Ved at vælge modstandene rigtigt opnås maksimal støjimmunitet på knapperne. Biblioteket indeholder en eksempelfil, hvor der er en tabel med modstande i forhold til antallet af knapper.
Biblioteket kan hentes her: https://github.com/olewolf/Analog_Buttons,
Kode: Vælg alt
int key_press = my_button;
Biblioteket kan hentes her: https://github.com/olewolf/Analog_Buttons,
Årtusinders traditioner for ølbrygning har påvirket selv vores kommunikation: Det er årsagen til, at der i så mange sprog ikke findes et ord for "ikke længere tørstig".
-
- Indlæg: 5319
- Tilmeldt: 15. nov 2008, 09:30
Re: arduino temperaturstyring
Nu spørger jeg nok lidt dumt ... men det virker meget bøvlet at bruge AD indgange til on/off funktion...??
Er det fordi der mangle digitale styre indgage elle hyr ?
Er det fordi der mangle digitale styre indgage elle hyr ?
Re: arduino temperaturstyring
Ja, fordelen ved at bruge AD-indgange til on/off-knapper er, at alle knapperne bliver koblet til én indgang. Man kan hurtigt løbe tør for indgange og udgange, hvis man f.eks. bruger en LCD.Truntebryg skrev:Er det fordi der mangle digitale styre indgage elle hyr ?
(I mit seneste projekt baseret på en ATmega328 (Arduino-processoren) skulle jeg styre en steppermotor, et LCD, to blæsere, en temperaturføler, en luftfugtighedsmåler, et varmelegeme, en luftfugter, betjene en menu vha. trykknapper, have en serielport til en radio... der bliver pludselig kamp om benene på processoren.)
Årtusinders traditioner for ølbrygning har påvirket selv vores kommunikation: Det er årsagen til, at der i så mange sprog ikke findes et ord for "ikke længere tørstig".