Nukkige Relais & domme codeur

Arduino specifieke Software
Gebruikers-avatar
Berichten: 11
Geregistreerd: 06 Sep 2015, 10:22

Nukkige Relais & domme codeur

Berichtdoor pjcvdpol » 06 Sep 2015, 10:37

Beste mensen,

Even korte introductie: Peter, rozenveredelaar, techniek-enthousiast, geen programmeur, handig met copy-paste-edit coderen; maar soms lukt dat niet, vandaar dit bericht.

Ik heb de onderstaande Sketch gemaakt met het voorbeeld uit de TimeAlarm library als voorbeeld. Ik wil dat twee relais NA elkaar een gegeven periode aan en dan weer uit schakelen:

Beide uit > Relais 1 aan voor x minuten > 1 off > 2 aan voor x minuten > 2 off > vervolg cyclus van b.v. 24 uur.


Dit krig ik niet voor elkaar"

Ik krijg: Both on > 1 off > 1 on > 2 off > 2 on

Als ik in de code HIGH en LOW omdraai krijg ik:

Both on > 1 off > 2 off

De relais zijn bedraad op het "normaal gesloten" poortje, sinds dat de status is voor het grootste gedeelte vd dag.

Wie kan iets zinnigs hierover zeggen?


<code>
/*
A time switch based on the TimeAlarm example
I want to switch realy 1 on for 5 seconds then go off after which
Relay 2 is witched on for 5 seconds and then off

However: this does not work as expected: both relays are ON immediately at 19:00

Eventually I want this to work with an RTC so I can use real time (I have a DS1307)
*/


#include <Time.h>
#include <TimeAlarms.h>

// Pins
#define RELAY1 6
#define RELAY2 7


void setup() {

// Start Serial & set pin to output
Serial.begin(9600);

//set relays
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);

// start clock
setTime(19,0,0,9,5,15); // set time to 19:00 Sep 5 2015 I want to use an RTC eventually......

// create the alarms
Alarm.alarmRepeat(19,0,5, FarRedOn); // 19:05 every day
Alarm.alarmRepeat(19,0,10,FarRedOff); // 19:00:10 every day

Alarm.alarmRepeat(19,0,11, RedOn); // 19:00:11 every day
Alarm.alarmRepeat(19,0,16, RedOff); // 19:00:16 every day

Alarm.timerRepeat(15, Repeats); // timer for every 15 seconds
Alarm.timerOnce(10, OnceOnly); // called once after 10 seconds

}

void loop() {

digitalClockDisplay();
Alarm.delay(1000); // wait one second between clock display


}
void FarRedOn(){
Serial.println("Far Red lights on");
digitalWrite(RELAY1,HIGH); // Turns ON Relay 1
delay(2000);
}


void FarRedOff(){
Serial.println("Far Red lights off");
digitalWrite(RELAY1,LOW); // Turns Relay 1 Off
}

void RedOn(){
Serial.println("Red lights on");
digitalWrite(RELAY2,HIGH); // Turns ON Relays 2
}


void RedOff(){
Serial.println("Red lights off");
digitalWrite(RELAY2,LOW); // Turns Relay 2 Off
}

void Repeats(){
Serial.println("15 second timer");
}

void OnceOnly(){
Serial.println("This timer only triggers once");
}


void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}

void printDigits(int digits)
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
</code>

Advertisement

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

Re: Nukkige Relais & domme codeur

Berichtdoor shooter » 06 Sep 2015, 21:16

de delay weghalen en als je een functie aanroept moet je wel () gebruiken.
zonder rtc of een andere sync zal het niet precies zijn.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 11
Geregistreerd: 06 Sep 2015, 10:22

Re: Nukkige Relais & domme codeur

Berichtdoor pjcvdpol » 07 Sep 2015, 16:49

Ik heb de delay weggehaald. Wat ik niet snap is dat het relais zodra ik stroom op de Arduino zet of op de reset knop druk allebei de kanalen aan zet; allebei de LED's gaan branden en ik hoor de relais klikken. Daarna komt de procedure op gang. Blijkbaar is dat een standaard controleding van het relais. Moet ik eerst een delay oid inbouwen om het relais in "rust stand" te laten komen? Ik bedoel: LED's & lampen uit?

m.a.w.: LED aan=lamp aan LED uit= lamp uit.

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

Re: Nukkige Relais & domme codeur

Berichtdoor shooter » 07 Sep 2015, 22:16

als de relais klapperen ja dat kan wel, hoe heb je ze aangesloten?
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 11
Geregistreerd: 06 Sep 2015, 10:22

Re: Nukkige Relais & domme codeur

Berichtdoor pjcvdpol » 08 Sep 2015, 12:48

Hoi Shooter,

Zie de bijlages!

IMG_1132.JPG
arduino + lamp +relais
IMG_1132.JPG (128.09 KiB) 8728 keer bekeken
IMG_1136.JPG
bedrading relais
IMG_1136.JPG (124.09 KiB) 8728 keer bekeken

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

Re: Nukkige Relais & domme codeur

Berichtdoor baco1978 » 08 Sep 2015, 13:52

Sommige pinnen worden tijdens het opstarten tijdelijk even hoog gemaakt.
Als je de relais op andere pinnen aansluit ben je van het probleem af.


