<?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=Pierlau38</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=Pierlau38"/>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Spezial:Beitr%C3%A4ge/Pierlau38"/>
		<updated>2026-10-14T00:06:16Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2876</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2876"/>
				<updated>2016-01-02T11:17:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Motors testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
Using motor driver MC33926 :&lt;br /&gt;
&lt;br /&gt;
Right  | Left&lt;br /&gt;
&lt;br /&gt;
Pin 33 | Pin 31 One pin controls the direction (forward/backward)&lt;br /&gt;
&lt;br /&gt;
Pin 03 | Pin 05 the other pin controls the speed.    &lt;br /&gt;
                    &lt;br /&gt;
Pin A0 | Pin A1 One analog input pin is connected to the current sensor.&lt;br /&gt;
&lt;br /&gt;
Pin 27 | Pin 25 input pin to read fault                                  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:MC33926_schematics.jpg | schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Alternative solution ==&lt;br /&gt;
&lt;br /&gt;
The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variables ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    //                                   [Default value]&lt;br /&gt;
    float motorAccel  ;          // motor wheel acceleration - only functional when odometry is not in use&lt;br /&gt;
                                 // (warning: do not set too high) [1000]&lt;br /&gt;
    int motorSpeedMaxRpm   ;     // motor wheel max RPM  [25]&lt;br /&gt;
    int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023) [255]&lt;br /&gt;
    float motorPowerMax   ;      // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;            // motor left wheel PID controller [Kp=1.5 , Kd=0.29, Ki=0.25]&lt;br /&gt;
    PID motorRightPID;           // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;       // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ;      // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;       // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax;       // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ; // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ; // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ;   // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ;     // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;br /&gt;
&lt;br /&gt;
== Motor Methods ==&lt;br /&gt;
&lt;br /&gt;
First the basic function that control the pwm to each motors:&lt;br /&gt;
  void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);&lt;br /&gt;
&lt;br /&gt;
A general methods to test motors&lt;br /&gt;
  void testMotors();&lt;br /&gt;
&lt;br /&gt;
Then, there are several MotorControl methods according to mower state :&lt;br /&gt;
&lt;br /&gt;
if current state is 'STATE_PERI_TRACK' then&lt;br /&gt;
  void motorControlPerimeter();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  void motorControlImuRoll();&lt;br /&gt;
&lt;br /&gt;
  void motorControlImuDir();&lt;br /&gt;
&lt;br /&gt;
for all other case :  &lt;br /&gt;
&lt;br /&gt;
  void motorControl();&lt;br /&gt;
  // This method calculate pwm to set in order to respect rpm setpoint according current rpm and Kp, Ki, Kd parameter&lt;br /&gt;
&lt;br /&gt;
= Motors testing =&lt;br /&gt;
&lt;br /&gt;
Run the serial console (Arduino IDE: CTRL+SHIFT+M, 19200 Baud) and press 'd' and ENTER for menu.&lt;br /&gt;
Then press '1' and ENTER to run the motor test.&lt;br /&gt;
&lt;br /&gt;
Test consist of the following sequence :&lt;br /&gt;
&lt;br /&gt;
* Left motor : Forward half speed&lt;br /&gt;
&lt;br /&gt;
* Left motor : Reverse full speed&lt;br /&gt;
&lt;br /&gt;
* Right motor : Forward half speed&lt;br /&gt;
&lt;br /&gt;
* Right motor : Reverse full speed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB : If motor rotation is inverse to what is expected, then you need to switch the wiring at the outlet of motor controller.&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2851</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2851"/>
				<updated>2015-12-24T21:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Motor Methods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
Using motor driver MC33926 :&lt;br /&gt;
&lt;br /&gt;
Right  | Left&lt;br /&gt;
&lt;br /&gt;
Pin 33 | Pin 31 One pin controls the direction (forward/backward)&lt;br /&gt;
&lt;br /&gt;
Pin 03 | Pin 05 the other pin controls the speed.    &lt;br /&gt;
                    &lt;br /&gt;
Pin A0 | Pin A1 One analog input pin is connected to the current sensor.&lt;br /&gt;
&lt;br /&gt;
Pin 27 | Pin 25 input pin to read fault                                  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:MC33926_schematics.jpg | schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Alternative solution ==&lt;br /&gt;
&lt;br /&gt;
The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variables ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    //                                   [Default value]&lt;br /&gt;
    float motorAccel  ;          // motor wheel acceleration - only functional when odometry is not in use&lt;br /&gt;
                                 // (warning: do not set too high) [1000]&lt;br /&gt;
    int motorSpeedMaxRpm   ;     // motor wheel max RPM  [25]&lt;br /&gt;
    int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023) [255]&lt;br /&gt;
    float motorPowerMax   ;      // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;            // motor left wheel PID controller [Kp=1.5 , Kd=0.29, Ki=0.25]&lt;br /&gt;
    PID motorRightPID;           // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;       // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ;      // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;       // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax;       // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ; // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ; // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ;   // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ;     // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;br /&gt;
&lt;br /&gt;
== Motor Methods ==&lt;br /&gt;
&lt;br /&gt;
First the basic function that control the pwm to each motors:&lt;br /&gt;
  void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);&lt;br /&gt;
&lt;br /&gt;
A general methods to test motors&lt;br /&gt;
  void testMotors();&lt;br /&gt;
&lt;br /&gt;
Then, there are several MotorControl methods according to mower state :&lt;br /&gt;
&lt;br /&gt;
if current state is 'STATE_PERI_TRACK' then&lt;br /&gt;
  void motorControlPerimeter();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  void motorControlImuRoll();&lt;br /&gt;
&lt;br /&gt;
  void motorControlImuDir();&lt;br /&gt;
&lt;br /&gt;
for all other case :  &lt;br /&gt;
&lt;br /&gt;
  void motorControl();&lt;br /&gt;
  // This method calculate pwm to set in order to respect rpm setpoint according current rpm and Kp, Ki, Kd parameter&lt;br /&gt;
&lt;br /&gt;
= Motors testing =&lt;br /&gt;
&lt;br /&gt;
Run the serial console (Arduino IDE: CTRL+SHIFT+M, 19200 Baud) and press 'd' and ENTER for menu.&lt;br /&gt;
Then press '1' and ENTER to run the motor test.&lt;br /&gt;
Test consist of the following sequence :&lt;br /&gt;
&lt;br /&gt;
Left motor : Forward half speed&lt;br /&gt;
Left motor : Reverse full speed&lt;br /&gt;
Right motor : Forward half speed&lt;br /&gt;
Right motor : Reverse full speed&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2850</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2850"/>
				<updated>2015-12-07T20:48:51Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
Using motor driver MC33926 :&lt;br /&gt;
&lt;br /&gt;
Right  | Left&lt;br /&gt;
&lt;br /&gt;
Pin 33 | Pin 31 One pin controls the direction (forward/backward)&lt;br /&gt;
&lt;br /&gt;
Pin 03 | Pin 05 the other pin controls the speed.    &lt;br /&gt;
                    &lt;br /&gt;
Pin A0 | Pin A1 One analog input pin is connected to the current sensor.&lt;br /&gt;
&lt;br /&gt;
Pin 27 | Pin 25 input pin to read fault                                  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:MC33926_schematics.jpg | schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Alternative solution ==&lt;br /&gt;
&lt;br /&gt;
The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variables ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    //                                   [Default value]&lt;br /&gt;
    float motorAccel  ;          // motor wheel acceleration - only functional when odometry is not in use&lt;br /&gt;
                                 // (warning: do not set too high) [1000]&lt;br /&gt;
    int motorSpeedMaxRpm   ;     // motor wheel max RPM  [25]&lt;br /&gt;
    int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023) [255]&lt;br /&gt;
    float motorPowerMax   ;      // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;            // motor left wheel PID controller [Kp=1.5 , Kd=0.29, Ki=0.25]&lt;br /&gt;
    PID motorRightPID;           // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;       // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ;      // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;       // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax;       // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ; // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ; // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ;   // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ;     // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;br /&gt;
&lt;br /&gt;
== Motor Methods ==&lt;br /&gt;
&lt;br /&gt;
  void testMotors();&lt;br /&gt;
&lt;br /&gt;
  void motorControl();&lt;br /&gt;
&lt;br /&gt;
  void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motors testing =&lt;br /&gt;
