Perimeter-Schleife: Unterschied zwischen den Versionen

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche
(Zusammenfassung)
(Einstellen der Sendeleistung)
 
(104 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Zusammenfassung=
 
=Zusammenfassung=
Eine Begrenzungsschleife (oder Perimeterdraht) ist eine Art 'elektronischer Zaun': er veranlaßt den ArduMower zum Stoppen / Umkehren sobald die Grenze erreicht ist. Nicht in jeder Umgebung ist eine Begrenzungsschleife notwendig - Rasensensoren könnten eine Alternative sein.
+
Eine Begrenzungsschleife (oder Perimeterdraht) ist eine Art 'elektronischer Zaun': er veranlaßt den ArduMower zum Stoppen / Umkehren sobald die Grenze erreicht ist. Nicht in jeder Umgebung ist eine Begrenzungsschleife notwendig.
  
 
Das Prinzip: durch den im Garten verlegten Schleifendraht wird ein Signal gesendet, das der Ardumower ausgewertet. Gebraucht werden ein Sender zur Erzeugung und Übergabe des Signals an die Schleife und ein Empfänger zur Signalauswertung im ArduMower.
 
Das Prinzip: durch den im Garten verlegten Schleifendraht wird ein Signal gesendet, das der Ardumower ausgewertet. Gebraucht werden ein Sender zur Erzeugung und Übergabe des Signals an die Schleife und ein Empfänger zur Signalauswertung im ArduMower.
  
Und so wird das Signal empfangen: eine (oder zwei) Empfangsspulen liefern ein Signal, dessen Stärke je nach Abstand zwischen Schleifendraht und Empfangsspule(n) variiert. Interessanterweise wechselt das Signal in dem Moment seine Polarität, wo der ArduMower (genauer: die Empfänger-Spule) den Schleifendraht überfährt. Es gibt zwei prinzipielle Möglichkeiten, den Begrenzungsdraht zu orten. Wir haben beide Methoden implementiert (Perimeter V1 und V2) wie nachfolgend beschrieben.
+
Und so wird das Signal empfangen: eine Empfangsspule liefert ein Signal, dessen Stärke je nach Abstand zwischen Schleifendraht und Empfangsspule variiert. Interessanterweise wechselt das Signal in dem Moment seine Polarität, wo der ArduMower (genauer: die Empfänger-Spule) den Schleifendraht überfährt.  
  
 
<gallery>
 
<gallery>
 
File: Ardumower_perimeter.jpg | Perimeterdraht
 
File: Ardumower_perimeter.jpg | Perimeterdraht
File: Ardumower_perimeter_components.jpg | Komponenten
 
 
File: Perimeter_signal_strength.jpg | Signalstärke
 
File: Perimeter_signal_strength.jpg | Signalstärke
 
File: Perimeter_gradient.png | Verlauf der Signalstärke
 
File: Perimeter_gradient.png | Verlauf der Signalstärke
File: Ardumower_perimeter_magneticfield.png | Perimeter-Magnetfeld
 
 
File: Perimeter_excluding_objects.png | Objekte ausschließen
 
File: Perimeter_excluding_objects.png | Objekte ausschließen
 
File: Perimeter_divide.png | Flächen aufteilen
 
File: Perimeter_divide.png | Flächen aufteilen
 
</gallery>
 
</gallery>
  
[http://hyperphysics.phy-astr.gsu.edu/hbase/magnetic/magcur.html Magnetfeld Berechnungstool]
+
=Begrenzungsschleife=
 
+
Videos:
+
[http://youtu.be/r4ZMgasMkH0 Magnetfeld Demovideo]
+
 
+
=Begrenzungsschleife V2 (erforderlich für aktuellen ArduMower Code)=
+
  
 
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|https://www.youtube.com/watch?v=NIer_kITelc&feature=youtu.be]]
 
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|https://www.youtube.com/watch?v=NIer_kITelc&feature=youtu.be]]
Zeile 29: Zeile 22:
 
Beim Überfahren des Schleifendrahtes passiert nun etwas Interessantes: die Polarität der Signalspannung wechselt von negativ auf positiv bzw. umgekehrt - je nachdem, ob man von innen oder außen kommt. Dadurch werden sowohl das Überfahren selbst als auch der Status (Aufenthalt innerhalb oder außerhalb der Schleife) eindeutig erkennbar. Wie bei der V1 nutzen wir zur Signalverstärkung wieder den Motortreiber für das Ausgangssignal und einen Operationsverstärker für das Eingangssignal von der Empfangsspule. Der Sender übergibt eine digitale Signalfolge (auch als 'pseudo-noise' bezeichnet) an die Schleife, die vom Empfänger über einen software-basierten digitalen [http://en.wikipedia.org/wiki/Matched_filter Matched-Filter] ausgewertet wird. Der Filter liefert als Ergebnis einen Peak: positiv - ArduMower innerhalb oder negativ - ArduMower außerhalb der Begrenzungsschleife.
 
Beim Überfahren des Schleifendrahtes passiert nun etwas Interessantes: die Polarität der Signalspannung wechselt von negativ auf positiv bzw. umgekehrt - je nachdem, ob man von innen oder außen kommt. Dadurch werden sowohl das Überfahren selbst als auch der Status (Aufenthalt innerhalb oder außerhalb der Schleife) eindeutig erkennbar. Wie bei der V1 nutzen wir zur Signalverstärkung wieder den Motortreiber für das Ausgangssignal und einen Operationsverstärker für das Eingangssignal von der Empfangsspule. Der Sender übergibt eine digitale Signalfolge (auch als 'pseudo-noise' bezeichnet) an die Schleife, die vom Empfänger über einen software-basierten digitalen [http://en.wikipedia.org/wiki/Matched_filter Matched-Filter] ausgewertet wird. Der Filter liefert als Ergebnis einen Peak: positiv - ArduMower innerhalb oder negativ - ArduMower außerhalb der Begrenzungsschleife.
  
Prinzipablauf:
+
Prinzipablauf Sender:
  Senderseite
+
# Erzeugen des Ausgangssignals durch den Arduino Nano (ca. 3 Khz)
# Erzeugen des Ausgangssignals durch den Arduino Nano
+
 
# Verstärkung des Ausgangssignals durch den Motortreiber (MC33926), Schleifendrahtenden anstatt eines Motors an den Ausgang anschließen
 
# Verstärkung des Ausgangssignals durch den Motortreiber (MC33926), Schleifendrahtenden anstatt eines Motors an den Ausgang anschließen
  
  ArduMower
+
Prinzipablauf Empfänger:
 
# Eingangssignal per Empfangsspule aufnehmen
 
# Eingangssignal per Empfangsspule aufnehmen
# Eingangssignal per Operationsverstärker (z.B. LM386) verstärken
+
# Eingangssignal per Operationsverstärker (LM386) verstärken
# ADC sampling durch Arduino Mega
+
# ADC sampling durch Arduino Mega (mit 9615 Hz)
 
# Signalfilterung and Analyse durch ein digitales Filter (software-basierter Matched-Filter-Algorithmus)
 
# Signalfilterung and Analyse durch ein digitales Filter (software-basierter Matched-Filter-Algorithmus)
 
# Auswertung des matched filter Ergebnisses (zur Feststellung des Aufenthaltbereiches inner- / außerhalb der Schleife, Schleifenabfahren usw.)
 
# Auswertung des matched filter Ergebnisses (zur Feststellung des Aufenthaltbereiches inner- / außerhalb der Schleife, Schleifenabfahren usw.)
  
Folgende Bilder erklären den Wechsel der Signalpolarität innerhalb und außerhalb der Schleife. Sie zeigen auch die Richtung der magnetischen Flusslinien, die vom Begrenzungsdraht ausgehen und wie sie die Spule innerhalb und außerhalb der Begrenzungsschleife treffen.
+
Folgende Bilder erklären den Wechsel der Signalpolarität innerhalb und außerhalb der Schleife. Sie zeigen auch die Richtung der magnetischen Flusslinien, die vom Begrenzungsdraht ausgehen und wie sie die Spule innerhalb und außerhalb der Begrenzungsschleife treffen.
 +
 
 +
Für ein besseres Verständnis des Filters gibt es den [http://www.grauonline.de/alexwww/ardumower/filter/filter.html Matched Filter Simulator]. Für weitere Informationen zum Filter, schaue Dir auch das [https://www.youtube.com/watch?v=NIer_kITelc Matched Filter Video] an. Using a simple symmetric signal (which looks equal on positive and negative side of the zero point), you cannot differentiate between an 'inside perimeter' and 'outside perimeter' signal. When the mower is traversing the perimeter loop, the signal polarity changes (positive becomes negative and negative becomes positive). We want to detect this polarity change of the signal. Using an unsymmetrical signal, you can do this. You can see the difference in the simulator. The default signal (slider 'example signal') is a symmetric signal - press the 'Invert' button to invert the signal (change its polarity). In the correlation result (graph 'Matched filter') the polarity can not be detected. Now use an asymmetrical signal ('pseudonoise5_pw'). Press again 'Invert' to change signal polarity. Now you can see polarity of the signal in the filter output (graph 'Matched filter'). It's the sign of the peak (positive or negative sign).  
  
 
<gallery>
 
<gallery>
 
File: Ardumower_perimeter2.jpg| Innen/außen-Erkennung über den Polaritätswechsel
 
File: Ardumower_perimeter2.jpg| Innen/außen-Erkennung über den Polaritätswechsel
 
File: Fluxdirections.png| Flussrichtungen
 
File: Fluxdirections.png| Flussrichtungen
</gallery>
 
 
== Signal ==
 
Der Schlüssel zu einem guten Empfang des Perimetersignals überall auf dem Rasen ist die Optimierung des Signal-Rausch-Abstandes (SNR=signal/noise ratio). Um das SNR zu maximieren, gibt es zwei Ansätze:
 
# Signalstärke hochfahren (elektr. Leistung) oder
 
# Erhöhung der Signallänge
 
 
Wir nutzen eine Kombination beider Ansätze: der Sender wiederholt ständig einen digitalen Code ('pseudonoise4_pw') mit 9615 Hz :
 
 
1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,-1,1,-1,-1,1,-1,-1,1,1,-1
 
 
'1' bedeutet einen positiven Signalimpuls, '-1' einen negativen. Der kürzeste erzeugte Signalwechsel ist '-1,1', das entspräche dem höchsten Ton (wenn man es hörbar darstellen würde) von 4808 Hz. Das andere Extrem wäre der längste erzeugte Signalwechsel mit '1,1,-1,-1', bei einer Frequenz von 2404 Hz.
 
 
Die Spule erkennt nur diese Signalwechsel des Sendersignals. So - also ohne den Kondensator in Serienschaltung zur Spule - zeigt sich das Empfangssignal wie folgt:
 
 
1,0,-1, 0,1,-1,1,-1, 0,1,-1,1,0,-1, 0,1,-1, 0,1,-1, 0,1,0,-1
 
 
Verwendet man jedoch den Kondensator in Reihe zur Spule, sind gesendetes und empfangenes Signal vom Prinzipverlauf wieder identisch.
 
 
<gallery>
 
 
File: Perimeter_signal_steps.png | Perimetersignal an Sender und Empfangsspule
 
File: Perimeter_signal_steps.png | Perimetersignal an Sender und Empfangsspule
</gallery>
+
File: Matched_filter_principle.png| Matched filter
 
+
File: Perimeter_signal_good_bad.png|What makes a good/bad signal
Der Arduino ADC wertet das Empfangssignal mit einer Abtastrate von 9615 Hz aus.
+
 
+
== Filter ==
+
Die gewählte Signalform weist eine spezielle Charakteristik auf:
+
 
+
Weil es wie ein Zufallssignal aussieht, stimmt es nicht in Teilen mit sich selbst überein, sondern erst als komplette Sequenz ([http://en.wikipedia.org/wiki/Matched_filter Übereinstimmung]). Aufgrund dieser Charakteristik können die Startpunkte der Signalsequenz durch ein [http://en.wikipedia.org/wiki/Matched_filter matched filter] ('Korrelation' mit dem gesuchten Signalmuster) ermittelt werden: sie erscheinen als Nadelimpuls im Filterergebnis - und zwar auch bei einem stark verrauschten Signal (z.B. durch Störimpulse von Motoren etc.).
+
Die Polarität der Spitze (positiv oder negativ) gibt an, ob sich die Spule inner- oder außerhalb der Begrenzungsschleife befindet.
+
 
+
Du kannst sehen, wie das funktioniert: für ein tiefergehendes Verständnis des Perimetersignals und des Filters schau Dir folgende Simulation (in englisch) an:
+
[http://www.grauonline.de/alexwww/ardumower/filter/filter.html Matched filter simulation]
+
 
+
# Wähle eine Perimetersignalform: setze den Schieberegler (rechts oben 'example signals') auf ''pseudonoise4_pw'' (Wert 23).
+
# Hebe den Wert des Störsignal ein wenig an: setze den Schieberegler ('noise') auf den Wert 2.
+
# Der Plot 'Matched filter' (links unten) zeigt, dass das wiederholte Signal 3 mal entdeckt wurde.
+
# Nun simuliere die Bewegung der Spule aus der Perimeterschleife nach außen:  Klicke auf 'Invert' und setze damit die Verstärkung auf '-1'. Der Filter liefert 3 negative Spitzen.
+
 
+
Mehr dazu unter: [https://www.youtube.com/watch?v=NIer_kITelc Video über matched filter]
+
 
+
<gallery>
+
  File: Matched_filter_principle.png| Matched Filter
+
  File: Perimeter_signal_good_bad.png|Beispiele für gutes / schlechtes Signal
+
 
</gallery>
 
</gallery>
  
 
== Sender ==
 
== Sender ==
<gallery>
+
[[Image:Ina169_marotronics.jpg|thumb|200px| Wichtig für Marotronics INA169: Pads verlöten für 5A Betrieb]]
File: Schleifensender_Ardumower_V2.JPG | Sender Schaltplan
+
[[File: Ardumower_perimeter_overview.jpg|600px]]
File: Ardumower_sender_pcb.jpg| Ardumower Sender PCB
+
File: Perimeter2_sender_open.jpg| Sendersignal (6.5V, ohne Perimeterschleife)
+
File: Perimeter2_sender_closed.jpg| Sendersignal (6.5V, 120m Perimeterschleife 7 Ohm)
+
File: Sender_v2_signal_sender_5v_4ohm.png| Sendersignal (6.5V, 4 Ohm Widerstand + 2m Perimeterschleife)
+
File: perimeter_wiring_motor_driver.png | Varianten der Motortreiberschaltung
+
</gallery>
+
  
Wir benutzen einen Arduino Nano zur Erzeugung und einen Mototreiber als Ausgangsverstärker des Signals. Der Motortreiber wird mit 3,2 kHz betrieben (2 Impulsbreiten 4808 und 2404 Hz). Bei ausreichend langen Schleifendrähten benötigt der Generator typischerweise 10W (6.5V, 1.7A). Unser Motortreiber verfügt über eine integrierte Strombegrenzung und eine Übertemperaturabschaltung (z.B. MC33926). Die Schleifenlänge kann im Bereich 20 - 450m betragen und muss mindestens 5 Ohm Widerstand aufweisen.
+
Wir benutzen einen Arduino Nano zur Erzeugung und einen Mototreiber als Ausgangsverstärker des Signals. Der Motortreiber wird mit 3,2 kHz betrieben (2 Impulsbreiten 4808 und 2404 Hz). Unser Motortreiber verfügt über eine integrierte Strombegrenzung und eine Übertemperaturabschaltung (z.B. MC33926)
  
Sender Pin-Belegung:
+
Anschluss der Induktionsschleife erfolgt am MC33926 zwischen M1OUT1 und M1OUT2.
  
<blockquote style="background-color: lightgrey; border: solid thin grey;">
+
[[File:warning.png]] Wichtig: Die Schleifenlänge kann im Bereich 20 - 450m betragen und muss mindestens 5 Ohm bzw. darf maximal 12 Ohm Widerstand aufweisen. Die maximal Begrenzungs-Fläche beträgt 1000 m2.
<pre>
+
motor driver M1OUT1    o---------- perimeter loop (20-450 meters, > 5 Ohm) --+
+
                                                                              |
+
motor driver M1OUT2    o---------- perimeter loop ---------------------------+
+
motor driver Vin        o-- 6.5V
+
motor driver M1IN1      o-- Arduino Nano pinIN1
+
motor driver M1IN2      o-- Arduino Nano pinIN2
+
motor driver M1PWM_nD2  o-- Arduino Nano pinPWM
+
motor driver M1nSF      o-- Arduino Nano pinFault
+
motor driver M1FB      o-- Arduino Nano pinFeedback
+
motor driver EN        o-- Arduino Nano pinEnable
+
motor driver VDD        o-- Arduino +5V
+
motor driver M1D1      o-- GND (via Jumper)
+
motor driver SLEW      o-- VDD (via Jumper)
+
+
              |---------o-- GND
+
Potentiometer 100k -----o-- Arduino Nano pinPot
+
              |---------o-- Arduino +5V
+
+
ACS712-05 OUT ------o-- Arduino Nano pinChargeCurrent   
+
ACS712-05 A  ------o-- charging pin (+)
+
ACS712-05 B  ------o-- battery charger +24V
+
battery charger GND-o-- charging pin (-)
+
</pre>
+
</blockquote>
+
  
'''Beispiel für den Senderaufbau mit einer Lochrasterplatine:  [http://www.braunschweiger.org/content/download/SenderR212.pdf]  
+
* [https://www.marotronics.de/Perimeter-Sender-Board-Prototyp-mit-Platinen-Zubehoer Sender PCB im Shop]
[http://www.braunschweiger.org/content/images/SenderR212_Front.jpg] [http://www.braunschweiger.org/content/images/SenderR212_Back.jpg]'''
+
* [https://github.com/Ardumower/ardumower/blob/master/pcb/Produzierte_Platinen/sender_v2_geschlossen/Perimeter%20sender%20v2.pdf Sender PCB Schaltbild]
 +
* [https://github.com/Ardumower/ardumower/tree/master/pcb/Produzierte_Platinen/sender_v2_geschlossen/Platinenbilder Sender PCB Bilder]
  
=== Sender Perimeterschleife und Rasengröße ===
+
=== Sendersoftware ===
Bei einer Betriebsspannung von 6.5V sollte die Perimeterschleife nicht über 450 m lang sein. (Für den 'Wohnzimmertest' tut es auch ein 100 Ohm Widerstand in Reihe mit 5m Schaltdraht.)
+
  
Setzen wir mal eine kreisrunde Rasenfläche voraus erhalten wir für 450m Schleifenlänge (= Kreisumfang) einen Radius von 70m:
+
<b>Tipp</b>: Wenn Du Dich nie zuvor mit Arduino beschäftigt hast, lies zuerst unsere Einführung <b>[http://wiki.ardumower.de/index.php?title=Arduino_first_steps 'erste Schritte mit dem Arduino']</b>.
radius = Schleifenlänge / (2*PI) = 450m / (2*PI) = 70 meter
+
  
Wäre die Signalqualität nicht durch den Radius begrenzt, entspräche der eingegrenzte Rasen einer Fläche von 15000m2:
+
<b>Download</b>:  
Fläche = PI * (radius*radius) = PI * (70m * 70m) = 15000 m2
+
Du findest den Code für den Schleifensender im Ordner 'sender' unter [http://wiki.ardumower.de/index.php?title=Ardumower_LP#Programm_downloaden_und_Arduino_programmieren Ardumower Download]
  
Da jedoch der maximale Radius für ausreichende Signalqualität bei ca. 18m liegt, ergibt sich die maximale Rasenfläche (Annahme immer noch: Kreisfläche!) zu 1000m2: Fläche = PI * (radius*radius) = PI * (18m * 18m) = 1000 m2
+
[[File:warning.png]] Wichtig: Vergewissere Dich, dass die Pin-Konfiguration des Arduino im benutzten Code (sender.ino) mit Deinem Senderaufbau übereinstimmt! Falls Dein Arduino Nano sich nicht flashen lässt, schaue bitte [http://wiki.ardumower.de/index.php?title=Arduino_first_steps hier für ein Treiber-Downgrade].
  
=== Einstellung der Senderstromstärke ===
+
=== Einstellen der Sendeleistung ===
Zur Einstellung der Sendeleistung (Spannung*Strom) gibt es verschiedene Möglichkeiten:
+
Zum Einstellen der Sendeleistung wie folgt vorgehen:
  
*Spannung am DC/DC-Wandler: die Versorgungsspannung des Motortreibers kann über das Poti des Wandlers zwischen 6.5 bis 12V eingestellt werden. Das ist der empfohlene Weg. Beachte: der MC33926 Motortreibermotor benötigt eine Mindestspannung (Vin) von 5V. Bei zu geringer Spannung regelt der Motortreiber sporadisch ab und die Arduino-LED zur Anzeige von Unterspannung fängt an zu blinken.
+
[[File:warning.png]] Wichtig: Deine Induktionsschleife sollte mindestens ein Widerstand von 12 Ohm aufweisen. Im Idealfall schaltet man ein 12 Ohm (50W) Lastwiderstand in Reihe. So kommt man dann auf ein Gesamtwiderstand der Begrenzungsschleife die im Bereich von ca 12-15 Ohm liegt.
  
*Normale Amplitude: statt die Perimeterschleife zwischen +Vin und -Vin (doppelte Amplitude ist Standardwert) umzuschalten, kann der Motortreiber auch nur zwischen +Vin und GND (einfache Amplitude). So zieht die Schleife weniger Strom. Zur Einstellung der einfachen Amplitude muß die entsprechende Codezeile in 'sender.ino' auskommentiert werden:
+
Die Versorgungsspannung des Motortreibers wird über das Poti des DC/DC-Wandlers zwischen 6.5 bis 12V eingestellt. Die Spannung am DC/DC-Wandler so einstellen, dass nicht mehr als 1 Ampere zum fließen kommt.
  
  // #define USE_DOUBLE_AMPLTIUDE    1 
+
Beispiel:
 +
Deine Induktionsschleife hat: 12 Ohm
 +
Deine Eingstellte Spannung am DC/DC-Wandler: 8 Volt
  
*Hochlastwiderstand: Bei einem Schleifenwiderstand kleiner 5 Ohm kann der Strom nicht weiter reduziert werden, indem man die Spannung runterdreht: unterhalb von ca. 6V arbeitet der Arduino nicht mehr richtig. Dann hilft nur noch ein zur Schleife in Reihe geschalteter Hochlastwiderstand (R: z.B. 5 Ohm, 10W).
+
Der verbrauchte Strom und die verbrauchte Leistung ist dann:  
 +
Strom: I = U / R = 8 Volt / 12 Ohm => 0,7 Ampere
 +
Verbrauchte Leistung: P = U * I = 8 Volt * 0,7 Ampere => 5,6 Watt
  
@6V (Vin): 5 ohm Hochlastwiderstand => I=U/R=6V/5Ohm=1.2A  (P=U*I=6V*1.2A=7.2W)
+
Hochlastwiderstand: Bei einem Schleifenwiderstand kleiner 5 Ohm kann der Strom nicht weiter reduziert werden, indem man die Spannung runterdreht (unterhalb von ca. 6V arbeitet der Motortreiber nicht mehr richtig). Dann hilft nur noch ein zur Schleife in Reihe geschalteter Hochlastwiderstand. Wichtig: der Hochlastwiderstand muss für die Leistung ausgelegt sein! In dem gezeigten Beispiel mit 12 Ohm sollte man also einen 10 Watt Lastwiderstand verwenden.
  
Daher also die mindestens 10W Belastbarkeit des Widerstandes! In diesem Falle auch die 'einfache Amplitude' im Sendercode aktivieren (doppelte Amplitude nicht benutzen!).
+
Weitere Informationen: [http://wiki.ardumower.de/index.php?title=Der_Perimetersender_ohne_automatische_Regelung]
 
+
=== Senderstromüberwachung (in Entwicklung) ===
+
Idee: das Poti VR1 wird durch ein digitales Poti (z.B. MCP4151-5K) ersetzt. So kann die Vin des Motortreibers (und damit auch der Strom) über den Arduino eingestellt werden:
+
 
+
<gallery>
+
File: Lm2596_circuit.jpg | LM2596 Modulschaltplan
+
</gallery>
+
 
+
MCP4151-5K version:
+
 
+
Vout = 1.23V*(1+VR1/R1)
+
 
+
Using VR1=5K...
+
Vstart (on reset):  Vout=1.23V*(1+2.5K/0.33K)=10v
+
Vmax:  Vout=1.23V*(1+5K/0.33K)=19v
+
  
 
=== Automatische Schleifensignalabschaltung ===
 
=== Automatische Schleifensignalabschaltung ===
Während sich der ArduMower in der Ladestation aufhält, wird das Schleifensignal nicht benötigt und wir können Energie sparen. Zum Erkennen des Ladestatus wird ein Stromsensor (ACS712) zwischen Ladegerät und Ladeanschlüsse geschaltet.
+
Während sich der ArduMower in der Ladestation aufhält, wird das Schleifensignal nicht benötigt und wir können Energie sparen. Zum Erkennen des Ladestatus befindet sich auf dem Sender PCB ein Stromsensor (INA169, 5A) zwischen Ladegerät und Ladeanschlüsse.
  
=== Sendersoftware ===
+
Zum Aktivieren dieser Funktion ist "#define USE_CHG_CURRENT" auf 1 zu setzen
  
<b>NOTE</b>: Wenn Du Dich nie zuvor mit Arduino beschäftigt hast, lies zuerst unsere Einführung <b>[http://wiki.ardumower.de/index.php?title=Arduino_first_steps 'erste Schritte mit dem Arduino']</b>.
+
    #define USE_CHG_CURRENT      1    // use charging current sensor for robot detection? (set to '0' if not connected!)
  
[[File:warning.png]] Wichtig: Vergewissere Dich, dass die Pin-Konfiguration des Arduino im benutzten Code (sender.ino) mit Deinem Senderaufbau übereinstimmt!
+
=== Sender Diagnose ===
 
+
Im Code (sender.ino) die passende Option für die automatische Schleifenabschaltung (bei Verwendung des oben beschriebenen Stromsensors Option 1) wählen:
+
 
+
* Define if you have connected a charging current sensor for automatic sender standby:  #define USE_CHG_CURRENT 1  (or 0)
+
 
+
=== Sender Zustandsanzeige ===
+
 
Die LED auf dem Arduino Nano signalisiert den Senderstatus:
 
Die LED auf dem Arduino Nano signalisiert den Senderstatus:
 
* An: Perimeterschleife ist angeschlossen und arbeitet
 
* An: Perimeterschleife ist angeschlossen und arbeitet
Zeile 196: Zeile 100:
 
* Blinkt: der ArduMower wird geladen und die Perimeterschleife ist zur Energieeinsparung durch die Software deaktiviert
 
* Blinkt: der ArduMower wird geladen und die Perimeterschleife ist zur Energieeinsparung durch die Software deaktiviert
  
<gallery>
+
Bei der Platine "Sender V2" ist dieses Signal am Ausgang "D13" verfügbar und auf die LED "Mover_in_Ladestation" geschaltet.
File:Perimeter_sender_console.png | Ausgabe 'sender.ino' über serielle Konsole
+
</gallery>
+
  
=== Sendertest per PC-Soundkarte ===
+
Um Fehler zu finden bzw. um den Schleifensender besser zu verstehen, öffne mit der Arduino IDE die serielle Konsole (CTRL+SHIFT+M) auf 19200 Baud. Hier ein Beispiel der möglichen Zustände (Roboter in Ladestation/Roboter nicht in Ladestation usw.):
Du kannst den Sender mit Deine Soundkarte und einer Spule testen:
+
 
+
# Verbinde eine Spule (100 mH) mit dem Mikrofon-/Line-Eingang (max 1V) Deiner Soundkarte
+
# Starte das [http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html Web-Oszilloskop], und wähle Filter 'Matched', Frequenz '9615' Hz, Visualization Math 'MinMax'
+
# Das Ausgangssignal sollte den Abstand zur Perimeterschleife wiederspiegeln - die Polarität (negativ/positiv) zeigt den Aufenthaltsbereich (innerhalb/außerhalb) der Schleife.
+
 
+
Versuche in beiden Fällen (innen/außen), die Spule so dicht wie möglich an der Schleife zu positionieren, um ein auswertbares Signal zu empfangen (zur Erinnerung: wir arbeiten hier ohne die Signalverstärkung durch den Operationsverstärker, da der Soundkarteneingang nur mit max 1V beaufschlagt werden darf).
+
  
 
<gallery>
 
<gallery>
File:Ardumower_web_oscilloscope_time_signal_received.jpg | Effektivwert des empfangenen Zeit-Signals (Filter Off, Time scale: x5)
+
  File:Perimeter_sender_console.png|Fehlersuche mit serieller Konsole
File:Ardumower_web_oscilloscope_time_signal.jpg | Ideales Zeitsignal erzeugt vom Sender (Filter Off, Time scale: x5)
+
File:Ardumower_web_oscilloscope.jpg | Matched Filter Signal (Frequency: 9615 Hz, Math: MinMax)
+
File:Perimeter_signal_good_bad.png | Beispiel für gutes / schlechtes Signal
+
 
</gallery>
 
</gallery>
  
[https://www.youtube.com/watch?v=vg5Xg0__66A Video zur Erklärung aller Schritte]
+
== Empfänger ==
  
== Empfänger ==
+
[[File: Perimeter_v2_receiver_circuit.png|400px]]
  
Zum Signalempfang verwenden wir eine Spule (100 mH or 150 mH, nur für die älteren Softwareversionen wird ein Kondensator 4.7nF mit der Spule in Reihe geschaltet) in aufrechter Position, in der Mitte am vorderen Rand des ArduMower. Sie ist zur Verstärkung des empfangenen Signals mit dem Eigang eines LM386 Operationsverstärkers verbunden. Auf dem LM386 Modul wird der Kondensator C3 überbrückt, damit der Verstärker ein Signal zwischen 0..5V statt im Standardbereich -5V..+5V) liefert. Der Ausgang des LM386 sollte mit dem Arduino Analog-Pin ('pinPerimeterLeft') verbunden werden.
+
Zum Signalempfang verwenden wir eine Spule (100 mH or 150 mH) in aufrechter Position, in der Mitte am vorderen Rand des ArduMower. Sie ist zur Verstärkung des empfangenen Signals mit dem Eigang eines [https://www.marotronics.de/Schleifenempfaenger-Kit-perimeter-receiver-Kit LM386 Operationsverstärkers] verbunden. Auf dem LM386 Modul wird der Kondensator C3 überbrückt, damit der Verstärker ein Signal zwischen 0..5V statt im Standardbereich -5V..+5V) liefert. Der Ausgang des LM386 sollte mit dem Arduino Analog-Pin ('pinPerimeterLeft') verbunden werden. Der Analog-Pin 'pinPerimeterRight' wird bei Verwendung des Senders V2 nicht benötigt.
  
 
<gallery>  
 
<gallery>  
File: Perimeter_v2_receiver_circuit.png | Empfängerschaltkreis und überbrückter Kondensator C3
 
 
  File: Ardumower_chassis_components.png | Position der Perimeterspule
 
  File: Ardumower_chassis_components.png | Position der Perimeterspule
 
  File: Ardumower_coil_position.jpg | Eine zentrierte, aufrecht montierte Spule  
 
  File: Ardumower_coil_position.jpg | Eine zentrierte, aufrecht montierte Spule  
 
  File: Ardumower_lm386_circuit.png | LM386 Modul Schaltplan
 
  File: Ardumower_lm386_circuit.png | LM386 Modul Schaltplan
 +
File: Dcdc_noise.jpg | NOTE: Perimeterspule/Verstärker von DC/DC-Wandlern fernhalten (Störstrahlung)!
 
  File: Tire_coil_distance.jpg | Abstand Spule-Rad: Einfluß auf den Wendekreis (Kurvenwinkel)
 
  File: Tire_coil_distance.jpg | Abstand Spule-Rad: Einfluß auf den Wendekreis (Kurvenwinkel)
File: Coil_motor_layout.png | Zwei Spulen (experimentell), Abstand Spule-Spule Hinterradantrieb 12.5cm, Frontantrieb 19cm
 
 
</gallery>
 
</gallery>
  
Empfängerschaltplan:
+
[https://www.marotronics.de/Schleifenempfaenger-Kit-perimeter-receiver-Kit Das Empfänger-Kit ist erhältlich im Shop]
  
<blockquote style="background-color: lightgrey; border: solid thin grey;">
 
<pre>
 
                                      LM386 IN  o------- capacitor 4.7nF ----------- coil 100 mH  (or 150 mH)
 
Arduino pinPerimeterLeft  o------o  LM386 OUT
 
                                      LM386 GND o----------------------------------- coil
 
</pre>
 
</blockquote>
 
  
 
'''Achtung''': Die Spule muss direkt an den Verstärkermodul angeschlossen werden. So wird die Störfestigkeit des schwachen Spulensignals gegenüber Einflüssen anderer Komponenten (Motore, DC-DC-Wandler) verbessert.  
 
'''Achtung''': Die Spule muss direkt an den Verstärkermodul angeschlossen werden. So wird die Störfestigkeit des schwachen Spulensignals gegenüber Einflüssen anderer Komponenten (Motore, DC-DC-Wandler) verbessert.  
  
'''Differentielles Signal''': Die aktuelle Software erfordert das Weglassen des Kondensators 4.7nF in Reihe mit der Spule.  
+
'''Wichtig''': Die aktuelle Software erfordert das Weglassen des Kondensators 4.7nF in Reihe mit der Spule ('differential signal').  
  
'''Nicht-differentielles Signal''': Mithilfe des Kondensators (4.7 nF) wird das Sendersignal wieder rekonstruiert (s. Abschnitt Signal), der Empfängeschaltkreis ist ein Schwingkreis (C und L und Perimeterschleife fungiert als Antenne) und alle Parameter (C, L, Schleifendrahtlänge) müssen übereinstimmen. Weil dies die Abstimmung schwierig macht, empfehlen wir das nicht-differentielle Signal nicht!
+
 
 +
===Einstellungen===
 +
<gallery>
 +
  File:Cheat_sheet.png | Perimeter settings
 +
</gallery>
 +
 
 +
At first, activate the perimeter in the Ardumower software (pfodApp->Options->Perimeter Use: YES). It is recommended to keep the default perimeter settings.
 +
 
 +
The perimeter settings are:
 +
 
 +
* Timed-out if below smag (timedOutIfBelowSmag) - default setting: 300 | If smag below this value, sender is considered as off (perimeter timeout appears)
 +
* Timeout (s) if not inside  (timeOutSecIfNotInside) - default setting: 8
 +
* Trigger timeout (perimeterTriggerTimeout) - default setting: 0 | Perimeter outside trigger timeout when escaping from inside (ms)
 +
* Perimeter out roll time max (perimeterOutRollTimeMax) - default setting: 2000 | Max (random generator) roll time after perimeter out (ms)
 +
* Perimeter out roll time min (perimeterOutRollTimeMin) - default setting: 750 | Min (random generator) roll time after perimeter out (ms)
 +
* Perimeter out reverse time (perimeterOutRevTime) - default setting: 2200 | Time to drive reverse after perimeter out (ms)
 +
* Perimeter tracking roll time (perimeterTrackRollTime) - default setting: 1500 | Hit obstacle while tracking: roll time
 +
* Perimeter tracking reverse time (perimeterTrackRevTime) - default setting: 2200 | Hit obstacle while tracking: reverse time
 +
* Transition timeout (trackingPerimeterTransitionTimeOut) - default setting: 2000 | Max. time required for a in/out transition during tracking, robot will start rotating after this timeout
 +
* Track error timeout (trackingErrorTimeOut) - default setting: 10000 | Max. time required for a in/out transition during tracking, robot will go into error after this time
 +
* Track_P (perimeterPID.Kp) - default setting:51 | Perimeter PID "P" setting
 +
* Track_I (perimeterPID.Ki) - default setting:12.5 | Perimeter PID "I" setting 
 +
* Track_D (perimeterPID.Kd) - default setting:0.8 | Perimeter PID "D" setting
 +
* Use differential signal (useDifferentialPerimeterSignal) - default setting: YES | Use differential signal (see signal section)
 +
* Swap coil polarity (swapCoilPolarity) - default setting:NO
 +
* Block inner wheel  (trackingBlockInnerWheelWhilePerimeterStruggling) - default setting: YES | robot is wheel-spinning while tracking => roll to get ground again
  
 
=== Abstand Spule/Verstärker zu Motoren ===
 
=== Abstand Spule/Verstärker zu Motoren ===
Zeile 254: Zeile 163:
  
 
<gallery>
 
<gallery>
  File: Dcdc_noise.jpg | Achtung: Halte Spule/Vorverstärker von den DC-DC-Wandlern und Motoren fern!!!
+
  File: Dcdc_noise.jpg | Achtung: Halte Spule/Vorverstärker von den DC-DC-Wandlern und Motoren fern
 
</gallery>
 
</gallery>
  
Zeile 260: Zeile 169:
 
Sender / Spule / LM386 Verstärker Ausgangssignale sollten etwa so aussehen: (witere Details über das Signal s. Abschnitt Signal)
 
Sender / Spule / LM386 Verstärker Ausgangssignale sollten etwa so aussehen: (witere Details über das Signal s. Abschnitt Signal)
 
<gallery>  
 
<gallery>  
  File: Perimeter_signal_steps.png | Perimetersignal an Sender, Empfangsspule und LM386 (Theorie)
+
  File: Perimeter_signal_steps.png | Signal am Sender und an Empfangsspule und LM386 (Prinzip)
  File: coil_signal_without_capacitor.png | differentielles Signal / Spulensignal ohne Kondensator (5V sender, 5 Ohm Schleife - blau: Perimeter, gelb: Spule, grau: LM386 Verstärkerausgang)
+
  File: coil_signal_without_capacitor.png | Sender-Signal / Spulensignal (5V sender, 5 Ohm Schleife - blau: Perimeter, gelb: Spule, grau: LM386 Verstärkerausgang)
  File: Lm_output_dc_noise.jpg | LM386 Ausgang mit DC Störungen (differentielles Signal / Spule ohne Kondensator)
+
  File: Perimeter2_sender_open.jpg| Sendersignal (6.5V, ohne Perimeterschleife)
File: Perimeter2_receiver_coil.jpg | LM386 Ausgang (nicht-differentielles Signal / Spule mit Kondensator, 12V Sender, 120m Schleife)
+
  File: Lm_output_dc_noise.jpg | Schleifen-Empfänger: LM386 Ausgang mit DC Störungen
File: coil_signal_with_capacitor.png | nicht-differentielles Signal / Spulensignalmit Kondensator (5V Sender, 5 Ohm Schleife - grau: Perimeter, gelb: Spule, blau: LM386 Verstärkerausgang)
+
File: Lm_output_motor_noise.jpg | LM386 Ausgang mit Störungen durch Motoren (differentielles Signal / Spule ohne Kondensator)
+
</gallery>
+
 
+
 
+
=== Signal und Rauschmessungen ===
+
Einige Spulenmessungen ohne Verstärker aber mit Störungen (Motoren, DC/DC-Wandler etc.):
+
<gallery>
+
  File: Coil_60k_parallel.jpg | Spule und 60 kOhm Parallelwiderstand ohne Störungen (Spulenhintergrund-rauschen Vpp=7 mV)
+
File: Coil_dc_converter_noise.jpg | Spule und 60 kOhm Parallelwiderstand mit Störungen durch DC/DC-Wandler (DC/DC-Rauschen Vpp=18 mV)
+
File: Coil_motor_noise.jpg | Spule und 60 kOhm Parallelwiderstand mit Störungen durch Motoren
+
File: Perimeter2_receiver_coil_pwm.jpg | Spulensignal mit seriellem 4.7nF Kondensator, PWM-Perimetersignal (nicht empfohlen) ohne Störungen
+
File: Fft_signal.png | FFT Signal
+
File: Fft_motors.png | FFT Motor-Störungen
+
File: Fft_dcdc.png | FFT DC/DC-Störungen
+
 
</gallery>
 
</gallery>
  
Zeile 318: Zeile 212:
 
       (Settings->Perimeter->Timeout (s) if not inside) eingestellt werden
 
       (Settings->Perimeter->Timeout (s) if not inside) eingestellt werden
 
  cnt:  Anzahl der Wechsel von innen nach außen (counter, Zähler)
 
  cnt:  Anzahl der Wechsel von innen nach außen (counter, Zähler)
  on:  Perimetersender ist aktiv (1) oder inaktiv (0), basiert auf der Auswertung des smag Ergebnisses
+
  on:  Perimetersender ist aktiv, Roboter innerhalb und smag ausreichend (1) oder inaktiv/außerhalb/smag zu klein (0)
 
  qty:  <b>Signalqualität</b> (Aussage über die Verläßlichkeit der Erkennung 'innerhalb / außerhalb' aus dem Filterergebnis)
 
  qty:  <b>Signalqualität</b> (Aussage über die Verläßlichkeit der Erkennung 'innerhalb / außerhalb' aus dem Filterergebnis)
 
       Verhältnis aus Vergleich mit Mustersignal zu Vergleich mit inversem Mustersignal               
 
       Verhältnis aus Vergleich mit Mustersignal zu Vergleich mit inversem Mustersignal               
Zeile 325: Zeile 219:
 
Im Plot soll der 'mag'-Verlauf frei von Spitzen sein: innerhalb der Schleife sollte das Signal eine negative Kurve, außerhalb eine positive Kurve beschreiben. Weist die Kurve Spitzen auf, versuche folgende Maßnahmen zur Fehlerbeseitigung bzw. Optimierung:
 
Im Plot soll der 'mag'-Verlauf frei von Spitzen sein: innerhalb der Schleife sollte das Signal eine negative Kurve, außerhalb eine positive Kurve beschreiben. Weist die Kurve Spitzen auf, versuche folgende Maßnahmen zur Fehlerbeseitigung bzw. Optimierung:
  
* Benutze immer einen ausreichend langen und korrekt abgerollten Schleifendraht (20m oder länger). Benutze niemals einen zu kurzen (Mindestwiderstand 5 Ohm!) oder gar aufgerollten Draht.
 
* Für den 'Wohnzimmertest' sollte ein 100 Ohm Widerstand in Reihe mit 5m Draht bei 6V seine Aufgabe erfüllen.
 
 
* Verbinde die Empfangsspule mit 'pinPerimeterLeft' auf dem PCB (am falschen Pin könnte das Signal 'etwas schwach' reinkommen)
 
* Verbinde die Empfangsspule mit 'pinPerimeterLeft' auf dem PCB (am falschen Pin könnte das Signal 'etwas schwach' reinkommen)
 +
* Verringere smag-Mindestwert via 'pfodApp->Options->Perimeter->Timed-out if below smag'
 
* Die Spulenpolung kann per pfodApp eingestellt werden (wird 'außen' angezeigt, wenn der Ardumower sich innrhalb der Schleife befindet?). Denselben Effekt hat das Umklemmen der Schleifenenden am Senderausgang.
 
* Die Spulenpolung kann per pfodApp eingestellt werden (wird 'außen' angezeigt, wenn der Ardumower sich innrhalb der Schleife befindet?). Denselben Effekt hat das Umklemmen der Schleifenenden am Senderausgang.
 
* Sollte das Signal schwach erscheinen, überprüfen, ob am Spulenverstärker das Poti "voll aufgedreht" ist! Hilfreich ist die gleichzeitige Anzeige des Signal per pfodApp (Plot --> Perimeter).
 
* Sollte das Signal schwach erscheinen, überprüfen, ob am Spulenverstärker das Poti "voll aufgedreht" ist! Hilfreich ist die gleichzeitige Anzeige des Signal per pfodApp (Plot --> Perimeter).
Zeile 333: Zeile 226:
 
* Halte den Abstand zwische Spule und Motoren sowie DC/DC-Wandlern möglichst groß (30cm oder mehr!)
 
* Halte den Abstand zwische Spule und Motoren sowie DC/DC-Wandlern möglichst groß (30cm oder mehr!)
 
* Nutze die magnetische Abschirmwirkung (z.B. Deines Akkus) zwischen Spule und Störquellen.
 
* Nutze die magnetische Abschirmwirkung (z.B. Deines Akkus) zwischen Spule und Störquellen.
* Einstellen der Senderspannung: bei längeren Perimeterschleifen (>80m) die Spannung höher wählen (Potentiometer DC/DC-Wandler), bei kürzeren Schleifen (>25m) eher niedriger (anstreben einer Sendeleistung = Spannung * Strom von ca 10W)
 
* Versuche bei laufenden Motoren die Spule leicht zu einer Seite zu neigen um die Signalqualität 'qty' zu erhöhen.
 
  
== Messungen ==
+
Weitere Fehlerquellen:
 
+
[http://wiki.ardumower.de/index.php?title=Der_Perimetersender_ohne_automatische_Regelung]
Zum Vergleich Beispielwerte, gemessen an verschiedenen, im Gelände getesteten Kombinationen von Sender-/Empfänger-/Schleifenparametern:
+
 
+
1) 120m (0.7mm^2), R=4 Ohm, 6.5V, Spule Vpp 20mV
+
Störsignalpegel (max): smag=192
+
Signal (min): smag=254
+
SNR=Signal/Störsignal=254/192=1.3
+
 
+
2) 30m (0.7mm^2), R=1.0 Ohm (+4 Ohm series R), 6.5V, Spule Vpp 120 mV
+
Störsignalpegel (max): smag=192
+
Signal (min): smag=896
+
SNR=Signal/Störsignal=896/192=4.6
+
  
 
=== Videos ===
 
=== Videos ===
Zeile 355: Zeile 235:
 
#[https://www.youtube.com/watch?v=NIer_kITelc Theorie zu Perimeterschleife und Matched Filter (in deutsch)]
 
#[https://www.youtube.com/watch?v=NIer_kITelc Theorie zu Perimeterschleife und Matched Filter (in deutsch)]
 
#[https://www.youtube.com/watch?v=VxJN2xb55dU&feature=youtu.be Sender-PCB]
 
#[https://www.youtube.com/watch?v=VxJN2xb55dU&feature=youtu.be Sender-PCB]
 +
#[http://www.youtube.com/watch?v=FGaUSg-uUxk Perimeter Stoptest]
 +
#[http://www.youtube.com/watch?v=8R8QaffNlJw Perimeter Verfolgungstest]
 +
#[http://www.youtube.com/watch?v=CftrnetFVYc&feature=youtu.be Test zum Finden und Verfolgen mit L50]
 +
#[http://www.youtube.com/watch?feature=player_embedded&v=fjuQViS2rHM Test zum Finden und Verfolgen mit Rotenbach]
 +
#[http://youtu.be/r4ZMgasMkH0 Magnetfeld Demovideo]
  
 
= Verfolgung der Begrenzungsschleife =
 
= Verfolgung der Begrenzungsschleife =
Zeile 366: Zeile 251:
 
Mehr Informationen über PID-Regler sind hier zu finden:  
 
Mehr Informationen über PID-Regler sind hier zu finden:  
 
[http://www.ardumower.de/index.php/de/forum/anleitungen-hilfe/121-pid-regelung-fuer-drehzahl-drehung-etc-richtig-einstellen Forum].
 
[http://www.ardumower.de/index.php/de/forum/anleitungen-hilfe/121-pid-regelung-fuer-drehzahl-drehung-etc-richtig-einstellen Forum].
 
= Sensor Signalfusion =
 
Das Magnetfeld der Perimeterschleife könnte man als Input für eine [http://wiki.ardumower.de/index.php?title=Sensor_fusion zur Positionsbestimmung des ArduMower nutzen].
 
  
 
= Weiterführende Links =
 
= Weiterführende Links =
Zeile 374: Zeile 256:
 
#[http://grauonline.de/wordpress/?page_id=364 Mehr Details zum 'matched filter']
 
#[http://grauonline.de/wordpress/?page_id=364 Mehr Details zum 'matched filter']
 
#[http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html Soundkarten-Oszilloskop inklusive 'matched filter']
 
#[http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html Soundkarten-Oszilloskop inklusive 'matched filter']
 
= Perimeter V1 (für alten Code V0.9.3, nicht mehr empfohlen) =
 
 
Dies war die erste Version unseres Perimetersenders und Empfängers. Sie wies einige Nachteile auf (Orientierungsfehler, Keine 'Sender-aus'-Erkennung, keine Möglichkeit zur Feststellung des Aufenthaltsbereiches inner-/außerhalb der Schleife), so dass der Einsatz nicht weiter empfohlen wird. Benutze die Nachfolgeversion V2, wie oben beschrieben.
 
 
== Sender ==
 
Du kannst den Sender eines kommerziellen Rasenmäroboters nutzen (der hier gezeigte Sender ist kompatibel mit Tianchen oder Rotenbach Mährobotern), oder Du baust Dir selber einen:
 
 
Ein Arduino (z.B. Nano) generiert ein Rechtecksignal, welches die Polarität eines Motortreibers (L298N) mit 7.8 Khz schaltet. Dadurch wechselt das Ausgangssignal zwischen Vcc und GND. Ein Schwingkreis verstärkt die Signalspitzen (Resonanzfrequenz ist dieselbe wie die Schaltfrequenz - 7.8 Khz). So reicht es aus, den Motortreiber mit 5V (statt 12V) zu betreiben. Die Spannungsquelle muß etwa 2W (400mA bei 5V) leisten.
 
Ein Teil des Signals wird durch den Arduino (ADC) durch eine Diode und einen Spannungsteiler erfaßt. So kann festgestellt werden, ob die Perimeterschleife angeschlossen ist. Durch den Schleifendraht fließt ein Strom von ca. 150mA (Drahtquerschnitt 2-3 mm^2, Länge max 500 m)
 
 
<gallery>
 
File: Arduino_perimeter_sender.png ‎
 
</gallery>
 
 
Weil man vielleicht nicht immer die genau passende Empfängespule zur Hand hat, hier ein paar mögliche Kombinationen (Spule / Kondensator), die die Resonanzfrequenz von 7.8 Khz aufweisen:
 
*Kombination 1: Spule: 160µH, Kondensator: 3,3µF/50V  (getestet)
 
*Kombination 2: Spule 33mH, Kondensator: 12nF (nicht getestet)
 
 
==== Stromversorgung ====
 
Zur Erzeugung der 5V Spannung wird ein step-down-Wandler (z.B. Module mit LM2596) eingesetzt. Vor dem Einsatz in der Schaltung muß der Wandler auf 5V einjustiert werden.
 
 
'''Warnung''' : Lege niemals mehr als 5V auf die Arduino 5V Pins oder Du zerstörst ihn. Deswegen: vorher die Spannung einstellen und kontrollieren!
 
 
==== Funktionstest ====
 
1. Nach dem Code-Hochladen und Anschliessen der Begrenzungsschleife sollte die Arduino LED an sein. Nun entferne den Schleifendraht und die LED sollte ausgehen.
 
 
2. Sollte das nicht so sein, kontrolliere mit einem Voltmeter zum Einen die Spannung zwischen Pin 9 des Arduino und dann die am Motortreiberausgang (OUT_1) jeweils gegen GND - beide sollten eine Gleichspannung  2.5 Volt führen.
 
 
3. Hast Du ein Oszilloskop? Dann schließe statt der Begrenzungsschleife das Oszilloskop an den Sender an. Das gemessene Signal sollte folgendermaßen aussehen:
 
 
Das Ausgangssignal zeigt eine höhere Ampltude (hohe Spitzenwerte) als das Eingangssignal:
 
 
<gallery>
 
File: Perimetersignal.jpg|Signal am Senderausgang
 
File: Ardumower_perimeter_sender_schematics.png|Grundprinzip des Schwingkreises
 
File: Arduino_perimeter_sender_photo.jpg
 
</gallery>
 
 
Für einen einfachen Empfangstest kannst Du die Empfangsspule direkt ans Oszilloskop anschließen. Das gemessene Signal sollte etwa so  aussehen:
 
 
<gallery>
 
File: Coilsignal.jpg|Signal an der Empfangsspule
 
File: Fft.jpg|Signal im Frequenzspektrum, überlagert durch Motorstörungen
 
File: Ardumower_perimeter_spectrum_plot.jpg| Anzeige des Frequenzspektrums über pfodApp
 
</gallery>
 
 
== Empfänger ==
 
Der Empfänger nutzt zwei Spulen, die rechts und links vorn im ArduMower montiert sind. Die Signalstärke der linken und rechten Spule werden ausgewertet, um sie vergleichen zu können.
 
 
Prinzip:
 
# Verstärkung der alternierenden Signale per OPAMP
 
# Optional: Bandpass-Filterung zum Ausblenden der Störungen durch Motore etc.
 
# Ermittlung der Signalstärke von linker und rechter Spule
 
 
Vorteil dieser Version: analoge Auswertungfunktioniert hervorragend.
 
Nachteil: Du kannst nicht feststellen, ob Du Dich gerade innerhalb oder außerhalb der Begrenzungsschleife aufhälst, wenn Du nicht jede Überfahrt des Begrenzungsdrahtes mitprotokollierst. Es ist auch nicht möglich festzustellen, ob Du die Begrenzungsschleife im oder gegen den Uhrzeigersinn abfährst.
 
 
<gallery>
 
File: Arduino_perimeter_receiver.png
 
</gallery>
 
 
Eine Spule empfängt das Signal des Senders. Ein Schwingkreis (LC: SPule und Kondensator)verstärkt das empfangene Signal bei einer Resonanzfrequenz von 7.8 kHz. Das Signal wird weiter verstärkt durch eien LM386-Verstärker (hier: Arduino Soundsensor mit Spule statt Mikrofon). Ein Bandpassfilter (digitaler Filter, FFT - Fast Fourier Transformation) läuft auf dem Arduino und filtert die gewünschte Frequenz (7.8 Khz) und erzeugt ein PWM-Signal (Pulsbreite proportional zur Signalstärke). Über einen Tiefpassfilter wird das PWM-Signal in eine Gleichspamnnung gewandelt.
 
Beachte: Die Verdrahtung zwischen ist vereinfacht dargestellt - Details der Verdrahtung s. Schaltplan.
 
 
Wir haben folgende Kombinationen von Spulen und Verstärkern getestet:
 
 
'Arduino Soundsensor'
 
<gallery>
 
File: Soundsensor.jpg| Signalverstärkung über LM386 - Arduino Soundsensor mit Spule statt Mikrofon
 
File: YwRobot_Sensor.jpg |Arduino Soundsensor mit LM386
 
File: YwRobot_circuit.png |Arduino Soundsensor Modulschaltplan
 
File: Coil_85mh.jpg|85 mH Spule
 
</gallery>
 
 
LM386 Verstärker
 
<gallery>
 
File: Lm386_amplifier.jpg| LM386 Versärker (200-fach)
 
File: Lm386_modified.jpg| modifizierter LM386-Verstärker
 
File: Ardumower_lm386_circuit.png | LM386 Modulschaltplan
 
File: Coil_small.jpg| 104 mH Spule
 
</gallery>
 
 
Wichtig: Bei Verwendung dieses Verstärkers muß der Kondensator C3 überbrückt werden (erzeugt das für den Arduino erforderliche VCC/2 offset). Dies Spule schließt man an "IN" und "GND" an.
 
 
'''Beachte''': die Spule unbedingt direkt am Verstärkermodul befestigen. Dies minimiert die Störeinflüsse durch andere Komponenten wie z.B. Motoren auf das schwache Spulensignal.
 
=== Funktionstest ===
 
# Stelle eine korrekte Funktion des Schleifensenders sicher (wie bereits weiter oben beschrieben).
 
# Drehe das Potentiometer des Arduino Soundsensors auf Maximum (gegen den Uhrzegersinn).
 
# Lade das Programm auf den Arduino und bewege eine Spule in Richtung des Begrenzungsdrahtes: die LED des Arduino sollte zu blinken beginnen. Halte nun beide Spulen im gleichen Abstand über den Begrenzungsdraht: die LED sollte nun permanent leuchten.
 
# Wenn das so nicht funktioniert, öffne die serielle Konsole und  prüfe die Signalwerte.
 
 
=== Spulenauswahl ===
 
mathematische Näherungsberechnung einer Spule:
 
 
L = 1nH x n² x ((D² / mm² ) / (l / mm))
 
l = Spulenlänge
 
D = Spulendurchmesser
 
 
Beispiel: eine Induktion von 85 mH, Durchmesser 10 mm, Länge 40 mm erfordert ca. 5830 Windungen.
 
 
Diese Induktivität von 85 mH und ein Kondensator von 4.7 nF führen zu einer Resonanzfrequenz von 7963 Hz.
 
 
f0 = 1 / (2 * PI * sqrt(L * C)) = 1 / (2 * PI * sqrt(0.085 H * 0.0000000047 F)) =  7963 Hz
 
 
Weil man vielleicht nicht immer die genau passende Empfängerspule zur Hand hat, hier ein paar mögliche Kombinationen (Spule / Kondensator), die die Resonanzfrequenz von 7.8 Khz aufweisen:
 
Kombination 1: Spule: 85mH, Kondensator: 4.7nF  (getestet)
 
Kombination 2: Spule: 104mH, Kondensator: 4nF (getestet)
 
 
=== Anordnung der Spulen ===
 
die Spulen sind am Boden des ArduMower so angeordnet, dass sie einen Winkel von 90 Grad einschließen, d.h. jede ist um 45 Grad aus der Längsachse gedreht.
 
<gallery>
 
File: Ardumower_spulen.jpg| Anordnung der Spulen
 
File: L50_coils.jpg | Beispiel (Ambrogio L50)
 
File: L50_parcours.jpg | Testparcours
 
</gallery>
 
 
=== Messung der Signalstärke ===
 
Zum Vergleich von Messungen wurde die Signalstärke bei verschiedenen Schleifenabständen bestimmt. Die Signalsärke (soll heißen: der berechnete ADC-Wert) kann in der Android pfodApp angezeigt werden. Der Abstand (cm) ist der berechnete Wert zwischen Perimeterschleife und Spule (eingebaut im ArduMower).
 
 
<gallery>
 
File: Perimeter_plot.png
 
</gallery>
 
 
=== Schleifenverlegung ===
 
 
Wichtig bei der Schleifenverlegung sit die Vermeidung von scharfen Ecken: Rundungen sind angesagt! Fährt der Ardumower exakt über eine scharfe Ecke, kann er unter Umständen die Schleife nicht mehr orten, da Spule und Schleife fluchten / parallel stehen.
 
 
<gallery>
 
File: Schleifen_blind.jpg  | Nicht empfohlen: ArduMower kann keine scharfen Ecken orten!
 
File: Ardumower_coil_signal.png| Wie ändert sich das Sinal, wenn die Spule gedreht wird??
 
</gallery>
 
 
=== Videos ===
 
#[http://www.youtube.com/watch?v=FGaUSg-uUxk Perimeter Stoptest]
 
#[http://www.youtube.com/watch?v=8R8QaffNlJw Perimeter Verfolgungstest]
 
#[http://www.youtube.com/watch?v=CftrnetFVYc&feature=youtu.be Test zum Finden und Verfolgen mit L50]
 
#[http://www.youtube.com/watch?feature=player_embedded&v=fjuQViS2rHM Test zum Finden und Verfolgen mit Rotenbach]
 

Aktuelle Version vom 4. Juli 2016, 10:11 Uhr

Zusammenfassung

Eine Begrenzungsschleife (oder Perimeterdraht) ist eine Art 'elektronischer Zaun': er veranlaßt den ArduMower zum Stoppen / Umkehren sobald die Grenze erreicht ist. Nicht in jeder Umgebung ist eine Begrenzungsschleife notwendig.

Das Prinzip: durch den im Garten verlegten Schleifendraht wird ein Signal gesendet, das der Ardumower ausgewertet. Gebraucht werden ein Sender zur Erzeugung und Übergabe des Signals an die Schleife und ein Empfänger zur Signalauswertung im ArduMower.

Und so wird das Signal empfangen: eine Empfangsspule liefert ein Signal, dessen Stärke je nach Abstand zwischen Schleifendraht und Empfangsspule variiert. Interessanterweise wechselt das Signal in dem Moment seine Polarität, wo der ArduMower (genauer: die Empfänger-Spule) den Schleifendraht überfährt.

Begrenzungsschleife

Dies ist die neue Version von Sender und Empfänger für die Begrenzungsschleife (erhältlich über den shop Shopping.png).

Beim Überfahren des Schleifendrahtes passiert nun etwas Interessantes: die Polarität der Signalspannung wechselt von negativ auf positiv bzw. umgekehrt - je nachdem, ob man von innen oder außen kommt. Dadurch werden sowohl das Überfahren selbst als auch der Status (Aufenthalt innerhalb oder außerhalb der Schleife) eindeutig erkennbar. Wie bei der V1 nutzen wir zur Signalverstärkung wieder den Motortreiber für das Ausgangssignal und einen Operationsverstärker für das Eingangssignal von der Empfangsspule. Der Sender übergibt eine digitale Signalfolge (auch als 'pseudo-noise' bezeichnet) an die Schleife, die vom Empfänger über einen software-basierten digitalen Matched-Filter ausgewertet wird. Der Filter liefert als Ergebnis einen Peak: positiv - ArduMower innerhalb oder negativ - ArduMower außerhalb der Begrenzungsschleife.

Prinzipablauf Sender:

  1. Erzeugen des Ausgangssignals durch den Arduino Nano (ca. 3 Khz)
  2. Verstärkung des Ausgangssignals durch den Motortreiber (MC33926), Schleifendrahtenden anstatt eines Motors an den Ausgang anschließen

Prinzipablauf Empfänger:

  1. Eingangssignal per Empfangsspule aufnehmen
  2. Eingangssignal per Operationsverstärker (LM386) verstärken
  3. ADC sampling durch Arduino Mega (mit 9615 Hz)
  4. Signalfilterung and Analyse durch ein digitales Filter (software-basierter Matched-Filter-Algorithmus)
  5. Auswertung des matched filter Ergebnisses (zur Feststellung des Aufenthaltbereiches inner- / außerhalb der Schleife, Schleifenabfahren usw.)

Folgende Bilder erklären den Wechsel der Signalpolarität innerhalb und außerhalb der Schleife. Sie zeigen auch die Richtung der magnetischen Flusslinien, die vom Begrenzungsdraht ausgehen und wie sie die Spule innerhalb und außerhalb der Begrenzungsschleife treffen.

Für ein besseres Verständnis des Filters gibt es den Matched Filter Simulator. Für weitere Informationen zum Filter, schaue Dir auch das Matched Filter Video an. Using a simple symmetric signal (which looks equal on positive and negative side of the zero point), you cannot differentiate between an 'inside perimeter' and 'outside perimeter' signal. When the mower is traversing the perimeter loop, the signal polarity changes (positive becomes negative and negative becomes positive). We want to detect this polarity change of the signal. Using an unsymmetrical signal, you can do this. You can see the difference in the simulator. The default signal (slider 'example signal') is a symmetric signal - press the 'Invert' button to invert the signal (change its polarity). In the correlation result (graph 'Matched filter') the polarity can not be detected. Now use an asymmetrical signal ('pseudonoise5_pw'). Press again 'Invert' to change signal polarity. Now you can see polarity of the signal in the filter output (graph 'Matched filter'). It's the sign of the peak (positive or negative sign).

Sender

Wichtig für Marotronics INA169: Pads verlöten für 5A Betrieb

Ardumower perimeter overview.jpg

Wir benutzen einen Arduino Nano zur Erzeugung und einen Mototreiber als Ausgangsverstärker des Signals. Der Motortreiber wird mit 3,2 kHz betrieben (2 Impulsbreiten 4808 und 2404 Hz). Unser Motortreiber verfügt über eine integrierte Strombegrenzung und eine Übertemperaturabschaltung (z.B. MC33926)

Anschluss der Induktionsschleife erfolgt am MC33926 zwischen M1OUT1 und M1OUT2.

Warning.png Wichtig: Die Schleifenlänge kann im Bereich 20 - 450m betragen und muss mindestens 5 Ohm bzw. darf maximal 12 Ohm Widerstand aufweisen. Die maximal Begrenzungs-Fläche beträgt 1000 m2.

Sendersoftware

Tipp: Wenn Du Dich nie zuvor mit Arduino beschäftigt hast, lies zuerst unsere Einführung 'erste Schritte mit dem Arduino'.

Download: Du findest den Code für den Schleifensender im Ordner 'sender' unter Ardumower Download

Warning.png Wichtig: Vergewissere Dich, dass die Pin-Konfiguration des Arduino im benutzten Code (sender.ino) mit Deinem Senderaufbau übereinstimmt! Falls Dein Arduino Nano sich nicht flashen lässt, schaue bitte hier für ein Treiber-Downgrade.

Einstellen der Sendeleistung

Zum Einstellen der Sendeleistung wie folgt vorgehen:

Warning.png Wichtig: Deine Induktionsschleife sollte mindestens ein Widerstand von 12 Ohm aufweisen. Im Idealfall schaltet man ein 12 Ohm (50W) Lastwiderstand in Reihe. So kommt man dann auf ein Gesamtwiderstand der Begrenzungsschleife die im Bereich von ca 12-15 Ohm liegt.

Die Versorgungsspannung des Motortreibers wird über das Poti des DC/DC-Wandlers zwischen 6.5 bis 12V eingestellt. Die Spannung am DC/DC-Wandler so einstellen, dass nicht mehr als 1 Ampere zum fließen kommt.

Beispiel:

Deine Induktionsschleife hat: 12 Ohm
Deine Eingstellte Spannung am DC/DC-Wandler: 8 Volt

Der verbrauchte Strom und die verbrauchte Leistung ist dann:

Strom: I = U / R = 8 Volt / 12 Ohm => 0,7 Ampere
Verbrauchte Leistung: P = U * I = 8 Volt * 0,7 Ampere => 5,6 Watt

Hochlastwiderstand: Bei einem Schleifenwiderstand kleiner 5 Ohm kann der Strom nicht weiter reduziert werden, indem man die Spannung runterdreht (unterhalb von ca. 6V arbeitet der Motortreiber nicht mehr richtig). Dann hilft nur noch ein zur Schleife in Reihe geschalteter Hochlastwiderstand. Wichtig: der Hochlastwiderstand muss für die Leistung ausgelegt sein! In dem gezeigten Beispiel mit 12 Ohm sollte man also einen 10 Watt Lastwiderstand verwenden.

Weitere Informationen: [1]

Automatische Schleifensignalabschaltung

Während sich der ArduMower in der Ladestation aufhält, wird das Schleifensignal nicht benötigt und wir können Energie sparen. Zum Erkennen des Ladestatus befindet sich auf dem Sender PCB ein Stromsensor (INA169, 5A) zwischen Ladegerät und Ladeanschlüsse.

Zum Aktivieren dieser Funktion ist "#define USE_CHG_CURRENT" auf 1 zu setzen

   #define USE_CHG_CURRENT       1     // use charging current sensor for robot detection? (set to '0' if not connected!)

Sender Diagnose

Die LED auf dem Arduino Nano signalisiert den Senderstatus:

  • An: Perimeterschleife ist angeschlossen und arbeitet
  • Aus: Perimeterschleife ist geöffnet (oder durch Defekt unterbrochen) und arbeitet nicht
  • Blinkt: der ArduMower wird geladen und die Perimeterschleife ist zur Energieeinsparung durch die Software deaktiviert

Bei der Platine "Sender V2" ist dieses Signal am Ausgang "D13" verfügbar und auf die LED "Mover_in_Ladestation" geschaltet.

Um Fehler zu finden bzw. um den Schleifensender besser zu verstehen, öffne mit der Arduino IDE die serielle Konsole (CTRL+SHIFT+M) auf 19200 Baud. Hier ein Beispiel der möglichen Zustände (Roboter in Ladestation/Roboter nicht in Ladestation usw.):

Empfänger

Perimeter v2 receiver circuit.png

Zum Signalempfang verwenden wir eine Spule (100 mH or 150 mH) in aufrechter Position, in der Mitte am vorderen Rand des ArduMower. Sie ist zur Verstärkung des empfangenen Signals mit dem Eigang eines LM386 Operationsverstärkers verbunden. Auf dem LM386 Modul wird der Kondensator C3 überbrückt, damit der Verstärker ein Signal zwischen 0..5V statt im Standardbereich -5V..+5V) liefert. Der Ausgang des LM386 sollte mit dem Arduino Analog-Pin ('pinPerimeterLeft') verbunden werden. Der Analog-Pin 'pinPerimeterRight' wird bei Verwendung des Senders V2 nicht benötigt.

Das Empfänger-Kit ist erhältlich im Shop


Achtung: Die Spule muss direkt an den Verstärkermodul angeschlossen werden. So wird die Störfestigkeit des schwachen Spulensignals gegenüber Einflüssen anderer Komponenten (Motore, DC-DC-Wandler) verbessert.

Wichtig: Die aktuelle Software erfordert das Weglassen des Kondensators 4.7nF in Reihe mit der Spule ('differential signal').


Einstellungen

At first, activate the perimeter in the Ardumower software (pfodApp->Options->Perimeter Use: YES). It is recommended to keep the default perimeter settings.

The perimeter settings are:

  • Timed-out if below smag (timedOutIfBelowSmag) - default setting: 300 | If smag below this value, sender is considered as off (perimeter timeout appears)
  • Timeout (s) if not inside (timeOutSecIfNotInside) - default setting: 8
  • Trigger timeout (perimeterTriggerTimeout) - default setting: 0 | Perimeter outside trigger timeout when escaping from inside (ms)
  • Perimeter out roll time max (perimeterOutRollTimeMax) - default setting: 2000 | Max (random generator) roll time after perimeter out (ms)
  • Perimeter out roll time min (perimeterOutRollTimeMin) - default setting: 750 | Min (random generator) roll time after perimeter out (ms)
  • Perimeter out reverse time (perimeterOutRevTime) - default setting: 2200 | Time to drive reverse after perimeter out (ms)
  • Perimeter tracking roll time (perimeterTrackRollTime) - default setting: 1500 | Hit obstacle while tracking: roll time
  • Perimeter tracking reverse time (perimeterTrackRevTime) - default setting: 2200 | Hit obstacle while tracking: reverse time
  • Transition timeout (trackingPerimeterTransitionTimeOut) - default setting: 2000 | Max. time required for a in/out transition during tracking, robot will start rotating after this timeout
  • Track error timeout (trackingErrorTimeOut) - default setting: 10000 | Max. time required for a in/out transition during tracking, robot will go into error after this time
  • Track_P (perimeterPID.Kp) - default setting:51 | Perimeter PID "P" setting
  • Track_I (perimeterPID.Ki) - default setting:12.5 | Perimeter PID "I" setting
  • Track_D (perimeterPID.Kd) - default setting:0.8 | Perimeter PID "D" setting
  • Use differential signal (useDifferentialPerimeterSignal) - default setting: YES | Use differential signal (see signal section)
  • Swap coil polarity (swapCoilPolarity) - default setting:NO
  • Block inner wheel (trackingBlockInnerWheelWhilePerimeterStruggling) - default setting: YES | robot is wheel-spinning while tracking => roll to get ground again

Abstand Spule/Verstärker zu Motoren

Achte auf die Einhaltung aller Mindestabstände zwischen den folgenden Komponenten:

* Spule zu Radmotor: > 15cm
* Spule zu Mähmotor: > 10cm 
* Spule zu DC-DC Wandler: > 10cm

Signalmessungen

Sender / Spule / LM386 Verstärker Ausgangssignale sollten etwa so aussehen: (witere Details über das Signal s. Abschnitt Signal)

ADC-Kalibrierung am Empfänger

Warning.png Die ADC-Kalibrierung (bei ausgeschaltetem Sender!) sorgt für eine korrekte Erkennung der Nulllinie (Stille), sodass das empfangene Signal später symmetrisch zur Nulllinie angezeigt wird.

  1. Der Perimetersender und die Motoren des ArduMower müssen während der Kalibrierung ausgeschaltet sein!
  2. Wenn eine Störung durch einen anderen Sender nicht zu vermeiden ist, muß während der Kalibrierung die Spule entfernt und der Eingang es LM386 mit GND verbunden werden.
  3. Führe die ADC-Kalibrierung einmal aus ("pfodApp->ADC Calibration")

Nach der korrekt durchgeführten Kalibrierung sollte das Signal per pfodApp Plot ('sig') bei ausgeschaltetem Perimetersender ungefähr als Null angezeigt werden. Nach Einschalten des Perimetersenders sollte das Signal etwa diesselbe positive wie negative Maximalamplitude ('Symmetie zur Nulllinie') aufweisen.

Problemanalyse und Fehlerbehebung am Empfänger

Empfangenes Signal, Filterergebnis und Signalqualität können per Android Handy über die pfodApp->Plot->Perimeter angezeigt werden:

Beschreibung der im Plot angezeigten Signalverläufe:

sig:  Spulensignal (Sequenz der Rohimpulse nach ADC) als kurzer Snapshot (32 samples), Update alle 20 Sekunden 
      (also 20 Sekundenwarten bis zum nächsten Snapshot)
mag:  Filterergebnis: innen (negativ) oder außen (positiv), magnitude: Abstand zur Perimeterschleife / magnetische Signalstärke (RSSI)
      - wird benutzt zum Perimeter verfolgen
smag: Filterergebnis, low-pass-gefiltert, ohne Vorzeichen (geglätteter mag-Verlauf) - verwendet zur Erkennung des 'Sender-aus' Zustandes
      Der Grenzwert kann über die pfodApp gesetzt werden (Settings->Perimeter->Timed-out if below smag)
in:   binäres Ergebnis des low-pass Filters: innerhalb (1) oder außerhalb (0) der Perimeterschleife - wird benutzt zur Erkennung des Perimetergrenzverlaufs
      Ist der ArduMower eine bestimmte Zeit außerhalb der Schleife, geht er in den Fehlerstatus. Diese Zeit kann per pfodApp
      (Settings->Perimeter->Timeout (s) if not inside) eingestellt werden
cnt:  Anzahl der Wechsel von innen nach außen (counter, Zähler)
on:   Perimetersender ist aktiv, Roboter innerhalb und smag ausreichend (1) oder inaktiv/außerhalb/smag zu klein (0)
qty:  Signalqualität (Aussage über die Verläßlichkeit der Erkennung 'innerhalb / außerhalb' aus dem Filterergebnis)
      Verhältnis aus Vergleich mit Mustersignal zu Vergleich mit inversem Mustersignal              
      1.0 bedeutet schlechte Qualität, Du solltest Werte von 1.5 oder höher)

Im Plot soll der 'mag'-Verlauf frei von Spitzen sein: innerhalb der Schleife sollte das Signal eine negative Kurve, außerhalb eine positive Kurve beschreiben. Weist die Kurve Spitzen auf, versuche folgende Maßnahmen zur Fehlerbeseitigung bzw. Optimierung:

  • Verbinde die Empfangsspule mit 'pinPerimeterLeft' auf dem PCB (am falschen Pin könnte das Signal 'etwas schwach' reinkommen)
  • Verringere smag-Mindestwert via 'pfodApp->Options->Perimeter->Timed-out if below smag'
  • Die Spulenpolung kann per pfodApp eingestellt werden (wird 'außen' angezeigt, wenn der Ardumower sich innrhalb der Schleife befindet?). Denselben Effekt hat das Umklemmen der Schleifenenden am Senderausgang.
  • Sollte das Signal schwach erscheinen, überprüfen, ob am Spulenverstärker das Poti "voll aufgedreht" ist! Hilfreich ist die gleichzeitige Anzeige des Signal per pfodApp (Plot --> Perimeter).
  • Die Kabelverbindung zwischen Spule und LM386-Vorverstärker muss möglichst kurz sein - am Besten die Spule direkt am Verstärker anschließen!
  • Halte den Abstand zwische Spule und Motoren sowie DC/DC-Wandlern möglichst groß (30cm oder mehr!)
  • Nutze die magnetische Abschirmwirkung (z.B. Deines Akkus) zwischen Spule und Störquellen.

Weitere Fehlerquellen: [2]

Videos

  1. Perimeter2 Demo
  2. Test 120m Perimeterschleife
  3. Theorie zu Perimeterschleife und Matched Filter (in deutsch)
  4. Sender-PCB
  5. Perimeter Stoptest
  6. Perimeter Verfolgungstest
  7. Test zum Finden und Verfolgen mit L50
  8. Test zum Finden und Verfolgen mit Rotenbach
  9. Magnetfeld Demovideo

Verfolgung der Begrenzungsschleife

Das Abfahren der Schleife wird über einen softwareseitig realisierten digitalen PID-Regler gesteuert. Die Regler-Parameter (P,I,D) können über ein Android-Handy per pfodApp eingestellt werden.

Mehr Informationen über PID-Regler sind hier zu finden: Forum.

Weiterführende Links

  1. Ein anderer Navigationsansatz sind Infrarot-Baken
  2. Mehr Details zum 'matched filter'
  3. Soundkarten-Oszilloskop inklusive 'matched filter'