Pages: [1] 2   Go Down
Author Topic: arduino met relay control en Timer restart how to do?  (Read 3207 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hoi

fijn dat er ook een NL gedeelte is.

Hoop dat er arduino mensen zijn die me hier mee zouden kunnen helpen

Gelijk ook mijn eerste post hier op het forum.

Ik heb code geschreven op basis van blinky smiley-razz

wat ik doe is dat ik een relay board heb hangen aan de digital pins OUT ( 4 stuks ) en zo kan ik deze HIGH en LOW schakelen

Ik heb een Loop via 5 volt en weerstand naar een digital pin IN welke via een gesloten Loopje HIGH of LOW is.
in die LOOP zitten een aantal meet apparaten die zelf een uitgang breken.
als deze dan word gebroken is de LOOP niet meer aanwezig en dus zal de arduinoe een relay schakelen.

dit werkt

maar wat ik nog wil doen is dat na verloop van tijd hij stopt met schakelen en een 2e relay schakeld wat de betreffende apparaten weer zonder stroom zet en daarmee uitschakeld.

dus de loop loopt bijvoorbeeld 1 uur en na 1 uur word ergens in de loop deze verbroken.
dit mag dan 30 min of zo gebeuren waarna de arduino een andere relay schakeld om de stroom naar deze app. uit te schakelen.

ik weet dat bij basic ( de duinomite mega ) je setimer = 0 doet en dan later IF timer < 30 etc etc

maar hoe doe ik dit met de arduino?
 

heb wel al zitten zoeken maar als ik wat voorbeelden maar heb er nog niet echt wat uit kunnen vinden.

thx
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1731
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

LG040
welkom op het forum.
Kijk eens naar http://arduino.cc/playground/Code/SimpleTimer
Daar kan je zo mee aan de slag.
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

LG040
welkom op het forum.
Kijk eens naar http://arduino.cc/playground/Code/SimpleTimer
Daar kan je zo mee aan de slag.
Met vriendelijke groet
Jantje
thx
ben ik al mee aan de slag gegaan maar krijg met de sample code gewoon copy past in de sketch window foutmelding : simpletimer does not name a type

de code die ik gebruik is volgende ( kom dus niks verder )

--

    /*
     * SimpleTimerAlarmExample.pde
     *
     * Based on usage example for Time + TimeAlarm libraries
     *
     * A timer is called every 15 seconds
     * Another timer is called once only after 10 seconds
     * A third timer is called 10 times.
     *
     */
     
    #include <SimpleTimer.h>
     
    // There must be one global SimpleTimer object.
    // More SimpleTimer objects can be created and run,
    // although there is little point in doing so.
    SimpleTimer timer;
     
    // function to be called repeatedly
    void RepeatTask() {
      Serial.println("15 second timer");       
    }
     
    // function to be called just once
    void OnceOnlyTask() {
      Serial.println("This timer only triggers once"); 
    }
     
    // function to be called exactly 10 times
    void TenTimesTask() {
      static int k = 0;
      k++;
      Serial.print("called ");
      Serial.print(k);
      Serial.println(" / 10 times.");
    }
     
    // print current arduino "uptime" on the serial port
    void DigitalClockDisplay() {
      int h,m,s;
      s = millis() / 1000;
      m = s / 60;
      h = s / 3600;
      s = s - m * 60;
      m = m - h * 60;
      Serial.print(h);
      printDigits(m);
      printDigits(s);
      Serial.println();
    }
     
    //
    // utility function for digital clock display:
    // prints preceding colon and leading 0
    //
    void printDigits(int digits) {
      Serial.print(":");
      if(digits < 10)
        Serial.print('0');
      Serial.print(digits);
    }
     
    void setup() {
      Serial.begin(9600);
     
      // welcome message
      Serial.println("SimpleTimer Example");
      Serial.println("One timer is triggered every 15 seconds");
      Serial.println("Another timer is set to trigger only once after 10 seconds");
      Serial.println("Another timer is set to trigger 10 times");
      Serial.println();
     
      // timed actions setup
      timer.setInterval(15000, RepeatTask);
      timer.setTimeout(10000, OnceOnlyTask);
      timer.setInterval(1000, DigitalClockDisplay);
      timer.setTimer(1200, TenTimesTask, 10);
    }
     
    void loop() {
      // this is where the "polling" occurs
      timer.run();
    }
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1731
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Als je een library gebruikt moet je die wel eerst downloaden waar arduino die kan vinden.
Lees meer hierover op http://www.arduino.cc/en/Hacking/Libraries vooral se sectie over "User-created libraries"
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Als je een library gebruikt moet je die wel eerst downloaden waar arduino die kan vinden.
Lees meer hierover op http://www.arduino.cc/en/Hacking/Libraries vooral se sectie over "User-created libraries"
Met vriendelijke groet
Jantje
ik heb deze instructies gevolgd dat zou toch goed moeten zijn?

Installation

    Create a folder named SimpleTimer in you sketchbook/libraries folder.
    Copy-n-paste the code for SimpleTimer.h and SimpleTimer.cpp into your favourite text editor, and save those two files under the SimpleTimer folder you just created.
    Launch or restart the Arduino IDE to let it detect the new library.
    Copy-n-paste the example code (see below) to get you started with the library.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ben er al

had Simpletimer.cpp staan in plaats van SimpleTimer.cpp  pfff hoofdletter gevoelig.

goed hij doet het nu

even zien wat ik er mee aan kan.
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1731
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hoofdletter gevoelig inderdaad  smiley-cool
Veel geluk
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

is niet echt wat ik zoek of ik begrijp het niet helemaal...

wat ik wil is dat een relay geschakeld word en als een bepaalde tijd over verstreken deze word weer word losgelaten
dus wilde een digitale pin gebruiken om de relay te schakelen en dan als er 40min voorbij waren deze pin dan weer uit te zetten..

heb dit allemaal al in mmbasic draaien op een druinomite maar dat even omzetten naar de arduino is me effe wel wat zeg...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

zoiets ongeveer?
Code:
void setup()
{

unsigned long startime = 0;
unsigned long endtime = 0;
int relaispin = 10; // relais aan pin 10
int inpin = 9; // input aan pin 9
}

void loop()
{
if (inpin =1 ) { // input hoog
digitalWrite(relaispin, HIGH);         // relais schakelen
startime = millis(); // huidige 'tijd'
endtime = starttime + 2400000;     // gewenste vertragingstij = 40minuten * 60 * 1000
}
if (millis() >= endtime) { //tijd verstreken?
digitalWrite(relaispin, LOW);    //relais afschakelen
}
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

thx
ben hier naar aan het kijken maar krijg een inpin is not declared in this scope
melding

moet ik hier weer een library voor laden en welke dan?

als ik het goed begrijp weet hij niet wat inpin is maar met de int pin = 9 heb je dat toch gedaan?
ergens een typo?

--edit--

zo compiled hij wel zonder errors..
even testen naar board to en dan ledpin13 gebruiken als simulatie relay switch
--

void setup()
{

unsigned long starttime = 0;
unsigned long endtime = 0;
int relaispin = 10;          // relais aan pin 10
int inpin = 9;            // input aan pin 9
}

void loop()
   {
  unsigned long starttime = 0;
  unsigned long endtime = 0;
  int relaispin = 10;          // relais aan pin 10
  int inpin = 9;
  if (inpin = 1 )
  {            // input hoog
digitalWrite(relaispin, HIGH);         // relais schakelen
starttime = millis();         // huidige 'tijd'
endtime = starttime + 2400000;     // gewenste vertragingstij = 40minuten * 60 * 1000
   }
if (millis() >= endtime) {       //tijd verstreken?
digitalWrite(relaispin, LOW);       //relais afschakelen
      }
}

« Last Edit: September 05, 2012, 03:51:50 am by LG046 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

had gehoopt met de onderstaande code na 5 sec de onboard led uit te schakelen maar er gebeurd niks
led blijft branden
--

void setup()
{

unsigned long starttime = 0;
unsigned long endtime = 0;
int relaispin = 13;          // relais aan pin 13 onboard led
int inpin = 3;            // input aan pin 3
pinMode(relaispin, OUTPUT);
}

void loop()
   {
  unsigned long starttime = 0;
  unsigned long endtime = 0;
  int relaispin = 13;            // relais aan pin 10
  int inpin = 9;
  if (inpin = 1 )   {                     // input hoog
digitalWrite(relaispin, HIGH);           // relais in schakelen
  }
  if (inpin = 0 )   {
digitalWrite(relaispin, LOW);           // relais uit schakelen   
starttime = millis();              // huidige 'tijd'
endtime = starttime + 5000;             // gewenste vertragingstij voor test 5 sec = 40minuten * 60 * 1000
   }
if (millis() >= endtime) {       //tijd verstreken?
digitalWrite(relaispin, LOW);       //relais afschakelen
      }
}

« Last Edit: September 05, 2012, 04:09:16 am by LG046 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok heeft even wat uurtjes experimenteren gekost maar het werkt in basis nu.

nu nog alleen de code aanpassen voor de verschillende relays uitgangen en ik ben up and running


hier is de code tot nu toe

wat ik vreemd vind is als ik delay(500) ( of andere hogere waarde ) niet erin zet dan werkt het niet , zet ik hem wel erin dan na ~10 sec blijft de led uit ongeacht de input status.

--
/*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital  
 pin 13, when pressing a pushbutton attached to pin 2.
 
 
 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.
 
 
 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe
 
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
const int ledPin2 =  14;      // the number of the LED pin
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);  
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  unsigned long starttime = 0;
  unsigned long endtime = 0;  
  starttime = millis();              // huidige 'tijd'
  endtime = 10000;             // gewenste vertragingstij voor test 5 sec = 40minuten * 60 * 1000

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (millis() > endtime) {       //tijd verstreken?
digitalWrite(ledPin, LOW);        //relais afschakelen
delay(500);
}
  else {
    // turn LED off:
    digitalWrite(ledPin2, LOW);
  }
  if (buttonState == HIGH) {    
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}
« Last Edit: September 05, 2012, 06:12:08 am by LG046 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok heeft even wat uurtjes experimenteren gekost maar het werkt in basis nu.

nu nog alleen de code aanpassen voor de verschillende relays uitgangen en ik ben up and running


hier is de code tot nu toe

wat ik vreemd vind is als ik delay(500) ( of andere hogere waarde ) niet erin zet dan werkt het niet , zet ik hem wel erin dan na ~10 sec blijft de led uit ongeacht de input status.

-
  unsigned long starttime = 0;
  unsigned long endtime = 0;  
  starttime = millis();              // huidige 'tijd'
  endtime = 10000;             // gewenste vertragingstij voor test 5 sec = 40minuten * 60 * 1000

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (millis() > endtime) {       //tijd verstreken?
digitalWrite(ledPin, LOW);        //relais afschakelen
delay(500);
}


millis() is een altijd optellende waarde welke aangeeft hoelang het huidige programma aan het lopen is. Deze waarde loopt over na 4294967296 ms (+/- 50 dagen.
Je moet daarom je eindtijd bepalen door de huidige waarde van millis() te nemen en daar de gewenste vertraging bij op te tellen.
In Uw code zal het 1x werken, nl. na 10 seconden. Daarna is millis() 10000 voorbij en zal het een dag of 50 later, als millis voorbij 4294967295 gaat en terug op 0 komt, nog eens werken...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dit is versie 1.1 met aanpassing zoals jij voorsteld
wat vind je hier van?



 
 //This example code is in the public domain.
 
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
const int ledPin2 =  14;      // the number of the LED pin
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);   
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  digitalWrite(ledPin, HIGH);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == LOW) {     
    // turn LED on:   
    balance() ; 
  }
  else {
    // turn LED off:
    loop() ;
  }

}

void balance()
{
    // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  unsigned long starttime = 0;
  unsigned long endtime = 0; 
  starttime = millis();              // set current time of system 
  endtime = starttime + 5000;             // timer in miliseconds test set to 5 seconden

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (millis() > endtime) {       //over time
digitalWrite(ledPin, LOW);        //relais off
delay(500);
}
  else {
    // turn LED off:
    digitalWrite(ledPin2, LOW);
  }
  if (buttonState == HIGH) {     
    // turn LED on:   
    digitalWrite(ledPin, HIGH); 
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ben nog even terug gegaan naar jou code

ik kreeg daarbij een foutmelding
iets met scope.

heb deze nu zonder compile errors maar als ik hem dan upload naar het board schakeld led13 de onboard led niet uit na 5 sec

--

void setup()
{

unsigned long startime = 0;
unsigned long endtime = 0;
int relaispin = 13;          // relais aan pin 10
int inpin = 3;            // input aan pin 9
}

void loop()
   {
  unsigned long starttime = 0;
unsigned long endtime = 0;
  int relaispin = 13;
  int inpin = 3;
  pinMode(relaispin, OUTPUT);
  pinMode(inpin, INPUT);
if (inpin = 1 ) {            // input hoog
digitalWrite(relaispin, HIGH);         // relais schakelen
starttime = millis();         // huidige 'tijd'
endtime = starttime + 5000;     // gewenste vertragingstij = 40minuten * 60 * 1000
   }
if (millis() >= endtime) {       //tijd verstreken?
digitalWrite(relaispin, LOW);       //relais afschakelen
      }
}
Logged

Pages: [1] 2   Go Up
Jump to: