<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.ardumower.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StefanM</id>
		<title>www.wiki.ardumower.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.ardumower.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=StefanM"/>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Spezial:Beitr%C3%A4ge/StefanM"/>
		<updated>2026-10-14T08:15:10Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Perimeter_wire&amp;diff=758</id>
		<title>Perimeter wire</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Perimeter_wire&amp;diff=758"/>
				<updated>2014-10-05T18:45:47Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Perimeter v2 (for SVN version, recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
A perimeter wire (or buried wire fence, BWF) is like a 'virtual fence': it stopps the robot when it reaches its boundaries. A perimeter is not always necessary for all surroundings (a lawn sensor might be an alternative).&lt;br /&gt;
&lt;br /&gt;
Principle idea: You will install a perimeter loop (a wire) in your garden through which a signal is sent and this signal is detected by the robot. So, you'll need: a sender (to transmit the on the wire) and a receiver (to detect the signal in the robot).&lt;br /&gt;
&lt;br /&gt;
How is the signal detected?  The signal is detected by one (or two) receiver coils. The closer the distance between coil and perimeter loop, the higher the signal. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower perimeter.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Perimeter v1 (for old v0.9.3 code, not recommended)=&lt;br /&gt;
&lt;br /&gt;
==Sender==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
So, here's the sender:&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_perimeter_sender.png ‎&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
*Combination 1: Coil: 160µH, Capacitor: 3,3µF/50V  (tested)&lt;br /&gt;
*Combination 2: Coil 33mH, Capacitor: 12nF (not tested)&lt;br /&gt;
&lt;br /&gt;
====Power supply====&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
====Functional test====&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
3. If you have an oscilloscope, replace the perimeter wire by the oscilloscope. The measured signal look like below:&lt;br /&gt;
&lt;br /&gt;
The output signal shows a higher amplitude (high spikes) as the input signal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimetersignal.jpg|signal on the sender output &lt;br /&gt;
File: Ardumower_perimeter_sender_schematics.png|resonator circuit basic principle&lt;br /&gt;
File: Arduino_perimeter_sender_photo.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a simple receiver test, you can simply connect the receiver coil to an oscilloscope. The measured oscilloscope signal should look like below:&lt;br /&gt;
&lt;br /&gt;
This signal can be detected easily with a coil:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Coilsignal.jpg|coil signal at receiver coil&lt;br /&gt;
File: Fft.jpg|signal in frequency spectrum, superposed by motor noise&lt;br /&gt;
File: Ardumower_perimeter_spectrum_plot.jpg| frequency spectrum via pfodApp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Receiver==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Principle:&lt;br /&gt;
# Amplification of alternating signal using OPAMP&lt;br /&gt;
# Optional: Bandpass-filtering to filter-out noise caused by motors etc.&lt;br /&gt;
# Evaluation of signal strength of left and right coil&lt;br /&gt;
&lt;br /&gt;
Advantage of this version: analog controlling works great.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_perimeter_receiver.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Note: Wiring between Nano and Mega has been simplified - see schematics for exact wiring.&lt;br /&gt;
&lt;br /&gt;
We have tested the following combinations of amplifier und coils:&lt;br /&gt;
&lt;br /&gt;
'Arduino sound sensor'&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Soundsensor.jpg| Amplifying signal using LM386 - Arduino Sound Sensor using coil instead microphone&lt;br /&gt;
File: YwRobot_Sensor.jpg |Arduino Sound Sensor using LM386&lt;br /&gt;
File: YwRobot_circuit.png |Arduino Sound Sensor schematics&lt;br /&gt;
File: Coil_85mh.jpg|85 mH coils&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LM386 amplifier&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Lm386_amplifier.jpg| LM386 amplifier (200x amplification)&lt;br /&gt;
File: Lm386_modified.jpg| LM386 amplifier modified&lt;br /&gt;
File: Lm386_circuit.png| LM386 circuit &lt;br /&gt;
File: Coil_small.jpg| 104 mH coil&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;IN&amp;quot; and &amp;quot;GND&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''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.)&lt;br /&gt;
&lt;br /&gt;
===Functional test===&lt;br /&gt;
# Make sure that the sender works correctly (see further above).&lt;br /&gt;
# Increase the Arduino Sound Sensor potentiometer to maximum (rotate counter-clock-wise).&lt;br /&gt;
# 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.&lt;br /&gt;
# If that doesn't work, open the serial console (19200 baud), and verify the signal values.&lt;br /&gt;
&lt;br /&gt;
===Choice for coil===&lt;br /&gt;
Induction math, only approximation:&lt;br /&gt;
&lt;br /&gt;
L = 1nH x n² x ((D² / mm² ) / (l / mm))&lt;br /&gt;
l = coil length&lt;br /&gt;
D = coil diameter&lt;br /&gt;
&lt;br /&gt;
Example: An inductance of 85 mH, and diamter of 10 mm, and length of 40 mm require about  5830 windings.&lt;br /&gt;
&lt;br /&gt;
This inductance of 85 mH results in a capacity of 4.7 nF and a resonation frequency of 7963 kHz.&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
Combination 1: Coil: 85mH, Capacitor: 4.7nF  (tested)&lt;br /&gt;
Combination 2: Coil 104mH, Capacitor: 4nF (tested) &lt;br /&gt;
&lt;br /&gt;
===Arrangement of coils===&lt;br /&gt;
The coils are arranged at the bottom of the robot, about 90 degress to each other, both turned 45 degress.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_spulen.jpg&lt;br /&gt;
File: L50_coils.jpg |Example (Ambrogio L50)&lt;br /&gt;
File: L50_parcours.jpg &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Measurements of signal strength===&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimeter_plot.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Layout of the wire===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Schleifen_blind.jpg  | Not recommened: robot cannot detect sharp edges!&lt;br /&gt;
File: Ardumower_coil_signal.png| How does the signal change when rotating the coil?&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Videos===&lt;br /&gt;
#[http://www.youtube.com/watch?v=FGaUSg-uUxk Perimeter stop test]&lt;br /&gt;
#[http://www.youtube.com/watch?v=8R8QaffNlJw Perimeter tracking test]&lt;br /&gt;
#[http://www.youtube.com/watch?v=CftrnetFVYc&amp;amp;feature=youtu.be Finding and tracking test L50]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=fjuQViS2rHM Finding and tracking test Rotenbach]&lt;br /&gt;
&lt;br /&gt;
=Perimeter v2 (for SVN version, recommended)=&lt;br /&gt;
&lt;br /&gt;
While crossing the perimeter loop, something interesting happens: signal changes polarity, that means negative and positive voltages reverse each other. By using this principle, crossing the perimeter wire will be detected. The robot knows its current perimeter state all the time (inside/ouside). As with perimeter v1, we will again use a motor driver to generate the signal and an operation amplifier to amplify the received signal.&lt;br /&gt;
&lt;br /&gt;
Principle:&lt;br /&gt;
# Amplify perimeter coil signal using OPAMP&lt;br /&gt;
# ADC sampling using Arduino&lt;br /&gt;
# Signal filterung and detection using a digital filter (Matched filter algorithmn).&lt;br /&gt;
# Evaluation of filter output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_perimeter2.jpg| Inside/outside detection using polarity change&lt;br /&gt;
File: Perimeter_sampling.png | ADC sampling and bit coding by pulse width&lt;br /&gt;
File: Schleifensender_Ardumower_V2.JPG | Sender circuit&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simulation==&lt;br /&gt;
For a better understanding of the perimeter signal and the filter, the signal shape and the matched filter is simulated here: &lt;br /&gt;
[http://www.grauonline.de/alexwww/ardumower/filter/filter.html Matched filter simulation]&lt;br /&gt;
&lt;br /&gt;
You can see how it works:&lt;br /&gt;
# Choose the perimeter signal at the right side (Set slider 'example signals': pseudonoise4_pw).&lt;br /&gt;
# Increase the noise a little bit (Set slider 'noise' to 2).&lt;br /&gt;
# At the left bottom plot ('Matched filter') you can see that the repeated signal was detected 3 times.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
==Sender==&lt;br /&gt;
The motor driver is driven by 3.2 Khz (two pulse widths 4.8 Khz and 2.4 Khz). The circuit draws max. 20W (12V, 1.7A). We use a motor driver with integrated current limiting and thermal switch-off (e.g. MC33926).&lt;br /&gt;
&lt;br /&gt;
sender circuit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 motor driver M1OUT1     o---------- perimeter loop (20-450 meters)--+&lt;br /&gt;
                                                                     |&lt;br /&gt;
 motor driver M1OUT2     o---------- perimeter loop -----------------+&lt;br /&gt;
 motor driver Vin        o-- 12V&lt;br /&gt;
 motor driver M1IN1      o-- Arduino Nano pinIN1&lt;br /&gt;
 motor driver M1IN2      o-- Arduino Nano pinIN2&lt;br /&gt;
 motor driver M1PWM_nD2  o-- Arduino Nano pinPWM&lt;br /&gt;
 motor driver M1nSF      o-- Arduino Nano pinFault&lt;br /&gt;
 motor driver M1FB       o-- Arduino Nano pinFeedback&lt;br /&gt;
 motor driver EN         o-- Arduino Nano pinEnable&lt;br /&gt;
 motor driver VDD        o-- Arduino +5V&lt;br /&gt;
 motor driver M1D1       o-- GND (via Jumper)&lt;br /&gt;
 motor driver SLEW       o-- VDD (via Jumper)&lt;br /&gt;
 &lt;br /&gt;
               |---------o-- GND&lt;br /&gt;
 Potentiometer 100k -----o-- Arduino Nano pinPot&lt;br /&gt;
               |---------o-- Arduino +5V&lt;br /&gt;
 &lt;br /&gt;
 ACS712-05 OUT ------o-- Arduino Nano pinChargeCurrent    &lt;br /&gt;
 ACS712-05 A   ------o-- charging pin (+)&lt;br /&gt;
 ACS712-05 B   ------o-- battery charger +24V&lt;br /&gt;
 battery charger GND-o-- charging pin (-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
In the sender.ino you have two Options&lt;br /&gt;
&lt;br /&gt;
#define USE_POT for adjust if use an Poti to adjust the Power Out of the Perimter&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
#define USE_CHG_CURRENT if you set it to 1 the Perimter shuts off while the Mower is Charging, if the Charger is not &lt;br /&gt;
connected set to 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Example of sender implementation on a dot matrix board:  [http://www.braunschweiger.org/content/download/SenderR212.pdf] &lt;br /&gt;
[http://www.braunschweiger.org/content/images/SenderR212_Front.jpg] [http://www.braunschweiger.org/content/images/SenderR212_Back.jpg]'''&lt;br /&gt;
&lt;br /&gt;
Using a current sensor (ACS712-05) it can be detected if the robot has reached the charging pins - this allows to switch off the perimeter during charging.&lt;br /&gt;
&lt;br /&gt;
Using a potentiometer, the max. current can be set. In the Arduino software, first set IMAX pot to zero (0), and place robot in the center of the garden. Now, slowly increase IMAX pot, until 'sig' in the pfodApp plot (&amp;quot;Plot-&amp;gt;Perimeter&amp;quot;) increases (wait 10 seconds). Where 'sig' reaches its maximum, keep IMAX pot setting.&lt;br /&gt;
&lt;br /&gt;
How the signal looks when perimeter wire loop is open:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimeter2_sender_open.jpg| Sender signal (open perimeter)&lt;br /&gt;
File: Perimeter_sender_box.jpg| Sender box (example)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Receiver==&lt;br /&gt;
&lt;br /&gt;
We use a coil in upright position (centered at front in robot), connected to &amp;quot;pinPerimeterLeft&amp;quot;. When using the LM386 amplifier, capacitor C3 should be bypassed (will give a VCC/2 offset required for Arduino) and the coil will be connected to &amp;quot;IN&amp;quot; and &amp;quot;GND&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The signal output of LM386 should look like this. For more details, see signal &amp;quot;pseudonoise4_pw&amp;quot; in the simulator applet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt; &lt;br /&gt;
 File: Ardumower one center coil.jpg| One centered, upright coil &lt;br /&gt;
 File: Perimeter2_receiver_coil.jpg| Perimeter signal &lt;br /&gt;
 File: Perimeter2_receiver_coil_pwm.jpg| Pulse modulated perimeter signal &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
receiver circuit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      LM386 IN  o------- capacitor 4,7nF ----------- coil 100 mH&lt;br /&gt;
 Arduino pinPerimeterLeft   o------o  LM386 OUT&lt;br /&gt;
                                      LM386 GND o----------------------------------- coil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''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.)&lt;br /&gt;
&lt;br /&gt;
===Flux directions ===&lt;br /&gt;
This image explains 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Fluxdirections.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ADC calibration===&lt;br /&gt;
Note: Run the ADC calibration once (&amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
The Perimeter Transmiter must be off while Calibration.&lt;br /&gt;
&lt;br /&gt;
===Diagnostics===&lt;br /&gt;
&lt;br /&gt;
Sender status LED (Arduino LED):&lt;br /&gt;
* ON: perimeter wire loop is closed and working&lt;br /&gt;
* OFF: perimeter wire loop is opened and not working&lt;br /&gt;
* blinking: robot is charging and perimeter will be switched OFF (not working)&lt;br /&gt;
&lt;br /&gt;
Signal quality can be monitored via pfodApp - Example plots (pfodApp)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
 File: PerimeterV2screenshot.png &lt;br /&gt;
 File: Ardumower_perimeter2_test.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot signal description:&lt;br /&gt;
 sig:  coil signal&lt;br /&gt;
 mag:  filter result (inside: negative / outside: positive , strengh: distance to perimeter wire)&lt;br /&gt;
 smag: low-pass filtered without sign (smooth mag)&lt;br /&gt;
 in:   inside (1) oder outside (0)&lt;br /&gt;
 cnt:  number of &amp;quot;inside-outside&amp;quot; transitions (counter)&lt;br /&gt;
 on:   perimeter sender active (1) or inactive (0)&lt;br /&gt;
&lt;br /&gt;
The 'mag' plot should be clear: Inside the perimeter loop, the signal should be a negative curve, outside it should be a positive curve. If your 'mag' curve is not clear, try to optimize:&lt;br /&gt;
&lt;br /&gt;
* Adjust sender potentiometer (IMAX): for longer perimeter (&amp;gt;80m) increase, for shorter perimeter (&amp;gt;25m) decrease IMAX&lt;br /&gt;
* Minimize cable length between coil and LM386-amplifier (omit cables)&lt;br /&gt;
* Increase distance between coil and mower motor&lt;br /&gt;
&lt;br /&gt;
===Videos===&lt;br /&gt;
#[http://www.youtube.com/watch?v=FL6K98B2Zsk&amp;amp;feature=player_detailpage#t=265 Perimeter2 demo]&lt;br /&gt;
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M 120m perimeter wire test]&lt;br /&gt;
&lt;br /&gt;
=Tracking of perimeter=&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_perimeter_pid.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find more information about PID controllers here: &lt;br /&gt;
[http://www.ardumower.de/index.php/de/forum/anleitungen-hilfe/121-pid-regelung-fuer-drehzahl-drehung-etc-richtig-einstellen Forum].&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
#[http://www.ardumower.de/index.php/en/forum/schleifensensoren-generator/83-ir-bake-generator-empfaenger-diy Another idea for navigation are infrared landmarks]&lt;br /&gt;
#[http://grauonline.de/wordpress/?page_id=364 More details about the matched filter]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=757</id>
		<title>Ardumower PCB</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=757"/>
				<updated>2014-10-03T06:50:17Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Schematics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
This page describes how to assemble the Ardumower PCB, flash the Arduino and configure the robot mower.&lt;br /&gt;
&lt;br /&gt;
The controller is built around a ready microcontroller board (Arduino Mega 2560 using 54 I/O pins). &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduinomega.jpg|Arduino Mega microcontroller&lt;br /&gt;
File: Ardumower_parts.jpg|Parts&lt;br /&gt;
File: Ardumower_topics_en.jpg|Parts mounted (old v0.9.3)&lt;br /&gt;
File: Ardumower_overview.png|Principle design (old v0.9.3)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Needed parts=&lt;br /&gt;
&lt;br /&gt;
All parts can be purchased as complete kits via the [https://www.marotronics.de shop] [[File: shopping.png|link=https://www.marotronics.de]] .&lt;br /&gt;
&lt;br /&gt;
==v0.9.3 (old version - not recommended)==&lt;br /&gt;
If you know nothing about code, choose v0.9.3 stable code and these parts:&lt;br /&gt;
&lt;br /&gt;
* Main functions&lt;br /&gt;
** Arduino cable (female-female and male-female jumper cable)&lt;br /&gt;
** 1 x Arduino Mega 2560&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 2 x L298N motor driver module&lt;br /&gt;
** 3 x current sensor module ACS712-5&lt;br /&gt;
** 1 x current sensor module ACS712-30&lt;br /&gt;
** 1 x mower motor driver circuit: MOSFET IRLIZ44N, Diode MBR1045, Schottky-Diode 10A, Resistors (10K, 180 Ohm) &lt;br /&gt;
** Resistors (2 x 47K, 2 x 5K), Capacitors ( Fuse F20A250V&lt;br /&gt;
** Piezo buzzer (0,1W), button, ON/OFF switch 10A&lt;br /&gt;
&lt;br /&gt;
* Perimeter sender (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** Coil 220µH, Elko 2,2µF/160V, Resistors (1 Ohm, 1K, 4,7K), Diode 1N4448&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 1 x L298N motor driver module&lt;br /&gt;
&lt;br /&gt;
* Perimeter receiver (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** 2 x Arduino Sound Sensor Module (must use LM386)&lt;br /&gt;
** Capacitors (2 x 4,7nF, 2 x 100nF), Resistors (2 x 200k), 2 x Receiver coils 85mH&lt;br /&gt;
&lt;br /&gt;
* Additional modules&lt;br /&gt;
** 1 x HC-SR04 ultrasonic sensor module (optional)&lt;br /&gt;
** 1 x GY80 module (gyro, accel. compass) (optional)&lt;br /&gt;
** 1 x DS1307 realtime clock module (optional)&lt;br /&gt;
** 1 x Bluetooth module (for phone control)&lt;br /&gt;
&lt;br /&gt;
==SVN version (new version - recommended)==&lt;br /&gt;
If you want to be ready for the future, choose [https://code.google.com/p/ardumower/ SVN developer version] and the parts listed there.&lt;br /&gt;
&lt;br /&gt;
=Schematics=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_schematics.png | old v0.9.3 code (not recommended)&lt;br /&gt;
File: Ardumower mega shield svn 0.3.jpg | new SVN code UPDATET 0.03 (recommended)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PDF for the SVN Version found here :http://www.ardumower.de/index.php/de/forum/dies-und-das/438-schaltplan-svn-version&lt;br /&gt;
&lt;br /&gt;
KiCad Files are in the SVN&lt;br /&gt;
&lt;br /&gt;
=PCB assembly=&lt;br /&gt;
The Pcb is made with the following design parameters:&lt;br /&gt;
&lt;br /&gt;
Single sided PCB &amp;quot;eurocard&amp;quot; dimensions 160x100mm&lt;br /&gt;
So you can build it yourself !!!&lt;br /&gt;
All used modules are available in the ardumower shop&lt;br /&gt;
Uses the arduino mega R3&lt;br /&gt;
All connections are available on connectors as +5V and GND&lt;br /&gt;
&lt;br /&gt;
Meanwhile the ardumower group is working on a version for the arduino Due&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Pcb_prototype.jpg| PCB prototype&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power supply=&lt;br /&gt;
It is recommended to use a voltage step-down converter (e.g. module using LM2596) to generate the 5V voltage for the Arduino and all additional modules. Before connecting, set the voltage of the converter to 5V. &lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]]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!&lt;br /&gt;
All components together (as shown in the schematics) need about 5W power.&lt;br /&gt;
&lt;br /&gt;
=Download and flash Arduino code=&lt;br /&gt;
&lt;br /&gt;
You have two options: &lt;br /&gt;
* Download [http://www.ardumower.de/index.php/de/downloads v0.9.3 code (old, not recommended)] OR&lt;br /&gt;
* Download [https://code.google.com/p/ardumower/ Download SVN developer code (recommended)]&lt;br /&gt;
&lt;br /&gt;
Finally, download and start the [http://www.arduino.cc/ Arduino IDE] to flash the code to your Arduino.&lt;br /&gt;
&lt;br /&gt;
'''Arduino Version''': It is verry Importent that you use the Arduino IDE version 1.5.6-r2 or above AND select the right Board (Mega 2560 or Due).&lt;br /&gt;
&lt;br /&gt;
=First-time calibration=&lt;br /&gt;
==Wheel motors==&lt;br /&gt;
[[File:warning.png]]Security note: For security reasons, always remove mower blades in your first tests!&lt;br /&gt;
&lt;br /&gt;
Initially, you should verify that the wheel motors are controlled correctly and in the right direction. The software offers a diagnostic mode. Open the serial console in the Arduino IDE (CTRL+SHIFT+M) and set the baudrate to 19200. The motor and sensor values should appear constantly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    20 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    21 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    22 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    23 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    24 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, press the key ‘t’ on the keyboard, and confirm using ENTER. The diagnostic mode should appear, and you can test your motors.&lt;br /&gt;
&lt;br /&gt;
==ADC calibration==&lt;br /&gt;
If using perimeter v2: Run the ADC calibration once (&amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
&lt;br /&gt;
=Diagnostic=&lt;br /&gt;
Each time a sensor triggers, its corresponding sensor counter increases. The sensor trigger counters as well as the current sensor values can be viewed on the serial console. The following values are shown for the trigger counters in the serial console:&lt;br /&gt;
&lt;br /&gt;
# Time of state machine's state (ms)&lt;br /&gt;
# loop()-counts per second&lt;br /&gt;
# choosen Verbose-Mode (0=counter readings/1=current values/2=current values)&lt;br /&gt;
# current state machine state (FORW, REV, ROLL etc.)&lt;br /&gt;
# drive home? (1/0)&lt;br /&gt;
# &amp;quot;spd&amp;quot; - Control/speed motors: left (PWM), right (PWM), mower (RPM)&lt;br /&gt;
# &amp;quot;sen&amp;quot; - Current limit exceeded counter motors: left, right, mower &lt;br /&gt;
# &amp;quot;bum&amp;quot; - bumper counter: left, right&lt;br /&gt;
# &amp;quot;son&amp;quot; - Ultrasonic-distance threshold exceeded (counter)&lt;br /&gt;
# &amp;quot;pit/roll&amp;quot; - Tilt (computed by acceleration sensor)&lt;br /&gt;
# &amp;quot;com&amp;quot; - compass course&lt;br /&gt;
# &amp;quot;per&amp;quot; - Perimeter loop detected: counter&lt;br /&gt;
# &amp;quot;bat&amp;quot; - Battery voltage&lt;br /&gt;
# &amp;quot;chg&amp;quot; - Charging current &lt;br /&gt;
&lt;br /&gt;
Using the key 'v', you can toggle between summary of sensor (counters) and current sensor values.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use pfodApp (Android) to plot the sensors (trigger counters and current values) over time:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_sensor_counter_plotting.jpg |Sensor trigger counters&lt;br /&gt;
File:Ardumower_plot_sensors.jpg |Sensor measurement values&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Starting the mower=&lt;br /&gt;
&lt;br /&gt;
To start the mower, you need to add a button and a buzzer:&lt;br /&gt;
&lt;br /&gt;
 pinButton —o Button o— GND (button for ON/OFF)&lt;br /&gt;
&lt;br /&gt;
 pinBuzzer —o Buzzer o— GND (Piezo buzzer)&lt;br /&gt;
&lt;br /&gt;
Now, press the button as long as you hear the beeps:&lt;br /&gt;
&lt;br /&gt;
Mode (press button for x beeps):&lt;br /&gt;
 1 beeps : Normal mowing (using blade modulation if available)&lt;br /&gt;
 2 beeps : Normal mowing (without blade modulation)&lt;br /&gt;
 3 beeps : Drive by model remote control (RC)&lt;br /&gt;
 4 beeps : Drive without mowing&lt;br /&gt;
 5 beeps : Find perimeter and track it&lt;br /&gt;
&lt;br /&gt;
=Error counter / error beeps=&lt;br /&gt;
If there's a communication problem or another serious problem, the error counter increases. The error counter can be monitored via pfodApp. Additionally, the robot mower will beep when started.&lt;br /&gt;
&lt;br /&gt;
==I2C bus / error beeps==&lt;br /&gt;
Several components (Arduino Nano, RTC, IMU, etc.) are communicating via the I2C bus (SDA/SCL wires). These wires should be very short (maybe even twisted) and they should be far away from DC converter and motor drivers. If there's a communication problem, the error counter will increase and robot will beep when started. The error counter can be monitored via pfodApp.&lt;br /&gt;
&lt;br /&gt;
=Config files=&lt;br /&gt;
You can adapt the Ardumower code to your own robot mower hardware using the config file:&lt;br /&gt;
* config.h (old v9.0.3)&lt;br /&gt;
* mower.cpp (SVN version)&lt;br /&gt;
&lt;br /&gt;
Config files translate the commands of the main program into the specific hardware (i.e. actuators and sensors) - that allows us to adapt the main program to different robot mowers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_config_files.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
The main program wants to drive the left wheel motor with speed 100. The chosen robot config file is called by the main program with this command: &lt;br /&gt;
 setActuator(ACT_MOTOR_LEFT, 100)&lt;br /&gt;
&lt;br /&gt;
The actual config file will execute this command by calling the specific motor driver:&lt;br /&gt;
 setL298N(pinMotorLeft, pinMotorLeftPWM, 100)&lt;br /&gt;
&lt;br /&gt;
To enable a sensor, remove the comment of that line. To disable a sensor, comment the line with a double slash (//).&lt;br /&gt;
&lt;br /&gt;
==pfodApp==&lt;br /&gt;
The configuration of the robot mower can be set via pfodApp. &lt;br /&gt;
&lt;br /&gt;
Important: If you flashed a new version, reset all settings via pfodApp once (Settings-&amp;gt;Factory reset). This will delete all existing settings. Old settings can produce malfunction if the internal settings format has changed.&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=756</id>
		<title>Ardumower PCB</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=756"/>
				<updated>2014-10-03T06:45:21Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Schematics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
This page describes how to assemble the Ardumower PCB, flash the Arduino and configure the robot mower.&lt;br /&gt;
&lt;br /&gt;
The controller is built around a ready microcontroller board (Arduino Mega 2560 using 54 I/O pins). &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduinomega.jpg|Arduino Mega microcontroller&lt;br /&gt;
File: Ardumower_parts.jpg|Parts&lt;br /&gt;
File: Ardumower_topics_en.jpg|Parts mounted (old v0.9.3)&lt;br /&gt;
File: Ardumower_overview.png|Principle design (old v0.9.3)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Needed parts=&lt;br /&gt;
&lt;br /&gt;
All parts can be purchased as complete kits via the [https://www.marotronics.de shop] [[File: shopping.png|link=https://www.marotronics.de]] .&lt;br /&gt;
&lt;br /&gt;
==v0.9.3 (old version - not recommended)==&lt;br /&gt;
If you know nothing about code, choose v0.9.3 stable code and these parts:&lt;br /&gt;
&lt;br /&gt;
* Main functions&lt;br /&gt;
** Arduino cable (female-female and male-female jumper cable)&lt;br /&gt;
** 1 x Arduino Mega 2560&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 2 x L298N motor driver module&lt;br /&gt;
** 3 x current sensor module ACS712-5&lt;br /&gt;
** 1 x current sensor module ACS712-30&lt;br /&gt;
** 1 x mower motor driver circuit: MOSFET IRLIZ44N, Diode MBR1045, Schottky-Diode 10A, Resistors (10K, 180 Ohm) &lt;br /&gt;
** Resistors (2 x 47K, 2 x 5K), Capacitors ( Fuse F20A250V&lt;br /&gt;
** Piezo buzzer (0,1W), button, ON/OFF switch 10A&lt;br /&gt;
&lt;br /&gt;
* Perimeter sender (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** Coil 220µH, Elko 2,2µF/160V, Resistors (1 Ohm, 1K, 4,7K), Diode 1N4448&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 1 x L298N motor driver module&lt;br /&gt;
&lt;br /&gt;
* Perimeter receiver (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** 2 x Arduino Sound Sensor Module (must use LM386)&lt;br /&gt;
** Capacitors (2 x 4,7nF, 2 x 100nF), Resistors (2 x 200k), 2 x Receiver coils 85mH&lt;br /&gt;
&lt;br /&gt;
* Additional modules&lt;br /&gt;
** 1 x HC-SR04 ultrasonic sensor module (optional)&lt;br /&gt;
** 1 x GY80 module (gyro, accel. compass) (optional)&lt;br /&gt;
** 1 x DS1307 realtime clock module (optional)&lt;br /&gt;
** 1 x Bluetooth module (for phone control)&lt;br /&gt;
&lt;br /&gt;
==SVN version (new version - recommended)==&lt;br /&gt;
If you want to be ready for the future, choose [https://code.google.com/p/ardumower/ SVN developer version] and the parts listed there.&lt;br /&gt;
&lt;br /&gt;
=Schematics=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_schematics.png | old v0.9.3 code (not recommended)&lt;br /&gt;
File: Ardumower mega shield svn 0.3.jpg | new SVN code (recommended)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=PCB assembly=&lt;br /&gt;
The Pcb is made with the following design parameters:&lt;br /&gt;
&lt;br /&gt;
Single sided PCB &amp;quot;eurocard&amp;quot; dimensions 160x100mm&lt;br /&gt;
So you can build it yourself !!!&lt;br /&gt;
All used modules are available in the ardumower shop&lt;br /&gt;
Uses the arduino mega R3&lt;br /&gt;
All connections are available on connectors as +5V and GND&lt;br /&gt;
&lt;br /&gt;
Meanwhile the ardumower group is working on a version for the arduino Due&lt;br /&gt;
More to come&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Pcb_prototype.jpg| PCB prototype&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power supply=&lt;br /&gt;
It is recommended to use a voltage step-down converter (e.g. module using LM2596) to generate the 5V voltage for the Arduino and all additional modules. Before connecting, set the voltage of the converter to 5V. &lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]]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!&lt;br /&gt;
All components together (as shown in the schematics) need about 5W power.&lt;br /&gt;
&lt;br /&gt;
=Download and flash Arduino code=&lt;br /&gt;
&lt;br /&gt;
You have two options: &lt;br /&gt;
* Download [http://www.ardumower.de/index.php/de/downloads v0.9.3 code (old, not recommended)] OR&lt;br /&gt;
* Download [https://code.google.com/p/ardumower/ Download SVN developer code (recommended)]&lt;br /&gt;
&lt;br /&gt;
Finally, download and start the [http://www.arduino.cc/ Arduino IDE] to flash the code to your Arduino.&lt;br /&gt;
&lt;br /&gt;
'''Arduino Version''': It is verry Importent that you use the Arduino IDE version 1.5.6-r2 or above AND select the right Board (Mega 2560 or Due).&lt;br /&gt;
&lt;br /&gt;
=First-time calibration=&lt;br /&gt;
==Wheel motors==&lt;br /&gt;
[[File:warning.png]]Security note: For security reasons, always remove mower blades in your first tests!&lt;br /&gt;
&lt;br /&gt;
Initially, you should verify that the wheel motors are controlled correctly and in the right direction. The software offers a diagnostic mode. Open the serial console in the Arduino IDE (CTRL+SHIFT+M) and set the baudrate to 19200. The motor and sensor values should appear constantly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    20 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    21 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    22 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    23 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    24 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, press the key ‘t’ on the keyboard, and confirm using ENTER. The diagnostic mode should appear, and you can test your motors.&lt;br /&gt;
&lt;br /&gt;
==ADC calibration==&lt;br /&gt;
If using perimeter v2: Run the ADC calibration once (&amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
&lt;br /&gt;
=Diagnostic=&lt;br /&gt;
Each time a sensor triggers, its corresponding sensor counter increases. The sensor trigger counters as well as the current sensor values can be viewed on the serial console. The following values are shown for the trigger counters in the serial console:&lt;br /&gt;
&lt;br /&gt;
# Time of state machine's state (ms)&lt;br /&gt;
# loop()-counts per second&lt;br /&gt;
# choosen Verbose-Mode (0=counter readings/1=current values/2=current values)&lt;br /&gt;
# current state machine state (FORW, REV, ROLL etc.)&lt;br /&gt;
# drive home? (1/0)&lt;br /&gt;
# &amp;quot;spd&amp;quot; - Control/speed motors: left (PWM), right (PWM), mower (RPM)&lt;br /&gt;
# &amp;quot;sen&amp;quot; - Current limit exceeded counter motors: left, right, mower &lt;br /&gt;
# &amp;quot;bum&amp;quot; - bumper counter: left, right&lt;br /&gt;
# &amp;quot;son&amp;quot; - Ultrasonic-distance threshold exceeded (counter)&lt;br /&gt;
# &amp;quot;pit/roll&amp;quot; - Tilt (computed by acceleration sensor)&lt;br /&gt;
# &amp;quot;com&amp;quot; - compass course&lt;br /&gt;
# &amp;quot;per&amp;quot; - Perimeter loop detected: counter&lt;br /&gt;
# &amp;quot;bat&amp;quot; - Battery voltage&lt;br /&gt;
# &amp;quot;chg&amp;quot; - Charging current &lt;br /&gt;
&lt;br /&gt;
Using the key 'v', you can toggle between summary of sensor (counters) and current sensor values.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use pfodApp (Android) to plot the sensors (trigger counters and current values) over time:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_sensor_counter_plotting.jpg |Sensor trigger counters&lt;br /&gt;
File:Ardumower_plot_sensors.jpg |Sensor measurement values&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Starting the mower=&lt;br /&gt;
&lt;br /&gt;
To start the mower, you need to add a button and a buzzer:&lt;br /&gt;
&lt;br /&gt;
 pinButton —o Button o— GND (button for ON/OFF)&lt;br /&gt;
&lt;br /&gt;
 pinBuzzer —o Buzzer o— GND (Piezo buzzer)&lt;br /&gt;
&lt;br /&gt;
Now, press the button as long as you hear the beeps:&lt;br /&gt;
&lt;br /&gt;
Mode (press button for x beeps):&lt;br /&gt;
 1 beeps : Normal mowing (using blade modulation if available)&lt;br /&gt;
 2 beeps : Normal mowing (without blade modulation)&lt;br /&gt;
 3 beeps : Drive by model remote control (RC)&lt;br /&gt;
 4 beeps : Drive without mowing&lt;br /&gt;
 5 beeps : Find perimeter and track it&lt;br /&gt;
&lt;br /&gt;
=Error counter / error beeps=&lt;br /&gt;
If there's a communication problem or another serious problem, the error counter increases. The error counter can be monitored via pfodApp. Additionally, the robot mower will beep when started.&lt;br /&gt;
&lt;br /&gt;
==I2C bus / error beeps==&lt;br /&gt;
Several components (Arduino Nano, RTC, IMU, etc.) are communicating via the I2C bus (SDA/SCL wires). These wires should be very short (maybe even twisted) and they should be far away from DC converter and motor drivers. If there's a communication problem, the error counter will increase and robot will beep when started. The error counter can be monitored via pfodApp.&lt;br /&gt;
&lt;br /&gt;
=Config files=&lt;br /&gt;
You can adapt the Ardumower code to your own robot mower hardware using the config file:&lt;br /&gt;
* config.h (old v9.0.3)&lt;br /&gt;
* mower.cpp (SVN version)&lt;br /&gt;
&lt;br /&gt;
Config files translate the commands of the main program into the specific hardware (i.e. actuators and sensors) - that allows us to adapt the main program to different robot mowers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_config_files.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
The main program wants to drive the left wheel motor with speed 100. The chosen robot config file is called by the main program with this command: &lt;br /&gt;
 setActuator(ACT_MOTOR_LEFT, 100)&lt;br /&gt;
&lt;br /&gt;
The actual config file will execute this command by calling the specific motor driver:&lt;br /&gt;
 setL298N(pinMotorLeft, pinMotorLeftPWM, 100)&lt;br /&gt;
&lt;br /&gt;
To enable a sensor, remove the comment of that line. To disable a sensor, comment the line with a double slash (//).&lt;br /&gt;
&lt;br /&gt;
==pfodApp==&lt;br /&gt;
The configuration of the robot mower can be set via pfodApp. &lt;br /&gt;
&lt;br /&gt;
Important: If you flashed a new version, reset all settings via pfodApp once (Settings-&amp;gt;Factory reset). This will delete all existing settings. Old settings can produce malfunction if the internal settings format has changed.&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Ardumower_mega_shield_svn_0.3.jpg&amp;diff=755</id>
		<title>Datei:Ardumower mega shield svn 0.3.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Ardumower_mega_shield_svn_0.3.jpg&amp;diff=755"/>
				<updated>2014-10-03T06:44:00Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Perimeter_wire&amp;diff=671</id>
		<title>Perimeter wire</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Perimeter_wire&amp;diff=671"/>
				<updated>2014-09-24T04:18:34Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* ADC calibration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
A perimeter wire (or buried wire fence, BWF) is like a 'virtual fence': it stopps the robot when it reaches its boundaries. A perimeter is not always necessary for all surroundings (a lawn sensor might be an alternative).&lt;br /&gt;
&lt;br /&gt;
Principle idea: You will install a perimeter loop (a wire) in your garden through which a signal is sent and this signal is detected by the robot. So, you'll need: a sender (to transmit the on the wire) and a receiver (to detect the signal in the robot).&lt;br /&gt;
&lt;br /&gt;
How is the signal detected?  The signal is detected by one (or two) receiver coils. The closer the distance between coil and perimeter loop, the higher the signal. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower perimeter.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Perimeter v1 (v0.9.3)=&lt;br /&gt;
&lt;br /&gt;
==Sender==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
So, here's the sender:&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_perimeter_sender.png ‎&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
*Combination 1: Coil: 160µH, Capacitor: 3,3µF/50V  (tested)&lt;br /&gt;
*Combination 2: Coil 33mH, Capacitor: 12nF (not tested)&lt;br /&gt;
&lt;br /&gt;
====Power supply====&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
====Functional test====&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
3. If you have an oscilloscope, replace the perimeter wire by the oscilloscope. The measured signal look like below:&lt;br /&gt;
&lt;br /&gt;
The output signal shows a higher amplitude (high spikes) as the input signal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimetersignal.jpg|signal on the sender output &lt;br /&gt;
File: Ardumower_perimeter_sender_schematics.png|resonator circuit basic principle&lt;br /&gt;
File: Arduino_perimeter_sender_photo.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a simple receiver test, you can simply connect the receiver coil to an oscilloscope. The measured oscilloscope signal should look like below:&lt;br /&gt;
&lt;br /&gt;
This signal can be detected easily with a coil:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Coilsignal.jpg|coil signal at receiver coil&lt;br /&gt;
File: Fft.jpg|signal in frequency spectrum, superposed by motor noise&lt;br /&gt;
File: Ardumower_perimeter_spectrum_plot.jpg| frequency spectrum via pfodApp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Receiver==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Principle:&lt;br /&gt;
# Amplification of alternating signal using OPAMP&lt;br /&gt;
# Optional: Bandpass-filtering to filter-out noise caused by motors etc.&lt;br /&gt;
# Evaluation of signal strength of left and right coil&lt;br /&gt;
&lt;br /&gt;
Advantage of this version: analog controlling works great.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_perimeter_receiver.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Note: Wiring between Nano and Mega has been simplified - see schematics for exact wiring.&lt;br /&gt;
&lt;br /&gt;
We have tested the following combinations of amplifier und coils:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Soundsensor.jpg| Amplifying signal using LM386 - Arduino Sound Sensor using coil instead microphone&lt;br /&gt;
File: YwRobot_Sensor.jpg |Arduino Sound Sensor using LM386&lt;br /&gt;
File: YwRobot_circuit.png |Arduino Sound Sensor schematics&lt;br /&gt;
File: Coil_85mh.jpg|85 mH coils&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Lm386_amplifier.jpg |LM386 amplifier (200x amplification)&lt;br /&gt;
File: Lm386_modified.jpg|LM386 circuit &lt;br /&gt;
File: Lm386_circuit.png|104 mH coil&lt;br /&gt;
File: Coil_small.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;IN&amp;quot; and &amp;quot;GND&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''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.)&lt;br /&gt;
&lt;br /&gt;
===Functional test===&lt;br /&gt;
# Make sure that the sender works correctly (see further above).&lt;br /&gt;
# Increase the Arduino Sound Sensor potentiometer to maximum (rotate counter-clock-wise).&lt;br /&gt;
# 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.&lt;br /&gt;
# If that doesn't work, open the serial console (19200 baud), and verify the signal values.&lt;br /&gt;
&lt;br /&gt;
===Choice for coil===&lt;br /&gt;
Induction math, only approximation:&lt;br /&gt;
&lt;br /&gt;
L = 1nH x n² x ((D² / mm² ) / (l / mm))&lt;br /&gt;
l = coil length&lt;br /&gt;
D = coil diameter&lt;br /&gt;
&lt;br /&gt;
Example: An inductance of 85 mH, and diamter of 10 mm, and length of 40 mm require about  5830 windings.&lt;br /&gt;
&lt;br /&gt;
This inductance of 85 mH results in a capacity of 4.7 nF and a resonation frequency of 7963 kHz.&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
Combination 1: Coil: 85mH, Capacitor: 4.7nF  (tested)&lt;br /&gt;
Combination 2: Coil 104mH, Capacitor: 4nF (tested) &lt;br /&gt;
&lt;br /&gt;
===Arrangement of coils===&lt;br /&gt;
The coils are arranged at the bottom of the robot, about 90 degress to each other, both turned 45 degress.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_spulen.jpg&lt;br /&gt;
File: L50_coils.jpg |Example (Ambrogio L50)&lt;br /&gt;
File: L50_parcours.jpg &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Measurements of signal strength===&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimeter_plot.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Layout of the wire===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Schleifen_blind.jpg  | Not recommened: robot cannot detect sharp edges!&lt;br /&gt;
File: Ardumower_coil_signal.png| How does the signal change when rotating the coil?&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Videos===&lt;br /&gt;
#[http://www.youtube.com/watch?v=FGaUSg-uUxk Perimeter stop test]&lt;br /&gt;
#[http://www.youtube.com/watch?v=8R8QaffNlJw Perimeter tracking test]&lt;br /&gt;
#[http://www.youtube.com/watch?v=CftrnetFVYc&amp;amp;feature=youtu.be Finding and tracking test L50]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=fjuQViS2rHM Finding and tracking test Rotenbach]&lt;br /&gt;
&lt;br /&gt;
=Perimeter v2 (SVN version)=&lt;br /&gt;
&lt;br /&gt;
While crossing the perimeter loop, something interesting happens: signal changes polarity, that means negative and positive voltages reverse each other. By using this principle, crossing the perimeter wire will be detected. The robot knows its current perimeter state all the time (inside/ouside). As with perimeter v1, we will again use a motor driver to generate the signal and an operation amplifier to amplify the received signal.&lt;br /&gt;
&lt;br /&gt;
Principle:&lt;br /&gt;
# Amplify perimeter coil signal using OPAMP&lt;br /&gt;
# ADC sampling using Arduino&lt;br /&gt;
# Signal filterung and detection using a digital filter (Matched filter algorithmn).&lt;br /&gt;
# Evaluation of filter output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_perimeter2.jpg| Inside/outside detection using polarity change&lt;br /&gt;
File: Perimeter_sampling.png | ADC sampling and bit coding by pulse width&lt;br /&gt;
File: Schleifensender_Ardumower_V2.JPG | Sender circuit&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simulation==&lt;br /&gt;
Signal shape and matched filter is simulated here: &lt;br /&gt;
[http://www.grauonline.de/alexwww/ardumower/filter/filter.html Matched filter simulation]&lt;br /&gt;
&lt;br /&gt;
You can see how it works:&lt;br /&gt;
# Choose the perimeter signal at the right side (Set slider 'example signals': pseudonoise4_pw).&lt;br /&gt;
# Increase the noise a little bit (Set slider 'noise' to 2).&lt;br /&gt;
# At the left bottom plot ('Matched filter') you can see that the repeated signal was detected 3 times.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
==Sender==&lt;br /&gt;
The motor driver is driven by 3.2 Khz (two pulse widths 4.8 Khz and 2.4 Khz). The circuit draws max. 20W (12V, 1.7A). We use a motor driver with integrated current limiting and thermal switch-off (e.g. MC33926).&lt;br /&gt;
&lt;br /&gt;
sender circuit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 motor driver M1OUT1     o---------- perimeter loop (20-450 meters)--+&lt;br /&gt;
                                                                     |&lt;br /&gt;
 motor driver M1OUT2     o---------- perimeter loop -----------------+&lt;br /&gt;
 motor driver Vin        o-- 12V&lt;br /&gt;
 motor driver M1IN1      o-- Arduino Nano pinIN1&lt;br /&gt;
 motor driver M1IN2      o-- Arduino Nano pinIN2&lt;br /&gt;
 motor driver M1PWM_nD2  o-- Arduino Nano pinPWM&lt;br /&gt;
 motor driver M1nSF      o-- Arduino Nano pinFault&lt;br /&gt;
 motor driver M1FB       o-- Arduino Nano pinFeedback&lt;br /&gt;
 motor driver EN         o-- Arduino Nano pinEnable&lt;br /&gt;
 motor driver VDD        o-- Arduino +5V&lt;br /&gt;
 motor driver M1D1       o-- GND (via Jumper)&lt;br /&gt;
 motor driver SLEW       o-- VDD (via Jumper)&lt;br /&gt;
 &lt;br /&gt;
               |---------o-- GND&lt;br /&gt;
 Potentiometer 100k -----o-- Arduino Nano pinPot&lt;br /&gt;
               |---------o-- Arduino +5V&lt;br /&gt;
 &lt;br /&gt;
 ACS712-05 OUT ------o-- Arduino Nano pinChargeCurrent    &lt;br /&gt;
 ACS712-05 A   ------o-- charging pin (+)&lt;br /&gt;
 ACS712-05 B   ------o-- battery charger +24V&lt;br /&gt;
 battery charger GND-o-- charging pin (-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example of sender implementation on a dot matrix board:  [http://www.braunschweiger.org/content/download/SenderR212.pdf] &lt;br /&gt;
[http://www.braunschweiger.org/content/images/SenderR212_Front.jpg] [http://www.braunschweiger.org/content/images/SenderR212_Back.jpg]'''&lt;br /&gt;
&lt;br /&gt;
Using a current sensor (ACS712-05) it can be detected if the robot has reached the charging pins - this allows to switch off the perimeter during charging.&lt;br /&gt;
&lt;br /&gt;
Using a potentiometer, the max. current can be set. In the Arduino software, first set IMAX pot to zero (0), and place robot in the center of the garden. Now, slowly increase IMAX pot, until 'sig' in the pfodApp plot (&amp;quot;Plot-&amp;gt;Perimeter&amp;quot;) increases (wait 10 seconds). Where 'sig' reaches its maximum, keep IMAX pot setting.&lt;br /&gt;
&lt;br /&gt;
How the signal looks when perimeter wire loop is open:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Perimeter2_sender_open.jpg| Sender signal (open perimeter)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Receiver==&lt;br /&gt;
&lt;br /&gt;
We use a coil in upright position (centered at front in robot), connected to &amp;quot;pinPerimeterLeft&amp;quot;. When using the LM386 amplifier, capacitor C3 should be bypassed (will give a VCC/2 offset required for Arduino) and the coil will be connected to &amp;quot;IN&amp;quot; and &amp;quot;GND&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The signal output of LM386 should look like this. For more details, see signal &amp;quot;pseudonoise4_pw&amp;quot; in the simulator applet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt; &lt;br /&gt;
 File: Ardumower one center coil.jpg| One centered, upright coil &lt;br /&gt;
 File: Perimeter2_receiver_coil.jpg| Perimeter signal &lt;br /&gt;
 File: Perimeter2_receiver_coil_pwm.jpg| Pulse modulated perimeter signal &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
receiver circuit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      LM386 IN  o------- capacitor 4,7nF ----------- coil 100 mH&lt;br /&gt;
 Arduino pinPerimeterLeft   o------o  LM386 OUT&lt;br /&gt;
                                      LM386 GND o----------------------------------- coil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''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.)&lt;br /&gt;
&lt;br /&gt;
===ADC calibration===&lt;br /&gt;
Note: Run the ADC calibration once (&amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
The Perimeter Transmiter must be off while Calibration.&lt;br /&gt;
&lt;br /&gt;
===Example plots (pfodApp)===&lt;br /&gt;
&lt;br /&gt;
 sig:  coil signal&lt;br /&gt;
 mag:  filter result (negative: inside, positive: outside - strengh: distance to perimeter)&lt;br /&gt;
 smag: filter output without sign, low-passed&lt;br /&gt;
 in:   inside (1) oder outside (0)&lt;br /&gt;
 cnt:  number of &amp;quot;inside-outside&amp;quot; transitions (counter)&lt;br /&gt;
 on:   perimeter active (1) or inactive (0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
 File: PerimeterV2screenshot.png &lt;br /&gt;
 File: Ardumower_perimeter2_test.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Videos===&lt;br /&gt;
#[http://www.youtube.com/watch?v=FL6K98B2Zsk&amp;amp;feature=player_detailpage#t=265 Perimeter2 demo]&lt;br /&gt;
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M 120m perimeter wire test]&lt;br /&gt;
&lt;br /&gt;
=Tracking of perimeter=&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_perimeter_pid.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can find more information about PID controllers here: &lt;br /&gt;
[http://www.ardumower.de/index.php/de/forum/anleitungen-hilfe/121-pid-regelung-fuer-drehzahl-drehung-etc-richtig-einstellen Forum].&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
#[http://www.ardumower.de/index.php/en/forum/schleifensensoren-generator/83-ir-bake-generator-empfaenger-diy Another idea for navigation are infrared landmarks]&lt;br /&gt;
#[http://grauonline.de/wordpress/?page_id=364 More details about the matched filter]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=609</id>
		<title>Ardumower PCB</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=609"/>
				<updated>2014-09-14T17:54:44Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Schematics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
This page describes how to assemble the Ardumower PCB, flash the Arduino and configure the robot mower.&lt;br /&gt;
&lt;br /&gt;
The controller is built around a ready microcontroller board (Arduino Mega 2560 using 54 I/O pins). &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduinomega.jpg|Arduino Mega microcontroller&lt;br /&gt;
File: Ardumower_parts.jpg|Parts&lt;br /&gt;
File: Ardumower_topics_en.jpg|Parts mounted (v0.9.3)&lt;br /&gt;
File: Ardumower_overview.png|Principle design (v0.9.3)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Needed parts=&lt;br /&gt;
&lt;br /&gt;
All parts can be purchased as complete kits via the [https://www.marotronics.de shop] [[File: shopping.png|link=https://www.marotronics.de]] .&lt;br /&gt;
&lt;br /&gt;
==v0.9.3==&lt;br /&gt;
If you know nothing about code, choose v0.9.3 stable code and these parts:&lt;br /&gt;
&lt;br /&gt;
* Main functions&lt;br /&gt;
** Arduino cable (female-female and male-female jumper cable)&lt;br /&gt;
** 1 x Arduino Mega 2560&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 2 x L298N motor driver module&lt;br /&gt;
** 3 x current sensor module ACS712-5&lt;br /&gt;
** 1 x current sensor module ACS712-30&lt;br /&gt;
** 1 x mower motor driver circuit: MOSFET IRLIZ44N, Diode MBR1045, Schottky-Diode 10A, Resistors (10K, 180 Ohm) &lt;br /&gt;
** Resistors (2 x 47K, 2 x 5K), Capacitors ( Fuse F20A250V&lt;br /&gt;
** Piezo buzzer (0,1W), button, ON/OFF switch 10A&lt;br /&gt;
&lt;br /&gt;
* Perimeter sender (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** Coil 220µH, Elko 2,2µF/160V, Resistors (1 Ohm, 1K, 4,7K), Diode 1N4448&lt;br /&gt;
** 1 x DC voltage step-down module (LM2596)&lt;br /&gt;
** 1 x L298N motor driver module&lt;br /&gt;
&lt;br /&gt;
* Perimeter receiver (optional)&lt;br /&gt;
** 1 x Arduino Nano&lt;br /&gt;
** 2 x Arduino Sound Sensor Module (must use LM386)&lt;br /&gt;
** Capacitors (2 x 4,7nF, 2 x 100nF), Resistors (2 x 200k), 2 x Receiver coils 85mH&lt;br /&gt;
&lt;br /&gt;
* Additional modules&lt;br /&gt;
** 1 x HC-SR04 ultrasonic sensor module (optional)&lt;br /&gt;
** 1 x GY80 module (gyro, accel. compass) (optional)&lt;br /&gt;
** 1 x DS1307 realtime clock module (optional)&lt;br /&gt;
** 1 x Bluetooth module (for phone control)&lt;br /&gt;
&lt;br /&gt;
==SVN version==&lt;br /&gt;
If you want to be ready for the future, choose [https://code.google.com/p/ardumower/ unstable SVN developer version] and the parts listed there.&lt;br /&gt;
&lt;br /&gt;
=Schematics=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_schematics.png | (v0.9.3 code)&lt;br /&gt;
File: Ardumower mega shield VCN.jpeg | (SVN code)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=PCB assembly=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Pcb_prototype.jpg| PCB prototype&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power supply=&lt;br /&gt;
It is recommended to use a voltage step-down converter (e.g. module using LM2596) to generate the 5V voltage for the Arduino and all additional modules. Before connecting, set the voltage of the converter to 5V. &lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]]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!&lt;br /&gt;
All components together (as shown in the schematics) need about 5W power.&lt;br /&gt;
&lt;br /&gt;
=Download and flash Arduino code=&lt;br /&gt;
&lt;br /&gt;
You have two options: &lt;br /&gt;
* Download [http://www.ardumower.de/index.php/de/downloads v0.9.3 code (stable)] OR&lt;br /&gt;
* Download [https://code.google.com/p/ardumower/ Download SVN developer code (unstable)]&lt;br /&gt;
&lt;br /&gt;
Finally, download and start the [http://www.arduino.cc/ Arduino IDE] to flash the code to your Arduino.&lt;br /&gt;
&lt;br /&gt;
'''Arduino Version''': It is verry Importent that you use the Arduino IDE version 1.5.6-r2 or above AND select the right Board (Mega 2560 or Due).&lt;br /&gt;
&lt;br /&gt;
=First-time calibration=&lt;br /&gt;
==Wheel motors==&lt;br /&gt;
[[File:warning.png]]Security note: For security reasons, always remove mower blades in your first tests!&lt;br /&gt;
&lt;br /&gt;
Initially, you should verify that the wheel motors are controlled correctly and in the right direction. The software offers a diagnostic mode. Open the serial console in the Arduino IDE (CTRL+SHIFT+M) and set the baudrate to 19200. The motor and sensor values should appear constantly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;background-color: lightgrey; border: solid thin grey;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    20 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    21 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    22 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    23 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    24 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, press the key ‘t’ on the keyboard, and confirm using ENTER. The diagnostic mode should appear, and you can test your motors.&lt;br /&gt;
&lt;br /&gt;
==ADC calibration==&lt;br /&gt;
If using perimeter v2: Run the ADC calibration once (&amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
&lt;br /&gt;
=Diagnostic=&lt;br /&gt;
Each time a sensor triggers, its corresponding sensor counter increases. The sensor trigger counters as well as the current sensor values can be viewed on the serial console. The following values are shown for the trigger counters in the serial console:&lt;br /&gt;
&lt;br /&gt;
# Time of state machine's state (ms)&lt;br /&gt;
# loop()-counts per second&lt;br /&gt;
# choosen Verbose-Mode (0=counter readings/1=current values/2=current values)&lt;br /&gt;
# current state machine state (FORW, REV, ROLL etc.)&lt;br /&gt;
# drive home? (1/0)&lt;br /&gt;
# &amp;quot;spd&amp;quot; - Control/speed motors: left (PWM), right (PWM), mower (RPM)&lt;br /&gt;
# &amp;quot;sen&amp;quot; - Current limit exceeded counter motors: left, right, mower &lt;br /&gt;
# &amp;quot;bum&amp;quot; - bumper counter: left, right&lt;br /&gt;
# &amp;quot;son&amp;quot; - Ultrasonic-distance threshold exceeded (counter)&lt;br /&gt;
# &amp;quot;pit/roll&amp;quot; - Tilt (computed by acceleration sensor)&lt;br /&gt;
# &amp;quot;com&amp;quot; - compass course&lt;br /&gt;
# &amp;quot;per&amp;quot; - Perimeter loop detected: counter&lt;br /&gt;
# &amp;quot;bat&amp;quot; - Battery voltage&lt;br /&gt;
# &amp;quot;chg&amp;quot; - Charging current &lt;br /&gt;
&lt;br /&gt;
Using the key 'v', you can toggle between summary of sensor (counters) and current sensor values.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use pfodApp (Android) to plot the sensors (trigger counters and current values) over time:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_sensor_counter_plotting.jpg |Sensor trigger counters&lt;br /&gt;
File:Ardumower_plot_sensors.jpg |Sensor measurement values&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Starting the mower=&lt;br /&gt;
&lt;br /&gt;
To start the mower, you need to add a button and a buzzer:&lt;br /&gt;
&lt;br /&gt;
 pinButton —o Button o— GND (button for ON/OFF)&lt;br /&gt;
&lt;br /&gt;
 pinBuzzer —o Buzzer o— GND (Piezo buzzer)&lt;br /&gt;
&lt;br /&gt;
Now, press the button as long as you hear the beeps:&lt;br /&gt;
&lt;br /&gt;
Mode (press button for x beeps):&lt;br /&gt;
 1 beeps : Normal mowing (using blade modulation if available)&lt;br /&gt;
 2 beeps : Normal mowing (without blade modulation)&lt;br /&gt;
 3 beeps : Drive by model remote control (RC)&lt;br /&gt;
 4 beeps : Drive without mowing&lt;br /&gt;
 5 beeps : Find perimeter and track it&lt;br /&gt;
&lt;br /&gt;
=Error counter / error beeps=&lt;br /&gt;
If there's a communication problem or another serious problem, the error counter increases. The error counter can be monitored via pfodApp. Additionally, the robot mower will beep when started.&lt;br /&gt;
&lt;br /&gt;
==I2C bus / error beeps==&lt;br /&gt;
Several components (Arduino Nano, RTC, IMU, etc.) are communicating via the I2C bus (SDA/SCL wires). These wires should be very short (maybe even twisted) and they should be far away from DC converter and motor drivers. If there's a communication problem, the error counter will increase and robot will beep when started. The error counter can be monitored via pfodApp.&lt;br /&gt;
&lt;br /&gt;
=Config files=&lt;br /&gt;
You can adapt the Ardumower code to your own robot mower hardware using the config file:&lt;br /&gt;
* config.h (v9.0.3)&lt;br /&gt;
* mower.cpp (SVN version)&lt;br /&gt;
&lt;br /&gt;
Config files translate the commands of the main program into the specific hardware (i.e. actuators and sensors) - that allows us to adapt the main program to different robot mowers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_config_files.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
The main program wants to drive the left wheel motor with speed 100. The chosen robot config file is called by the main program with this command: &lt;br /&gt;
 setActuator(ACT_MOTOR_LEFT, 100)&lt;br /&gt;
&lt;br /&gt;
The actual config file will execute this command by calling the specific motor driver:&lt;br /&gt;
 setL298N(pinMotorLeft, pinMotorLeftPWM, 100)&lt;br /&gt;
&lt;br /&gt;
To enable a sensor, remove the comment of that line. To disable a sensor, comment the line with a double slash (//).&lt;br /&gt;
&lt;br /&gt;
==pfodApp==&lt;br /&gt;
The configuration of the robot mower can be set via pfodApp. &lt;br /&gt;
&lt;br /&gt;
Important: If you flashed a new version, reset all settings via pfodApp once (Settings-&amp;gt;Factory reset). This will delete all existing settings. Old settings can produce malfunction if the internal settings format has changed.&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Ardumower_mega_shield_VCN.jpeg&amp;diff=608</id>
		<title>Datei:Ardumower mega shield VCN.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Ardumower_mega_shield_VCN.jpeg&amp;diff=608"/>
				<updated>2014-09-14T17:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: Wiring for svn Version of Ardumower&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiring for svn Version of Ardumower&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=500</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=500"/>
				<updated>2014-09-14T05:41:15Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Further links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the '''Ardumower Wiki''', the wonderful world of DIY robotic mowers...&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
*[[Getting started]]&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;color:blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
!Chassis&lt;br /&gt;
|[[Ardumower chassis]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino, schematics, PCB etc.&lt;br /&gt;
|[[Ardumower PCB]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver]]&lt;br /&gt;
|[[Relay]]&lt;br /&gt;
|-&lt;br /&gt;
!Sensors&lt;br /&gt;
|[[Perimeter wire]]&lt;br /&gt;
|[[Ultrasonic]]&lt;br /&gt;
|[[Hall sensor]]&lt;br /&gt;
|[[Lawn sensor]]&lt;br /&gt;
|[[Odometry]]&lt;br /&gt;
|[[IMU]]&lt;br /&gt;
|[[Rain sensor]]&lt;br /&gt;
|-&lt;br /&gt;
!Energy&lt;br /&gt;
|[[Charging]]&lt;br /&gt;
|-&lt;br /&gt;
!Wireless&lt;br /&gt;
|[[Model R/C]]&lt;br /&gt;
|[[Bluetooth]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Testing the Mower&lt;br /&gt;
|[[Console Output]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino programming&lt;br /&gt;
|[[Arduino crash course]]&lt;br /&gt;
|[[Arduino code techniques]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extensions=&lt;br /&gt;
Describe your own (prototyped) robot mower extensions or improvements (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other additions) and add them here!&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
#[http://www.youtube.com/watch?v=TRpXDBNEubo&amp;amp;feature=youtu.be Introduction]&lt;br /&gt;
#[http://www.youtube.com/watch?v=5v975n5punU Ambrogio L50 (1) goes Ardumower]&lt;br /&gt;
#[https://www.youtube.com/watch?v=PSE3Z3txa4M Ambrogio L50 (2) goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?v=zglWu2ykDmo Rotenbach SPM08-320 goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=RgdiXK1a2Ys Promotion]&lt;br /&gt;
More videos on [[File: Yt-brand-standard-logo-95x40.png|link=http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
= Wiki help =&lt;br /&gt;
* How to edit/add a page: [[Wiki help]]&lt;br /&gt;
* Use this page to try out any wiki code: [[test]]&lt;br /&gt;
&lt;br /&gt;
= Further links =&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
&lt;br /&gt;
[https://www.marotronics.de/ Shop for the Ardumower]&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de/anleitungen/lawn-mower-simulator Ardumower Simulator]&lt;br /&gt;
&lt;br /&gt;
[http://grauonline.de/wordpress/ Homepage von Alex]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=499</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=499"/>
				<updated>2014-09-14T05:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the '''Ardumower Wiki''', the wonderful world of DIY robotic mowers...&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
*[[Getting started]]&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;color:blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
!Chassis&lt;br /&gt;
|[[Ardumower chassis]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino, schematics, PCB etc.&lt;br /&gt;
|[[Ardumower PCB]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver]]&lt;br /&gt;
|[[Relay]]&lt;br /&gt;
|-&lt;br /&gt;
!Sensors&lt;br /&gt;
|[[Perimeter wire]]&lt;br /&gt;
|[[Ultrasonic]]&lt;br /&gt;
|[[Hall sensor]]&lt;br /&gt;
|[[Lawn sensor]]&lt;br /&gt;
|[[Odometry]]&lt;br /&gt;
|[[IMU]]&lt;br /&gt;
|[[Rain sensor]]&lt;br /&gt;
|-&lt;br /&gt;
!Energy&lt;br /&gt;
|[[Charging]]&lt;br /&gt;
|-&lt;br /&gt;
!Wireless&lt;br /&gt;
|[[Model R/C]]&lt;br /&gt;
|[[Bluetooth]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Testing the Mower&lt;br /&gt;
|[[Console Output]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino programming&lt;br /&gt;
|[[Arduino crash course]]&lt;br /&gt;
|[[Arduino code techniques]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extensions=&lt;br /&gt;
Describe your own (prototyped) robot mower extensions or improvements (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other additions) and add them here!&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
#[http://www.youtube.com/watch?v=TRpXDBNEubo&amp;amp;feature=youtu.be Introduction]&lt;br /&gt;
#[http://www.youtube.com/watch?v=5v975n5punU Ambrogio L50 (1) goes Ardumower]&lt;br /&gt;
#[https://www.youtube.com/watch?v=PSE3Z3txa4M Ambrogio L50 (2) goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?v=zglWu2ykDmo Rotenbach SPM08-320 goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=RgdiXK1a2Ys Promotion]&lt;br /&gt;
More videos on [[File: Yt-brand-standard-logo-95x40.png|link=http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
= Wiki help =&lt;br /&gt;
* How to edit/add a page: [[Wiki help]]&lt;br /&gt;
* Use this page to try out any wiki code: [[test]]&lt;br /&gt;
&lt;br /&gt;
= Further links =&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
&lt;br /&gt;
[https://www.marotronics.de/ Shop für den Ardumower]&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de/anleitungen/lawn-mower-simulator Ardumower Simulator]&lt;br /&gt;
&lt;br /&gt;
[http://grauonline.de/wordpress/ Homepage von Alex]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=497</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=497"/>
				<updated>2014-09-14T05:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the '''Ardumower Wiki''', the wonderful world of DIY robotic mowers...&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
*[[Getting started]]&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;color:blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
!Chassis&lt;br /&gt;
|[[Ardumower chassis]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino, schematics, PCB etc.&lt;br /&gt;
|[[Ardumower PCB]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver]]&lt;br /&gt;
|[[Relay]]&lt;br /&gt;
|-&lt;br /&gt;
!Sensors&lt;br /&gt;
|[[Perimeter wire]]&lt;br /&gt;
|[[Ultrasonic]]&lt;br /&gt;
|[[Hall sensor]]&lt;br /&gt;
|[[Lawn sensor]]&lt;br /&gt;
|[[Odometry]]&lt;br /&gt;
|[[IMU]]&lt;br /&gt;
|[[Rain sensor]]&lt;br /&gt;
|-&lt;br /&gt;
!Energy&lt;br /&gt;
|[[Charging]]&lt;br /&gt;
|-&lt;br /&gt;
!Wireless&lt;br /&gt;
|[[Model R/C]]&lt;br /&gt;
|[[Bluetooth]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Testing &lt;br /&gt;
|[[Console Output]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino programming&lt;br /&gt;
|[[Arduino crash course]]&lt;br /&gt;
|[[Arduino code techniques]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extensions=&lt;br /&gt;
Describe your own (prototyped) robot mower extensions or improvements (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other additions) and add them here!&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
#[http://www.youtube.com/watch?v=TRpXDBNEubo&amp;amp;feature=youtu.be Introduction]&lt;br /&gt;
#[http://www.youtube.com/watch?v=5v975n5punU Ambrogio L50 (1) goes Ardumower]&lt;br /&gt;
#[https://www.youtube.com/watch?v=PSE3Z3txa4M Ambrogio L50 (2) goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?v=zglWu2ykDmo Rotenbach SPM08-320 goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=RgdiXK1a2Ys Promotion]&lt;br /&gt;
More videos on [[File: Yt-brand-standard-logo-95x40.png|link=http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
= Wiki help =&lt;br /&gt;
* How to edit/add a page: [[Wiki help]]&lt;br /&gt;
* Use this page to try out any wiki code: [[test]]&lt;br /&gt;
&lt;br /&gt;
= Further links =&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
&lt;br /&gt;
[https://www.marotronics.de/ Shop für den Ardumower]&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de/anleitungen/lawn-mower-simulator Ardumower Simulator]&lt;br /&gt;
&lt;br /&gt;
[http://grauonline.de/wordpress/ Homepage von Alex]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=496</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=496"/>
				<updated>2014-09-14T05:18:50Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: /* Further links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the '''Ardumower Wiki''', the wonderful world of DIY robotic mowers...&lt;br /&gt;
&lt;br /&gt;
=Getting started=&lt;br /&gt;
*[[Getting started]]&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;color:blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
!Chassis&lt;br /&gt;
|[[Ardumower chassis]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino, schematics, PCB etc.&lt;br /&gt;
|[[Ardumower PCB]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver]]&lt;br /&gt;
|[[Relay]]&lt;br /&gt;
|-&lt;br /&gt;
!Sensors&lt;br /&gt;
|[[Perimeter wire]]&lt;br /&gt;
|[[Ultrasonic]]&lt;br /&gt;
|[[Hall sensor]]&lt;br /&gt;
|[[Lawn sensor]]&lt;br /&gt;
|[[Odometry]]&lt;br /&gt;
|[[IMU]]&lt;br /&gt;
|[[Rain sensor]]&lt;br /&gt;
|-&lt;br /&gt;
!Energy&lt;br /&gt;
|[[Charging]]&lt;br /&gt;
|-&lt;br /&gt;
!Wireless&lt;br /&gt;
|[[Model R/C]]&lt;br /&gt;
|[[Bluetooth]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Arduino programming&lt;br /&gt;
|[[Arduino crash course]]&lt;br /&gt;
|[[Arduino code techniques]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extensions=&lt;br /&gt;
Describe your own (prototyped) robot mower extensions or improvements (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other additions) and add them here!&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
#[http://www.youtube.com/watch?v=TRpXDBNEubo&amp;amp;feature=youtu.be Introduction]&lt;br /&gt;
#[http://www.youtube.com/watch?v=5v975n5punU Ambrogio L50 (1) goes Ardumower]&lt;br /&gt;
#[https://www.youtube.com/watch?v=PSE3Z3txa4M Ambrogio L50 (2) goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?v=zglWu2ykDmo Rotenbach SPM08-320 goes Ardumower]&lt;br /&gt;
#[http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=RgdiXK1a2Ys Promotion]&lt;br /&gt;
More videos on [[File: Yt-brand-standard-logo-95x40.png|link=http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
= Wiki help =&lt;br /&gt;
* How to edit/add a page: [[Wiki help]]&lt;br /&gt;
* Use this page to try out any wiki code: [[test]]&lt;br /&gt;
&lt;br /&gt;
= Further links =&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
&lt;br /&gt;
[https://www.marotronics.de/ Shop für den Ardumower]&lt;br /&gt;
&lt;br /&gt;
[http://www.ardumower.de/index.php/de/anleitungen/lawn-mower-simulator Ardumower Simulator]&lt;br /&gt;
&lt;br /&gt;
[http://grauonline.de/wordpress/ Homepage von Alex]&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Charging&amp;diff=57</id>
		<title>Charging</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Charging&amp;diff=57"/>
				<updated>2014-09-11T20:09:43Z</updated>
		
		<summary type="html">&lt;p&gt;StefanM: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
'''Basic principle'''&lt;br /&gt;
&lt;br /&gt;
About an induction loop, the robot finds the charging station where he can be charged again. In this case, as long as the induction loop traversed (clockwise) to the charging contacts of the robot detect a voltage (charging voltage). There, the robot stops. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Charger''' &lt;br /&gt;
&lt;br /&gt;
The charger is in the cradle (or is connected to). The charger should accomplish the following things (in this case lithium-ion - Battery Lead is similar, but less critical): &lt;br /&gt;
Load battery pack via the charging pins of the robot &lt;br /&gt;
-Maximum Cutoff voltage / charge voltage compliance (charging voltage limit) &lt;br /&gt;
-Maximalen Charging current compliance (charging current limit) &lt;br /&gt;
If you are using an existing charging station, these things were implemented with high probability already there. &lt;br /&gt;
&lt;br /&gt;
'''Robot''' &lt;br /&gt;
&lt;br /&gt;
In the robot itself, the battery voltage is monitored (see diagram below). So it can be determined when the robot must go to the charging station. The robot and the voltage and the current during charging is controlled. So it can be determined whether the robot has reached the charger and when the battery is fully charged again. Ideally, the charging station also eat the loop transmitter:&lt;br /&gt;
&lt;br /&gt;
charging station circuit:&lt;br /&gt;
&lt;br /&gt;
 Power supply =&amp;gt; Charger 24V (+)----- Charging station charger pin(+)&lt;br /&gt;
                GND         (-)----- Charging station charger pin(-)&lt;br /&gt;
                Charger 24V (+)----- DC-DC converter 5V  =&amp;gt; Perimeter sender Arduino Nano  &lt;br /&gt;
                Charger 24V (+)----- DC-DC converter 12V =&amp;gt; Perimeter sender MC motor driver&lt;br /&gt;
&lt;br /&gt;
robot charging circuit:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Charging station (+)---+------+-- relais ---- current sensor ----- battery (+)&lt;br /&gt;
                               |&lt;br /&gt;
                              ---- voltage sensing&lt;br /&gt;
 Charging station (-)-- +------------------------------------------ battery (-)&lt;/div&gt;</summary>
		<author><name>StefanM</name></author>	</entry>

	</feed>