Forum: Mikrocontroller und Digitale Elektronik usb als ausgang?


von Jens K. (trunx)


Lesenswert?

Hallo Forum,

ich habe mal eine ganz praktische Frage:
ich benutze für meine SchülerExperimente den Mikrocontroller Arduino 
Nano V3.0 (mit ATmega328PB und CH340), sowie die Arduino IDE, das auf 
einem Windows 10 Rechner läuft. Die Verbindung zwischen dem 
Mikrocontroller und dem PC wird mit USB realisiert.

Bislang programmieren die Schüler lediglich das Blinken einer LED (zB. 
den Morsecode für SOS) bzw. das Abspielen einer 'Melodie' über einen 
piezo summer am Ausgang.

Nun würde ich gern Text/Zahlen ein- und ausgeben wollen, zB. für das 
Berechnen einer einfachen Aufgabe (es geht ja nur ums Prinzip).

Mein Grundgedanke ist dabei folgender: man öffnet die 
Eingabeaufforderung unter Windows, geht darin zum Mikrocontroller und 
startet das darauf befindliche Programm. Dabei wird man bspw. 
aufgefordert zwei zu addierende Zahlen einzugeben und erhält als 
Resultat natürlich das Ergebnis. Das setzt aber voraus, dass sowohl Ein- 
als auch Ausgabe über die USB-Schnittstelle erfolgen.

Geht das überhaupt und wenn ja, wie? Probiert habe ich alle möglichen 
Arten von Ausgängen und dabei lediglich festgestellt, das man auf dem 
board insgesamt vier LED's zum Leuchten bringen kann.

Müsste ich dem Mikrocontroller nicht auch einen Laufwerksbuchstaben 
zuweisen? (Noch) weigert sich Windows, dies zu tun.

Wie immer würde ich mich über Antworten freuen.

vielen Dank schon mal

trunx

: Verschoben durch User
von Frank L. (hermastersvoice)


Lesenswert?

wie will Jemand der selbst keine Ahnung hat Anderen was beibringen?
Wenn du statt der Eingabeaufforderung ein Terminalprogramm nimmst 
hättest du eine entfernte Chance etwas zu erreichen. Wie das geht kannst 
du aber selbst im Netz finden. Du Lehrer!

von Clemens L. (c_l)


Lesenswert?

https://www.arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardNano sagt:
> Communication
>
> The Arduino Nano has a number of facilities for communicating with
> a computer, another Arduino, or other microcontrollers. The ATmega328
> provide UART TTL (5V) serial communication, which is available on digital
> pins 0 (RX) and 1 (TX). An FTDI FT232RL on the board

(bei dir CH340)

> channels this serial communication over USB and the ... drivers ...
> provide a virtual com port to software on the computer.

Diesen COM-Port solltest du sehen können. Der CH340 (oder FT232) kann 
nichts anderes, es gibt also keine Laufwerksbuchstaben, oder irgendein 
anderes USB-Gerät.

Und:

> The Arduino software includes a serial monitor which allows simple textual
> data to be sent to and from the Arduino board.

siehe auch 
https://www.arduino.cc/reference/en/language/functions/communication/serial/

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens K. schrieb:
> man öffnet die Eingabeaufforderung unter Windows, geht darin zum
> Mikrocontroller und startet das darauf befindliche Programm.

Du suchst ein Terminalprogramm.

TeraTerm ist ein gutes Beispiel dafür.

von Stefan F. (Gast)


Lesenswert?

Hier hast du eine Beispielanwendungen zur Inspiration: 
http://stefanfrings.de/serial_io/index.html

Geht das in die Richtung die du suchst?

Auf jeden Fall kann man sich nicht direkt auf Mikrocontroller einloggen 
um quasi beliebige Befehle abzusetzen, denn dazu bräuchten Sie ein 
Betriebssystem und eine Shell. Das kennst du vielleicht vom Raspberry 
Pi.

Was aber mit der Dir vorliegenden Hardware machbar ist: Man schreibt ein 
eigenes Programm, dass eine kleine Menge von Befehlen am seriellen Port 
annimmt und beantwortet.

