Automatische voedingsregulaar

Re: Automatische voedingsregulaar

Berichtdoor Billie » vr apr 19, 2013 9:17 am

Pieter,

Dit is te doen met een potmeter, echter zijn dit ingewikkelde circuits om een setpoint mee in te stellen.
Als je met een potmeter de outputwaarde gaat aanpassen, zal de Serial Monitor ook niet meer correct werken.
vb... Nu geeft de Serial Monitor bij een hoge waarde aan dat de grond te droog is, bij een lage waarde dat de grond te nat is. Als je deze waarde doormiddel van een potmeter gaat aanpassen om hierdoor de relais vroeger of later te laten schakelen zal de output van de Serial Monitor anders reageren en heb je eigenlijk niets meer aan deze logging.
Een setpoint kan je dus beter in software gaan regelen. Hier zou je ook een potmeter voor kunnen gebruiken, maar dan moet ik mijn denkhoed een keer opzetten ;)

Groetjes Tom
Avatar gebruiker
Billie
Moderator
 
Berichten: 5226
Geregistreerd: ma jan 02, 2012 9:12 am
Woonplaats: Kwaadmechelen
Has thanked: 806 times
Been thanked: 1471 times

Re: Automatische voedingsregulaar

Berichtdoor Billie » vr apr 19, 2013 10:13 am

Had ff tijd, dus...Here goes...

Code: Selecteer alles
/*-----( Import needed libraries )-----*/
/*-----( Declare Constants )-----*/
#define RELAY_ON 0
#define RELAY_OFF 1
/*-----( Declare objects )-----*/
/*-----( Declare Variables )-----*/
#define Relay_1  2  // Arduino Digital I/O pin number
#define potMeter A6


int inputPin = 5;
int value = 0;
int setPoint = 0;

void setup()
{
  Serial.begin(9600);
  //-------( Initialize Pins so relays are inactive at reset)----
  digitalWrite(Relay_1, RELAY_OFF);

  //---( THEN set pins as outputs )---- 
  pinMode(Relay_1, OUTPUT);
  delay(4000); //Check that all relays are inactive at Reset
}

void loop()
{
  value = analogRead(inputPin);
  setPoint = analogRead(potMeter);

  if (value <= 250)
  {
    Serial.println("Grond is te nat");
  }

  if (value >= 251 && value <= 500)
  {
    Serial.println("Grond heeft genoeg vocht");
    //digitalWrite(Relay_1, RELAY_OFF);// set the Relay OFF
    //delay(4000); // wait see all relays OFF
  }

  if (value >= 501 && value <= 750)
  {
    Serial.println("Grond kan water gebruiken");
    //digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
    //delay(4000); // wait see all relays ON
  }

  if (value >= 751 && value <= 1023)
  {
    Serial.println("Grond is kurkdroog");
    //digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
    //delay(4000); // wait see all relays ON
  }
 
  if (value >= setPoint)
  {
    digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
  }
  else
  {
    digitalWrite(Relay_1, RELAY_OFF);// set relay OFF
  }


  Serial.print("Gemeten Waarde:  ");
  Serial.print(value);
  Serial.print(",  Setpoint:  ");
  Serial.println(setPoint);
  delay(1000);
}


Deze code zal dus de relais schakelen wanneer de gemeten waarde hoger of gelijk is aan de ingestelde setpoint...
Je zal zien dat dit nog niet helemaal de gewenste resultaten zal hebben. bvb wanneer de gemeten waarde rond de setpoint zit zal deze de relais snel aan en af schakelen waardoor de levensduur van je relais serieus verkort word. Om te testen kan je deze code dus al wel gebruiken, maar om deze in praktijk om te zetten zal je dus ook nog 'iets' anders nodig hebben...Ik laat je hierover even nadenken... kwestie van niet alles op een gouden dienbord te serveren ;)

Groetjes :D
Avatar gebruiker
Billie
Moderator
 
Berichten: 5226
Geregistreerd: ma jan 02, 2012 9:12 am
Woonplaats: Kwaadmechelen
Has thanked: 806 times
Been thanked: 1471 times

Re: Automatische voedingsregulaar

Berichtdoor pieterbl » vr apr 19, 2013 2:48 pm

Zojuist bij de post gekeken en zowaar is een nieuw onderdeel binnen: de temperatuur en relatieve luchtvochtigheid sensor voor de Arduino.

De volgende aansluiting gemaakt naar de Arduino:

Afbeelding

Vervolgens op internet zoeken, hoe ik het beste de code kan maken. Deze site gaf het beste inzicht. Dus zo gezegd zo gedaan: de DHT library downloaden, unzippen en in de library van de Arduino software plaatsen (C:\Program Files\arduino-1.0\libraries\DHT). Daarna deze code gekopieerd en aangepast:

#include <dht.h>
#define RELAY_ON 0
#define RELAY_OFF 1
/*-----( Declare objects )-----*/
/*-----( Declare Variables )-----*/
#define Relay_1  2  // Arduino Digital I/O pin number
#define dht_dpin A5 //no ; here. Set equal to channel sensor is on

dht DHT;
int Temperatuur = 0;
int RV = 0;

void setup(){
  Serial.begin(9600);
  delay(300);//Let system settle
  Serial.println("Humidity and temperature\n\n");
  delay(700);//Wait rest of 1000ms recommended delay before
  //accessing sensor
  //-------( Initialize Pins so relays are inactive at reset)----
  digitalWrite(Relay_1, RELAY_OFF);
  
//---( THEN set pins as outputs )----  
  pinMode(Relay_1, OUTPUT);
  delay(4000); //Check that all relays are inactive at Reset
}//end "setup()"

void loop(){
  //This is the "heart" of the program.
  DHT.read11(dht_dpin);

    Serial.print("Current humidity = ");
    Serial.print(DHT.humidity);
    Serial.print("% ");
    Serial.print("temperature = ");
    Serial.print(DHT.temperature);
    Serial.println("C ");
    delay(800);//Don't try to access too frequently... in theory
  //should be once per two seconds, fastest,
  //but seems to work after 0.8 second.
  
  Temperatuur = DHT.temperature;
  if (Temperatuur <= 25)
  {
      digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
      delay(4000); // wait see all relays ON
  }
  if (Temperatuur > 25)
  {
    digitalWrite(Relay_1, RELAY_OFF);// set the Relay ON
    delay(4000); // wait see all relays ON
  }

}// end loop()




Vervolgens getest met de verwarmingskabel die ik heb en zowaar het werkt!!! :mrgreen:

Billie schreef:bvb wanneer de gemeten waarde rond de setpoint zit zal deze de relais snel aan en af schakelen waardoor de levensduur van je relais serieus verkort word. Om te testen kan je deze code dus al wel gebruiken, maar om deze in praktijk om te zetten zal je dus ook nog 'iets' anders nodig hebben...Ik laat je hierover even nadenken.


De relais is nu wel redelijk vaak aan het schakelen (zeg maar om de paar minuten), wat is dan een verkorting van levensduur??? Hoe lang zou zo'n relais dan meekunnen?? Een teeltseizoen???
Avatar gebruiker
pieterbl
 
Berichten: 1155
Geregistreerd: vr nov 02, 2012 12:16 pm
Woonplaats: Renkum
Has thanked: 264 times
Been thanked: 345 times

Re: Automatische voedingsregulaar

Berichtdoor Billie » vr apr 19, 2013 3:19 pm

pieterbl schreef:De relais is nu wel redelijk vaak aan het schakelen (zeg maar om de paar minuten), wat is dan een verkorting van levensduur??? Hoe lang zou zo'n relais dan meekunnen?? Een teeltseizoen???

Nope, het zit 'm niet zozeer in het aantal schakelingen, maar eerder in hoe vaak. Zo'n relais word warm en op een gegeven moment houdt ie ermee op. Ben je er al achter wat je hier tegen kan doen, want zo laten is geen optie... :)
Ik zal je een tip geven. Ik heb het ook nodig gehad voor mijn pH algoritme...
Avatar gebruiker
Billie
Moderator
 
Berichten: 5226
Geregistreerd: ma jan 02, 2012 9:12 am
Woonplaats: Kwaadmechelen
Has thanked: 806 times
Been thanked: 1471 times

Re: Automatische voedingsregulaar

Berichtdoor Robert » vr apr 19, 2013 6:56 pm

Zo'n relais kan best een boel hebben hoor. Zorg er in ieder geval voor dat je geen grotere stoom schakelt dan aangegeven op het relais.
En zorg er softwarematig voor (d.m.v. een wachtlusje) dat je niet meerdere keren binnen een seconde schakelt.
Een solid state relais is anders misschien ook nog een goede optie, heb je geen last dat je contactpunten van je mechanische relais kunnen inbranden.
Avatar gebruiker
Robert
Moderator
 
Berichten: 2433
Geregistreerd: zo jan 01, 2012 4:04 pm
Woonplaats: Gld, NL
Has thanked: 270 times
Been thanked: 1283 times

Re: Automatische voedingsregulaar

Berichtdoor Billie » vr apr 19, 2013 7:32 pm

