mikrocontroller.net

Forum: PC-Programmierung Sensoren und Relais per C# ansteuern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,

ich bin neu im Forum und interessiere mich für die Programmierung (C#, 
Java und Python Kenntnisse sind vorhanden) und hoffe, dass mir hier im 
Forum jemand weiterhelfen kann.

Folgendes Szenario:

Angenommen, ich habe eine kleine Achterbahn im Garten (jaja, das geht 
jetzt nur um das Prinzip :-) . Ich habe natürlich keine Achterbahn). 
Dazu möchte ich gerne eine Steuerung in C# (gerne auch Java) schreiben 
mit GUI und der ganzen Logik dahinter. Die GUI beinhaltet eine Skizze 
der Strecke mit der Anzeige in welchem Block der Zug momentan ist und 
Buttons für das Starten aus der Station, Notstop, usw.

Dazu muss die Software logischerweise mit den Bremsen, Transportrollen 
(Ein- und Ausschalten) und Sensoren (um zu wissen, wo der Zug gerade 
ist) kommunizieren. Nun ist meine große Frage:

Wie wird solch eine Kommunikation zwischen Computer-Programm und 
"richtiger" Elektronik realisiert.

Die aktuellen Zustände der Sensoren (Metall neben dem Sensor erkannt 
oder nicht) sollen dazu übertragen werden und die Transporträder auf der 
Strecke ein- und ausgeschaltet werden können.

Ich brauche dazu ja eine Art USB-Interface, mit dem ich beispielsweise 
20 Sensoreingänge und 20 Ausgänge für Steuersignale habe (welche über 
ein Relais die Transportrollen ein und ausschalten) doch genau hier hört 
mein Wissen auf.

Wie realisiere ich solch ein Projekt. Erfahrung im Umgang mit 
Mikrocontrollern habe ich noch keine.

Selbstverständlich ist mir klar, dass das nicht auf den 
Sicherheitsstandards funktioniert, wie richtige Achterbahnen 
ausgestattet sind. (Wobei ich mich auch frage, wie das dann realisiert 
wird. Vielleicht gibt es ja einen Mitarbeiter bei einem 
Achterbahnhersteller hier im Forum ;-) )

Ich danke euch sehr für eure Hilfe! Das Ganze möchte ich gerne für eine 
Abschlussarbeit machen.


Beste Grüße

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, du brauchst einen Mikrocontroller der mit deinen Sensoren/Aktoren 
und mit dem PC redet.

Der Mikrocontroller redet mit den Sensoren/Aktoren per I/O Ports und mit 
dem PC per USB/WLAN/o.ä. mittels einer vereinbarten "Sprache" (die du 
dir vorher ausgedacht hast).


Dein PC Programm redet dann mittels dieser Sprache über USB/WLAN/o.ä. 
mit deinem Mikrocontroller.


Das ist ein Weg so etwas zu machen. Und eigentlich auch der übliche Weg.

Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für deine Antwort. Kannst du mir da einen Ansatz liefern, 
bei was für einem Mikrocontroller ich für mein Vorhaben anfangen könnte? 
Es wäre natürlich perfekt, wenn es da schon eine Bibliothek für C# oder 
Java geben würde.


Viele Grüße

Autor: test (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Du kannst nicht einfach von 0 auf 100 mit einem Großprojekt anfangen 
(die Sicherheitsaspekte ignorieren wir hier ja sowieso erstmal).


Nimm dir einen Arduino und bastel da einige LED und Taster ran. Dann 
verbinde das mit deiner PC Software. Das ist IMHO ein guter (und 
günstiger) Einstieg ins Thema.

Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Stichwort "Arduino" habe ich gesucht. Vielen Dank - dann werde ich 
mich da mal einlesen!

VG

Autor: c-hater (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Luke P. schrieb:

> das Stichwort "Arduino" habe ich gesucht.

Du bist halt vollkommen unwissend und kannst deswegen garnicht ermessen, 
welchen Schaden du dir antust, wenn du ernsthaft auf Arduino setzt...

Das einzige, was von Arduino (für Anfänger) ganz gut zu gebrauchen ist, 
sind die billigen Hardware-Clones. Die ersparen zumindest für den Anfang 
den Bau eigener Hardware-Kerne.

Die Arduino-Software-Scheisse sollte man allerdings von Anfang an 
dringendst vermeiden. Das führt in den Abgrund. Recht schnell ist der 
Punkt erreicht, bei dem es mit dem simplen Zusammenschieben von 
Wichsvorlagen nicht mehr getan ist, weil die entweder grundsätzlich in 
Konflikt stehen oder zumindest indirekt über die unzureichende 
Performance des Systems.

Arduino-Software ist nämlich typisch ziemlich bis dramatisch 
ineffizient! Das gilt auch und gerade für die Software, die nötig ist, 
um irgendwelche idiotischen und typisch völlig überteuerten "Shields" 
benutzen zu können...

Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ist gut zu wissen. Hättest du eine brauchbare Alternative bzw. wie 
gehe ich das ganze Thema am Besten an?

Gibt es ein gutes Buch, mit welchem ich gut einsteigen kann? 
Programmiert Ihr eure eigenen Hardware-Kerne? Dazu ist dann denke ich 
mal Assembler notwendig, oder?

Viele Grüße

Autor: Keiner N. (nichtgast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Lass dich von c-hater nicht verunsichern. Der Name ist Programm.

Definiere erst mal ganz genau deine Anforderungen. Wie viele Inputs und 
wie viele Outputs brauchst du.

Danach kannst du dann entscheiden, was du für die eine Schnittstelle 
brauchst. Ich finde z. Bsp. Die labjack hat nicht so schlecht. Die 
fallen leider meistens aus den Budget.

Beim Arduino kommst du relativ schnell zu Ergebnissen, aber auch der hat 
nur begrenzt ein und ausgänge.

Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für deine Antwort!

Am Budget sollte es nicht scheitern. Die Schnittstelle kann ruhig bis 
200€ kosten. Ich weiß ja nicht, wie weit man damit kommt. Eingänge würde 
ich ca. 20 brauchen und Ausgänge ca. 15.

Mit dieser Anzahl wäre das Ganze am schönsten für mich aufzubauen. Nach 
unten skalieren kann ich es natürlich trotzdem, dass ich mit 10 
Eingängen und 7 Ausgängen zurecht kommen würde.

Labjack werde ich mir mal ansehen - danke für den Tipp.


Viele Grüße

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht ja darum erstmal den Anfang zu machen. Und dafür ist Arduino 
super.
Und Arduino zwingt einem auch nicht im System zu bleiben. Man kann 
später andere Entwicklungsumgebungen nutzen, man kann den Bootloader 
weglassen und man kann eigene Boards designen.
Und man kann später selbstverständlich auch einen der 5000 anderen 
gängigen Mikrocontroller nutzen wenn man merkt das der Arduino 
ungeeignet ist.

Aber um auch nur ansatzweise abschätzen zu können, welcher der 5000 
gängigen Mikrocontroller am besten für das geplante Projekt geeignet 
ist, sollte man wenigstens so viel Erfahrung haben schonmal eine LED per 
Mikrocontroller angesteuert zu haben.


Also einfach mal für <10€ nen Arduino kaufen und sich die Sache erstmal 
anschauen.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also einfach mal für <10€ nen Arduino kaufen und sich die Sache erstmal
> anschauen.

Rausgeworfenes Geld und verschwendete Zeit.

IO-Warrior - codemercs.com

Hat auch fuer Hochsprachen passende APIs.

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Die Arduino-Software-Scheisse

> es mit dem simplen Zusammenschieben von
> Wichsvorlagen nicht mehr getan ist

> Arduino-Software ist nämlich typisch ziemlich bis
> dramatisch ineffizient!

Was kann Arduino dafür, dass Du zu dämlich bist, ein paar Zeilen c zu 
schreiben?

> um irgendwelche idiotischen und typisch völlig
> überteuerten "Shields" benutzen zu können...

Niemand ist gezwungen, diesen dusseligen UNO auf Shields zu stecken - 
man darf gerne selbst löten. Warnung: Den Lötkolben fasst man an dem 
Ende an, wo das Kabel heraus kommt.

----------

Keiner N. schrieb:
> Wie viele Inputs und wie viele Outputs brauchst du.

Im Eingang stand je 20, das wären 40 Ports - die kaum ein µC haben wird. 
Das schreit nach externer Hardware neben dem µC, ob Luke dazu eine 
Chance hat?

> Beim Arduino kommst du relativ schnell zu Ergebnissen,

Genau das ist sein großer Vorteil. Eine serielle Kommunikation zum PC 
(über USB) bekommt man direkt hin, ein paar Ports abzufragen ist schnell 
selbst geschrieben.

> aber auch der hat nur begrenzt Ein- und Ausgänge.

Und immer genau einen zu wenig :-)

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... schrieb:
> IO-Warrior - codemercs.com

Ist eine weitere Möglichkeit. Stößt aber evtl. an Grenzen (z.B. 
Echtzeitanforderungen).

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luke P. schrieb:
> Nach
> unten skalieren kann ich es natürlich trotzdem, dass ich mit 10
> Eingängen und 7 Ausgängen zurecht kommen würde.

Wenn ich mich gerade nicht verzählt habe, kann man am Arduino-Nano 18 
Ports digital nutzen.

Aus einem anderen Thread oder Forum:
"Die Pins 0 bis 13 und die Analogen Pins A0 bis A5,
die als Digitale Ein/Ausgaenge verwendet werden koennen.
Wenn ein analoger Eingang mit pinMode als digitaler Ein/Ausgang 
definiert wurde, werden aus A0 bis A5 die Pins 14 bis 19. A6 und A7 kann 
man nicht digital nutzen."

D0 und D1 sind für die serielle Kommunikation belegt und daher nicht 
beliebig nutzbar, wenn man diese braucht!

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist eine weitere Möglichkeit. Stößt aber evtl. an Grenzen (z.B.
> Echtzeitanforderungen).

Die steuernde Applikation soll auf einem PC-Host laufen.
Die wird also auch die "Echtzeitfaehigkeit" bestimmen.
Und eine serielle Schnittstelle dazwischen waere irgendwie
"echtzeitfaehiger"? Glaube ich nicht.

Soll der TO das selber ausprobieren oder mal belastbare
Zahlen was Reaktionszeiten angeht, herausruecken.

Autor: Luke P. (l_sch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die ganzen Antworten. Die Reaktionszeit sollte unter 
500ms liegen. Das wäre kein Problem. Dann werde ich mir IO-Warrior 
ansehen.

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... schrieb:
> Die steuernde Applikation soll auf einem PC-Host laufen.
> Die wird also auch die "Echtzeitfaehigkeit" bestimmen.
> Und eine serielle Schnittstelle dazwischen waere irgendwie
> "echtzeitfaehiger"? Glaube ich nicht.

Es geht darum das man im Mikrocontroller auch eine gewisse Intelligenz 
packen kann. Das Protokoll über die serielle Schnittstelle muss nicht 
zwingend nur Ports an-/abschalten. Es kann auch komplexe Funktionen 
aktivieren die der Mikrocontroller dann autark ausführt (halt z.B. 
praktisch wenns was zeitkritisches ist).

Deine Lösung ist ja deswegen nicht falsch (so etwas wird seit 30 Jahren 
mit PCs genutzt (z.B. per paralleler Schnittstelle)). Aber es gibt halt 
Unterschiede zur MCU Lösung.


Eine weitere Lösung können auch ein Raspberry Pi + MCU sein.


Es gibt viele Wege, kommt halt immer auf die Anforderung an.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Reaktionszeit sollte unter 500ms liegen.

Fuer dedizierte Hardware ist das entspannter Wert.
Aber Windows ist da mitunter eigen.

> Es kann auch komplexe Funktionen
> aktivieren die der Mikrocontroller dann autark ausführt

Die er dann ja auch noch extra debuggen muesste?

So hat er alles in seiner Applikation.

Autor: Dunno.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, nimm doch einfach einen Raspberry Pi mit Windows 10 IoT.
Dazu das Pi Display, und fertig ist, da hast du dann Visualisierung und 
Ansteuerung in einer Kiste, plus den Vorteil dass du in visual studio 
und c# arbeiten kannst.
Kein rumgefuhrwerke mit c, Mikrocontroller und ner Schnittstelle, die 
bei den Anforderungen alle nicht nötig sind.

Die Einstiegshürden sind auch so schon hoch genug.

Autor: Dumdi D. (dumdidum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luke P. schrieb:
> Notstop

Notstop in Hardware auf der tiefstuntersten Ebene implementieren.

Wenn auf PC müsste der PC echtzeitfähig sein (ist Windows nicht) und die 
Hardware drunter müsste periodisch überprüfen ob die PC Software noch 
läuft, usw. Das schafft man nicht

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.