Arduino Akvarie controller
Re: Arduino Akvarie controller
Du behöver ett "dött" område där du helt enkelt slår av och på lite för sent.
Re: Arduino Akvarie controller
Så här har jag gjort i liknande problem, men då ville jag att temperaturen skall hålla sig inom värdet som finns i val_setL 25grader, och val_setH 27grader
Celsius är ingången från analoga porten där det sitter en temp-givare.
Program snutten fungerar så att är temperaturen under 25 grader så ligger värmen till, tills 27 grader har uppnåtts, då stängs värmen av tills 25 grader uppnåtts, fram och tillbaka.
M100 håller reda på vart i cykeln programmet är, är M100 = 1 så har 27 grader blivit upp nått, när 25 graders uppnås så resetas M100 till 0 och allt börjar om.
Kanske finns nått enklare sätt, men efter som jag är ny på arduino så kände jag inte till det.
Mitt kod snutt som jag delar är tillför att styra farsans pelletsbrännare så att den inte går till och från så ofta. Så den ska slå till brännaren vid 60 grader eller vad han ställer in på displayen och stängas av vid 85 -90 grader eller vad han ställer in som sagt.
Celsius är ingången från analoga porten där det sitter en temp-givare.
Program snutten fungerar så att är temperaturen under 25 grader så ligger värmen till, tills 27 grader har uppnåtts, då stängs värmen av tills 25 grader uppnåtts, fram och tillbaka.
M100 håller reda på vart i cykeln programmet är, är M100 = 1 så har 27 grader blivit upp nått, när 25 graders uppnås så resetas M100 till 0 och allt börjar om.
Kanske finns nått enklare sätt, men efter som jag är ny på arduino så kände jag inte till det.
Mitt kod snutt som jag delar är tillför att styra farsans pelletsbrännare så att den inte går till och från så ofta. Så den ska slå till brännaren vid 60 grader eller vad han ställer in på displayen och stängas av vid 85 -90 grader eller vad han ställer in som sagt.
Kod: Markera allt
if (celsius > val_setH) { // Higher then set value H
M100 = 1; //M100 memory for value have been higher then H
relay_out = 0;
}
if (celsius <= val_setL) { //M100 reset, value have been lower then L
M100 = 0;
relay_out = 1;
}
if ((celsius >= val_setL) && (celsius <= val_setH) &&(M100 = 0)){
relay_out = 1;
}
relay = relay_out;
if (relay == 1) {
digitalWrite(9,LOW);
} else {
digitalWrite(9,HIGH);
}
}
Re: Arduino Akvarie controller
Det kommer att fungera för koden fungerar i min applikation, iaf om du är noga att ändra alla variabel namn. Lättaste sättet att göra det är att klicka på Redigera och sedan sök, skriv in det namn du vill ändra och vilket namn som ska ersätta det, sedan tryck ersätt all, då missar man inget.
Re: Arduino Akvarie controller
Får inte ihop det riktigt. :/
Så här ser det ut nu, men jag får bara "M100 was not declared in this scope"
Så här ser det ut nu, men jag får bara "M100 was not declared in this scope"
Kod: Markera allt
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define ONE_WIRE_BUS 2
#define COOLFAN 3
#define WHITELIGHT 11
#define BLUELIGHT 12
#define RELAY4 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempProbe = { 0x28, 0xB0, 0x30, 0x7A, 0x05, 0x00, 0x00, 0x1B };
float tempC;
void setup(void)
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
pinMode(COOLFAN, OUTPUT);
pinMode(WHITELIGHT, OUTPUT);
pinMode(BLUELIGHT, OUTPUT);
pinMode(RELAY4, OUTPUT);
sensors.begin();
sensors.setResolution(tempProbe, 9);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("ReefCon");
}
void printTempSerial(float temp)
{
}
void LCDTemp(float temp)
{
lcd.setCursor(0,1);
if (temp < -100) {
lcd.print("Error");
} else {
lcd.print (temp);
lcd.print(char(223));
}
}
void loop(void)
//TEMPERATURE RELAY FUNCTION
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);
if (tempC > 27) { // Higher then set value H
M100 = 1; //M100 memory for value have been higher then H
relay_out = 0;
}
if (tempC <= 26) { //M100 reset, value have been lower then L
M100 = 0;
relay_out = 1;
}
if ((tempC >= 26) && (tempC <= 27) &&(M100 = 0)){
relay_out = 1;
}
relay = relay_out;
if (relay == 1) {
digitalWrite(COOLFAN,HIGH);
lcd.setCursor(9,1);
lcd.print("Fan/On ");
} else {
digitalWrite(COOLFAN,LOW);
lcd.setCursor(9,1);
lcd.print("Fan/Off");
}
}
//if (tempC > 27)
//{
// digitalWrite(COOLFAN,HIGH);
// lcd.setCursor(9,1);
// lcd.print("Fan/On ");
//}
//else
//{
// digitalWrite(COOLFAN,LOW);
// lcd.setCursor(9,1);
// lcd.print("Fan/Off");
//}
//CLOCK FUNCTION
DateTime now = RTC.now();
lcd.setCursor(11,0);
if(now.hour() < 10){
lcd.print("0");
lcd.print(now.hour(), DEC);
}
else{
lcd.print(now.hour(), DEC);
}
lcd.print(':');
if(now.minute() < 10){
lcd.print("0");
lcd.print(now.minute(), DEC);
}
else{
lcd.print(now.minute(), DEC);
}
// TIMER RELAY FUNCTION
if (now.hour() >= 13 and now.hour() < 22) {
digitalWrite(WHITELIGHT,HIGH);
}
else {
digitalWrite(WHITELIGHT,LOW);
}
if (now.hour() >= 12 and now.hour() < 23) {
digitalWrite(BLUELIGHT,HIGH);
}
else {
digitalWrite(BLUELIGHT,LOW);
}
delay(1000);
}
Re: Arduino Akvarie controller
Definiera den med "int M100;" under "float TempC;" till exempel.
Re: Arduino Akvarie controller
Du måste tala om vad M100 är för nånting i detta fall en integer och värdet i den.
Skriv int M100 = 0; före void setup.
Eller i ditt fall #define M100 borde kanske också fungera.
EDIT// X-IL var rappare i fingrarna.
Skriv int M100 = 0; före void setup.
Eller i ditt fall #define M100 borde kanske också fungera.
EDIT// X-IL var rappare i fingrarna.

