Go Down

Topic: Einen oder besser mehrere Arduino benutzen? (Read 721 times) previous topic - next topic

qiwi

Hallo zusammen,

ich habe folgende Frage:
Für meinen Test - 2 Bänder schieben Pakete - benötige ich da einen Arduino oder geht das nur mit zweien?

Der Code - ist nur ein Entwurf - noch nicht mal eine korrekte Sprache - einfach nur damit Ihr wisst worum es geht.

Zur Verfügung haben ich einen UNO und einen MEGA 2560

Code: [Select]


//Sicherheitsabdeckungssignal auch im Code abfragen!!!
if (Sicherheitsabdeckungssignal == 1)
{
//Ultraschallsensor-Abtastung
if (sensorende =! 1)
{
transportband1 = an
}
else
{
transportband1 = aus
delay (1000);
scanner = runter
delay(1000);
scanner= rauf;
delay(2000);

while (paketband2 =! frei)

{
delay(50);
}
kipper = hoch;
delay(3000);
kipper = runter;
delay(3000);
transportband2 = 1;

}
}


Der Code war schön eingerückt. Irgendwie hat mir das Forum das zerschossen  :)

Jetzt z.B. die While Schleife in der geschaut wird, ob das zweite Band leer ist.
Wäre es hier besser einen zweiter Arduino ein Signal an den ersten schicken zu lassen?
Und wie bekomme ich es hin - die Sicherheitsabdeckung im kompletten Betrieb zu überwachen?
Das zu jeder Zeit wenn die Abdeckung hoch geht das komplette System stoppt. Oder mit einem Notschalter.

Wie gesagt - dies ist ein Pseudocode ;-)

noiasca

ich denke mit einem ist das leichter zu schaffen als mit zweien.

Betrachte für deinen Anwendungsfall "Delay" als nicht exisitierend.
Arbeite mit millis und behalte die Loop am laufen.
Das Beispiel "BlinkWithoutDelay" soll dir das Grundverständnis bringen.



DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Johannes81

Hi qiwi,

kannst du bitte ein oder zwei Informationen mehr geben. Wird der Scanner über den Arduino ausgelesen?

temucin

Hallo,

also grundsätzlich würde einer reichen. Allerdings wage ich zu bezweifeln das der Code so Funktioniert wie du dir das vorstellet.

Gruss Temucin

agmue

Ergänzend zu #1: Du möchtest eine Ablaufsteuerung programmieren, auch endlicher Automat oder Finite State Machine genannt.

Es gibt tatsächlich Gründe, mehrere Arduinos einzusetzen, die ich aber bei Deiner Aufgabenstellung nicht erkennen kann.

Schwierig dürfte für Dich der Schritt von der Datenverarbeitung zur Prozessautomation zu werden. Aber das haben andere auch geschafft, ich beispielsweise :)

qiwi

Ok - ich versuche mal das Projekt besser zu erklären.
Vorab - dies ist ein DEMO-Projekt um mir selbst klar zu machen was möglich ist mit dieser Elektronik.
Ich möchte für diesen Test zwei virtuelle Transportbänder steuern.

Auf Band 1 laufen die Pakete bis zum Ende. Hier soll evtl. ein Ultraschall oder eine Lichtschranke (Diese habe ich noch nicht gefunden) das Signal geben, damit das Band gestoppt wird.
Wenn das Band gestoppt worden ist, dann soll ein Scanner einen Barcode lesen (Also auch erst einmal virtuell)
Hier reicht es, wenn ein Arm nachdem er das Signal bekommen hat - runter und wieder hoch fährt.
Nachdem der Arm wieder hochgefahren ist, wird das Band evtl. durch Hydraulik gekippt und das eben gescannte Paket rutscht auf das andere Band (Welches eigentlich nur eine Ablage ist).
Sobald das Paket auf dieser Ablage ankommt, wird durch einen Sensor wieder (Lichtschranke oder Ultraschall) ein Hydraulikarm das Paket von der Ablage in einen Korb schieben.

Wenn dies alles nur ein Vorgang wäre, dann wäre das selbst für mich - der lediglich eine Ampel auf dem Breadboard und gesketcht hat ein Leichtes. Jedoch soll z.B. wenn das Paket von Band 1 auf die Ablage gekippt worden ist schon Band 1 das nächste Paket transportieren bis zum Ende von Band 1 und gleichzeitig schiebt auf der Ablage die Hydraulik das Paket in den Korb. Außer dem darf das ganze nur laufen, wenn eine Sicherheitsklappe heruntergeklappt ist (weiterer Sensor).
Die Abfrage wegen dem Sicherheitssensor ist ja beim Start nicht das Problem - wie in meinem "Pseudocode" zu sehen ist - aber wie frage ich das Hochklappen während dem Betrieb ab - oder baue einen NOTSTOP  ein, der auch sofort reagiert.

All diese Fragen haben mich dazu veranlasst hier diese Frage zu stellen, weil ich mir nicht vorstellen kann, dies alles mit nur einer LOOP zu steuern.

Vielen Dank für Eure Hilfe.

postmaster-ino

Hi

Indem Du IMMER prüfst, ob die Gegebenheiten für den aktuellen Schritt noch zulässig sind.
Schaue Dir dafür das Beispiel Blink_without_delay in der IDE an und/oder die Nachtwächtererklärung hier aus dem Forum.
Für jede nacheinander ablaufende Aktion erstellst Du eine State-Maschine, in den verschiedenen Status prüfst Du, ob dieser Status noch gültig ist, Du zum Nächsten gehen kannst oder z.B. ein Not-Aus-Status angesprungen werden soll.

So ganz habe ich Deine Abfolge nicht verstanden.

MfG

gregorss

Ich möchte ...
Ich habe den Thread bislang nur quergelesen. Was ich dabei aufgeschnappt habe, lässt mich aber wieder einmal an einen endlichen Automaten denken. Mit dem passenden Strickmuster kannst Du (wie ich das gerade sehe) alle Aufgaben lösen und benötigst dafür nur einen einzigen Arduino. Was mir zu endlichen Automaten eingefallen ist, habe ich hier ins Netz gekippt.

Und die Dinge, mit denen Du zu tun hast, lassen sich (wie gesagt, soweit ich das gerade sehe) prima mit Klassen erschlagen. Falls Du noch nie mit Klassen zu tun hattest: Freu' Dich drauf. Macht irre Spaß :-)

Gruß

Gregor
Wenn man keine Probleme hat, kann man sich welche machen („Großes Lötauge", Medizinmann der M3-Hopi)
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

volvodani

Wenn das zur Automatisierung einer kleinen Anlage ist würde ich eher "trotz des Arduino Ansatz" eher zu einer kleinen Steuerung ala Siemens LOGO oder Eaton Easy raten.
Da hast du weniger Probleme gute Sensorik zu finden und die Dinger laufen extrem zuverlässig und die Anbindung zu einer Übergeordneten Steuerung ist wesentlich einfacher. Stichwort Modbus / Profinet etc.
Gruß
DerDani
0x2B | ~ 0x2B = 0xFF  
(Shakespeare)

Wie stelle ich mich hier richtig an

agmue

#9
Mar 13, 2018, 10:36 am Last Edit: Mar 13, 2018, 10:37 am by agmue
... weil ich mir nicht vorstellen kann, dies alles mit nur einer LOOP zu steuern.
Eine quasi parallele Verarbeitung ist schon möglich. Nimm Dir das IDE-Beispiel blinkwithoutdelay und lasse zwei LEDs mit unterschiedlicher Frequenz blinken. Dann hast Du zwei fast unabhängige Prozesse. Natürlich ist die Geschwindigkeit begrenzt, die LEDs kannst Du nicht mit beliebig hoher Frequenz blinken lassen.

Der Arduino ist für künstlerische Projekte konzipiert, die IDE bremst mit Komfortfunktionen. Für ein Lehrmodell kann ich mir den Arduino gut vorstellen, in der industriellen Produktion halte ich ihn für die falsche Wahl, ganz unabhängig von Vorschriften.

mgcss

#10
Mar 14, 2018, 09:34 am Last Edit: Mar 14, 2018, 09:37 am by mgcss
Für ein Lehrmodell kann ich mir den Arduino gut vorstellen, in der industriellen Produktion halte ich ihn für die falsche Wahl, ganz unabhängig von Vorschriften.

Das kann man so pauschal nicht sagen. Es spricht ja nichts dagegen, Arduino Hardware auch ohne "Komfort-Unterstützung durch die IDE" zu programmieren ;-) Genauso wie anders herum auch nichts dagegen spricht, selbst gebaute Hardware mit der IDE zu programmieren (so lange sie durch die Bibliotheken unterstützt wird). Wofür welcher Ansatz taugt, hängt vom Einzelfall ab. Grundsätzlich ist die Hardware aber meist nicht schlecht - und vernünftig programmiert (ohne Bibliotheks-Funktionen), kann ich sie mir durchaus im industriellen Einsatz vorstellen (auch wenn ich es selbst wohl nicht machen würde).

noiasca

OT: ob Arduino IDE, AVR-Studio, winavr und wie sie alle heißen mögen, ist dem AVR wahrscheinlich ziemlich egal, drunter kommt ein BIN raus (Korintenkackerei: ... die sich auch unterscheiden können), welche dann geladen wird. Nur ob die Hardware eines China-Klones irgendwelchen industriellen ansprüchen genügen kann, stelle ich einfach mal in abrede.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

mgcss

#12
Mar 14, 2018, 04:37 pm Last Edit: Mar 14, 2018, 04:52 pm by mgcss
das Problem ist nicht die IDE per se sondern die verwendeten Komfort-Bibliotheken. Ein digitalWrite zum Beispiel verursacht im BIN (das sich deshalb tatsächlich stark unterscheiden wird) einen extremen Overhead. In der Industrie-Programmierung würde man sowas wohl immer durch einen Zugriff direkt auf die Port-Register machen (was natürlich auch in der IDE geht ... nur eben nicht durch digitalWrite) und damit deutlich Rechenzeit sparen - was am Ende dazu führt, dass man eine weniger leistungsstarke und damit kostengünstigere Hardware einsetzen kann. Es ist also sehr wohl auch eine Frage der Software. Schlechte / unperformante Programmierung durch (zusätzliche) Hardware-Power zu kompensieren war noch nie eine wirklich gute Idee im Industrie-Bereich.

PS: ich hatte in einem anderen Post mal einen Größenvergleich gemacht, um zu zeigen, wie sehr die Größe des BIN (und in gewissem Maße damit die Performance des Codes) von der Verwendung der "Komfort-Funktionen" abhängt: https://forum.arduino.cc/index.php?topic=453500.msg3118699#msg3118699 Da sieht man, dass man eine identische Funktionalität entweder mit 710, 450 oder 140 Byte umsetzen kann ... abhängig davon, ob man digitalWrite verwendet oder nicht und in welcher IDE man das kompiliert.

michael_x

TimeToMarket ist wesentlich wichtiger als das Optimum an Speicherplatz und Geschwindigkeit zu erzielen.
Wenn Speicherplatz und Geschwindigkeit gut ausreicht, darf man sich als Ingenieur nicht beim weiteren "Optimieren" erwischen lassen.

Allerdings spielt im Anlagenbau der Preis der Software und der verwendeten Komponenten nicht dieselbe Rolle wie im Hobby-Bereich. Und OpenSource Software ist gelegentlich eher ein Hindernis.

mgcss

beim TimeToMarket gebe ich Dir recht. Aber ein
Code: [Select]
digitalWrite(0, HIGH);
tipped sich auch nicht schneller als ein
Code: [Select]
PORTB |= (1<<PB0);
und für einen erfahrenen Programmierer ist beides gleich gut lesbar. Also vor dem Hintergrund von TimeToMarket sehe ich bei den Komfort-Funktionen nicht zwingend einen Vorteil. Ok ... jeder C Programmierer wird auch seine eigenen Bibliotheksfunktionen nutzen. Für den AD Wandler zum Beispiel tippe ich die Funktionen zum Initialisieren und Auslesen auch nicht immer neu ... aber diese Funktionen sind halt auch auf Performance und Einfachheit hin optimiert und nicht auf Komfort.

Go Up