von Adam P. (adamap)


Lesenswert?

Frank L. schrieb:
> wie will Jemand der selbst keine Ahnung hat Anderen was beibringen?

Leider ist das die traurige Wahrheit...

Innerhalb der letzten 3 Monate, hatte ich zwei Fälle von "keine Ahnnung 
Lehrkräften" :-(

Einer an einer Berufsschule für Techniker, der andere an einem 
Gymnasium.

Ich kann es mir nur so erklären, dass die Lehrer in dieses Thema 
hineingeworfen werden und es unterrichten sollen - dabei kommt dann eben 
sowas bei rum.

Ich kann da ebenfalls nur den Kopf schütteln...

von Prometheus (Gast)


Lesenswert?

Hallo,

ja, das geht, aber etwas anders als Du denkst.

Trenne Dich von der Windows/ Ordner  Exe  ... Gedankenwelt.

Der Arduino ist, wie bereits oben beschrieben, vie COM-Port / RS232 mit 
dem PC verbunden.
Du kannst darüber beliebige Strings/Befehle was auch immer senden. Und 
das geht in beide Richtingen.

Das ist dann eher so wie eine Client-Server Netzwerkverbindung (ja, ja, 
das ist Punkt zu Punkt und ohne unterlegtes Protokoll...)

Damit kannst Due dem Arduino also Befehle senden. Dann muss das Programm 
auf dem Arduino "lediglich" die Befehle auseinandernehmen und abarbeiten 
und dann die Antwort zurücksenden.
Auf der Arduino Seite heißt die Gruppe von Commandos serial z.B. serial 
Beginn()

Auf der PC Seite würde ich dir das Hterm empfehlen.
Das ist zwar schon etwas angestaubt, aber imho anderen Programmen in 
vielen Punkten deutlich überlegen.

von Jens K. (trunx)


Lesenswert?

Frank L. schrieb:
> wie will Jemand der selbst keine Ahnung hat Anderen was
> beibringen?

Denke darüber bitte nochmal genauer nach, wenn ich genauso denken würde 
(und leider tun dies viele Kollegen), dann gäbe es nur Laubsägearbeiten 
im Technikunterricht :)

> Wenn du statt der Eingabeaufforderung ein Terminalprogramm nimmst
> hättest du eine entfernte Chance etwas zu erreichen. Wie das geht kannst
> du aber selbst im Netz finden. Du Lehrer!

ich bin davon ausgegangen, dass die Eingabeaufforderung das 
Windows-Terminal ist. Linux ist auf unseren Rechner nicht möglich.

von Adam P. (adamap)


Lesenswert?

Jens K. schrieb:
> ich benutze für meine SchülerExperimente den Mikrocontroller Arduino
> Nano V3.0 (mit ATmega328PB und CH340), sowie die Arduino IDE

Wenn du das doch schon alles hast,

dann brauchst in der Arduino IDE nur den "Serieller Monitor" öffnen und 
auf dem Board die Serial Klasse nutzen.

von Stefan F. (Gast)


Lesenswert?

Jens K. schrieb:
> ich bin davon ausgegangen, dass die Eingabeaufforderung das
> Windows-Terminal ist. Linux ist auf unseren Rechner nicht möglich.

Von Linux war auch gar nicht die Rede. Terminalprogramme gibt es für 
alle Betriebssysteme (sogar Smartphones). Du musst das nur zwischen den 
Varianten für Netzwerk und serielle Schnittstellen unterscheiden. Du 
brauchst eins für serielle Schnittstellen, weil diese Arduino Module 
virtuelle serielle Ports bereit stellen.

von Tom H. (toemchen)


Lesenswert?

Unglaublich.
Massenweise Schimpfereien und nur eine Antwort, die das Thema passend 
für den Fragesteller trifft.
Wie kann man jemand mit "keine Ahnung" beschimpfen, wenn man selbst 
keine Ahnung hat?

Also nochmal zur Verdeutlichung, einmal kam's ja schon richtig:

