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
"Programmierunterstützung" gesucht
26.02.2014, 21:15
Beitrag #17
RE: "Programmierunterstützung" gesucht
Hallo stfN2128,

Zitat:Gibt es einen Befehl mit dem ich mein Relais z.B. nur 100ms lang schalten kann um dann erstmal wieder den Sensorwert zu prüfen?
Erkläre mal bitte genauer. Schreibe mal eine Abfolge auf wie es funktionieren soll.

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.02.2014, 10:04 (Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2014 10:05 von stfN2128.)
Beitrag #18
RE: "Programmierunterstützung" gesucht
Guten Morgen RK,

Code:
void do_prog1()
{
do
{
  delay(40);
  val1 = analogRead(sensorvl);
  if (val1 > 300) // wenn Wert größer als 300 vom wert 10 abziehen
  {
    val1 = val1 - 10;
   digitalWrite(relais2, LOW);
   }
  else
{
digitalWrite(relais2, HIGH);
}
  if (val1 < 250) // wenn Wert kleiner als 250 dem wert 10 dazuzählen
   {
   val1 = val1 + 10;
   digitalWrite(relais1, LOW);
  }
else
{
digitalWrite(relais1, HIGH);
}
while (val1 > 300 or val1 < 250);


Also ich habe einen Sensor und ein Relais. Mein Relais schaltet wiederrum ein Magnetventil. In meiner Schleife habe ich ja drin stehen, dass es schalten soll wenn Sensorwert < 250 oder > 300 ist.
Wenn dem so ist, möchte ich allerdings mein Relais nur für 100ms schalten, um dann "in Ruhe" wieder den Sensorwert zu prüfen und entsprechend zu reagieren. Also ich will den ganzen durchlauf ein wenig verlangsamen quasi.

Mein Magnetventil lässt Luft hinzu bzw. ab, je nach dem welches gerade geschalten ist. Und entsprechend ändert sich dann der Sensorwert. Die Werte muss ich ständig abfragen, da die Änderung relativ schnell von statten geht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.02.2014, 09:39
Beitrag #19
RE: "Programmierunterstützung" gesucht
Moin,
Zitat:Wenn dem so ist, möchte ich allerdings mein Relais nur für 100ms schalten
Was ich nicht verstehe ist "nur für 100ms schalten".
Im Moment schaltet der Code das Relais ja nach Inhalt von val ohne jeglichen Zeitbezug. Möchtest du,dass
a) das Relais bei Änderung des Schaltzustandes in jedem Fall 100ms in diesem Zustand bleibt, auch wenn sich val innerhalb dieser 100 ms wieder geändert hat, und danach erst wieder gemessen wird
b) generell der Code nach jeder Messung 100ms wartet
c) unabhängig vom Inhalt von val und damit vom Schaltzustand, nach 100ms in jedem Fall neu gemessen wird (also val neu belegt wird) und das Relais dann neu geschaltet wird?

Welches davon meinst du?

Kann es sein, dass du verhindern möchtest, dass das Relais flattert? Wenn ja, guck mal bitte meinen Post hier: http://www.arduinoforum.de/arduino-Threa...=hysterese

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2014, 21:16 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2014 21:25 von Stich73.)
Beitrag #20
RE: "Programmierunterstützung" gesucht
Hallo
du schreibst:
Zitat:da die Änderung relativ schnell von statten geht.

und du wilst den Regelprozess aber verlangsamen?
Wenn Luft eingeblasen wird und du dann Überdruck hast kann die Steuerung nicht erst noch ewig warten da es sonst knallt.
Gruß

Hallo,

was du suchst ist also eine Druckluftsteuerung wie an einer Automatiksäule.
Druckluft Vorwählen, Luft strömt ein, System wartet dann wieder 2 sec. und Regelt nach.
Das geht aber nur über eine Luft Volumenbegrenzung im Vorlaufsystem.
Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.05.2014, 09:38 (Dieser Beitrag wurde zuletzt bearbeitet: 06.05.2014 10:07 von stfN2128.)
Beitrag #21
RE: "Programmierunterstützung" gesucht
Hallo ihr,

sorry - war einige Zeit still hier. Kam Fassenacht, ein Amerika Urlaub, einige Vorbereitungen dafür und dann noch das kalte Wetter dazwischen. Die Theorie steht nun. Vor 2 Tagen ging es an den Praxistest.


@Ricardo
Meine Intension ist es, den ganzen Programmablauf etwas zu verlangsamen. Denn der Praxistest hat gezeigt, wie ich es mir schon gedacht habe... Sad Der Sensorwert val ändert sich viel viel zu schnell als meine Relais da hinterher kommen.

Daher dachte ich mir, ich schalte das Relais einfach mal 50ms, val wird erneut überprüft und entsprechend gehandelt. Die 50ms sind nur ein theoretischer Wert, ich muss da dann erst nochmal genau sehen wie weit der Wert sich verändert bei 50ms. (Auch muss ich erstmal schauen ob die Relais und meine Ventile überhaupt so schnell sind) Das kann dann noch angepasst werden. Smile

Also eigentlich bei deinen Beispielen trifft a.) zu.

Sollte ja dann so funktionieren, oder?

Code:
void do_prog1()
{
do
{
  val1 = analogRead(sensorvl);
  if (val1 > 460) //wenn Sensorwert über 460 ist
  {
    
   digitalWrite(relais2, LOW); //Relais schaltet und Luft wird abgelassen
   delay(50);
  digitalWrite(relais2, HIGH);
   }
  else
{
digitalWrite(relais2, HIGH); //es wird keine Luft abgelassen
}
  if (val1 < 435)
   {
  
   digitalWrite(relais1, LOW); //Relais schaltet und Luftdruck wird erhöht
   delay(50);
   digitalWrite(relais1, HIGH);
  }
else
{
digitalWrite(relais1, HIGH); //Relais schaltet nicht
}
Serial.println("Sensorwert1: ");
Serial.println(val1);
}
while (val1 > 460 or val1 < 435);  Schleife läuft solang bis Sensorwert zwischen 460 und 435 ist

//Sensor VL erledigt


@Stich73

Knallen tut nichts, der Druck in meinen Druckluftbehälter ist geringer, als der Druck den meine (in deinem Beispiel) Reifen aushalten.
Aber da brauchst du dir keine Sorgen machen, es soll keine Druckluftsteuerung wie an einer Automatiksäule sein.


Sagt dir ein Airride Fahrwerk im Auto etwas?
Dafür soll die Steuerung sein, im großen und ganzen läuft es auch schon wie es soll. Ist eben im Moment nur noch das Problem, dass das ganze zu schnell abläuft und mein Sensor nicht hinterher kommt.

Das Luft ablassen werde ich Hardwaretechnisch durch den Einsatz von Schalldämpfern etwas verlangsamen, mal sehen wann die bei mir eintreffen und mal sehen in wie weit das schon Besserung hervor ruft.
Das Luft "aufblasen" werde ich die Tage auch nochmal mit einer Zuluftdrossel verlangsamen.
Vielleicht habe ich ja Glück und es genügt mit den beiden einfachen Mitteln Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.05.2014, 19:14
Beitrag #22
RE: "Programmierunterstützung" gesucht
Hallo stfN2128,

die Schleife sollte an sich das tun was du erwartest. Allerdings zwei Bemerkungen:

Durch Benutzung von delay() kannst du parallel die Sensorwerte nicht noch irgendwie anders verwerten (zB. irgendwo hinloggen). Dies daher, daß delay() den Arduino bis auf die Timerinterrupts lahm legt. Wenn du die Werte parallel (also unabhängig vom Relaisstatus) noch benutzen möchtest solltest du anstatt delay() lieber millis() verwenden.

Code:
while (val1 > 460 or val1 < 435);  Schleife läuft solang bis Sensorwert zwischen 460 und 435 ist
Hier stimmt der Code nicht mit dem Kommentar überein. Eigentlich müsste es heißen: Schleife läuft dann, wenn der Sensorwert > 460 oder < 435 ist

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.05.2014, 20:37
Beitrag #23
RE: "Programmierunterstützung" gesucht
Hi Ricardo,

danke für dein Feedback.

Also würde wenn ich statt delay(50) einfach millis(50) einsetze das selbe passieren (Relais schaltet für 50ms), nur eben ohne das der komplette arduino "still" steht.

Angenommen ich würde nach dem ganzen Relaiskram einfach nochmal delay(200) reinschreiben, damit sich in dieser Zeit der Sensorwert richtig einpegeln kann, würde auch funktionieren?

Code:
}
else
{
digitalWrite(relais1, HIGH); //Relais schaltet nicht
}
[color=#FF0000]delay(250);
val1 = analogRead(sensorvl);[/color]
Serial.println("Sensorwert1: ");
Serial.println(val1);
}
while (val1 > 460 or val1 < 435);  Schleife läuft solang bis Sensorwert zwischen 460 und 435 ist

