Een simpel bewaterings systeem.

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 11
Geregistreerd: 03 Nov 2019, 03:51

Een simpel bewaterings systeem.

Berichtdoor reemster » 03 Nov 2019, 03:54

beste forum leden.
ik ben al een tijdje met arduino bezig en het lukt mij niet om om een eigen code te schrijven.

maar voor veel projectjes was dat ook niet nodig. want de code stond gewoon online

graag zou ik een automatische hydratatie systeem willen maken met een arduino. helaas vindt ik alleen een code die maar 1 moister sensor heeft en moet er eigenlijk vier hebben.

wie kan mij helpen deze code aan te passen?
of wie heeft toevallig de juiste code
____________________________________________________________________
int Relay = 13;
int sensor = 8;
int val;
void setup() {
pinMode(13,OUTPUT); //Set pin 13 as OUTPUT pin, to send signal to relay
pinMode(8,INPUT); //Set pin 8 as input pin, to receive data from Soil moisture sensor.
}

void loop() {
val = digitalRead(8);
if(val == LOW)
{
digitalWrite(13,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
}
else
{
digitalWrite(13,HIGH); //if soil moisture sensor provides HIGH value send HIGH value to relay
}
delay(400);
}
----------------------------------------------------------------------------------------------------------------

Wat moet ik doen om met 4 sensors 4 relays aan te sturen ?

Advertisement

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

Re: Een simpel bewaterings systeem.

Berichtdoor shooter » 03 Nov 2019, 12:44

cpp code
____________________________________________________________________
int Relay1 = 13;
int sensor1 = 8;
int val1;
void setup() {
pinMode(Relay1,OUTPUT); //Set pin 13 as OUTPUT pin, to send signal to relay
pinMode(sensor1,INPUT); //Set pin 8 as input pin, to receive data from Soil moisture sensor.
}

void loop() {
val1 = digitalRead(sensor1);
if(val1 == LOW)
{
digitalWrite(Relay1,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
}
else
{
digitalWrite(Relay1,HIGH); //if soil moisture sensor provides HIGH value send HIGH value to relay
}
delay(400);
}

zo en nu uitbreiden, maar dat kun je zelf doen.
(je moet er wel wat van leren natuurliojk.
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 03 Nov 2019, 03:51

Re: Een simpel bewaterings systeem.

Berichtdoor reemster » 04 Nov 2019, 06:46

Sper leuk dat je op een leerzame manier wil helpen.

ik heb al een aanvulling gevonden en natuurlijk de code al aangepast .



==================================================================================================================

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display

int Relay1= 13;
int Relay2= 12;
int Relay3= 11;
int Relay4= 10;
int Relay5= 9;
int Relay6= 8;

int sensor1= 7;
int sensor2= 6;
int sensor3= 5;
int sensor4= 4;
int sensor5= 3;
int sensor6= 2;

int val;
void setup() {
pinMode(13,OUTPUT); //Set pin 13 as OUTPUT pin, to send signal to relay
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);


pinMode(7,INPUT); //Set pin 8 as input pin, to receive data from Soil moisture sensor.
pinMode(6,INPUT);
pinMode(5,INPUT);
pinMode(4,INPUT);
pinMode(3,INPUT);
pinMode(2,INPUT);

}

void loop() {
val = digitalRead(7);
if(val == LOW)
{
digitalWrite(13,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
Serial.println("Grond vochtig,relay 1 uit");

}
else
{
digitalWrite(13,HIGH); //if soil moisture sensor provides HIGH value send HIGH value to relay
Serial.println("Grond droog,relay 1 aan kijk naa daley tijd ");

}
delay(4000);

val = digitalRead(6);
if(val == LOW)
{
digitalWrite(12,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
Serial.println("Grond vochtig,relay 2 uit");
}
else
{
digitalWrite(12,HIGH);//if soil moisture sensor provides HIGH value send HIGH value to relay
Serial.println("Grond droog,relay 2 aan kijk naa daley tijd ");

}
delay(400);

val = digitalRead(5);
if(val == LOW)
{
digitalWrite(11,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
Serial.println("Grond vochtig,relay 3 uit");
}
else
{
digitalWrite(11,HIGH);//if soil moisture sensor provides HIGH value send HIGH value to relay
Serial.println("Grond droog,relay 3 aan kijk naa daley tijd ");
}
delay(4000);

val = digitalRead(3);
if(val == LOW)
{
digitalWrite(9,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
Serial.println("Grond vochtig,relay 3 uit");
}
else
{
digitalWrite(9,HIGH);//if soil moisture sensor provides HIGH value send HIGH value to relay
Serial.println("Grond droog,relay 3 aan kijk naar daley tijd ");

}
delay(4000);

val = digitalRead(2);
if(val == LOW)
{
digitalWrite(8,LOW); //if soil moisture sensor provides LOW value send LOW value to relay
Serial.println("Grond vochtig,relay 4 uit");
}
else
{
digitalWrite(8,HIGH);//if soil moisture sensor provides HIGH value send HIGH value to relay
Serial.println("Grond droog,relay 4 aan kijk naardaley tijd ");
}
delay(4000);


=======================================================================================================================


Nu ben ik aan het uitzoeken hoe ik een lcd scherm kan toevoegen.

Enige tips?

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

Re: Een simpel bewaterings systeem.

Berichtdoor shooter » 08 Nov 2019, 22:52

voor dat je dat doet eerst de delay eruit halen en gaan werken met een timer op millis() dan kun je simpel een LCD toevoegen.
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 03 Nov 2019, 03:51

Re: Een simpel bewaterings systeem.

Berichtdoor reemster » 13 Nov 2019, 01:09

Ik heb toch besloten er geen lcd aan op aan te sluiten,omdat ik er eigenlijk toch geen meer waarden in zie.
nu is het wachten op sensors en hopen dat het werkt.

Berichten: 11
Geregistreerd: 03 Nov 2019, 03:51

Re: Een simpel bewaterings systeem.

Berichtdoor reemster » 16 Nov 2019, 10:08

Wat ik tot nu toe geleerd heb is dat zodra 1 delay bezig de ander delay moet wachten.

Dit lijkt mij eigen lijk geen slecht idee zoo voor kom ik namelijk dat 4 pompen tegelijk aan springen de de voeding dus niet overbelast wordt.(het kleine voordeeltje als je een noob fout maakt ).

Klopt mijn theorie ?


P.s Aangezien jullie toch de mensen zijn met de ervaring ga ik nog een variant maken met millis

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Een simpel bewaterings systeem.

Berichtdoor Koepel » 16 Nov 2019, 11:32

Ja, dat klopt wel zo ongeveer.
Tijdens een delay() kun je niets anders doen. De sketch wacht totdat die delay() over is, en dan gaat de sketch weer verder.

Tijdens een delay lopen de interrupts wel gewoon door, dus er worden wel gegevens via een seriële poort ontvangen (totdat de interne buffer vol is). Die gegevens worden niet in je sketch verwerkt zolang de delay() bezig is.

Een sketch met delay() is bijvoorbeeld:
Doe dit, dan dat, vervolgens zus, en daarna zo. Maar doe altijd één ding tegelijkertijd.

Een sketch met millis() is bijvoorbeeld:
Hou continue in de gaten of er op een knop wordt gedrukt, update een display met een vast interval, laat meerdere leds of motors onafhankelijk van elkaar knipperen of draaien. Doe dat allemaal tegelijkertijd, al is het honderden dingen tegelijkertijd (https://github.com/Koepel/Fun_with_millis/blob/master/millis_overdone.ino).

Berichten: 11
Geregistreerd: 03 Nov 2019, 03:51

Re: Een simpel bewaterings systeem.

Berichtdoor reemster » 16 Nov 2019, 11:35

nou zo als gezegd heb ik de code nog eens bekeken en heb een nieuwe geschreven.

Zou het een kans van slagen hebben. ik wil namelijk 4 sensors toe voegen.


Code: Alles selecteren
int sensor1 =A0;
int sensorValue1;
int limit1 = 300;
int relay1= 0;

unsigned long previousMillis;
const unsigned long interval = 4000;
bool enabled = false;

void setup()
{
  pinMode( sensor1, INPUT_PULLUP);
  pinMode( relay, OUTPUT);
}

void loop()
{
  unsigned long currentMillis = millis();
  sensorValue1 = analogRead(sensor1);

   if (sensorValue1<limit1) {
 digitalWrite(0, HIGH);
 }
 else {
 digitalWrite(0, LOW);
 }
 
  if( digitalRead(relay1) == LOW)  // low is active
  {
    digitalWrite( relay1), HIGH);  // turn on pump
    previousMillis = currentMillis;
    enabled = true;        // turn on software timer
  }
 
 
   if( enabled)      // software timer is active ?
  {
    if( currentMillis - previousMillis >= interval)
    {
      digitalWrite( relay, LOW);  // turn off led
      enabled = false;     // stop software timer
    }
  }
}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Een simpel bewaterings systeem.

Berichtdoor Koepel » 16 Nov 2019, 11:57

Dat gaat de goede kant op.

In de Arduino IDE kun je op Ctrl+T drukken of in het menu: Hulpmiddelen / Automatische opmaak
Dan wordt de tekst van de sketch netjes gezet. De stijl die gekozen wordt kun je aanpassen met een extra configuratiebestand als je wilt.

Probeer ook zelf om een puinhoop te vermijden:
Het is gemakkelijker om een pin nummer met 'const' te doen en iets met "pin" in de naam te zetten.
Ben je de pin waar de knop aan hangt vergeten te benoemen ?

Code: Alles selecteren
const int sensor1Pin = A0;
const int relay1Pin = 0;   // kies een andere pin als je een Uno hebt
const int button1Pin = 8;   //  vergeten ?


Heb je een Arduino Uno ? Dan wordt pin 0 en 1 gebruikt om de sketch te uploaden en voor de seriële monitor. Gebruik pin 2 en hoger.


Dit stukje:
Code: Alles selecteren
  sensorValue1 = analogRead ( sensor1Pin );

  if ( sensorValue1 < limit1 )
  {
    digitalWrite ( relay1Pin, HIGH );
  }
  else
  {
    digitalWrite ( relay1Pin, LOW );
  }


Dat wordt heel vaak uitgevoerd. Het relais kan gaan jitteren. Je kunt hysteresis aanbrengen of het met millis() bijvoorbeeld iedere 30 seconden doen.

Hysteresis:
Bijvoorbeeld bij een gebouw met zonneschermen. Dan de zonneschermen pas uit doen als de zonsterkte boven de 60% komt, en de zonnenschermen pas dicht doen als de zon onder de 40% komt. Op die manier wordt voorkomen dat de zonneschermen heel de tijd in- en uitgaan als het kantelpunt 50% zou zijn en de zonsterkte zo rond de 50% zou zitten.

Als je meerdere software timers met millis() hebt, dan heeft elk een eigen 'previousMillis' nodig.

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

Re: Een simpel bewaterings systeem.

Berichtdoor shooter » 16 Nov 2019, 13:21

koepel heeft helemaal gelijk, maak ook een timer als notenabled en nu mis ik natuurlijk de andere pinnummers en procedures.
paul deelen
shooter@home.nl

Volgende

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten