Arduino Akvarie controller

Berätta om dina pågående projekt.
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

Inte riktigt säker på hur du menar här?
Användarvisningsbild
Rohan
Inlägg: 1063
Blev medlem: 7 april 2004, 08:24:39
Ort: Eksjö, Småland
Kontakt:

Re: Arduino Akvarie controller

Inlägg av Rohan »

Du behöver ett "dött" område där du helt enkelt slår av och på lite för sent.
Användarvisningsbild
orvar-e
EF Sponsor
Inlägg: 5973
Blev medlem: 9 mars 2007, 09:01:32
Ort: Borlänge

Re: Arduino Akvarie controller

Inlägg av orvar-e »

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.

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

 }
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

Ah. tackar. ska prova den:)
Användarvisningsbild
orvar-e
EF Sponsor
Inlägg: 5973
Blev medlem: 9 mars 2007, 09:01:32
Ort: Borlänge

Re: Arduino Akvarie controller

Inlägg av orvar-e »

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.
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

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"

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);
}
X-IL
EF Sponsor
Inlägg: 8479
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: Arduino Akvarie controller

Inlägg av X-IL »

Definiera den med "int M100;" under "float TempC;" till exempel.
Användarvisningsbild
orvar-e
EF Sponsor
Inlägg: 5973
Blev medlem: 9 mars 2007, 09:01:32
Ort: Borlänge

Re: Arduino Akvarie controller

Inlägg av orvar-e »

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. :)
X-IL
EF Sponsor
Inlägg: 8479
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: Arduino Akvarie controller

Inlägg av X-IL »

Som orvar-e skriver är det ju bra att initiera den till ett känt värde också.
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

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

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);
}
X-IL
EF Sponsor
Inlägg: 8479
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: Arduino Akvarie controller

Inlägg av X-IL »

Vad är det för felmeddelande?
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

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?
Borre
Inlägg: 4606
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Arduino Akvarie controller

Inlägg av Borre »

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);
Arclight
Inlägg: 77
Blev medlem: 31 oktober 2013, 09:49:10

Re: Arduino Akvarie controller

Inlägg av Arclight »

Ah, tack. tog ca 1 sekund att hitta den bara jag visste vad jag skulle leta efter:) verkar funka nu:)
Användarvisningsbild
orvar-e
EF Sponsor
Inlägg: 5973
Blev medlem: 9 mars 2007, 09:01:32
Ort: Borlänge

Re: Arduino Akvarie controller

Inlägg av orvar-e »

Kul att min kod snutt kommer till nytta i någon annans applikation. :)
Skriv svar