Denkfehler oder läuft das so?

Der Kommentar bezieht sich darauf, dass die Schleife durch den Button sowieso ausgewählt wurde.
Und dann eben so lange läuft bis der Wert sich dazwischen befindet, aber recht hast du. Wenn der Wert dazwischen liegt und ich wähle die Schleife an, passiert gar nichts Smile

Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2014, 21:13
Beitrag #24
RE: "Programmierunterstützung" gesucht
Hallo Stefan,
Zitat:Also würde wenn ich statt delay(50) einfach millis(50) einsetze das selbe passieren (Relais schaltet für 50ms),
Nein, hier ein Beispiel vorher / nachher:
Code:
void do_prog1()
{
do
{
  val1 = analogRead(sensorvl);
  if (val1 > 460) //wenn Sensorwert über 460 ist
  {
  digitalWrite(relais2, LOW); //Relais schaltet und Luft wird abgelassen
  delay(50);
  digitalWrite(relais2, HIGH);
Code:
void do_prog1()
unsigned long jetzt;
{
do
{
  val1 = analogRead(sensorvl);
  if (val1 > 460) //wenn Sensorwert über 460 ist
  {
  digitalWrite(relais2, LOW); //Relais schaltet und Luft wird abgelassen
  jetzt = millis();
  }
    if (millis() - jetzt >= 50) digitalWrite(relais2, HIGH);
Zitat:Angenommen ich würde nach dem ganzen Relaiskram einfach nochmal delay(200) reinschreiben, damit sich in dieser Zeit der Sensorwert richtig einpegeln kann, würde auch funktionieren?
Leider auch wieder Nein, da in dieser Zeit selbst analogRead() auch nicht laufen würde. Besser wäre folgendes:
Code:
jetzt = millis();
do while (jetzt - millis() <= 200 {};
Damit würde der Arduino selbst komplett weiterlaufen, der Code würde jedoch die Anweisungen in {} ausführen, also nix.

Hope it helps!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 451 22.08.2016 08:07
Letzter Beitrag: b3ta
  Programmierer gesucht (einfaches Uni-Projekt) grt35a 2 269 12.08.2016 11:36
Letzter Beitrag: grt35a
  Grundlagen zur UART Kommunikation gesucht... torsten_156 10 885 16.12.2015 22:26
Letzter Beitrag: Bitklopfer
  Fehler gesucht bergfrei 6 1.174 07.08.2015 06:28
Letzter Beitrag: bergfrei
  Hobby Programierer gesucht gegen Entgelt. Haustechno 30 2.919 05.08.2015 19:31
Letzter Beitrag: Haustechno
  Programmierer gesucht SLY 5 1.504 17.07.2015 12:46
Letzter Beitrag: SLY
  Hilfe für Programmänderung benötigt/gesucht! Philipp.macht.Fotos 13 1.788 16.07.2015 17:16
Letzter Beitrag: HaWe
  Linien Diagramm Lib gesucht Thrillhouse 1 704 30.05.2015 21:59
Letzter Beitrag: Scherheinz
  gesucht: C-Funktion zum Einfügen eines Teilstrings in einen größeren HaWe 1 863 25.05.2015 10:30
Letzter Beitrag: HaWe
  Alternative zu delay gesucht Gelegenheitsbastler 3 1.226 28.03.2015 19:51
Letzter Beitrag: Gelegenheitsbastler

Gehe zu:


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