INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
showerloop mit Controllino
09.03.2020, 21:30
Beitrag #25
RE: showerloop mit Controllino
(09.03.2020 21:23)nbk83 schrieb:  Ich hoffe jetzt, dass ich nicht von den anderen gesteinigt werde Wink
Warum sollte das passieren?

Es gibt immer mehrere Möglichkeiten der Realisierung und ich finde es gut, wenn auch andere angesprochen werden, besonders wenn es evtl. um Realisierungen im Firmenumfeld geht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.03.2020, 22:44 (Dieser Beitrag wurde zuletzt bearbeitet: 09.03.2020 23:14 von Franz54.)
Beitrag #26
RE: showerloop mit Controllino
(08.03.2020 10:19)Breze schrieb:  Drain
V1, V2, V3, V4, V5, UV, Heizung und Pumpe

Also wenn ich mir das hier anschaue, dann ist nix mit dem Controllino Mini. Der hat zu wenig Relaisausgänge. Aber der Maxi wäre dafür passend.

Mit einer Taste mehrere Ausgänge schalten ist kein Problem. Der Controllino registriert dass eine Taste gedrückt wurde und er macht als Folge darauf alles was ich haben will. Er kann also genauso 3 oder 8 Relais schalten. Er macht genau das, was man eben haben will. Er macht ja im Lieferzustand gar nichts. Du musst ihm alles in Form eines Programmes sagen, wie er auf die Taste reagieren soll, oder wie er auf welche Taste auch immer, reagieren soll.

Franz

PS: Ich finde den Controllino für diese Aufgabe sehr passend, weil der die ganzen EMV Maßnahmen schon drin hat. Diese Dinge sind als Konkurenz zur Siemens Logo Steuerung entstanden. Ich habe hier auch noch eine Logo 8, wie im Bild hier. Auf der habe ich mich vorher eingeschossen. Dann war ich nicht soooo sehr erbaut von der Programmierung, weil es mir nicht gefallen hat, dass diese Funktionsblöcke vorgeben, was ich damit machen kann, oder eben nicht machen kann. Mit der C++ Programmierung bin ich völlig frei, die Controllino-Steuerung macht einfach genau das, was ich will. Und ist nicht durch die Brust ins Auge zu programmieren, wie die Siemens Logo. Das ist der Grund warum ich von der Logo abgekommen bin und die hier nur noch verstaubt. Wer will kann mir gerne das ganze Ding wie am Bild abkaufen.


Angehängte Datei(en) Thumbnail(s)
   

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.03.2020, 22:46
Beitrag #27
RE: showerloop mit Controllino
Hab mir grad mal das Manual von der Showerloop Seite angeguckt, ich hoffe doch ernsthaft, dass hier NIEMAND versucht, das Ding nach diesem Manual nachzubauen. Elektrische Sicherheit hat in Deutschand offensichtlich (und das ist auch gut so) einen anderen Stellenwert als in Finnland...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 11:22
Beitrag #28
RE: showerloop mit Controllino
Danke Jan,
hab ich noch gar nicht drangedacht. Ich dachte immer Siemens ist teuer darum hab ich gar nicht nachgeschaut.
Bevor ich mich kundig mache, wie wird das Programm auf die Logo übertragen, ich sehe keine Schnittstelle?

Gruß Breze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 11:37
Beitrag #29
RE: showerloop mit Controllino
Hallo Tommy,
vielleicht habe ich mich falsch ausgedrückt.
Ich mache seit Tagen nichts anderes als in Arduino Tutorials nach Anregungen und Lösungen zu suchen.
C++ neu zu lernen, dürfte etwas mehr Zeit in Anspruch nehmen als ich zur Verfügung habe.
Einen ähnlichen Sketch umzuschreiben trau ich mir jederzeit zu, nur habe ich bis jetzt noch keinen gefunden und dachte hier im Forum kann mir jemand helfen.
Ein Beispiel:
wie steuere ich einen Relaisausgang im Controllino an.
Soviel ich mitbekommen habe müssen im setup erst die Geräte (Tastatur etc.) angegeben werden. Die Steuerung passiert dann in loop.
Nur die Syntax macht mir Probleme, deshalb wollte ich hier versuchen etwas ähnliches zu finden.
Wie gesagt einen Sketch umzuschreiben traue ich mir zu.
Danke für deine Antwort.

Gruß Breze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 11:54
Beitrag #30
RE: showerloop mit Controllino
Dein Fehler ist, etwas zum Umarbeiten zu suchen (was es wohl nicht gibt).

Du solltest eher die Grundlagen lernen. Das kann Dir keiner abnehmen.

Dazu hat die IDE sehr viele Beispiele (z.B. Button einlesen, Ausgänge ansteuern) und vor allem für Zeitsteuerungen BlinkWithoutDelay.
Diese solltest Du durcharbeiten. Was beim Controllino anders ist, als beim UNO (Beschaltung Eingänge/Relais) sagt Dir das Datenblatt. Ich habe keinen Controllino, kann dazu also nichts sagen.

Du musst nicht C++ komplett lernen, nur die Grundlagen, die Du benötigst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 11:58
Beitrag #31
RE: showerloop mit Controllino
Hallo Franz,
danke für deine Antwort und Anregung.
Das mit dem Controllino Mini habe ich mir auch schon gedacht und bin dann auf den Maxi pure gestoßen, der dürfte, denke ich, reichen.
Vielleicht kannst du mir ein paar Tipps geben auf die Frage die ich in der Antwort auf Tommy geschrieben habe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 12:19 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 12:19 von Franz54.)
Beitrag #32
RE: showerloop mit Controllino
(10.03.2020 11:58)Breze schrieb:  Hallo Franz,
Vielleicht kannst du mir ein paar Tipps geben auf die Frage die ich in der Antwort auf Tommy geschrieben habe.

Ich kann dir hier mal ein Muster geben, indem Tasten abgefragt werden, LED´s angesteuert werden, eine RC-Uhr benutzt wird, ein LCD Display benutzt wird. Es gibt keine delay() alles ist nur mit millis() kontrolliert. Also die Grundsätzlichen Funktionen die du brauchst gibt es hier als Muster. Und es ist alles möglichst eindeutig beschrieben.

Das ganze ist auf nem Arduino Mega, aber die Pin.Nummern musst du ja eh anpassen. Daraus kann man ein paar wichtige Funktionen erkennen, die man eigentlich immer braucht. Ob die Controllino´s spezielle Bezeichnungen der Pin´s haben, weiß ich nicht, ich hatte noch keinen, weil ich noch kein Projekt hatte, wo dieser Controller sinnvoll wäre.

Franz

Code:
// Deklarationen

// Timer DS3231 einrichten
#include "Wire.h"
#define DS3231_ADDRESSE 0x68
unsigned long Sekundenablauf05 = 0; // Zeitausgabe alle 1000ms 1 Sekunde einrichten
const unsigned long Pausezeit05 = 1000;

// LCD Display I2C 4 Zeilen je 20 Zeichen einrichten
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Baudrate fuer Serial Schnittstelle
const int baudSerial = 9600;
//-----------------------Taster01----------------------------------------
// const byte ist im Programm Constant und byte ist fuer Werte 0-255
const byte Taster01 = 15;           // Pin 15 wird Constant als Taster01 bezeichnet
byte Tasterstatus01 = 0;            // Zum Abfragen des Tatsenpins
byte Tastenmerker01 = 0;            // Zum Merken des aktuellen Tatsenstatus
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit01 = 200;
//-----------------------Taster02---------------------------------------
const byte Taster02 = 16;           // Pin16 wird Constant als Taster02 bezeichnet
byte Tasterstatus02 = 0;
byte Tastenmerker02 = 0;
unsigned long Sekundenablauf02 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit02 = 200;
//-----------------------Analoger Eingang A0------------------------------
const byte ANALOG_PIN = A0; // Hier wird der Name fuer den Steuereingang festgelegt
int a0 = 0;      // Der Speicher fuer den Analogwert
int a0alt = 0;   // Der Speicher fuer den alten Analogwert

