Pages: [1]   Go Down
Author Topic: Sensorwerte zu unterschiedlichen Zeiten erheben  (Read 325 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen!

Ich möchte verschiedene Sensoren (Temperatur, Feuchte, Hall) zu verschiedenen Zeiten / in verschiedenen Intervallen abfragen. Hintergrund: die aktuelle Windgeschwindigkeit, die mit einem Hall-Sensor ermittelt wird, muss kontinuierlich "überwacht" werden, die Temperatur muss jedoch nur alle 10 - 15 Minuten abgefragt werden.

Die zusammengestellten Daten werden dann alle 15 Minuten an einen entfernten Server geschickt; bei der Windgeschwindigkeit soll dabei ein Durchschnittswert über den letzten Zeitraum und der Spitzenwert (Böen) mitgeschickt werden.

Bekomme ich das mit einem Arduino hin (das ist ja quasi Multitasking), oder brauche ich zwei Arduinos?

Danke & LG,
leinaD
Logged

Offline Offline
Sr. Member
****
Karma: 10
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist kein Multitasking. Klar kannst du die Temperatur nur alle 10 oder 15 min abfragen und die
die Windgeschwindigkeit im Sekundentakt oder noch schneller.
Das kriegt der Arduino problemlos hin.
Gruß

Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 160
Posts: 3190
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich möchte verschiedene Sensoren (Temperatur, Feuchte, Hall) zu verschiedenen Zeiten / in verschiedenen Intervallen abfragen. Hintergrund: die aktuelle Windgeschwindigkeit, die mit einem Hall-Sensor ermittelt wird, muss kontinuierlich "überwacht" werden, die Temperatur muss jedoch nur alle 10 - 15 Minuten abgefragt werden.

Die zusammengestellten Daten werden dann alle 15 Minuten an einen entfernten Server geschickt; bei der Windgeschwindigkeit soll dabei ein Durchschnittswert über den letzten Zeitraum und der Spitzenwert (Böen) mitgeschickt werden.

Bekomme ich das mit einem Arduino hin (das ist ja quasi Multitasking), oder brauche ich zwei Arduinos?

Ein Arduino taktet mit 16 MHz, hat entprechend eine Rechenleistung von 16 MIPS, das sind 16 "Millionen Instruktionen pro Sekunde", und solange Du nicht mehr als diese 16 Millionen Instruktionen ("Maschinenbefehle") in einer einzigen Sekunde ausführen möchtest, kann ein einziger Arduino das erledigen.

Alles nur eine Frage der Programmlogik.

Anbei mal ein Programmvorschlag für einen Code, der im Halbsekundentakt, Dreisekundentakt und im Viertelstundentakt irgendwas erledigt, in dem Fall Ausgaben über den seriellen Monitor ausgibt.

Code:

void setup() {
  Serial.begin(9600);  
}

boolean halbSekundenTakt()
// liefert true falls seit dem letzten Aufruf die Halbsekunde gewechselt hat
{
  static unsigned long alterWert;
  long halbeSekunden=millis()/500;
  if (halbeSekunden!=alterWert)
  {
    alterWert=halbeSekunden;
    return(true);  
  }
  else return(false);
}

boolean dreiSekundenTakt()
// liefert true falls seit dem letzten Aufruf ein neues 3-sec-Intervall begonnen hat
{
  static unsigned long alterWert;
  long dreiSekunden=millis()/3000;
  if (dreiSekunden!=alterWert)
  {
    alterWert=dreiSekunden;
    return(true);  
  }
  else return(false);
}


boolean viertelStundenTakt()
// liefert true falls seit dem letzten Aufruf ein neues Viertelstunden-Intervall begonnen hat
{
  static unsigned long alterWert;
  long viertelStunden=millis()/(15*60000L);
  if (viertelStunden!=alterWert)
  {
    alterWert=viertelStunden;
    return(true);  
  }
  else return(false);
}



void loop()
{
  if (halbSekundenTakt())
  {
    Serial.print("1/2 sec Tick ");
    Serial.println(millis());
  }  
  if (dreiSekundenTakt())
  {
    Serial.print("Jetzt sind 3 Sekunden um! ");
    Serial.println(millis());
  }  
  if (viertelStundenTakt())
  {
    Serial.print("Jetzt ist schon wieder eine Viertel Stunde um! ");
    Serial.println(millis());
  }  
  // Rest des loop-Codes hier
}

Da der Millis-Timer nach ca. 50 Tagen überläuft, würde diese Programmlogik dazu führen, dass immer jeweils nach 50 Tagen einmal der Takt unregelmäßig erfolgt und nicht eingehalten wird. Wenn man das nicht möchte und der Takt soll immer gleichmäßig kommen, also auch beim Überlauf alle 50 Tage, braucht man ein paar mehr Zeilen Code.
« Last Edit: July 14, 2013, 09:07:18 am by jurs » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank euch beiden!

maverick1509, ich hatte irgendwie vor Augen, dass die Windgeschwindigkeit dann 1x pro Sekunde erhoben wird, und dieser Prozess die selteneren "überlagert", also mehr als einer gleichzeitig ausgeführt wird - daher der Multitasking-Gedanke)

jurs, mit Deinem Beispiel kann ich schon mal sehr viel anfangen, danke!

Zu den Ausführungszeiten schwebt mir vor, noch eine Uhr (DCF 77) an den Arduino zu hängen, um wirklich zu den gewollten Uhrzeiten auszuführen, auch wenn der Strom mal weg war (:00, :15, :30, :45).

Wenn meine Sensoren da sind (leider zum teil aus China, das könnte ein bisschen dauern) und ich Teile des Scripts stehen habe, melde ich mich noch mal!
Logged

Pages: [1]   Go Up
Jump to: