Arduino UNO an 4fach Relais

OP #4785103
Lesenswert?

Hallo zusammen,
ich bin nun seit 5 Tagen, in Vollzeit, am Grübeln und ausprobieren wie 
ich meine Schaltung in den Griff bekomme. Da ich mich erst seit dieser 
Zeit mit dem Arduino und seiner Programmierung beschäftige habe ich 
schnell meine Grenzen aufgezeigt bekommen. Viele von euch werden das 
Programm in kürzester Zeit geschrieben haben und ich sitze bis Silvester 
noch da. Also bitte ich euch mir zu helfen.
Folgendes Programm möchte ich verwenden:
•  Steuerung bestromt= keine Aktion;
•  Über Tastendruck = Relais 1 für 10 min einschalten; LOW; LED leuchtet 
10min. mit bis Ende;
•  Nach 30 sek. Umpolung = Relais2 + 3 gleichzeitig einschalten; LOW
•  Nach 30 sek. Umpolung = Relais2 + 3 gleichzeitig ausschalten; HIGH
•  Das Ganze 10x, bis die 10 min abgelaufen sind;
•  Ende
Sieht so einfach aus aber ich beiße mir die Zahne aus.
Ein Bild als Anhang ist dabei. Die Wechselschaltung, auf der 
Hochstromseite, über die drei Relais, habe ich im Griff, es geht mir nur 
um das Ansteuern der Relais mit einem Taster.
Sketch will ich erst gar nicht posten weil dieser nur bis zum ersten 
Schalten des Relais1 funktioniert. Ich danke euch schon jetzt für euren 
Einsatz.
Angehängte Dateien:
Gast #4785122
Lesenswert?

Wolfgang K. schrieb:
> Folgendes Programm möchte ich verwenden:
> ...
Mache einfach einen Zustandsautomaten draus, d.h. jeder Schaltzustand 
bekommt z.B. eine Nummer und (in deinem Fall) eine bestimmte Laufzeit, 
nach der du dein System in den nächsten Zustand wechselst und die neue 
Laufzeit startest.
Eine absolute Zeit erfährst du beim Arduino z.B. über die Funktion 
millis().
https://www.arduino.cc/en/Reference/Millis

Zu Anfang eines Zustandes berechnest du die Endzeit aus 
millis()+Laufzeit. In Loop vergleichst du zu Anfang diese Endzeit immer 
mit der aktuellen Zeit millis() und gehst, sobald millis() größer wird 
in den nächsten Zustand mit neuer Endzeit. Damit läufst du zyklisch 
deine Zustände durch. Die Laufzeiten kannst du z.B. in einem const-Array 
festlegen.
OP #4785170
Lesenswert?

Danke, Ihr seid ja schnell.
Das ist ein guter Tipp, aber besser für mich währe der Sketch.
Ich weiß ich bin hier nicht im Wünscheerfüllertred aber ich denke das 
ich das so nicht hin bekomme. Wie gesagt habe ich schon einiges probiert 
aber bei mir hackts am zu vielen Ecken. Ich weiß nicht in welcher 
abfolge ich das Programm im LOOP schreiben muss, damit erst das eine und 
dann die beiden anderen Relais schalten sollen. Wo muss welche Klammer 
hin usw.
Bitte helft mir dabei, vielleicht gibt es den schon im Netz, ich finde 
ihn aber nicht.
OP #4785223
Lesenswert?

Ich will es ja lernen. Hier mein erster Sketch der funktionierte, 
allerdings ohne das zweite und das dritte Relais:

int taster=7;       //Das Wort „taster" steht jetzt für den Wert 7.
int tasterstatus=0; //Das Wort „tasterstatus" steht jetzt zunächst für 
den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster 
gedrückt ist oder nicht.

int relais1=1;

//int relais2=2;
//int relais3=3;


void setup()              //Hier beginnt das Setup.
{
pinMode(taster, OUTPUT);   //Der Pin mit der LED (Pin7) ist jetzt ein 
Eingang INPUT
pinMode(relais1, INPUT); //Der Pin mit dem Relay1 (Pin1) ist jetzt ein 
Eingang OUTPUT

}
void loop()  // Die Endlosschleife
{
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH)    // HIGH
{
digitalWrite(relais1, LOW);  // dann soll das Relais schalten, LOW
delay (10000);                // und zwar für für X Sekunden
digitalWrite(relais1, HIGH); // danach soll das Relais nicht schalten, 
HIGH
//delay (500);
}
}



Dann habe ich versucht das zweite Relais anzusteuern das mir nicht 
gelingt:

int taster=7;       //Das Wort „taster" steht jetzt für den Wert 7.
int tasterstatus=0; //Das Wort „tasterstatus" steht jetzt zunächst für 
den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster 
gedrückt ist oder nicht.

int relais1=1;

int relais2=2;



void setup()              //Hier beginnt das Setup.
{
pinMode(taster, INPUT);   //Der Pin mit der LED (Pin 7) ist jetzt ein 
Eingang INPUT
pinMode(relais1, OUTPUT); //Der Pin mit dem Relay1 (Pin 1) ist jetzt ein 
Eingang OUTPUT
pinMode(relais2, OUTPUT);
}

void loop()
{
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH)               //Taster drücken,HIGH
{
digitalWrite(relais1, LOW);             //danach soll das Relais X 
schalten, LOW
delay (3000);                           //und zwar für für X Sekunden
digitalWrite(relais2, HIGH);            //danach soll das Relais X nicht 
schalten
delay (1000);                          //und zwar für für X Sekunden
digitalWrite(relais2, LOW);            //dann soll das Relais nicht 
schalten
delay (1000);                          //und zwar für für X Sekunden
digitalWrite(relais1, HIGH);            //dann soll das Relais nicht 
schalten HIGH
}

Über den Taster wird das Programm gestartet. Funktioniert auch, das 
erste Relais schaltet. Über den PIN 7 Input wird dem Relais gesagt das 
es schalten soll. Wie wird dem zweiten Relais gesagt, "schalte nach dem 
Programmstart nach 30 sek. für 30 sek.", dabei soll aber das Relais1 
weiter geschaltet bleiben für X min.
OP #4785358
Lesenswert?

Super erst mal Danke.
Das Relais 1 und 2 Schalten, soviel habe ich schon gesehen. Hab es 
sofort ausprobiert.
Was ich noch nicht verstehe ist das mit den Taster wie und wo soll ich 
den jetzt anschließen (hardwaremäßig)
Danke und nochmal Danke für deine Hilfe.
Werde mich bestimmt noch mal melden
Gast #4785385
Lesenswert?

Wolfgang K. schrieb:
> Wo muss welche Klammer hin usw. ...

Das wirst du lernen müssen. Der Kompiler wird viel syntaktisch korrekten 
Mist annehmen, der aber etwas anderes tut, als du möchtest.

Hubert G. schrieb:
> Probier es mal damit.
> ...

Das bringt die Sache keinen vernünftigen Schritt weiter. Die Betonung 
liegt auf "vernünftig", weil mit den delay()-Aufrufen der Prozessor 
blockiert wird und damit jegliche andere Programmfunktionen verhindert 
bzw. mindestens unnötig kompliziert werden, IMHO eine Lernsackgasse oder 
besser ein schlechtest Beispiel, gerade gut genug, um daraus zu lernen, 
wie man es nicht machen soll.
OP #4785401
Lesenswert?

Und wie macht man es besser?
Kritik ist gut und man kann daraus lernen, wenn man dazu aber nichts 
schreibt kann keiner davon Profitieren oder was meinst du?

W.A. schrieb:
> Wolfgang K. schrieb:
>> Wo muss welche Klammer hin usw. ...
>
> Das wirst du lernen müssen. Der Kompiler wird viel syntaktisch korrekten
> Mist annehmen, der aber etwas anderes tut, als du möchtest.
>
> Hubert G. schrieb:
>> Probier es mal damit.
>> ...
>
> Das bringt die Sache keinen vernünftigen Schritt weiter. Die Betonung
> liegt auf "vernünftig", weil mit den delay()-Aufrufen der Prozessor
> blockiert wird und damit jegliche andere Programmfunktionen verhindert
> bzw. mindestens unnötig kompliziert werden, IMHO eine Lernsackgasse oder
> besser ein schlechtest Beispiel, gerade gut genug, um daraus zu lernen,
> wie man es nicht machen soll.

Kritik ist gut und man kann daraus lernen, wenn man dazu aber nichts 
schreibt kann keiner davon profitieren oder was meinst du?
#4785453
Lesenswert?

Wolfgang K. schrieb:
> Was ich noch nicht verstehe ist das mit den Taster wie und wo soll ich
> den jetzt anschließen (hardwaremäßig)

Der Taster muss nach GND schalten.
Daher steht auch pinMode(taster, INPUT_PULLUP); Damit wird der interne 
PullUp Widerstand aktiviert der den Eingang auf HIGH hält. Mit 
Tastendruck geht der Eingang auf LOW.
Daher auch die Abfrage if (tasterstatus == LOW)
OP #4785664
Lesenswert?

Super erst mal vielen Dank.
Verstehe ich es richtig!
Der Taster bekommt am Eingang den Draht auf dem Breadboard gesteckt, der 
zu PIN 8 führt und der Ausgang des Tasters, bekommt den Draht auf dem 
Breadboard gesteckt, der zum GND auf der Seite der PWM's führt?

Das Bild zeigt meine Alte Schaltung (Hardware)!
Ich kann also mit deiner Schaltung die auf dem Bild gezeigten 
Widerstände weg lassen, so verstehe ich das?

Die Diode habe ich nur zur Kontrolle gesteckt, ob der Taster gedrückt 
wurde. Diese leuchtet nur so lange wie ich den Taster unten halte. Währe 
aber super wenn der während des Programmlaufs immer leuchten würde! Ist 
aber nicht so wichtig.
Angehängte Dateien:
#4785699
Lesenswert?

Wolfgang K. schrieb:
> Der Taster bekommt am Eingang den Draht auf dem Breadboard gesteckt, der
> zu PIN 8 führt und der Ausgang des Tasters, bekommt den Draht auf dem
> Breadboard gesteckt, der zum GND auf der Seite der PWM's führt?

Der Taster geht auf Pin7, sonst ist es richtig.

Wolfgang K. schrieb:
> Diese leuchtet nur so lange wie ich den Taster unten halte. Wäre
> aber super wenn der während des Programmlaufs immer leuchten würde!

Ich habe dir eine Led auf Pin 8 programmiert.
Angehängte Dateien:
OP #4785735
Lesenswert?

Hubert G. schrieb:
> Wolfgang K. schrieb:
>> Der Taster bekommt am Eingang den Draht auf dem Breadboard gesteckt, der
>> zu PIN 8 führt und der Ausgang des Tasters, bekommt den Draht auf dem
>> Breadboard gesteckt, der zum GND auf der Seite der PWM's führt?
>
> Der Taster geht auf Pin7, sonst ist es richtig.
>
> Wolfgang K. schrieb:
>> Diese leuchtet nur so lange wie ich den Taster unten halte. Wäre
>> aber super wenn der während des Programmlaufs immer leuchten würde!
>
> Ich habe dir eine Led auf Pin 8 programmiert.

Ja da hab ich mich vertippt, PIN 7 logisch.

Habe das Programm in die Arduino Windows Software gespielt und mit dem 
Haken, oben links im Programm überprüfen lassen. Dabei kam folgende 
Meldung zur letzten Zeile im Sketch:
"
Arduino: 1.6.12 (Windows 10), Board: "Arduino/Genuino Uno"
error: expected '}' at end of input
     digitalWrite(led,LOW); 
// Led leuchtet wärend Programmablauf
 ^
65: error: expected '}' at end of input
exit status 1
expected '}' at end of input
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
"
Was soll ich ändern?
Gast #4785749
Lesenswert?

Das Grundbeispiel mit der Zeitsteuerung hatte Hubert schon genannt

Hubert G. schrieb:
> Schau dir das Beispiel BlinkWithoutDelay an.

Statt der Steuerung über den Zustand der LED mit
1
    if (ledState == LOW) {
2
      ledState = HIGH;
3
    } else {
4
      ledState = LOW;
baust du für deine Anwendung ein Gerüst mit
1
   switch (zustands_nr) {
2

3
      case 0:;
4

5
      case 1:
6
        digitalWrite(relais1, LOW);
7
        zustands_nr = zustands_nr+1;
8
        interval = 10000L;
9
        break;
10

11
      case 2:
12
        digitalWrite(relais1, HIGH);
13
        digitalWrite(relais2, LOW);
14
        zustands_nr = zustands_nr+1;
15
        break;
16

17
      case 3:
18
        digitalWrite(relais2, HIGH);
19
        zustands_nr = zustands_nr+1;
20
        interval = 20000L;
21
        break;
22

23
      default:
24
        zustands_nr=0;         // bricht ab, wenn Zustand nicht aufgeführt
25
      }
26
      if (zustands_nr > maxzustand)
27
         zustands_nr=0;
28
   ...   
29
}

Beim Erkennen des Tastendrucks schaltest du zustands_nr auf 1 und dann 
läuft das Ding los. Den Tastenzustand könnte man natürlich bei case 0 
mit reinbauen. Mit interval kannst du die Dauer des nächsten Zustandes 
bestimmen, sonst bleibt die Dauer für den nächsten Zustand unverändert.

Als Variablen/Konstanten deklarierst du zu Anfang noch
1
   const int maxzustand =3; 
2
   long interval = 10000L;

Das Ding realisiert nicht den von dir geforderten Ablauf, sondern gibt 
eher eine Idee, wie das ohne delay() funktionieren kann. Für deine 10 
Durchläufe brauchst du noch einen weitern Zähler und erst wenn der bei 
10 angekommen ist, würdest du die Sequenz mit zustands_nr=0 abschließen.

Bem: Alles ungetestet und als Denkanstoss
OP #4785753
Lesenswert?

Ich hab meinen Fehler gefunden. Habe dein Programm nur zum Teil 
eingespielt. Danke vergiss das was ich zuvor geschrieben habe. Sorry

Habe den Sketch laufen lassen, aber es tut sich leider nix. Außer das 
die gelbe LED am Arduino blinkt und die grüne LED einmal an und aus 
geht.
 Die Relays schalten zu keiner Zeit. Hätte ich noch was eingeben müssen, 
in den Sketch?
OP #4785917
Lesenswert?

Hubert G. schrieb:
> Wolfgang K. schrieb:
>> Habe den Sketch laufen lassen, aber es tut sich leider nix. Außer das
>> die gelbe LED am Arduino blinkt und die grüne LED einmal an und aus
>> geht.
>
> Da hast du was falschen eingespielt. In meinem Programm blinkt die gelbe
> Led am Arduino nicht.
> Die grüne Led ist die Spannungsanzeige, die darf nie ausgehen.

Habe mich falsch ausgedrückt. Wenn ich das Programm das ich 1 zu 1 
eingespielt habe, laufen lassen will und den Taster kurz drücke, dann 
habe ich das Verhalten mit den LED's am Arduino. Die Relais schalten 
über haupt nicht um am Relais-Bord geht auch keine rote LED an.
OP #4785943
Lesenswert?

Hubert G. schrieb:
> ICh habe eine 8fach Relaiskarte am UNO hängen, da klappert alles
> einwandfrei.
> Zeig doch mal wie du das ganze zusammengeschaltet hast.

Ich werde mir Übermorgen, in neuer Frische, das ganze noch einmal 
ansehen.  Morgen bin ich nicht da. Wenn ich keinen Fehler finde dann 
werde ich dir alles per Bild oder Video zukommen lassen.
Vielen Dank noch mal für deine Hilfe, heute den ganzen Tag.
OP #4786216
Lesenswert?

So jetzt habe ich alles noch mal durchgetestet. Das oder besser die 
Relays schalten nicht mehr. Habe zum Testen ein Netzteil an die 
Steuerung der Relays gehängt +3,3V auf VCC und GND auf GND. Zum Schalten 
des Relais bin ich mit einer Leitung nochmal auf + des Netzteils. Die 
Relays schalten über haupt nicht keinen Mux.

Der Arduino habe ich mit dem Blinklicht Sketch laufen lassen. Das 
funktioniert. Eine andere Möglichkeit kenne ich nicht.
#4786636
Lesenswert?

Wolfgang K. schrieb:
> Habe zum Testen ein Netzteil an die
> Steuerung der Relays gehängt +3,3V auf VCC und GND auf GND.

Die Relais brauchen 5V damit sie sicher schalten.
Wenn du ein eigenes Netzteil für die Relais verwenden willst, dann musst 
du diese auf JD-VCC und GND legen. Die Brücke JD-VCC - VCC entfernen.
Vom Arduino brauchst du nur VCC und die jeweiligen Ausgänge.

Zum testen ohne Relais kannst du Led mit Vorwiderstände von den Ausgänge 
nach VCC schalten.
Gast #4786660
Lesenswert?

Dietrich L. schrieb:
> Welches Relais-Board hast Du denn?

Ich rate:

Die meisten Relaisboards, und dieses sieht auch so aus, haben 
Optokoppler Eingänge.
Mit gemeinsamen Anoden Anschluss.
Die Verbindung vom Arduino erfolgt also:
5V, an die gemeinsame Anode
Die Arduino Pins an die Kathodenseite der Optos.
Eine Ground Verbindung zum Arduino ist nicht nötig.
Vorwiderstände sind schon auf dem Board.

Das Relaisboad benötigt 5V und GND, für die Spulen und ihre Treiber.

Die Relais schalten, wenn Arduino Pin Low.
Also invers.

ohne Gewähr
Gast #4787142
Lesenswert?

Wolfgang K. schrieb:
> Habe noch ein Bild vom Arduino mit deiner Pin- Belegung.
Bitte noch mehr bekloppte Bilder! Diese Kinderkasperbreadboards habe ich 
bei den Kollegen in der Entwicklung noch nie gesehen. Schon mal etwas 
von "Schaltplan" gehört?

Wolfgang K. schrieb:
> So jetzt habe ich alles noch mal durchgetestet. Das oder besser die
> Relays schalten nicht mehr.
Relais schreibt man mit i !

Dieser Thread ist ein Beispiel für eine total wirre Vorgehensweise, 
systematisches Arbeiten ist heutzutage nicht mehr möglich?

Zuerst einmal wird die Funktion der Relaiskarte ermittelt, da gibt es 
sicherlich einen Schaltplan zu. Solange die am Labornetzteil nicht 
klappert, sind jegliche weiteren Aktivitäten sinnlos.

Dann kommt ein simples Programm "setze Port 1 high - Pause - Port 2 high 
- Pause ... Port wieder low ..." Wenn schon das nicht funktioniert, muss 
man keine komplexeren Programme hier reinstellen.

Sobald die Relais klappern, wird ein Taster abgefragt, der eines davon 
schaltet.

Und so weiter: Problem mit System in möglichst kleine Brocken zerlegen, 
jeden für sich funktionsfähig machen und erst dann das Ganze 
zusammenfügen.

Es wird genau das Klischeebild der Arduinos erfüllt: Irgendwas 
zusammenstecken, irgendwelche Sketche zusammenkopieren und dann im 
Internet heulen, dass es nicht spielt.
#4787566
Lesenswert?

Hubert G. schrieb:
> Hier ist ein Schaltplan der 4fach Relaisplatine.

Jetzt fehlt nur noch die Angabe, welcher Relais-Typ (Spulenspannung) 
verwendet ist. Das Bild
https://www.mikrocontroller.net/attachment/310432/DSC_0415.JPG
von "Wolf Gang" ist leider nicht scharf genug.
Wie es schon erwähnt wurde sind es vermutlich 5V-Relais, und da kann 
3,3V abzüglich der Spannungsabfalls am Transistor zu wenig sein.
#4787592
Lesenswert?

Hallo

> Dieser Thread ist ein Beispiel für eine total wirre Vorgehensweise,
> systematisches Arbeiten ist heutzutage nicht mehr möglich?

:-)

> ...Problem mit System in möglichst kleine Brocken zerlegen, jeden
> für sich funktionsfähig machen und erst dann das Ganze zusammenfügen.

Ist offensichtlich zu kompliziert.

> Es wird genau das Klischeebild der Arduinos erfüllt: Irgendwas
> zusammenstecken, irgendwelche Sketche zusammenkopieren und dann im
> Internet heulen, dass es nicht spielt.

Leider ist es genau so.

rhf
#4787859
Lesenswert?

Hubert G. schrieb:
> Hier ist ein Schaltplan der 4fach Relaisplatine.

ist doch wie auch auf dem Ursprungsbild vom TO eindeutig zu erkennen 5V 
Technik!

Die Signal LED ca 2V die Opto LED ca 1,2V + RV gibt definitiv einen 
größeren benötigten Spannungsabfall als 3,3V, also ist dieser Zweig nur 
mit 5V aus dem Port inaktiv und GND low zu besteuern.

Wolf G. schrieb:
> So jetzt habe ich alles noch mal durchgetestet. Das oder besser die
> Relays schalten nicht mehr. Habe zum Testen ein Netzteil an die
> Steuerung der Relays gehängt +3,3V auf VCC und GND auf GND. Zum Schalten
> des Relais bin ich mit einer Leitung nochmal auf + des Netzteils. Die
> Relays schalten über haupt nicht keinen Mux.

mit 3,3V für high ist dort nix zu machen.

Systematisch testen würde heissen man versorgt die Relaisplatine aus 
einer +5V Quelle und zieht in entweder auf +5V oder auf GND das Relais 
und die Signal LED zeigt dann den entsprechenden Zustand.
Das kann man mit einer 3,3V Versorgung gegentesten ganz ohne µC

Wer dann noch ein mA Meter in die Testleitung nach +VCC oder nach GND 
hängt kann sogar den Strom dieser Relaisplatine am In testen,  das muss 
der Port auch liefern können.

Der µC kann natürlich an seinen Ports mit 3,3V und 5V ebenfalls 
unabhängig getestet werden ob 3,3V/5V oder 0V bei dieser Last stabil 
steht.
Gast #4788244
Lesenswert?

Hubert G. schrieb:
> Die Kritik mag ja zum Teil berechtigt sein.
Jetzt träumen wir mal und hoffen, dass unser "kerzerl" das gelesen und 
verstanden hat. Dann könnte er sich die Lösung stückweise selbst 
erarbeiten?

Joachim B. schrieb:
> Der µC kann natürlich an seinen Ports mit 3,3V und 5V ebenfalls
> unabhängig getestet werden ob 3,3V/5V oder 0V bei dieser Last stabil
> steht.
Die 3,3V verstehe ich sowieso nicht, Standard für den Uno sind 5 Volt!

Am besten dann noch mit einem 12V-Netzteil versorgen, die Relais an den 
5V-Anschluß des Uno und sich anschließend beklagen, dass die 
Spannungsregler auf dem Board nichts taugen und ohne Grund abbrennen.
#4788256
Lesenswert?

Kackreiz schrieb:
> Die 3,3V verstehe ich sowieso nicht, Standard für den Uno sind 5 Volt!

es gibt Arduino mini auch mit 328p bestückt die werden mit 8MHz bestückt 
und programmiert ausgeliefert extra für den 3,3V Betrieb, z.B. aus einer 
3-3,6 V Quelle.

Man könnte es auch als Vorstufe probieren um die SW auf einen PI zu 
portieren, gcc machts ja möglich, aber ich rate nur.
Es soll auch neuere Arduinos geben die ab Werk für 3,3V sind.