// Pins
#define RELAY1 6
#define RELAY2 7

en dan de 6 & 7 aanpassen naar de pinnen die je daarna gebruikt
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 11
Geregistreerd: 06 Sep 2015, 10:22

Re: Nukkige Relais & domme codeur

Berichtdoor pjcvdpol » 08 Sep 2015, 18:40

Ik denk dat ik het zo voor elkaar heb! Ik heb een functie RelayOff toegevoegd die na 2 seconden alles dicht gooit, daarna de normale dagelijkse cyclus. Al ze uit zijn blijven ze uit de volgende dag, dus geen probleem. Tijden zijn kort, maar dat is voor deze proef nodig...

Klopt die redenering? Nu nog de RTC toevoegen. Wie kan me daarmee helpen?



Code: Alles selecteren
/*
A time switch based on the TimeAlarm example
I want to switch realy 1 on for 5 seconds then go off after which
Relay 2 is witched on for 5 seconds and then off

However: this does not work as expected: both relays are ON immediately at 19:00

Eventually I want this to work with an RTC so I can use real time (I have a DS1307)
*/


#include <Time.h>
#include <TimeAlarms.h>

// Pins
#define RELAY1  6                       
#define RELAY2  7


void setup() {
 
  // Start Serial & set pin to output   
  Serial.begin(9600);
 
 //set relays
  pinMode(RELAY1, OUTPUT);       
  pinMode(RELAY2, OUTPUT);
 
 // start clock
  setTime(19,0,0,9,5,15); // set time to 19:00 Sep 5 2015 I want to use an RTC eventually......

 // create the alarms

//switch relays to OFF
  Alarm.alarmRepeat(19,0,2, RelayOff);  // 19:00:2 every day

//Start normal daily cycle

 Alarm.alarmRepeat(19,0,10, FarRedOn);  // 19:00:10 every day
  Alarm.alarmRepeat(19,0,20,FarRedOff);  // 19:00:20 every day 
 
  Alarm.alarmRepeat(19,0,23, RedOn);  // 19:00:23 every day
  Alarm.alarmRepeat(19,0,33, RedOff);  // 19:00:33 every day

 Alarm.alarmRepeat(19,0,36, FarRedOn2);  // 19:00:36 every day
  Alarm.alarmRepeat(19,0,46,FarRedOff2);  // 19:00:46 every day 
 
  Alarm.alarmRepeat(19,0,49, RedOn2);  // 19:00:49 every day
  Alarm.alarmRepeat(19,0,59, RedOff2);  // 19:00:59 every day

 
 //Alarm.timerRepeat(15, Repeats);            // timer for every 15 seconds   
// Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds
 
}

void loop() {

  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display

 
}
//Relays OFF
void RelayOff(){
  Serial.println("All Off");
 digitalWrite(RELAY1,HIGH);           // Turns OFF Relay 1
digitalWrite(RELAY2,HIGH);             // Turns OFF Relay 2
  }

// Switch Lights 


  void FarRedOn(){
  Serial.println("Far Red lights on");
  digitalWrite(RELAY1,LOW);           // Turns ON Relay 1

   }
 
                                   
  void FarRedOff(){
  Serial.println("Far Red lights off");
  digitalWrite(RELAY1,HIGH);          // Turns Relay 1 Off
 
  }
 
  void RedOn(){
  Serial.println("Red lights on");
  digitalWrite(RELAY2,LOW);           // Turns ON Relays 2
 
  }

 
  void RedOff(){
  Serial.println("Red lights off");
  digitalWrite(RELAY2,HIGH);          // Turns Relay 2 Off
 
  }

 void FarRedOn2(){
  Serial.println("Far Red lights on");
  digitalWrite(RELAY1,LOW);           // Turns ON Relay 1
 

  }
 
                                   
  void FarRedOff2(){
  Serial.println("Far Red lights off");
  digitalWrite(RELAY1,HIGH);          // Turns Relay 1 Off
 
  }
 
  void RedOn2(){
  Serial.println("Red lights on");
  digitalWrite(RELAY2,LOW);           // Turns ON Relays 2
 
  }

 
  void RedOff2(){
  Serial.println("Red lights off");
  digitalWrite(RELAY2,HIGH);          // Turns Relay 2 Off

  }

void Repeats(){
  Serial.println("15 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once"); 
}


void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}


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

Re: Nukkige Relais & domme codeur

Berichtdoor shooter » 08 Sep 2015, 20:42

de relais moeten extern gevoed worden want je zit echt aanmaximum stroom.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 11
Geregistreerd: 06 Sep 2015, 10:22

Re: Nukkige Relais & domme codeur

Berichtdoor pjcvdpol » 09 Sep 2015, 07:49

shooter schreef:de relais moeten extern gevoed worden want je zit echt aanmaximum stroom.


maximum vanuit de Arduino zoals op de foto met USB stroom bedoel je? In de "echte" opstelling wil ik een 9 volt trafo (een wallwart, 500mA) op de arduino aansluiten. Dat zou voldoende moeten zijn toch?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Nukkige Relais & domme codeur

Berichtdoor nicoverduin » 09 Sep 2015, 16:39

De regulator op het board heeft een max van 500mA. Het enige wat je bereikt is een warmer wordende regulator.... Relais moet je apart voeden.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ehaloumave en 93 gasten