Note: Use the WIKI for latest informationen!
A lawn sensor should detect if the robot is still on lawn or not. In other words, it should find out if the media directly below the robot is still lawn or something else (air etc.). Therefore, a capacity sensor can be used as the media below the robot has influence on the capacity. No difference in capacity however is between lawn and flowers etc. - so you should have a distinct area around your lawn that is different to lawn (e.g. bark mulch).
A lawn sensor could be a copper plate in a closed plastic tube. To find out if the plate has contact with lawn, the capacity of this sensor is measured. If the robot is on lawn (lawn is 'dielectric'), the measured capacity increases slightly (by a few pF).
no lawn: ~0 pF
lawn: 1-4 pF
Front lawn sensor:
Arduino Mega Pin 40 Receive Front -------------|
Arduino Mega Pin 41 Send Front --- 2 MOhm --+---| Lawn
Back lawn sensor:
Arduino Mega Pin 42 Receive Back -------------|
Arduino Mega Pin 43 Send Back --- 2 MOhm --+---| Lawn
Initially, the copper plate is discharged by pulling the send pin to low. Then send pin is set to 'high' - via a resistor (2 Megaohm) the copper plate is charging slowly. By constantly reading input receiver pin, the Arduino measures the time until it becomes 'high' (capacity measurement). Because microcontrollers are fast and precise in time measurement, you can measure very low capacities with this.