Liebe Community,
ich bin Physiklehrer und möchte ein unkompliziertes System zur
Verwendung von Arduinos für Schülerexperimente einrichten, das für alle
KollegInnen unkompliziert umzusetzen ist.
Hierbei wäre es sehr hilfreich, wenn von einem PC auf mehrere Arduinos
gleichzeitig der gleiche Sketch geladen werden könnte. Im Idealfall wäre
das ganze auch noch kabellos (Bluetooth/Wlan etc.) möglich.
Falls jemand hierzu gute Tipps hat bzw. weiß, ob dies grundsätzlich
möglich ist, würde es mich sehr freuen.
Beste Grüße
Moritz
Moritz F. schrieb:> Hierbei wäre es sehr hilfreich, wenn von einem PC auf mehrere Arduinos> gleichzeitig der gleiche Sketch geladen werden könnte. Im Idealfall wäre> das ganze auch noch kabellos (Bluetooth/Wlan etc.) möglich.
Grundsätzlich ist fast alles möglich, meist hängt es nur vom Aufwand und
damit vom Geld ab. Aber um hier Tipps zu bekommen solltest du noch ein
paar Worte zu Aufbau bzw. Umgebung verlieren.
- Um welchen Arduino geht es? Arduino umfasst ja verschiedene
Familienmitglieder, die sich alle etwas unterscheiden.
- Wo befinden sich die Arduinos bei den Experimenten? Auf den
Schülertischen?
- An welche weitere Hardware sind sie angeschlossen? PCs? Es braucht ja
wenigstens ein Display zur Visualisierung von Ergebnissen.
- Wer schreibt den Sketch? Nur der Lehrer und/oder auch die Schüler?
- Ist es bei euch in der Schule möglich, neue WLAN Geräte einfach
aufzusetzen? Sind die Lehrer dann für deren Sicherheit verantwortlich?
Ich habe etwas in diese Richtung gebaut: Ein ATmega 328p sitzt auf einer
Platine Huckepack auf einem Raspberry Zero W. Darüber wird er mit Strom
versorgt (Powerbank) und auch programmiert: Das Compilat von der Arduino
IDE wird per SSH über WLAN an den Raspberry geschickt. Dort wird der
ATmega über SPI mit avrdude programmiert.
Auf der Platine sind Motortreiber und diverse IO Ports, realisiert habe
ich damit einen kleinen (leider noch recht dummmen) Robot. Aber das
Setup ist so flexibel, dass man ihn sogar während der Fahrt
umprogrammieren könnte.
Die Visualisierung von Daten übernimmt der Raspberry per Webserver,
aufzurufen per Handy-Browser.
Funktioniert recht gut, wäre aber sehr aufwändig herzustellen für einen
Klassensatz und ist für böswillige oder ungeschickte Schülerhände
vielleicht zu anfällig. Andererseits gilt das für fast jede Schaltung,
die ich mir so vorstellen kann.
Sag Bescheid, wenn diese Richtung für Dich interessant ist.
@Stefan:
Danke für die Links. Ich bin auf den ersten Blick noch nicht schlau
daraus geworden, aber werde es mir in ner ruhigen Minute nochmals
genauer ansehen.
HTML Fragender schrieb:> Wenn da ein bootloader drauf ist, kannst Du davon einige Dutzend an> einen USB hub anschließen und per Batch / Script programmieren.
Beachte die Zielgruppe:
Moritz F. schrieb:> Verwendung von Arduinos für Schülerexperimente einrichten,> das für alle KollegInnen unkompliziert umzusetzen ist.
Ich gehe also davon aus, dass er die Arduino-IDE benutzen will.
Wenn man jetzt mehrere Arduinos downloaden will, wird jeder eine eigene
COM-Port-Nummer erzeugen, die vor jedem Upload neu auszuwählen, ist
höchst lästig. Abhängig davon, was sonst noch am PC war, können die
Portnummern auch noch variieren.
Wie willst Du das Laiensicher (Lehrerkollegen) umsetzen?
Schreibe bitte mal etwas konkreter, wie Du Dir das als Batch oder Script
vorstellst.
Etwas besser dran ist man, wenn man Clone mit dem CH340 einsetzt, die
haben keine USB-Seriennummer und belegen immer die gleiche Portnummer,
wenn man sie nacheinander am selben Port anklemmt.
@Hanno:
Also prinzipiell geht es um einen Arduino Mega 2560 mit optional Grove
Shield.
In diesem Fall geht es tatsächlich einfach darum, dass wir (LehrerInnen)
zu bestimmten Experimenten/Sensoren die Sketches schon vorbereiten und
auch KollegInnen, die gar nichts mit Arduino am Hut haben, diese
idiotensicher verwenden können, indem sie zuvor die abgespeicherten
Sketches zu dem Versuch auf die Arduinos laden und die Sensoren/Displays
(mit Anschlussgrafiken) dann an die SchülerInnen ausgegeben werden. Die
Ergebnisse/Messwerte werden dann zum Beispiel über ein Display oder
anderes Ausgabemedium angezeigt.
Die Arduinos sind während dem Experimentieren auf den Schülertischen
oder bei Messungen in der Umwelt eben draußen und werden mit einer
Powerbank über den USB-C-Ausgang betrieben (siehe
https://macandegg.de/2020/09/powerbank-ohne-automatisches-abschalten/).
Meiner Erfahrung nach schreckt viele KollegInnen es schon ab, dass die
Anfangshürden manchmal etwas schwierig sind und die Situation, dass man
soviele PCs/Laptops braucht ist auch nicht an jeder Schule umsetzbar.
Ich finde es schade, dass gerade in Physik mit den ganzen Sensoren hier
das Potenzial verschenkt wird und deshalb würde ich gerne diese Variante
ohne Schülerpcs und Programmieren ausprobieren. Wobei ich selbst es
schon auch gut finde, wenn die Kreativität der SchülerInnen durch das
Programmieren gefördert wird.
Bezüglich der Aufsetzung neuer WLAN-Geräte habe ich mich jetzt noch
nicht schlau gemacht, aber da findet man denke ich eine Lösung gerade
auch wenn das WLAN nur für die kurze Zeit des Uploads in der
Physiksammlung gebraucht wird.
Manfred schrieb:> Ich gehe also davon aus, dass er die Arduino-IDE benutzen will.
Nein er möchte einfach mehrere Arduinos flashen
>> Wenn man jetzt mehrere Arduinos downloaden will, wird jeder eine eigene> COM-Port-Nummer erzeugen, die vor jedem Upload neu auszuwählen, ist> höchst lästig. Abhängig davon, was sonst noch am PC war, können die> Portnummern auch noch variieren.>
Na und? Das lässt sich leicht abfangen.
> Wie willst Du das Laiensicher (Lehrerkollegen) umsetzen?>> Schreibe bitte mal etwas konkreter, wie Du Dir das als Batch oder Script> vorstellst.
Sicher nicht, ein Physiklehrer wird das hinbekommen!
@Felix:
Hi Felix,
das hört sich auf jeden Fall spannend an. Auch die Daten über den
Handy-Browser aufzurufen hat natürlich Charme.
Kannst du beim Hochladen theoretisch einen komplett neuen Sketch (mit
Packages) übertragen oder nur teilweise abändern? Die ursprüngliche
Kommunikation (Möglichkeit zum Umprogrammieren) will man ja natürlich
dauerhaft beibehalten.
Ich habe zwar noch nie mit Rasperry/avrdude gearbeitet, aber wenn das
alles funktioniert wärs eventuell nen Versuch wert.
Wahrscheinlich müsste ich mal einen Prototypen bauen, um es abzuschätzen
wie viel Aufwand es dann tatsächlich für einen Klassensatz ist :).
Die Anfälligkeit kann man bei fast keinem Schülerversuch verhindern.
VG
Moritz F. schrieb:> Kannst du beim Hochladen theoretisch einen komplett neuen Sketch (mit> Packages) übertragen oder nur teilweise abändern? Die ursprüngliche> Kommunikation (Möglichkeit zum Umprogrammieren) will man ja natürlich> dauerhaft beibehalten.
Habe ich nicht ganz verstanden. Meinst Du mit Packages Libraries und
Includes?
Wie auch immer, die komplette Compilation findet auf dem PC statt, am
Ende purzelt ein Binary im AVR-Format mit dem gesamten Code heraus und
nur dieses wird per SCP/SSH übertragen. Bei mir momentan nur an einen
Raspberry Pi, aber es sind natürlich beliebig viele möglich.
Das Binary wird dann per Skript über avrdude auf den ATmega geladen. Das
geht jederzeit, beliebig oft und braucht noch nicht mal einen
Bootloader. Die Leitungen zum Programmieren des Chips sind bei mir
dauerhaft verbunden. Das heißt natürlich auch, dass für jeden ATmega ein
eigener Raspberry notwendig ist.
Ich denke Du suchst "arduino-cli":
https://arduino.github.io/arduino-cli/latest/getting-started/
Damit kannst quasi alle Schritte über die Befehlszeile ausführen. Mit
ein bisl Skript bekommt man dann den Download komplett automatisiert.
Dann reicht es einfach die Arduinos nacheinander oder auch gleichzeitig
mehrere an einen PC anzustecken und das Skript laufen zu lassen. Man
könnte sicher auch ein Raspi so vorbereiten, das der das per Knopfdruck
macht. Den in eine Schachtel gepackt mit einem kleinen Display und ein
paar Knöpfen...
Damit kommen aber nur LehrerAußen, Kollegaußen und SchülerAußen zurecht
die nicht nur Klickibunti kennen.
Offtopic: Der Geschlechterquatsch geht mir echt auf den Sack. (Ja es
heißt auf deutsch Geschlecht und nicht "Gender") Als ob es Frauen,
Schwulen, Lesben und den Übrigen irgendwas bringen würde wenn man sie
jetzt mit einem '*' bedenkt. Es wäre sinnvoller endlich mal mit der
Unterschwelligen Abwertung aufzuhören und vor allem die Bezahlung der
typischen Berufe mal anständig nach oben zu korrigieren. (Und zwar
unabhängig vom Geschlecht) Der * ist genauso sinnfrei wie das dämliche
Geklatsche vor gut einem Jahr. Davon kann die Pflegekraft auch nicht
ihre Familie ernähren. Die ganzen Sozialberufe sind vollkommen
unterbewertet, keine Wunder das man dafür kaum noch Personal findet.
Bei uns ist gerade Kommunalwahl, normalerweise bin ich ja eher so
Grün/Links. Aber das Wahlprogramm der Linken war wegen der vielen '*'
nicht mal lesbar, die haben das 'Innen' ganz weggelassen, sah so aus als
gäbs überall Fußnoten. Haben se halt Pech, meine Stimme hat jedenfalls
wer anders bekommen...
Hallo,
Beitrag "Re: Kann ich einen Arduino Sketch gleichzeitig auf mehrere Arduinos laden?"
Genau das war auch mein Gedanke.
Alle angesteckten Boards bekommen eine COM Port Nummer.
Die musst du entweder in der IDE ablesen oder im Gerätemanager anzeigen
lassen.
In der IDE alle Ausgaben einschalten.
Datei > Voreinstellungen >
- Ausführliche Ausgabe während > beide Haken rein
- Compilerwarnungen > "ALLE"
Zeilennummern und Codefaltung sind auch hilfreich.
Ebenso 'use accessibility features'
nach dem flashen guckste dir die letzte weiße Zeile an mit avrdude und
den Optionen.
Damit bauste dir eine Batch die alle COM Ports durchackert. Dann
beschriftest du alle Boards und alle USB Port damit immer das gleiche
Board am gleichen USB hängt, ansonsten ändern sich womöglich die Com
Port Nummern.
Meine persönliche Meinung ist, lass den Mist sein wenn das nur ca. 10
Boards sind, zeige allen Kollegen wo man in der IDE den Com Port ändert
und gut ist. Wenn man jedes Board einzeln ansteckt kann da auch gar
nichts schief gehen.
Zeit sparst du sicherlich auch nicht. Anstecken und abstecken musste eh
alle Boards. Und falls sich die Com Ports ändern, dann ist eh der Ofen
aus.
Man könnte für jeden Arduino einen Raspberry Pi einsetzen, auf dem ein
kleiner Webserver (php) läuft, der Datei-Uploads annimmt und mit avrdude
auf den Mikrocontroller überträgt. Bildschirm und Tastatur werden nicht
gebraucht, nur die kleine Blackbox und ein Netzteil (oder Powerbank).
Im Gegensatz zu den wechselnden COM Ports wäre es leicht, jedem
Raspberry Pi eine eigene feste IP Adresse zuzuweisen.
Neben der zentralen Ansteuerung durch den Lehrer bestände so auch für
die Schüler die Möglichkeit, Dateien selbst mittels Web-Browser auf
ihrem Smartphone/Tablet hochzuladen.
Dann brauchst du nur noch an zentraler Stelle (Lehrer-Laptop) einen
Massen-Upload auf alle Raspberry Pi zu machen. Das lässt sich mit einem
Shell/Bash Script und curl leicht automatisieren.
curl -F data=@upload.hex 192.168.2.101
curl -F data=@upload.hex 192.168.2.102
curl -F data=@upload.hex 192.168.2.103
curl -F data=@upload.hex 192.168.2.104
curl -F data=@upload.hex 192.168.2.105
...
Das ist sicher nicht die billigste Lösung, aber einfach zu realisieren,
flexibel an sich ändernde Bedürfnisse anpassbar und außerdem kann man
die Raspis noch für andere Zwecke verwenden.
Man kann auch beispielweise viele USB Seriell Wandler für “einen Euro”
fest an den PC USB ( Hub) anschließen. Dann ändert sich kein Comport
mehr.
Dann die Arduinos direkt dahinterhängen, fertig.
Wechselnde Com Ports sehe ich auch nicht als Problem.
Das bekommt man mit Bordmitteln von Linux/Windows in den Griff,
aber es ist auch völlig egal ob nun ein Arduino an com5 oder com99
hängt.
Mit Bootloader nahezu trivial.
Das ginge auch über Bluetooth, oder via TCPIP mit terminalprogramm oder
commandline ( Windows oder Linux) über Ser2net !
Ja, das habe ich vor ein paar Jahren auch genau so einmal gelöst, bei
einer Arduino Basisschulung.
Veit D. schrieb:> Alle angesteckten Boards bekommen eine COM Port Nummer.> Die musst du entweder in der IDE ablesen oder im Gerätemanager anzeigen> lassen.
Ein vernünftiges Übertragungsprogramm würde selbst die COM Port Nummern
der Arduinos über das Windows-Interface abfragen, so dass der Anwender
nicht mehr selber gucken muss. Nur falls ein Arduino dran steckt, der
nicht mit dem Code gefüttert werden soll, muss man sich darum speziell
kümmern.
Stefan ⛄ F. schrieb:> Man könnte für jeden Arduino einen Raspberry Pi einsetzen, auf dem ein> kleiner Webserver (php) läuft, der Datei-Uploads annimmt und mit avrdude> auf den Mikrocontroller überträgt. Bildschirm und Tastatur werden nicht> gebraucht, nur die kleine Blackbox und ein Netzteil (oder Powerbank).
Das ist der Ansatz, den ich weiter oben beschrieben habe. Funktioniert,
bringt mich aber im Nachhinein auf 2 Sinnfragen:
A) Warum nicht gleich den Raspberry nutzen für die Sensoren?
Bei meinem Roboter geht es nicht, da der ATmega Echtzeitaufgaben
übernimmt (Hallsensor auswerten). Bei einfachen Temperatur- oder
Lichtsensoren wäre das aber kein Problem.
B) Was ist der didaktische Nutzen?
Der Lehrer beamt ein vorbereitetes Programm an die Wand. Per Knopfdruck
kriegt es jeder Schüler auf sein Gerät. Die Schüler müssen dann nur doch
die Sensoren richtig anschließen und das Ergebnis notieren. Etwas
mager...
Die Schüler haben seit Corona doch Laptops, die Arduino IDE ist
kostenlos. Bei Ebay gibt es billigste Arduino-Clones. Warum nicht einen
Klassensatz bestellen und die Schüler einfach machen lassen? Den Code
könnte man über Git teilen.
Wenn's auch der gute alte Turnschuh-Adiministrator tut:
https://www.fischl.de/ispnub/#gallery
Der ISPnub ist von Thomas Fischl, vielleicht besser bekannt, durch
seinen USBasp Programmer. Der ISPnub enthält einen ATMEGA1284. Dieser
wird mit einem Image für einen beliebig anderen ATMEGA oder Tiny
gefüttert, sofern dessen Flash ausreicht. Den ISPnub steckt man nur auf
den ISP Header auf (hat der Arduino auch) drückt zum Programmieren eine
Taste und fertig. Man kann sogar die Anzahl der möglichen Kopiervorgänge
begrenzen.
Felix schrieb:> Warum nicht gleich den Raspberry nutzen für die Sensoren?
Weil es wohl letztendlich darum geht, den Umgang mit Arduino Modulen
kennen zu lernen. Er will nur die Einstiegshürden durch ein fertiges
Beispielprogramm minimieren.
> Was ist der didaktische Nutzen? Etwas mager...
Vielleicht möchte er herausfinden, welche der Schüler von sich aus darum
bitten, selbst programmieren zu dürfen. Die anderen wollen vielleicht
eher den Umgang mit der Hardware vertiefen. Das ist ideal, um Teamarbeit
zu erleben.
@Felix, Stefan:
Die Frage, warum man dann nicht gleich einen Rasperry verwendet ist
natürlich berechtigt, wenn man die Lösung mit dem Rasperry wählt (hier
spielen wahrscheinlich mehrere Faktoren eine Rolle)...
Didaktisch macht es insofern Sinn, da es bei vielen Versuchen ausreichen
könnte den Arduino zur Messwerterfassung zu verwenden und den Fokus auf
physikalische Zusammenhänge/Messungen zu konzentrieren. Im Vergleich zu
herkömmlichen Lehrmittelherstellern wären die "Messgeräte"
wahrscheinlich besser und wesentlich preisgünstiger. Zudem kann man die
Arduinos (flexibel) auch noch so einsetzen wie Felix es beschreibt,
wobei das mit dem Laptopproblem auch durch Corona nicht vollständig
gelöst ist, da viele Geräte von den Eltern verwenden und selbst wenn es
ihres ist, das Gerät wahrscheinlich auch nicht immer zur Schule
schleppen wollen nur weil sie es in Physik brauchen.
@Andreas, Veit, Fragender
Die Lösung über Usb-Hub muss ich mir mal anschauen. Ich sehe mich zwar
nicht als "Klickibunti" :), aber dafür braucht man offensichtlich schon
ein bisschen mehr Ahnung als ich aktuell habe.
Habe gehofft es würde auch eine etwas trivialere Lösung geben.
@Gerald
Was genau macht man mit dem ISBnub?
Ich würde einfach einen Raspberry Pi nehmen, an diesen eine handvoll
USB-Hubs anschließen (möglichst mit eigener Stromversorgung) und an die
Hubs wiederum sämtliche Arduinos. Dann flasht man mittels einem Shell-
oder Python-Script per avrdude die .hex auf einen Arduino nach dem
anderen, d.h. zuerst ttyACM0 (bzw. ttyUSB0), dann ttyACM1, etc. bis alle
Arduinos durch sind.
Um das ganze so einfach wie möglich zu machen, kannst du auch für jedes
Experiment die .hex auf einen einzelnen USB-Stick packen. Per Cron-Job
wird dann alle paar Sekunden das Skript gestartet, was nach einem
vorhandenen USB-Stick und einer dortigen .hex-Datei schaut. Ist der
Stick nicht vorhanden, passiert nichts, ist er vorhanden werden alle zu
diesem Zeitpunkt angeschlossenen Arduinos geflasht.
Für deine Kollegen sieht dann die Anweisung zum flashen so aus:
1. Alle Arduinos anstecken
2. USB-Stick für das jeweilige Experiment anstecken
3. Kaffee trinken gehen
4. Arduinos abstecken, fertig
Ich denke da sollte kein Physiklehrer mit überfordert sein.
Moritz F. schrieb:> @Gerald> Was genau macht man mit dem ISBnub?
Du brauchst keinen Rechner, um einen ATMEGA oder Tiny zu flashen. Das
hat schon seinen Vorteil, wenn man irgendwo in der Pampa z.B. ne
Wetterstation o.ä. flashen will. Der ISPnub ist wie ein USB-Stick für
den ISP Anschluss zu verwenden.
Anstecken und Knopf drücken, langt.
Außerdem, wenn du die HEX-Datei nicht aus den Händen geben willst, aber
z.B. im Service einem Kunden eine neue Softwareversion zukommen lassen
willst, schickst du ihm den Nub und begrenzt die Anzahl der Kopien auf
Eine.
Das ist nur eins, von etlichen denkbaren Szenarien.
Gerald B. schrieb:> ISP Anschluss
Da musst du bei Arduinos ein bisschen aufpassen um den Bootloader nicht
zu zerschießen.
Wahrscheinlich müsste man die Toolchain anpassen, damit immer eine .hex
gebaut wird die neben dem Programm am Ende den Bootloader enthält.
Beim ISP Chip Erase ist nämlich immer alles weg.
Andre schrieb:> Wahrscheinlich müsste man die Toolchain anpassen, damit immer eine .hex> gebaut wird die neben dem Programm am Ende den Bootloader enthält.
Für AVRs erzeugt der Arduino Builder automatisch eine Hex ohne und eine
mit Bootloader.
Das Thema ist also schon halb erledigt!
Man muss nur die richtige Hex auswählen und übertragen.
Mit: Magie!
Dich interessiert die Antwort doch gar nicht!
Oder?
1: Irgendein original AVR Board in der IDE einstellen
2: Irgendein funktionsfähiges Programm laden
3: Hauptmenü->Sketch->"Sketch-Ordner anzeigen"
Ein Dateimanager hat sich geöffnet? Ja!
Du siehst eine *.ino Datei? Ja!
Du siehst eine *.hex Datei? Nein!
3: Hauptmenü->Sketch->"Kompilierte Binärdatei exportieren"
Das Programm wird übersetzt? Ja!
Du siehst 2 neue *.hex Dateien im Dateimanager? Ja!
Fertig!
So geht Magie.