Beiträge von Gnatz

    Einen Schwimmerschalter kann man auch verwenden, wenn man den Schwimmer über einen Hebel auf eine Erfassung überträgt und den Winkel misst. Das kann - mit Nachteilen bei der Zuverlässigkeit - über ein Poti erfolgen oder optisch über eine Scheibe, die mit einem Gray-Code codiert ist. Mit dieser Scheibe kann man jederzeit den Winkel ablesen. (Infos zum Gray-Code über Wikipedia oder in diversen Foren - vermutlich auch hier. ??)

    Ich hatte bei meinem Vorschlag mehrere Sensorprinzipien gegeneinander abgewogen.
    Bei Ultraschall ist die Messung (Schallgeschwindigkeit) temperaturabhängig und viel Sensoren können auf Dauer eine feuchte Umgebung nicht ab.

    Kapazitive Messungen gehen prinzipbedingt nur mit Wechselspannung und die "Kondensatorflächen" müssen vom Wasser getrennt sein, damit sie nicht korrodieren.

    Schwimmer mit Abgriff durch ein Potentiometer sind der Klassiker (bewährt für Prüfung der Tankfüllung oder dem Stand des Scheibenwaschwassers). Allerdings müsste man da schon einen solchen industriellen Sensor nehmen, bei einem Selbstbau wird es schwierig ein Poti zu bekommen, das in der feuchten Umgebung dauerhaft funktioniert.

    Radarsensoren sind für die Aufgabe gut geeignet, aber schwer zu bekommen und teuer.

    So war ich auf die Druckmessung am Boden des Gefäßes mit einem dünnen (6 bis 9 mm Durchmesser) PVC-Scblauch. Dieser wird am Beginn der Messung leer geblasen, womit auch Schmutz entfernt wird. Dann wird die Luftzufuhr dicht abgeschlossen und der Druck im Schlauch mit einem Differenzdrucksensor (der Schwankungen des Luftdrucks berücksichtigt) gemessen. Dann ist der gemessene Druck im Schlauch ein Maß für die Füllhöhe. Es geht sogar noch einfacher: Auf dem Boden wird ein Schlauch von einem größeren Reifen so befestigt, dass er nicht aufsteigen kann (Abdeckung duch Maschendraht o.ä.). An diesen wird der dünne Schlauch (direkt am Ventilstutzen, aber ohne Ventil) angeschlossen. Jetzt wird der Schlauch schlaff mit Luft gefüllt ("schlaff", damit keine Wandspannung Druck im Reifeninneren erzeugt). Nun steckt man den Schlauch auf den Differenzdrucksensor und bekommt einen der Wasserhöhe entsprechenden Druck. Solange noch Luft im Reifen ist, funktioniert die Messung, was bei guter Abdichtung der Verbindungen jahrelang der Fall sein kann. Erst wenn der Reifen durch Leckagen mal leer ist, muss man wieder Luft nachfüllen.

    Ein Arbeitskollege hat so den Füllstand einer Zisterne lange Zeit überwacht - ganz ohne Elektronik, nur mit einem mechanischen Differenzdruckmesser. Er war jedenfalls zufrieden.

    Der Raspberry ist halt mehr ein Rechner als ein Controller. Er kann Bilder aufnehmen und verarbeiten, größere Datenmengen bearbeiten und analysieren. Er hat zwar auch ein paar I/O- Pins und kennt etliche Schnittstellenprotokolle, aber auf der sicheren Seite ist da nur jemand, der entweder vorgefertigte und geprüfte Baugruppen anschließt oder sich mit Hardwareschaltungstechnik auskennt. Schon wenn man einen Port "gleichzeitig" bidirektional nutzen will, wird es für Leute mit weniger Hardwarekenntnis schwieriger und erst recht, wenn Pegelwandler für andere Betriebsspannungen benötigt werden. An der Stelle ist der Arduino flexibler und besser geeignet, der dafür von der Programmierbarkeit her mehr Einschränkungen hat, allein weil die Programme ins Flash gebrannt werden müssen und nicht "eben mal" über Schnittstellen nachgeladen werden können.

    Ich arbeite mit beiden Systemen und entscheide mich abhängig von meiner Anwendung, wen ich jeweils nehme. Und wenn es sehr hardwarenah und zeitkritisch wird, greife ich zu meinen alten 8051-Entwicklerboards, die ich dann in Assembler programmiere. Da kann ich Zeiten dann mikrosekundengenau realisieren. Der Ardiuno kann zwar auch in Assembler programmiert werden, aber der Aufwand, den ich da betreiben müsste, ist ungleich höher. Und beim Raspberry ist das nur noch für eingefleischte Spezialisten möglich.

    Wenn Du einen Sensor verwendest, bei dem "tatsächlich" Gleichstrom fließt, baust Du eine Elektrolyse Anlage. Dabei reagieren die jeweiligen Elektroden mit dem Elektrolyten.

    Eine gute Methode scheint die Füllstandseemittlung mittels kapazitiver Messung zu sein.

    Hier werden verschiedene Sensoren besprochen, mir scheint da sind ganz brauchbare dabei...

    Der Hinweis ist wichtig. Messungen sollten immer mit Wechselstrom erfolgen. Dann kann man die Flächen auch von der Flüssigkeit durch einen dauerhaften Lack isolieren. Bedenken muss man aber, dass sich die Dielektrizitätskonstante durch Schmutz und im Wasser gelöste Salze stark verändern kann. Wenn die Flüssigkeit gut leitend ist, kann man das sogar nutzen. Dann bringt man auf die Kondensatorplatten ein wasserresistentes Dielektrikum an und ordnet die Platten in etwas (wenig) Abstand voneinander an. Wo das Wasser die Flächen bedeckt wirkt das so, als wäre der Abstand hier Null und beim Rest des Kondensators bleibt der Abstand elektrisch wirksam. So hängt es wirklich vom Medium ab, welche Methode auf Dauer die besten Erfolge bringt.

    Es gibt viele Verfahren, Füllstände zu messen. Am einfachsten scheint mir, den Druck am Boden des Gefäßes zu messen - genauer die Differenz zum gerade herrschenden Luftdruck. Ein sehr aufwändiger Aufbau ist hier beschrieben:

    https://www.mikrocontroller.net/topic/499819#new

    Es sind aber große Vereinfachungen möglich. Ein dünner Kunststoffschlauch wird am Boden des Gefäßes so befestigt, dass er sich nicht lösen kann. Das Ende führt an einen Differenzdruckmesser, dessen zweiter Eingang den Luftdruck misst. Mit einem Umsteuerhahn wird an den Schlauch auch eine Luftpumpe angeschlossen. Zuerst wird soviel Luft in den Schlauch gepumpt, dass alles Wasser daraus verdrängt wird. Dann wird der Hahn so umgesteuert, dass der Schlauch an den Differenzdrucksensor führt. Nun drückt das Wasser in den Schlauch und drückt die darin enthaltene Luft soweit zusammen, dass im Schlauch der gleiche Druck wie am Boden des Gefäßes herrscht. Wichtig ist, dass der Schlauch im Wasser so lang ist, dass das Wasser dabei nicht im Schlauch nach oben steigt, sondern nur soviel Wasser in den Schlauch dringt wie für das Zusammendrücken der Luft nötig ist. (Der Schlauch muss also am Boden des Gefäßes eine genügend lange Spirale bilden, die ganz leicht ansteigt, damit die Luft, die zusammengedrückt werden soll, nicht mehr herausperlt. Wenn man das richtig macht, kann man dauerhaft den Wasserstand überwachen. Anregungen und Erläuterungen sind im Bericht oben enthalten.

    In meinem Beitrag hatte ich - wegen der dabei nötigen Eingangsspannung - Elkos statt SuperCaps vorgesehen. SuperCaps halten eine gewisse kleine Spannung relativ konstant über größere Zeit, aber man erhält dann kein Signal, dass die Versorgung ausgefallen ist und jetzt der Cap einspringt.

    Der Wegfall der Versorgung und damit das Absinken der Spannung am Elko muss sehr früh erkannt werden, damit der Prozessor noch Zeit hat, die laufenden Vorgänge zu beenden und das System herunterzufahren. Theoretisch könnte man den Watchdog für die Überwachung missbrauchen. Aber dann muss er sehr oft getriggert werden und das kostet Systemleistung. Besser ist, die Überwachung mit einem externen Komperator durchzuführen, der einen nicht maskierbaren Interrupt auslöst oder man fragt die Spannung mit einem AD-Wandler ab. Es gibt da Exemplare, bei denen man einen Schwellwert eingeben kann. Beim Erreichen des Schwellwertes löst der Baustein einen Alarm aus. Es gibt auch Bausteine für die Erzeugung von Prozessorresetsignalen mit "power good" Ausgang. Auch die lassen sich dazu verwenden.

    Generell benötigen Sensoren, welche die Temperatur des Körpers erfassen, eine möglichst große Temperaturdifferenz zwischen dem Körper und der Umgebung. Deshalb wird bei (militärischen) Nachtsichtgeräten das Sensorelement häufig gekühlt.

    PIR sind prinzipbedingt etwas langsamer als schnelle Infrarotdioden, ermöglichen aber größere Erfassungsbereiche.

    In der Firma haben wir die Geräte mit einem Schaltregler versorgt, wobei dessen Eingangsspannung deutlich über der Ausgangsspannung lag. Außerdem hatten wir am Eingang einen unüblich großen Elko (über 2000 Mikrofarad). Die Spannung über dem Elko haben wir überwacht (entweder über einen vorhandenen Analogeingang oder über einen Komperator). Sank nun die Eingangsspannung unter einen vordefinierten Wert, fuhr der Prozessor alles herunter und überwachte dann aber weiter den Eingangspin. Der Schaltregler arbeitete dann noch weiter, solange die Spannung am Elko ausreichte. Ging die Spannung am Elko weiter runter, ging etwas später auch der Prozessor wegen Unterspannung aus. War das Unterschreiten der ersten (Alarm-)Schwelle aber nur kurzzeitig und die Spannung am Elko stieg wieder auf die normale Betriebsspannung bevor der Prozessor ausgegangen war, startete der Prozessor in einer Art Softwarereset alles wieder neu.

    Bei diesen Gegebenheiten ist ein Magnetschalter wirklich ideal. Das können einmal Reedkontakte plus der schon erwähnte Neodymmagnet sein. Es gehen aber auch induktive Sensoren, die ein Signal abgeben, wenn sich eine Metallfläche nähert.

    Da die Ladegarage sicherlich Dauerstrom hat, spielt der - im Vergleich zum Rasenmäher ohnehin geringe - Energiebedarf der Sensoren vermutlich eine untergeordnete Rolle. Der Abstand zwischen Rasenmäher und Steinen ist ja nun wirklich sehr klein. Und wenn man den RFID Sender bei den Steinen anbringt, ist auch da der Abstand kein Problem mehr.

    Ein Problem könnte der Führungsdraht des Rasenmähers sein. Dieser bekommt bei den mir bekannten Rasenmähern in kurzen Zeitabständen einen kräftigen Stromimpuls, dessen Magnetfeld von der Spule des Rasenmähers aufgenommen wird. Das Störspektrum ist so hoch, dass mich wundert, wie diese Steuerungen die Zulassung erreicht haben. Jedenfalls legen die den ganzen Mittel- und Langwellenbereich von älteren Kofferradios lahm. (Klar: Niemand nutzt diese Bänder mehr, aber "Freiwild" sind sie dennoch nicht.)

    Niederfrequenz RFID (125 bis 134 kHz) hat nur etwa 30 cm Reichweite. Mittelfrequenz RFID im Bereich 10 bis 15 MHz (typische Frequenz 13,56 MHz) hat eine Reichweite bis 3 m. Eine Katze mit RFID kann das Tor nicht öffnen, da die Codes individuell ist. Deshalb kann nur die eigene Katze die Klappe öffnen, Nachbarskatze kann es nicht, selbst wenn sie auch einen RFID-Chip trägt. Die Ohrmarken von Tieren sind auch RFID-Transponder. Und bei Kühen können damit die Fütterungs- und Meldautomaten jede Kuh einzeln erkennen.

    Ultraschall und Lichtschranken können dagegen nicht erkennen, ob es der Roboter ist, der das Signal auslöst. Da hätte die streunende Katze bessere Chancen, in die Garage zu kommen.

    Bilderkennung ist durchaus geeignet, der Aufwand an Software - und damit auch an Stromverbrauch - ist hoch. Und nachts muss entweder der Bereich dauerhaft hell genug ausgeleuchtet sein (kann Ärger mit Nachbarn geben) oder die Kamera muss dann auf Infrarot umschalten, ebenso die Bilderkennung, da ein Infrarotbild "anders" aussieht. Probleme gibt es auch, wenn der Roboter bei Regen Farben und Licht anders reflektiert als bei Trockenheit. Da muss die Erkennung fehlertolerant angelernt werden. (Zum Glück muss im Winter der Rasen nicht gemäht werden. Ein Roboter mit Schneehaube würde die Bilderkennung endgültig überfordern.)

    Was also der am besten geeignete Sensortyp ist, hängt sehr stark von weiteren Randbedingungen ab, die wir hier nicht kennen. Da müsste Martin ein paar mehr Details liefern und gezielter nachfragen.

    Das müsste relativ einfach (ohne große Haltekonstruktionen) mit RFID gehen ähnlich einer Katzenklappe, die nur für die eigene Katze geöffnet wird.
    Lichtschranken sind auch möglich, benötigen aber Halterungen für die Ausrichtung und verschmutzen "irgendwann".
    Induktionsschleifen, über die der Roboter fährt sind immer in Gefahr, mit "gemäht" zu werden.
    Ultraschall-Abstandssensoren gingen auch. Da reicht dann ein Sensor und die Überwachung der Enternung erkennt die Annäherung.
    Taster und Radarsensoren finde ich weniger geeignet - ist aber nur "Bauchgefühl", das ich rational nicht recht begründen kann.

    Bevor ich jetzt auf andere empfohlene Sende- / Empfangsgerätschaften (Murata) zugreife (vielen Dank für das heraussuchen von Komponenten) wollte ich verstehen warum ich kein Signal an der Empfangsstufe abgreifen kann. Sender und Empfänger haben einen Abstand von max. 20cm und da müsste doch schon ein "kräftiges" Signal am Empfänger ankommen. Auch sollte, durch das heraustrennen von U1 und U3 auch keine Abhängigkeit mehr bestehen von irgendeiner codierten Aussendung. Mikrofon und mehrere Verstärkerstufen - da müsste doch "zum Teufel" was angezeigt werden :conf: ? Der Comparator sollte dann ein stabiles Rechtecksignal erzeugen, oder?

    Jetzt komme ich ins Schwimmen. Beim gekauften Ultraschallmodul sind 2 Schaltungsteile auf dem Board. Eine Sendeschaltung erzeugt das Signal, das der Transmitter dann ausgibt. Das Signal des Receivers wird dann in einer Empfängerschaltung "aufbereitet" und erst daraus entsteht das Rechtecksignal nach dem Motto "Empfang / kein Empfang". Auch wenn man den Transmitter und den Empfängerbaustein von der Platine ablötet und über ein Kabel mit der Platine verbindet, bleibt die Funktion dieser Schaltungsteile (hoffentlich) weiter erhalten. Aber schon da wird es schwierig. Bei einem Modul, bei dem Transmitter und Empfängersensor auf einer Platine fest verbaut sind, kann ich die Sende- und die Empfangsschaltung auch in einem IC zusammenfassen - und ich würde das auch so machen. Dann ist die Frage, wie das Signal ausgewertet wird. Man kann es so machen, dass aus jedem empfangenen Ultraschallsignal ein Ausgangsimpuls abgeleitet wird. Dann ist die Messung natürlich auch sehr empfindlich gegenüber Störungen. Besser ist, wenn der Empfänger erkennen kann, dass genau sein Signal empfangen wird. Wenn Sende- und Empfangsschaltung auf einem Board untergebracht sind, ist das sehr einfach, da beide Signale dort vorhanden sind. Da wäre es blöd, diese Möglichkeit nicht auszunutzen.

    Sowohl der Sende- als auch der Empfangssensor haben als Piezoscheiben einen sehr engen Übertragungsbereich. Sie sind meist auf nur eine Frequenz ausgelegt. Gibt man auf den Sendebaustein ein Rechtecksignal, ist der ausgesendete Schall schon sinusförmig verschliffen. Und aus dem Empfänger kommt meist schon fast ein reiner Sinus. Aber die Verluste der Strecke (auch wenn sie klein ist) sind recht groß. Die Anpassung der Bausteine an den aktustischen Wellenwiderstand der Luft ist trotz aller Maßnahmen nicht gut - nicht umsonst sind unsere Ohren mit Ohrmuschel, Gehörgang und Schnecke so kompliziert aufgebaut, um diese Anpassung etwas zu verbessern. So ist das elektrische Signal, das der reine Empfängerbaustein liefert, recht klein und verrauscht. Daraus muss die Empfängerschaltung nun ein brauchbares Signal erzeugen. Nur ein Komperator würde - wenn überhaupt - keinen Impuls sondern ein 40 kHz Rechtecksignal ausgeben.

    Wenn man also den Sender vom Empfänger trennen will (oder muss, weil man eine Richtungserkennung haben will), muss man sich zwingend mit der Schaltungstechnik auseinandersetzen. Sonst sind Misserfolge garantiert. Noch einen Kommentar zu den folgenden Aussagen von __deets__:

    "Also um Dir den den Zahn mal gleich zu ziehen - einfach wird das nicht. Egal mit welcher Technik." Dem kann ich nur voll zustimmen.

    "Das herausrechnen der eigenen Bewegung aus Sensordaten ist Standard. ZB mit lidar, der ja auch eine gewisse abtastzeit hat, würde man sonst wenig anfangen können."

    Klar ist das Herausrechnen der eigenen Bewegung bei Lidar usw. notwendig und üblich. Einfach ist es nicht und man benötigt dazu auch weitere Informationen (z.B. durch andere Sensoren oder durch Auswertung von Radimpulsen). Erfasst man aber nur Entfernung und Richtung, kann man sich den Aufwand sparen. Dann vereinfacht sich das Ganze auf die Teile: Entfernung wird größer / kleiner -> Geschwindigkeit verringern / erhöhen und Richtung zur verfolgten Person ändert sich nach rechts / links -> Roboter nach rechts / links steuern. Das kann bei ungeschickter Parametrierung natürlich dazu führen, dass der Roboter erst einmal in Schlangenlinien hinterherfährt, aber das kann man dann im Programm optimieren. (Auch der Mensch steht nicht statisch, sondern "pendelt" immer ein wenig. Die Ausgleichbewegung ist nur so klein, dass man sie nicht wahrnimmt.)

    Ich denke nicht, dass man mit dem US zwingend über laufzeit arbeiten muss. Man kann durch active sensing (also Sensor oder Roboter bewegen) auch ermitteln, in welcher Richtung das Herrchen oder Frauchen unterwegs ist.

    Das ist soweit richtig. Das Problem dabei ist, dass die durch die Bewegung hervorgerufene Änderung entweder von der Bewegung der Person oder der Bewegung des Roboters oder dadurch, dass beide sich bewegen hervorgerufen wird. Man muss also die Bewegung des Roboters erfassen (können) und die dann herausrechnen um die Bewegung der verfolgten Person zu erkennen und ihr dann zu folgen. Das halte ich für noch schwieriger als die bisher von mir dargestellte Lösung. Aber vielleicht gibt es dafür schon fertige Lösungen, die ich nur nicht kenne - obwohl ich mir das nicht vorstellen kann. Ich hoffe nur, dass wir "bug-reporter" nun nicht völlig verwirren, zumal ich nicht weiß, auf welchen Gebieten er über Erfahrungen verfügt und wie gut und ausbaufähig diese sind. Da müssen wir aus seinen Reaktionen schließen, was zu ihm passt und was eher nicht. Interessant ist das Projekt aber auf jeden Fall.

    Für eine "selbstgebaute" Funkverbindung müssen natürlich die gesetzlichen Rahmenbedingungen genau eingehalten werden. Diese Information wird von der Bundesnetzagentur im sogenannten "Frequenzplan" veröffentlicht, z.B. unter:

    https://www.bundesnetzagentur.de/SharedDocs/Dow…icationFile&v=2

    Da man als "Bastler" bei hohen Frequenzen schnell an seine Grenzen stößt, wird man vermutlich auf die tieferen Frequenzen, die beispielsweise mit "Betrieb von Sensoren im Rahmen wissenschaftlicher oder technischer Forschung" (5,003 bis 5,005 MHz) oder (10,003 bis 10,005 MHz) definiert sind. Im Bereich 14,99 bis 15,005 MHz gibt es noch einen Bereich, der für die Übertragung von Normal- und Zeitzeichen zu wissenschaftlichen, technischen und anderen Zwecken" vorgesehen ist. Ob der Markierungsimpuls als "Zeitzeichen" verstanden werden kann, muss per Nachfrage geklärt werden. Auf jeden Fall muss die Sendeleistung extrem klein gehalten werden (schont auch die Batterie), die Frequenz sollte wegen der engen Toleranzen mit einem Quarz stabilisiert und durch einen Schwingkreis von Oberwellen befreit werden (sauberes Sinussignal). Das bedeutet aber auch, dass das Nachlaufen des Roboters nur als Forschungsprojekt (nicht für spätere Serienproduktion) genutzt wird. Und dann gibt es auch noch das "CB"-Band, in dem viele ferngesteuerte Spielzeugautos gesteuert werden. Wenn man die "ausschlachtet", kann man Sender und Empfänger rückgewinnen. Diese aber nicht verändern, damit die Eigenschaften nicht unzulässig verändert werden.

    Der Einwand bezueglich der Kleidung ist ja nicht so relevant, weil es ja im Moment zumindest um eine aktive Quelle geht, statt Reflektion. Egal ob US oder IR.

    Das vereinfacht das Ganze natürlich, allerdings muss dann die verfolgte Person "aktiv" sein, was ich nur vorgesehen hatte, wenn die Person sich identifizieren soll. In diesem vereinfachten Fall sendet die Person den Impuls und mit 2 Mikrofonen wird die Laufzeit (für Entfernung und Richtung) ausgewertet. Der Empfänger muss aber eine Information bekommen, dass der Sender gerade einen Sendeimpuls ausschickt. Das müsste in einer Zeit geschehen, die deutlich unter der Laufzeit des Ultraschallsignals liegt. Das könnte optisch erfolgen, wäre aber zu richtungsempfindlich. Deshalb würde ich ein Funksignal vorziehen - aber kein Datentelegramm, dessen Empfang und Auswertung zu viel Zeit beanspruchen würden. Eventuell ist da ein RFID-Signal schneller als die üblichen Funkmodule.

    Was noch zu lösen ist, wie dann die Laufzeiten mit genügend Auflösung gemessen werden können. Gerade der Raspi unterstützt Echtzeitmessungen nicht sonderlich gut und auch die Dokumentation darüber welche Timer es gibt und wie diese genutzt werden können, fand ich bisher recht dürftig (oder ich habe diese Dokumentation nicht gefunden). Nun habe ich mich mit solchen Fragestellungen bisher nur mit anderen Plattformen erfolgreich beschäftigt. Den Raspi habe ich mehr für "normale" Computeranwendungen genutzt. Da fehlt mir leider die notwendige Erfahrung.

    In dem Dokument:

    https://asset.conrad.com/media10/add/16…-mm-x-71-mm.pdf

    sind noch einige wichtige Hinweise. So steht da, dass Kleidung relativ schlecht reflektiert, was auch für (infrarotes) Licht gilt. Der Sensor hat normalerweise eine Reichweite von 3 bis maximal 5 Meter. Falls man mehr benötigt, muss der Eingangsverstärker eine höhere Verstärkung haben. Damit das sicher geht und er dann nicht auf alle Signale reagiert, sollte es eine schmalbandige Verstärkerschaltung sein, die fast nur 40 kHz- Signale verstärkt. Entsprechende Schaltungen gibt es in großer Zahl im Netz. Solche Schaltungen sollte man aber nicht mehr auf einem Steckbrett aufbauen, sondern mindestens auf einer Lochrasterplatte zusammenlöten.

    Murata weist darauf hin, dass man für die Entfernungsmessung die Temperatur der Luft beachten muss. Das ist hier nicht nötig, da der Abstand des Roboters zur Person nicht sehr eng toleriert sein muss. Für die Richtungserkennung muss die Differenz der Signale aber gut erkennbar sein. Da kann es sein, dass der Anstieg des Empfangssignals nicht genau genug ist. In solch einem Fall bringt man in das Sendesignal eine "Störung" ein. Im einfachsten Fall zählt man die ausgesendeten Schwingungszüge mit einem Zähler (wie z.B. CD4024). Das gesamte Sendesignal sollte nach den Murata Unterlagen etwa 1 ms dauern. 32 Schwingungszüge haben eine Dauer von 0,8 ms, was genau genug sein sollte. Mit dem Zähler zählt man die Impulse und nach 16 Impulsen invertiert man das Signal. Dann sind die Signale eingeschwungen und im Empfangssignal wird vermutlich nur ein kurzer Einbruch auftreten, der detektiert werden kann. Gemessen wird die Zeit vom Beginn der Invertierung bis zum Einbruch im Empfangssignal. Das müsste vermutlich klappen.

    In dem Murata Vorschlag werden die CMOS-Bausteine mit 12 V betrieben. Das ist auch nötig, da sonst die Spannung am Sender und damit die Sendeleistung zu gering wird. Deshalb müssen "normale" CMOS-ICs der 4000-er Serie genommen werden - keine 74HC...., die nur 5 V vertragen. Der Transmitter darf keine Gleichspannung erhalten. Deshalb ist der 0,1 Mikrofarad große Kondensator in Reihe mit dem Transmitter wichtig. (Ähnliches gilt auch für den Empfangsbaustein.) Da die Operationsverstärkerschaltung "normalerweise" mit einer Plus- und einer Minusspannung versorgt werden (oder bei Versorgung mit nur einer Spannung eine "virtuelle Masse" auf halber Speisespannung benötigen, muss man hier ein wenig "tricksen". Wenn man als generelle Versorgungsspannung 12 V nimmt und daraus den Raspi versorgt, wobei der Minuspol der Versorgung das GND-Potential des Raspi ist, müsste man die "virtuelle Masse" für den Operationsverstärker auf 5 oder 6 V Potential legen. Für die Ansteuerung der CMOS-Bausteine müssen dann Pegelwandler die Signale auf 12V anheben. Ich nehme dafür normalerweise einfache NPN-Transistoren in Emitterbasisschaltung mit dem (Kollektor-)Arbeitswiderstand an +12V. (Vorsicht: Diese Stufe invertiert das Signal.) Und auch die Empfangssignale aus den CMOS-Bausteinen müssen wieder auf die Eingangsspannungen des Raspi heruntergesetzt werden. Bei Bedarf kann ich dazu noch ein paar Skizzen liefern. Aber es kann immer etwas dauern, bis ich die Zeit dafür finde. (Ich hoffe, dass meine Erklärungen hier nicht zu lang sind. Notfalls ruhig "meckern", dann fasse ich micht kürzer. Aber wenn ich nicht genau weiß, auf welche Vorkenntnisse ich setzen kann, schreibe ich lieber etwas mehr - halbe Sachen liegen mir nicht.)

    Murata stellt auch viele Ultraschallsensoren her. Wie man die einsetzen kann, ist hier beschrieben:

    https://www.murata.com/-/media/webren…aopn.ashx?la=en

    Den Typ MA40S4S (Sender) und MA40S4R (Empfänger) gibt es zum Beispiel bei Conrad. Da kann man auch ein Datenblatt herunterladen, in dem weitere Schaltungen (für Impulsbetrieb oder kontinuierlichen Betrieb) beschrieben.

    Von einem Modul die Teile abbauen und über Kabel verlagern kann klappen - muss es aber nicht. Bei unabgeschirmten Kabeln können Fremdsignale einstreuen, bei abgeschirmten Kabeln kann die Kapazität stören.

    Und dann habe ich noch einen Sensor gefunden, der sowohl als Sender als auch als Empfänger einsetzbar ist. Dieser heißt USC18T/R-40MPW. Ein genaues Datenblatt habe ich auf die Schnelle noch nicht gefunden und im Moment habe ich leider keine Zeit, mich darum zu kümmern - die Brötchen müssen verdient werden. Es kann also etwas dauern, bis ich mich wieder melde. Aber ich versuche, am Ball zu bleiben.

    Bei Ultraschall (und vom Prinzip her auch bei Infrarot) haben käufliche Module den Nachteil, dass die guten nur "ihr eigenes" Signal auswerten und die schlechten jedes halbwegs passende Signal. Beides ist für diese Anwendung gleichermaßen unpassend. HC-SR04 scheint zu den "guten" Modulen zu gehören. Es sendet einen Impuls und nur wenn es das passende Echo bekommt, gibt es den Empfangsimpuls aus. Damit kann man einen Abstand messen (und wird durch "fremde" Ultraschallsignale nicht gestört), aber schon die Erkennung einer Richtung ist so nicht einfach möglich. Was man für diese Aufgabenstellung braucht sind ein Sender und 2 Mikrofone im Roboter. Das Sendesignal kommt bei den Mikrofonen nur gleichzeitig an, wenn die verfolgte Person mittig zum Roboter steht. Weicht die Person von der Richtung her ab, ist zwischen den Empfangssignalen ein kleiner Zeitunterschied. Aus der Laufzeit kann man die Entfernung und aus dem Zeitunterschied die Richtung herleiten. Damit der Aufbau sein eigenes von fremden Ultraschallsignalen unterscheiden kann, muss entweder die Empfangsfrequenz sehr genau gemessen und mit der Sendefrequenz verglichen werden. (Das macht man früher mit speziellen Bausteinen LM556 oder NE556 oder dem 4046 bzw. 74HC4046 PLL-Baustein plus etwas Zusatzlogik.) Der Frequenzvergleich klappt da recht gut. Alternativ kann man das Sendesignal modulieren und nur, wenn das Empfangssignal die gleiche Modulation hat, wird es "anerkannt". Das wäre also der erste Schritt. Den zeitliche Abstand zwischen den einzelnen Ultraschallimpulsen kann man aus dem Abstand zwischen verfolgter Person und Roboter wie folgt berechnen:

    Maximaler Abstand 3 bis 4 m bedeutet, dass der Schall 6 bis 8 m zurücklegen muss (Hinweg Roboter zur Person plus Rückweg von der Person zum Roboter). Bei einer Schallgeschwindigkeit von 345 m/s (bei etwa 25°C) kann es knapp 25 ms dauern, bis das Echo ankommt. (Man muss ja mit berücksichtigen, dass der Impuls selbst auch eine gewisse Länge hat.) Damit müsste der Abstand zwischen den Impulsen mindestens 30 ms betragen.

    Wenn man nun sicher sein möchte, dass der Roboter der "richtigen" Person folgt, muss diese das Signal ja auch empfangen (und später selbst einen Kennungsimpuls aussenden). Die Person empfängt den Sendeimpuls nach 10 bis 12 ms (Laufzeit für 3 bis 4 m). Dann muss sie warten, bis der Originalimpuls beim Empfänger angekommen ist und erst dann darf sie den Bestätigungsimpuls aussenden. Das könnte zeitlich so aussehen:

    Der Roboter sendet seinen Impuls. Dieser kommt (bei maximalen Abstand zur Person) dort nach etwa 12 ms an, wird reflektiert und erreicht den Roboter nach weiteren 12 ms für den Rückweg. Jetzt könnte auch der Identifikationssender an der Person den Bestätigungimpuls losschicken, der dann nach weiteren 12 ms den Roboter erreicht. Der Roboter empfängt also 24 ms nach Aussenden seines Impulses dessen Echo und etwa 35 ms nach dem Aussenden den Identifikationsimpuls.

    Nun könnte ja das Echo von einer fremden Person ausgelöst sein und der Identifikationsimpuls von der richtigen Person. Um das auszuschließen, muss ein wenig Mathematik her und die Zeit zwischen Empfang des Impulses und Absenden des Bestätigungsimpulses genauer definiert sein. Dann weiß der Roboter dass der Bestätigungimpuls genau um diese festgelegte Zeit nach dem Echo kommen muss, sonst hat er die falsche Person im Visier.

    Der HC-SR04 hat eine Messreichweite von 3 m. Für die maximal zulässige Entfernung zur Person muss also die Verstärkung etwas höher sein, zumal Personen meist Kleidung tragen, die weniger stark reflektiert als glatte Oberflächen. Ich hoffe, dass meine Darstellung nicht zu verwirrend (und entmutigend) war. Aber für solche Aufgabenstellungen kann man nur selten auf "fertige" Hardware und Softwaremodule zurückgreifen. So ganz genau ist die Zeitmessung in C oder Phyton auch nicht. Wenn ich so etwas machen musste, habe ich jedenfalls immer in Assembler arbeiten müssen (damals mit Prozessoren der ATMEL 8051-Familie).

    Wie anfangs erwähnt, Infrarotsignale sind auch nicht einfacher auszuwerten. Und einfach ist die Mustererkennung einer Bildauswertung auch nicht - jedenfalls nicht, wenn man daraus auch noch Steuersignale für die Geschwindigkeit und Richtung des Roboters ableiten will. Dafür lernt man sehr viel und es macht Spaß, wenn zum Schluss alles richtig funktioniert.

    Und wenn sich der Mensch umdreht?

    Und wenn ein anderer Mensch kreuzt oder dazu kommt?

    Das war eigentlich schon erklärt. Wenn der Roboter das "Hindernis", dem er hinterherfahren soll, erkannt hat, schadet es nicht, wenn der Mensch sich umdreht und sein Signal für einige Zeit ausfällt. Dann folgt der Roboter dem erkannten Hindernis, bis dessen Signal wieder (zum Feinabgleich) verfügbar ist. Ohnehin fehlt die Information, in welchem Abstand der Roboter folgen soll. Das ist für die Auswahl der Sensoren wichtig. (Ultraschall über einen Abstand von mehr als 20 m geht kaum noch, das ebenfalls erwähnte GPS mit Übertragung der Koordinaten kann kleine Abstände nicht mehr sicher auflösen.)

    Mit der Entfernung beantwortet sich auch die Frage, ob überhaupt eine andere Person die Verbindung zum Roboter kreuzen kann. Ist eine solche Störung kurz, fährt der Roboter erst einmal so weiter wie vor der Störung und baut die Verbindung wieder auf, sobald die Störung vorbei ist. Nur wenn die Störung zu lange dauert oder der Mensch inzwischen die Richtung gewechselt hat, kann der Wiederaufbau der Verbindung scheitern. Für diese Fälle müssen Strategien in der Software hinterlegt sein, die die Reaktion der Software festlegen. Das gilt auch bei der Navigation über Wärmedetektion. Wenn eine andere (ebenfalls körperwarme) Person die Bahn kreuzt, ändern sich der Abstand zum "verfolgten" Menschen und dessen Bewegungsrichtung. Dann muss der Roboter die bisherige Bewegung des Menschen extrapolieren und die "Störbewegung" herausrechnen. Dauert die Störung zu lange, kann es auch hier sein, dass das Wiederauffinden des Verfolgten nicht mehr klappt. Was der Roboter dann machen soll (stehen bleiben und Alarm auslösen oder was immer....), muss natürlich auch in der Software hinterlegt sein.

    Ich hatte ja vorgeschlagen, Ultraschallsignale auszusenden und die Richtung über die Laufzeitdifferenz zu detektieren. Wenn der Roboter ohnehin Ultraschall zur Hinderniserkennung nutzt, ist das noch einfacher. Dann müssen nur die Impulse des Roboters mitgehört werden und in einer genau definierten Zeit nach dem Suchimpuls ein eigener Impuls gesendet werden. Dazu reicht ein breit abstrahlender Ultraschallsender. Der Roboter erkennt diesen Impuls und dessen Richtung und kann dieses "Hindernis" in seine Hinderniserkennung mit einrechnen.

    Wenn der Roboter immer einem Menschen folgen soll, dessen Körpertemperatur sich deutlich von der Umgebung unterscheidet, könnte man die Verfolgung auch über eine Infrarotkamera mit Mustererkennung machen. Das ist zwar auf der Seite des Roboters erheblich aufwändiger, aber dann muss die Person, der der Roboter folgen soll, keinerlei Vorkehrungen treffen, um sich dem Roboter kenntlich zu machen.