Show Posts
Pages: [1] 2 3 ... 10
1  International / Deutsch / EVA - Prinzip erklären? on: August 12, 2014, 08:22:07 am
Hallo, ich möchte gern etwas zum Thema EVA wissen. Wenn ich einen Taster und eine LED habe, ist mir das EVA Prinzip klar. Was ich nicht ganz verstehe, wenn es für mehrere Taster oder Eingaben oder mehrere Aktoren sind. Verwende ich als erstes ALLE Eingänge und frage sie mit einmal ab und dann alle Verarbeiten und alle Ausgeben? Teile ich es in zB.: in 3 einzelne Funktionen auf?( 1. Eingabe; 2. Verarbeitung; 3. Ausgabe??)
Oder fasse ich es zusammen, für jeden Taster und LED, als ein EVA? zB: 1.Taster und 1. LED -> EVA
und dann den 2...... und dann 3....... und dann 4.... usw.
Ich habe keinen Code dazu, ich möchte nur gern den Ablauf etwas besser verstehen und so meine Schreibweise im Code verbessern  smiley-lol .

MfG  Marco
2  International / Deutsch / Re: MOSFET ersatz für Relais on: August 03, 2014, 12:49:37 pm
Hi, ich stelle das Projekt in ein paar Tage hier ein und dann denke ich es, wird klar werden was ich meine  smiley-lol
Es ging nur darum mit welcher Spannung ich das Gate ( 12V ? ) ansteuern kann. Den IRLZ44N habe ich genommen, wegen 5V Gate spannung. (Ich tue mich sehr schwer beim lesen von Datenblättern) Arduino.
Es wird wohl der BUZ11 werden für die Relais, weil ich das Gate mit bis zu 20V beschalten kann. Stimmt doch?  smiley-wink

MfG Marco
3  International / Deutsch / Re: MOSFET ersatz für Relais on: August 03, 2014, 10:51:37 am
Hi, ich habe nach stunden der suche ,nun endlich eine Lösung gefunden. Hoffe ich  smiley-mr-green
Ich kann das Gate mit bis 15V ansteuern. Wäre das richtig für den IRLZ44N? Datenblätter sind für mich, wie das alte Testament! Unverständlich!  smiley-confuse smiley-confuse smiley-confuse smiley-confuse

Schaltplan neu gibt es nur, wenn der Mosfet passt. Ich möchte jetzt keine neuen kaufen, weil es mit den Relais zur Zeit geht. Es wäre ein Aufgabe für den Winter.  smiley-grin

MfG  Marco
4  International / Deutsch / Re: MOSFET ersatz für Relais on: August 03, 2014, 10:17:51 am
Hi, ich schalte damit (mit den Relais) 12v Magnetventil ca. 4A pro Ventil und 12v Pumpe ca 6A. Wie gesagt, eigentlich sollte die Platine alles schalten mit den Mosfet. Aber leider sind die Leiterbahnen zu klein, so schalten die Fet´s halt erst mal Relais, mit denen dann die Lasten geschalten werden. Ich hatte mir nur überlegt, die Relais durch die Fet´s zu ersetzen. Es kommen aus der Platine aber nur 12V raus, zum schalten. ( die Fet´s werden mit 5v -> Arduino gesteuert)
Es klingt vielleicht etwas umständlich aber ich habe die Fet´s halt noch rum liegen und brauch keine neuen bestellen.
Ich möchte nur wissen, kann ich die 12V auch an Gate anlegen zum schalten?

MfG  Marco
5  International / Deutsch / MOSFET ersatz für Relais on: August 03, 2014, 06:14:51 am
Hallo zusammen, ich habe nur eine kurze Frage.
Ich benutze MOSFET IRLZ44N und "schalte" diese mit 5V vom Arduino UNO, dieser schaltet ein 12V Netz  mit einem Relais.
Also Arduino -> Mosfet -> Relais -> 12V ( ich habe bei der Platine die Leiterbahn zu klein gewählt, des wegen der Umweg mit dem Relais)
Ich würde nun gern die Relais austauschen und Mosfet verwenden und mir einzelne kleine Platinen machen. So das ich die Relais dann tauschen kann, wann ich will. Ich habe aber im Moment noch ein paar IRLZ44N hier rum liegen und möchte wissen ob ich diese dafür verwenden kann. Das ganze befindet sich im 12V Netz aber der Schaltstrom beträgt auch 12V.
Kann ich den IRLZ44N mit 12V schalten oder welcher Mosfet geht auch?

Danke   smiley

MfG Marco

PS.: Datenblatt ist für mich leider in Ausländisch   smiley-sad
6  International / Deutsch / Re: Frage zu Pins für Motortreiberplatine on: July 24, 2014, 08:18:26 am
Versuche es doch mal damit  smiley

http://www.ebay.de/itm/10A-15A-45A-60A-H-bridge-Dual-DC-Motor-Driver-Controller-Strong-braking-MOSFET-/160910347243

Marco
7  International / Deutsch / Re: millis(), bekomme unterschiedliche Zeiten on: July 22, 2014, 06:23:48 am
Hi, ich glaube, das Problem ist gelöst! Es sitzt ca. 50cm vorm Monitor   smiley-confuse
Der Code macht genau das, was er machen soll.
Das Problem ist, das die letzte Zeitspeicherung ca 12h ( jetzt mehr als 1 Minute) her ist und somit ist die if Bedienung immer true und er setzte die Vari. gleich wieder auf Null  -> wie er soll! Nur ist die Leuchtdauer sehr kurz  smiley-lol .
Ich habe es jetzt mit einem counter gelöst, der nach dem Einschalten jede sekunde eins hoch zählt und ich dann mit dem counter schalte.
Kennt jemand eine andere Lösung für das Problem?
Hier die Änderung:
Code:
if (licht_Wert > ( schaltWert + hysterese)) { lichtzustand = 0; abschalt = 1; }   // Tag (hell) Zustandsvari = 0 -> AUS;    erst wenn Licht (Tag) dann Vari. auf 1 setzen

 if (abschalt == 1 && licht_Wert < (schaltWert - hysterese)) { lichtzustand = 1;} // draußen dunkel und Abschaltvari = 1 -> Licht AN
  //Abschaltvari. = 1, verhindert wieder einschalten nach nachtabschaltung

 if (lichtzustand == 1 && (millis() - letzteMillis1 > minute) ) // nach 1 MInute abschalten,
{
letzteMillis1 = millis(); //Zeit merken
//  // Licht AUS
// abschalt = 0; //Abschaltvari. auf 0 setzen
count2++;
}
if(count2 >= 5) { abschalt = 0; count2 = 0; lichtzustand = 0; } //test code!!!!! ZÄHLT ZU SCHNELL!!!!!!!!!

if (lichtzustand == 0) { digitalWrite(licht, LOW);} // Tag -> licht AUS
if (lichtzustand == 1) { digitalWrite(licht, HIGH);  }// Nacht -> Licht AN


im Anhang der ganze Code. ( werden eigentlich auch die anderen . ino angezeigt?


MfG  Marco
8  International / Deutsch / Re: millis(), bekomme unterschiedliche Zeiten on: July 21, 2014, 05:59:56 am
Hi, langsam bekomme ich mehr graue Haare!  smiley-mad
Ich habe nun folgendes Versucht, aber hier wird die Vari bei jedem Durchlauf neu geschrieben.
Code:
if (abschalt == 1 && licht_Wert < (schaltWert - hysterese)) { lichtzustand = 1; letzteMillis1 = millis(); } // draußen dunkel und Abschaltvari = 1 -> Licht AN
   //Abschaltvari. = 1, verhindert wieder einschalten nach nachtabschaltung


if ( (millis() - letzteMillis1) > minute) // nach 1 MInute abschalten,
{
   //Zeit merken
lichtzustand = 0; // Licht AUS
abschalt = 0; //Abschaltvari. auf 0 setzen
letzteMillis1 = millis();
}

An anderer Stelle, bekomme ich sie nur eingeschaltet oder sie bleibt die ganze Zeit AUS.

An einer anderen  Stelle im Code funktioniert es ohne Probleme, warum nur hier nicht?  smiley-confuse
Beispiel:

Code:
if (wc_Wert == 1) // WC ist AUS
{
if ((Boden >= (boden_Wert_1 - boden_hysterese))  && millis() - Startzeit_giessen  > 60000UL && blumen_G == 0 )  // Bodenfeucht mit Hysterese und nach 1 Minute, dann giessen



{ // wenn Spülkasten leer, dann nicht giessen und abbruch
blumen_G = 1; // Zustandsvari. Wasser AN
Startzeit_giessen = millis();

}

}
}

if (millis() - Startzeit_giessen > giessen_abschalten * 2 && blumen_G == 1)   // nach 4 Minuten abschlten und dann wieder 1 minute warten damit Erde durchfeuchten kann und dann wieder messen
{

blumen_G = 0; // Zeit um, Wasser abschalten !!
  Startzeit_giessen = millis();
  blumen_zaehler ++; // Fehlerzähler Einschalten nicht größer 3
}
  }

