Acties:
  • 0 Henk 'm!

  • DurkVell
  • Registratie: Augustus 2011
  • Laatst online: 18-06 09:41
Al een tijdje ben ik bezig met een irrigatiesysteem om een aantal plantjes tijdens de vakantieperiode in leven te houden. Ik gebruik hiervoor een Arduino Nano die een pompje via een relaismodule aanstuurt op pin D12 en een vlotter (schakelaar) heeft verbonden op pin D2 (interrupt). Het idee is dat de Arduino eens in de zoveel tijd de pomp aanzet en vervolgens wacht tot de volgende bewaterbeurt. De vlotter moet een interrupt genereren wanneer de watervoorraad op is en kan zodoende het systeem uitzetten, een alert genereren, o.i.d. (pomp gaat kapot als ie doorblijft gaan zonder water).

De twee delen afzonderlijk werken prima: de schakeling zonder vlotterdeel werkt prima en ook werkt de schakeling goed wanneer alleen het vlotterdeel is aangesloten, dus zonder relais/pomp gedeelte.

Wanneer alles is aangesloten staat het relais aan en gaat de pomp aan, maar blijft aan wat er ook gebeurt. Er komt dan ook geen seriële activiteit meer vanuit de Arduino.

Het geheel werkt op 5V. Ik maak gebruik van deze: http://nl.aliexpress.com/...-Trigger/32615769150.html relaismodule. De vlotter: ene kant aan 5V, andere kant naar D2 en 10K naar Gnd. Gnd's zijn met elkaar verbonden.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* Informatie

*/

const int PompPin =  12;          // Pomp pin
// int PompState = LOW; 
int ledPin = 13;
int pinInterrupt = 2;
// volatile int state = LOW;

unsigned long previousMillis = 0;
long interval = 500; // aanpassen

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(PompPin, OUTPUT);  
  
  // Interrupt
  pinMode(2, INPUT);
  digitalWrite(2, LOW);
  attachInterrupt(0, tankleeg, HIGH);
  
  Serial.begin(9600);
  Serial.println("---------------------------------------");
  Serial.println("Irrigatieprogramma");
}

void loop()
{
   unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > interval){
    previousMillis = currentMillis;
    bewateren();
   }
 Serial.println ("We zijn aan het wachten");
 digitalWrite(ledPin, LOW);
 digitalWrite(PompPin, LOW);
 delay(2000);  
  }

void bewateren(){
   Serial.println ("We gaan bewateren");
   digitalWrite(PompPin, HIGH);   // pomp aan
   digitalWrite(ledPin, HIGH);   // led aan   
   delay(5000);
   Serial.println ("Klaar");
   digitalWrite(PompPin, LOW);    // pomp uit
   digitalWrite(ledPin, LOW);    // led uit   
}


void tankleeg(){
   Serial.println ("Oh jee!!! De tank is leeg!!!");
   Serial.println ("Stop het programma!!!");
   digitalWrite(PompPin, LOW);    // pomp uit
   delay(1000);
   while(1){
       digitalWrite(PompPin, LOW);    // pomp uit
   }
   //state = !state;
}


Iemand enig idee wat er niet klopt?

Edit: Ik zie dat het ook zonder het vlotterdeel het programma niet werkt. Als ik het interrupt deel in het programma uitschakel werkt het programma correct, maar dan zonder de interrupt natuurlijk. Ik zal de gehele schakeling opbouwen en in het programma het interrupt deel uitschakelen. Kijken wat er dan gebeurt.

[ Voor 5% gewijzigd door DurkVell op 15-06-2016 18:04 ]


Acties:
  • 0 Henk 'm!

  • donny007
  • Registratie: Januari 2009
  • Laatst online: 16-06 17:05

donny007

Try the Nether!

De functie tankleeg() wordt nergens aangeroepen in je code, of is dat gedaan om te testen?

Derp, had je interrupt niet gezien.

[ Voor 42% gewijzigd door donny007 op 15-06-2016 18:09 ]

/dev/null


Acties:
  • +3 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 28-05 19:39
Is het niet een stuk veiliger als je vlotter de pomp hardwarematig uitschakelt voor het geval je software vastloopt of niet werkt? Volgens mij is er geen enkele situatie waarbij je softwarematig je pomp wil laten draaien als er geen water is. Je zou dan de pomp rechtstreeks kunnen laten uitschakelen en dan in je software de pompstatus en vlotterstatus wel uitlezen zodat je weet als er een rechtstreekse override plaatsvond.

[ Voor 27% gewijzigd door johnkeates op 15-06-2016 18:11 ]


Acties:
  • 0 Henk 'm!

  • DurkVell
  • Registratie: Augustus 2011
  • Laatst online: 18-06 09:41
Daar zeg je me wat! Dank. Lijkt me ook een betere oplossing. Toch zou ik wel willen weten wat ik met bovenstaande verkeerd doe.

Edit: heb nu de vlotter tussen de voeding en de pomp gezet (aan/uit schakelaar) en de interrupt uitgeschakeld. Werkt nu prima. :)

[ Voor 34% gewijzigd door DurkVell op 15-06-2016 18:22 ]


Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 00:00

memphis

48k was toen meer dan genoeg.

Op die relais print mis ik iets van een buffer elko. Je doet er verstandig aan om over de + en - aansluiting een elko van 470~1000uF en een condensator van 100nF te zetten om de nodige inschakelpieken te dempen waardoor de Arduino niet vast loopt.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • DurkVell
  • Registratie: Augustus 2011
  • Laatst online: 18-06 09:41
Heel vaak lees ik over bufferelco's en het is zelden dat ik ze inzet. Ik gebruik een eenvoudige (zelfbouw) voeding (3,3V, -/+5V, -/+12V, 0-30V) en ga er altijd maar vanuit dat die ok werkt. Maar het kan best zijn dat veel van de verstoringen die ik merk, terug te voeren zijn op de voeding.
Hartelijk dank voor de reminder!

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 00:00

memphis

48k was toen meer dan genoeg.

Zo'n relais in en uitschakelen geeft nogal wat ellende voor gevoelige elektronica.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • RobinKuijp
  • Registratie: Februari 2014
  • Laatst online: 22-09-2024
memphis schreef op woensdag 15 juni 2016 @ 22:39:
Zo'n relais in en uitschakelen geeft nogal wat ellende voor gevoelige elektronica.
i.p.v. een relais zou je oook een logic level mosfet kunnen pakken. moet je wel de gate met een 100Ohm weerstandje naar ground leggen ook :).

Meow, meow I'm a cow


Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 00:00

memphis

48k was toen meer dan genoeg.

Als het iets van een 12v DC pomp is wel, als het een 220v pomp is zou ik een solid state relais pakken.

Overigens als het om een laagspanning DC pomp gaat doe je er ook verstandig aan om over het relais contact een condensator van 100nF te plaatsen, die zal de schakelvonk blussen.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • DurkVell
  • Registratie: Augustus 2011
  • Laatst online: 18-06 09:41
Het gaat om een 5-12V DC pompje. Ik zal het proberen met de C-tjes.

Allen bedankt zover.
Pagina: 1