- Die Arduinos sind mit ihrer USB-Verbindung, die ja quasi eine serielle 
Verbindung emuliert, natürlich dafür gedacht, über diese Verbindung auch 
im Ablauf ihres Programmes zu kommunizieren.

- Wenn Ihr mit der IDE arbeitet, ist der Arduino bereits erfolgreich 
verbunden, denn über die Verbindung wird ja das Programm auf den Arduino 
geladen, z.B. "Blink"

- Im Arduino-Programm muß man mit den Befehlen der Serial-Library 
arbeiten, die schon basismäßig mit drin ist. Das findet Ihr dann schon 
selbst heraus.

- In der Arduino IDE startet man das Tool "Serial Monitor", das IST ein 
Terminal-Programm.

von Paul H. (powl)


Lesenswert?

Lieber TO, dir fehlt da noch einiges an Wissen, wie mir scheint. Arbeite 
dich mal zum Thema "Serielle Schnittstelle" beim Arduino ein, denn das 
ist das, was du suchst!

Du kannst nicht einfach über ein Terminal/Konsole auf dem Computer "auf 
den Arduino gehen" und "dort ein Programm starten". Da läuft ja kein 
Betriebsystem drauf mit dem man mehrere Unterprogramme einfach von 
irgendwo her aufrufen könnte. Ich finde auch ulkig, wie du auf die Idee 
kommst, dem Arduino einen Laufwerksbuchstaben zuweisen zu wollen. Sowas 
geht überhaupt nicht. :-D

Da der Arduino ja bereits über USB mit dem Computer verbunden ist ist er 
auch als Serielle Schnittstelle (dein Stichwort!) im Gerätemanager 
Sichtbar. D.h. man kann ihn als COM1.. COM3.. COM12 oder so irgendwas 
ansprechen. Und zwar mit einer geeigneten Terminal-Software (oder die, 
die in der Arduino IDE eingebaut ist). Damit kann dein Computer Daten 
über die Serielle Schnittstelle an den Arduino senden und von diesem 
auch empfangen. Da hast du dann quasi deine Ein- und Ausgabe.

Das Programm, das auf dem Arduino läuft muss dann anfangs seine eigene 
Serielle Schnittstelle einrichten und sich darum kümmern, dass 
eingehende Daten verarbeitet werden und daraufhin die gewünschte 
Rückantwort gesendet wird.

Alles super basic-kram, da gibt's Tutorials für.
Stichworte:
- Serielle Schnittstelle Arduino
- Serial Tutorial Arduino
- UART

von Matthias S. (da_user)


Lesenswert?

Guck dir doch mal die "Communication" Examples in der IDE an:

> Read ASCII String: Parse a comma-separated string of integers to fade an
> LED.
> Serial Call Response: Send multiple variables using a call-and-response
> (handshaking) method.
> Serial Call Response ASCII: Send multiple variables using a call-and-
> response (handshaking) method, and ASCII-encode the values before sending.
> Serial Event: Demonstrates the use of SerialEvent().

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Jens K. schrieb:
> Dabei wird man bspw.
> aufgefordert zwei zu addierende Zahlen einzugeben und erhält als
> Resultat natürlich das Ergebnis.

Für solche Aufgaben würde ich mich aber gänzlich vom Arduino lösen. Denn 
so Sachen wie printf, scanf und co. machen auf einem Controller nicht so 
richtig viel Spaß. Und als Lehrmethode ergibt es auch keinen wirklichen 
Sinn.

Für die C-Grundlagen und die Grundlagen der Ein- und Ausgabe würde ich 
das Programmieren von einfachen Windows-Anwendungen, die in der 
Eingabeaufforderung laufen.


Ich würde Code::Blocks als IDE zusammen mit dem GCC bilden eine recht 
einfache Entwicklungsumgebung, mit der man schnell mal ein paar 
textbasierte Programme erstellen und testen kann. Das Kompilieren geht 
schneller und der Code muss nicht erst auf den Controller übertragen 
werden.

Und eben so stdio-Sachen wie printf, scanf laufen out of the Box und man 
muss sich keine Gedanken über Flashspeicher machen.

Es gibt dann sogar die Möglichkeit, über Serial-Bibliotheken das 
Windows-Programm mit dem Arduino kommunizieren zu lassen und man kann 
dann z.B. ein Windowsprogramm schreiben, dass mit einem Programm auf dem 
Arduino kommuniziert und z.B. je nach serieller Nachricht dann LEDs 
schaltet oder Eingänge zurückgibt. Das würde aber voraussetzen, dass der 
Lehrer weiß, was er tut...

: Bearbeitet durch User
von Marek N. (Gast)


Lesenswert?

Die Arduino IDE hat doch sogar selbst soagr eine einfache 
Terminal-Emulation, nennt sich Serial Monitor.

von Einer K. (Gast)


Lesenswert?

Sebastian R. schrieb:
> Es gibt dann sogar die Möglichkeit, über Serial-Bibliotheken das
> Windows-Programm mit dem Arduino kommunizieren zu lassen und man kann
> dann z.B. ein Windowsprogramm schreiben, dass mit einem Programm auf dem
> Arduino kommuniziert und z.B. je nach serieller Nachricht dann LEDs
> schaltet oder Eingänge zurückgibt.

Gibts schon recht weit fertig vorgekaut.

Einerseits:
Suche mal nach "Arduino CmdMessenger"
Eher was für zwischen Arduinos, oder zu C# auf dem PC

Und andererseits:
Processing
oder solche wie http://www.serialcominstruments.com/instrument.php

von Sebastian R. (sebastian_r569)


Lesenswert?

Arduino Fanboy D. schrieb:
> Processing

Das ist aber Java. Und ich möchte den TO nicht mit mehreren Sprachen und 
dann noch mit einer Objektorientierten verwirren. ;)

Ich würde erstmal bei C bleiben.

von Einer K. (Gast)


Lesenswert?

Sebastian R. schrieb:
> Ich würde erstmal bei C bleiben.

Dann ist er/sie/es aber bei Arduino schon recht falsch, denn da ist C++ 
die Sprache der Wahl.

Auch ist die Arduino Entwicklung (ursprünglich) doch schon sehr mit 
Processing verflochten.
Daher kommt auch der, viele irritierende, Begriff "Sketch" für ein 
Programm.
Auch setup(), loop(), digialWrite() usw. haben ihren Ursprung dort.

Processing ist vielleicht nicht die Mutter von Arduino, aber sicherlich 
sowas, wie eine Großtante.

---

Sebastian R. schrieb:
> und dann noch mit einer Objektorientierten verwirren. ;)
Wie du siehst, steckt er/sie/es, alleine durch die Wahl "Arduino", mit 
beiden Beinen in der OOP.

Schaue dir nur mal die originale Arduino AVR EEPROM Library an...
https://github.com/arduino/ArduinoCore-avr/blob/master/libraries/EEPROM/src/EEPROM.h
Für einen auf C fixierten Menschen, könnte das ein schockierender 
Anblick sein.

von Sebastian R. (sebastian_r569)


Lesenswert?

Achja... Ich vergesse immer, dass die Sketche mal .cpp hießen, bevor 
.ino eingeführt wurde....

von Einer K. (Gast)


Lesenswert?

Sebastian R. schrieb:
> Achja... Ich vergesse immer, dass die Sketche mal .cpp hießen,
> bevor
> .ino eingeführt wurde....

*.pde hießen sie...
;-)

*.cpp heißen sie, wenn der Builder alle *.ino eines Projektes 
verschmolzen hat.
Und als *.cpp werden sie dann dem Compiler in den Rachen geworfen.

von Sebastian R. (sebastian_r569)


Lesenswert?

Irgendwie so ;)

von Kein Lehrer (Gast)


Lesenswert?

Adam P. schrieb:
> Frank L. schrieb:
>> wie will Jemand der selbst keine Ahnung hat Anderen was beibringen?
>
> Leider ist das die traurige Wahrheit...
>
> Innerhalb der letzten 3 Monate, hatte ich zwei Fälle von "keine Ahnnung
> Lehrkräften" :-(
>
> Einer an einer Berufsschule für Techniker, der andere an einem
> Gymnasium.
>
> Ich kann es mir nur so erklären, dass die Lehrer in dieses Thema
> hineingeworfen werden und es unterrichten sollen - dabei kommt dann eben
> sowas bei rum.
>
> Ich kann da ebenfalls nur den Kopf schütteln...

Ich nicht.

Die Aufgabe von Lehrern ist, anderen etwas beizubringen. Da ist 
pädagogisches Können fast wichtiger, als technisches Wissen. Dass das zu 
kurz kommt bei der Lehrerausbildung, sehe ich auch so. Ein Grund für 
persönliche Angriffe ist es trotzdem nicht.

Würde man Falk Brunner (odere ähnliche "diplomatisch" Leute aus diesem 
Forum) auf 30 Kinder loslassen, würden diese heulend nach Hause rennen, 
und noch weniger lernen.

Hier ist doch schon einmal die Bereitschaft gegeben, einzugestehen, dass 
man etwas nicht weiß. Und die Bereitschaft, etwas zu lernen.

Das Lehrern eine gewisse Geringschätzigkeit gegenüber technischem Wissen 
innewohnt, stimmt leider manchmal. Hier wurde das aber bisher noch nicht 
geäußert.

von Einer K. (Gast)


Lesenswert?

Kein Lehrer schrieb:
> Hier ist doch schon einmal die Bereitschaft gegeben, einzugestehen, dass
> man etwas nicht weiß. Und die Bereitschaft, etwas zu lernen.

Jegliche Kompetenz entsteht durch einen Prozess...
Diese Entwicklung wird einem nicht geschenkt.

Nach diesem Modell, sind Lehrer am besten auf Stufe 3 aufgehoben:
https://de.wikipedia.org/wiki/Kompetenzstufenentwicklung
Und den Weg dahin, zu 3 (oder gar 4), wird man bei jedem neuen Thema 
gehen müssen.
Das gilt natürlich auch für Lehrer.

von Jens K. (trunx)


Lesenswert?

Hallo an alle,

erstmal vielen Dank, der serielle Monitor tut genau das, was ich mir 
gewünscht habe.

Zu der anderen Diskussion, ob ein Lehrer auch mal von nix ne Ahnung 
haben und dennoch das Thema unterrichten darf: Es ist eine irrige 
Annahme, dass ein Lehrer alles wissen sollte und nur noch sein Wissen 
auf die Schüler zu übertragen hat. Natürlich weiß man als Lehrer eine 
ganze Menge und natürlich sollte man Experte auf dem jeweiligen Gebiet 
sein oder es zumindest werden wollen.

Wichtiger finde ich (und so gestalte ich meinen Unterricht), dass es 
Projekte gibt und man sich, Schüler und Lehrer, das dazu notwendige 
Wissen letztlich gemeinsam erarbeitet. Diese Art des kooperativen 
Lernens brauchen die Schüler garantiert in ihrem späteren Leben, 
wohingegen das konkrete Fachwissen oft genug schnell veraltet oder 
anders obsolet wird.

Für den Lernprozess ist es also durchaus vorteilhaft, wenn die Schüler 
einerseits experimentell in Neuland vordringen und dabei Fehler aber 
auch Erfolge haben dürfen (weil z.B. der Lehrer selbst welche macht), 
andererseits aber erleben, dass selbst Experten immer weiter lernen 
müssen und dass dies durchaus auch gemeinsam an einem Projekt sein kann.

viele Grüße

trunx

von foobar (Gast)


Lesenswert?

> Wichtiger finde ich (und so gestalte ich meinen Unterricht), dass es
> Projekte gibt und man sich, Schüler und Lehrer, das dazu notwendige
> Wissen letztlich gemeinsam erarbeitet.

Wozu brauchen sie dann dich?

von Einer K. (Gast)


Lesenswert?

foobar schrieb:
> Wozu brauchen sie dann dich?

Damit sie einen Anleiter haben, welcher das lernen gelernt hat, und 
diese Fähigkeit auch vermitteln kann.
?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.