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
Kann der Arduino das?
14.03.2015, 10:36
Beitrag #1
Kann der Arduino das?
Guten Morgen,

bin "Frischling" im Bereich Hardwareprogrammierung, kan aber löten Wink und die Programmsyntax erinnert mich an alte Zeiten, sollte also mit entsprechendem Fleiß wieder aufzufrischen sein.

Bevor ich mir die Hardware kaufe und mich in die Abgründe eines Projektes stürze, hätte ich gerne gewusst, ob das, was mir vorschwebt, auch tatsächlich zu realisieren ist.

Soweit ich mir das richtig angelesen habe, kann man mit dem Arduino wohl Regelsysteme realisieren, also etwas steuern in Abhängigkeit von Sensorwerten. Richtig?

Meine Frage ist jetzt, ob der Arduino auch mehrere solcher Regelkreise quasi simultan abarbeiten kann? Beim PC würde man von "Multitasking" sprechen.

Vielleicht zur Veranschaulichung noch ein fiktives Beispiel aus einem hoffentlich leicht nachvollziehbaren Hausbereich in aufsteigender Schwierigkeit:

1. messe Außentemperatur und regele in Abhängigkeit davon Heizkörperventil im Südzimmer der Wohnung (auf/zu).
2. messe zusätzlich Innentemperatur und beeinflusse damit Steuerkurve des Heizkörperventils.
3. messe zusätzlich Helligkeit (Tageszeit) und lege damit Beginn und Ende der Steuerphase fest.
4. Steuere zusätzlich Rolladenmotor über die Einflussgrößen Tageszeit und Außen-/Innentemperatur.
5. Steuere Heizung/Rolladen unabhängig davon im Nordzimmer.
6. Steuere zusätzlich in Abhängigkeit von Außenhelligkeit und dreier Lichtschranken die Beleuchtung (Lampe 1, 2, 3) der Garageneinfahrt...

Meine Frage ist nun nicht, ob das Sinn macht, sondern ob, bzw. welche der genannten Aufgaben ich mit einem(!) Arduino lösen könnte bzw. ab wann mehrere getrennte Regelkeissteuerungen nötig wären.

Da es mehrer Ausführungen des Arduinos gibt, würde ich mich auch über Tips hinsichtlich der "besten Wahl" freuen.Big Grin

Vielen Dank für Eure Mühe,
Gruß,
Oppa
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 11:36 (Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2015 13:19 von HaWe.)
Beitrag #2
RE: Kann der Arduino das?
hallo,
die kleinen Arduinos haben zwar ein paar Pseudo-Multitasking-libs, die sind aber nicht sehr effizient und auch in der Handhabung relativ schwierig und unflexibel nach meiner Erfahrung, und zusätzlich auch RTOS-Systeme, die aber unvergleichlich kompliziert sind.
Beispiele:
proto threads, mthread, FreeRTOS.

Da ich selber Multitasking seit vielen Jahren auf ARM-Systemen benutze, habe ich mich aber inzwischen auch ein wenig mit den Möglichkeiten auf dem Due beschäftigt (ist ja auch ein ARM), und das sieht sehr vielversprechend aus!

Due Scheduler: http://arduino.cc/en/pmwiki.php?n=Reference/Scheduler

Code:
#include <Scheduler.h>

int counter = 0;
int counter1 = 0;

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

  Scheduler.startLoop(loop1);
}

void loop () {
analogWrite(9, counter);
counter++;
if (counter > 255){
  counter = 0;
}
delay(33);
}

void loop1 () {
if (Serial.available()) {
    char c = Serial.read();
    if (c=='0') {
      digitalWrite(2, LOW);
      Serial.println("Led turned off!");
    }
    if (c=='1') {
      digitalWrite(2, HIGH);
      Serial.println("Led turned on!");
    }
  }
yield();
}

Es ist allerdings kooperatives Multitasking, kein preemptives, d.h. wenn ein einzelner scheduler-Task seine Rechenzeit nicht freigibt, blockiert er alle anderen - das ist ein Nachteil: schwierig in Fällen, wo du sehr lange rechenintensive Tasks hast, die in 1 Stück Dinge durchrechnen.

Unabhängig und zusätzlich hierzu sind aber auch Timer-IRQs sehr einfach möglich, die die AVR-Timer ersetzen können (die natürlich auf ARMs nicht mehr funktionieren); hiermit kannst du auch sehr hartnäckige langdauernde Tasks zwischendrin für kurze Aufgaben unterbrechen:

Due-Timer: https://github.com/ivanseidel/DueTimer



Der Due ist sehr schnell, hat viel Speicher, kostet als China-Klon auch kein Vermögen, mit etwa 20-30 EUR bist du dabei! Smile
Aber Achtung: er hat 3.3V Bordspannung und Signal Level, arbeitet also nicht mit allen Shields, die ausschließlich die 5V-AVR-Spannung benötigen (viele neuere sind aber inzwischen auch 3.3V-kompatibel)