MfG  Marco
9  International / Deutsch / millis(), bekomme unterschiedliche Zeiten on: July 20, 2014, 01:10:41 pm
Hallo zusammen.
Ich stehe wieder mal vor einem Problem. Ich möchte eine Außenbeleuchtung mit einem LDR Einschalten und nach 1 Minute ( später 2h) wieder ausschalten. Soweit so gut, der Code funktioniert. Aber , die 1.Schaltzeit beträgt 1 MInute aber die anderen nur ca 20 sec.
Die Lampe soll auch nur einmal eingeschaltet werden und dann erst wieder am nächsten Abend. Ich habe nun die letzteMillis schon an verschiedenen orten versuch aber ohne den gewünschten Erfolg.
Die Zeit soll erst nach dem Einschalten zählen.
abschalt und lichtzustand werden zu schnell auf null gesetzt


Code:
void aussenlicht() // 20 Messungen  duchschnitt bilden und dann Licht AN oder AUS schalten
 { // hier kommt noch eine Abschaltung nach 2h hin, die erst am morgen wieder den Wert (Zeit) auf Null setzen soll


static unsigned long letzteMillis; // letzte millis bei Einschaltdauer
const unsigned long Stunde = 60000UL * 60 ;  // Umrechnung in Stunde, Stunde ist gleich 1h
const unsigned long minute = 60000UL;  //  1minute
static unsigned long lichtzeit_1 ; // Zeit für Werte einlesen
static int count, lichtsum;
static  int schaltWert = 35; // Schaltwert LDR
static  int hysterese  = 5;  // Toleranz LDR Wert



if( millis() - lichtzeit_1 > 2000 ) // alle 2 sec eine Messung,
{
lichtzeit_1 = millis();
int ADin = ldr_Wert; // LDR wert speichern
lichtsum += ADin; // aufaddieren
count++; // Zähler +1


if (count == 20) // 20 Messungen erreicht
{   count = 0;
licht_Wert = lichtsum / 20; //durch 20 teilen, speichern
lichtsum = 0; // speicher auf 0 setzen -> wieder 20 Messungen
}
}

if (licht_Wert > ( schaltWert + hysterese)) { lichtzustand = 0;}   // Tag (hell) Zustandsvari = 0 -> AUS

  if (abschalt == 1 && licht_Wert < (schaltWert - hysterese)) { lichtzustand = 1;} // draußen dunkel und Abschaltvari = 1 -> Licht AN
   //Abschaltvari. = 1, verhindert wieder einschalten nach nachtabschaltung
if (lichtzustand == 1) // Licht AN


if (millis() - letzteMillis > minute) // nach 1 MInute abschalten,
{
letzteMillis = millis();  //Zeit merken
lichtzustand = 0; // Licht AUS
abschalt = 0; //Abschaltvari. auf 0 setzen

}

}


if (lichtzustand == 0) // Tag -> licht AUS
{
digitalWrite(licht, LOW);
}

if (lichtzustand == 1) // Nacht -> Licht AN
{
digitalWrite(licht, HIGH);
}

if (licht_Wert > 300) // erst wenn Licht (Tag) dann Vari. auf 1 setzen
{
abschalt = 1;
//letzteMillis = millis();   ??????????????


}

Irgendwie steh ich auf dem Schlauch  smiley-cry     im restlichem Code funktioniert es


MfG  Marco

10  International / Deutsch / Serial.read geht nicht on: July 17, 2014, 09:29:13 am
Hi , ich bin nun am verweifeln. Ich möchte eine Zahl ( 1-8) über serial senden. Leider geht es nicht so recht. Die Vari state1 zeigt immer -1, ist aber unsigned int deklariert.  Ich möchte auch nicht immer Enter drücken müssen, es soll bei drücken der "6" die LED an bzw. wieder aus schalten.   smiley-sad

Code:
if (Serial.available() > 0);
{
state1 = Serial.read();

}
if (state1 == '6')
{
digitalWrite(LED, HIGH);
}
if (state1 == '7')
{
digitalWrite(LED, LOW);
}

MfG  Marco

PS: Sorry ich hatte einen kleinen Tipfehler!  also 6 enter-> LED an, 7->aus
 wie bekomme ich nun hin OHNE Enter drücken?
11  International / Deutsch / Re: String zusammensetzen und Ausgabe auf LCD on: July 17, 2014, 08:58:06 am
Hi, habe nun versucht den String auf´s Display zubekommen aber nur mit Fehlermeldung.
Die #include <avr/pgmspace.h> habe ich. Fehlt noch eine  *.h ? oder was ist der Fehler?


LCD.ino:20: error: initializer fails to determine size of '__c'

Code:
if (blumen_G != alt_blumen_G)
{
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(F(string_5));  // mit ("string_5") geht auch nicht
}