//-----------------------PWM Pins festlegen am Mega-----------------------
/* Timer und zugehörige Pinns:
   timer 0 (controls pin 13, 4);
   timer 1 (controls pin 12, 11);
   timer 2 (controls pin 10, 9);
   timer 3 (controls pin 5, 3, 2);
   timer 4 (controls pin 8, 7, 6);
   Wenn ich den Pin10 als PWM_PIN3 deklariere, dann bekomme ich Probleme bei der Tonausgabe
   auf Pin 17. Also wenn ich Pin 10 anstelle von Pin 9 als PWM Ausgang benutze, dann wird
   die Tonfrequenz von Pin17 liniar mit dem eingestellten PWM Signal verändert. Wenn ich
   wie jetzt im Programm für Pin10 den Pin9 verwende ist da kein Problem mehr. Der Pin10
   ist genauso wie Pin9 nicht beschalten. Was ja bei einem OUTPUT Pin kein Problem ist.
*/
int PWM_PIN2 = 13;  // PWM Ausgabepin 13 festlegen auf 490Hz, Timer0
int PWM_PIN1 = 11;  // PWM Ausgabepin 11 festlegen auf 31300Hz, Timer1
int PWM_PIN3 = 9;  // PWM Ausgabepin 9 festlegen auf 980Hz, Timer2

//-----------------------AusgangPIN31-------------------------------------
const byte Ausgang01 = 31;          // Pin 31 ist für das Relais01
byte Ausgangsstatus01 = 0;
unsigned long Sekundenablauf03 = 0; // Ausgang Schaltzeit auf 3000ms 3 Sekunden einrichten
const unsigned long Pausezeit03 = 3000;
//-----------------------AusgangPIN32-------------------------------------
const byte Ausgang02 = 32;          // Pin 32 ist für das Relais02
byte Ausgangsstatus02 = 0;
unsigned long Sekundenablauf04 = 0; // Ausgang Schaltzeit auf 1000ms 1 Sekunde einrichten
const unsigned long Pausezeit04 = 1000;
//-------------------------Tonausgabe PIN 17-----------------------------
const byte tonPin = 17;
const int frequenz = 1000;
unsigned long tonZeit = 100;
//================================================================================​=============================
void setup() {

  //I2C für DS3231 aktivieren
  Wire.begin();
  // Wenn die I2C Leitung länger ist, kann man den Tackt für den I2C Bus langsammer machen!!
  Wire.setClock(32000);

  // Serial Schnittstelle starten
  Serial.begin(baudSerial);

  // Wenn die Zeit gestellt werden muß
  // aktuelle Zeit        sek min std wt tag monat jahr
  // einstellenDS3231zeit(00, 40, 17, 3, 01,  03,  20);

  // ----------PWM Tackt für Pin 11&12 auf 31300Hz ändern---------------
  TCCR1B = TCCR1B & 0b11111000 | 0x01;

  //-----------LCD Display Start----------------------------------------
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  //-----------Taster einrichten----------------------------------------
  pinMode(Taster01, INPUT_PULLUP); // Pin 11 fuer Taster01 wird intern auf plus gelegt. Mit GND ueber Taste aktivieren
  pinMode(Taster02, INPUT_PULLUP); // Pin 12 fuer Taster02
  //-----------Ausgang einrichten---------------------------------------
  pinMode(Ausgang01, OUTPUT);      // Pin 31 (Ausgang01) ist als Ausgang aktiviert
  pinMode(Ausgang02, OUTPUT);      // Pin 32 (Ausgang01) ist als Ausgang aktiviert
  //-----------Input und Output Pin für PWM bestimmen-------------------
  pinMode(ANALOG_PIN, INPUT);      // Eingang für Poti
  pinMode(PWM_PIN1, OUTPUT);
  pinMode(PWM_PIN2, OUTPUT);
  pinMode(PWM_PIN3, OUTPUT);
  //--------------Ton Ausgabepin einrichten----------------------------
  pinMode(tonPin, OUTPUT);
}
//================================================================================​=============================
void loop() {

  //-----------Zeit ausgeben von DS3231-----------------------------------
  if (millis() - Sekundenablauf05 >= Pausezeit05) { // 300msec abgelaufen?
    zeigeZeit(); // Zeit ausgeben
    Sekundenablauf05 = millis();
  }
  //----------Analogen Eingang auslesen-----------------------------------
  a0 = analogRead (ANALOG_PIN);
  a0 = map(a0, 0, 1023, 25, 254);
  if ((a0 > a0alt + 2) || (a0 < a0alt - 2)) {
    //------Potiwert auf PWM Ausgang ausgeben-----------------------------
    analogWrite (PWM_PIN1, a0);                       // Analogwert Ausgabe an PWM Pin.11
    analogWrite (PWM_PIN2, a0);                       // Analogwert Ausgabe an PWM Pin.13
    analogWrite (PWM_PIN3, a0);                       // Analogwert Ausgabe an PWM Pin.9
    lcd.setCursor (0, 3);
    lcd.print (F("PWM Wert "));
    lcd.setCursor (11, 3);
    lcd.print (F("    "));
    lcd.setCursor (11, 3);
    lcd.print (a0);

  }
  //-----------Taster01 abfragen--------------------------------------------
  if (millis() - Sekundenablauf01 >= Pausezeit01) { // 300msec abgelaufen?
    Tasterstatus01 = digitalRead(Taster01);         // Pin von Taster01 abfragen
    if (Tasterstatus01 == LOW) {                    // Ist Taster01 gedrueckt?
      Tastenmerker01 = !Tastenmerker01;             // Merken dass Taster01 gedrueckt wurde
      lcd.setCursor (0, 1);
      lcd.print (F("Taster 01  "));
      lcd.print (Tastenmerker01);
      Sekundenablauf01 = millis();
      tone(tonPin, frequenz, tonZeit);
    }
  }

  //-----------Taster02 abfragen--------------------------------------------
  if (millis() - Sekundenablauf02 >= Pausezeit02) { // 300msec abgelaufen?
    Tasterstatus02 = digitalRead(Taster02);         // Pin von Taster02 abfragen
    if (Tasterstatus02 == LOW) {                    // Ist Taster02 gedrueckt?
      Tastenmerker02 = !Tastenmerker02;             // Merken dass Taster02 gedrueckt wurde
      lcd.setCursor (15, 1);
      lcd.print (F("02  "));
      lcd.print (Tastenmerker02);
      Sekundenablauf02 = millis();
      tone(tonPin, frequenz, tonZeit);
    }
  }

  //-------------Ausgang01 schalten-------------------------------------------
  if (millis() - Sekundenablauf03 >= Pausezeit03) { // 3000msec abgelaufen?
    Ausgangsstatus01 = ! Ausgangsstatus01;          // Status wechseln
    digitalWrite (Ausgang01, Ausgangsstatus01);     // Ausgang01 Relais umschalten
    lcd.setCursor (0, 2);
    lcd.print (F("Ausgang01  "));
    lcd.print (Ausgangsstatus01);
    Sekundenablauf03 = millis();
  }

  //-------------Ausgang02 schalten-------------------------------------------
  if (millis() - Sekundenablauf04 >= Pausezeit04) { // 1000msec abgelaufen?
    Ausgangsstatus02 = ! Ausgangsstatus02;          // Status wechseln
    digitalWrite (Ausgang02, Ausgangsstatus02);     // Ausgang02 Relais umschalten
    lcd.setCursor (15, 2);
    lcd.print (F("02  "));
    lcd.print (Ausgangsstatus02);
    Sekundenablauf04 = millis();
  }


}
//=======================Loop Ende============================================================================​==
//---------------Erweiterung für die DS3132---------------------------------------------------------------------
void einstellenDS3231zeit(byte sekunde, byte minute, byte stunde, byte wochentag, byte tag, byte monat, byte jahr)
{
  // Datum und Uhrzeit einstellen
  Wire.beginTransmission(DS3231_ADDRESSE);
  Wire.write(0);
  Wire.write(decToBcd(sekunde)); // Sekunden einstellen
  Wire.write(decToBcd(minute)); // Minuten einstellen
  Wire.write(decToBcd(stunde));
  Wire.write(decToBcd(wochentag)); // 1=Sonntag ... 7=Samstag
  Wire.write(decToBcd(tag));
  Wire.write(decToBcd(monat));
  Wire.write(decToBcd(jahr)); // 0...99
  Wire.endTransmission();
}
//-----------------------------------------------------------------------------------------------------------
void leseDS3231zeit(byte *sekunde, byte *minute, byte *stunde, byte *wochentag, byte *tag, byte *monat, byte *jahr)
{
  Wire.beginTransmission(DS3231_ADDRESSE);
  Wire.write(0); // DS3231 Register zu 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_ADDRESSE, 7); // 7 Byte Daten vom DS3231 holen
  *sekunde = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *stunde = bcdToDec(Wire.read() & 0x3f);
  *wochentag = bcdToDec(Wire.read());
  *tag = bcdToDec(Wire.read());
  *monat = bcdToDec(Wire.read());
  *jahr = bcdToDec(Wire.read());
}
//-----------------------------------------------------------------------------------------------------------
void zeigeZeit() {
  byte sekunde, minute, stunde, wochentag, tag, monat, jahr, minuteAlt;
  leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr);   // Daten vom DS3231 holen
  if ((minute > minuteAlt) || (minute == 0)) {
    switch (wochentag) {
      case 1:
        lcd.setCursor(0, 0);
        lcd.print(F("Mo "));
        break;
      case 2:
        lcd.setCursor(0, 0);
        lcd.print(F("Di "));
        break;
      case 3:
        lcd.setCursor(0, 0);
        lcd.print(F("Mi "));
        break;
      case 4:
        lcd.setCursor(0, 0);
        lcd.print(F("Do "));
        break;
      case 5:
        lcd.setCursor(0, 0);
        lcd.print(F("Fr "));
        break;
      case 6:
        lcd.setCursor(0, 0);
        lcd.print(F("Sa "));
        break;
      case 7:
        lcd.setCursor(0, 0);
        lcd.print(F("So "));
        break;
      default:
        break;
    }
    if (tag < 10) {
      lcd.print(F("0"));
    }
    lcd.print(tag); // ausgeben T.M.J H:M:S
    lcd.print(F("."));
    if (monat < 10) {
      lcd.print(F("0"));
    }
    lcd.print(monat);
    lcd.print(F("."));
    lcd.print(jahr);
    lcd.print(F(" um "));
    if (stunde < 10) {
      lcd.print(F("0"));
    }
    lcd.print(stunde, DEC); // byte in Dezimal zur Ausgabe
    lcd.print(F(":"));
    if (minute < 10) {
      lcd.print("0");
    }
    lcd.print(minute, DEC);
    minuteAlt = minute;
  }
}
byte decToBcd(byte val) {
  // Dezimal Zahl zu binary coded decimal (BCD) umwandeln
  return ((val / 10 * 16) + (val % 10));
}
byte bcdToDec(byte val) {
  // BCD (binary coded decimal) in Dezimal Zahl umwandeln
  return ((val / 16 * 10) + (val % 16));
}

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste