watergeef systeem probleempje met timer
12 berichten
• Pagina 1 van 2 • 1, 2
watergeef systeem probleempje met timer
Hallo allen!
Ik heb geen groene vingers, maar wel zwarte. Dus bedacht ik dat watergeven best geautomatiseerd kon worden.
Ik heb 6 plantenbakken, in elke plantenbak zit een sensor en een druppelboog. Elke bak wordt voorzien van water door een eigen klep.
Ik heb een arduino uno met een 8 relais unit waar er 6 van worden gebruikt.
Het idee is dat om de bv 20 minuten de sensoren kijken wat de waarde is en vervolgens de arduino aansporen om de waterklep te openen.
Het geheel werkt wel, maar ik heb een probleem met de tijdvertraging. Dit is overigens mijn eerste projectje, maar het smaakt naar meer. Ik heb al een setup gemaakt met de delayfunctie en eentje met de millis functie. Bij de delay functie gaat het systeem op een gegeven moment flippen en blijft hij als een gek de kleppen aansturen. Bij de millis functie lijkt het alsof hij halverwege vastloopt. Ik zie dat er 2x water gegeven wordt bij de bakken die te droog staan, maar dan wordt de zin "water ..." plots afgebroken en gaat hij weer wachten tot de volgende ronde.
Wie kan mij in de juiste richting duwen?
note; jullie zien een led functie staan bij de int . Deze leds gebruik ik niet en de functie heb ik uit de loop gehaald.
Ik heb geen groene vingers, maar wel zwarte. Dus bedacht ik dat watergeven best geautomatiseerd kon worden.
Ik heb 6 plantenbakken, in elke plantenbak zit een sensor en een druppelboog. Elke bak wordt voorzien van water door een eigen klep.
Ik heb een arduino uno met een 8 relais unit waar er 6 van worden gebruikt.
Het idee is dat om de bv 20 minuten de sensoren kijken wat de waarde is en vervolgens de arduino aansporen om de waterklep te openen.
Het geheel werkt wel, maar ik heb een probleem met de tijdvertraging. Dit is overigens mijn eerste projectje, maar het smaakt naar meer. Ik heb al een setup gemaakt met de delayfunctie en eentje met de millis functie. Bij de delay functie gaat het systeem op een gegeven moment flippen en blijft hij als een gek de kleppen aansturen. Bij de millis functie lijkt het alsof hij halverwege vastloopt. Ik zie dat er 2x water gegeven wordt bij de bakken die te droog staan, maar dan wordt de zin "water ..." plots afgebroken en gaat hij weer wachten tot de volgende ronde.
Wie kan mij in de juiste richting duwen?
note; jullie zien een led functie staan bij de int . Deze leds gebruik ik niet en de functie heb ik uit de loop gehaald.
- Code: Alles selecteren
int sensorPin1 = A0;
int outPin1 = 13;
int sensorValue1 = 0;
int sensorPin2 = A1;
int outPin2 = 12;
int sensorValue2 = 0;
int sensorPin3 = A2;
int outPin3 = 11;
int sensorValue3 = 0;
int sensorPin4 = A3;
int outPin4 = 10;
int sensorValue4 = 0;
int sensorPin5 = A4;
int outPin5 = 9;
int sensorValue5 = 0;
int sensorPin6 = A5;
int outPin6 = 8;
int sensorValue6 = 0;
int outPinled1 = 7;
int outPinled2 = 6;
int outPinled3 = 5;
int outPinled4 = 4;
int outPinled5 = 3;
int outPinled6 = 2;
long previousMillis = 0;
long interval = 60000;
void setup() {
// outpins zijn pins die relais aansturen. oupinled wordt niet gebruikt.
Serial.begin(9600);
pinMode (outPin1, OUTPUT);
pinMode (outPin2, OUTPUT);
pinMode (outPin3, OUTPUT);
pinMode (outPin4, OUTPUT);
pinMode (outPin5, OUTPUT);
pinMode (outPin6, OUTPUT);
pinMode (outPinled1, OUTPUT);
pinMode (outPinled2, OUTPUT);
pinMode (outPinled3, OUTPUT);
pinMode (outPinled4, OUTPUT);
pinMode (outPinled5, OUTPUT);
pinMode (outPinled6, OUTPUT);
}
void loop(){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
// meten van de waardes die bak heeft.
sensorValue1 = analogRead(sensorPin1);
Serial.print("waarde bruin: ");
Serial.print(sensorValue1);
Serial.println("");
sensorValue2 = analogRead(sensorPin2);
Serial.print("waarde paars: ");
Serial.print(sensorValue2);
Serial.println("");
sensorValue3 = analogRead(sensorPin3);
Serial.print("waarde oranje: ");
Serial.print(sensorValue3);
Serial.println("");
sensorValue4 = analogRead(sensorPin4);
Serial.print("waarde geel: ");
Serial.print(sensorValue4);
Serial.println("");
sensorValue5 = analogRead(sensorPin5);
Serial.print("waarde blauw: ");
Serial.print(sensorValue5);
Serial.println("");
sensorValue6 = analogRead(sensorPin6);
Serial.print("waarde groen: ");
Serial.print(sensorValue6);
Serial.println("");
//elke bak heeft een eigen kleurcode
// bruin
if (sensorValue1 > 300) {
digitalWrite(outPin1, HIGH);
Serial.print("water bruin: ");
Serial.println("");
delay(2000);
digitalWrite(outPin1, LOW);
}
// paars
if (sensorValue2 > 270) {
digitalWrite(outPin2, HIGH);
Serial.print("water paars: ");
Serial.println("");
delay(2000);
digitalWrite(outPin2, LOW);
}
// oranje
if (sensorValue3 > 200) {
digitalWrite(outPin3, HIGH);
Serial.print("water oranje: ");
Serial.println("");
delay(2000);
digitalWrite(outPin3, LOW);
}
// geel
if (sensorValue4 > 180) {
digitalWrite(outPin4, HIGH);
Serial.print("water geel: ");
Serial.println("");
delay(2000);
digitalWrite(outPin4, LOW);
}
// blauw
if (sensorValue5 > 155) {
digitalWrite(outPin5, HIGH);
Serial.print("water blauw: ");
Serial.println("");
delay(2000);
digitalWrite(outPin5, LOW);
}
// groen
if (sensorValue6 > 250) {
digitalWrite(outPin6, HIGH);
Serial.print("water groen: ");
Serial.println("");
delay(2000);
digitalWrite(outPin6, LOW);
}
}
}
Advertisement
Re: watergeef systeem probleempje met timer
Heb je ook visvingers ? https://www.youtube.com/watch?v=P3gtNKRRVjA
Er is weinig op de sketch aan te merken. Misschien gaat de Arduino resetten.
Maak de variabelen die met millis() hebben te maken "unsigned long".
Wanneer je zo'n variabele een waarde geeft, dan kun 'UL' gebruiken om aan te geven dat het een unsigned long is.
Je kunt in setup() een tekst schrijven, dat weet je of de Arduino misschien per ongeluk gaat resetten.
Zijn de getallen van de sensors een beetje normaal ? Misschien dat daar storing in zit.
Er is weinig op de sketch aan te merken. Misschien gaat de Arduino resetten.
Maak de variabelen die met millis() hebben te maken "unsigned long".
Wanneer je zo'n variabele een waarde geeft, dan kun 'UL' gebruiken om aan te geven dat het een unsigned long is.
- Code: Alles selecteren
unsigned long previousMillis = 0;
unsigned long interval = 60000UL;
Je kunt in setup() een tekst schrijven, dat weet je of de Arduino misschien per ongeluk gaat resetten.
- Code: Alles selecteren
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.begin("Mijn super watergeef systeem sketch gaat van start. covfefe!");
...
Zijn de getallen van de sensors een beetje normaal ? Misschien dat daar storing in zit.
Re: watergeef systeem probleempje met timer
goede input. Hij blijft inderdaad resetten. Hoe kan ik dat beëindigen?
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: watergeef systeem probleempje met timer
De voeding van het geheel nazien en opsplitsen kan misschien soelaas bieden.
Re: watergeef systeem probleempje met timer
hi, de voeding leek mij met 12v 15a wel voldoende, ik heb echter een alleenstaande voeding voor de arduino gepakt. Helaas blijft hij hetzelfde doen. Ik vrees dus voor een nieuwe uno.
Re: watergeef systeem probleempje met timer
de relaisvoeding moet direct van de 12V gehaald worden, eventueel via een 7805 en zet een haakje om (current-previous)
je gebruikt long en unsigned door elkaar, allemaal UL maken. (en dat gaat mis na 25 minuten
je gebruikt long en unsigned door elkaar, allemaal UL maken. (en dat gaat mis na 25 minuten
paul deelen
shooter@home.nl
shooter@home.nl
Re: watergeef systeem probleempje met timer
Of heb ik gewoon een overflow van het geheugen door die serial.print opdrachten tussen de pinout high opdrachten? Een uno heeft niet zo heel veel geheugen.
Re: watergeef systeem probleempje met timer
Het is waarschijnlijk de voeding. Dat kunnen veel dingen zijn. Kun je vertellen hoe het aangesloten is ? Kun je er misschien een schets van maken, of een foto van maken.
Wanneer er bijvoorbeeld een GND verbinding niet goed is (bijvoorbeeld wel aangesloten maar op een verkeerde manier) dan kan een Arduino board zomaar gaan resetten. Of de voltage regulator knijpt de stroom af omdat die te warm wordt met 12V. Of er dendert een spanningspuls door je draden. Lange draden kunnen als een spoel gaan werken. Zo zijn er nog heel veel meer dingen die mis kunnen gaan.
Het belangrijkste is om geen grote stromen door het Arduino board te laten gaan, en alle GND's met elkaar verbinden, maar dan op zo'n manier dat de stroom die terug komt van kleppen of motors niet de Arduino kan verstoren.
Wanneer er bijvoorbeeld een GND verbinding niet goed is (bijvoorbeeld wel aangesloten maar op een verkeerde manier) dan kan een Arduino board zomaar gaan resetten. Of de voltage regulator knijpt de stroom af omdat die te warm wordt met 12V. Of er dendert een spanningspuls door je draden. Lange draden kunnen als een spoel gaan werken. Zo zijn er nog heel veel meer dingen die mis kunnen gaan.
Het belangrijkste is om geen grote stromen door het Arduino board te laten gaan, en alle GND's met elkaar verbinden, maar dan op zo'n manier dat de stroom die terug komt van kleppen of motors niet de Arduino kan verstoren.
Re: watergeef systeem probleempje met timer
ja een overflow zou zeker kunnen want je stuurt nogal wat tekst snel achter elkaar.
paul deelen
shooter@home.nl
shooter@home.nl
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: watergeef systeem probleempje met timer
Gooi alle vermogen vreters ervan af en vervang ze door een led (met weerstand) en en kijk of je code nu loopt.
12 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten