Automatisch plant bewaterings-systeem

algemene C code
Berichten: 19
Geregistreerd: 25 Apr 2016, 16:02

Automatisch plant bewaterings-systeem

Berichtdoor HighTechTuinier1986 » 25 Apr 2016, 16:36

Hallo allemaal,

Dit is mijn eerste post op dit forum, en ik kom gelijk aan met een probleem in mijn code. Ik ben begonnen aan een systeem om planten water te geven als ik niet in de buurt ben. Want dat is het laatste waar ik aan denk als ik thuis kom. Afijn, ik heb mijn hardware mooi ingebouwd, maar de uitvoering van de code laat een beetje het afweten. Namelijk het aansturen van de DC motor die verbonden staat met een L298N motor driver.

Het zit zo: de potgrond geeft mij een waarde die niet boven de 680 mag komen, dat zou betekenen in mijn code dat de grond aan het uitdrogen is. Daarop wordt de pomp aangestuurd.

Nu lijkt het alsof in de eerste 5 a 8 keer dat de cyclus loopt(de loop) dat de motor steeds korter "draait", na korte tijd draait hij zelfs amper tot niet.

Ik weet niet zeker wat hiervan de oplossing kan zijn, dus ik hoop dat een paar slimme lui weten waar het probleem precies ligt.
De code is misschien niet efficiënt geprogrammeerd, maar dat is omdat dit ook echt mijn eerste project is wou ik niet mijn project ingewikkelder maken dan nodig was.

Code: Alles selecteren
const int analogInPin0 = A0;
const int analogInPin1 = A1;
const int analogInPin2 = A2;
const int analogInPin3 = A3;
const int analogInPin4 = A4;
const int analogInPin5 = A5;

const int relayPin0 = 2;
const int relayPin1 = 3;
const int relayPin2 = 4;
const int relayPin3 = 5;
const int relayPin4 = 6;
const int relayPin5 = 7;

const int motorPinPWM = 8;
const int motorPin1 = 9;
const int motorPin2 = 10;

//input sensors
//1023 = droog
//686 = trigger pomp
//350 = kraan water

//any value above this should trigger the pump
const int triggerValue = 690;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(relayPin0, OUTPUT);
  pinMode(relayPin1, OUTPUT);
  pinMode(relayPin2, OUTPUT);
 // pinMode(relayPin3, OUTPUT);
 // pinMode(relayPin4, OUTPUT);
 // pinMode(relayPin5, OUTPUT);

   //motorPins
   pinMode(motorPinPWM, OUTPUT);
   pinMode(motorPin1, OUTPUT);
   pinMode(motorPin2, OUTPUT);
}

void resetValves(){
  digitalWrite(relayPin0,HIGH);
  digitalWrite(relayPin1,HIGH);
  digitalWrite(relayPin2,HIGH);
  //digitalWrite(relayPin3,HIGH);
  //digitalWrite(relayPin4,HIGH);
  //digitalWrite(relayPin5,HIGH);
  Serial.println("valves have been reset.");
}

void sensor1(){
    // print the results to the serial monitor:
    Serial.print("1 sensor = ");
    Serial.print(analogRead(analogInPin0));
    Serial.println();
   
    if (analogRead(analogInPin0) > 680){
      Serial.println("entering watering cycle");
      digitalWrite(relayPin0, LOW);
      digitalWrite(relayPin1, HIGH);
      digitalWrite(relayPin2, HIGH);

      Serial.println("engaging motor");
     
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      analogWrite(motorPinPWM, 80);
     
      //runtime of motor
      delay(5000);
     
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      analogWrite(motorPinPWM, 80);
 
      Serial.println("disengaging motor");     
     
      digitalWrite(relayPin0,HIGH);
      digitalWrite(relayPin1,HIGH);
      digitalWrite(relayPin2,HIGH);
    }
}

void sensor2(){
    // print the results to the serial monitor:
    Serial.print("2 sensor = ");
    Serial.print(analogRead(analogInPin1));
    Serial.println();
   
    if (analogRead(analogInPin1) > 680){
      Serial.println("entering watering cycle");
      digitalWrite(relayPin0, HIGH);
      digitalWrite(relayPin1, LOW);
      digitalWrite(relayPin2, HIGH);

      Serial.println("engaging motor");
     
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      analogWrite(motorPinPWM, 80);
     
      //runtime of motor
      delay(5000);
     
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      analogWrite(motorPinPWM, 80);
     
      Serial.println("disengaging motor");     
     
      digitalWrite(relayPin0,HIGH);
      digitalWrite(relayPin1,HIGH);
      digitalWrite(relayPin2,HIGH);
    }
}

void sensor3(){
    // print the results to the serial monitor:
    Serial.print("3 sensor = ");
    Serial.print(analogRead(analogInPin2));
    Serial.println();
   
    if (analogRead(analogInPin2) > 680){
      Serial.println("entering watering cycle");
      digitalWrite(relayPin0, HIGH);
      digitalWrite(relayPin1, HIGH);
      digitalWrite(relayPin2, LOW);

      Serial.println("engaging motor");
     
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      analogWrite(motorPinPWM, 80);
     
      //runtime of motor
      delay(5000);
     
      digitalWrite(motorPin1 , LOW);
      digitalWrite(motorPin2, LOW);
      analogWrite(motorPinPWM, 80);
     
      Serial.println("disengaging motor");     
     
      digitalWrite(relayPin0,HIGH);
      digitalWrite(relayPin1,HIGH);
      digitalWrite(relayPin2,HIGH);
    }
}

void loop() {
  resetValves();
  delay(500);
  sensor1();
  delay(500);
  sensor2();
  delay(500);
  sensor3();
  delay(9000);
}


Alvast bedankt voor de hulp!

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Automatisch plant bewaterings-systeem

Berichtdoor shooter » 25 Apr 2016, 19:49

je programma ziet er afgezien van commentaar prima uit, oke de delay daar moet je iets aan doen, maar ach voor een eerste is het eigenlijk prima.
en dat je pomp niet draait is normaal.
je kijkt elke 10,5 seconden naar de elke sensor, dan laat je de pomp 5 seconden draaien, en dan ga je naar de volgende.
je hebt dus een 5 cycli nodig om genoeg water bij de plant te krijgen. eigenlijk prima, want dan is er tijd om het water te laten zakken, op een gegeven moment zal het niveau genoeg zijn om de waarde onder de 680 te krijgen en dan wordt een bak gewoon niet bewaterd, precies wat je bedoeling is.

Eigenlijk zit je programma prima in mekaar en doet precies wat de bedoeling is.
alles mooi in functies gezet (je kunt nog wat slimmer omgaan met een array, maar dat komt nog wel)
paul deelen
shooter@home.nl

Berichten: 19
Geregistreerd: 25 Apr 2016, 16:02

Re: Automatisch plant bewaterings-systeem

Berichtdoor HighTechTuinier1986 » 29 Apr 2016, 15:30

bedankt voor de snelle reactie, dan zal het probleem wel in de hardware liggen. Ik zal wel ff verder kijken.

Bedankt je hulp!

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Automatisch plant bewaterings-systeem

Berichtdoor baco1978 » 02 Mei 2016, 22:40

mocht je er niet uitkomen, dan kan het helpen als je hier (duidelijke) foto's plaatst.
Dan kunnen we iig meekijken waar het hem in zit.
Met vriendelijke groet Arjan

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Bing [Bot] en 9 gasten