Perimeter-Schleife: Unterschied zwischen den Versionen

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche
(Einstellen der Sendeleistung)
 
(176 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Abstract=
+
=Zusammenfassung=
Eine Perimeter-Schleife (oder Begrenzungsdraht) ist eine Art 'elektronischer Zaun': er veranlaßt den ArduMower zum Stoppen / Umkehren sobald die Grenze erreicht ist. Nicht in jeder Umgebung ist eine Perimeter-Schleife notwendig - ein Rasensensor könnte 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: im Garten wird ein Schleifendraht verlegt, durch den ein Signal gesendet und vom Ardumower ausgewertet wird. 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. Interessanteweise wechselt das Signal in dem Moment seine Polarität, wo der ArduMower (genauerden Schleifendraht überfährt. Also, something interesting happens when the robot crosses the perimeter loop: the signal changes its polarity, that means positive and negative voltages reverse each other. So, there are two basic principles to detect the perimeter loop. We have implemented both methods (perimeter v1 and v2) which are described below.
+
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 | Perimeter gradient
+
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]
+
 
+
=Perimeter-Schleife 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]]
  
Dies ist die neue Version von Sender und Empfänger für die Perimeter-Schleife (erhältlich über den [https://www.marotronics.de/index.php?k=7 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=7]]).
+
Dies ist die neue Version von Sender und Empfänger für die Begrenzungsschleife (erhältlich über den [https://www.marotronics.de/index.php?k=7 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=7]]).
 
+
Beim Überfahren des Perimeter-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) 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 Ergnis einen Peak: positiv - ArduMower innerhalb der Schleife oder negativ / außerhalb der Begrenzungsschleife.
+
 
+
Principle:
+
# Generate output signal by Arduino Nano
+
# Amplify output signal by motor driver (MC33926), motor driver output connected to the perimeter wire (instead of a motor)
+
# Receive input signal with perimeter coil
+
# Amplify input signal with an operational amplifier (aka opamp - LM386)
+
# ADC sampling using Arduino Mega
+
# Signal filterung and signal detection using a digital filter (software-based matched filter algorithmn)
+
# Evaluation of matched filter output (for perimeter inside/ouside detection, tracking etc.)
+
 
+
The images below explain why the polarity of the received coil signal changes between inside and outside of the perimeter wire. The image shows the direction of the electric flux lines sent out from the perimeter wire and how they hit the coil for both inside and outside position.
+
 
+
<gallery>
+
File: Ardumower_perimeter2.jpg| Inside/outside detection using polarity change
+
File: Fluxdirections.png| Flux directions
+
</gallery>
+
 
+
== Signal ==
+
To receive the perimeter signal everywhere on the lawn, the key is to maximize signal-to-noise ratio (SNR=signal/noise). There are two approaches to maximize SNR:
+
# increase signal strength (power) or
+
# increase the signal length
+
 
+
We use a combination of both. The sender sends a repeating sequence of a digital code ('pseudonoise4_pw') at 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
+
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.
  
'1' means signal a positive pulse, '-1' a negative pulse. Because the shortest signal change generated is '-1,1', the highest generated 'tone' (if you would make this hearable) is 4808 Hz. The longest signal change generated is '1,1,-1,-1', and so the lowest generated 'tone' is 2404 Hz.
+
Prinzipablauf Sender:
 +
# Erzeugen des Ausgangssignals durch den Arduino Nano (ca. 3 Khz)
 +
# Verstärkung des Ausgangssignals durch den Motortreiber (MC33926), Schleifendrahtenden anstatt eines Motors an den Ausgang anschließen
  
The coil only sees 'changes' of the sender signal - so (without using a capacitor in series with the coil) the received signal would be:
+
Prinzipablauf Empfänger:
 +
# Eingangssignal per Empfangsspule aufnehmen
 +
# Eingangssignal per Operationsverstärker (LM386) verstärken
 +
# ADC sampling durch Arduino Mega (mit 9615 Hz)
 +
# 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.)
  
1,0,-1, 0,1,-1,1,-1, 0,1,-1,1,0,-1, 0,1,-1, 0,1,-1, 0,1,0,-1
+
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.
  
However, using a capacitor in series with the coil, the received signal looks like the sender signal again.
+
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: Perimeter_signal_steps.png | Perimeter signal at sender and receiver coil
+
File: Ardumower_perimeter2.jpg| Innen/außen-Erkennung über den Polaritätswechsel
 +
File: Fluxdirections.png| Flussrichtungen
 +
File: Perimeter_signal_steps.png | Perimetersignal an Sender und Empfangsspule
 +
File: Matched_filter_principle.png| Matched filter
 +
File: Perimeter_signal_good_bad.png|What makes a good/bad signal  
 
</gallery>
 
</gallery>
  
The Arduino ADC samples the receiving signal at 9615 Hz.
+
== Sender ==
 +
[[Image:Ina169_marotronics.jpg|thumb|200px| Wichtig für Marotronics INA169: Pads verlöten für 5A Betrieb]]
 +
[[File: Ardumower_perimeter_overview.jpg|600px]]
  
==Filter==
+
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)
The signal chosen has specific characteristic: it does not [http://en.wikipedia.org/wiki/Matched_filter correlate] in parts with itself - only as a whole sequence (because it looks 'random'). Because of this characteristic, the starts of the signal can be detected by a [http://en.wikipedia.org/wiki/Matched_filter matched filter] (aka 'correlation' with the search signal) and they generate a high peak in the matched filter result, even when high noise was added (due to motors etc.). The polarity of the peak (positive or negative) determines if the coil is inside or outside of the perimeter wire.
+
  
You can see how it works: For a better understanding of the perimeter signal and the filter, the matched filter is simulated here:
+
Anschluss der Induktionsschleife erfolgt am MC33926 zwischen M1OUT1 und M1OUT2.  
[http://www.grauonline.de/alexwww/ardumower/filter/filter.html Matched filter simulation]
+
  
# Choose the perimeter signal at the right side (Set slider 'example signals': pseudonoise4_pw).
+
[[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.
# Increase the noise a little bit (Set slider 'noise' to 2).
+
# At the left bottom plot ('Matched filter') you can see that the repeated signal was detected 3 times.
+
# Now simulate moving the coil outside of the perimeter wire. Click on 'Invert' to set amplifcation to '-1'. The matched filter results a negative match.
+
  
See also: [https://www.youtube.com/watch?v=NIer_kITelc Video about the matched filter]
+
* [https://www.marotronics.de/Perimeter-Sender-Board-Prototyp-mit-Platinen-Zubehoer Sender PCB im Shop]
 +
* [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]
  
<gallery>
+
=== Sendersoftware ===
  File: Matched_filter_principle.png| Matched filter
+
  File: Perimeter_signal_good_bad.png|What makes a good/bad signal
+
</gallery>
+
  
==Sender==
+
<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>.
<gallery>
+
File: Schleifensender_Ardumower_V2.JPG | Sender circuit
+
File: Ardumower_sender_pcb.jpg| Ardumower sender PCB
+
File: Perimeter2_sender_open.jpg| Sender signal (6.5V, open perimeter)
+
File: Perimeter2_sender_closed.jpg| Sender signal (6.5V, 120m/7 Ohm closed perimeter)
+
File: Sender_v2_signal_sender_5v_4ohm.png| Sender signal (6.5V, 2m + 4ohm R, closed perimeter)
+
File: perimeter_wiring_motor_driver.png | Perimeter wiring options
+
</gallery>
+
  
We use a motor driver as output amplifier and an Arduino Nano to generate the signal. The motor driver is driven by 3.2 Khz (two pulse widths 4808 Hz and 2404 Hz). With large enough perimeter wires, the circuit typically draws 10W (6.5V, 1.7A). We use a motor driver with integrated current limiting and thermal switch-off (e.g. MC33926). The perimeter wire length should be in the range 20m - 450m and must be at least 5 Ohm.
+
<b>Download</b>:
 +
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]
  
sender circuit:
+
[[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].
  
<blockquote style="background-color: lightgrey; border: solid thin grey;">
+
=== Einstellen der Sendeleistung ===
<pre>
+
Zum Einstellen der Sendeleistung wie folgt vorgehen:
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>
+
  
'''Example of sender implementation on a dot matrix board:  [http://www.braunschweiger.org/content/download/SenderR212.pdf]
+
[[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.
[http://www.braunschweiger.org/content/images/SenderR212_Front.jpg] [http://www.braunschweiger.org/content/images/SenderR212_Back.jpg]'''
+
  
===Sender perimeter lawn size===
+
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.
At an operating voltage of 6.5V, the perimeter wire length should not exceed 450m. For 'kitchen test' a 100 Ohm resistor in series with 5m wire could make the job!
+
  
Assuming an ideal lawn shape (circle shape), we get a lawn radius:
+
Beispiel:  
  radius = length / (2*PI) = 450m / (2*PI) = 70 meter
+
  Deine Induktionsschleife hat: 12 Ohm
 +
Deine Eingstellte Spannung am DC/DC-Wandler: 8 Volt
  
Assuming there is no maximum perimeter radius for good signal quality, the maximum lawn area size (ideal circle shape) would be:
+
Der verbrauchte Strom und die verbrauchte Leistung ist dann:  
  area = PI * (r*r) = PI * (70m * 70m) = 15000 m2
+
  Strom: I = U / R = 8 Volt / 12 Ohm => 0,7 Ampere
 +
Verbrauchte Leistung: P = U * I = 8 Volt * 0,7 Ampere => 5,6 Watt
  
However, assuming there is a maximum perimeter radius for good signal quality of 18m, the maximum lawn area size (ideal circle shape) would be:
+
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.
area = PI * (*r) = PI * (18m * 18m) = 1000 m2
+
  
===Sender current control===
+
Weitere Informationen: [http://wiki.ardumower.de/index.php?title=Der_Perimetersender_ohne_automatische_Regelung]
To change the power (current/voltage) of the sender, you have several options:
+
  
*DC/DC Voltage: The motor driver supply voltage can be changed (6.5-12V via the potentiometer on the DC converter). That's one way to do it and it's the recommended way. NOTE: The minimum voltage (Vin) for the MC33926 motor driver is 5v. If the voltage is lower, the motor driver shuts down sporadically (undervoltage detection-Arduino LED starts to flash).
+
=== 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.
  
*Normal amplitude: Instead of switching the perimter wire between +Vin and -Vin (double amplitude/default), the motor driver can switch it between +Vin and GND (normal amplitude). This will reduce current. To use normal amplitude, comment out the corresponding code line in 'sender.ino':
+
Zum Aktivieren dieser Funktion ist "#define USE_CHG_CURRENT" auf 1 zu setzen
  
  // #define USE_DOUBLE_AMPLTIUDE    1  
+
    #define USE_CHG_CURRENT      1     // use charging current sensor for robot detection? (set to '0' if not connected!)
  
*Power resistor: If your perimeter wire resistance (R) is below 5 Ohms, you will not be able to further reduce voltage below 6.5v (otherwise the Arduino will not work properly). Then you have to increase the perimeter wire resistance (R) by using a power resistor (example: 5 ohm, 10W) in series with your perimeter wire.
+
=== 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
  
@6 volts (Vin): 5 ohm power resistor => I=U/R=6v/5ohm=1.2A  (P=U*I=6v*1.2A=7.2W)
+
Bei der Platine "Sender V2" ist dieses Signal am Ausgang "D13" verfügbar und auf die LED "Mover_in_Ladestation" geschaltet.
  
So, your power resistor should be a 10W type or better. Activate 'normal-amplitude' in sender code (do not use double amplitude).
+
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.):
 
+
===Sender current control (in development)===
+
Idea: Replace poti VR1 by a digital poti (MCP4151-5K) and control LM2596 module output voltage (and so current) via Arduino:
+
  
 
<gallery>
 
<gallery>
File: Lm2596_circuit.jpg | LM2596 module circuit
+
File:Perimeter_sender_console.png|Fehlersuche mit serieller Konsole
 
</gallery>
 
</gallery>
  
MCP4151-5K version:
+
== Empfänger ==
  
Vout = 1.23V*(1+VR1/R1)
+
[[File: Perimeter_v2_receiver_circuit.png|400px]]
  
Using VR1=5K...
+
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.
Vstart (on reset): Vout=1.23V*(1+2.5K/0.33K)=10v
+
Vmax:  Vout=1.23V*(1+5K/0.33K)=19v
+
  
===Sender automatic standby===
+
<gallery>
The sender can be switched off during the time the robot is in the charging station. To detect the robot, a current sensor (ACS712) is connected between the charger and the charging pins.
+
File: Ardumower_chassis_components.png | Position der Perimeterspule
 +
File: Ardumower_coil_position.jpg | Eine zentrierte, aufrecht montierte Spule
 +
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)
 +
</gallery>
  
===Sender software===
+
[https://www.marotronics.de/Schleifenempfaenger-Kit-perimeter-receiver-Kit Das Empfänger-Kit ist erhältlich im Shop]
  
<b>NOTE</b>: If you have never worked with Arduino before, read our <b>[http://wiki.ardumower.de/index.php?title=Arduino_first_steps 'Arduino first steps' introduction]</b>.
 
  
[[File:warning.png]] Note: Always verify that the pin configuration in your Arduino code (sender.ino) matches your actual circuit!
+
'''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.  
  
In the sender.ino you have this option:
+
'''Wichtig''': Die aktuelle Software erfordert das Weglassen des Kondensators 4.7nF in Reihe mit der Spule ('differential signal').
  
* Define if you have connected a charging current sensor for automatic sender standby:  #define USE_CHG_CURRENT 1  (or 0)
 
 
===Sender diagnostics===
 
The perimeter sender status is indicated by the sender LED (Arduino Nano LED):
 
* ON: perimeter wire loop is closed and working
 
* OFF: perimeter wire loop is opened and not working
 
* blinking: robot is charging and perimeter will be switched OFF (energy saving)
 
  
 +
===Einstellungen===
 
<gallery>
 
<gallery>
File:Perimeter_sender_console.png | Perimeter sender console output
+
  File:Cheat_sheet.png | Perimeter settings
 
</gallery>
 
</gallery>
  
===Test sender with your PC's sound card===
+
At first, activate the perimeter in the Ardumower software (pfodApp->Options->Perimeter Use: YES). It is recommended to keep the default perimeter settings.
You can use your sound card to try out the sender with just a coil:
+
  
# Connect a coil (100 mH) to your sound card microphone/line input (max 1V)
+
The perimeter settings are:
# Launch the [http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html web oscilloscope], and choose Filter 'Matched', Frequency '9615' Hz, Visualization Math 'MinMax'
+
# The output signal should reflect the distance to your perimeter loop - the polarity (negative/positive) should indicate the side of the loop (inside/outside)
+
  
Try to move the coil as close as possible to the perimeter loop (for both inside/outside case) (Keep in mind that this is without pre-amplifier, so the signal will be only valid close to the loop - the microphone input cannot be higher than 1V, so we cannot use the pre-amplifier here).
+
* 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
  
<gallery>
+
=== Abstand Spule/Verstärker zu Motoren ===
File:Ardumower_web_oscilloscope_time_signal_received.jpg | Actual received time signal (Filter Off, Time scale: x5)
+
Achte auf die Einhaltung aller Mindestabstände zwischen den folgenden Komponenten:
File:Ardumower_web_oscilloscope_time_signal.jpg | Ideal time signal, generated by sender (Filter Off, Time scale: x5)
+
  * Spule zu Radmotor: > 15cm
File:Ardumower_web_oscilloscope.jpg  | Matched filter signal (Frequency: 9615 Hz, Math: MinMax)
+
  * Spule zu Mähmotor: > 10cm  
File:Perimeter_signal_good_bad.png | What makes a good/bad signal
+
  * Spule zu DC-DC Wandler: > 10cm
</gallery>
+
 
+
[https://www.youtube.com/watch?v=vg5Xg0__66A Video explaining all steps]
+
 
+
==Receiver==
+
 
+
For receiving the signal, we use a coil (100 mH or 150 mH) in upright position (centered at front in robot), connected through a capacitor 4.7nF (only older software versions) to an LM386 operational amplifier (to amplify the received signal). When using the LM386 module, capacitor C3 on the LM386 module should be bypassed (which is needed so that the LM386 generates a signal between 0..5V and not the default range -5V..+5V). The LM386 output pin should be connected to an analog Arduino pin ('pinPerimeterLeft').
+
 
+
<gallery>
+
File: Perimeter_v2_receiver_circuit.png | Receiver circuit and shortened capacitor C3
+
File: Ardumower_chassis_components.png | Perimeter coil position
+
File: Ardumower_coil_position.jpg | One centered, upright coil
+
File: Ardumower_lm386_circuit.png | LM386 module schematics
+
File: Tire_coil_distance.jpg | Tire-coil distance effecting rotation angle
+
File: Coil_motor_layout.png | Two coils (experimental), coil-coil distance rear-driven 12.5cm, front-driven 19cm
+
</gallery>
+
 
+
receiver circuit:
+
 
+
<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>
+
 
+
'''NOTE''': It's recommended to directly mount the coil on the amplifier module. This ensures the 'small signal' of the coil is not distorted by other components (motors, DC/DC converters etc.).
+
 
+
'''Differential signal''': Leave out capacitor 4.7nF in latest software versions (using differential signal).
+
 
+
'''Non-differential signal''': If you use the capacitor 4.7nF to reconstruct the sender signal again (see section signal), the receiver circuit is an oscillation circuit (C and L, and perimeter wire acting as antenna) and everything (C,L,wire length) has to match. Because this makes it difficult to tune, the non-differential signal is not recommended.
+
 
+
===Coil/amplifier-to-motor distances===
+
Ensure all minimum distances to the following components:
+
  * Coil to gear motor: > 15cm
+
  * Coil to mower motor: > 10cm  
+
  * Coil to DC/DC converter: > 10cm
+
  
 
<gallery>
 
<gallery>
  File: Dcdc_noise.jpg | NOTE: Keep away coil/pre-amplifier from DC/DC converters and motors!
+
  File: Dcdc_noise.jpg | Achtung: Halte Spule/Vorverstärker von den DC-DC-Wandlern und Motoren fern
 
</gallery>
 
</gallery>
  
===Signal measurements===
+
=== Signalmessungen ===
The sender / coil / LM386 amplifier outputs should look like this: (for more details about the signal, see section signal above)
+
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 | Perimeter signal at sender, receiver coil, and LM386 (theory)
+
  File: Perimeter_signal_steps.png | Signal am Sender und an Empfangsspule und LM386 (Prinzip)
  File: coil_signal_without_capacitor.png | differential signal/coil signal without capacitor  (5V sender, 5 ohm loop - blue: perimeter, yellow: coil, gray: LM386 amplifier out)
+
  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 output, with DC noise (differential signal/coil without capacitor)
+
  File: Perimeter2_sender_open.jpg| Sendersignal (6.5V, ohne Perimeterschleife)
File: Perimeter2_receiver_coil.jpg | LM386 output (non-differential signal/coil with capacitor, 12V sender, 120m loop)
+
  File: Lm_output_dc_noise.jpg | Schleifen-Empfänger: LM386 Ausgang mit DC Störungen
  File: coil_signal_with_capacitor.png | non-differential signal/coil signal with capacitor (5V sender, 5 ohm loop - gray: perimeter, yellow: coil, blue: LM386 amplifier out)
+
File: Lm_output_motor_noise.jpg | LM386 output, with motor noise (differential signal/coil without capacitor)
+
</gallery>
+
 
+
===Coil and noise measurements===
+
Some coil measurements without amplifier but with noise (motors, DC/DC etc.):
+
<gallery>
+
File: Coil_60k_parallel.jpg | Coil and 60k parallel resistor, without noise (coil background noise Vpp=7 mV)
+
File: Coil_dc_converter_noise.jpg | Coil and 60k parallel resistor, DC converter noise (DC/DC noise Vpp=18 mV)
+
File: Coil_motor_noise.jpg | Coil and 60k parallel resistor, motor noise
+
File: Perimeter2_receiver_coil_pwm.jpg | Coil signal and series 4.7nF capacitor, pulse modulated perimeter signal (not recommended), without noise
+
File: Fft_signal.png | FFT signal
+
File: Fft_motors.png | FFT motors
+
File: Fft_dcdc.png | FFT DC/DC
+
 
</gallery>
 
</gallery>
  
===Receiver ADC calibration===
+
=== ADC-Kalibrierung am Empfänger ===
[[File:warning.png]] The ADC calibration ensures that the zero point (silence) is detected correctly, and so later the received signal is symmetric around zero.
+
[[File: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.
# The perimeter sender and robot motors must be switched off during calibration!
+
# Der Perimetersender und die Motoren des ArduMower müssen während der Kalibrierung ausgeschaltet sein!
# If you cannot avoid that another sender is disturbing during calibration, remove the coil during calibration (connect LM386 input line to GND)
+
# 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.
# Run the ADC calibration once ("pfodApp->ADC Calibration")
+
# Führe die ADC-Kalibrierung einmal aus ("pfodApp->ADC Calibration")
  
When calibrated correctly, the signal in the pfodApp plot ('sig') should be around zero (0) when the perimeter sender is switched off. When the perimeter sender is switched on, the plotted signal ('sig') should have the same maximum amplitude for both positive and negative axis (is 'symmetric around zero').
+
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.
  
 
<gallery>
 
<gallery>
  File: perimeter_v2_sig_symmetric.jpg | symmetric signal when sender is on (after ADC calibration)
+
  File: perimeter_v2_sig_symmetric.jpg | symmetrisches Signal bei eingeschaltetem Sender (nach ADC-Kalibrierung)
  File: perimeter_v2_sender_off.jpg | zero signal when sender is off (after ADC calibration)
+
  File: perimeter_v2_sender_off.jpg | Nullsignal bei ausgeschaltetem Sender (nach ADC-Kalibrierung)
 
</gallery>
 
</gallery>
  
===Receiver diagnostics/troubleshooting===
+
=== Problemanalyse und Fehlerbehebung am Empfänger ===
  
The receiver signal, filter result and signal quality can be monitored via Android phone (pfodApp->Plot->Perimeter):
+
Empfangenes Signal, Filterergebnis und Signalqualität können per Android Handy über die pfodApp->Plot->Perimeter angezeigt werden:
  
 
<gallery>
 
<gallery>
  File: Perimeter_snr.png | Signal-to-noise ratio (SNR)
+
  File: Perimeter_snr.png | Signal-Rausch-Verhältnis (SNR)
  File: Perimeter_signal_38khz.png | signal, filter result, LP filter result, inside/outside, counter, on/off, quality
+
  File: Perimeter_signal_38khz.png | Signal, Filterergebnis, LP Filterergebnis, innen/außen, Ereigniszähler, Signal ein/aus, Signalqualität
  File: Perimeter_plot_moving_from_inside_to_outside.png | Moving from inside to outside
+
  File: Perimeter_plot_moving_from_inside_to_outside.png | Fahren von innen nach außen
 
  File: Perimeter_v2_plot.png
 
  File: Perimeter_v2_plot.png
 
  File: Perimeter_v2_plot_new.png
 
  File: Perimeter_v2_plot_new.png
Zeile 301: Zeile 201:
 
</gallery>
 
</gallery>
  
Plot signal description:
+
Beschreibung der im Plot angezeigten Signalverläufe:
  sig:  coil signal (raw pulse sequence after ADC) - it's a short snapshot (32 samples), and it's taken every 20 seconds
+
  sig:  Spulensignal (Sequenz der Rohimpulse nach ADC) als kurzer Snapshot (32 samples), Update alle 20 Sekunden
       (so you need to wait 20 seconds for the next snapshot)
+
       (also 20 Sekundenwarten bis zum nächsten Snapshot)
  mag:  filter result: inside (negative) or outside (positive), magnitude: distance to perimeter wire/magnetic signal strength (RSSI)
+
  mag:  Filterergebnis: innen (negativ) oder außen (positiv), magnitude: Abstand zur Perimeterschleife / magnetische Signalstärke (RSSI)
       - this is used for <b>perimeter tracking</b>
+
       - wird benutzt zum <b>Perimeter verfolgen</b>
  smag: filter result, low-pass filtered, without sign (smooth mag) - this is used for <b>'sender-off' detection</b>
+
  smag: Filterergebnis, low-pass-gefiltert, ohne Vorzeichen (geglätteter mag-Verlauf) - verwendet zur Erkennung des <b>'Sender-aus' Zustandes</b>
       The threshold can bet set via pfodApp (Settings->Perimeter->Timed-out if below smag)
+
       Der Grenzwert kann über die pfodApp gesetzt werden (Settings->Perimeter->Timed-out if below smag)
  in:  binary result, low-pass filtered: inside (1) oder outside (0) - this is used for <b>perimeter boundary detection</b>
+
  in:  binäres Ergebnis des low-pass Filters: innerhalb (1) oder außerhalb (0) der Perimeterschleife - wird benutzt zur <b>Erkennung des Perimetergrenzverlaufs</b>
       If the robot is not inisde for a certain time, it will go into error. The threshold can bet set via pfodApp
+
       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)
+
       (Settings->Perimeter->Timeout (s) if not inside) eingestellt werden
  cnt:  number of "inside-outside" transitions (counter)
+
  cnt:  Anzahl der Wechsel von innen nach außen (counter, Zähler)
  on:  perimeter sender active (1) or inactive (0), evaluation based on smag result
+
  on:  Perimetersender ist aktiv, Roboter innerhalb und smag ausreichend (1) oder inaktiv/außerhalb/smag zu klein (0)
  qty:  <b>signal quality</b> (how distinguisable inside and outside were in filter result
+
  qty:  <b>Signalqualität</b> (Aussage über die Verläßlichkeit der Erkennung 'innerhalb / außerhalb' aus dem Filterergebnis)
       computes ratio:  match score with template signal / match score with inverse template signal              
+
       Verhältnis aus Vergleich mit Mustersignal zu Vergleich mit inversem Mustersignal              
       1.0 means poor quality, you should get 1.5 or higher)
+
       1.0 bedeutet schlechte Qualität, Du solltest Werte von 1.5 oder höher)
  
The 'mag' plot should be clear (without spikes): Inside the perimeter loop, the signal should be a clear negative curve, outside it should be a clear positive curve. If your 'mag' curve is not clear (and has spikes), try to troubleshoot/optimize:
+
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:
  
* Always test using long, correctly rolled-off perimeter wire (20m or longer) - Never use unrolled or too short perimeter wire. For 'kitchen test' a 100 Ohm resistor in series with 5m wire @ 5V could make the job
+
* Verbinde die Empfangsspule mit 'pinPerimeterLeft' auf dem PCB (am falschen Pin könnte das Signal 'etwas schwach' reinkommen)
* Verify, your coil is connected correctly at 'pinPerimeterLeft' (you still may get a poor signal when connected at a wrong Arduino pin!)
+
* Verringere smag-Mindestwert via 'pfodApp->Options->Perimeter->Timed-out if below smag'  
* Reverse coil if the in/out is inverted or reverse the perimeter wire
+
* 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.
* Minimize cable length between coil and LM386-pre-amplifier (directly mount coil onto pre-amplifier)
+
* 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).
* Increase distance between coil and mower motor/DC converter (move away coil 30cm or more from any motors or DC converters)
+
* Die Kabelverbindung zwischen Spule und LM386-Vorverstärker muss möglichst kurz sein - am Besten die Spule direkt am Verstärker anschließen!
* Add some magnetic shield (e.g. your battery) between coil and motors/DC converter
+
* Halte den Abstand zwische Spule und Motoren sowie DC/DC-Wandlern möglichst groß (30cm oder mehr!)
* Adjust voltage of sender: increase voltage (sender DC converter potentiometer) for for longer perimeter (>80m), decrease (sender potentiometer) for shorter perimeter (>25m)
+
* Nutze die magnetische Abschirmwirkung (z.B. Deines Akkus) zwischen Spule und Störquellen.
* While motors are running, try to tilt coil slightly to one side so that 'qty' curve increases
+
  
==Measurements==
+
Weitere Fehlerquellen:
 +
[http://wiki.ardumower.de/index.php?title=Der_Perimetersender_ohne_automatische_Regelung]
  
For your reference, here are some outdoor measurements of different sender/receiver/perimeter loop combinations:
+
=== Videos ===
 +
#[http://www.youtube.com/watch?v=FL6K98B2Zsk&feature=player_detailpage#t=265 Perimeter2 Demo]
 +
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M Test 120m Perimeterschleife]
 +
#[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]
 +
#[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]
  
1) 120m (0.7mm^2), R=4 Ohm, 6.5V, coil Vpp 20mV
+
= Verfolgung der Begrenzungsschleife =
Noise (max): smag=192
+
Signal (min): smag=254
+
SNR=Signal/Noise=254/192=1.3
+
  
2) 30m (0.7mm^2), R=1.0 Ohm (+4 Ohm series R), 6.5V, coil Vpp 120 mV
+
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.
Noise (max): smag=192
+
Signal (min): smag=896
+
SNR=Signal/Noise=896/192=4.6
+
 
+
===Videos===
+
#[http://www.youtube.com/watch?v=FL6K98B2Zsk&feature=player_detailpage#t=265 Perimeter2 demo]
+
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M 120m perimeter wire test]
+
#[https://www.youtube.com/watch?v=NIer_kITelc Perimeter wire and matched filter theory (German)]
+
#[https://www.youtube.com/watch?v=VxJN2xb55dU&feature=youtu.be Sender PCB]
+
 
+
=Tracking of perimeter=
+
 
+
The tracking of the perimeter wire is performed using a (software) digital PID controller. The controller's parameters (P,I,D) can be configured via the phone (pfodApp).
+
  
 
<gallery>
 
<gallery>
Zeile 356: Zeile 249:
 
</gallery>
 
</gallery>
  
You can find more information about PID controllers here:  
+
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 fusion=
+
= Weiterführende Links =
The perimeter magnetic field could be used as input for a [http://wiki.ardumower.de/index.php?title=Sensor_fusion robot position estimation].
+
#[http://www.ardumower.de/index.php/en/forum/schleifensensoren-generator/83-ir-bake-generator-empfaenger-diy Ein anderer Navigationsansatz sind Infrarot-Baken]
 
+
#[http://grauonline.de/wordpress/?page_id=364 Mehr Details zum 'matched filter']
=Further links=
+
#[http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html Soundkarten-Oszilloskop inklusive 'matched filter']
#[http://www.ardumower.de/index.php/en/forum/schleifensensoren-generator/83-ir-bake-generator-empfaenger-diy Another idea for navigation are infrared landmarks]
+
#[http://grauonline.de/wordpress/?page_id=364 More details about the matched filter]
+
#[http://www.grauonline.de/alexwww/ardumower/oscilloscope/oscilloscope.html Sound card oscilloscope including matched filter]
+
 
+
 
+
 
+
=Perimeter v1 (for old v0.9.3 code, not recommended)=
+
 
+
This was the first version of our perimeter sender and receiver. It has some drawbacks (orientation issues, no sender-off detection, no inside/outside state detection), so it's not recommended to build it anymore. Use the second version (v2) of our perimeter sender and receiver further below.
+
 
+
==Sender==
+
You can use the sender of a commercial lawn robot (the sender shown here is compatible with Tianchen or Rotenbach robot mowers), or you build one yourself.
+
 
+
So, here's the sender:
+
 
+
An Arduino (e.g. Nano) generates a square signal that is used to switch the direction of a motor driver (L298N) at 7.8 Khz. Thereby, the motor driver will switch the output between VCC and GND. A resonator circuit amplifies the signal spikes as it's dimensioned so that its resonation frequency is the same as the switching frequency (7.8 Khz). That way, the motor drive only needs to be operated at 5V (instead of 12V). The power supply should be able to supply 2W (400mA at 5V). One part of the signal is captured by the Arduino (ADC) through a diode and a voltage divider. This allows to detect if the perimeter loop is connected or not. A 150 mA current will flow through in the perimeter wire (wire cross section 2-3 mm^2) - the wire should not be longer than 500m.
+
 
+
<gallery>
+
File: Arduino_perimeter_sender.png ‎
+
</gallery>
+
 
+
Because it's sometimes difficult to find a specific coil, here are possible combinations (coil / capacitor) you can use (all will have a resonation frequency of 7.8 Khz):
+
*Combination 1: Coil: 160µH, Capacitor: 3,3µF/50V  (tested)
+
*Combination 2: Coil 33mH, Capacitor: 12nF (not tested)
+
 
+
====Power supply====
+
It is recommended to use a voltage step-down converter (e.g. module using LM2596) to generate the 5V voltage. Before connecting, set the voltage of the converter to 5V.
+
 
+
'''Warning''' : never connect more than 5V on the Arduino 5V pins, or you will damage the Arduino. Therefore, always measure the 5V voltage before connecting it to the Arduino 5V pin!
+
 
+
====Functional test====
+
1. After uploading the code and connecting the perimeter wire, the Arduino LED should be ON. Now remove the perimeter wire -  the Arduino LED should go OFF.
+
2. If that doesn't work: Using a voltmeter, measure once at Arduino pin D9 and once at motor driver output pin (OUT_1) against ground - both should have a DC voltage of 2.5 Volt.
+
3. If you have an oscilloscope, replace the perimeter wire by the oscilloscope. The measured signal look like below:
+
 
+
The output signal shows a higher amplitude (high spikes) as the input signal:
+
 
+
<gallery>
+
File: Perimetersignal.jpg|signal on the sender output
+
File: Ardumower_perimeter_sender_schematics.png|resonator circuit basic principle
+
File: Arduino_perimeter_sender_photo.jpg
+
</gallery>
+
 
+
For a simple receiver test, you can simply connect the receiver coil to an oscilloscope. The measured oscilloscope signal should look like below:
+
 
+
This signal can be detected easily with a coil:
+
 
+
<gallery>
+
File: Coilsignal.jpg|coil signal at receiver coil
+
File: Fft.jpg|signal in frequency spectrum, superposed by motor noise
+
File: Ardumower_perimeter_spectrum_plot.jpg| frequency spectrum via pfodApp
+
</gallery>
+
 
+
==Receiver==
+
The receiver uses 2 coils mounted left and right in the robot. The signal strenght of left and right coils is evaluated to be able to compare them.
+
 
+
Principle:
+
# Amplification of alternating signal using OPAMP
+
# Optional: Bandpass-filtering to filter-out noise caused by motors etc.
+
# Evaluation of signal strength of left and right coil
+
 
+
Advantage of this version: analog controlling works great.
+
Disadvantage: You cannot detect, where you are (inside/outside) if your missed the perimter crossing. Also, you cannot detect if you drive clockwise or anti-clockwise on the perimeter wire.
+
 
+
<gallery>
+
File: Arduino_perimeter_receiver.png
+
</gallery>
+
 
+
A coil receives the sender's signal. A resonator circuit (LC) amplifies the received signal at resonation frequency (7.8 kHz). Then the signal is amplified using an LM386 (here: Arduino sound sensor using coil instead of microphone). A bandpass-filter  (digital filter, FFT) on the Arduino filters the desired frequency (7.8 Khz) and outputs a PWM signal (pulse width is proportional to signal strength). A lowpass-filter converts it to a DC voltage.
+
Note: Wiring between Nano and Mega has been simplified - see schematics for exact wiring.
+
 
+
We have tested the following combinations of amplifier und coils:
+
 
+
'Arduino sound sensor'
+
<gallery>
+
File: Soundsensor.jpg| Amplifying signal using LM386 - Arduino Sound Sensor using coil instead microphone
+
File: YwRobot_Sensor.jpg |Arduino Sound Sensor using LM386
+
File: YwRobot_circuit.png |Arduino Sound Sensor module schematics
+
File: Coil_85mh.jpg|85 mH coils
+
</gallery>
+
 
+
LM386 amplifier
+
<gallery>
+
File: Lm386_amplifier.jpg| LM386 amplifier (200x amplification)
+
File: Lm386_modified.jpg| LM386 amplifier modified
+
File: Ardumower_lm386_circuit.png | LM386 module schematics
+
File: Coil_small.jpg| 104 mH coil
+
</gallery>
+
 
+
Important: When using this amplifier, capacitor C3 should be bypassed (will give a VCC/2 offset required for Arduino) and the coil will be connected to "IN" and "GND".
+
 
+
'''NOTE''': It's recommended to directly mount the coil on the amplifier module. This ensures the 'small signal' of the coil is not distorted by other components (motors etc.)
+
 
+
===Functional test===
+
# Make sure that the sender works correctly (see further above).
+
# Increase the Arduino Sound Sensor potentiometer to maximum (rotate counter-clock-wise).
+
# After uploading the code, move one coil towards the perimeter wire. The Arduino LED should start to blink. Now, hold both coils at same distance over the perimeter wire. The Arduino LED should be always ON now.
+
# If that doesn't work, open the serial console (19200 baud), and verify the signal values.
+
 
+
===Choice for coil===
+
Induction math, only approximation:
+
 
+
L = 1nH x n² x ((D² / mm² ) / (l / mm))
+
l = coil length
+
D = coil diameter
+
 
+
Example: An inductance of 85 mH, and diamter of 10 mm, and length of 40 mm require about  5830 windings.
+
 
+
This inductance of 85 mH and a capacity of 4.7 nF results in a resonation frequency of 7963 Hz.
+
 
+
f0 = 1 / (2 * PI * sqrt(L * C)) = 1 / (2 * PI * sqrt(0.085 H * 0.0000000047 F)) =  7963 Hz
+
 
+
Because it's sometimes difficult to find a specific coil, here are possible combinations (coil / capacitor) you can use (all will have a resonation frequency of 7.8 Khz):
+
Combination 1: Coil: 85mH, Capacitor: 4.7nF  (tested)
+
Combination 2: Coil 104mH, Capacitor: 4nF (tested)
+
 
+
===Arrangement of coils===
+
The coils are arranged at the bottom of the robot, about 90 degress to each other, both turned 45 degress.
+
<gallery>
+
File: Ardumower_spulen.jpg| Arrangement of coils
+
File: L50_coils.jpg |Example (Ambrogio L50)
+
File: L50_parcours.jpg |Test parcours
+
</gallery>
+
 
+
===Measurements of signal strength===
+
To compare measurements, the signal strength has been determined at several distances. The signal strength (i.e. the calculated ADC value) is shown in the Android pfodApp. The distance (cm) is the length calculated from the perimeter loop until the coil (coil built-in the robot).
+
 
+
<gallery>
+
File: Perimeter_plot.png
+
</gallery>
+
 
+
===Layout of the wire===
+
 
+
It's important that the wire layout is round and does not have corners! Let's assume that the wire has a corner, and the robots drives exactly over the corner, it will not be able to detect the wire as both wire and coils are aligned.
+
 
+
<gallery>
+
File: Schleifen_blind.jpg  | Not recommened: robot cannot detect sharp edges!
+
File: Ardumower_coil_signal.png| How does the signal change when rotating the coil?
+
</gallery>
+
 
+
===Videos===
+
#[http://www.youtube.com/watch?v=FGaUSg-uUxk Perimeter stop test]
+
#[http://www.youtube.com/watch?v=8R8QaffNlJw Perimeter tracking test]
+
#[http://www.youtube.com/watch?v=CftrnetFVYc&feature=youtu.be Finding and tracking test L50]
+
#[http://www.youtube.com/watch?feature=player_embedded&v=fjuQViS2rHM Finding and tracking test 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'