Code:
prog_char string_0[] PROGMEM = "Licht: AN";   // "String 0" etc are strings to store - change to suit.
prog_char string_1[] PROGMEM = "Licht: OK";
prog_char string_2[] PROGMEM = "WC: AN";
prog_char string_3[] PROGMEM = "WC: OK";
prog_char string_4[] PROGMEM = "WC: Störung";
prog_char string_5[] PROGMEM = "Blumen: AN";
prog_char string_6[] PROGMEM = "Blumen: OK";
prog_char string_7[] PROGMEM = "Blumen: Störung";
prog_char string_8[] PROGMEM = "Kühlschrank 12V";
prog_char string_9[] PROGMEM = "Kühlschrank 220V";


// Then set up a table to refer to your strings.

PROGMEM const char *string_table[] =    // change "string_table" name to suit
{
string_0,
string_1,
string_2,
string_3,
string_4,
    string_5,
string_6,
string_7,
string_8,
string_9
};

char buffer[20];    //


MfG  Marco
12  International / Deutsch / Re: String zusammensetzen und Ausgabe auf LCD on: July 15, 2014, 12:16:23 pm
Danke für die schnelle Hilfe  smiley-grin
Eine Frage hätte ich noch, was bedeutet das sternchen bei char* ? Multiplizieren?

MfG   Marco
13  International / Deutsch / String zusammensetzen und Ausgabe auf LCD on: July 15, 2014, 08:50:44 am
Hallo zusammen,ich würde gern einen Text auf dem LCD ausgeben. Genauer gesagt möchte ich ein Wort ( oder mehrer) in einem Array im eeprom speichern und sie nach bedarf zusammen setzen und ausgeben.
z.B.: "Wasser" und "OK" und "Störung" ,  eine Variable bekommt einen Wert und dann soll , je nach Wert,  der Text sich zusammen setzen : "Wasser OK" oder "Wasser Störung".  Ich habe schon PROGMEN mir an gesehen aber so richtig steige ich nicht durch und bei String oder string verstehe ich den Unterschied nicht. Zur Zeit verwende ich noch LCD.print"........." , was ich ändern möchte.
Das LCD wird über i2c gesteuert , von einem Nano.

Danke  smiley-grin

MfG  Marco
14  International / Deutsch / Re: millis(), umrechnen ms in sekunde und dann auswerten on: July 07, 2014, 02:26:53 pm
Hallo,
 DANKE erst mal für die vielen Tipps  smiley-lol . Eigentlich wollte ich nur die Zeitdifferenz in Minuten oder Stunden, damit ich zB 2s schreibe und nicht 2000 ms oder eben für Stunden das gleiche. Es ist keine Schaltuhr, dafür hätte  ich mehrere RTC´s .
Ich schalte das Licht über LDR ein und möchte das es nach 2h wieder aus geht.
Wie gesagt, ich hatte ein variante irgendwo gesehen, bei der der Differenzwert durch 1000 geteilt wurde und dann nur mit sekunde ( millis-letztemillis / 1000 > 2s  , als Beispiel). Eure vorschläge werde ich test, Danke.
Hintergrund ist, das ich diese Variante im Code verwende,  den ein Freund auch nutzt, so das er die Werte eben schneller erkennt unnd ändern kann.
Danke   smiley-grin

MfG  Marco
15  International / Deutsch / millis(), umrechnen ms in sekunde und dann auswerten on: July 06, 2014, 04:38:56 am
Hi, ich möchte die Zeitdifferenz in ms umrechnen in sekunde und dann mit dem Wert vergleichen. Ich hatte es schon irgendwo gelesen, vielleicht hier im Forum oder im Netz aber ich kann es nicht mehr finden.
Bei größeren Zeit Werten, finde ich es übersichtlicher, wenn der Wert in sekunde ist.
Ich möchte eine "Zeitschaltuhr" die nur einmal am Tag (besser Abends) eine Lampe einschatet und diese nach ca 2 Stunden wieder ausschaltet. ( keine zusätzliche Hardware!  ) mehr nicht!
Hier ein kleiner test Code:
letzteMillis ist unsig long

Code:

  if ((millis() - letzteMillis) / 1000 > 2 )  // differenz geteilt durch 1000 (ms -> s ) größer 2s
  {                                           // leider geht es so nicht, wie ist richtig
  digitalWrite(led, HIGH);

  }
 if(millis() - letzteMillis >3000)      // das geht, aber größere Zeit werden dann unübersichtlich zB  2Stunden
{
digitalWrite(led, LOW);
letzteMillis = millis();
}

MfG  Marco
Pages: [1] 2 3 ... 10