This is my hobby lawm mower for my small yard. It is simplified as possible: it has only bumbers, and three motors + electronics.
The most of the parts are 3d-printed.
The mower prototype MK1 is powered with Makita 12V 1234-battery.
* Remote operation over Bluetooth (HC-05)
* Remote operation over IR-remote (LG soundbar - VS1838B)
* Zephyr RTOS kernel
* STM32 blue pill
* 2 x JSY-3720 worm gearm DC motors for left and right wheels with encoders
* 1 x XD-3420 - DC 12V 3000RPM for mower
* PID control for with feedback from the encoders to provide smooth ride
* 2 x Bumbers (micro switch)
This is probably my final update on the project, unless i get some new ideas. The final outcome is that the robot is not able to do the lawn without supervising.
Its not detecting the stone path with the lawn-detect-capasitance sensor 2) The hard spike wheels have zero friction on the stone path
The bumby ground causes robot to loose heading time to time
The stone path detection is issue, since without it i cannot use "random walk" type of thing that seems to be the way most of the commercial versions do the 'navigation'. I could add a perimeter wire (similar to ardumower) but that would be no fun.
Some cutting quality issues:
Corners (90-deg in): the robot just dont handle them in any sensible way. It would need some finer logic and detection for these
Borders: the current implementation drives until bumber hit, which is fine, but there will be always minor border with long grass, and its not looking nice.
The cutting edge rotation is not fast enough (3000rmp) for grass-cut trimmer naylon wire. And i am little bit too afraid to install metal blades there - since the 3000 rpm and 1y and 4y old kids does not sound like good combo.
Back support: i decided to do as simple as possible and used the slide-support (no rotation). Its ok, but its actually quite easily building some dirt to make block, that makes the wheels stress
Wheel attachment to the motors D-shaped axis: its just not working. The metal mounts i have - that are thightened with two tiny screws tend to get loose over time. Its not issue now, but it would be in long run (as the D-shape would slowly come O shape).
So as there are too many issues and too much else to do, i call this project done.
As final some comments:
The 12V in the end seems to be issue for all the motor -- maybe 24V would be better, or 18V. My 12V came from the Makita 1234 battery.
Zephyr seemed really good and worked fine. The documentation is somewhat sucky and the number of examples is quite low at this point of time, causing me usually grepping on the kernel source.
The STM32 Blue pill is amazing piece of HW with few dollars. With STM32 programmer its very good. Unfortunately at least on my case the few-dollar programmer did not have reset wire properly done. I was able to get the programming done without playing with reset by setting the stm32 to bootloader mode from UART.
Bluetooth/wireless uart/channel is must. It just works and makes life better.
Next time i wont do 'dead bug' style circuit board. Ever. I burned one board (shorting 5V and 12V) and ended up quite much wire mess in the end. Just do proto-board. And start with schematics, not with soldering.
I ended up buying new motors for the robot, as the old ones (JGY-370) seemed getting stuck too easily. The new ones are JGB-37 (aliexpress). They seems to be strong to move around without any trouble. I ordered them with 12V / 18.5RPM.
The another good thing is that the area of support for robot weight is larger - as they are mounted in different manner than the old ones.
I also did work with lawn detect sensor. The idea came from ardumower. I was able to get it working so that it was able to detect my hand pretty far away (with sensor being smoothie bottle cap, radius around 40mm). But when mounted to the real electronics the measurements were not too good. I used 75OHM tv-cable with shielding to reduce the noise but no luck. It still detects if the grass touches the sensor, but its not able to differentiate stone tiling from short grass. Which makes it pretty much useless in my scenario.
New version pushed to master, this one has support for ADC monitoring of the battery voltage and current sensor (with ACS712).
I also added new photos with full covers - 3d printed in 5 parts and hot glued together :D
The static back support radius and size got bigger as the robot got stuck constantly on my un-even yard. This new larger one made quite much better, but it still gets stuck. I ordered larger motors. Another option could be to make code somewhat handle the 'getting stuck' by trying to reverse, rotate, and retry or similar. But lets see how it goes with new motors --if-- when they arrive from China.
The mower blades got upgrade from "cutted from plastic food package" to steel bend-wire -- turns out that the food plastic package does not withstand 3000rpm with grass. Go figure.
I am also thinking of updating the drive logic - that currently tries to relay on nice 90deg turns and keeping 'almost perfect' track with wheels - to simpler and similar to what i observed on youtube. A 'grass detector' would be good but i think i could go with keeping x,y location tracking based on wheel rotation.