Solid State is inderdaad ook nog een optie, maar dan ben je eerder een probleem aan het oplossen ipv ze te voorkomen. En Solid State relais zijn een pak duurder in vergelijking met gewone relais. Toch geen slecht idee hoor.
De delay via software zou kunnen werken, maar in praktijk ga je dan nog altijd veel schakelen tenzij je de delay heel lang gaat instellen, waardoor de rest van je programma tijdens deze delay niets doet...Maar je komt in de buurt...De oplossing van Pieter zijn probleem zit 'm dus in de software... Waarom schakelt de relais zo snel over en weer?? Wanneer de gemeten waarde de setpoint bereikt en hier rond heen schommelt, dan klikt de relais aan/uit/aan/uit... Om dit te voorkomen moet je in de programmatie voorzien dat de setpoint overschreden mag worden tot een bepaald percentage. Dit percentage noemt men een Hysterie en wordt heel vaak gebruikt in PID controllers en andere schakelingen waar stabiliteit belangrijk zijn.
Dus wanneer je de setpoint bvb op 500 zet en de hysterie op 10%, dan zal de pomp aanschakelen wanneer er 550 gemeten word en uitschakelen wanneer de waarde terug 500 is... Zo schakelt de relais zo optimaal mogelijk en heb je geen andere hardware nodig dan reeds aangekocht.
Het programmeren van dit zal wel een ander werkje zijn. Ik heb er de eerste keer een week of drie aan gewerkt om een slecht draaiende bètaversie geprogrammeerd te krijgen...Uiteindelijk met een hoop debugging is het me toch gelukt om het algoritme geschreven te krijgen...
Avatar gebruiker
Billie
Moderator
 
Berichten: 5226
Geregistreerd: ma jan 02, 2012 9:12 am
Woonplaats: Kwaadmechelen
Has thanked: 806 times
Been thanked: 1471 times

Re: Automatische voedingsregulaar

Berichtdoor inca berry » vr apr 19, 2013 8:38 pm

Uhh ??? :shock: :shock: :shock:

JA JA
Afbeelding

Afbeelding KCBS Certified BBQ Judge
Avatar gebruiker
inca berry
Moderator
 
Berichten: 769
Geregistreerd: ma jan 02, 2012 11:50 pm
Woonplaats: Ederveen
Has thanked: 41 times
Been thanked: 206 times

Re: Automatische voedingsregulaar

Berichtdoor pieterbl » vr apr 19, 2013 9:07 pm

Hmm interessant allemaal, de oplossingen klinken mij logisch!!

Ik had nu de sensor getest, puur omdat het de eerste keer was met deze dht11 sensor. De kamertemperatuur was 20°C en het verwarmingskoort bracht dit naar 25°C, daarboven werd hij uitgeschakeld, dus dan blijft de temperatuur continue schommelen tussen de 25&26°C en schakelt het relais ook bijna continue. Dat was puur om te testen, optimalisatie volgt dus nog op basis van jullie nuttige aanwijzingen.

Zojuist de hele schakeling in een wandbehuizing buiten getest op een droog substraat. Het werkte goed totdat ik klaar was met filmen (zal binnenkort filmpje posten) toen bleef mijn pomp continu schakelen. Bleek dat mijn kabels van de sensor door het bewegen en versteken van de sensor wat nat waren geworden, dus foutieve meetwaarde. Kabels vervangen en nu werkt het weer.

Wil gelijk testen of deze schakeling (in wandbehuizing) en de sensor (in vochtig substraat) de temperatuur van vannacht aankunnen. Denken jullie dat dat goed gaat??? :mrgreen: Moet toch een beetje voorbereid zijn op ijsheiligen :lol: :mrgreen:
Avatar gebruiker
pieterbl
 
Berichten: 1155
Geregistreerd: vr nov 02, 2012 12:16 pm
Woonplaats: Renkum
Has thanked: 264 times
Been thanked: 345 times

Re: Automatische voedingsregulaar

Berichtdoor scoville » vr apr 19, 2013 10:32 pm

van electronica heb ik zelf niet veel kaas gegeten, maar je maakt je code een stuk robuster door er if () {...}else if (){...}else{...} van te maken. In principe is je code dan sneller (doet er niet echt toe in dit geval, je processor heeft genoeg rekenkracht om je taak uit te voeren). Belangrijkste voordeel is dat je minder snel een foutje maakt en een mooi gedefinieerde structuur hebt (met één enkele else{...} waar je de afhanling doet in geval je een niet verwachtte waarde ontvangt, zoals je bijvoorbeeld kan verwachten van een kapotte sensor).
scoville
 
Berichten: 36
Geregistreerd: ma jan 07, 2013 3:16 pm
Has thanked: 2 times
Been thanked: 2 times

Re: Automatische voedingsregulaar

Berichtdoor Robert » vr apr 19, 2013 11:07 pm

pieterbl schreef: Bleek dat mijn kabels van de sensor door het bewegen en versteken van de sensor wat nat waren geworden, dus foutieve meetwaarde. Kabels vervangen en nu werkt het weer.


Mijn voorspelling is inmiddels bewezen :D
Avatar gebruiker
Robert
Moderator
 
Berichten: 2433
Geregistreerd: zo jan 01, 2012 4:04 pm
Woonplaats: Gld, NL
Has thanked: 270 times
Been thanked: 1283 times

VorigeVolgende

Keer terug naar Experimenten

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast