RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#1 von Bubikopf , 24.01.2018 19:25

Hallo zusammen,
mein Arduino-Startpaket ist eingetroffen:
- Arduino Nano
- Relaiskarte
- Verbindungleitungen w/w

Hier nun mein erster Versuch, mittels eines Relais das Mühlrad meiner Mühlenbäckerei nach zufällig ermittelten Zeitabständen ein- bzw. auszuschalten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 

//Ein Relais soll in zufälligen Zeitabständen ein- bzw. ausgeschaltet werden
 

int RELAIS=2; //Am Ausgang d2 wird die Relaisplatine angeschlossen
 
void setup() {

pinMode(RELAIS,OUTPUT); //RELAIS ist als Ausgang definiert
 
}
 
void loop() {
 
if (random(1000) < 500) //Es wird eine Zufallszahl zwischen 0 und 1000 ermittelt, falls
//diese Zufallszahl < 500 ist, dann
digitalWrite(RELAIS, HIGH); //soll RELAIS eingeschaltet werden,
else //ist die Zufallszahl >500, dann
digitalWrite(RELAIS, LOW); //schalte RELAIS aus
delay(15000); //Warte 15 Sekunden bis zur Ermittlung einer neuen Zufallszahl
 
}
 
 



Das funktioniert schon ganz gut, vielleicht kann man das noch optimieren. Die Diskussion sei hiermit eröffnet

vG Uwe


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#2 von 44 390 , 24.01.2018 19:42

Hallo Uwe

Ich probiere gerade auch mein Glück mit nem Arduino, ich hätte mal eine Frage wie du ihn mit Strom versorgst, über ein eigenes Netzteil oder übers Gleis?

Paul


Epoche 6 Anlage im Aufbau


44 390  
44 390
InterCity (IC)
Beiträge: 867
Registriert am: 05.04.2017
Ort: NRW
Gleise 2L
Spurweite H0
Steuerung iTrain
Stromart DC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#3 von Bubikopf , 24.01.2018 19:47

Hallo Paul,
über ein 5V-Steckernetzteil von einem ausgemusterten Smartphone. Die Spannung am Gleis abzunehmen hatte ich auch überlegt, aber da werden sich - je nach Anzahl der Verbraucher - die Lasten schnell aufsummieren. Und Digital-Spannung ist ja kostbar

vG Uwe


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#4 von Dölerich Hirnfiedler , 24.01.2018 20:40

Hallo Uwe,

DELAY hat den großen Nachteil, das der ARDUINO in der Zeit wirklich nichts anderes macht, als zu warten. Dabei könnte er durchaus weitere Aufgaben übernehmen.

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
 
int RELAIS=2; //Am Ausgang d2 wird die Relaisplatine angeschlossen
const long interval = 15000;
unsigned long previousMillis = 0;
 
void setup() {
 
pinMode(RELAIS,OUTPUT); //RELAIS ist als Ausgang definiert
 
}
 
void loop() {
 
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {

previousMillis = currentMillis;
 
if (random(1000) < 500) //Es wird eine Zufallszahl zwischen 0 und 1000 ermittelt, falls
//diese Zufallszahl < 500 ist, dann
digitalWrite(RELAIS, HIGH); //soll RELAIS eingeschaltet werden,
else //ist die Zufallszahl >500, dann
digitalWrite(RELAIS, LOW); //schalte RELAIS aus
}
//hier könnten weitere Befehle stehen
}
 



Im Code ist eine Zeitmessung hinzugefügt. Es wird also nicht 15 Sekunden gewartet, sondern bei jedem LOOP-Durchlauf wird geprüft, ob schon 15 Sekunden (Konstante "interval") vorbei sind. Das ist die weitaus flexiblere Lösung.

mfg

D.



Aus einem Märklin-Patentantrag von 1975.


 
Dölerich Hirnfiedler
ICE-Sprinter
Beiträge: 5.526
Registriert am: 10.05.2005
Gleise VB
Spurweite H0, Z, 0, 00, 1
Stromart AC, DC, Digital, Analog


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#5 von AlexanderJesse , 24.01.2018 20:44

Warum nicht folgendes Vorgehen:

  1. Relais in definierten Zustand bringen (aus oder ein)
  2. evtl.: Kontrolle, ob ganz abgescahltet werden soll, falls ja ende des Programmes
  3. Zufallszahl ermitteln -> zeit
  4. zeit Sekunden warten
  5. Relais in anderen Zustand versetzen
  6. zurück zu Punkt 2