aber der TO rät ja auch nur ohne Plan.
Gast #4788382
Lesenswert?

Joachim B. schrieb:
> es gibt Arduino mini auch mit 328p bestückt die werden mit 8MHz bestückt
> und programmiert ausgeliefert extra für den 3,3V Betrieb, z.B. aus einer
> 3-3,6 V Quelle.
Ich weiß - aber oben auf dem Bild hat er einen Uno. Der hat sogar einen 
Regler an Bord, um 3,3V zu liefern.

Der Chinesen-ProMini ist übrigens der billigste Weg, einen 328 samt 
Quarz auf die Lochrasterplatte zu bekommen.

> Man könnte es auch als Vorstufe probieren um die SW auf einen PI zu
> portieren, gcc machts ja möglich, aber ich rate nur.
"Man" könnte, aber manche eher nicht.

> Es soll auch neuere Arduinos geben die ab Werk für 3,3V sind.
Die dann aber nicht Uno heißen.

> aber der TO rät ja auch nur ohne Plan.
Stimmt, und ohne erkennbare Systematik.
Angehängte Dateien:
OP #4789875
Lesenswert?

Hubert G. schrieb:
> Wolfgang K. schrieb:
>> Habe zum Testen ein Netzteil an die
>> Steuerung der Relays gehängt +3,3V auf VCC und GND auf GND.
>
> Die Relais brauchen 5V damit sie sicher schalten.
> Wenn du ein eigenes Netzteil für die Relais verwenden willst, dann musst
> du diese auf JD-VCC und GND legen. Die Brücke JD-VCC - VCC entfernen.
> Vom Arduino brauchst du nur VCC und die jeweiligen Ausgänge.
>
> Zum testen ohne Relais kannst du Led mit Vorwiderstände von den Ausgänge
> nach VCC schalten.

Es hat jetzt länger gedauert, bis die neuen Teile da waren.
Die Relais waren schon in Gebrauch und schadhaft. Einen neuen UNO habe 
ich auch noch erhalten.
Dein Programm läuft ordentlich durch. Habe den Sketch erweitert (siehe 
Anhang), dass es mir auch das dritte Relais3 parallel zum Relais2 
schaltet.

Jetzt habe ich festgestellt, dass ich die Anfangsbedingung zum 
Sketch-Ablauf falsch gesetzt habe. Ursprünglich war angedacht, dass alle 
30sek. das Relais2 + 3 zu und abschaltet. Wie kann ich dein Programm 
nutzen um das Ein- und Ausschalten mit verschiedenen Zeiten zu 
realisieren? Z.B. 15sek Einschalten und 30sek Ausschalten.
Angehängte Dateien:
OP #4790387
Lesenswert?

Super, so einfach wenn man weiß wo man ansetzt.

Jetzt wollte ich noch folgendes dazu Programmieren:
Wenn während des Ablaufes des Programms, also nach dem ersten 
Tastendruck, noch einmal auf den Taster gedrückt wird, das Programm 
abbricht. Ein weiterer Tastendruck startet das Programm von vorne.
Ist das so richtig?

if ((Taststat==LOW)&&(Relstat1==LOW))  // hier erfolgt eine 
Sketchabbruch
{
  Taststat=HIGH;                        // Tastenstatus setzen
  digitalWrite(relais1,HIGH);
  digitalWrite(relais2,HIGH);
  digitalWrite(relais3,HIGH);
  digitalWrite(led,LOW);    //Led aus
}

Den Block setze ich am Ende ein, oder?
OP #4791446
Lesenswert?

Es funktioniert super, vielen Dank. Ich glaube ein Essen ist fällig.

Werde jetzt versuchen, ein LCD mit Interface 1602 anzusteuern. Hoffe es 
sind noch genügend Pins vorhanden. Dort sollen dann die Temperaturwerte 
angezeigt werden. Die Temperatur wird mit einem Temperatursensor LM35DZ 
gemessen.
Kann das gelingen, oder soll ich es lieber lassen? Also ich meine damit 
ob ich das schaffe und wann!
Gast #4791538
Lesenswert?

Wolf G. schrieb:
> Kann das gelingen, oder soll ich es lieber lassen?
Nach Deiner Vorstellung mit der Relaiskarte hege ich leichte Zweifel. 
Vielleicht hast Du aus diesem Thread aber auch Hinweise mitgenommen, 
etwas systematischer zu arbeiten, dann kann das werden.

Geht aber schon mit dem LM35 los, wenn der Minus-Temperaturen messen 
soll :-(
Angehängte Dateien:
OP #4792944
Lesenswert?

Schön das du fragst.
Nein bin noch nicht dazu gekommen.
Habe aber schon mehrere Messungen ohne LCD an der Heizplatte gemacht, 
mit einem Laser- Thermometer und die Werte in Excel eingetragen.

Dabei ist mir aufgefallen, dass das Relais1, doch noch mal zwischen drin 
abschalten muss, damit ich die Heizplatte stromlos bekomme. Das soll 
folgendermaßen ablaufen:
•  Relais1   = 30sek. (LOW also angesteuert)
•  Relais1+2+3  = 20sek. (LOW also angesteuert)
•  Relais1+2+3   = 10sek. (HIGH nicht angesteuert)
•  Dann wiederholen von vorne;

Habe ich aber auch noch nicht umgesetzt, wegen Zeitmangel.
OP #4794066
Lesenswert?

Wolf G. schrieb:
> Schön das du fragst.
> Nein bin noch nicht dazu gekommen.
> Habe aber schon mehrere Messungen ohne LCD an der Heizplatte gemacht,
> mit einem Laser- Thermometer und die Werte in Excel eingetragen.
>
> Dabei ist mir aufgefallen, dass das Relais1, doch noch mal zwischen drin
> abschalten muss, damit ich die Heizplatte stromlos bekomme. Das soll
> folgendermaßen ablaufen:
> •  Relais1   = 30sek. (LOW also angesteuert)
> •  Relais1+2+3  = 20sek. (LOW also angesteuert)
> •  Relais1+2+3   = 10sek. (HIGH nicht angesteuert)
> •  Dann wiederholen von vorne;
>
> Habe ich aber auch noch nicht umgesetzt, wegen Zeitmangel.

Hbert, sitze seit mehrerern Std. über deinem Programm und schaffe es 
noch nicht, meine Zusatzaufgabe, siehe oben, zu integrieren. Den 
folgenden Block muss ich einfügen, soweit bin ich schon:

if((currentMillis - previousMillis1 > interval6) 
&&(Relstat1==HIGH)&&(Relstat2==HIGH)&&(Relstat3==HIGH))
    //Zeit zwischen Zeitstempel und aktueller Zeit > als vorgegebene 
Zeit
    {
      previousMillis1 = currentMillis;
      Relstat1 =LOW;              //Relais 1 deaktivieren
      Relstat2 =LOW;              //Relais 2 deaktivieren
      Relstat3 =LOW;              //Relais 3 deaktivieren
      Zaehler++;                  //Durchlaufzähler erhöhen
    }

Habe einen weiteren "interval6" dazu genommen;
Ich weiß noch nicht ob ich das relais1 damit aus bekomme?
OP #4794788
Lesenswert?

Du hast das mit "interval7" geregelt;
Jetzt müsste es so sein das alle 55 sek. ein neuer Durchlauf beginnt und 
dabei gezählt wird bis es 19 mal durchgelaufen ist!

Das LCD muss ich noch anschließen.
Habe mir gerade noch einen 10k Widerstand geholt
"LCD Enable pin" was für ein PIN, von 1-16, am LCD, ist das?
Habe Fotos angehängt

Und wenn du mir noch sagst wo du den Widerstand reingehängt hast?
Danke
Angehängte Dateien:
#4794991
Lesenswert?

Wolf G. schrieb:
> Du hast das mit "interval7" geregelt;
> Jetzt müsste es so sein das alle 55 sek. ein neuer Durchlauf beginnt und
> dabei gezählt wird bis es 19 mal durchgelaufen ist!

Interval7 ist richtig.
Es läuft nur 10 mal durch, da ein und aus mitgezählt wird und mit 0 
beginnt.

Wolf G. schrieb:
> "LCD Enable pin" was für ein PIN, von 1-16, am LCD, ist das?


Ich sehe gerade du hast ein I2C-LCD. Das funktioniert mit meiner SW 
nicht. Dafür braucht man eine eigene. Kann ich aber nicht probieren da 
ich kein geeignetes LCD habe.
OP #4795201
Lesenswert?

Mein Elektronik-Verkäufer meint, das ich den I2C auf der Rückseite des 
Displays einfach nicht anschließen soll, dann wird der auch nicht 
geschalten. Ganz sicher ist er sich nicht und wartet auf Feedback von 
mir.

Zu deiner Frage: Der I2C ist aufgelötet.
Zu meiner Frage die ich dir gestellt hatte, bezüglich "LCD Enable pin", 
das müsste der Pin 6 am LCD sein, mit dem Aufdruck "E", meint der 
Verkäufer.

Jetzt werde ich es mal versuchen.

Ach ja zum Widerstand. Habe ein Bild angehängt. Der 10K-Widerstand ist 
das blaue Teil mit dem Pfeil drauf (regelbarer Widerstand). Dieser ist 
zwischen 5+V und V0 am LCD geschaltet. Sehe ich das so richtig?
Danke
Angehängte Dateien:
Gast #4795481
Lesenswert?

Wolf G. schrieb:
> Dann muss ich wohl ein anderes Display kaufen.
Quatsch - im Internet bei den Arduinos finden sich etlich Libraries, 
suche nach "<LiquidCrystal_I2C.h>". Damit belegst Du zwei Ports des 
Arduino und brauchst Dich um weitere Hardware nicht zu kümmern. Es 
kann sein, dass noch zwei Widerstände mit ca. 4k7 von den zwei 
Datenleitungen nach Plus dran müssen.

Wolf G. schrieb:
> Mein Elektronik-Verkäufer meint, das ich den I2C auf der Rückseite des
> Displays einfach nicht anschließen soll, dann wird der auch nicht
> geschalten. Ganz sicher ist er sich nicht und wartet auf Feedback von
> mir.
Dem Herren vertraue ich nicht - an Anschlüsse unversorgter ICs hat man 
nichts dran zu klemmen.

Wenn das unbedingt sein muß, löte die I2C-Platine runter.
Angehängte Dateien:
OP #4795680
Lesenswert?

So es läuft soweit super.
Kleinigkeiten die mir aufgefallen sind:

 - Am Arduino leuchtet die kleine rote LED mit der Bezeichnung L! Wenn 
diese an geht, geht auch meine rote LED am Bord an (siehe Bild LED1). Da 
haben wir ja nix geändert, außer die PIN-Belegung, aber jetzt blinkt die 
LED am Bord, war vorher immer nur an wenn das Programm lief? Find nix an 
was es liegen könnte!

 -Die Temperaturanzeige funktioniert. Zeigt allerdings den Wert -255° an 
(Raumtemperatur)

Da ich keinen zweiten Temperatursensor habe, habe ich den Programmteil 
mit // ausgeschalten!

Das LCD funktioniert auch ohne das Auslöten des I2C.
Angehängte Dateien:
OP #4795975
Lesenswert?

Neu gestartet und es läuft, aber nicht lange.
Was mach ich nur falsch?

Habe alle PIN Kontakte zwei mal überprüft, alles in Ordnung.

Das Blinken an der Arduino LED geht nicht weg! Das geht im 5 sek. 
Wechsel an /aus. Würde mit dem interval6 Temperaturmessung zusammen 
passen.

Vielleicht liegt es am Netzteil, vielleicht auch nicht, denn wenn ich 
das USB Kabel anschließe und den Taster betätige, dann gibt mein 
Computer ein Geräuschsignal aus, aber das Programm läuft nicht.

Evtl. liegt es an den Widerständen an der Schaltung, denn beim Drücken 
des Tasters ist immer das LCD kurz dunkel geworden.

Bitte um Hilfe
#4796012
Lesenswert?

Wolf G. schrieb:
> -Die Temperaturanzeige funktioniert. Zeigt allerdings den Wert -255° an
> (Raumtemperatur)

Wie hast du den Temperaturfühler angeschlossen?
Kannst du auch mal die Tastenanschaltung genauer zeigen, kommt mir etwas 
eigenartig vor. Nimm mal die Verbindung nach +5V weg und die Led.
Die Led am UNO blinkt tatsächlich im Takt der Temperaturmessung, hab ich 
vergessen wieder herauszunehmen.

Ein Vorwiderstand für die Displaybeleuchtung ist notwendig, sollte im 
Datenblatt stehen, probier mal 100 Ohm.
Wenn du die Relais auch mit 9V betreibst können die auch sterben. Wenn 
es ein einfaches Netzteil ist (Wandwarze) dann haben die meist einige 
Volt mehr. 9V erst bei maximal Belastung.
OP #4796059
Lesenswert?

Hubert G. schrieb:
> Ein Vorwiderstand für die Displaybeleuchtung ist notwendig, sollte im
> Datenblatt stehen, probier mal 100 Ohm.

So habe ich den Widerstand 100 Ohm geschalten (Bild)
Zwischen VDD PIN2 am LCD (schwarzes Kabel) an Widerstand Ausgang zum +5V 
Arduino.
Programm läuft nur einmal incl. Ansteuerung der Relais. Wenn ich es 
unterbreche mit Tastendruck, läuft es nicht mehr. Mehrmaliges drücken 
des Tasters bewirkt nur noch das das LCD dunkel wird!
Angehängte Dateien:
#4796065
Lesenswert?

Der 100 Ohm Widerstand bringt so nichts, da ist das ganze Display 
betroffen. Zieh mal den kleinen Stecker auf der Subplatine ab.
Du hast in deiner Verdrahtung einen Wurm drinnen, wenn du die Taste 
drückst darf sich an der Helligkeit gar nichts ändern.
Die Led und die Verbindung nach +5V an der Taste schon entfernt?
OP #4796081
Lesenswert?

Hubert G. schrieb:
> Die Led und die Verbindung nach +5V an der Taste schon entfernt?

Nein, habe den Temperatursensor entfernt. Siehe da das Programm lässt 
sich jetzt ein und ausschalten auch die Relais schalten wieder mit.

Den Widerstand 100 Ohm habe ich ebenfalls entfernt.

Danke erst mal ich muss jetzt leider kurz unterbrechen, ich habe einen 
Termin. Bis später. Vielen Dank
OP #4797179
Lesenswert?

Hubert G. schrieb:
> Du hast in deiner Verdrahtung einen Wurm drinnen

LCD Verkabelung

LCD > Arduino
---------
VSS > GND
VDD > +5V
V0  > 10k ((Poti)) + ((1kOhm Widerstand)) > GND
RS  > Pin 12
R/W > Pin GND
E   > Pin 11
D4  > Pin 5
D5  > Pin 4
D6  > Pin 3
D7  > Pin 2
A   > nicht angeschlossen
K   > (10 Ohm Widerstand > GND */) nicht angeschlossen

((das in Klammern habe ich nicht))
OP #4797408
Lesenswert?

Hubert G. schrieb:
> Wie weit funktioniert es jetzt?
Habe dein Programm vorerst so umprogrammiert das es ohne LCD und ohne 
Temperatursensor läuft.

> Der Temperaturfühler ist ein LM35?
Ja: LM35DZ ( -0 +150C) To92

> Was macht die Led am Taster?
Bildlink, nach Umprogrammierung, nicht mehr alle 5 sek.
Geht aber beim Betätigen des Tasters sofort aus.

> Wenn du jetzt die Taste drückst wird der Spannungsregler immer noch
> warm?
Ja, sehr warm, aber nur wenn ich den Taster gedrückt halte, für 3sek.

> Zieh mal den kleinen Stecker auf der Subplatine ab.

Was meinst du damit? Was ist die Subplatine?
#4797581
Lesenswert?

Wolf G. schrieb:
>> Wenn du jetzt die Taste drückst wird der Spannungsregler immer noch
>> warm?
> Ja, sehr warm, aber nur wenn ich den Taster gedrückt halte, für 3sek.

Da ist was faul, nimm die Led mal von der Taste weg und auch die 
Verbindung nach +5V.

Wolf G. schrieb:
> Könnte man dein Programm so Programmieren, das anstatt der zweiten Temp2
> Ausgabe am LCD, die abgelaufene Zeit steht? Vorausgesetzt die
> Verkabelung und die Schaltung funktioniert mit dem neuen LCD!

Denke schon, wird aber etwas dauern.
OP #4797894
Lesenswert?

Hubert G. schrieb:
> Wolf G. schrieb:
>>> Wenn du jetzt die Taste drückst wird der Spannungsregler immer noch
>>> warm?
>> Ja, sehr warm, aber nur wenn ich den Taster gedrückt halte, für 3sek.
>
> Da ist was faul, nimm die Led mal von der Taste weg und auch die
> Verbindung nach +5V.
>
> Wolf G. schrieb:
>> Könnte man dein Programm so Programmieren, das anstatt der zweiten Temp2
>> Ausgabe am LCD, die abgelaufene Zeit steht? Vorausgesetzt die
>> Verkabelung und die Schaltung funktioniert mit dem neuen LCD!
>
> Denke schon, wird aber etwas dauern.

So jetzt sieht es nur noch so aus
Bild


Wenn ich jetzt, nach dem Entfernen der LED, die Taste drücke, dauert es 
nur noch 1 sek., bis der Finger bez. der Spannungsregler heiß wir.
Das LCD und die LED werden dunkel.
Angehängte Dateien:
OP #4798078
Lesenswert?

Hubert G. schrieb:
> Probier das mal aus.

Habe es eingespielt. Was mir aufgefallen ist:
-Die LED an PIN 9 leuchtet nur kurz auf wenn ich den Taster drücke.
 Ein Dauer leuchten ist nicht mehr vorhanden. PIN13 hast du ja 
blockiert!

-Die LED "L" am Arduine leuchtet jetzt dauerhaft;

-Das LCD wird dunkler, wenn alle drei Relais anschalten; Ist aber nicht 
so dramatisch.

-Das Programm ist ein Mal durchgelaufen. Beim zweiten starten geht nur 
das Relais1 an, und bleibt es auch. Die anderen Relais schalten nicht zu 
oder ab.
Nach 540 sek geht es sogar ins minus mit den Sekunden. Das Programm muss 
manuell abgebrochen werden.
OP #4798171
Lesenswert?

Hubert G. schrieb:
> Wolf G. schrieb:
>> -Die LED an PIN 9 leuchtet nur kurz auf wenn ich den Taster drücke.
>>  Ein Dauer leuchten ist nicht mehr vorhanden. PIN13 hast du ja
>> blockiert!
>
> Wie hast du die Led angeschaltet? Von Pin9 zum Widerstand, Led und dann
> GND?
>
> Diese Version müsste jetzt funktionieren.

Habe es so wie du geschrieben hast umgesetzt. Jetzt geht es.
Programm muss ich später testen!
Vielen Dank
OP #4798737
Lesenswert?

Hubert G. schrieb:
> Diese Version müsste jetzt funktionieren.

Geht gut, sehr gut.
Was noch auffällt ist, dass das Display immer noch dunkler wird, wenn 
alle 3 Relais auf LOW gehen.
Werde den 10K Poti einbauen und schauen ob es besser wird, wie im Bild 
gezeigt.
Sketch bleibt gleich oder?

Kann man das mit dem Zähler evtl. so machen das z.B. alle 15 sek. als 
ein Durchlauf zählt?
Beispiel:
5 sek. Relais1 ein
5 sek. Relais2+3 ein
5 sek. Relais1+2+3 aus (ist Wartezeit)

Dann soll folgende Rechnung aufgehen: 3x5 sek =15sek.; 10x15 sek. 
(Durchlaufzeit) =150sek.
Aktuell ist es so, dass wenn ich 10 eingebe sind es 80 sek.
Angehängte Dateien:
#4799235
Lesenswert?

Wolf G. schrieb:
> Kann man das mit dem Zähler evtl. so machen das z.B. alle 15 sek. als
> ein Durchlauf zählt?
> Beispiel:
> 5 sek. Relais1 ein
> 5 sek. Relais2+3 ein
> 5 sek. Relais1+2+3 aus (ist Wartezeit)

Ich weiß nicht ob ich das richtig verstanden habe.
Die Änderung ist folgend:
Jetzt musst du nur die Zeiten in INTERVAL1 bis 3 ändern und die Anzahl 
der Durchläufe angeben, dann wird die Ablaufzeit automatisch berechnet.
Angehängte Dateien:
OP #4806485
Lesenswert?

Hallo Hubert,

habe noch eine Frage an dich:
Kann man den Sketch so gestalten, dass man in einem Sketch die Wahl hat 
zwischen zwei Programmen zu wählen? Also wenn man auf Taster 1 drückt 
startet das Programm1 und wenn man auf Taster 2 drückt startet das 
Programm2! Der Unterschied der Programme wäre dann nur die 
Zeiteinstellung z.B. Programm1 läuft insgesamt 5 min. und Programm2 10 
min.
Danke
#4806487
Lesenswert?

dann packe deine 2 Programme in je eine Funktion, oder Unterprogramm und 
rufe je nach Taste diese auf.

nach dem Setup Init steht dein Programm auf Menü -> Hauptprogramm -> 
Programmwahl, dort je nach Taste wird auf PRG1 oder PRG2 verwiesen.

Wenn die beiden sich nur in der Zeit unterscheiden gibst du diese halt 
im Hauptmenü vor bevor du das einzige Programm aufrufst.
#4806850
Lesenswert?

Wolf G. schrieb:
> Zwei Tasten kämen in Frage

Hast du schon ein Endziel, oder solle sich das noch weiter entwickeln.
Wenn das mit zwei Tasten das Endziel ist, dann kann man das quick und 
dirty machen. Sollte sich das noch weiter entwickeln, dann muss man das 
Modular aufbauen, sonst macht man jeden Schritt immer wieder neu. Es 
würde aber in jedem Fall meine vorhandene Zeit zu sehr beanspruchen.
Gast #4807434
Lesenswert?

Joachim B. schrieb:
> Ich empfehle da lieber Drehencoder mit Drucktaste und LCD Menüführung
Bei dem hier geballt präsentierten Fachwissen eine ganz tolle Idee. 
Drehencoder hat mich diverse Stunden beschäftigt, die Masse der im 
Internet gefundenen Lösungen geht nicht anständig, sobald man mehr zu 
tun hat als nur den Drehencoder abzufragen. Egal, ich konnte es lösen, 
habe den im Interrupt.

Wolf G. schrieb:
> Ja das währe vorerst das Endziel.
Rechtschreibung "wäre"?

> Sollte sich dennoch was ändern, dann würde ich dich gerne auf einem
> anderen Weg anschreiben, vorausgesetzt deiner Einwilligung.
> Unter, sketch.hubert@anpa.de könntest du mich anschreiben.
Ich bewundere Hubert, mit welcher Geduld er Dich bislang versorgt hat. 
Hast Du nicht genug Hinweise bekommen, endlich einmal selbst zu 
arbeiten?

Zu Deinen zwei Tasten: In der "loop()" fragst Du ab, welche Taste 
gedrückt ist und dann geht es ab zu "void Taste_1()" bzw. "void 
Taste_2()", wo Dein Code steht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren