I think about building my own robotic mower, therefore I would like to detect if the surface the mower in moving on is grass, pavement, gravel ... etc.

Which sensors would be the best choice in order to achieve this?

The benefits:

  • no parimeter wire to bury
  • possible lawn edge detection (here most mowers fail to do a good job)

Sensors in lawn mover

You could try to use a force sensitive sensor to detect when grass blades touch it.

  • I like this "bumper" idea, as it can serve two purposes. Tiny force means grass (good). Big force means object (bad). No force (no grass).
    – Gerben
    Oct 15 '14 at 15:33
  • Yes and no ... you are mowing the grass and changing the surface the mower is detecting. But it might be a good indication for the mower to know if he already mowed this region ... as a complementary sensor not a bad idea at all.
    – Drejc
    Oct 16 '14 at 9:22

You may need to use a combination of sensors. I can't think of any single sensor that can reliably detect the different surfaces.

An IR sensor could detect the difference between grass (cooler) and pavement/gravel (warmer).

An ultrasonic ranging sensor could detect the difference in heights between the grass and pavement/gravel.

A photoelectric sensor could detect the difference in reflectivity between the grass and gravel/pavement.

A visual camera could be used with image processing to detect color differences, although this may be too processing intensive for an Arduino.

A final possibility would be measuring the resistance to movement of the wheels. The robot will travel easier over the hard surface of pavement/gravel.

I would think that a combination of the above sensors would provide the most reliability and accuracy. However, it will still likely be limited to one location without recalibration. The weather will even cause a change in some of the sensors (photoelectric for example on a sunny vs. cloudy day).

  • Definitely a sensor combination is the solution ... a camera detecting the greenish colour plus IR ... pattern detection is out of scope.
    – Drejc
    Oct 16 '14 at 9:17

A combination of colour sensors as the predominant one and proximity sensors as the secondary one should work fine. Around $10 so definitely worth trying out. Also, the code should be relatively easy.

Here are links as samples. I hope this helps :)

$6 colorvsensor

$4 Proximity sensor


I have found this DIY mower page (where they apparently already implemented a grass sensor). Grass sensor. Other useful info can also be found (mixed in english and german).

They are measuring the capacity of the underground in about 2cm (1inch) height.

On gravel or other hard material this is near 0 (as the sensor is in the air). On grass the value is higher.

Haven't though of this solution, should be the way to go.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.