ps, edit:
Ein anderer sehr vielversprechender Ansatz auch für AVRs ist das ERIKA-Projekt, ein preemptives RTOS (Real-Time-Operating-System):
http://forum.arduino.cc/index.php?topic=244282.0
Sicher noch viel mächtiger als der Due Scheduler, aber auch sicher schwieriger zu handhaben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 11:48
Beitrag #3
RE: Kann der Arduino das?
Hi,
also meiner Meinung nach ist das, was man an "Multitasking" braucht, um ein paar Sensoren abzufragen und ein paar Ausgänge zu setzen, mit einem normalen "kleinen" Arduino sehr einfach zu machen. Da braucht man keine speziellen Libs.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 12:29
Beitrag #4
RE: Kann der Arduino das?
Hi,
also bei den genannten Anforderungen die zudem alle recht hohe Zeitkonstanten haben benötigt man überhaupt kein Multitasking....höchstens einen Interrupt um die Bedienoberfläche zu realisieren. Ansonsten kann man alle Kreise gemütlich so nach und nach abarbeiten und ist dann immer noch zu schnell.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 12:45 (Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2015 12:54 von HaWe.)
Beitrag #5
RE: Kann der Arduino das?
ja, natürlich - ich habe die Beispiele mit den Sensoren eher als fiktiv verstanden, nicht als konkrete Anforderung.
was iterativ, nacheinander wiederholend möglich ist, sollte man ntl auch so machen.
Manchmal braucht man aber tatsächlich Multitasking (z.B. für Subsumption-Programm-Architekturen oder bei zwischenzeitlichen sehr langen Berechnungen), da führt dann kein Weg mehr dran vorbei (v.a. am preemptiven).

Gerade im "wirklichen Leben", wo es v.a. auch ums Über-Leben geht, wird ja genau deswegen seit Jahrzehnten preemptives Multitasking eingesetzt: nämlich im Automobil-Betrieb (OSEK RTOS). Entwickelt von einem Konsortium der größten europäischen Automobilhersteller und -Zulieferer, für eine sichere, hierarchisch nach Prioritäten gegliederte Elektroniksteuerung, und der Erfolg gibt ihnen sicher Recht.

nxtOSEK ist aber sogar auf dem Lego NXT ein seit bald 10 Jahren super funktionierendes, extrem schnelles (aber leider nicht sehr verbreitetes) Echtzeit-Multitasking-Betriebssystem. Allerdings sind immer schon alle Betriebssysteme auf den Lego-Plattformen preemptive MT-OS, selbst schon vor über 15 Jahren auf dem Renessas H8 RCX, wenn auch da nicht immer und jederzeit echtzeitfähig. Der Due Scheduler samt Due Timer ist da sicher auch schon eine erste Annäherung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 13:00
Beitrag #6
RE: Kann der Arduino das?
@HaWe,
da hast du sicherlich recht, aber das ist wohl was für Profis an der Ecke und hier sind mehr die Beginner am Start und von Real-Time Anwendungen im Automotivebereich weit entfernt wo alle 10,20,40, 100mS ein Datentellegramm verschickt und verarbeitet werden muß.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2015, 13:05 (Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2015 13:15 von HaWe.)
Beitrag #7
RE: Kann der Arduino das?
ich kann mich nur wiederholen-
was iterativ nacheinander möglich ist, sollte man immer auch so machen.

Aber auch Lego-Programmierer sind vom Profil her weit überwiegend eher Anfänger, und hier hat sich MT absolut bewährt, weil es auch von Anfang an im Betriebssystem integriert und per einfacher API zugänglich gemacht wurde.

Ich verstehe MT daher nicht als ausschließliches "Profi-Konzept", sondern ganz im Gegenteil, für ein äußerst flexibles, auch für Anfänger geeignetes Programmierkonzept, um einfach und trotzdem sicher und schnell hochkomplexe Steuer- und Regelsysteme zu etablieren. Auch hier sind natürlich spezielle Programmierkenntnisse nötig, die aber von ihrem Schwierigkeitsgrad her das Zeitzähler (millis) und AVR-Timer- und Pinchange-IRQ-Konzept absolut nicht überschreiten - und trotzdem ein weit mächtigeres Potential haben.


Ob der TO diese Features nun letztendlich jetzt sofort oder irgendwann später braucht oder nicht, weiß ich ntl nicht. Immerhin, er hatte danach gefragt, und es gibt sie ja für die Arduinos.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.03.2015, 12:37
Beitrag #8
RE: Kann der Arduino das?
Ok, vielen Dank!

...wenn man eine Tür aufstößt... Wink

Da sind ja viele Gedankenanstöße drin. D. h. was ich vermutet habe, es wird 'ne längere Geschichte und ich bin mir jetzt nicht ganz sicher, ob nicht doch ein RTOS-fähiges System in Frage kommt oder der Arduino mit den genannten Multitasking-Optionen.

Könnt Ihr mir aus dem Stegreif heraus ein oder zwei Projekte nennen, wo etwas ähnliches mit Arduino realisiert wurde? Dann könnte ich das etwas besser abschätzen.

Vielen Dank und schönen Sonntag noch!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Neuling: Zugeklappten Laptop mit Arduino aufwecken + Kiste aufklappen? Ikearegal 2 2.527 02.02.2014 07:59
Letzter Beitrag: Ikearegal

Gehe zu:


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