Grösseres Projekt realisierbar mit Raspberry Pi und Arduino?

  • Hallo zusammen,

    Ich habe mehrere generelle Fragen zu einem Projekt. Es soll ein Gerät entwickelt werden, welches sich autonom an einem aufsteigendem Drahtseil fortbewegen kann. Eine Art Seilbahn, nur dass sich das Gerät am Seil selber hochziehen muss. Dabei muss eine Last unterwegs erkennt und aufgenommen werden und möglichst genau wieder abgesetzt werden.

    Wir haben uns überlegt das ganze mit einem Raspberry Pi und einem Arduino zu realisieren. Das Raspberry würde dann die Datenverarbeitung übernehmen, sprich Objekterkennung mit Kamera, Auswertung der Sensordaten, wie Distanz und Höhe. Das Arduino würde dann die Motoren ansteuern. Was haltet ihr von dieser Überlegung? Können Arduino und Raspberry Pi einfach gekoppelt werden und lohnt sich das? Oder kann ein Raspberry all diese Aufgaben auch selber übernehmen?

    Wie sieht es mit der Stromversorgung aus. Ich denke eine separate Stromversorgung für die beiden Boards und die Motoren wäre von Vorteil, nicht dass die Spannung zusammenfällt wenn die Motoren zu laufen beginnen. Was für Akkus kommen da in Frage? Ich habe an Lithium Polymer gedacht.

    Danke für eure Antworten.

  • Grösseres Projekt realisierbar mit Raspberry Pi und Arduino?? Schau mal ob du hier fündig wirst!

  • Das kann der Raspi alleine.

    Die entscheidende Frage ist: Was ist das für eine Last, wie schwer und über welche Strecken und Höhen muss sie transportiert werden. Entsprechend viel Kraft braucht der Motor und entsprechend viel Energie müssen die Akkus haben. Das wiederum bestimmt das Gewicht des Antriebs und erhöht wiederum den Energiebedarf.

    Bei größeren Lasten musst du dann schnell eine Autobatterie mit dem Gerät dir rumschleppen...

    Wäre zu überlegen, ob man nicht zwei Drahtseile nimmt und die Stromversorgung über die Seile macht.

    Könntest du uns etwas genauer sagen, um was es geht, was transportiert werden soll und ähnliches. Macht ja einen Unterschied, ob du Schokoriegel ins Kinderzimmer bringen, oder Flugzeugwracks in den Alpen bergen willst.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Es soll ein Holzwürfel von ca. 0.3kg aufgegriffen und transportiert werden. Dabei muss in jedem Moment der Standort der Last, sprich die Koordinaten an den PC übertragen werden. Es muss also noch mit Distanzsensoren gearbeitet werden. Es darf kein zweites Seil aufgespannt werden. Wir hätten also diverse Sensoren zur Erkennung der Last und des Zieles, dann zur Erkennung des Endes des Parkours. Dann hätten wir Motoren zur Fortbewegung, was mit Schrittmotoren realisiert werden kann und einen Motor zur Hebung der Last. Ist das nicht zu viel für das Raspberry Pi?

  • Ist das ein Schul- oder Uni-Projekt oder sowas?

    Der Raspi schafft das leicht. Er hat genug Anschlussmöglichkeiten, um das alles zu steuern.

    Du brauchst einen Motor für eine Art Seilwinde zum Heben der Last. 300g ist nicht so viel. Bei passender Übersetzung reicht ein kleiner Motor.

    Wie soll der Holzklotz gehalten werden? Du brauchst noch irgendeine Art Greifer oder so. Oder soll ein Haken den Klotz an einem Bügel erfassen? Ggf. also auch hier ein Motor.

    Die Fortbewegung kannst du mit einem Schrittmotor machen. Wenn die Geschwindigkeit nicht maßgeblich ist, tut es auch hier ein relativ kleiner Motor mit kurzer Übersetzung. Wie soll das aussehen? Ist das Seil vom Anfangs- bis zum Endpunkt frei hängend? Läuft es horizontal oder wie bei einer Bergseilbahn bergauf? Ist das Seil straff gespannt oder eher durchhängend? Willst du zwischen zwei Rädern/Rollen das Seil durchlaufen lassen? An dem Seil darf möglichst kein Schlupf entstehen, weil sonst die Positionsberechnung ungenau wird. Am den beiden Enden der Fahrstrecke würd ich einen Endschalter anbringen, der erstens den Antrieb (in die jeweilige Richtung) abschaltet und zweitens eine Positionskalibrierung (auf null bzw. Endpunkt) auslöst. Dann hast du wenigstens an den beiden Endpunkten immer eine genaue Position.

    Du könntest auch auf dem Seil in gewissen Abständen Markierungen anbringen und optisch lesen, so dass du auch unterwegs Kalibrierungen der Position vornehmen kannst.

    Die Erkennung des Klötzchens mit einer Kamera wird das Schwierigste sein. Damit kenn ich mich leider auch gar nicht aus. Wie einfach ist die Erkennung der Klötzchen. Sind es schwarze Klötze auf weißem Hintergrund, dann gehts sicher leichter, als bei verschiedenfarbigen Klötzchen auf einem Perserteppich.

    Die Position soll an den PC übertragen werden - das kannst du per WLAN machen (Sichwort: Socket) - der Pi3 hat eins eingebaut. Wird das Gerät auch vom PC gesteuert - nimm das Klötzchen dort und bringe es nach da...?

    Was meinst du mit Sensoren zur Erkennung des Ziels? Das Gerät sollte immer wissen, wo es ist. Oder willst du bestimmte Zielpunkte markieren und mit Kamera oder Sensoren erkennen lassen?

    Was ist denn der tiefere Zweck der Klötzchenschieberei? Gibt es nur ein Klötzchen oder mehrere?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Danke für deine Antwort. Ja genau ist ein Uni Projekt. Zum Greifen des Würfels haben wir bereits diverse Ideen, aber noch keine konkretisiert. Genau wir werden eine Art Seilwinde machen. Um das ganze in Bewegung zu setzten haben wir auch an Schrittmotoren gedacht, der ganze Parkour muss möglichst schnell absolviert werden, unter 4min. je schneller desto besser. Das Seil ist freihängend über ca. 3m, es läuft bergau, wie bei einer Seilbahn. Es ist straff gespannt mit 15kg, wird dann aber zwangsläufig durchhängen wenn wir unser Gerät montieren. Den Antrieb haben wir noch nicht vollständig geklärt aber ich denke wir werden das Seil zwischen Rädern durchlaufen lassen. Am Seil dürfen wir nichts anbringen. Genau an das mit dem Endschalter haben wir auch gedacht. Ich denke die Objekterkennung bringen wir hin. Das Gerät muss autonom laufen, d.h. es darf nur am Anfang einen Startbefehl erhalten, vom PC, App auf Smartphone oder Startknopf am Gerät selber, danach muss es alles selber machen. Die Zielplatte zum Abstellen des Holzklotzes ist schwarz, weiss markiert, wie eine Zielscheibe. Es gibt nur einen Holzklotz.

    Es war mehr mal eine generelle Frage ob wir das ganze mit dem Raspberry realisieren können, da wir keine Erfahrungen mit dem Teil haben. Ich habe von diversen Seiten gehört, dass es sich lohnt das Raspberry mit einem Arduino oder sonst einem Mikrokontroller zu koppeln. Deswegen meine Frage, da ich nicht sicher war auf was wir uns konzentrieren sollen. Wenn wir alles mit dem Raspberry machen können, wäre hammer. Da die Kommunikation zwischen Raspberry und Arduino entfällt. Was meinst du betreffend Stromversorgung? Raspberry getrennt von Motorenstromversorgung oder alles an einen grossen Akku? Die Motorensteuerung benötigt ja sicherlich noch mehrere Treiber (H-Brücke) oder?

  • Wenn ihr viele GPIO's benötigt und nicht nur einfache Digitale, dann macht es IMHO durchaus Sinn einen Arduino zusätzlich zu verwenden, eben weil der viele unterschiedliche Ports mitbringt ebenso wie Hardware-Interrupts die ggf wichtig sein könnten (zB für Rotation Encoder um die zurückgelegte Strecke ermitteln zu können). PWM/Analoge/Digitale I/O's könnte man beim Pi auch mit Port-Expander nachrüsten aber dann brauch man auch wieder selber Platinen etc.

    Ein Arduino kann keine Parallelisierung, dh nur eine Aufgabe zugleich - ist er mit einer Aufgabe beschäftigt kann er gleichzeitig nichts anderes ausführen/verarbeiten.

    Viel wichtiger wird aber die Frage nach: Welches Pi & Arduino Model und wie versorgt ihr das Konstrukt mit ausreichend Strom?


    PS: Bitte drück hin und wieder mal Enter und fang einen neuen Absatz an - ein riesen Klumpen zusammenhängender Text ließt sich schwieriger....

  • Wenn das mit der Bilderkennung nicht wäre, würde ich eher eine Microcontroller (Arduino, ESP8266,...) ohne Raspberry in Erwägung ziehen. Dieses Bilderkennungsteil stelle ich mir am Raspberry aber auch nicht so prickelnd vor (mangels Erfahrung). Gibt es andere vielversprechende Lösungen (z.B. Farbsensor im Greifer).

    Kann der Greifer in konstanter Höhe über den Boden bleiben bis zum Holzblock oder sind da auch Hindernisse die man umgehen müsste (rauf/runter wäre Zeitverzug). Wenn ja wäre das ein Zeitgewinn, da man nicht runter fahren muss. Oder könnte ein farbiger Laserpointer und ein (Fokussierter) Farbsensor eine gute alternative Erkennung sein? Die "Vermessung" wird ja eh nur in der Laufrichtung benötigt. Vermessen könnte man beim drüber hinweg fahren - und danach entsprechend zurück...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Hauptproblem sind sicher das Gewicht und die Stromversorgung, insbesondere, wenn das Ziel eine möglichst hohe Geschwindigkeit ist.

    Andererseits muss das Ganze ja mit einer Batterie nur maximal 4 Minuten laufen. Also im Zweifel eine Stromquelle mit hoher Spannung und gerade so ausreichender Kapazität.

    Der Pi braucht mit Kamera vielleicht +/- 1 A bei 5 V sind das bei 5 Minuten = 83 mAh

    Wenn das gesamte Gerät samt Last 1 Kg wiegt und über eine Höhe von 1 Meter transportiert werden soll. müsst ihr eine Arbeit von 10 Nm = 10 Ws verrichten. Verteilt auf eine Zeit von 4 Minuten ist das eine Leistung von 0,04 Watt. Bei 5 V entspricht das 8 mA, also gar nicht so viel. Die Energie sind 8 mA * 1/15 h = ~ 0,5 mAh. Das ist alles im Vergleich zum Strombedarf des Pi relativ vernachlässigbar. Selbst wenn für Treiber, Motoren usw. noch Verluste eingerechnet werden, Sicherheitsfaktor und der Wunsch, es in 1-2 Minuten zu schaffen, kommen insgesamt vielleicht 100 oder 150 mAh raus.

    Allerdings entsprechen 150 mAh in 4 Minuten einem Strom von 2,25 A - eine 5V-Batterie würde das nicht schaffen. Bleibt also nur eine Stromversorgung mit höherer Spannung. Damit könnte man auch leistungsstärkere Motoren anschließen. Mit 12V Li-Ion-Akkus sollte man in die Größenordnung kommen. Für den Pi braucht man dann einen Steppdown-Regler auf 5V.

    Um Energie zu sparen bietet sich ein Pi A/B oder Zero an, der braucht weniger Strom als ein Pi3.

    Großartige Parallelverarbeitung fällt ja eigentlich nicht an. Bestenfalls die Bilderkennung während der Fahrt. Insofern könnte ein Arduino den Antriebsmotor autonom steuern, während der Pi dann bei laufender Fahrt die Bilder analysiert und bei Bedarf Steuersignale an den Arduino gibt. Die Seilwinde zum anheben der Last könnte der Pi auch selbst steuern.

    Entscheidend ist die Auswahl der Komponenten mit optimalem Verhältnis aus Leistung und Gewicht - insbesondere Batterie und Motoren.

    Das Schwierigste wird aber sicher die (schnelle) Bilderkennung. Gibts mehr Infos darüber, was genau erkannt werden soll? In der Tat wäre eine Erkennung mit Abstandssensoren oder ähnlichem sicher viel einfacher als eine Bildauswertung.

    Ist das Ganze eigentlich ein Wettbewerb? Gehts drum, schneller zu sein als ein anderes Team?

    Bin sehr gespannt, wie Euer Konzept aussehen wird.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Danke euch allen für die raschen und sehr umfassenden Antworten.

    Ja, es gibt mehrere Teams die dann gegeneinander antreten. Je schneller und je präziser die Last (der Holzwürfel) auf der Zielplatte abgelegt wird desto besser. Wir sind erst in der Konzeptionsphase und sind mögliche Lösungsansätze am suchen. Es wird noch ein wenig dauern bis wir das Teil bauen. Die meisten von uns haben noch nie ein solch grosses Projekt realisiert, daher bin ich mich im Internet und in Foren am informieren.

    Ich denke auch, dass die Hauptprobleme das Gewicht, die Stromversorgung und die Erkennung der Last und der Zielplatte sind. Wir haben uns auch überlegt, dass das Arduino den Antriebsmotor steuern kann. Und ja ich denke, das ganze wird recht sequentiell ablaufen, sprich: Anfahren, Halten, Last aufnehmen, Weiterfahren...u.s.w. einfach die Bilderkennung oder wenn möglich die Erkennung mit Sensoren wird parallel ablaufen.

    Aber dann wären wir mit einem Pi und einem Arduino auf keinem schlechten Weg. Und ein Arduino kann wirklich nur eine Sache machen, nichts parallel? Ich habe von anderen Teams gehört, dass sie versuchen das Pi mit einem Freedom-Board zu koppeln. Kennt sich jemand damit aus? Ist ja eigentlich auch ein Mikrocontroller Board, evtl. etwas komplexer als das Arduino.

    Nachdem die Last aufgenommen wurde, müssen ihre Koordinaten laufend ersichtlich sein. Sprich höhe ab Boden und Abstand zu Ziel oder Start müssen übertragen werden. Das stellt uns auch noch vor einige Herausforderungen. Den Abstand vom Start könnte man doch über die Position des Schrittmotors des Antriebes machen, falls dieser nicht durchdreht. Höhe über Boden wird etwas schwieriger, da unterwegs Hindernisse im Weg sind, die eine Abstandsmessung nach unten beeinflussen könnten.

    Ich halte euch gerne auf dem laufenden, da nun laufend weitere Fragen auftauchen. Sobald wir uns auf 2-3 Lösungsansätze geeinigt haben, werden wir Teilmodule realisieren und Tests durchführen.

  • Hallo!

    Es wäre natürlich interessant, die genaue Aufgabenstellung mit allen Vorgaben und Einschränkungen zu kennen. Wenn ich das richtig verstehe, ist eine Kamera nicht zwingend. Dann würde ich auch keine verwenden. Wenn man geschickt an die Sache ran geht, kann man es sicher auch ohne RasPi nur mit µC machen. Bei entsprechender Programmierung kann der natürlich auch parallel was machen. Aber u. U. ist es einfacher, für bestimmte Aufgaben jeweils eigene µC zu verwenden.

    Das Höhenprofil kann man mit einem Laserentfernungsmesser ermitteln (Triangulation mit Laser Reflexlichtschranke). Das könnte ein µC permanent messen.

    Die Position geht wahrscheinlich am einfachsten über den Schrittmotor.

    Die Hubhöhe der Last kann man ebenfalls über den Motor ermitteln, der sie anhebt.

    µC haben der Vorteil, dass sie wenig Strom brauchen und klein sind. Außerdem kann man die Aufgaben gut verteilen, so dass gegenseitige Beeinflussungen reduziert werden.

    Welche Vorgaben gibts denn zur Erkennung der Objekte und des Zielpunktes? Sind die Positionen fix oder muss eine echte Erkennung stattfinden? Welche Art Erkennung/Markierung ist erlaubt?

    Wie ist die Aufnahme des Objekts möglich - wäre ein Elektromagnet zulässig? Wahrscheinlich braucht das aber zu viel Energie... ich tippe 4-5 Watt wird man da rechnen müssen. Geht wieder aufs Gewicht. Was habt ihr da für Ideen?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Und ein Arduino kann wirklich nur eine Sache machen, nichts parallel?

    Es gibt einen gewaltigen Unterschied zwischen "mehreren Sachen" und "Parallel".

    Natürlich kann sich der Arduino um mehrere Sachen kümmern aber nicht gleichzeitig/parallel um unterschiedliches. Wenn man zB eine Schleife zum steuern von Motoren nutzt, die erst unterbrochen wird wenn ein Endschalter oder bestimmter Wert erreicht wird, kann parallel dazu nicht auch noch ein Sensor ausgelesen werden.

    Natürlich gibt es auch Möglichkeiten eine art Scheduler einzusetzen, wodurch dann schnelle abwechselnde Operationen möglich werden - aber eben keine gleichzeitige/parallele Ausführung.

    Ist der Arduino mit einer Operation beschäftigt wird alles andere blockiert. Erst wenn die Operation beendet wurde kann etwas anderes verarbeitet werden.

    Es gibt unterschiedliche Arduino Modelle - du kannst auch mehrere verwenden.

  • ...

    Nachdem die Last aufgenommen wurde, müssen ihre Koordinaten laufend ersichtlich sein. Sprich höhe ab Boden und Abstand zu Ziel oder Start müssen übertragen werden. Das stellt uns auch noch vor einige Herausforderungen. Den Abstand vom Start könnte man doch über die Position des Schrittmotors des Antriebes machen, falls dieser nicht durchdreht. Höhe über Boden wird etwas schwieriger, da unterwegs Hindernisse im Weg sind, die eine Abstandsmessung nach unten beeinflussen könnten.

    ...

    Nur so Denkansätze:

    Ihr wisst über den Drehwinkel und den Radius der Winde ziemlich genau wo ihr seit. Das könnte mit einem Schrittmotor erfolgen. Falls ein DC Motor eingesetzt wird mit einem Drehwinkelgeber.

    Falls das mit Drehwinkel nicht funktionieren sollte (z.B. wegen Genauigkeit) das Seil schwarz/weiß markieren und mit Sensor (z.B. Reflexlichtschranke) auswerten.

    Falls Ihr also alle Parameter vom Seil kennt (Spannung des Seils, Gewicht eures Gefährts,...) müsstet Ihr die Höhe der Kabine auch berechnen können. Eventuell könnt Ihr euch eine Tabelle (Laufweg /Kabinenhöhe)erstellen, falls Ihr das vorher unter Echtbedingungen ausmessen dürft.

    Vielleicht könnte auch der Luftdruckunterschied für die "Höhenbestimmung" genügen?

    Eine Entfernungsmessung zur Decke (die müsste ja gerade sein) ist zwar etwas unfair/unrealistisch könnte aber klappen.

    Da Ihr ja eine Kommunikation zur "Bodenstation" habt, könntet Ihr die Entfernung durch Laufzeitunterschied eines Schallsignals ermitteln. Wenn Ihr aus zwei Positionen "peilen" dürft, könnt Ihr die Position berechnen.

    Vielleicht war was dabei was euch weiter hilft (würde mich freuen)...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Gegenfrage :

    Muss ein raspberry auf dem Gefährt vorhanden sein? Oder kann dieser ausgelagert werden?

    Wenn der RPI nicht auf dem Gefährt sein muss, ESP8266 auf dem auto, dieser sendet per WLAN alle möglichen Daten Ultraschall Abstandssensoren etc an den Pi und der Pi hängt an einer powerbank whatever und wertet die Daten aus. Dann sendet er den Befehl, welcher ausgeführt werden soll an den Pi.

    Das wäre meine erste Idee ;)

    Wenn's brennt 112 hilft weiter!

  • Es gibt einen gewaltigen Unterschied zwischen "mehreren Sachen" und "Parallel".

    stimmt aber,

    Wenn man zB eine Schleife zum steuern von Motoren nutzt, die erst unterbrochen wird wenn ein Endschalter oder bestimmter Wert erreicht wird, kann parallel dazu nicht auch noch ein Sensor ausgelesen werden

    Der Endschalter kann sehr wohl auf einen Interrupt gelegt werden und jederzeit unterbrechen!

    Ein ADC kann frei laufen und nebenbei auch neben einer "Schleife" immer wandeln und es gibt einen Interrupt wenn der fertig mit wandeln ist, es muss nur das Ergbnis innerhalb der "Motorschleife" verarbeitet werden.

    Also so "doof" ist auch ein Arduino nicht, es kommt halt auch ohne Scheduler nur auf geschickte Ausnutzung der Möglichkeiten an!

    Mein Webserver mit dem Pollin NETIO tut genau dieses, die ADC laufen frei mit Interrupt, sämtliche Seriell Abfragen laufen im Interrupt und alles läuft quasi parallel zu dem Hauptprogramm Webserver.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • jar: Natürlich kann man aus einer Schleife heraus andere Funktionen die im Programmcode stehen aufrufen und die werden dann verarbeitet. Natürlich kann man auch aus der einen Schleife heraus andere Eingänge/Ausgänge abfragen/schalten.

    Das funktioniert aber nur wenn innerhalb der aktiven Operation eine entsprechende Abfrage eingebaut ist - wie du ja selber auch gesagt hast. Und das wiederum bedeutet dass der Arduino nicht mehreres gleichzeitig verarbeiten kann - eben das was ich oben aussagte: Es können nicht 2 Schleifen parallel/gleichzeitig verarbeitet werden.

    Ein Arduino kann nicht gleichzeitig eine Schleife verarbeiten und zum Beispiel ein Videosignal senden. Das ginge nur wenn innerhalb der aktiven Schleife eine Verarbeitung eingebaut wäre, die dann aber die Schleife derweil blockiert eben so lange bis der Befehl zum abrufen und versenden des Videosignals beendet ist... Und eben genau das gilt es zu beachten/unterscheiden.

  • jaja,

    ein Arduino macht 16.000.000 Takte pro Sekunde, keine Motorschleife braucht das, es ist also massig Zeit innerhalb einer Motorschleife alles andere zu bearbeiten.

    Delay ist dabei die schlechteste aller Möglichkeiten, denn dann vertrödelt der Arduino nur kostbare Zeit und tut nichts!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Also ich tendiere für zeitkritische Sachen auch zu Arduino & Co. Da läuft im wesentlichen das was ich rein programmiert habe. Ich kann auch Sachen - nennen wir es "Quasi"paralellisieren. Das sehe ich so wie jar. Die dafür gedachten Dinge wie Motor steuern, Schalter abfragen und Analogwerte einlesen machen die Dinger halt zuverlässig und mit relativ wenig Zusatzaufwand. Beim Raspberry kann schon sein, dass das Betriebssystem gerade keine Lust hat gerade meinen Code abzuarbeiten, da es z.B. meint, dass die WLAN Verbindung gerade wichtiger ist...

    Raspberry ist sicherlich der Spezialist für Video und Visualisierung - dafür würde ich ihn auch einsetzen, wenn ich das brauche und nicht anders zufriedenstellend lösen kann (z.B. ein einfaches Alphanumerisches Display am Arduino)...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Beim Raspberry kann schon sein, dass das Betriebssystem gerade keine Lust hat gerade meinen Code abzuarbeiten, da es z.B. meint, dass die WLAN Verbindung gerade wichtiger ist...

    Ne, das stimmt nicht. Wenn das bei Dir mal der Fall war dann lags am Script nicht am Pi.

    ein Arduino macht 16.000.000 Takte pro Sekunde, keine Motorschleife braucht das, es ist also massig Zeit innerhalb einer Motorschleife alles andere zu bearbeiten.

    Delay ist dabei die schlechteste aller Möglichkeiten, denn dann vertrödelt der Arduino nur kostbare Zeit und tut nichts!

    Dabei geht es weniger um die MHz sondern darum was gemacht wird.

    Ein Pi3 kann pro Kern 1.200.000.000.000 Takte Pro Sekunde... Trotzdem kann ein Programm einen Kern derart ausbremsen dass dieser für nichts anderes Zeit/Aufmerksamkeit hat. Gibst du in der Konsole den Befehl find / -name bla ein wird der Befehl ja nicht sofort beendet sondern blockiert deine Konsole so lange bis der Befehl fertig ist, auch wenn der Befehl die CPU kaum auslastet. Mit Delay oder künstlicher Verzögerung hat das auch nichts zu tun.

    Anderes Beispiel:

    Das Programm vom Arduino enthält standardmäßig eine Schleife: loop()

    In dieser Schleife möchte man nun folgendes erledigen:

    - Sobald ein Interrupt ausgelöst wird, drehen sich die Motoren und ein Servo soll auf eine bestimmte Positition drehen, und solange das beschäftigt ist soll der Arduino auch noch auf Serielle Befehle reagieren.

    Wie würdest Du das nun lösen? (Software)

    Normalerweise sieht ein Programmcode quasi so aus:

    Code
    void loop() {
      serialReceive();
      Motors();
      getEncoders();
      PanTilt();
    }


    Das Programm blockiert solange wie es mit "Motors();" beschäftigt ist. Erst wenn "Motors();" fertig und beendet wurde geht es in die nächste Programmzeile und führt "getEncoders();" aus.

    Wie würdet Ihr es lösen sodass mehreres Gleichzeitig ausgeführt wird? Also wie kann gleichzeitig "Motors();" und zur selben Zeit "getEncoders();" ausgeführt werden?

    Im Fall des obigen Beispiels wäre das: Motor und Servo zeitgleich starten und Bewegen.

  • Ich hoffe das artet jetzt nicht aus. Also aus meiner Erfahrung lässt sich das von Dir genannte Beispiel zufriedenstellend lösen. Nehme an, Du meinst Schrittmotore, sonst wär's na noch einfacher. Ich starte einen Timer, der einen Interrupt auslöst. Dieser ist ein vielfaches bzw. ein Kompromiss beider notwendiger Zeiten. Mittels Zähler entscheide ich, ob ich einen Schritt mache und/oder das Signal für den Schrittmotor (also Pulsweite je nach Position bei Periodendauern 20ms) ändere. Die Hauptschleife (loop) erledigt wiederum das was sonst so anfällt.

    Natürlich können zeitliche Verzögerungen auftreten, wenn z.B. ein anderer wichtiger Interrupt kommt, den ich gerade nicht ignorieren kann - aber das muss man sich ggf. im Vorfeld gut überlegen... Aber ich würde vermutlich den Weg gehen, dass ich den Servo ansteuere - dauert vielleicht 0,5 Sekunden und mich danach um den bzw. die Schrittmotore kümmere. Meist braucht man ja gar nicht so viel parallele Performance. Zur Not: Nimm 2 ;-).

    Und ja, ich kenne mich bezüglich Timingfähigkeit am Pi nicht so gut aus wie auf einem Microcontroller.

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!