&lt;br /&gt;
Run the serial console (Arduino IDE: CTRL+SHIFT+M, 19200 Baud) and press 'd' and ENTER for menu.&lt;br /&gt;
Then press '1' and ENTER to run the motor test.&lt;br /&gt;
Test consist of the following sequence :&lt;br /&gt;
&lt;br /&gt;
Left motor : Forward half speed&lt;br /&gt;
Left motor : Reverse full speed&lt;br /&gt;
Right motor : Forward half speed&lt;br /&gt;
Right motor : Reverse full speed&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2849</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2849"/>
				<updated>2015-12-06T21:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 -&amp;gt; [[Deutsche Version]] (noch in Bearbeitung)&lt;br /&gt;
 -&amp;gt; [[Russian Version]] (в разработке)&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''Ardumower - the DIY robot mower'''&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;Ardumower WIKI, the knowledge base of the Ardumower community&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:H7c785a1.png |100px|left|Ardumower Logo]][[Image:1000x500-ausbildung.jpg|thumb|180px|Image of the month]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
You probably know Ardumower Forum, the DIY robot mower community on the Internet. Now there's the additional Ardumower knowledge site, named WIKI. Here you find information, basics, and tips about DIY robot mowers sorted by different topics. The pages should be a starter guide as well as a reference book (you may recognize the structure from the well known Wikipedia). We use the same system for it: MediaWiki.&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On this WIKI, you actually can modify pages freely - you can even try out your first edits on a testpage [[test]] on this Wiki. Before you edit longer pages, you should practise on this testpage [[test]].&lt;br /&gt;
&lt;br /&gt;
Help us improving this Wiki! Simply [http://wiki.ardumower.de/index.php?title=Spezial:Anmelden/signup register] and start editing today...&lt;br /&gt;
&lt;br /&gt;
=Getting started / Introduction=&lt;br /&gt;
[[Image:Ardumower_overview.png|thumb|400px|Overview]]&lt;br /&gt;
These introduction pages should help you to get started building your own DIY robot mower:&lt;br /&gt;
*[[Getting started]] (introduction and overall steps)&lt;br /&gt;
*[[Arduino first steps]] (if you have never worked with Arduino before: how to upload to your Arduino...)&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
These pages give you a reference book sorted by robot mower 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 assembly&lt;br /&gt;
|[[Ardumower chassis]] &lt;br /&gt;
|-&lt;br /&gt;
!Arduino code, schematics, PCB etc.&lt;br /&gt;
|[[Arduino first steps]]&lt;br /&gt;
|[[Ardumower PCB|Ardumower PCB &amp;amp; code]]&lt;br /&gt;
|[[Arduino Due]]&lt;br /&gt;
|[[About ADC]]&lt;br /&gt;
|[[Troubleshooting]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver|Motor driver (general information)]]&lt;br /&gt;
|[[Wheel Motor]]&lt;br /&gt;
|[[Mower Motor]]&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;
|[[Dropsensor]]&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|Bluetooth &amp;amp; App]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture, algorithms&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|[[Mowing Pattern]]&lt;br /&gt;
|[[Sensor fusion|Sensor fusion &amp;amp; SLAM]]&lt;br /&gt;
|[[PID control]]&lt;br /&gt;
|[[Kalman|Kalman (EKF)]]&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 robot mower project / Dein Rasenroboter-Projekt=&lt;br /&gt;
Describe your own robot mower project on a new WIKI page / Beschreibe Dein eigenes Rasenroboter-Projekt auf einer neuen WIKI-Site:&lt;br /&gt;
* [[Ardumower Chassis 'mountain mod']]&lt;br /&gt;
* [[Ardumower Mini]]&lt;br /&gt;
* [[Tracked Mower]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extension / Deine Ardumower Erweiterung=&lt;br /&gt;
Describe your own robot mower extension or improvement (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other addition) on a new WIKI page / Beschreibe Deine eigene Erweiterung oder Verbesserung des Ardumowers:&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* [[Ardumower future PCB]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&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;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
[https://www.marotronics.de/ Ardumower Shop]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2848</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2848"/>
				<updated>2015-12-06T19:31:45Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Motor variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variables ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    //                                   [Default value]&lt;br /&gt;
    float motorAccel  ;          // motor wheel acceleration - only functional when odometry is not in use&lt;br /&gt;
                                 // (warning: do not set too high) [1000]&lt;br /&gt;
    int motorSpeedMaxRpm   ;     // motor wheel max RPM  [25]&lt;br /&gt;
    int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023) [255]&lt;br /&gt;
    float motorPowerMax   ;      // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;            // motor left wheel PID controller [Kp=1.5 , Kd=0.29, Ki=0.25]&lt;br /&gt;
    PID motorRightPID;           // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;       // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ;      // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;       // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax;       // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ; // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ; // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ;   // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ;     // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;br /&gt;
&lt;br /&gt;
== Motor Methods ==&lt;br /&gt;
&lt;br /&gt;
  void testMotors();&lt;br /&gt;
&lt;br /&gt;
  void motorControl();&lt;br /&gt;
&lt;br /&gt;
  void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motors testing =&lt;br /&gt;
&lt;br /&gt;
Run the serial console (Arduino IDE: CTRL+SHIFT+M, 19200 Baud) and press 'd' and ENTER for menu.&lt;br /&gt;
Then press '1' and ENTER to run the motor test.&lt;br /&gt;
Test consist of the following sequence :&lt;br /&gt;
&lt;br /&gt;
Left motor : Forward half speed&lt;br /&gt;
Left motor : Reverse full speed&lt;br /&gt;
Right motor : Forward half speed&lt;br /&gt;
Right motor : Reverse full speed&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2847</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2847"/>
				<updated>2015-12-06T17:52:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variable ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    float motorAccel  ;          // motor wheel acceleration (warning: do not set too high)&lt;br /&gt;
    int motorSpeedMaxRpm   ;     // motor wheel max RPM&lt;br /&gt;
    int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023)&lt;br /&gt;
    float motorPowerMax   ;      // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;            // motor left wheel PID controller&lt;br /&gt;
    PID motorRightPID;           // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;       // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ;      // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;       // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax;       // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ; // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ; // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ;   // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ;     // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;br /&gt;
&lt;br /&gt;
== Motor Methods ==&lt;br /&gt;
&lt;br /&gt;
  void testMotors();&lt;br /&gt;
&lt;br /&gt;
  void motorControl();&lt;br /&gt;
&lt;br /&gt;
  void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motors testing =&lt;br /&gt;
&lt;br /&gt;
Run the serial console (Arduino IDE: CTRL+SHIFT+M, 19200 Baud) and press 'd' and ENTER for menu.&lt;br /&gt;
Then press '1' and ENTER to run the motor test.&lt;br /&gt;
Test consist of the following sequence :&lt;br /&gt;
&lt;br /&gt;
Left motor : Forward half speed&lt;br /&gt;
Left motor : Reverse full speed&lt;br /&gt;
Right motor : Forward half speed&lt;br /&gt;
Right motor : Reverse full speed&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2846</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2846"/>
				<updated>2015-12-06T17:33:36Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Motor controller (PID) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variable ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    float motorAccel  ;  // motor wheel acceleration (warning: do not set too high)&lt;br /&gt;
    int motorSpeedMaxRpm   ;   // motor wheel max RPM&lt;br /&gt;
    int motorSpeedMaxPwm  ;  // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023)&lt;br /&gt;
    float motorPowerMax   ;    // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;              // motor left wheel PID controller&lt;br /&gt;
    PID motorRightPID;              // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ; // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;  // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ; // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;  // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax; // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;   // bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;   // bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ;    // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ;    // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ; // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ; // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;      // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2845</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2845"/>
				<updated>2015-12-06T17:33:02Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
== Motor variable ==&lt;br /&gt;
&lt;br /&gt;
    // --------- wheel motor state ----------------------------&lt;br /&gt;
    // wheel motor speed ( &amp;lt;0 backward, &amp;gt;0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm&lt;br /&gt;
    float motorAccel  ;  // motor wheel acceleration (warning: do not set too high)&lt;br /&gt;
    int motorSpeedMaxRpm   ;   // motor wheel max RPM&lt;br /&gt;
    int motorSpeedMaxPwm  ;  // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023)&lt;br /&gt;
    float motorPowerMax   ;    // motor wheel max power (Watt)&lt;br /&gt;
    PID motorLeftPID;              // motor left wheel PID controller&lt;br /&gt;
    PID motorRightPID;              // motor right wheel PID controller&lt;br /&gt;
    float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)&lt;br /&gt;
    float motorSenseLeftScale ; // motor left sense scale  (mA=(ADC-zero)/scale)&lt;br /&gt;
    int motorRollTimeMax ;  // max. roll time (ms)&lt;br /&gt;
    int motorRollTimeMin  ; // min. roll time (ms)&lt;br /&gt;
    int motorReverseTime ;  // max. reverse time (ms)&lt;br /&gt;
    long motorForwTimeMax; // max. forward time (ms) / timeout&lt;br /&gt;
    float motorBiDirSpeedRatio1 ;   // bidir mow pattern speed ratio 1&lt;br /&gt;
    float motorBiDirSpeedRatio2 ;   // bidir mow pattern speed ratio 2&lt;br /&gt;
    bool motorRightSwapDir     ;    // inverse right motor direction? &lt;br /&gt;
    bool motorLeftSwapDir      ;    // inverse left motor direction?  &lt;br /&gt;
    int motorLeftSpeedRpmSet ; // set speed&lt;br /&gt;
    int motorRightSpeedRpmSet ;&lt;br /&gt;
    float motorLeftPWMCurr ; // current speed&lt;br /&gt;
    float motorRightPWMCurr ;&lt;br /&gt;
    int motorRightSenseADC ;&lt;br /&gt;
    int motorLeftSenseADC ;&lt;br /&gt;
    float motorLeftSenseCurrent ;     &lt;br /&gt;
    float motorRightSenseCurrent ;&lt;br /&gt;
    float motorLeftSense ;      // motor power (range 0..MAX_MOTOR_POWER)&lt;br /&gt;
    float motorRightSense ;&lt;br /&gt;
    int motorPowerIgnoreTime; &lt;br /&gt;
    int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed&lt;br /&gt;
    int motorLeftSenseCounter ;  // motor current counter&lt;br /&gt;
    int motorRightSenseCounter ;&lt;br /&gt;
    unsigned long nextTimeMotorSense ;&lt;br /&gt;
    unsigned long lastSetMotorSpeedTime;&lt;br /&gt;
    unsigned long motorLeftZeroTimeout;&lt;br /&gt;
    unsigned long motorRightZeroTimeout;&lt;br /&gt;
    boolean rotateLeft;&lt;br /&gt;
    unsigned long nextTimeRotationChange;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=2844</id>
		<title>Ardumower PCB</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_PCB&amp;diff=2844"/>
				<updated>2015-12-05T22:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &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: Ardumower_overview.png | Components overview&lt;br /&gt;
File: Ardumower_chassis_components.png | Chassis components&lt;br /&gt;
File: Arduinomega.jpg | Ardumower's heart: Arduino Mega 2560 microcontroller&lt;br /&gt;
File: Ardumower_parts.jpg| Modules available in the shop&lt;br /&gt;
File: Ardumower_pcb_photo.jpg | Ardumower PCB connects all modules (available in the shop)&lt;br /&gt;
File: Ardumower_chassis_pcb1.jpg | Chassis and PCB inside&lt;br /&gt;
File: Ardumower_chassis_pcb2.jpg | PCB mount&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Needed modules=&lt;br /&gt;
&lt;br /&gt;
All modules can be purchased as complete kits via the [https://www.marotronics.de/index.php?k=7 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=7]] .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What is needed for the development of Ardumowers.&lt;br /&gt;
&lt;br /&gt;
*[https://www.marotronics.de/Ardumower-Board-12-Prototyp-mit-Chassis-und-Motoren The Ardumower chassis including motors and motherboard]&lt;br /&gt;
&lt;br /&gt;
*Important modules to choose::&lt;br /&gt;
**Zubehör Set (Widerstände, Stiftleisten etc.)&lt;br /&gt;
**2 x Protector Board &lt;br /&gt;
**1 x Mega Board 2560 R3&lt;br /&gt;
**1 x INA169 Strom Sensor Board&lt;br /&gt;
**2 x Dual Treiber MC33926&lt;br /&gt;
**3 x DC-DC LM2596 Step-Down Regler&lt;br /&gt;
**1 x Wireless Bluetooth Modul HC-05&lt;br /&gt;
**1 x Real Time Clock I2C DS1307&lt;br /&gt;
**1 x 24 VoltLadegerät für den Ardumower Akku&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Optional modules::&lt;br /&gt;
**Zubehör Set Ladeschaltung (Blei Akkus) &lt;br /&gt;
**WIFI Wlan Modul ESP8266 ESP01 &lt;br /&gt;
**Ultraschallsensoren HC-SR04 (bis zu 3 Stück werden unterstützt)&lt;br /&gt;
**Regensensor &lt;br /&gt;
**GPS Modul GY-GPS6MV2 &lt;br /&gt;
**GYRO-80&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*1 x [http://www.asn-shop.de/Ardumower-Power-Pack-259V-45Ah Ardumower Power Pack]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*1 x [https://www.marotronics.de/3-Messer-3-Schrauben-passend-zB-fuer-AutomowerZ-von-HusqvarnaZ 3 Messer + 3 Schrauben passend z.B. für Automower® von Husqvarna®]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*1 x [https://www.marotronics.de/Perimeter-Sender-Board-Prototyp-mit-Platinen-Zubehoer Perimeter Sender Board (Prototyp) mit Platinen Zubehör]&lt;br /&gt;
*Important modules to choose::&lt;br /&gt;
**1x Dual MC33926 Motor Driver Carrier &lt;br /&gt;
**1x INA169 Analog DC Current Sensor Breakout - 60V 2,5A / 5A Marotronics &lt;br /&gt;
**1 x DC-DC Spannungsregler LM2596 Step-Down Regler einstellbar&lt;br /&gt;
**1 x Nano V3.0 ATmega328-AU Arduino kompatibel Mikrocontroller Board &lt;br /&gt;
&lt;br /&gt;
*Optional modules::&lt;br /&gt;
**Gehäuse inklusive 5 passender Schrauben für das PCB &lt;br /&gt;
**Anschlussklemmen max.3 (2xSchleife, 1xLadeanschluss) &lt;br /&gt;
**Einbaubuchse für Gehäuse 2,5 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Additional accessories depending on needs:&lt;br /&gt;
&lt;br /&gt;
**[https://www.marotronics.de/25-Rasennaegel-Heringe-fuer-Rasenroboter-zB-Robomow-STAFFELPREISE Rasennägel/Heringe]&lt;br /&gt;
**[https://www.marotronics.de/100-m-Kabel-Einzelader-1-x1-mm-H05V-K-schwarz Kabel für die Schleife]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A charging station is in development and will follow soon.&lt;br /&gt;
&lt;br /&gt;
=PCB=&lt;br /&gt;
The printed circuit board (PCB) connects all electronic modules. The PCB is made with the following design parameters:&lt;br /&gt;
&lt;br /&gt;
* PCB dimensions 241x114mm &lt;br /&gt;
* All modules (motor driver, Bluetooth, etc.) can be soldered (or plugged) on the PCB (modules are available in the Ardumower shop)&lt;br /&gt;
* Uses the Arduino Mega 2560&lt;br /&gt;
* Optional: can use Arduino Due via additional adapter PCB&lt;br /&gt;
* Optional: integrated charging circuit (current limiting)&lt;br /&gt;
* All connections are available on connectors as well as +5V and GND&lt;br /&gt;
* Max. trace current (for motors): 8A&lt;br /&gt;
&lt;br /&gt;
==PCB versions==&lt;br /&gt;
Robot PCB v0.5 (initial prototype)&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/tree/master/pcb/megashield_svn_0.5/Platinenbilder Photos]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_0.5/ardumower%20mega%20shield%20svn.pdf Schematics]&lt;br /&gt;
* [http://www.ardumower.de/media/kunena/attachments/1259/ArdumuverBestckung2015-04-221115.pdf Build instructions]&lt;br /&gt;
* [http://www.ardumower.de/media/kunena/attachments/905/TranslatedcopyofPrototypPlatine.docx.pdf Build instructions (English translation)]&lt;br /&gt;
&lt;br /&gt;
Robot PCB v1.2  (minor layout changes)&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/ardumower%20mega%20shield%20svn.pdf Schematics]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/tree/master/pcb/megashield_svn_1.2_geschlossen/Platinenbilder Photos]&lt;br /&gt;
* [http://www.ardumower.de/media/kunena/attachments/1259/ArdumuverBestckung2015-04-221115.pdf Build instructions]&lt;br /&gt;
* [http://www.ardumower.de/media/kunena/attachments/905/TranslatedcopyofPrototypPlatine.docx.pdf Build instructions (English translation)]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WorkaRound20150527.pdf WorkaRound20150527]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WorkaRound20150530.pdf WorkaRound20150530]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/Motor-EntstoerungREV20150531.pdf Motor-decrease noise REV20150531],  [http://www.ardumower.de/media/kunena/attachments/1725/Motor-EntstoerungREV20150531.pdf (English comments)]&lt;br /&gt;
* [https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board]&lt;br /&gt;
&lt;br /&gt;
Robot PCB v1.3 (in development)&lt;br /&gt;
* simplified design (Due adapter will be externally)&lt;br /&gt;
* motor driver protection&lt;br /&gt;
* battery-off circuit, safety-button&lt;br /&gt;
* sets 'reference-design' and required modules: 3x DC/DC, RTC, IMU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The schematics and PCB files were created with KiCad. They can be downloaded from [https://github.com/Ardumower/ardumower/archive/master.zip github] and can be edited by open source KiCAD software (Download [https://docs.google.com/uc?id=0BzTsqkQk2FRsSEhOR2tVc1p4LVk&amp;amp;export=download here] or [http://iut-tice.ujf-grenoble.fr/cao/KiCad_stable-2013.07.07-BZR4022_Win_full_version.exe here]).&lt;br /&gt;
&lt;br /&gt;
==PCB jumpers==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature used&lt;br /&gt;
! YES&lt;br /&gt;
! NO&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| Integrated charging control via adjustable &lt;br /&gt;
&lt;br /&gt;
voltage regulator (LM350T) with potentiometer&lt;br /&gt;
&lt;br /&gt;
for adjustable charging voltage &lt;br /&gt;
(recommended: NO) &lt;br /&gt;
| D7: DIODE&lt;br /&gt;
&lt;br /&gt;
D3: DIODE&lt;br /&gt;
&lt;br /&gt;
C1, C4, U4, RV1: used&lt;br /&gt;
|D7: SHORT-CIRCUIT&lt;br /&gt;
&lt;br /&gt;
D3: SHORT-CIRCUIT&lt;br /&gt;
&lt;br /&gt;
C1, C4, U4, RV1: not used&lt;br /&gt;
| Do not use if using external battery charger&lt;br /&gt;
|-&lt;br /&gt;
| External power while charging (recommended: NO)&lt;br /&gt;
| JP6: CLOSE&lt;br /&gt;
&lt;br /&gt;
JP7: OPEN&lt;br /&gt;
&lt;br /&gt;
D4: DIODE&lt;br /&gt;
&lt;br /&gt;
C5: not used&lt;br /&gt;
| JP6: OPEN&lt;br /&gt;
&lt;br /&gt;
JP7: CLOSE&lt;br /&gt;
&lt;br /&gt;
D4: SHORT-CIRCUIT&lt;br /&gt;
&lt;br /&gt;
C5: used&lt;br /&gt;
| Use to power your PCB from externally (disconnect battery from PCB) while charging&lt;br /&gt;
|-&lt;br /&gt;
| Arduino controlled charge relay (recommended: YES)&lt;br /&gt;
| JP4: CLOSE&lt;br /&gt;
&lt;br /&gt;
JP5: OPEN&lt;br /&gt;
| JP4: OPEN&lt;br /&gt;
&lt;br /&gt;
JP5: CLOSE&lt;br /&gt;
| Use for Arduino controlled charge relay (not automatic charging)&lt;br /&gt;
|-&lt;br /&gt;
| Arduino Due (3.3V I/O)&lt;br /&gt;
| LP0, ..., LP15: OPEN&lt;br /&gt;
| LP0, ..., LP15: CLOSE&lt;br /&gt;
| Do not use if using Arduino Mega&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth VCC=3.3V&lt;br /&gt;
| JP8: OPEN&lt;br /&gt;
&lt;br /&gt;
JP9: CLOSE&lt;br /&gt;
| JP8: CLOSE&lt;br /&gt;
&lt;br /&gt;
JP9: OPEN&lt;br /&gt;
| Many latest modules use 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth programming mode&lt;br /&gt;
| JP2: CLOSE &lt;br /&gt;
| JP2: OPEN&lt;br /&gt;
| Use for reprogramming baud rate etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==PCB modules==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Module&lt;br /&gt;
! Feature&lt;br /&gt;
! Pinout&lt;br /&gt;
! Optional&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| U1&lt;br /&gt;
| DC/DC converter (10V)&lt;br /&gt;
| GND, Vout, Vin, GND&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U2&lt;br /&gt;
| Bluetooth (HC-05)&lt;br /&gt;
| VCC, GND, TXD, RXD, Key, LED&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U3&lt;br /&gt;
| Current sensor (charging)&lt;br /&gt;
| VCC, GND, OUT, IP+, IP-5&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U4&lt;br /&gt;
| Charge control (LM350T)&lt;br /&gt;
| AJD, OUT, IN&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U5&lt;br /&gt;
| Current sensor (charging)&lt;br /&gt;
| VCC, GND, OUT, IP+, IP-5&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U6&lt;br /&gt;
| DC/DC converter (3.3V)&lt;br /&gt;
| GND, Vout, Vin, GND&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U7&lt;br /&gt;
| DC/DC converter (5V)&lt;br /&gt;
| GND, Vout, Vin, GND&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U8&lt;br /&gt;
| Realtime clock (DS1307)&lt;br /&gt;
| Batt, GND, VCC, SDA, SCL, DS, SQ&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U9&lt;br /&gt;
| Wifi (ESP8266)&lt;br /&gt;
| TX, CH_PD, Reset, VCC, GND, GP_IO2, GP_IO0, RX&lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U10&lt;br /&gt;
| Level shifter 5V-&amp;gt;3V (Arduino Due)&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| U11&lt;br /&gt;
| Wifi (ESP8266)&lt;br /&gt;
| TX, CH_PD, Reset, VCC, GND, GP_IO2, GP_IO0, RX&lt;br /&gt;
| Yes&lt;br /&gt;
| alternative mount position&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==PCB connectors==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Connector&lt;br /&gt;
! Feature&lt;br /&gt;
! Pinout&lt;br /&gt;
! Optional&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| P1&lt;br /&gt;
| Sonar center (HC SR-04)&lt;br /&gt;
| 5V, GND, Trigger, Echo&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P2&lt;br /&gt;
| Sonar right (HC SR-04)&lt;br /&gt;
| 5V, GND, Trigger, Echo&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| P3&lt;br /&gt;
| Sonar left (HC SR-04)&lt;br /&gt;
| 5V, GND, Trigger, Echo&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| P4&lt;br /&gt;
| reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P5&lt;br /&gt;
| IMU (gyro,acceleration,compass) (GY-80)&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P6&lt;br /&gt;
| Lawn sensor&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P7&lt;br /&gt;
| Status LEDs&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P8&lt;br /&gt;
| Odometry right&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P9&lt;br /&gt;
| Odometry left&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P10&lt;br /&gt;
| GPS (GY-NEO6MV2)&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P11&lt;br /&gt;
| Bumper&lt;br /&gt;
| GND, GND, right, left&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P12&lt;br /&gt;
| Perimeter coil (center or left)&lt;br /&gt;
| 5V, GND, perimeter&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P13&lt;br /&gt;
| R/C remote control&lt;br /&gt;
| 5V, GND, mow, steer, speed, switch&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P14&lt;br /&gt;
| Measurement points&lt;br /&gt;
| 5V, GND, (Depending on JP15: 3.3V, 5V or Arduino 3.3V)&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P15&lt;br /&gt;
| Wheel motor left&lt;br /&gt;
| M1OUT1, M1OUT2&lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P16&lt;br /&gt;
| Optional motor driver input&lt;br /&gt;
|&lt;br /&gt;
| Yes&lt;br /&gt;
| Do not connect &lt;br /&gt;
|-&lt;br /&gt;
| P17&lt;br /&gt;
| Optional motor driver input&lt;br /&gt;
|&lt;br /&gt;
| Yes&lt;br /&gt;
| Do not connect &lt;br /&gt;
|-&lt;br /&gt;
| P18&lt;br /&gt;
| Wheel motor right&lt;br /&gt;
| M2OUT1, M2OUT2&lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P19&lt;br /&gt;
| Tilt sensor&lt;br /&gt;
| 5V, GND, tilt&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P20&lt;br /&gt;
| Button (Start/Stop)&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P21&lt;br /&gt;
| Drop sensor right&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P22&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P23&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P24&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P25&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P26&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P27&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P28&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P29&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P30&lt;br /&gt;
| Perimeter coil right&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P31&lt;br /&gt;
| Drop sensor left&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P32&lt;br /&gt;
| GND&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P33&lt;br /&gt;
| 5V&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P34&lt;br /&gt;
| 3.3V&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P35&lt;br /&gt;
| Mower motor RPM&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P36&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P37&lt;br /&gt;
| Mower motor&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P38&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P39&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P40&lt;br /&gt;
| User switches&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P41&lt;br /&gt;
| Rain sensor&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P42&lt;br /&gt;
| Charging pins&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P43&lt;br /&gt;
| Battery (24V)&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P44&lt;br /&gt;
| Wifi module (ESP8266)&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P45&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| P46&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Power supply=&lt;br /&gt;
Please also read the section 'Voltages' under [[Motor driver]] for more information on motor voltages.&lt;br /&gt;
&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;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Dcdc_noise.jpg | NOTE: Keep away coil/pre-amplifier from DC/DC converters!&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Download and flash Arduino code=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE&amp;lt;/b&amp;gt;: If you have never worked with Arduino before, read our &amp;lt;b&amp;gt;[http://wiki.ardumower.de/index.php?title=Arduino_first_steps 'Arduino first steps' introduction]&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You have two options: &lt;br /&gt;
* Download [https://github.com/Ardumower/ardumower/releases github code (recommended)]  OR&lt;br /&gt;
* Download [http://www.ardumower.de/index.php/de/downloads v0.9.3 code (old, not recommended)]&lt;br /&gt;
&lt;br /&gt;
Finally, download and start the [http://arduino.cc/en/Main/Software Arduino IDE] to flash the code to your Arduino.&lt;br /&gt;
&lt;br /&gt;
'''Arduino Version''': It is very Importent that you use the Arduino IDE version 1.6.3 or above AND select the right Board (Mega 2560 or Due).&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Note: Always verify that the pin configuration in your Arduino code (config.h/mower.cpp) matches your actual circuit!&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;
Run the ADC calibration once (either via serial console with command 'd' or &amp;quot;pfodApp-&amp;gt;ADC Calibration&amp;quot;), so that the received signal is symmetric around zero.&lt;br /&gt;
&lt;br /&gt;
=Diagnostics/troubleshooting=&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 sensor trigger counters and current sensor values.&lt;br /&gt;
&lt;br /&gt;
[[File:warning.png]] Additionally, you can use pfodApp (Android) to plot the sensors (trigger counters and current values) over time. This allows you to wirelessly monitor your robot mower for error diagnostics. It is highly recommended.&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;
See section [[Troubleshooting]] for details on all errors.&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;
=Settings=&lt;br /&gt;
The robot uses settings that you can adjust for your own robot and environment (via pfodApp or directly in the code). The default settings (factory settings) are stored in the config file 'mower.cpp'.&lt;br /&gt;
&lt;br /&gt;
The settings can be adjusted via Android phone ([http://wiki.ardumower.de/index.php?title=Bluetooth pfodApp]). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File:Cheat_sheet.png | General settings &lt;br /&gt;
  File:Speedcontrol.png | Motor speed settings&lt;br /&gt;
  File:Ardumower_config_files.png | General config file idea &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Important: If you uploaded a new version into your robot, 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>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2842</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2842"/>
				<updated>2015-12-05T22:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Wiring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Ardumower/ardumower/raw/master/pcb/megashield_svn_1.2_geschlossen/Dokumentation/WORKSHOP%20Protector-Board.pdf Protector board] is adviced to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
/!\ work on going !&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2841</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2841"/>
				<updated>2015-12-05T22:10:07Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protection board is advice to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor controller (PID) ==&lt;br /&gt;
The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot-&amp;gt;Motor control):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Odometry_motor_pid_controller.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
/!\ work on going !&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2839</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2839"/>
				<updated>2015-12-05T22:02:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 -&amp;gt; [[Deutsche Version]] (noch in Bearbeitung)&lt;br /&gt;
 -&amp;gt; [[Russian Version]] (в разработке)&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''Ardumower - the DIY robot mower'''&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;Ardumower WIKI, the knowledge base of the Ardumower community&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:H7c785a1.png |100px|left|Ardumower Logo]][[Image:1000x500-ausbildung.jpg|thumb|180px|Image of the month]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
You probably know Ardumower Forum, the DIY robot mower community on the Internet. Now there's the additional Ardumower knowledge site, named WIKI. Here you find information, basics, and tips about DIY robot mowers sorted by different topics. The pages should be a starter guide as well as a reference book (you may recognize the structure from the well known Wikipedia). We use the same system for it: MediaWiki.&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On this WIKI, you actually can modify pages freely - you can even try out your first edits on a testpage [[test]] on this Wiki. Before you edit longer pages, you should practise on this testpage [[test]].&lt;br /&gt;
&lt;br /&gt;
Help us improving this Wiki! Simply [http://wiki.ardumower.de/index.php?title=Spezial:Anmelden/signup register] and start editing today...&lt;br /&gt;
&lt;br /&gt;
=Getting started / Introduction=&lt;br /&gt;
[[Image:Ardumower_overview.png|thumb|400px|Overview]]&lt;br /&gt;
These introduction pages should help you to get started building your own DIY robot mower:&lt;br /&gt;
*[[Getting started]] (introduction and overall steps)&lt;br /&gt;
*[[Arduino first steps]] (if you have never worked with Arduino before: how to upload to your Arduino...)&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
These pages give you a reference book sorted by robot mower 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 assembly&lt;br /&gt;
|[[Ardumower chassis]] &lt;br /&gt;
|-&lt;br /&gt;
!Arduino code, schematics, PCB etc.&lt;br /&gt;
|[[Arduino first steps]]&lt;br /&gt;
|[[Ardumower PCB|Ardumower PCB &amp;amp; code]]&lt;br /&gt;
|[[Arduino Due]]&lt;br /&gt;
|[[Troubleshooting]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver|Motor driver (general information)]]&lt;br /&gt;
|[[Wheel Motor]]&lt;br /&gt;
|[[Mower Motor]]&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;
|[[Dropsensor]]&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|Bluetooth &amp;amp; App]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture, algorithms&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|[[Mowing Pattern]]&lt;br /&gt;
|[[Sensor fusion|Sensor fusion &amp;amp; SLAM]]&lt;br /&gt;
|[[PID control]]&lt;br /&gt;
|[[Kalman|Kalman (EKF)]]&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 robot mower project / Dein Rasenroboter-Projekt=&lt;br /&gt;
Describe your own robot mower project on a new WIKI page / Beschreibe Dein eigenes Rasenroboter-Projekt auf einer neuen WIKI-Site:&lt;br /&gt;
* [[Ardumower Chassis 'mountain mod']]&lt;br /&gt;
* [[Ardumower Mini]]&lt;br /&gt;
* [[Tracked Mower]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extension / Deine Ardumower Erweiterung=&lt;br /&gt;
Describe your own robot mower extension or improvement (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other addition) on a new WIKI page / Beschreibe Deine eigene Erweiterung oder Verbesserung des Ardumowers:&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* [[Ardumower future PCB]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&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;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
[https://www.marotronics.de/ Ardumower Shop]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2838</id>
		<title>Wheel Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Wheel_Motor&amp;diff=2838"/>
				<updated>2015-12-05T22:01:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: Die Seite wurde neu angelegt: „= Wheel motors caracteristics &amp;amp; driver = &amp;lt;gallery&amp;gt;   File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gea…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wheel motors caracteristics &amp;amp; driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Wiring =&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protection board is advice to be used between controler and motor.&lt;br /&gt;
&lt;br /&gt;
== Control principal : PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programming =&lt;br /&gt;
&lt;br /&gt;
/!\ work on going !&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Motor_driver&amp;diff=2836</id>
		<title>Motor driver</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Motor_driver&amp;diff=2836"/>
				<updated>2015-12-05T21:53:51Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
Ardumower's design uses two different types of motors (all motors can be purchased via the [https://www.marotronics.de/index.php?k=7 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=7]]):&lt;br /&gt;
* Two motors (with integrated gearing) for driving (wheel motors), and encoder (for distance, direction and speed control)&lt;br /&gt;
* One motor (with high rotation speed) for mowing (mower motor)&lt;br /&gt;
&lt;br /&gt;
To control a motor, it requires a 'motor driver'.&lt;br /&gt;
&lt;br /&gt;
= Voltages =&lt;br /&gt;
Although there exist 12V motors and 24V motors, as in all modern systems, the Ardumower uses 24V motors. The reason is as follows:&lt;br /&gt;
&lt;br /&gt;
Assuming that the motor consumes 50W, using 24V results to a motor current: 50W / 24V = 2A.&lt;br /&gt;
&lt;br /&gt;
Assuming that the motor consumes 50W, using 12V results to a motor current: 50W / 12V = 4A.&lt;br /&gt;
&lt;br /&gt;
The higher the current (A), the more problems arise:&lt;br /&gt;
&lt;br /&gt;
* The motor driver must be suitable for higher current (more expensive)&lt;br /&gt;
* The PCB traces need to be more thick (more expensive)&lt;br /&gt;
* The rechargable battery need to support higher current (more expensive)&lt;br /&gt;
&lt;br /&gt;
So, that's the reason why Ardumower is designed as a 24V system.&lt;br /&gt;
&lt;br /&gt;
= Motor driver =&lt;br /&gt;
&lt;br /&gt;
== Principle ==&lt;br /&gt;
A motor driver is a circuit that allows current to flow either one direction or the opposite direction through the motor - depending on wether the motor should turn forward or backward (so called 'H-bridge'). There are many motor drivers available as ready-circuit boards, some can even control two motors  (Dual H-Bridge) - if you connect two of their H-bridges in parallel, the maximum motor current can be increased.&lt;br /&gt;
&lt;br /&gt;
If the direction of the motor does not need to be controlled, (e.g. for the blades), you do not need an H-bridge, but instead a simple 'switch' (e.g. MOSFET-transistor-circuit).&lt;br /&gt;
&lt;br /&gt;
The motor driver is connected through control signals to the Arduino. Example:&lt;br /&gt;
&lt;br /&gt;
  Arduino Digital Pin  —&amp;gt;  MOTOR-Direction Pin (DIR)&lt;br /&gt;
  Arduino PWM Pin      —&amp;gt;  MOTOR-Speed Pin (PWM)&lt;br /&gt;
  Arduino Analog Pin   &amp;lt;—  MOTOR-Current Sensor Pin&lt;br /&gt;
&lt;br /&gt;
== Popular modules ==&lt;br /&gt;
=== MC33926 (recommended) ===&lt;br /&gt;
&lt;br /&gt;
Features: up to 3A with integrated current sensor and thermal shut-down protection, for all kind of robot mowers) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Mc33926.jpg | pinout&lt;br /&gt;
File:Mc33926_example.jpg | jumpers&lt;br /&gt;
File:MC33926_schematics.jpg | schematics&lt;br /&gt;
File:Mc33926_current_limiter.jpg | automatic current limiter&lt;br /&gt;
File:Motor_pwm_50_percent_transients.jpg | Motor start 50% PWM transients&lt;br /&gt;
File:driver_hw_protection.png | Peak/EMF protection&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 M1_FB     --- pinMotorLeftSense A1&lt;br /&gt;
 M1_SF     --- pinMotorLeftFault 25&lt;br /&gt;
 M1_PWM_D1 --- connect with jumper to GND&lt;br /&gt;
 M1_PWM_D2 --- connect with jumper to VDD&lt;br /&gt;
 M1_IN1    --- pinMotorLeftPWM 5  &lt;br /&gt;
 M1_IN2    --- pinMotorLeftDir 31&lt;br /&gt;
 EN        --- pinMotorEnable  37&lt;br /&gt;
 M2_FB     --- pinMotorRightSense A0&lt;br /&gt;
 M2_SF     --- pinMotorRightFault 27&lt;br /&gt;
 M2_PWM_D1 --- connect with jumper to GND&lt;br /&gt;
 M2_PWM_D2 --- connect with jumper to VDD&lt;br /&gt;
 M2_IN1    --- pinMotorRightPWM  3 &lt;br /&gt;
 M2_IN2    --- pinMotorRightDir 33&lt;br /&gt;
 EN        --- pinMotorEnable  37&lt;br /&gt;
 VDD       --- Arduino 5V&lt;br /&gt;
&lt;br /&gt;
=== L6201P ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: L6201P_motor_driver.jpg | L6201P PCB&lt;br /&gt;
  File: L6201p.png | L6201P datasheet&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Features: 48V, 4A&lt;br /&gt;
&lt;br /&gt;
 B+     power supply output voltage equal to the power connector&lt;br /&gt;
 GND    GND&lt;br /&gt;
 EN     driver enable&lt;br /&gt;
 RPWM   forward PWM signal, active HIGH&lt;br /&gt;
 LPWM   reverse PWM signal, active HIGH&lt;br /&gt;
 CT     current signal output&lt;br /&gt;
 VT     voltage signal output&lt;br /&gt;
&lt;br /&gt;
 Forward   EN=1, RPWM=PWM, LPWM=0&lt;br /&gt;
 Reverse   EN=1, RPWM=0,   LPWM=PWM  (also possible?   EN=1, RPWM=255-PWM, LPWM=1  =&amp;gt; needs to be verified!)&lt;br /&gt;
 Brake     EN=1, RPWM=0,   LPWM=0&lt;br /&gt;
 Not brake EN=0, RPWM=x,   LPWM=x&lt;br /&gt;
 Note: 1=High level (3.3-5v), 0=Low level (0V or GND)&lt;br /&gt;
&lt;br /&gt;
=== L9958 ===&lt;br /&gt;
Features: Arduino 240W H-bridge Motor Driver Board - SX8847, up to 8A &lt;br /&gt;
&lt;br /&gt;
Note that this module has an on-board [http://en.wikipedia.org/wiki/78xx linear voltage regulator], which converts the input POWER (typically 24 or 12V) to 5V. Some modules do this with a single voltage regulator (chip VR1 on the module), or in a two-staged approach (VR1 and U2). &lt;br /&gt;
&lt;br /&gt;
Converting 24V to 5V with a linear voltage regulator is very inefficient (current in = current out, so if you need 100mA at 5V, the linear voltage regulator requires 100mA at 24V, so you loose 1.9W in this module). Therefore, it is recommended to disconnect the linear voltage regulator from the board, and use the 5V from the switched mode power supply. &lt;br /&gt;
&lt;br /&gt;
 L9958 GND---GND&lt;br /&gt;
 L9958 VCC---Arduino 5V&lt;br /&gt;
 L9958 EN---Arduino 5V&lt;br /&gt;
 L9958 DI---GND&lt;br /&gt;
 L9958 DIR---Arduino MOTOR_DIR&lt;br /&gt;
 L9958 PWM---Arduino MOTOR_PWM&lt;br /&gt;
 L9958 MOTOR(+)---motor(+)&lt;br /&gt;
 L9958 MOTOR(-)---motor(-)&lt;br /&gt;
 L9958 POWER(+)---battery(+)&lt;br /&gt;
 L9958 POWER(-)---battery(-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Motor_driver_L9958.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== L298N ===&lt;br /&gt;
Features: up to 4A &lt;br /&gt;
Notice: When using a L298N-motor driver, both H-bridges (2A) should be connected in parallel, so that both bridges drive a single motor (max. 4A):&lt;br /&gt;
&lt;br /&gt;
Connect in parallel:&lt;br /&gt;
 IN1 with IN4&lt;br /&gt;
 IN2 with IN3&lt;br /&gt;
 OUT1 with OUT4&lt;br /&gt;
 OUT2 with OUT3&lt;br /&gt;
(Do NOT disconnect the SENSE-lines, except when you want to measure current by a 'shunt' resistor).&lt;br /&gt;
&lt;br /&gt;
Make sure there is a jumper on both ENA and ENB. Also, make sure there is a jumper on S1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Motordriver_l298n.JPG | driver &lt;br /&gt;
File: L298driver.jpg | double current&lt;br /&gt;
File: L298N_schematics.jpg | schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Choosing a driver =&lt;br /&gt;
&lt;br /&gt;
When purchasing a motor driver, consider...&lt;br /&gt;
* max. thermal load (short-circuit current)&lt;br /&gt;
* price&lt;br /&gt;
&lt;br /&gt;
== Starting current ==&lt;br /&gt;
Here are some measurements of the Ardumower motor's starting current (peak):&lt;br /&gt;
&lt;br /&gt;
Starting current:&lt;br /&gt;
* Gear motor: 15A (starting current peak)&lt;br /&gt;
* Mowing motor: 20A (starting current peak)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Messung_einschalt_spitzen.jpg | Gear motor start current (peak)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Short-circuit current ==&lt;br /&gt;
To not damage the motor driver on the first run, find out the maximum current that can flow through your motors. In other words, find out the 'short-circuit' current. Typical measurement installation:&lt;br /&gt;
&lt;br /&gt;
Battery === Ampere meter === Motor&lt;br /&gt;
&lt;br /&gt;
The Amperemeter (e.g. model making) should be able to measure the maximum current (e.g. 30A). The motor to be measured is mechanically blocked (so it cannot rotate).&lt;br /&gt;
&lt;br /&gt;
'''Warning'''&lt;br /&gt;
&lt;br /&gt;
* always remove blades&lt;br /&gt;
* only connect battery for a short period (1-5 seconds)&lt;br /&gt;
* always use cables with sufficient wire cross section&lt;br /&gt;
&lt;br /&gt;
Example measurement:&lt;br /&gt;
&lt;br /&gt;
* Rotenbach SPM08-320&lt;br /&gt;
** Wheel motor: 8A&lt;br /&gt;
** Mowing motor:&lt;br /&gt;
&lt;br /&gt;
* Ambrogio L50&lt;br /&gt;
** Wheel motor: 4,5A&lt;br /&gt;
** Mowing motor: 22A&lt;br /&gt;
&lt;br /&gt;
* Tianchen TC-G158&lt;br /&gt;
** Wheel motor: 5,4A&lt;br /&gt;
** Mowing motor: 16A (both 32A)&lt;br /&gt;
&lt;br /&gt;
The measured current will only flow in 'worst-case' scenarios, which means when the motor starts or when it is blocked and it will only flow for a short time  (as your battery might not deliver the high current constantly, and so current and voltage will break down).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Current sensor =&lt;br /&gt;
To detect certain conditions (robot drives against obstacle, motor blocks etc.), the motor current should be monitored constantly. There are two approaches for sensing current.&lt;br /&gt;
&lt;br /&gt;
== Approach &amp;quot;Hall sensor module&amp;quot; ==&lt;br /&gt;
This is the recommended approach for sensing current. These current sensor modules are available for different current ranges.&lt;br /&gt;
&lt;br /&gt;
* ACS712ELC-05A (185mV/A, max. 5A)&lt;br /&gt;
* ACS712ELC-20A (100mV/A, max. 20A)&lt;br /&gt;
* ACS712ELC-30A (66mV/A, max. 30A)&lt;br /&gt;
* The lower the range, the more precise the measurement.&lt;br /&gt;
&lt;br /&gt;
== Approach &amp;quot;Shunt resistor (circuit)&amp;quot; ==&lt;br /&gt;
The current flows across a very small resistor (0.5 Ohm) and the voltage drop is measured&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: L298n_module_circuit.jpg &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
#[http://www.ardumower.de/index.php/en/forum/maehwerk/74-10a-pwm-controller-modul-fuer-den-arduino 10A PWM controller module modification]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2835</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2835"/>
				<updated>2015-12-05T21:41:36Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 -&amp;gt; [[Deutsche Version]] (noch in Bearbeitung)&lt;br /&gt;
 -&amp;gt; [[Russian Version]] (в разработке)&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''Ardumower - the DIY robot mower'''&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;Ardumower WIKI, the knowledge base of the Ardumower community&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:H7c785a1.png |100px|left|Ardumower Logo]][[Image:1000x500-ausbildung.jpg|thumb|180px|Image of the month]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
You probably know Ardumower Forum, the DIY robot mower community on the Internet. Now there's the additional Ardumower knowledge site, named WIKI. Here you find information, basics, and tips about DIY robot mowers sorted by different topics. The pages should be a starter guide as well as a reference book (you may recognize the structure from the well known Wikipedia). We use the same system for it: MediaWiki.&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On this WIKI, you actually can modify pages freely - you can even try out your first edits on a testpage [[test]] on this Wiki. Before you edit longer pages, you should practise on this testpage [[test]].&lt;br /&gt;
&lt;br /&gt;
Help us improving this Wiki! Simply [http://wiki.ardumower.de/index.php?title=Spezial:Anmelden/signup register] and start editing today...&lt;br /&gt;
&lt;br /&gt;
=Getting started / Introduction=&lt;br /&gt;
[[Image:Ardumower_overview.png|thumb|400px|Overview]]&lt;br /&gt;
These introduction pages should help you to get started building your own DIY robot mower:&lt;br /&gt;
*[[Getting started]] (introduction and overall steps)&lt;br /&gt;
*[[Arduino first steps]] (if you have never worked with Arduino before: how to upload to your Arduino...)&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
These pages give you a reference book sorted by robot mower 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 assembly&lt;br /&gt;
|[[Ardumower chassis]] &lt;br /&gt;
|-&lt;br /&gt;
!Arduino code, schematics, PCB etc.&lt;br /&gt;
|[[Arduino first steps]]&lt;br /&gt;
|[[Ardumower PCB|Ardumower PCB &amp;amp; code]]&lt;br /&gt;
|[[Arduino Due]]&lt;br /&gt;
|[[Troubleshooting]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver]]&lt;br /&gt;
|[[Wheel Motor]]&lt;br /&gt;
|[[Mower Motor]]&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;
|[[Dropsensor]]&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|Bluetooth &amp;amp; App]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture, algorithms&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|[[Mowing Pattern]]&lt;br /&gt;
|[[Sensor fusion|Sensor fusion &amp;amp; SLAM]]&lt;br /&gt;
|[[PID control]]&lt;br /&gt;
|[[Kalman|Kalman (EKF)]]&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 robot mower project / Dein Rasenroboter-Projekt=&lt;br /&gt;
Describe your own robot mower project on a new WIKI page / Beschreibe Dein eigenes Rasenroboter-Projekt auf einer neuen WIKI-Site:&lt;br /&gt;
* [[Ardumower Chassis 'mountain mod']]&lt;br /&gt;
* [[Ardumower Mini]]&lt;br /&gt;
* [[Tracked Mower]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extension / Deine Ardumower Erweiterung=&lt;br /&gt;
Describe your own robot mower extension or improvement (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other addition) on a new WIKI page / Beschreibe Deine eigene Erweiterung oder Verbesserung des Ardumowers:&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* [[Ardumower future PCB]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&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;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
[https://www.marotronics.de/ Ardumower Shop]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2832</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2832"/>
				<updated>2015-11-28T14:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
The Ardumower can be monitored and controlled wirelessly:&lt;br /&gt;
* via phone/tablet (Android App)&lt;br /&gt;
* via USB Bluetooth dongle (PC serial console)&lt;br /&gt;
&lt;br /&gt;
On the phone, you'll need the App [https://play.google.com/store/apps/details?id=de.grauonline.arduremote 'ArduRemote']. Alternatively, you can use the App [https://play.google.com/store/apps/details?id=au.com.forward.pfodApp 'pfodApp'].&lt;br /&gt;
&lt;br /&gt;
The application menu includes:&lt;br /&gt;
* Status information (battery voltage, charging current etc.)&lt;br /&gt;
* Settings (Timer etc.)&lt;br /&gt;
* Calibration (Motor, IMU etc.)&lt;br /&gt;
* Remote control (Start/Stop, Switching on/off mower motor, blade modulation etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_live_monitoring_configuration_debugging.jpg | Live configuration, monitoring and debugging&lt;br /&gt;
File: Pfodapp_menu.png | Android app menus&lt;br /&gt;
File: Pfodapp.png | Android app (pfodApp)&lt;br /&gt;
File: Arduremote.png | Android app (ArduRemote)&lt;br /&gt;
File: Bluetooth dongle.jpg | PC communication via Bluetooth USB dongle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Bluetooth module=&lt;br /&gt;
On the robot, you'll need a Bluetooth module supporting Bluetooth Serial Port Profile (SPP). SPP uses Bluetooth Service Discovery Protocol (SDP) and the RFCOMM protocol. Depending on the desired range, you can use different Bluetooth classes:&lt;br /&gt;
&lt;br /&gt;
*Bluetooth class 2 (up to approx. 50m range), e.g. HC03/04/05/06&lt;br /&gt;
*Bluetooth class 1 (up to approx. 100m range), e.g. BTM220, requires additional circuit&lt;br /&gt;
&lt;br /&gt;
=Bluetooth HC-05=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Bluetooth_module.jpg | HC-05 module&lt;br /&gt;
File: HC-05 schematics.jpg | HC-05 schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Bluetooth Module will run at 3.3V, you need a voltage divider for RX line and an Pullup Resistor for the TX Line, like showing in Circuit.&lt;br /&gt;
&lt;br /&gt;
For programming the Module, you must connect the Key Pin from the BT Module, to the 3,3 V from the Arduino (using jumper JP2) and disconect after.&lt;br /&gt;
on the arduino console : press 'd' to enter menu and use option 3 to 'set up BT module config'.&lt;br /&gt;
&lt;br /&gt;
=Steps=&lt;br /&gt;
# Configuration mode: The Bluetooth module must be in configuration mode for the next step:&lt;br /&gt;
## for HC05:           Connect KEY pin to 3.3V after powering on the module (use jumper JP2 on PCB v1.2)&lt;br /&gt;
## for HC06/linvor:    Do NOT pair/connect (LED must be blinking)&lt;br /&gt;
## for FBT06/MBTV4:    First you have to solder the PIO11 pin to VCC (PIN 12) which is 3.3 Volts using a thin wire.&lt;br /&gt;
# Baud rate: Bluetooth module and Arduino Mega must use the same baud rate (19200) - The baud rate of the BT module can be changed via Ardumower serial console. Connect Ardumower Mega board to your PC (USB), enter the serial console in the Arduino IDE (CTRL+M), and choose baud rate 19200, then choose 'd' to enter the Ardumower menu to configure the module (option 3 configure the BT module).&lt;br /&gt;
# Restart: After your BT module is configured successfully, remove KEY pin connection again (HC05), and restart module.&lt;br /&gt;
# Pairing: The BT module must be 'paired' with your Android device once (via Android device settings). On the Android device, choose symbol &amp;quot;Settings&amp;quot; (via Android menu). Now choose  &amp;quot;Wireless and Networks-&amp;gt;Bluetooth Settings&amp;quot; and &amp;quot;Find device&amp;quot;. Finally, choose &amp;quot;pair with this device&amp;quot; and enter your pin (very often &amp;quot;1234&amp;quot;). The Bluetooth module should now appear as &amp;quot;paired&amp;quot;. 'BlueLed' (on PCB V1.2) light-on when Robot and app are connected.&lt;br /&gt;
# pfodApp: Now you can start pfodApp/ArduRemote to connect to the Ardumower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota : If you experience difficulties to configure baud rate (step2), you can alternatively press the little switch on your BT module while powering up this will automatically set baud rate to 38400. then you can use option 3 of Ardumower menu to configure BT module (set name, pin code etc...). Detail information on configuring the BT module available here [http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/]&lt;br /&gt;
&lt;br /&gt;
Nota : When you enter in menu mode (ardumower console press 'd'), you may experience timeout from bluetooth app. you need to exit from the menu for the robot to interact with your app (phone or tablet)&lt;br /&gt;
&lt;br /&gt;
=Communication protocol=&lt;br /&gt;
The communication protocol between robot and Android app (the 'pfodSpecification') is defined here: http://www.forward.com.au/pfod/.&lt;br /&gt;
&lt;br /&gt;
All menus (menu items, sliders, buttons) are created inside the robot. The App only visualizes the created menus, and sends back a command if a menu item was clicked by the user.&lt;br /&gt;
&lt;br /&gt;
Example communication:&lt;br /&gt;
&lt;br /&gt;
 1. App requests main menu: {.}&lt;br /&gt;
 2. Robot sends main menu to App: {.title`1000|key1~text1|key2~text2|key3~text3}&lt;br /&gt;
    The App will visualize the main menu like this:&lt;br /&gt;
&lt;br /&gt;
    title&lt;br /&gt;
    [text1]&lt;br /&gt;
    [text2]&lt;br /&gt;
    [text3]&lt;br /&gt;
&lt;br /&gt;
 3. User clicks menu item 'text1', App sends back to robot the corresponding command: {key1}&lt;br /&gt;
&lt;br /&gt;
You can log the communication to a file (folder 'pfodAppRawData' or 'ArduRemote') on your Android device. For the ArduRemote, press the 'Android menu button' on your device and choose 'Enable logging'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Android_menu_button.png | Android menu button&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Sensor logging=&lt;br /&gt;
[http://wiki.ardumower.de/index.php?title=Sensor_fusion#Sensor_logging See this section]&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[http://www.youtube.com/watch?v=StD_BxdYVkA menu demo v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=tOm5aNRvX0Q#t=83 menu demo live v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=3OjqAjOBvJA&amp;amp;feature=player_embedded#t=92 tutorial video]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2831</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2831"/>
				<updated>2015-11-28T14:25:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
The Ardumower can be monitored and controlled wirelessly:&lt;br /&gt;
* via phone/tablet (Android App)&lt;br /&gt;
* via USB Bluetooth dongle (PC serial console)&lt;br /&gt;
&lt;br /&gt;
On the phone, you'll need the App [https://play.google.com/store/apps/details?id=de.grauonline.arduremote 'ArduRemote']. Alternatively, you can use the App [https://play.google.com/store/apps/details?id=au.com.forward.pfodApp 'pfodApp'].&lt;br /&gt;
&lt;br /&gt;
The application menu includes:&lt;br /&gt;
* Status information (battery voltage, charging current etc.)&lt;br /&gt;
* Settings (Timer etc.)&lt;br /&gt;
* Calibration (Motor, IMU etc.)&lt;br /&gt;
* Remote control (Start/Stop, Switching on/off mower motor, blade modulation etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_live_monitoring_configuration_debugging.jpg | Live configuration, monitoring and debugging&lt;br /&gt;
File: Pfodapp_menu.png | Android app menus&lt;br /&gt;
File: Pfodapp.png | Android app (pfodApp)&lt;br /&gt;
File: Arduremote.png | Android app (ArduRemote)&lt;br /&gt;
File: Bluetooth dongle.jpg | PC communication via Bluetooth USB dongle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Bluetooth module=&lt;br /&gt;
On the robot, you'll need a Bluetooth module supporting Bluetooth Serial Port Profile (SPP). SPP uses Bluetooth Service Discovery Protocol (SDP) and the RFCOMM protocol. Depending on the desired range, you can use different Bluetooth classes:&lt;br /&gt;
&lt;br /&gt;
*Bluetooth class 2 (up to approx. 50m range), e.g. HC03/04/05/06&lt;br /&gt;
*Bluetooth class 1 (up to approx. 100m range), e.g. BTM220, requires additional circuit&lt;br /&gt;
&lt;br /&gt;
=Bluetooth HC-05=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Bluetooth_module.jpg | HC-05 module&lt;br /&gt;
File: HC-05 schematics.jpg | HC-05 schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Bluetooth Module will run at 3.3V, you need a voltage divider for RX line and an Pullup Resistor for the TX Line, like showing in Circuit.&lt;br /&gt;
&lt;br /&gt;
For programming the Module, you must connect the Key Pin from the BT Module, to the 3,3 V from the Arduino (using jumper JP2) and disconect after.&lt;br /&gt;
on the arduino console : press 'd' to enter menu and use option 3 to 'set up BT module config'.&lt;br /&gt;
&lt;br /&gt;
=Steps=&lt;br /&gt;
# Configuration mode: The Bluetooth module must be in configuration mode for the next step:&lt;br /&gt;
## for HC05:           Connect KEY pin to 3.3V after powering on the module (use jumper JP2)&lt;br /&gt;
## for HC06/linvor:    Do NOT pair/connect (LED must be blinking)&lt;br /&gt;
## for FBT06/MBTV4:    First you have to solder the PIO11 pin to VCC (PIN 12) which is 3.3 Volts using a thin wire.&lt;br /&gt;
# Baud rate: Bluetooth module and Arduino Mega must use the same baud rate (19200) - The baud rate of the BT module can be changed via Ardumower serial console. Connect Ardumower Mega board to your PC (USB), enter the serial console in the Arduino IDE (CTRL+M), and choose baud rate 19200, then choose 'd' to enter the Ardumower menu to configure the module (option 3 configure the BT module).&lt;br /&gt;
# Restart: After your BT module is configured successfully, remove KEY pin connection again (HC05), and restart module.&lt;br /&gt;
# Pairing: The BT module must be 'paired' with your Android device once (via Android device settings). On the Android device, choose symbol &amp;quot;Settings&amp;quot; (via Android menu). Now choose  &amp;quot;Wireless and Networks-&amp;gt;Bluetooth Settings&amp;quot; and &amp;quot;Find device&amp;quot;. Finally, choose &amp;quot;pair with this device&amp;quot; and enter your pin (very often &amp;quot;1234&amp;quot;). The Bluetooth module should now appear as &amp;quot;paired&amp;quot;.&lt;br /&gt;
# pfodApp: Now you can start pfodApp/ArduRemote to connect to the Ardumower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota : If you experience difficulties to configure baud rate (step2), you can alternatively press the little switch on your BT module while powering up this will automatically set baud rate to 38400. then you can use option 3 of Ardumower menu to configure BT module (set name, pin code etc...). Detail information on configuring the BT module available here [http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/]&lt;br /&gt;
&lt;br /&gt;
Nota : When you enter in menu mode (ardumower console press 'd'), you may experience timeout from bluetooth app. you need to exit from the menu for the robot to interact with your app (phone or tablet)&lt;br /&gt;
&lt;br /&gt;
=Communication protocol=&lt;br /&gt;
The communication protocol between robot and Android app (the 'pfodSpecification') is defined here: http://www.forward.com.au/pfod/.&lt;br /&gt;
&lt;br /&gt;
All menus (menu items, sliders, buttons) are created inside the robot. The App only visualizes the created menus, and sends back a command if a menu item was clicked by the user.&lt;br /&gt;
&lt;br /&gt;
Example communication:&lt;br /&gt;
&lt;br /&gt;
 1. App requests main menu: {.}&lt;br /&gt;
 2. Robot sends main menu to App: {.title`1000|key1~text1|key2~text2|key3~text3}&lt;br /&gt;
    The App will visualize the main menu like this:&lt;br /&gt;
&lt;br /&gt;
    title&lt;br /&gt;
    [text1]&lt;br /&gt;
    [text2]&lt;br /&gt;
    [text3]&lt;br /&gt;
&lt;br /&gt;
 3. User clicks menu item 'text1', App sends back to robot the corresponding command: {key1}&lt;br /&gt;
&lt;br /&gt;
You can log the communication to a file (folder 'pfodAppRawData' or 'ArduRemote') on your Android device. For the ArduRemote, press the 'Android menu button' on your device and choose 'Enable logging'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Android_menu_button.png | Android menu button&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Sensor logging=&lt;br /&gt;
[http://wiki.ardumower.de/index.php?title=Sensor_fusion#Sensor_logging See this section]&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[http://www.youtube.com/watch?v=StD_BxdYVkA menu demo v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=tOm5aNRvX0Q#t=83 menu demo live v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=3OjqAjOBvJA&amp;amp;feature=player_embedded#t=92 tutorial video]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2830</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2830"/>
				<updated>2015-11-28T14:18:05Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
The Ardumower can be monitored and controlled wirelessly:&lt;br /&gt;
* via phone/tablet (Android App)&lt;br /&gt;
* via USB Bluetooth dongle (PC serial console)&lt;br /&gt;
&lt;br /&gt;
On the phone, you'll need the App [https://play.google.com/store/apps/details?id=de.grauonline.arduremote 'ArduRemote']. Alternatively, you can use the App [https://play.google.com/store/apps/details?id=au.com.forward.pfodApp 'pfodApp'].&lt;br /&gt;
&lt;br /&gt;
The phone menu includes:&lt;br /&gt;
* Status information (battery voltage, charging current etc.)&lt;br /&gt;
* Settings (Timer etc.)&lt;br /&gt;
* Calibration (Motor, IMU etc.)&lt;br /&gt;
* Remote control (Start/Stop, Switching on/off mower motor, blade modulation etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_live_monitoring_configuration_debugging.jpg | Live configuration, monitoring and debugging&lt;br /&gt;
File: Pfodapp_menu.png | Android app menus&lt;br /&gt;
File: Pfodapp.png | Android app (pfodApp)&lt;br /&gt;
File: Arduremote.png | Android app (ArduRemote)&lt;br /&gt;
File: Bluetooth dongle.jpg | PC communication via Bluetooth USB dongle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Bluetooth module=&lt;br /&gt;
On the robot, you'll need a Bluetooth module supporting Bluetooth Serial Port Profile (SPP). SPP uses Bluetooth Service Discovery Protocol (SDP) and the RFCOMM protocol. Depending on the desired range, you can use different Bluetooth classes:&lt;br /&gt;
&lt;br /&gt;
*Bluetooth class 2 (up to approx. 50m range), e.g. HC03/04/05/06&lt;br /&gt;
*Bluetooth class 1 (up to approx. 100m range), e.g. BTM220, requires additional circuit&lt;br /&gt;
&lt;br /&gt;
=Bluetooth HC-05=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Bluetooth_module.jpg | HC-05 module&lt;br /&gt;
File: HC-05 schematics.jpg | HC-05 schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Bluetooth Module will run at 3.3V, you need a voltage divider for RX line and an Pullup Resistor for the TX Line, like showing in Circuit.&lt;br /&gt;
&lt;br /&gt;
For Programming the Module, you must connect the Key Pin from the BT Module, to the 3,3 V from the Arduino (using jumper JP2) and disconect after.&lt;br /&gt;
on the arduino console : press 'd' to enter menu and use option 3 to 'set up BT module config'.&lt;br /&gt;
&lt;br /&gt;
=Steps=&lt;br /&gt;
# Configuration mode: The Bluetooth module must be in configuration mode for the next step:&lt;br /&gt;
## for HC05:           Connect KEY pin to 3.3V after powering on the module (use jumper JP2)&lt;br /&gt;
## for HC06/linvor:    Do NOT pair/connect (LED must be blinking)&lt;br /&gt;
## for FBT06/MBTV4:    First you have to solder the PIO11 pin to VCC (PIN 12) which is 3.3 Volts using a thin wire.&lt;br /&gt;
# Baud rate: Bluetooth module and Arduino Mega must use the same baud rate (19200) - The baud rate of the BT module can be changed via Ardumower serial console. Connect Ardumower Mega board to your PC (USB), enter the serial console in the Arduino IDE (CTRL+M), and choose baud rate 19200, then choose 'd' to enter the Ardumower menu to configure the module to the correct baud rate.&lt;br /&gt;
# Restart: After your BT module is configured successfully, remove KEY pin connection again (HC05), and restart module.&lt;br /&gt;
# Pairing: The BT module must be 'paired' with your Android device once (via Android device settings). On the Android device, choose symbol &amp;quot;Settings&amp;quot; (via Android menu). Now choose  &amp;quot;Wireless and Networks-&amp;gt;Bluetooth Settings&amp;quot; and &amp;quot;Find device&amp;quot;. Finally, choose &amp;quot;pair with this device&amp;quot; and enter your pin (very often &amp;quot;1234&amp;quot;). The Bluetooth module should now appear as &amp;quot;paired&amp;quot;.&lt;br /&gt;
# pfodApp: Now you can start pfodApp/ArduRemote to connect to the Ardumower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota : If you experience difficulties to configure baud rate (step2), you can alternatively press the little switch on your BT module while powering up this will automatically set baud rate to 38400. then you can use option 3 of Ardumower menu to configure BT module (set name, pin code etc...).&lt;br /&gt;
&lt;br /&gt;
Nota : When yhou enter in menu mode (ardumower console press 'd'), you may experience timeout from bluetooth app. you need to exit from the menu for the robot to interact with your app (phone or tablet)&lt;br /&gt;
&lt;br /&gt;
=Communication protocol=&lt;br /&gt;
The communication protocol between robot and Android app (the 'pfodSpecification') is defined here: http://www.forward.com.au/pfod/.&lt;br /&gt;
&lt;br /&gt;
All menus (menu items, sliders, buttons) are created inside the robot. The App only visualizes the created menus, and sends back a command if a menu item was clicked by the user.&lt;br /&gt;
&lt;br /&gt;
Example communication:&lt;br /&gt;
&lt;br /&gt;
 1. App requests main menu: {.}&lt;br /&gt;
 2. Robot sends main menu to App: {.title`1000|key1~text1|key2~text2|key3~text3}&lt;br /&gt;
    The App will visualize the main menu like this:&lt;br /&gt;
&lt;br /&gt;
    title&lt;br /&gt;
    [text1]&lt;br /&gt;
    [text2]&lt;br /&gt;
    [text3]&lt;br /&gt;
&lt;br /&gt;
 3. User clicks menu item 'text1', App sends back to robot the corresponding command: {key1}&lt;br /&gt;
&lt;br /&gt;
You can log the communication to a file (folder 'pfodAppRawData' or 'ArduRemote') on your Android device. For the ArduRemote, press the 'Android menu button' on your device and choose 'Enable logging'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Android_menu_button.png | Android menu button&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Sensor logging=&lt;br /&gt;
[http://wiki.ardumower.de/index.php?title=Sensor_fusion#Sensor_logging See this section]&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[http://www.youtube.com/watch?v=StD_BxdYVkA menu demo v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=tOm5aNRvX0Q#t=83 menu demo live v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=3OjqAjOBvJA&amp;amp;feature=player_embedded#t=92 tutorial video]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2829</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Bluetooth&amp;diff=2829"/>
				<updated>2015-11-28T14:02:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Bluetooth HC-05 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Abstract=&lt;br /&gt;
The Ardumower can be monitored and controlled wirelessly:&lt;br /&gt;
* via phone/tablet (Android App)&lt;br /&gt;
* via USB Bluetooth dongle (PC serial console)&lt;br /&gt;
&lt;br /&gt;
On the phone, you'll need the App [https://play.google.com/store/apps/details?id=de.grauonline.arduremote 'ArduRemote']. Alternatively, you can use the App [https://play.google.com/store/apps/details?id=au.com.forward.pfodApp 'pfodApp'].&lt;br /&gt;
&lt;br /&gt;
The phone menu includes:&lt;br /&gt;
* Status information (battery voltage, charging current etc.)&lt;br /&gt;
* Settings (Timer etc.)&lt;br /&gt;
* Calibration (Motor, IMU etc.)&lt;br /&gt;
* Remote control (Start/Stop, Switching on/off mower motor, blade modulation etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_live_monitoring_configuration_debugging.jpg | Live configuration, monitoring and debugging&lt;br /&gt;
File: Pfodapp_menu.png | Android app menus&lt;br /&gt;
File: Pfodapp.png | Android app (pfodApp)&lt;br /&gt;
File: Arduremote.png | Android app (ArduRemote)&lt;br /&gt;
File: Bluetooth dongle.jpg | PC communication via Bluetooth USB dongle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Bluetooth module=&lt;br /&gt;
On the robot, you'll need a Bluetooth module supporting Bluetooth Serial Port Profile (SPP). SPP uses Bluetooth Service Discovery Protocol (SDP) and the RFCOMM protocol. Depending on the desired range, you can use different Bluetooth classes:&lt;br /&gt;
&lt;br /&gt;
*Bluetooth class 2 (up to approx. 50m range), e.g. HC03/04/05/06&lt;br /&gt;
*Bluetooth class 1 (up to approx. 100m range), e.g. BTM220, requires additional circuit&lt;br /&gt;
&lt;br /&gt;
=Bluetooth HC-05=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Bluetooth_module.jpg | HC-05 module&lt;br /&gt;
File: HC-05 schematics.jpg | HC-05 schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Bluetooth Module will run at 3.3V, you need a voltage divider for RX line and an Pullup Resistor for the TX Line, like showing in Circuit.&lt;br /&gt;
&lt;br /&gt;
For Programming the Module, you must connect the Key Pin from the BT Module, to the 3,3 V from the Arduino (using jumper JP2) and disconect after.&lt;br /&gt;
on the arduino console : press 'd' to enter menu and use option 3 to 'set up BT module config'.&lt;br /&gt;
&lt;br /&gt;
=Steps=&lt;br /&gt;
# Configuration mode: The Bluetooth module must be in configuration mode for the next step:&lt;br /&gt;
## for HC05:           Connect KEY pin to 3.3V after powering on the module&lt;br /&gt;
## for HC06/linvor:    Do NOT pair/connect (LED must be blinking)&lt;br /&gt;
## for FBT06/MBTV4:    First you have to solder the PIO11 pin to VCC (PIN 12) which is 3.3 Volts using a thin wire.&lt;br /&gt;
# Baud rate: Blueooth module and Arduino Mega must use the same baud rate (19200) - The baud rate of the BT module can be changed via Ardumower serial console. Connect Ardumower Mega board to your PC (USB), enter the serial console in the Arduino IDE (CTRL+M), and choose baud rate 19200, then choose 'd' to enter the Ardumower menu to configure the module to the correct baud rate.&lt;br /&gt;
# Restart: After your BT module is configured successfully, remove KEY pin connection again (HC05), and restart module.&lt;br /&gt;
# Pairing: The BT module must be 'paired' with your Android device once (via Android device settings). On the Android device, choose symbol &amp;quot;Settings&amp;quot; (via Android menu). Now choose  &amp;quot;Wirless and Networks-&amp;gt;Bluetooth Settings&amp;quot; and &amp;quot;Find device&amp;quot;. Finally, choose &amp;quot;pair with this device&amp;quot; and enter your pin (very often &amp;quot;1234&amp;quot;). The Bluetooth module should now appear as &amp;quot;paired&amp;quot;.&lt;br /&gt;
# pfodApp: Now you can start pfodApp/ArduRemote to connect to the Ardumower.&lt;br /&gt;
&lt;br /&gt;
=Communication protocol=&lt;br /&gt;
The communication protocol between robot and Android app (the 'pfodSpecification') is defined here: http://www.forward.com.au/pfod/.&lt;br /&gt;
&lt;br /&gt;
All menus (menu items, sliders, buttons) are created inside the robot. The App only visualizes the created menus, and sends back a command if a menu item was clicked by the user.&lt;br /&gt;
&lt;br /&gt;
Example communication:&lt;br /&gt;
&lt;br /&gt;
 1. App requests main menu: {.}&lt;br /&gt;
 2. Robot sends main menu to App: {.title`1000|key1~text1|key2~text2|key3~text3}&lt;br /&gt;
    The App will visualize the main menu like this:&lt;br /&gt;
&lt;br /&gt;
    title&lt;br /&gt;
    [text1]&lt;br /&gt;
    [text2]&lt;br /&gt;
    [text3]&lt;br /&gt;
&lt;br /&gt;
 3. User clicks menu item 'text1', App sends back to robot the corresponding command: {key1}&lt;br /&gt;
&lt;br /&gt;
You can log the communication to a file (folder 'pfodAppRawData' or 'ArduRemote') on your Android device. For the ArduRemote, press the 'Android menu button' on your device and choose 'Enable logging'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Android_menu_button.png | Android menu button&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Sensor logging=&lt;br /&gt;
[http://wiki.ardumower.de/index.php?title=Sensor_fusion#Sensor_logging See this section]&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[http://www.youtube.com/watch?v=StD_BxdYVkA menu demo v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=tOm5aNRvX0Q#t=83 menu demo live v0.8.8]&lt;br /&gt;
#[http://www.youtube.com/watch?v=3OjqAjOBvJA&amp;amp;feature=player_embedded#t=92 tutorial video]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_software_design&amp;diff=2828</id>
		<title>Ardumower software design</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_software_design&amp;diff=2828"/>
				<updated>2015-11-22T20:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* C++ classes/interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some internals of the Ardumower software architecture.&lt;br /&gt;
&lt;br /&gt;
=Finite state machine=&lt;br /&gt;
Main component of the software is a so called 'finite state machine', that means there exists a set of states (&amp;quot;OFF&amp;quot;, &amp;quot;FORWARD&amp;quot;, &amp;quot;ROLL&amp;quot;, etc.) that the robot can be in. Depending on events (sensor is triggering etc.), the robot will enter a new state.&lt;br /&gt;
&lt;br /&gt;
State diagram (Note: The drawing has been created using [https://drive.draw.io/?url=https%3A%2F%2Fraw.githubusercontent.com%2FArdumower%2Fardumower%2Fmaster%2Fswdesign%2FArdumower_Statemachine.xml draw.io])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Ardumower_states.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implemented updates:&lt;br /&gt;
*If obstacle during reverse =&amp;gt; roll&lt;br /&gt;
*If obstacle during roll =&amp;gt; forward&lt;br /&gt;
&lt;br /&gt;
=C++ classes/interfaces=&lt;br /&gt;
&lt;br /&gt;
Revision : ardumower-1.0a4-Azurit&lt;br /&gt;
&lt;br /&gt;
(Courtesy of Jacques found in the Forum)&lt;br /&gt;
&lt;br /&gt;
[[File:  Soft map1.PNG]]&lt;br /&gt;
[[File:  Soft map2.PNG]]&lt;br /&gt;
[[File:  Soft map3.PNG]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: interfaces.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Soft_map3.PNG&amp;diff=2827</id>
		<title>Datei:Soft map3.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Soft_map3.PNG&amp;diff=2827"/>
				<updated>2015-11-22T20:02:02Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Soft_map2.PNG&amp;diff=2826</id>
		<title>Datei:Soft map2.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Soft_map2.PNG&amp;diff=2826"/>
				<updated>2015-11-22T19:56:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_software_design&amp;diff=2825</id>
		<title>Ardumower software design</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_software_design&amp;diff=2825"/>
				<updated>2015-11-22T19:50:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Finite state machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some internals of the Ardumower software architecture.&lt;br /&gt;
&lt;br /&gt;
=Finite state machine=&lt;br /&gt;
Main component of the software is a so called 'finite state machine', that means there exists a set of states (&amp;quot;OFF&amp;quot;, &amp;quot;FORWARD&amp;quot;, &amp;quot;ROLL&amp;quot;, etc.) that the robot can be in. Depending on events (sensor is triggering etc.), the robot will enter a new state.&lt;br /&gt;
&lt;br /&gt;
State diagram (Note: The drawing has been created using [https://drive.draw.io/?url=https%3A%2F%2Fraw.githubusercontent.com%2FArdumower%2Fardumower%2Fmaster%2Fswdesign%2FArdumower_Statemachine.xml draw.io])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Ardumower_states.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implemented updates:&lt;br /&gt;
*If obstacle during reverse =&amp;gt; roll&lt;br /&gt;
*If obstacle during roll =&amp;gt; forward&lt;br /&gt;
&lt;br /&gt;
=C++ classes/interfaces=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: interfaces.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Soft_map1.PNG&amp;diff=2824</id>
		<title>Datei:Soft map1.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Soft_map1.PNG&amp;diff=2824"/>
				<updated>2015-11-22T19:49:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Mowing_Pattern&amp;diff=2823</id>
		<title>Mowing Pattern</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Mowing_Pattern&amp;diff=2823"/>
				<updated>2015-11-22T19:22:20Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: Die Seite wurde neu angelegt: „ == Mowing Pattern ==  Random  BiDir  Mow lanes“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Mowing Pattern ==&lt;br /&gt;
&lt;br /&gt;
Random&lt;br /&gt;
&lt;br /&gt;
BiDir&lt;br /&gt;
&lt;br /&gt;
Mow lanes&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2822</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Hauptseite&amp;diff=2822"/>
				<updated>2015-11-22T19:20:54Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Ardumower topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 -&amp;gt; [[Deutsche Version]] (noch in Bearbeitung)&lt;br /&gt;
 -&amp;gt; [[Russian Version]] (в разработке)&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:#cf7606; font-size:200%;&amp;quot;&amp;gt;'''Welcome to'''&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#005288; font-size:200%;&amp;quot;&amp;gt;'''Ardumower - the DIY robot mower'''&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;Ardumower WIKI, the knowledge base of the Ardumower community&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:H7c785a1.png |100px|left|Ardumower Logo]][[Image:1000x500-ausbildung.jpg|thumb|180px|Image of the month]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Yt-brand-standard-logo-95x40.png|thumb|180px|http://www.youtube.com/user/naneona/videos]]&lt;br /&gt;
&lt;br /&gt;
You probably know Ardumower Forum, the DIY robot mower community on the Internet. Now there's the additional Ardumower knowledge site, named WIKI. Here you find information, basics, and tips about DIY robot mowers sorted by different topics. The pages should be a starter guide as well as a reference book (you may recognize the structure from the well known Wikipedia). We use the same system for it: MediaWiki.&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On this WIKI, you actually can modify pages freely - you can even try out your first edits on a testpage [[test]] on this Wiki. Before you edit longer pages, you should practise on this testpage [[test]].&lt;br /&gt;
&lt;br /&gt;
Help us improving this Wiki! Simply [http://wiki.ardumower.de/index.php?title=Spezial:Anmelden/signup register] and start editing today...&lt;br /&gt;
&lt;br /&gt;
=Getting started / Introduction=&lt;br /&gt;
[[Image:Ardumower_overview.png|thumb|400px|Overview]]&lt;br /&gt;
These introduction pages should help you to get started building your own DIY robot mower:&lt;br /&gt;
*[[Getting started]] (introduction and overall steps)&lt;br /&gt;
*[[Arduino first steps]] (if you have never worked with Arduino before: how to upload to your Arduino...)&lt;br /&gt;
&lt;br /&gt;
=Ardumower topics=&lt;br /&gt;
These pages give you a reference book sorted by robot mower 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 assembly&lt;br /&gt;
|[[Ardumower chassis]] &lt;br /&gt;
|-&lt;br /&gt;
!Arduino code, schematics, PCB etc.&lt;br /&gt;
|[[Arduino first steps]]&lt;br /&gt;
|[[Ardumower PCB|Ardumower PCB &amp;amp; code]]&lt;br /&gt;
|[[Arduino Due]]&lt;br /&gt;
|[[Troubleshooting]]&lt;br /&gt;
|-&lt;br /&gt;
!Actuators&lt;br /&gt;
|[[Motor driver|Motor driver &amp;amp; motors]]&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;
|[[Dropsensor]]&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|Bluetooth &amp;amp; App]]&lt;br /&gt;
|[[GPS]]&lt;br /&gt;
|-&lt;br /&gt;
!Other modules&lt;br /&gt;
|[[Realtime clock]]&lt;br /&gt;
|-&lt;br /&gt;
!Software architecture, algorithms&lt;br /&gt;
|[http://www.grauonline.de/alexwww/ardumower/sim/mower.html Ardumower simulator]&lt;br /&gt;
|[[Ardumower software design]]&lt;br /&gt;
|[[Mowing Pattern]]&lt;br /&gt;
|[[Sensor fusion|Sensor fusion &amp;amp; SLAM]]&lt;br /&gt;
|[[PID control]]&lt;br /&gt;
|[[Kalman|Kalman (EKF)]]&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 robot mower project / Dein Rasenroboter-Projekt=&lt;br /&gt;
Describe your own robot mower project on a new WIKI page / Beschreibe Dein eigenes Rasenroboter-Projekt auf einer neuen WIKI-Site:&lt;br /&gt;
* [[Ardumower Chassis 'mountain mod']]&lt;br /&gt;
* [[Ardumower Mini]]&lt;br /&gt;
* [[Tracked Mower]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Your Ardumower extension / Deine Ardumower Erweiterung=&lt;br /&gt;
Describe your own robot mower extension or improvement (optical, computer vision, IR landmarks, sound, navigation, wireless, or any other addition) on a new WIKI page / Beschreibe Deine eigene Erweiterung oder Verbesserung des Ardumowers:&lt;br /&gt;
* Generating sounds using a [[Sound module]]&lt;br /&gt;
* [[Ardumower future PCB]]&lt;br /&gt;
* ...&lt;br /&gt;
* ...&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;
[http://www.ardumower.de/index.php/de Ardumower Home / Forum]&lt;br /&gt;
[https://www.marotronics.de/ Ardumower Shop]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_chassis&amp;diff=2821</id>
		<title>Ardumower chassis</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_chassis&amp;diff=2821"/>
				<updated>2015-11-22T17:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Case assembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page describes the assembly of the Ardumower chassis that you can purchase via the [https://www.marotronics.de/index.php?k=32 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=32]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ardumower 1.0 Chassis specifications=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower-chassis.jpg | Chassis&lt;br /&gt;
File: Ardumower_chassis_exploded.jpg | Chassis exploded&lt;br /&gt;
File: Ardumower_chassis_components.png | Chassis components&lt;br /&gt;
File: Ardumower_chassis_side.jpg | Chassis side&lt;br /&gt;
File: Ardumower_chassis_inside.jpg | Chassis inside&lt;br /&gt;
File: Ardumower_chassis_pcb1.jpg | Chassis and PCB inside&lt;br /&gt;
File: Ardumower_chassis_pcb2.jpg | PCB mount&lt;br /&gt;
File: Ardumower_blades.jpg | Mowing slice and blades&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Dimension (L/B/H): 60x36x25cm&lt;br /&gt;
* Total weight: approx 9 kg (including all components - motors, battery, PCB etc.)&lt;br /&gt;
* Adjustable mower motor height&lt;br /&gt;
* Max. slope: 14 degree&lt;br /&gt;
* Mowing motor: 24V DC, 3150 rpm&lt;br /&gt;
* Mowing slice: 190mm diameter, 3 blades&lt;br /&gt;
* Wheels: 250mm diameter&lt;br /&gt;
* Gear motors: 2 x DC 24V planetary drive, 33 rpm, with encoders (required)&lt;br /&gt;
* Battery: Lithium-Ion 29.4V&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[https://www.youtube.com/watch?v=8hrwDqV0vbo Chassis assembling]&lt;br /&gt;
#[http://www.youtube.com/watch?v=IAwKlwFU-BY&amp;amp;feature=youtu.be Chassis assemling (slow)]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=DXsLYnmoD3I Overall impression]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=f5S1kVwyV9c Loundness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=_XWXAPYuRyo Gear motor test]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=QPCFLs7Qot0 Gear motor hardness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=Ccpqt9mn5HI Mowing motor hardness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=HOT6HHO37P8 Perimeter wire test (indoor)]&lt;br /&gt;
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M Perimeter wire test (120m outdoor)]&lt;br /&gt;
#[http://youtu.be/KUPFygJ3sWg Obstacle detection via motor current]&lt;br /&gt;
#[http://youtu.be/cQJHjGboQNw Obstacles detection via ultrasonic]&lt;br /&gt;
#[https://www.youtube.com/watch?v=fUjf9BBgCQY&amp;amp;feature=youtu.be Robot releases itself]&lt;br /&gt;
#[https://www.youtube.com/watch?v=Llp_rUrg5C4&amp;amp;feature=youtu.be Robot releasing long-time test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=eB7i8BH0A4Y&amp;amp;feature=youtu.be Plastic blades test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=NLv-mXDqVQU&amp;amp;feature=youtu.be Docking test (very initial prototype)]&lt;br /&gt;
#[https://www.youtube.com/watch?v=lLia2AjYHgc Rain sensor test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=UcW0OHwv0NA&amp;amp;feature=youtu.be 3D simulation]&lt;br /&gt;
&lt;br /&gt;
=What you need=&lt;br /&gt;
* Screw driver&lt;br /&gt;
* Imbus screw driver&lt;br /&gt;
&lt;br /&gt;
=Case assembly=&lt;br /&gt;
... Your help is needed to fill in photos here ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Underrun_protection.jpg | Underrun protection&lt;br /&gt;
File: Underrun_protection_holes.jpg | Bumper &lt;br /&gt;
File: Bumper.jpg | Bumper (other possible position)&lt;br /&gt;
File: Blade_protection.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Gear motors=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chassis_motor_festziehen.jpg|Assemble and tighten motors&lt;br /&gt;
File:Chassis_motoren_anschliessen.jpg |Connect motors&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Tires=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chassis_spanner_zusammensetzen2.jpg|Assemble spanner&lt;br /&gt;
File:Chassis_spanner_festziehen2.jpg |Tighten spanner&lt;br /&gt;
File:Chassis_spanner_schrauben_lösen2.jpg |Loose spanner screws&lt;br /&gt;
File:Chassis_rad_festziehen.jpg| Tighten wheel&lt;br /&gt;
File:Chassis_spanner_lösen2.jpg| How to loose spanner again&lt;br /&gt;
File:Tyre_mod.PNG| Example of tire modif with bicycle air tube&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mower motor=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Chassis_mähmotor_befestigung_anbringen.jpg|Mount mower motor fixing&lt;br /&gt;
File: Chassis_mähmotor_auf_höhe_festschrauben.jpg |Tighten mower motor at height&lt;br /&gt;
File: Chassis_mähmotor_anschließen.jpg |Connect mower mower&lt;br /&gt;
File: Chassis_spanner_zusammenbauen.jpg|Assemble spanner&lt;br /&gt;
File: Chassis_spanner_festziehen.jpg| Tighten spanner&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mowing disc=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Chassis_gewindeeinsätze_eindrehen.jpg|Mount nut insert&lt;br /&gt;
File: Chassis_mähscheibe_festziehen.jpg|Tighten disc&lt;br /&gt;
File: Chassis_gewindeeinsätze_loctite.jpg|Add loctite&lt;br /&gt;
File: Chassis_messer_festziehen.jpg|Tighten blades&lt;br /&gt;
File: Chassis_spanner_lösen.jpg|How to loose spanner again&lt;br /&gt;
File: Chassis_mähscheibe_auswuchten.jpg |Disc balancing  &lt;br /&gt;
File: Ardumower_blades.jpg |Add blades&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
[[Ardumower Chassis 'mountain mod']]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Blade_protection.jpg&amp;diff=2820</id>
		<title>Datei:Blade protection.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Blade_protection.jpg&amp;diff=2820"/>
				<updated>2015-11-22T17:15:40Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Bumper.jpg&amp;diff=2819</id>
		<title>Datei:Bumper.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Bumper.jpg&amp;diff=2819"/>
				<updated>2015-11-22T17:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Ardumower_chassis&amp;diff=2818</id>
		<title>Ardumower chassis</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Ardumower_chassis&amp;diff=2818"/>
				<updated>2015-11-22T17:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Tires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page describes the assembly of the Ardumower chassis that you can purchase via the [https://www.marotronics.de/index.php?k=32 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=32]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ardumower 1.0 Chassis specifications=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower-chassis.jpg | Chassis&lt;br /&gt;
File: Ardumower_chassis_exploded.jpg | Chassis exploded&lt;br /&gt;
File: Ardumower_chassis_components.png | Chassis components&lt;br /&gt;
File: Ardumower_chassis_side.jpg | Chassis side&lt;br /&gt;
File: Ardumower_chassis_inside.jpg | Chassis inside&lt;br /&gt;
File: Ardumower_chassis_pcb1.jpg | Chassis and PCB inside&lt;br /&gt;
File: Ardumower_chassis_pcb2.jpg | PCB mount&lt;br /&gt;
File: Ardumower_blades.jpg | Mowing slice and blades&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* Dimension (L/B/H): 60x36x25cm&lt;br /&gt;
* Total weight: approx 9 kg (including all components - motors, battery, PCB etc.)&lt;br /&gt;
* Adjustable mower motor height&lt;br /&gt;
* Max. slope: 14 degree&lt;br /&gt;
* Mowing motor: 24V DC, 3150 rpm&lt;br /&gt;
* Mowing slice: 190mm diameter, 3 blades&lt;br /&gt;
* Wheels: 250mm diameter&lt;br /&gt;
* Gear motors: 2 x DC 24V planetary drive, 33 rpm, with encoders (required)&lt;br /&gt;
* Battery: Lithium-Ion 29.4V&lt;br /&gt;
&lt;br /&gt;
=Videos=&lt;br /&gt;
#[https://www.youtube.com/watch?v=8hrwDqV0vbo Chassis assembling]&lt;br /&gt;
#[http://www.youtube.com/watch?v=IAwKlwFU-BY&amp;amp;feature=youtu.be Chassis assemling (slow)]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=DXsLYnmoD3I Overall impression]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=f5S1kVwyV9c Loundness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=_XWXAPYuRyo Gear motor test]&lt;br /&gt;
#[https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=QPCFLs7Qot0 Gear motor hardness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=Ccpqt9mn5HI Mowing motor hardness test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=HOT6HHO37P8 Perimeter wire test (indoor)]&lt;br /&gt;
#[https://www.youtube.com/watch?v=QCA6Dm3rs3M Perimeter wire test (120m outdoor)]&lt;br /&gt;
#[http://youtu.be/KUPFygJ3sWg Obstacle detection via motor current]&lt;br /&gt;
#[http://youtu.be/cQJHjGboQNw Obstacles detection via ultrasonic]&lt;br /&gt;
#[https://www.youtube.com/watch?v=fUjf9BBgCQY&amp;amp;feature=youtu.be Robot releases itself]&lt;br /&gt;
#[https://www.youtube.com/watch?v=Llp_rUrg5C4&amp;amp;feature=youtu.be Robot releasing long-time test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=eB7i8BH0A4Y&amp;amp;feature=youtu.be Plastic blades test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=NLv-mXDqVQU&amp;amp;feature=youtu.be Docking test (very initial prototype)]&lt;br /&gt;
#[https://www.youtube.com/watch?v=lLia2AjYHgc Rain sensor test]&lt;br /&gt;
#[https://www.youtube.com/watch?v=UcW0OHwv0NA&amp;amp;feature=youtu.be 3D simulation]&lt;br /&gt;
&lt;br /&gt;
=What you need=&lt;br /&gt;
* Screw driver&lt;br /&gt;
* Imbus screw driver&lt;br /&gt;
&lt;br /&gt;
=Case assembly=&lt;br /&gt;
... Your help is needed to fill in photos here ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Underrun_protection.jpg | Underrun protection&lt;br /&gt;
File: Underrun_protection_holes.jpg | Bumper &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Gear motors=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chassis_motor_festziehen.jpg|Assemble and tighten motors&lt;br /&gt;
File:Chassis_motoren_anschliessen.jpg |Connect motors&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Tires=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Chassis_spanner_zusammensetzen2.jpg|Assemble spanner&lt;br /&gt;
File:Chassis_spanner_festziehen2.jpg |Tighten spanner&lt;br /&gt;
File:Chassis_spanner_schrauben_lösen2.jpg |Loose spanner screws&lt;br /&gt;
File:Chassis_rad_festziehen.jpg| Tighten wheel&lt;br /&gt;
File:Chassis_spanner_lösen2.jpg| How to loose spanner again&lt;br /&gt;
File:Tyre_mod.PNG| Example of tire modif with bicycle air tube&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mower motor=&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Chassis_mähmotor_befestigung_anbringen.jpg|Mount mower motor fixing&lt;br /&gt;
File: Chassis_mähmotor_auf_höhe_festschrauben.jpg |Tighten mower motor at height&lt;br /&gt;
File: Chassis_mähmotor_anschließen.jpg |Connect mower mower&lt;br /&gt;
File: Chassis_spanner_zusammenbauen.jpg|Assemble spanner&lt;br /&gt;
File: Chassis_spanner_festziehen.jpg| Tighten spanner&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mowing disc=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Chassis_gewindeeinsätze_eindrehen.jpg|Mount nut insert&lt;br /&gt;
File: Chassis_mähscheibe_festziehen.jpg|Tighten disc&lt;br /&gt;
File: Chassis_gewindeeinsätze_loctite.jpg|Add loctite&lt;br /&gt;
File: Chassis_messer_festziehen.jpg|Tighten blades&lt;br /&gt;
File: Chassis_spanner_lösen.jpg|How to loose spanner again&lt;br /&gt;
File: Chassis_mähscheibe_auswuchten.jpg |Disc balancing  &lt;br /&gt;
File: Ardumower_blades.jpg |Add blades&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
[[Ardumower Chassis 'mountain mod']]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Tyre_mod.PNG&amp;diff=2817</id>
		<title>Datei:Tyre mod.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Tyre_mod.PNG&amp;diff=2817"/>
				<updated>2015-11-22T17:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Motor_driver&amp;diff=2816</id>
		<title>Motor driver</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Motor_driver&amp;diff=2816"/>
				<updated>2015-11-22T17:00:01Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: /* Wheel motors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
Ardumower's design uses two different types of motors (all motors can be purchased via the [https://www.marotronics.de/index.php?k=7 shop] [[File: shopping.png|link=https://www.marotronics.de/index.php?k=7]]):&lt;br /&gt;
* Two motors (with integrated gearing) for driving (wheel motors), and encoder (for distance, direction and speed control)&lt;br /&gt;
* One motor (with high rotation speed) for mowing (mower motor)&lt;br /&gt;
&lt;br /&gt;
To control a motor, it requires a 'motor driver'.&lt;br /&gt;
&lt;br /&gt;
= Voltages =&lt;br /&gt;
Although there exist 12V motors and 24V motors, as in all modern systems, the Ardumower uses 24V motors. The reason is as follows:&lt;br /&gt;
&lt;br /&gt;
Assuming that the motor consumes 50W, using 24V results to a motor current: 50W / 24V = 2A.&lt;br /&gt;
&lt;br /&gt;
Assuming that the motor consumes 50W, using 12V results to a motor current: 50W / 12V = 4A.&lt;br /&gt;
&lt;br /&gt;
The higher the current (A), the more problems arise:&lt;br /&gt;
&lt;br /&gt;
* The motor driver must be suitable for higher current (more expensive)&lt;br /&gt;
* The PCB traces need to be more thick (more expensive)&lt;br /&gt;
* The rechargable battery need to support higher current (more expensive)&lt;br /&gt;
&lt;br /&gt;
So, that's the reason why Ardumower is designed as a 24V system.&lt;br /&gt;
&lt;br /&gt;
= Wheel motors =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: ardumower_motor.jpg | Ardumower gear motor with encoder (8mm diameter, 5900 rpm motor, 0.055 Nm, gear ratio 1/212, output torque 2.45Nm, output rpm 31)&lt;br /&gt;
  File: magnetic_encoder.PNG | Motor wiring&lt;br /&gt;
  File: wheel_motor_diagram.png | Ardumower gear motor curve (motor only)&lt;br /&gt;
  File:decrease_motor_noise.png | Decrease motor noise&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The two left and right gear motors are controlled independently (aka 'differential driving') to:&lt;br /&gt;
&lt;br /&gt;
* drive the robot forward/backward&lt;br /&gt;
* steer the robot left/right&lt;br /&gt;
&lt;br /&gt;
The Ardumower wheel motor features:&lt;br /&gt;
* A rotation speed up to 31 rpm allows to move the robot at sufficient speed (at up to meter/sec = 31rpm/60 * PI * 0.25m  = 0.4m/sec using 250mm diameter wheels)&lt;br /&gt;
* A high torque (2.45Nm) guarantees that the robot can climb small hills as well (with 2 motors, 0.125 radius wheel, 31rpm = 0.4m/s, acceleration = 0.2 ( 1/2 of nomeinal speed) up to 14 degree) [http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698 see calculator]&lt;br /&gt;
* Integrated encoders, so it can measure the rotation speed, the distance and the direction (see [[Odometry]] for more information) - Encoders are REQUIRED for Ardumower software.&lt;br /&gt;
* 24V  (load current ~1A)&lt;br /&gt;
&lt;br /&gt;
= Motor driver =&lt;br /&gt;
A motor driver is a circuit that allows current to flow either one direction or the opposite direction through the motor - depending on wether the motor should turn forward or backward (so called 'H-bridge'). There are many motor drivers available as ready-circuit boards, some can even control two motors  (Dual H-Bridge) - if you connect two of their H-bridges in parallel, the maximum motor current can be increased.&lt;br /&gt;
&lt;br /&gt;
If the direction of the motor does not need to be controlled, (e.g. for the blades), you do not need an H-bridge, but instead a simple 'switch' (e.g. MOSFET-transistor-circuit).&lt;br /&gt;
&lt;br /&gt;
The motor driver is connected through control signals to the Arduino. Example:&lt;br /&gt;
&lt;br /&gt;
  Arduino Digital Pin  —&amp;gt;  MOTOR-Direction Pin (DIR)&lt;br /&gt;
  Arduino PWM Pin      —&amp;gt;  MOTOR-Speed Pin (PWM)&lt;br /&gt;
  Arduino Analog Pin   &amp;lt;—  MOTOR-Current Sensor Pin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One pin controls the direction (forward/backward), the other pin controls the speed. One analog input pin is connected to the current sensor. The current sensor module (ACS712-05A) is connected in series with the motor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Ardumower_motor_driver_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PWM frequency ==&lt;br /&gt;
The speed of the motor is controlled by a PWM duty signal. We use the Arduino default PWM frequency (490 Hz) to control the motor drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Arduino_pwm.png | Arduino PWM duty signal&lt;br /&gt;
File: Pwm_490hz.png | PWM 490 Hz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_3khz.png | PWM 3.9 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_20khz.png | PWM 20 Khz: odometry ticks, sense (current) &lt;br /&gt;
File: Pwm_31khz.png | PWM 31 Khz: odometry ticks, sense (current) &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popular modules ==&lt;br /&gt;
=== MC33926 (recommended) ===&lt;br /&gt;
&lt;br /&gt;
Features: up to 3A with integrated current sensor and thermal shut-down protection, for all kind of robot mowers) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Mc33926.jpg | pinout&lt;br /&gt;
File:Mc33926_example.jpg | jumpers&lt;br /&gt;
File:MC33926_schematics.jpg | schematics&lt;br /&gt;
File:Mc33926_current_limiter.jpg | automatic current limiter&lt;br /&gt;
File:Motor_pwm_50_percent_transients.jpg | Motor start 50% PWM transients&lt;br /&gt;
File:driver_hw_protection.png | Peak/EMF protection&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 M1_FB     --- pinMotorLeftSense A1&lt;br /&gt;
 M1_SF     --- pinMotorLeftFault 25&lt;br /&gt;
 M1_PWM_D1 --- connect with jumper to GND&lt;br /&gt;
 M1_PWM_D2 --- connect with jumper to VDD&lt;br /&gt;
 M1_IN1    --- pinMotorLeftPWM 5  &lt;br /&gt;
 M1_IN2    --- pinMotorLeftDir 31&lt;br /&gt;
 EN        --- pinMotorEnable  37&lt;br /&gt;
 M2_FB     --- pinMotorRightSense A0&lt;br /&gt;
 M2_SF     --- pinMotorRightFault 27&lt;br /&gt;
 M2_PWM_D1 --- connect with jumper to GND&lt;br /&gt;
 M2_PWM_D2 --- connect with jumper to VDD&lt;br /&gt;
 M2_IN1    --- pinMotorRightPWM  3 &lt;br /&gt;
 M2_IN2    --- pinMotorRightDir 33&lt;br /&gt;
 EN        --- pinMotorEnable  37&lt;br /&gt;
 VDD       --- Arduino 5V&lt;br /&gt;
&lt;br /&gt;
=== L6201P ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: L6201P_motor_driver.jpg | L6201P PCB&lt;br /&gt;
  File: L6201p.png | L6201P datasheet&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Features: 48V, 4A&lt;br /&gt;
&lt;br /&gt;
 B+     power supply output voltage equal to the power connector&lt;br /&gt;
 GND    GND&lt;br /&gt;
 EN     driver enable&lt;br /&gt;
 RPWM   forward PWM signal, active HIGH&lt;br /&gt;
 LPWM   reverse PWM signal, active HIGH&lt;br /&gt;
 CT     current signal output&lt;br /&gt;
 VT     voltage signal output&lt;br /&gt;
&lt;br /&gt;
 Forward   EN=1, RPWM=PWM, LPWM=0&lt;br /&gt;
 Reverse   EN=1, RPWM=0,   LPWM=PWM  (also possible?   EN=1, RPWM=255-PWM, LPWM=1  =&amp;gt; needs to be verified!)&lt;br /&gt;
 Brake     EN=1, RPWM=0,   LPWM=0&lt;br /&gt;
 Not brake EN=0, RPWM=x,   LPWM=x&lt;br /&gt;
 Note: 1=High level (3.3-5v), 0=Low level (0V or GND)&lt;br /&gt;
&lt;br /&gt;
=== L9958 ===&lt;br /&gt;
Features: Arduino 240W H-bridge Motor Driver Board - SX8847, up to 8A &lt;br /&gt;
&lt;br /&gt;
Note that this module has an on-board [http://en.wikipedia.org/wiki/78xx linear voltage regulator], which converts the input POWER (typically 24 or 12V) to 5V. Some modules do this with a single voltage regulator (chip VR1 on the module), or in a two-staged approach (VR1 and U2). &lt;br /&gt;
&lt;br /&gt;
Converting 24V to 5V with a linear voltage regulator is very inefficient (current in = current out, so if you need 100mA at 5V, the linear voltage regulator requires 100mA at 24V, so you loose 1.9W in this module). Therefore, it is recommended to disconnect the linear voltage regulator from the board, and use the 5V from the switched mode power supply. &lt;br /&gt;
&lt;br /&gt;
 L9958 GND---GND&lt;br /&gt;
 L9958 VCC---Arduino 5V&lt;br /&gt;
 L9958 EN---Arduino 5V&lt;br /&gt;
 L9958 DI---GND&lt;br /&gt;
 L9958 DIR---Arduino MOTOR_DIR&lt;br /&gt;
 L9958 PWM---Arduino MOTOR_PWM&lt;br /&gt;
 L9958 MOTOR(+)---motor(+)&lt;br /&gt;
 L9958 MOTOR(-)---motor(-)&lt;br /&gt;
 L9958 POWER(+)---battery(+)&lt;br /&gt;
 L9958 POWER(-)---battery(-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
  File: Motor_driver_L9958.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== L298N ===&lt;br /&gt;
Features: up to 4A &lt;br /&gt;
Notice: When using a L298N-motor driver, both H-bridges (2A) should be connected in parallel, so that both bridges drive a single motor (max. 4A):&lt;br /&gt;
&lt;br /&gt;
Connect in parallel:&lt;br /&gt;
 IN1 with IN4&lt;br /&gt;
 IN2 with IN3&lt;br /&gt;
 OUT1 with OUT4&lt;br /&gt;
 OUT2 with OUT3&lt;br /&gt;
(Do NOT disconnect the SENSE-lines, except when you want to measure current by a 'shunt' resistor).&lt;br /&gt;
&lt;br /&gt;
Make sure there is a jumper on both ENA and ENB. Also, make sure there is a jumper on S1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Motordriver_l298n.JPG | driver &lt;br /&gt;
File: L298driver.jpg | double current&lt;br /&gt;
File: L298N_schematics.jpg | schematics&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mower motor and driver =&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: ardumower_mower_motor.jpg | Ardumower mower motor&lt;br /&gt;
File: Mower_motor_curve.png | Ardumower mower motor curve&lt;br /&gt;
File: Mower2_start_current.png | Mower start current&lt;br /&gt;
File: Mower4_blocked_500ms_detect_5s_wait.png | Mower blocked, 500ms detection (max), waittime: 5sec (min)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The Ardumower mower motor features:&lt;br /&gt;
* Fast enough to cut the lawn (3150 rpm)&lt;br /&gt;
* Enough torque (140 mNm / 46 W)&lt;br /&gt;
* Quiet mowing (you cannot hear it)&lt;br /&gt;
* 24V, load current ~1.0A  (L=2.8mH, R=1.9ohm)&lt;br /&gt;
&lt;br /&gt;
For a the mowing motor, a MOSFET circuit is used. The MOSFET transistor IRLIZ44N (alternatives: IRF1404, IRL540N, RFP30N06LE, FQP30N06L) can already switch a current of 30A at the Arduino 5V control signal (N-LogL). The 10K resistor pulls down to ground when the Arduino starts. The 180 Ohm resistor limits the current at the Gate caused by level switches to about 30mA. The diode (MBR1045) protects  the circuit against current caused by motor induction. A current sensor module (ACS712-30A) is connected in series with the motor.&lt;br /&gt;
&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;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Ardumower_mower_motor_circuit.png | NOTE: only for demonstration! See real [http://wiki.ardumower.de/index.php?title=Ardumower_PCB schematics] for concrete wiring&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Choosing a driver =&lt;br /&gt;
&lt;br /&gt;
When purchasing a motor driver, consider...&lt;br /&gt;
* max. thermal load (short-circuit current)&lt;br /&gt;
* price&lt;br /&gt;
&lt;br /&gt;
= Starting current =&lt;br /&gt;
Here are some measurements of the Ardumower motor's starting current (peak):&lt;br /&gt;
&lt;br /&gt;
Starting current:&lt;br /&gt;
* Gear motor: 15A (starting current peak)&lt;br /&gt;
* Mowing motor: 20A (starting current peak)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: Messung_einschalt_spitzen.jpg | Gear motor start current (peak)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Short-circuit current =&lt;br /&gt;
To not damage the motor driver on the first run, find out the maximum current that can flow through your motors. In other words, find out the 'short-circuit' current. Typical measurement installation:&lt;br /&gt;
&lt;br /&gt;
Battery === Ampere meter === Motor&lt;br /&gt;
&lt;br /&gt;
The Amperemeter (e.g. model making) should be able to measure the maximum current (e.g. 30A). The motor to be measured is mechanically blocked (so it cannot rotate).&lt;br /&gt;
&lt;br /&gt;
'''Warning'''&lt;br /&gt;
&lt;br /&gt;
* always remove blades&lt;br /&gt;
* only connect battery for a short period (1-5 seconds)&lt;br /&gt;
* always use cables with sufficient wire cross section&lt;br /&gt;
&lt;br /&gt;
Example measurement:&lt;br /&gt;
&lt;br /&gt;
* Rotenbach SPM08-320&lt;br /&gt;
** Wheel motor: 8A&lt;br /&gt;
** Mowing motor:&lt;br /&gt;
&lt;br /&gt;
* Ambrogio L50&lt;br /&gt;
** Wheel motor: 4,5A&lt;br /&gt;
** Mowing motor: 22A&lt;br /&gt;
&lt;br /&gt;
* Tianchen TC-G158&lt;br /&gt;
** Wheel motor: 5,4A&lt;br /&gt;
** Mowing motor: 16A (both 32A)&lt;br /&gt;
&lt;br /&gt;
The measured current will only flow in 'worst-case' scenarios, which means when the motor starts or when it is blocked and it will only flow for a short time  (as your battery might not deliver the high current constantly, and so current and voltage will break down).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Current sensor =&lt;br /&gt;
To detect certain conditions (robot drives against obstacle, motor blocks etc.), the motor current should be monitored constantly. There are two approaches for sensing current.&lt;br /&gt;
&lt;br /&gt;
== Approach &amp;quot;Hall sensor module&amp;quot; ==&lt;br /&gt;
This is the recommended approach for sensing current. These current sensor modules are available for different current ranges.&lt;br /&gt;
&lt;br /&gt;
* ACS712ELC-05A (185mV/A, max. 5A)&lt;br /&gt;
* ACS712ELC-20A (100mV/A, max. 20A)&lt;br /&gt;
* ACS712ELC-30A (66mV/A, max. 30A)&lt;br /&gt;
* The lower the range, the more precise the measurement.&lt;br /&gt;
&lt;br /&gt;
== Approach &amp;quot;Shunt resistor (circuit)&amp;quot; ==&lt;br /&gt;
The current flows across a very small resistor (0.5 Ohm) and the voltage drop is measured&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File: L298n_module_circuit.jpg &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Further links=&lt;br /&gt;
#[http://www.ardumower.de/index.php/en/forum/maehwerk/74-10a-pwm-controller-modul-fuer-den-arduino 10A PWM controller module modification]&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	<entry>
		<id>https://wiki.ardumower.de/index.php?title=Datei:Magnetic_encoder.PNG&amp;diff=2814</id>
		<title>Datei:Magnetic encoder.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardumower.de/index.php?title=Datei:Magnetic_encoder.PNG&amp;diff=2814"/>
				<updated>2015-11-21T21:09:29Z</updated>
		
		<summary type="html">&lt;p&gt;Pierlau38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pierlau38</name></author>	</entry>

	</feed>