MIr ist es nie so richtig sympatisch etwas elektrisch zu schalten, wenn es keinen Bedarf dafür gibt... deshalb der andere Mechanismus.


Gruss
Alexander
===========================================
Eine richtige Lokomotive macht "Tschuff-Tschuff"


AlexanderJesse  
AlexanderJesse
InterCity (IC)
Beiträge: 841
Registriert am: 19.01.2017
Spurweite N
Stromart Analog


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#6 von Bubikopf , 25.01.2018 10:42

Hallo zusammen,
eine weitere Möglichkeit wäre, den Infrarotsensor dafür zu verwenden. Man könnte den Sensor an versteckter Stelle neben dem Gleis einbauen. Wenn dann ein Zug vorbeifährt, löst dies das Einschalten des Relais für eine definierte Zeit aus.

vG Uwe


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#7 von Bubikopf , 27.01.2018 10:49

Hallo zusammen,
die Zufallsteuerung überzeugt in der Praxis nicht wirklich. Ich zucke jedes mal zusammen, wenn plötzlich das Wasserrad (mit entsprechender Geräuschentwicklung) anfängt zu laufen...

Ich will meinen Sketch so modifizieren, dass das Wasserrad auf diese Arten geschaltet werden kann:
- Taster schaltet das Wasserrad ein, es läuft 1 Minuten und schaltet sich dann ab, und
- wird der Taster innerhalb der 1 Minute erneut gedrückt, dann schaltet es sich vorzeitig ab.

Für eine Schaltung Ein/ Aus mit einem Taster habe ich folgendes gefunden (hier die Quelle):

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
 
#define PIN_LED 11                                                  // Pin, an dem die LED angeschlossen ist.
#define PIN_BUTTON 12 // Pin, an dem der Taster angeschlossen ist.
 
boolean aLedEnabled = false; // True, wenn die LED leuchtet, sonst false.
boolean aButtonPressed = false; // True, wenn der Taster gedrückt wird, sonst false.
 
void setup()
{
pinMode(PIN_LED, OUTPUT); // Pin, an dem die LED angeschlossen ist, als Ausgang festlegen.
pinMode(PIN_BUTTON, INPUT_PULLUP); // Pin, an dem der Taster angeschlossen ist, als Eingang mit aktiviertem Pull-Up-Widerstand festlegen.
}
 
void loop()
{
if (digitalRead(PIN_BUTTON) == LOW) { // Wenn der Taster aktuell gedrückt wird, ...
aButtonPressed = true; // merke dir, dass der Taster gedrückt wurde, ...
delay(10); // und warte 10 Millisekunden bis die Kontakte des Tasters vollständig geschlossen sind.
}
 
if (digitalRead(PIN_BUTTON) == HIGH && aButtonPressed == true) { // Wenn der Taster nicht gedrückt wird, aber zuvor gedrückt wurde ...
aButtonPressed = false; // vergesse, dass der Taster gedrückt wude.

if (aLedEnabled == true) { // Wenn die LED gerade leuchtet ...
digitalWrite(PIN_LED, LOW); // schalte die LED aus ...
aLedEnabled = false; // und merke dir, dass die LED gerade nicht leuchtet,
} else { // sonst ...
digitalWrite(PIN_LED, HIGH); // schalte die LED ein ...
aLedEnabled = true; // und merke dir, dass die LED gerade leuchtet.
}
}
}
 



Wie kann ich das in meinen Sketch einbauen, sodass beide Funktionen möglich werden?

vG Uwe


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#8 von Bubikopf , 27.01.2018 11:12

Erster (eigener) Versuch:

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
 