Re: Arduino Akvarie controller
Som orvar-e skriver är det ju bra att initiera den till ett känt värde också.
Re: Arduino Akvarie controller
Tack, men blir fortfarande massa fel, jag fick samma meddelande på relay_out = 0 och sen på relay, så jag testade sätta dessa med likadant, men nu får jag ist fel på lcd.setCursor(11,0). i "Clock Function"
Förlåt om jag e lite dryg nu men kom ihåg att jag är ganska ny på kod;)
Förlåt om jag e lite dryg nu men kom ihåg att jag är ganska ny på kod;)
Kod: Markera allt
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define ONE_WIRE_BUS 2
#define COOLFAN 3
#define WHITELIGHT 11
#define BLUELIGHT 12
#define RELAY4 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempProbe = { 0x28, 0xB0, 0x30, 0x7A, 0x05, 0x00, 0x00, 0x1B };
float tempC;
int M100 = 0;
int relay_out = 0;
int relay;
void setup(void)
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
pinMode(COOLFAN, OUTPUT);
pinMode(WHITELIGHT, OUTPUT);
pinMode(BLUELIGHT, OUTPUT);
pinMode(RELAY4, OUTPUT);
sensors.begin();
sensors.setResolution(tempProbe, 9);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(" Reef Control ");
lcd.setCursor(0,1);
lcd.print(" v.1.0 ");
delay(4000);
lcd.clear();
}
void printTempSerial(float temp)
{
}
void LCDTemp(float temp)
{
lcd.setCursor(0,1);
if (temp < -100) {
lcd.print("Error");
} else {
lcd.print (temp);
lcd.print(char(223));
}
}
void loop(void)
//TEMPERATURE RELAY FUNCTION
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);
if (tempC > 27) { // Higher then set value H
M100 = 1; //M100 memory for value have been higher then H
relay_out = 0;
}
if (tempC <= 26) { //M100 reset, value have been lower then L
M100 = 0;
relay_out = 1;
}
if ((tempC >= 26) && (tempC <= 27) &&(M100 = 0)){
relay_out = 1;
}
relay = relay_out;
if (relay == 1) {
digitalWrite(COOLFAN,HIGH);
lcd.setCursor(9,1);
lcd.print("Fan/On ");
} else {
digitalWrite(COOLFAN,LOW);
lcd.setCursor(9,1);
lcd.print("Fan/Off");
}
}
//if (tempC > 27)
//{
// digitalWrite(COOLFAN,HIGH);
// lcd.setCursor(9,1);
// lcd.print("Fan/On ");
//}
//else
//{
// digitalWrite(COOLFAN,LOW);
// lcd.setCursor(9,1);
// lcd.print("Fan/Off");
//}
//CLOCK FUNCTION
DateTime now = RTC.now();
lcd.setCursor(11,0);
if(now.hour() < 10){
lcd.print("0");
lcd.print(now.hour(), DEC);
}
else{
lcd.print(now.hour(), DEC);
}
lcd.print(':');
if(now.minute() < 10){
lcd.print("0");
lcd.print(now.minute(), DEC);
}
else{
lcd.print(now.minute(), DEC);
}
// TIMER RELAY FUNCTION
if (now.hour() >= 13 and now.hour() < 22) {
digitalWrite(WHITELIGHT,HIGH);
lcd.setCursor(0,0);
lcd.print("Wh");
lcd.print(char(42));
}
else {
digitalWrite(WHITELIGHT,LOW);
lcd.setCursor(0,0);
lcd.print("Wh");
lcd.print(" ");
}
if (now.hour() >= 12 and now.hour() < 23) {
digitalWrite(BLUELIGHT,HIGH);
lcd.setCursor(4,0);
lcd.print("Bl");
lcd.print(char(42));
}
else {
digitalWrite(BLUELIGHT,LOW);
lcd.setCursor(4,0);
lcd.print("Bl");
lcd.print(" ");
}
delay(1000);
}
Re: Arduino Akvarie controller
blir en hel rad med fel, men börjar med
ReefControlV1_5:106: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:107: error: expected unqualified-id before 'if'
ReefControlV1_5:111: error: expected unqualified-id before 'else'
ReefControlV1_5:114: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:115: error: expected unqualified-id before 'if'
ReefControlV1_5:119: error: expected unqualified-id before 'else'
ReefControlV1_5:124: error: expected unqualified-id before 'if'
ReefControlV1_5:130: error: expected unqualified-id before 'else'
ReefControlV1_5:136: error: expected unqualified-id before 'if'
ReefControlV1_5:142: error: expected unqualified-id before 'else'
ReefControlV1_5:148: error: expected constructor, destructor, or type conversion before '(' token
ReefControlV1_5:149: error: expected declaration before '}' token
denna har ju funkat innan?
ReefControlV1_5:106: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:107: error: expected unqualified-id before 'if'
ReefControlV1_5:111: error: expected unqualified-id before 'else'
ReefControlV1_5:114: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:115: error: expected unqualified-id before 'if'
ReefControlV1_5:119: error: expected unqualified-id before 'else'
ReefControlV1_5:124: error: expected unqualified-id before 'if'
ReefControlV1_5:130: error: expected unqualified-id before 'else'
ReefControlV1_5:136: error: expected unqualified-id before 'if'
ReefControlV1_5:142: error: expected unqualified-id before 'else'
ReefControlV1_5:148: error: expected constructor, destructor, or type conversion before '(' token
ReefControlV1_5:149: error: expected declaration before '}' token
denna har ju funkat innan?
Re: Arduino Akvarie controller
Du har en } för mycket nånstans, jämför med koden som fungerade tidigare (den på förra sidan) så hittar du nog det. Den finns före lcd.setCursor(11,0);
Re: Arduino Akvarie controller
Ah, tack. tog ca 1 sekund att hitta den bara jag visste vad jag skulle leta efter:) verkar funka nu:)
Re: Arduino Akvarie controller
Kul att min kod snutt kommer till nytta i någon annans applikation. 
