Arduino Akvarie controller
Re: Arduino Akvarie controller
RTC delen du använder har jag lekt med, den höll tiden för mig vid eventuella elavbrott.
Dock ser den där kodsnutten där du ställer in allt till 0 igen inte lika bra ut, då lär den nollas!
Dock ser den där kodsnutten där du ställer in allt till 0 igen inte lika bra ut, då lär den nollas!
Re: Arduino Akvarie controller
Nu kan jag ju ha missat något, men det ser inte ut som att sättning av tiden körs nån annanstans än i SetTime, och den får ju TS ett val att gå in i i Setup(). Så oavsett om man sätter de lokala variablerna till 0 så så kommer en sättning av klockan inte ske utan att man som användare valt att göra en och därmed fått fylla i värden.
Re: Arduino Akvarie controller
Tack för tipset om att mäta spänningen vid benen, det visade sig inte finnas någon, efter närmre koll så såg det lite dåligt ut vid jorden mot batteriet så jag testade bara lägga lite folie mellan så funkade det, och nu behåller den tiden som den ska. jag körde en av de andra koderna jag kört med innan som inte funkade då heller, men nu funkar den med bra:)
så, tillbaka till att lägga in detta nu och försöka få in timer funktionen.. hmm jag lär nog återkomma om hjälp;)
så, tillbaka till att lägga in detta nu och försöka få in timer funktionen.. hmm jag lär nog återkomma om hjälp;)
Re: Arduino Akvarie controller
Skönt med enkla fel. Råkade beställa lite arduinoprylar som iaf kommer att bli nån slags övervakning.
Re: Arduino Akvarie controller
Ok, nu har jag tom fått klockan i lcd och det verkar funka, förutom en sak, det såg snyggt ut fram tills klockan var 23:59 men när den slår över så visar den 0:01 och det är ju helt korrekt, men det gör att det blir en siffra mindre och då syns 9 längs bak, tiden ser då ut som 0:019, jag vill ju så klart ha tiden som 00:01 eller 01:34 ist 1:36 om ni förstår.? hur kan man göra detta?
Koden ser nu ut så här.. och ja jag vet den är inte snygg, och det är säkert rader där som inte behöver vara där, men det funkar iaf:)
Koden ser nu ut så här.. och ja jag vet den är inte snygg, och det är säkert rader där som inte behöver vara där, men det funkar iaf:)
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 RELAY1 3
#define RELAY2 11
#define RELAY3 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();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
sensors.begin();
sensors.setResolution(tempProbe, 10);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("ReefCon");
}
void printTempSerial(float temp)
{
Serial.print("Probe temperature is: ");
if (temp < -100) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(temp);
}
Serial.print("\n\r\n\r");
}
void LCDTemp(float temp)
{
lcd.setCursor(0,1);
if (temp < -100) {
lcd.print("Error: check connection");
} else {
lcd.print (temp);
lcd.print(char(223));
}
}
void loop(void)
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);
if (tempC > 27)
{
digitalWrite(RELAY1,HIGH);
lcd.setCursor(9,1);
lcd.print("Fan/On ");
}
else
{
digitalWrite(RELAY1,LOW);
lcd.setCursor(9,1);
lcd.print("Fan/Off");
}
DateTime now = RTC.now();
lcd.setCursor(11,0);
//Serial.print(now.year(), DEC);
//Serial.print('/');
//Serial.print(now.month(), DEC);
//Serial.print('/');
//Serial.print(now.day(), DEC);
//Serial.print(' ');
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
//Serial.print(':');
//Serial.print(now.second(), DEC);
//Serial.println();
delay(1000);
}
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Arduino Akvarie controller
Hur blir det om du lägger in:
lite strategiskt? Såg att dom gjort så när dom haft liknande problem.
Kod: Markera allt
if(now.hour < 10)
lcd.print('0');
Re: Arduino Akvarie controller
Eller så rensar man displayen mellan varje uppdatering, en annan variant som jag också använt mig av är att skriva ut blanksteg bakom tills man fyllt ut utrymmet.
Jag har även använt mig av en funktion "center" där man specar total stränglängd och utfyllnadstecken.
Det finns såklart fler varianter på detta.
Jag har även använt mig av en funktion "center" där man specar total stränglängd och utfyllnadstecken.
Det finns såklart fler varianter på detta.
Re: Arduino Akvarie controller
Tack, Denna verka funka.
Kod: Markera allt
if(now.hour() < 10){
lcd.print("0");
lcd.print(now.hour(), DEC);
}
else{
lcd.print(now.hour(), DEC);
}
Re: Arduino Akvarie controller
Gjorde en lika dan lösning för timer funktionen, vet inte om det är riktigt rätt dock men den slår iaf på relä 2 (WHITELIGHT) och 3 (BLUELIGHT), återstår att se om dom slås av med vid inställd tidpunkt:) Har än så länge inte kopplat in någon 220 i reläna än utan testar först så det funkar, la in detta i koden iaf.
Kod: Markera allt
if(now.hour() > 14 < 22){
digitalWrite(WHITELIGHT,HIGH);
}
else{
digitalWrite(WHITELIGHT,LOW);
}
if(now.hour() > 13 < 23){
digitalWrite(BLUELIGHT,HIGH);
}
else{
digitalWrite(BLUELIGHT,LOW);
}
Re: Arduino Akvarie controller
Och det verkade inte funka..:/
Testade så här ist men verkar inte funka heller, någon som ser vad jag gör fel?
Testade så här ist men verkar inte funka heller, någon som ser vad jag gör fel?
Kod: Markera allt
if(now.hour() >= 14 )
digitalWrite(WHITELIGHT,HIGH);
else if(now.hour() <= 22){
digitalWrite(WHITELIGHT,LOW);
}
if(now.hour() >= 13 )
digitalWrite(BLUELIGHT,HIGH);
else if(now.hour() <= 23){
digitalWrite(BLUELIGHT,LOW);
}
Re: Arduino Akvarie controller
Du upptäcker ett klassiskt misstag. Försök att undvika else if när du bara har två utfall.
Första grenen av if-satsen (>= 14) matchar allt större än eller lika med 14.
Andra villkoret (<= 22) testas bara om det första villkoret inte uppfylldes.
Detta betyder att du egentligen har skrivit:
Vill du ha kod som har reläet aktiverat mellan 14 och 22 rekommenderar jag att du skriver så här:
Det brukar inte vara lönt att fokusera på när tillståndet ska växla, då är man tvungen att veta hur det var förut för att kunna jämföra. Bättre då att fokusera på utfallen. Att aktivera en redan aktiv utgång är inget problem.
Första grenen av if-satsen (>= 14) matchar allt större än eller lika med 14.
Andra villkoret (<= 22) testas bara om det första villkoret inte uppfylldes.
Detta betyder att du egentligen har skrivit:
Kod: Markera allt
if (now.hour() >= 14) {
...
}
else if (now.hour() < 14 and now.hour() <= 22) {
...
}
Kod: Markera allt
if (now.hour() >= 14 and now.hour() < 22) {
...
}
else {
...
}
Re: Arduino Akvarie controller
Ahh, tackar så mycket, ska testa detta när jag kommer hem från jobbet idag:)
Re: Arduino Akvarie controller
Det funkade ju alldeles utmärkt, så nu återstår egentligen bara att koppla ihop ett par uttag från reläna till belysningen och göra färdigt lådan sen är jag klar med själva grundfunktionerna, jag har ju iofs ett relä över som hade varit kul att göra nåt av, kanske en nivåvakt som bryter pumpen om det skulle bli nåt läckage eller liknande, samt kanske lägga in så jag kan ändra tider, mm i ett menysystem via knapparna på lcd shielden, kanske även ska fundera på att sätta en ph probe, men det får bli lite efterhand.
Jag har däremot ett litet problem, när tempen kommer till gränsen då relät ska slå till för fläkten så hoppar den ju lite ex mellan 26.5-27 vilket gör att relät tickar som fasen, nån som har nåt smart sätt att fixa detta på?
Jag har däremot ett litet problem, när tempen kommer till gränsen då relät ska slå till för fläkten så hoppar den ju lite ex mellan 26.5-27 vilket gör att relät tickar som fasen, nån som har nåt smart sätt att fixa detta på?
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Arduino Akvarie controller
Du har ju en IF...ELSE. Sätt två gränser istället med en hysteres.
Alltså start vid 27, stopp vid 26 eller nåt.
Alltså start vid 27, stopp vid 26 eller nåt.