int RELAIS=2; //Am Ausgang d2 wird die Relaisplatine angeschlossen
[color=#FF0000]int TASTER=3[/color]
const long interval = 15000;
unsigned long previousMillis = 0;
 
void setup() {
 
[color=#FF0000]pinMODE(TASTER, INPUT_PULLUP); //TASTER ist als Eingang definiert[/color]
pinMode(RELAIS,OUTPUT); //RELAIS ist als Ausgang definiert
 
void loop() {
 
[color=#FF0000]int zustand = digitalRead(TASTER);
if (zustand == HIGH) {
digitalWrite(RELAIS, LOW);
} else {[/color]
 
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {

previousMillis = currentMillis;
 
if (random(1000) < 500) //Es wird eine Zufallszahl zwischen 0 und 1000 ermittelt, falls
//diese Zufallszahl < 500 ist, dann
digitalWrite(RELAIS, HIGH); //soll RELAIS eingeschaltet werden,
else //ist die Zufallszahl >500, dann
digitalWrite(RELAIS, LOW); //schalte RELAIS aus
}
 
}
 


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#9 von Bubikopf , 28.01.2018 11:33

Hallo zusammen,

die Aufgabenstellung:
Mittels eines Taster soll ein Ausgang des Arduino für 60 Sekunden (Timer) eingeschaltet werden. Der Ausgang soll abgeschaltet werden, wenn
- entweder die 60 Sekunden abgelaufen sind, oder
- wenn vorher der Taster ein zweites Mal betätigt wird (Abbruch des Timers)


Das Problem ist gelöst (danke an 'agmue' aus dem Arduino-Forum). Der Wert der Konstanten 'ausgangIntervall' gibt die Zeit in Millisekunden an, wann der Ausgang abgeschaltet werden soll.

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
 

const byte pinEingang = 3;
const byte pinAusgang = 13;
const uint32_t prellIntervall = 30, ausgangIntervall = 5000;
uint32_t aktMillis, prellMillis, ausgangMillis;
bool aktTaster, altTaster, ausgangStatus;
 
void setup() {
pinMode(pinEingang, INPUT_PULLUP);
pinMode(pinAusgang, OUTPUT);
}
 
void loop() {
aktMillis = millis();
// Tastenaktualisierung mit Entprellen
altTaster = aktTaster;
if (aktMillis - prellMillis >= prellIntervall)
{
prellMillis = aktMillis;
aktTaster = digitalRead(pinEingang);
}
// Tasteraktion
if (altTaster && !aktTaster) // Flankenerkennung Taster gedrückt, LOW aktiv
{
if (ausgangStatus)
{
ausgangStatus = LOW;
digitalWrite(pinAusgang, LOW); // Ausgang AUS durch Tastendruck
} else {
ausgangMillis = aktMillis;
ausgangStatus = HIGH;
digitalWrite(pinAusgang, HIGH); // Ausgang EIN durch Tastendruck
}
}
// Ausgang schalten
if (ausgangStatus && (aktMillis - ausgangMillis >= ausgangIntervall))
{
digitalWrite(pinAusgang, LOW); // Ausgang AUS durch Zeit
ausgangStatus = LOW;
}
}
 
 



vG Uwe


„Es ist nicht der Unternehmer, der die Löhne zahlt — er übergibt nur das Geld. Es ist das Produkt, das die Löhne zahlt.“
Henry Ford, ein außergewöhnlicher Manager, Geschäftsmann und Erfinder, 1863 - 1947


 
Bubikopf
InterCityExpress (ICE)
Beiträge: 2.064
Registriert am: 27.04.2005
Gleise C-Gleis
Spurweite H0
Steuerung MS II
Stromart AC, Digital


RE: ARDUINO - Ein Relais schalten - Knopfdruck/Timer

#10 von alter Raucher , 04.02.2018 20:19

Hallo zusammen,
ja der Sketch funktioniert soweit auch wenn die angestrebte Zeit nicht ganz 60sek/1min. schaltet!
Für viele Miteisenbahner ist das auch wieder ein gelungener Sketch mit dem sich sehr viel anstellen lässt.
Denn für meine kleine Dorfkirche brauche ich auch noch so eine Steuerung für das Geläut!

Macht weiter so damit die Ideen niemals ausgehen und es noch sehr lange weiter geht mit der Moba-Eigenbausteuerung und das schalten von Zusatzfuntionen!


Gruß
Karsten


Für Klugscheißerei und Neid nehme ich mir KEINE Zeit!
www.rafeba.de.tl
nicht jeder PC mag das .de.tl !!!
Das Maß ist VOLL und ich brauche eine neue Homepage!
www.rafeba02.de.tl


 
alter Raucher
InterCity (IC)
Beiträge: 776
Registriert am: 16.07.2017
Spurweite H0, H0e, G
Steuerung RC Steuerung für livesteam Loks
Stromart DC, Analog


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz